{"version":3,"file":"chunk.441.095ffd79e5c94dc4cf21.js","names":["DESTROYING","WeakMap","DESTROYED","GlimmerComponent","constructor","owner","args","_defineProperty","this","set","isDestroying","get","isDestroyed","willDestroy","BaseComponentManager","createComponent","ComponentClass","named","getContext","component","CAPABILITIES","capabilities","destructor","asyncLifecycleCallbacks","updateHook","scheduledDestroyComponent","destroy","EmberGlimmerComponentManager","super","destroyComponent","schedule","Component","setOwner","setComponentManager","exports","hookCallback","some","hooks","apply","arguments","isArray","input","Array","Object","prototype","toString","call","isObject","hasOwnProp","a","b","hasOwnProperty","isObjectEmpty","obj","getOwnPropertyNames","length","k","isUndefined","isNumber","isDate","Date","map","arr","fn","i","res","arrLen","push","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","getParsingFlags","m","_pf","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidOffset","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","isValid$2","flags","parsedParts","isNowValid","_d","isNaN","getTime","invalidWeekday","_strict","undefined","bigHour","isFrozen","_isValid","createInvalid$1","NaN","fun","t","len","momentProperties","updateInProgress","copyConfig","to","from","prop","val","momentPropertiesLen","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","isValid","updateOffset","isMoment","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","arg","key","argLen","slice","join","Error","stack","deprecations","deprecateSimple","name","isFunction","Function","aliases","D","dates","date","d","days","day","e","weekdays","weekday","E","isoweekdays","isoweekday","DDD","dayofyears","dayofyear","h","hours","hour","ms","milliseconds","millisecond","minutes","minute","M","months","month","Q","quarters","quarter","s","seconds","second","gg","weekyears","weekyear","GG","isoweekyears","isoweekyear","w","weeks","week","W","isoweeks","isoweek","y","years","year","normalizeUnits","units","toLowerCase","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","isoWeekday","dayOfYear","weekYear","isoWeekYear","isoWeek","zeroFill","number","targetLength","forceSign","absNumber","Math","abs","zerosToFill","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","callback","func","localeData","removeFormattingTokens","match","replace","formatMoment","invalidDate","cacheKey","expandFormat","array","mom","output","replaceLongDateFormatTokens","longDateFormat","lastIndex","test","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","match1to2NoLeadingZero","match1to2HasZero","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","RegExp","regexEscape","matched","p1","p2","p3","p4","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","value","isFinite","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","_a","isLeapYear","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","parseTwoDigitYear","parseInt","indexOf","getSetYear","makeGetSet","unit","keepTime","set$1","get$2","isUTC","getUTCMilliseconds","getMilliseconds","getUTCSeconds","getSeconds","getUTCMinutes","getMinutes","getUTCHours","getHours","getUTCDate","getDate","getUTCDay","getDay","getUTCMonth","getMonth","getUTCFullYear","getFullYear","setUTCMilliseconds","setMilliseconds","setUTCSeconds","setSeconds","setUTCMinutes","setMinutes","setUTCHours","setHours","setUTCDate","setDate","setUTCFullYear","setFullYear","daysInMonth","modMonth","o","monthsShort","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","split","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","monthsParseProperties","handleStrictParse$1","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","min","setUTCMonth","getSetMonth","computeMonthsParse","cmpLenRev","shortP","longP","shortPieces","longPieces","mixedPieces","sort","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","shiftWeekdays","ws","n","concat","weekdaysMin","weekdaysShort","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","weekdayEnd","keys","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","weekdaysParseProperties","handleStrictParse","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","mergeConfigs","parentConfig","childConfig","Locale","relativeTimeWithoutPostformat","withoutSuffix","string","isFuture","_relativeTime","pastFutureWithoutPostformat","diff","createDate","createUTCDate","UTC","firstWeekOffset","dow","doy","fwd","dayOfYearFromWeeks","resYear","resDayOfYear","weekOfYearFromDayOfYear","resWeek","weekOffset","weeksInYear","weekOfYear","weekOfYearFromDate","round","weekOffsetNext","hFormat","lowercase","matchMeridiem","_meridiemParse","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","ww","MM","yy","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","loadLocale","normalizedName","oldLocale","module","_abbr","aliasedRequire","getSetGlobalLocale","values","data","getLocale","defineLocale","abbr","_config","parentLocale","forEach","x","names","j","next","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","l","allowTime","dateFormat","timeFormat","tzFormat","exec","isoDatesLen","isoTimesLen","configFromStringAndFormat","untruncateYear","yearStr","configFromRFC2822","parsedArray","monthStr","dayStr","hourStr","minuteStr","secondStr","result","weekdayStr","parsedInput","obsOffset","militaryOffset","numOffset","hm","defaults","c","currentDateArray","now","forWeek","hadWeekContext","weekContext","_isDefaultDatePartsForWeek","_getDefaultDateParts","configFromArray","currentDate","expectedWeekday","yearToUse","dateIsDefaulted","_defaultDatePartsNow","hasValue","temp","weekdayOverflow","curWeek","_week","_dayOfYear","_nextDay","_useUTC","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","isPm","meridiemHour","erasConvertYear","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","defaultDatePartsNow","configfLen","score","createFromInputFallback","dayOrDate","add","createLocal","useWeekDefaults","nowValue","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","duration","unitHasDecimal","orderLen","parseFloat","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","parts","matches","cloneWithOffset","model","clone","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","ret","diffRes","base","parseIso","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract$1","isAdding","invalid","add$1","subtract$1","isString","String","isMomentInput","arrayTest","dataTypeTest","filter","item","objectTest","propertyTest","properties","propertyLen","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod","dividend","divisor","localStartOfDate","utcStartOfDate","matchEraAbbr","erasAbbrRegex","computeErasParse","erasName","erasAbbr","erasNarrow","abbrPieces","namePieces","narrowPieces","eras","narrow","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getter","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","eraYearOrdinalParse","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetMillisecond","getSetSecond","parseMs","proto$2","preParsePostFormat","time","formats","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","startOfDate","inputString","postformat","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","priority","prioritizedLen","subtract","toArray","toObject","toDate","toISOString","keepOffset","inspect","prefix","suffix","zone","isLocal","Symbol","for","toJSON","unix","creationData","eraName","since","until","eraNarrow","eraAbbr","eraYear","dir","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","isDSTShifted","_isDSTShifted","array1","array2","lengthDiff","diffs","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","_calendar","_longDateFormat","formatUpper","toUpperCase","formatCache","_longDateFormatCache","tok","_invalidDate","_ordinal","pastFuture","source","_eras","isFormat","standalone","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","charAt","isLower","langData","mathAbs","addSubtract","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","substituteTimeAgo","posNegDuration","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto","monthsFromDays","argWithSuffix","argThresholds","withSuffix","th","toIsoString","version","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","deferred","decorateFieldV2","decorators","initializer","desc","configurable","enumerable","writable","decorator","defineProperty","Map","decorateMethodV2","getOwnPropertyDescriptor","initializeDeferredDecorator","target","cursor","getPrototypeOf","decorateClass","reduce","accum","ClassBasedModifierManager","createModifier","modifierClass","instance","element","installModifier","createdState","state","installedState","modify","positional","updateModifier","destroyModifier","ClassBasedModifier","setModifierManager","MANAGER","teardown","getDebugName","getDebugInstance","modifier","options","iconNames","COLORS","HdsIconColorValues","NAMES","HdsIcon","guidFor","includes","assert","isInline","predefinedColor","color","fillColor","size","HdsIconSizeValues","Sixteen","svgSize","width","stretched","height","title","role","ariaLabelledby","_titleId","classNames","classes","_HdsIcon","setComponentTemplate","createTemplateFactory","id","block","moduleName","isStrictMode","SIZES","HdsTextSizeValues","ThreeHundred","TwoHundred","OneHundred","DEFAULT_SIZE","DEFAULT_WEIGHT","HdsTextWeightValues","Regular","WEIGHTS_PER_SIZE","Medium","Semibold","HdsTextBody","weight","weights","_HdsTextBody","scope","HdsText","_hdsIntl","HdsTHelper","Helper","compute","isPresent","hdsIntl","_HdsTHelper","g","service","CONSOLE_LEVELS","originalConsoleMethods","consoleSandbox","GLOBAL_OBJ","wrappedFuncs","wrappedLevels","level","originalConsoleMethod","logger","carrier","getGlobalSingleton","enabled","enable","disable","isEnabled","DEBUG_BUILD","addNonEnumerableProperty","o_O","log","markFunctionWrapped","wrapped","original","convertToPlainObject","isError","message","getOwnProperties","isEvent","newObj","type","serializeEventTarget","currentTarget","CustomEvent","isInstanceOf","detail","isElement","browser","htmlTreeAsString","_oO","extractedProps","property","_dropUndefinedKeys","inputValue","memoizationMap","isPlainObject","memoVal","returnValue","exception","maxLength","firstKey","truncate","includedKeys","serialized","replacementFactory","__sentry_original__","wat","objectified","isPrimitive","getCurrentScope","getMainCarrier","getAsyncContextStrategy","carrier$1","getClient","Scope","getIsolationScope","propagationContext","getPropagationContext","traceId","parentSpanId","propagationSpanId","object","dropUndefinedKeys","trace_id","span_id","generateSpanId","parent_span_id","rest","acs","isolationScope","withSetIsolationScope","withIsolationScope","withSetScope","withScope","isArrayable","thing","isPromiseLike","then","asArray","maybeArray","_asArray","isExtensible","Set","WeakSet","content","EmberObject","iterator","__SENTRY_DEBUG__","globalThis","objectToString","isBuiltin","className","isParameterizedString","_e","Element","Event","Boolean","__isVue","_isVue","debug","require","MAX_LENGTH","MAX_SAFE_INTEGER","safeRe","re","parseOptions","compareIdentifiers","SemVer","loose","includePrerelease","TypeError","trim","LOOSE","FULL","raw","major","minor","patch","prerelease","num","build","compare","compareMain","comparePre","compareBuild","inc","release","identifier","identifierBase","startsWith","PRERELEASELOOSE","PRERELEASE","Number","isPrereleaseIdentifier","identifiers","prereleaseBase","HdsButtonSizeValues","HdsButtonColorValues","ICON_POSITIONS","HdsButtonIconPositionValues","DEFAULT_COLOR","Primary","DEFAULT_ICON_POSITION","Leading","HdsButton","text","icon","isIconOnly","iconPosition","iconSize","isFullWidth","_HdsButton","HdsInteractive","eq","hasShownSpanDropWarning","convertSpanLinksForEnvelope","links","context","spanId","traceFlags","restContext","attributes","sampled","spanTimeInputToSeconds","ensureTimestampInSeconds","timestampInSeconds","timestamp","spanToJSON","span","getSpanJSON","spanContext","castSpan","startTime","endTime","status","description","start_timestamp","getStatusMessage","op","SEMANTIC_ATTRIBUTE_SENTRY_OP","origin","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","spanIsSampled","code","SPAN_STATUS_UNSET","SPAN_STATUS_OK","CHILD_SPANS_FIELD","ROOT_SPAN_FIELD","childSpan","rootSpan","getActiveSpan","_getSpanForScope","currentScopes","resultSet","addSpanChildren","has","childSpans","delete","isRemote","getCapturedScopesOnSpan","generateSentryTraceHeader","updateName","setAttributes","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME","WINDOW","core","ignoreOnError","ignoreNextOnError","setTimeout","wrap","wrapper","__sentry_wrapped__","getOriginalFunction","sentryWrapped","wrappedArguments","ex","addEventProcessor","event","mechanism","addExceptionTypeValue","addExceptionMechanism","extra","captureException","DidInsertModifier","disableAutoTracking","_state","HdsYield","templateOnly","click","linkToExternal","isHrefExternal","isRouteExternal","_HdsInteractive","hdsLinkToModels","hdsLinkToQuery","LinkTo","on","installedIntegrations","setupIntegration","client","integration","integrationIndex","setupOnce","setup","preprocessEvent","bind","hint","processEvent","processor","assign","debugBuild","addIntegration","integrations","afterAllSetup","defaultIntegrations","userIntegrations","isDefaultInstance","resolvedUserIntegrations","integrationsByName","currentInstance","existingInstance","LAYOUT_TYPES","HdsFormFieldLayoutValues","HdsFormField","_HdsFormField","registerAriaDescriptionElement","unregisterAriaDescriptionElement","layout","getElementId","isRequired","isOptional","contextualClass","hash","HdsFormLabel","HdsFormHelperText","HdsFormCharacterCount","HdsFormError","ariaDescribedBy","dateTimestampInSeconds","performance","approxStartingTimeOrigin","timeOrigin","cachedTimeOrigin","performanceNow","dateNow","timeOriginDelta","timeOriginIsReliable","navigationStart","timing","navigationStartDelta","getFirstException","SEMVER_REGEXP","_parseInt","lines","frame","linesOfContext","lineno","maxLines","sourceLine","pre_context","line","snipLine","lineIndex","context_line","colno","post_context","newMechanism","firstException","currentMechanism","handled","mergedData","__sentry_captured__","err","event_id","eventId","buildmetadata","crypto","gbl","msCrypto","getRandomByte","random","randomUUID","getRandomValues","typedArray","Uint8Array","_","SPACE_CHARACTERS","Range","range","Comparator","formatted","r","parseRange","first","isNullSet","isAny","comps","BUILDSTRIPRE","memoKey","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","cached","cache","hr","HYPHENRANGELOOSE","HYPHENRANGE","hyphenReplace","COMPARATORTRIM","comparatorTrimReplace","TILDETRIM","tildeTrimReplace","CARETTRIM","caretTrimReplace","rangeList","comp","parseComparator","replaceGTE0","COMPARATORLOOSE","rangeMap","comparators","intersects","thisComparators","isSatisfiable","rangeComparators","every","thisComparator","rangeComparator","er","testSet","src","BUILD","remainingComparators","testComparator","pop","otherComparator","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","replaceTilde","TILDELOOSE","TILDE","z","p","pr","replaceCaret","CARETLOOSE","CARET","replaceXRange","XRANGELOOSE","XRANGE","gtlt","invalidXRangeOrder","xM","xm","xp","anyX","STAR","GTE0PRE","GTE0","incPr","$0","fM","fm","fp","fpr","fb","tM","tm","tp","tpr","semver","ANY","allowed","Cache","store","misses","hits","purge","clear","STRINGS","setStrings","strings","getStrings","getString","STRING_DASHERIZE_REGEXP","STRING_DASHERIZE_CACHE","decamelize","STRING_CAMELIZE_REGEXP_1","STRING_CAMELIZE_REGEXP_2","CAMELIZE_CACHE","_match","_separator","chr","STRING_CLASSIFY_REGEXP_1","STRING_CLASSIFY_REGEXP_2","STRING_CLASSIFY_REGEXP_3","CLASSIFY_CACHE","str","replace1","replace2","initialChar","STRING_UNDERSCORE_REGEXP_1","STRING_UNDERSCORE_REGEXP_2","UNDERSCORE_CACHE","STRING_CAPITALIZE_REGEXP","CAPITALIZE_CACHE","STRING_DECAMELIZE_REGEXP","DECAMELIZE_CACHE","dasherize","camelize","classify","underscore","capitalize","getSentryCarrier","__SENTRY__","SDK_VERSION","creator","forEachEnvelopeItem","envelope","envelopeItems","envelopeItem","encodeUTF8","worldwide","encodePolyfill","TextEncoder","encode","ITEM_TYPE_TO_DATA_CATEGORY_MAP","session","sessions","attachment","transaction","client_report","user_report","profile","profile_chunk","replay_event","replay_recording","check_in","feedback","raw_security","otel_log","newItem","headers","items","buffer","filename","content_type","contentType","attachment_type","attachmentType","sdkInfo","tunnel","dsn","dynamicSamplingContext","sdkProcessingMetadata","sent_at","sdk","dsnToString","dsn$1","trace","spanJson","types","metadataOrEvent","env","readBinary","bin","subarray","readJson","JSON","parse","decodePolyfill","TextDecoder","decode","envelopeHeader","itemHeader","binaryLength","envHeaders","stringify","append","itemHeaders","payload","stringifiedPayload","normalize","buffers","totalLength","acc","buf","merged","freeGlobal","freeSelf","self","root","DEFAULT_TYPE","HdsFormTextInputTypeValues","Text","TYPES","HdsFormTextInputBase","isInvalid","hasVisibilityToggle","isLoading","_HdsFormTextInputBase","style","isMatchingPattern","pattern","requireExactStringMatch","is","isRegExp","delimiter","isVueViewModel","newLine","lineLength","start","end","testString","patterns","FROZEN_DSC_FIELD","getDynamicSamplingContextFromClient","getOptions","publicKey","public_key","getDsn","dsc","environment","DEFAULT_ENVIRONMENT","emit","getDynamicSamplingContextFromSpan","getRootSpan","rootSpanJson","rootSpanAttributes","traceState","rootSpanSampleRate","SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE","applyLocalSampleRateToDsc","sample_rate","frozenDsc","traceStateDsc","dscOnTraceState","baggage","baggageHeaderToDynamicSamplingContext","semanticAttributes","hasSpansEnabled","sample_rand","utils","sampleRand","spanWithMaybeDsc","dynamicSamplingContextToSentryBaggageHeader","isLength","equals","TrackedArray","iterable","mapfn","thisArg","of","reactive","trackedArray","Proxy","setPrototypeOf","mapConfig","weakMapConfig","TrackedMap","existing","trackedMap","Reflect","TrackedWeakMap","trackedWeakMap","setConfig","weakSetConfig","TrackedSet","trackedSet","TrackedWeakSet","trackedWeakSet","TrackedObjectImplementation","fromEntries","entries","TrackedObject","_TrackedObjectImplementation_brand","_classPrivateFieldInitSpec","_storages","_collection","createStorage","descs","getOwnPropertyDescriptors","create","_readStorageFor","ownKeys","getValue","_dirtyStorageFor","_dirtyCollection","deleteProperty","storage","_classPrivateFieldGet","setValue","TrackedStorageImpl","initialValue","isEqual","_value","_lastValue","_isEqual","tripleEq","lastValue","_TrackedStorageImpl","tracked","esc","default","glimmerTracked","_id","candidateSelectors","candidateSelector","NoElement","msMatchesSelector","webkitMatchesSelector","getRootNode","ownerDocument","getCandidates","el","includeContainer","candidates","querySelectorAll","unshift","getCandidatesIteratively","elements","elementsToCheck","tagName","assigned","assignedElements","nestedCandidates","children","flatten","shadowRoot","getShadowRoot","validShadowRoot","shadowRootFilter","_nestedCandidates","getTabindex","node","isScope","tabIndex","isContentEditable","getAttribute","sortOrderedTabbables","documentOrder","isInput","isZeroArea","_node$getBoundingClie","getBoundingClientRect","isNodeMatchingSelectorFocusable","disabled","_ref","displayCheck","getComputedStyle","visibility","nodeUnderDetails","parentElement","nodeRootHost","host","nodeIsAttached","contains","originalNode","rootNode","assignedSlot","getClientRects","child","parentNode","isNodeMatchingSelectorTabbable","radioSet","radioScope","form","queryRadios","window","CSS","escape","error","checked","nodes","isValidShadowRootTabbable","shadowHostNode","sortByOrder","regularTabbables","orderedTabbables","candidateTabindex","sortable","tabbable","isTabbable","focusableCandidateSelector","isFocusable","trapQueue","activeFocusTraps","activateTrap","trap","activeTrap","pause","trapIndex","splice","deactivateTrap","unpause","delay","findIndex","idx","valueOrHandler","_len","params","_key","getActualTarget","composedPath","createFocusTrap","userOptions","doc","document","_objectSpread2","returnFocusOnDeactivate","escapeDeactivates","delayInitialFocus","containers","containerGroups","tabbableGroups","nodeFocusedBeforeActivation","mostRecentlyFocusedNode","active","paused","delayInitialFocusTimer","getOption","configOverrideOptions","optionName","configOptionName","findContainerIndex","container","tabbableNodes","find","getNodeForOption","optionValue","_len2","_key2","querySelector","getInitialFocusNode","activeElement","firstTabbableGroup","firstTabbableNode","updateTabbableNodes","tabbableOptions","focusableNodes","lastTabbableNode","nextTabbableNode","forward","nodeIdx","reverse","group","tryFocus","focus","preventScroll","select","getReturnFocusNode","previousActiveElement","checkPointerDown","clickOutsideDeactivates","deactivate","returnFocus","allowOutsideClick","preventDefault","checkFocusIn","targetContained","Document","stopImmediatePropagation","checkKey","keyCode","destinationNode","containerIndex","containerGroup","shiftKey","startOfGroupIndex","_ref2","destinationGroupIndex","lastOfGroupIndex","_ref3","_destinationGroupIndex","checkClick","addListeners","addEventListener","capture","passive","removeListeners","removeEventListener","activate","activateOptions","onActivate","onPostActivate","checkCanFocusTrap","finishActivation","deactivateOptions","onDeactivate","onPostDeactivate","checkCanReturnFocus","clearTimeout","finishDeactivation","updateContainerElements","containerElements","elementsAsArray","cap","focusTrap","focusTrapOptions","isActive","isPaused","shouldSelfFocus","additionalElements","_createFocusTrap","initialFocus","createFocusTrap$1","uuid4","substring","arrayLikeKeys","baseKeys","isArrayLike","AtRule","Root","Rule","Comment","Declaration","Node","isClean","my","Container","proxyOf","last","markDirty","cleanRaws","keepBetween","each","getIterator","indexes","condition","lastEach","getProxyProcessor","toProxy","cb","insertAfter","exist","existIndex","insertBefore","sample","parent","removeChild","selector","selectors","rebuild","raws","before","prepend","removeAll","replaceValues","opts","walkDecls","decl","props","fast","walk","addToError","opened","walkAtRules","walkComments","walkRules","registerParse","dependant","registerRule","registerAtRule","registerRoot","VersionCheck","Regex","bit","ccBits","mode","dataStr","testNumeric","NUMERIC","testAlphanumeric","ALPHANUMERIC","testKanji","KANJI","BYTE","defaultValue","HdsFormCheckboxBase","v","DEFAULT_WEIGHTS_PER_SIZE","FiveHundred","Bold","FourHundred","HdsTextDisplay","_HdsTextDisplay","WEBPACK_ERROR_REGEXP","STRIP_FRAME_REGEXP","createStackParser","parsers","sortedParsers","skipFirstLines","framesToPop","frames","cleanedLine","parser","stripSentryFramesAndReverse","localStack","getLastStackFrame","function","defaultFunctionName","stacktrace","stackParser","DSN_REGEX","dsnFromString","protocol","pass","port","lastPath","path","projectId","projectMatch","dsnFromComponents","components","withPassword","observe","PerformanceObserver","supportedEntryTypes","po","list","Promise","resolve","getEntries","buffered","baseIsNative","throwErrors","_resizing","_transientDelta","_isUpdateQueued","_lastPointerEvent","HdsAdvancedTableThResizeHandle","_handleElement","_boundResize","_resize","_boundStopResize","_stopResize","currentWidthInPixels","column","onGetAppliedWidth","pixelWidth","parsePixel","measureColumnWidth","minWidthInPixels","minWidth","DEFAULT_MIN_WIDTH","maxWidthInPixels","explicitMax","maxWidth","table","closest","HTMLElement","offsetWidth","widthValueText","tableHeight","BORDER_WIDTH","resizing","onColumnResize","_finishColumnResize","columnKey","onCommitColumnWidths","onResetTransientColumnWidths","requestAnimationFrameWaiter","handleKeydown","stopPropagation","onBeginColumnResize","onResizeColumnByDelta","deltaX","scrollIntoView","behavior","inline","queueMicrotask","startResize","button","startX","clientX","_HdsAdvancedTableThResizeHandle","action","_dragSide2","_isUpdateQueued2","HdsAdvancedTableThReorderDropTarget","_element","_getDragSide","rect","left","HdsAdvancedTableColumnReorderSideValues","Left","Right","isBeingDragged","draggedColumnKey","isDraggingOver","reorderHoveredColumnKey","isFirstColumn","isLastColumn","hasSelectableRows","_dragSide","handleDragOver","draggedColumnSiblingColumnKeys","onSetReorderHoveredColumnKey","previous","dragSide","handleDrop","onReorderDrop","_HdsAdvancedTableThReorderDropTarget","ALIGNMENTS","HdsAdvancedTableHorizontalAlignmentValues","DEFAULT_ALIGN","_shouldTrapFocus","_reorderHandleElement","_resizeHandleElement","HdsAdvancedTableTh","didInsertExpandButton","willDestroyExpandButton","newLabel","rowspan","colspan","isStickyColumn","_labelId","isSortable","firstColumnKey","isFirstNonStickyColumn","firstNonStickyColumnKey","lastColumnKey","tableHasColumnBeingDragged","isColumnBeingDragged","ariaSort","sortOrder","HdsAdvancedTableThSortOrderValues","Asc","HdsAdvancedTableThSortOrderLabelValues","Desc","None","align","paddingLeft","depth","isStickyColumnPinned","showDropTarget","showResizeHandle","hasResizableColumns","onFocusTrapDeactivate","enableFocusTrap","getInitialFocus","focusable","focusReorderHandle","resetTransientColumnWidths","getAppliedWidth","setDraggedColumnKey","onSetDraggedColumnKey","stepColumn","step","onStepColumn","setElement","scheduleOnce","_HdsAdvancedTableTh","HdsAdvancedTableCellModifier","hdsScrollIntoViewOnFocus","HdsLayoutFlex","and","not","HdsAdvancedTableThButtonExpand","HdsAdvancedTableThButtonTooltip","HdsAdvancedTableThButtonSort","HdsAdvancedTableThContextMenu","HdsAdvancedTableThReorderHandle","_isSelected","HdsAdvancedTableThSelectable","_guid","checkbox","didInsert","selectionKey","onClickSortBySelected","ariaLabel","selectionAriaLabelSuffix","defaultString","sortBySelectedOrder","onSelectionChange","_HdsAdvancedTableThSelectable","isSelected","_isSelectedOverride","HdsAdvancedTableTr","isSelectedOverride","isSelectable","selectionScope","isLastRow","isParentRow","displayRow","cells","columnOrder","orderedCells","hasReorderableColumns","cell","_HdsAdvancedTableTr","DENSITIES","HdsAdvancedTableDensityValues","DEFAULT_DENSITY","VALIGNMENTS","HdsAdvancedTableVerticalAlignmentValues","DEFAULT_VALIGN","Top","DEFAULT_SCROLL_DIMENSIONS","bottom","right","_hdsIntl2","_selectAllCheckbox","_isSelectAllCheckboxSelected","_tableHeight","_scrollIndicatorDimensions","_isStickyColumnPinned","_isStickyHeaderPinned","_hasPinnedFirstColumn","_reorderedMessageText","_showScrollIndicatorLeft","_showScrollIndicatorRight","_showScrollIndicatorTop","_showScrollIndicatorBottom","_stickyColumnOffset","_currentSortBy","_currentSortOrder","HdsAdvancedTable","_scrollWrapperElement","updateHorizontalScrollIndicators","showScrollIndicatorRight","clientWidth","scrollWidth","updateBottomScrollIndicator","reorderHandleOverflow","firstHandle","_theadElement","offsetHeight","showScrollIndicatorBottom","scrollHeight","clientHeight","_scrollHandler","_updateScrollIndicators","_dragOverHandler","firstReorderDropTarget","stickyColumnHeaders","lastStickyColumnHeader","leftVisibleEdge","leftScrollTrigger","rightScrollTrigger","scrollBy","updateMeasurements","newTableHeight","newDimensions","getScrollIndicatorDimensions","scrollWrapper","theadElement","hasStickyFirstColumn","horizontalScrollBarHeight","verticalScrollBarWidth","leftOffset","requestAnimationFrame","setUpdatedMeasurements","isSameBottom","scrollIndicatorDimensions","isSameHeight","isSameLeft","isSameRight","stickyColumnOffset","getStickyColumnLeftOffset","hasRowSelection","selectableCell","_resizeObserver","ResizeObserver","disconnect","sortBy","currentSortBy","currentSortOrder","newOrder","insertedAt","reorderedMessageText","newPosition","translatedReorderedMessageText","label","columnLabel","onColumnReorder","hasPinnedFirstColumn","_runAssertions","_initializeExpandedRows","childrenKey","hasRowsWithChildren","record","expandableRowIds","ids","collect","isAllExpanded","expandedRowIds","sortCriteria","columns","currentColumn","sortingFunction","isEmpty","identityKey","sortedMessageText","isStriped","density","hasStickyHeader","maxHeight","valign","theadClassNames","isStickyHeaderPinned","traverse","isOpen","sortableColumns","sortableColumnLabels","onSelectionChangeCallback","selectionCheckboxElement","selectedRowsKeys","_selectableRows","row","selectableRowsStates","toggleExpandAll","allIds","toggleRow","rowId","onSelectionAllChange","_isBulkSelectionChange","dispatchEvent","bubbles","onSelectionRowChange","setSelectAllState","didInsertSelectAllCheckbox","willDestroySelectAllCheckbox","didInsertRowCheckbox","willDestroyRowCheckbox","selectableRowsCount","selectedRowsCount","indeterminate","setSortBy","onSort","newSortOrder","scrollLeft","showScrollIndicatorLeft","rightEdge","scrollTop","showScrollIndicatorTop","bottomEdge","_HdsAdvancedTable","HdsFilterBar","HdsAdvancedTableColumnManager","Composite","notEq","HdsAdvancedTableBody","HdsAdvancedTableTd","HdsApplicationState","HdsStepperStatusesValues","Incomplete","Progress","Processing","Complete","HdsStepperStatusToIconsValues","HdsStepperStatusToSrOnlyText","HdsStepperTitleTagValues","Div","H1","H2","H3","H4","H5","H6","HdsStepperNavStatusesValues","Active","HdsStepperNavStatusToIndicatorStatus","HdsStepperNavStatusToSrOnlyText","HdsBadgeSizeValues","HdsBadgeTypeValues","HdsBadgeColorValues","Filled","Neutral","HdsBadge","_HdsBadge","DEFAULT_POSITION","HdsDropdownPositionValues","BottomRight","POSITIONS","HdsDropdown","toggleButtonId","setAttribute","listPosition","enableCollisionDetection","matchToggleWidth","anchoredPositionOptions","placement","HdsDropdownPositionToPlacementValues","offsetOptions","boundary","classNamesContent","_HdsDropdown","HdsPopoverPrimitive","HdsDropdownToggleButton","HdsDropdownToggleIcon","or","HdsDropdownHeader","HdsDropdownListItemCheckbox","HdsDropdownListItemCheckmark","HdsDropdownListItemCopyItem","HdsDropdownListItemDescription","HdsDropdownListItemGeneric","HdsDropdownListItemInteractive","HdsDropdownListItemRadio","HdsDropdownListItemSeparator","HdsDropdownListItemTitle","HdsDropdownFooter","DEFAULT_DIRECTION","HdsLayoutFlexDirectionValues","Row","DIRECTIONS","JUSTIFYS","HdsLayoutFlexJustifyValues","ALIGNS","HdsLayoutFlexAlignValues","DEFAULT_GAP","HdsLayoutFlexGapValues","Zero","GAPS","componentTag","tag","justify","gap","_HdsLayoutFlex","HdsLayoutFlexItem","waiter","buildWaiter","beginAsync","endAsync","descendant","pixelToNumber","px","isPixelSize","HdsTableDensityValues","Default","Short","Tall","HdsTableHorizontalAlignmentValues","Center","HdsTableScopeValues","Col","HdsTableThSortOrderIconValues","ArrowDown","ArrowUp","SwapVertical","HdsTableThSortOrderLabelValues","HdsTableThSortOrderValues","HdsTableVerticalAlignmentValues","Baseline","Middle","getSpanStatusFromHttpCode","httpStatus","spanStatus","setStatus","maybeOptions","__SENTRY_TRACING__","tracesSampleRate","tracesSampler","hasTracingEnabled","maxProperties","visit","ERROR","memo","inner","memoize","unmemoize","stringified","_events","global","isSyntheticEvent","getFunctionName","objName","__sentry_skip_normalization__","remainingDepth","__sentry_override_normalization_depth__","valueWithToJSON","normalized","numAdded","visitable","visitKey","visitValue","normalizeToSize","maxSize","encodeURI","url","basePath","escapedBase","newUrl","decodeURI","_Oo","States","PENDING","RESOLVED","REJECTED","SyncPromise","executor","_handlers","_runExecutor","onfulfilled","onrejected","reject","reason","_executeHandlers","catch","finally","onfinally","isRejected","cachedHandlers","handler","setResult","isThenable","bindReporter","metric","reportAllChanges","prevValue","delta","forceReport","rating","getRating","initMetric","navEntry","getNavigationEntry","navigationType","prerendering","getActivationStart","wasDiscarded","generateUniqueID","onHiddenOrPageHide","visibilityState","getRawTag","symToStringTag","toStringTag","isSymbol","toSJISFunction","CODEWORDS_COUNT","digit","f","kanji","HdsAdvancedTableScopeValues","HdsAdvancedTableThExpandIconValues","ChevronUp","ChevronDown","UnfoldOpen","UnfoldClose","HdsAdvancedTableThSortOrderIconValues","ID_PREFIX","NOOP","controlId","onInsert","_HdsFormHelperText","_HdsFormLabel","HdsFormIndicator","onRemove","_HdsFormError","HdsFormErrorMessage","HdsFormSelectBase","_HdsFormSelectBase","HdsFormRadioBase","HdsAppSideNavListItem","DEFAULT_TAG","HdsFormHeaderTitleTagValues","TAGS","HdsFormHeaderTitle","_HdsFormHeaderTitle","HdsFormHeaderDescription","HdsFormFieldsetLayoutValues","HdsFormFieldset","_HdsFormFieldset","Vertical","HdsFormLegend","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","safeSrc","R","LETTERDASHNUMBER","safeRegexReplacements","createToken","isGlobal","safe","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","BUILDIDENTIFIER","MAINVERSION","FULLPLAIN","MAINVERSIONLOOSE","LOOSEPLAIN","XRANGEIDENTIFIER","XRANGEIDENTIFIERLOOSE","GTLT","XRANGEPLAIN","XRANGEPLAINLOOSE","COERCEPLAIN","COERCE","COERCEFULL","LONETILDE","LONECARET","DidUpdateModifier","untrack","WillDestroyModifier","buildTask","contextFn","taskName","bufferPolicyName","optionsWithBufferPolicy","TaskFactory","generator","createTask","EmberYieldable","Yieldable","_deferable","EMBER_ENVIRONMENT","defer","TimeoutYieldable","onYield","timerId","later","cancel","timeout","taskFromPropertyDescriptor","descriptor","factoryClass","TaskFactory$1","taskFn","displayName","tasks","factory","_setupEmberKVO","task","taskGroupPropertyDescriptor","_target","_descriptor","taskGroups","createTaskGroup","decoratorWithParams","descriptorFn","possibleDesc","createDecorator","baseOptions","mergedOptions","createTaskDecorator","createTaskGroupDecorator","lastInstance","lastSuccessful","lastValue$1","dropTask","drop","enqueueTask","enqueue","keepLatestTask","keepLatest","restartableTask","restartable","taskGroup","dropTaskGroup","enqueueTaskGroup","keepLatestTaskGroup","restartableTaskGroup","taskFnOrProtoOrDecoratorOptions","isDecoratorOptions","taskDecorator","taskProperty","taskComputed","taskFactorySymbol","setTaskDefinition","TaskProperty","possibleDecoratorOptions","taskGroupDecorator","setName","TaskGroupProperty","possibleOptions","perform","all","taskAwareVariantOf","RSVP","identity","allSettled","race","Promise$1","getValues","hashSettled","castForPromiseHelper","castable","TaskInstance","asyncErrorsHandled","_toPromise","method","getItems","awaitable","awaitables","arrOrHash","hasCancelled","cancelAll","it","cancelableSymbol","promise","WaitForQueueYieldable","queueName","throw","WaitForEventYieldable","eventName","usesDOMEvents","off","disposer","WaitForPropertyYieldable","predicateCallback","observerBound","observerFn","addObserver","removeObserver","waitForQueue","waitForEvent","one","waitForProperty","handlers","instrumented","instrumentFn","typeHandlers","sentry","getStackAsyncContextStrategy","strategy","registry","_notifyingListeners","_scopeListeners","_eventProcessors","_breadcrumbs","_attachments","_user","_tags","_extra","_contexts","_sdkProcessingMetadata","_propagationContext","generateTraceId","newScope","_level","_session","_transactionName","_fingerprint","_client","_lastEventId","_setSpanForScope","spanOnScope","setClient","setLastEventId","lastEventId","addScopeListener","setUser","user","email","ip_address","username","updateSession","_notifyScopeListeners","getUser","setTags","tags","setTag","setExtras","extras","setExtra","setFingerprint","fingerprint","setLevel","setTransactionName","setContext","setSession","getSession","update","captureContext","scopeToMerge","scopeInstance","getScopeData","contexts","setPropagationContext","addBreadcrumb","breadcrumb","maxBreadcrumbs","maxCrumbs","mergedBreadcrumb","recordDroppedEvent","getLastBreadcrumb","clearBreadcrumbs","addAttachment","clearAttachments","breadcrumbs","attachments","eventProcessors","transactionName","setSDKProcessingMetadata","newData","merge","syntheticException","originalException","captureMessage","captureEvent","SCOPE_SPAN_FIELD","SCOPE_ON_START_SPAN_FIELD","ISOLATION_SCOPE_ON_START_SPAN_FIELD","sampleRate","rate","SENTRY_BAGGAGE_KEY_PREFIX","SENTRY_BAGGAGE_KEY_PREFIX_REGEX","parseBaggageHeader","baggageHeader","curr","currBaggageObject","baggageHeaderToObject","baggageEntry","keyOrValue","decodeURIComponent","objectToBaggageHeader","objectKey","objectValue","currentIndex","encodeURIComponent","newBaggageHeader","baggageObject","dscKey","dscValue","activationStart","insertToFlagBuffer","flag","flagContext","flagBuffer","scopeContexts","objectProto","Ctor","baseMatches","baseMatchesProperty","DataView","baseGetTag","toSource","mapTag","promiseTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ArrayBuffer","ctorString","isKey","stringToPath","assignValue","baseAssignValue","customizer","isNew","newValue","LazyResult","Processor","keepBefore","ignore","toResult","registerLazyResult","registerProcessor","satisfies","HdsTextColorValues","Strong","Faint","Disabled","HighContrast","Action","ActionHover","ActionActive","Highlight","HighlightOnSurface","HighlightHighContrast","Success","SuccessOnSurface","SuccessHighContrast","Warning","WarningOnSurface","WarningHighContrast","Critical","CriticalOnSurface","CriticalHighContrast","HdsTextAlignValues","HdsTextGroupValues","Code","Display","Body","TYPE_CANCELLED","TYPE_STARTED","STARTED","stubFalse","freeExports","nodeType","freeModule","Buffer","isBuffer","FindAll","Request","_records","__WRAPPED_FUNCTION__","modelName","records","findAll","_FindAll","IdRequiredError","IdTypeError","FindRecord","_record","findRecord","_FindRecord","waitFor","Query","query","_Query","QueryRecord","queryRecord","_QueryRecord","variant","customColor","_HdsText","NUMERICAL_SELECTORS","HdsFilterBarNumericalFilterSelectorValues","NUMERICAL_SELECTORS_TEXT","lessThan","lessThanOrEqualTo","equalTo","greaterThanOrEqualTo","greaterThan","between","NUMERICAL_SELECTORS_INPUT_TEXT","_selectorInputValue","_valueInputValue","_betweenValueStartInputValue","_betweenValueEndInputValue","HdsFilterBarFilterGroupNumerical","updateFilter","_updateFilter","onChange","_isFormCompleted","addFilter","keyFilterData","keyFilter","betweenValueStart","betweenValueEnd","stringValue","stringBetweenValueStart","stringBetweenValueEnd","_HdsFilterBarFilterGroupNumerical","HdsFilterBarFilterGroupGeneric","HdsFormSelectField","_HdsFilterBarFilterGroupGeneric","currentLength","_pluralize","count","noun","minLength","remaining","shortfall","messageText","_HdsFormCharacterCount","DATE_SELECTORS","HdsFilterBarDateFilterSelectorValues","DATE_SELECTORS_TEXT","exactly","after","DATE_SELECTORS_INPUT_TEXT","DATE_FILTER_GROUP_TYPES","HdsFilterBarFilterGroupDateTypeValues","HdsFilterBarFilterGroupDate","inputType","selectorLabelText","_HdsFilterBarFilterGroupDate","_isOpen","_isClosing","_anchoredPositionOptions","enableSoftEvents","enableClickEvents","_containerElement","registerEvent","onMouseEnter","onMouseLeave","onFocusIn","onFocusOut","_toggleElement","HTMLButtonElement","_linkToggleAndPopover","removeAttribute","_positional","_popoverElement","popover","showPopover","onBeforeTogglePopover","onTogglePopover","_event","hidePopover","togglePopover","newState","onOpen","onClose","_timer","isFocusStillInside","relatedTarget","_applyAnchoredPositionModifier","anchoredPositionModifier","popoverId","_HdsPopoverPrimitive","HdsBadgeCountSizeValues","HdsBadgeCountTypeValues","HdsBadgeCountColorValues","HdsBadgeCount","_HdsBadgeCount","sortOrderLabel","onClick","_HdsAdvancedTableThButtonSort","HdsAppFooterLink","HdsAppFooterItem","HdsLinkInline","HdsCopyButtonSizeValues","DEFAULT_ICON","SUCCESS_ICON","ERROR_ICON","DEFAULT_STATUS","_status","HdsCopyButton","_args","resetStatusDelayed","onSuccess","onError","ariaMessageText","_HdsCopyButton","hdsClipboard","HdsFormSectionMultiFieldGroupItem","widthStyle","_HdsFormSectionMultiFieldGroupItem","HdsFormTextareaBase","_HdsFormTextareaBase","Textarea","DEFAULT_HORIZONTAL_POSITION","HdsFormSuperSelectHorizontalPositionValues","HORIZONTAL_POSITION_MAPPING","HdsFormSuperSelectHorizontalPositionToPlacementValues","_powerSelectAPI","_showOnlySelected","_showNoSelectedMessage","HdsFormSuperSelectMultipleBase","trigger","horizontalPosition","verticalPosition","powerSelectAPI","registerAPI","selectedCount","actions","selected","optionsCount","resultsCount","resultCountMessageText","resultCountMessage","resultCountMessageFunction","showAfterOptions","searchPlaceholder","styles","dropdownMaxWidth","matchTriggerWidth","_HdsFormSuperSelectMultipleBase","PowerSelect","HdsFormSuperSelectAfterOptions","HdsFormSuperSelectOptionGroup","HdsFormSuperSelectSingleBase","afterOptionsContent","dropdownMaxWidthStyle","maxWidthStyle","_HdsFormSuperSelectSingleBase","HdsFormSuperSelectPlaceholder","firstValue","secondValue","useDeepEqual","isEqual$1","alignments","placements","side","createCoords","oppositeSideMap","top","clamp","evaluate","param","getSide","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","firstChar","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","mainAlignmentSide","reference","floating","getOppositePlacement","getOppositeAlignmentPlacement","lrPlacement","rlPlacement","tbPlacement","btPlacement","getPaddingObject","padding","_padding$top","_padding$right","_padding$bottom","_padding$left","rectToClientRect","computeCoordsFromPlacement","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","async","detectOverflow","_await$platform$isEle","platform","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","getClippingRect","contextElement","getDocumentElement","offsetParent","getOffsetParent","offsetScale","getScale","elementClientRect","convertOffsetParentRelativeRectToViewportRelativeRect","originSides","hasWindow","getNodeName","isNode","nodeName","getWindow","_node$ownerDocument","defaultView","documentElement","isHTMLElement","isShadowRoot","ShadowRoot","isOverflowElement","overflowX","overflowY","display","isTableElement","isTopLayer","willChangeRe","containRe","isNotNone","isWebKitValue","isContainingBlock","elementOrCss","css","transform","translate","scale","rotate","perspective","isWebKit","backdropFilter","willChange","contain","supports","isLastTraversableNode","getNodeScroll","scrollX","scrollY","getParentNode","getNearestOverflowAncestor","body","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","visualViewport","getCssDimensions","getComputedStyle$1","hasOffset","shouldFallback","$","unwrapElement","domElement","noOffsets","getVisualOffsets","offsetLeft","offsetTop","includeScale","isFixedStrategy","clientRect","visualOffsets","isFixed","floatingOffsetParent","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","clientLeft","clientTop","paddingTop","getWindowScrollBarX","leftScroll","getHTMLOffset","scroll","htmlRect","getClientRectFromClippingAncestor","clippingAncestor","isLayoutViewport","html","layoutRelativeClientCoords","bodyStyles","bodyMarginInline","compatMode","marginLeft","marginRight","reservedWidth","gutter","scrollbarGutter","getRectRelativeToOffsetParent","isOffsetParentAnElement","offsets","offsetRect","htmlOffset","isStaticPositioned","position","getTrueOffsetParent","polyfill","rawOffsetParent","svgOffsetParent","currentNode","topLayer","clippingAncestors","cachedResult","lastKeptComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","lastPosition","ancestor","_c","firstRect","getElementRects","getOffsetParentFn","getDimensionsFn","getDimensions","floatingDimensions","isRTL","rectsAreEqual","flip","_middlewareData$arrow","_middlewareData$flip","middlewareData","initialPlacement","mainAxis","checkMainAxis","crossAxis","checkCrossAxis","fallbackPlacements","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment","detectOverflowOptions","arrow","alignmentOffset","initialSideAxis","isBasePlacement","oppositePlacement","hasFallbackAxisSideDirection","isStart","overflows","overflowsData","sides","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","reset","resetPlacement","_overflowsData$filter2","currentSideAxis","limitShift","_rawOffset$mainAxis","_rawOffset$crossAxis","mainAxisCoord","crossAxisCoord","rawOffset","computedOffset","limitMin","limitMax","_middlewareData$offse","_middlewareData$offse2","isOriginSide","HdsEnableCollisionDetectionOptions","Shift","Flip","Auto","DEFAULT_PLACEMENT","PLACEMENTS","ENABLE_COLLISION_DETECTION_OPTIONS","DEFAULT_EDGE_DISTANCE","getFloatingUIOptions","flipOptions","shiftOptions","limiter","autoPlacementOptions","middlewareExtra","arrowElement","arrowPadding","resolvedBoundary","ELEMENT_NODE","flipOptsExtended","autoPlacementOptsExtended","shiftOptsExtended","middleware","diffCoords","mainAxisMulti","crossAxisMulti","rawValue","clampCoord","coord","limitedCoords","_middlewareData$autoP","_middlewareData$autoP2","_placementsThatFitOnE","allowedPlacements","autoAlignment","placements$1","autoPlacement","currentPlacement","alignmentSides","currentOverflows","allOverflows","placementsSortedByMostSpace","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","center","shouldAddOffset","centerOffset","heightSide","widthSide","maximumClippingHeight","maximumClippingWidth","overflowAvailableHeight","overflowAvailableWidth","shiftData","noShift","availableHeight","availableWidth","nextDimensions","_floatingElement","_anchorTarget","_anchorElement","SVGElement","arrowSelector","selectedArrowElement","floatingOptions","cleanupFloatingUI","ancestorScroll","ancestorResize","elementResize","layoutShift","IntersectionObserver","animationFrame","referenceEl","ancestors","cleanupIo","onMove","timeoutId","io","cleanup","_io","refresh","skip","elementRectForRootMargin","rootMargin","isFirstUpdate","handleObserve","ratio","intersectionRatio","handleResize","frameId","reobserveFrame","resizeObserver","firstEntry","unobserve","cancelAnimationFrame","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","computePosition","platformWithCache","platformWithDetectOverflow","statefulPlacement","resetCount","currentMiddleware","nextX","nextY","getUAString","uaData","navigator","userAgentData","brands","brand","userAgent","scaleX","scaleY","addVisualOffsets","getWindowScroll","pageXOffset","pageYOffset","isScrollParent","_getComputedStyle","getCompositeRect","elementOrVirtualElement","offsetParentIsScaled","getLayoutRect","getScrollParent","listScrollParents","_element$ownerDocumen","scrollParent","updatedList","isFirefox","auto","basePlacements","viewport","popper","variationPlacements","modifierPhases","order","modifiers","visited","requires","requiresIfExists","dep","depModifier","DEFAULT_OPTIONS","areValidElements","getBasePlacement","getVariation","getMainAxisFromPlacement","computeOffsets","basePlacement","variation","unsetSides","mapToStyles","_Object$assign2","popperRect","gpuAcceleration","adaptive","roundOffsets","_offsets$x","_offsets$y","hasX","hasY","sideX","sideY","heightProp","widthProp","_Object$assign","commonStyles","_ref4","dpr","devicePixelRatio","modifiers_applyStyles","phase","effect","initialStyles","margin","attribute","getOppositeVariationPlacement","isSameNode","getClientRectFromMixedType","clippingParent","layoutViewport","winScroll","mergePaddingObject","expandToHashMap","hashMap","_options","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","_options$elementConte","_options$altBoundary","_options$padding","altContext","mainClippingParents","clippingParents","clipperElement","firstClippingParent","clippingRect","accRect","referenceClientRect","popperOffsets","popperClientRect","overflowOffsets","offsetData","modifiersData","multiply","within","mathMax","mathMin","getSideOffsets","preventedOffsets","isAnySideFullyClipped","createPopper","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","pending","orderedModifiers","effectCleanupFns","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","current","_ref$options","cleanupFn","forceUpdate","_state$elements","_state$orderedModifie","_state$orderedModifie2","onFirstUpdate","popperGenerator","_options$scroll","_options$resize","resize","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","applyStyles","_options$offset","invertDistance","skidding","distance","_data$state$placement","_skip","_options$mainAxis","_options$altAxis","altAxis","checkAltAxis","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","_options$allowedAutoP","allPlacements","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","mainVariationSide","altVariationSide","checks","check","_loop","fittingPlacement","_options$tether","tether","_options$tetherOffset","tetherOffset","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowRect","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_min","_max","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","_state$modifiersData$","axisProp","_options$element","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","CONTENT_CLASS","ARROW_CLASS","SVG_ARROW_CLASS","TOUCH_OPTIONS","TIPPY_DEFAULT_APPEND_TO","getValueAtIndexOrReturn","isType","invokeWithArgsOrReturn","debounce","normalizeToArray","pushIfUnique","arrayFrom","removeUndefinedProps","div","createElement","isMouseEvent","setTransitionDuration","els","transitionDuration","setVisibilityState","getOwnerDocument","elementOrElements","updateTransitionEndListener","box","listener","actualContains","_target$getRootNode","currentInput","isTouch","lastMouseMoveTime","onDocumentTouchStart","onDocumentMouseMove","onWindowBlur","_tippy","blur","isVisible","isIE11","defaultProps","appendTo","aria","expanded","getReferenceClientRect","hideOnClick","ignoreAttributes","interactive","interactiveBorder","interactiveDebounce","moveTransition","onAfterUpdate","onBeforeUpdate","onCreate","onDestroy","onHidden","onHide","onMount","onShow","onShown","onTrigger","onUntrigger","onClickOutside","plugins","popperOptions","render","showOnCreate","touch","triggerTarget","animateFill","followCursor","inlinePositioning","sticky","allowHTML","animation","inertia","theme","zIndex","defaultKeys","getExtendedPassedProps","passedProps","pluginProps","plugin","_name","evaluateProps","valueAsString","dangerouslySetInnerHTML","innerHTML","createArrowElement","appendChild","setContent","textContent","getChildren","firstElementChild","boxChildren","classList","backdrop","onUpdate","prevProps","nextProps","_getChildren","$$tippy","idCounter","mouseMoveListeners","mountedInstances","tippy","targets","optionalProps","instances","showTimeout","hideTimeout","scheduleHideAnimationFrame","lastTriggerEvent","currentTransitionEndListener","isVisibleFromClick","didHideDueToDocumentMouseDown","didTouchMove","ignoreOnFirstUpdate","listeners","debouncedOnMouseMove","onMouseMove","popperInstance","isMounted","isShown","clearDelayTimeouts","setProps","partialProps","invokeHook","cleanupInteractiveMouseListeners","handleAriaExpandedAttribute","handleStyles","createPopperInstance","getNestedPopperTree","nestedPopper","show","isAlreadyVisible","isDisabled","isTouchAndTouchDisabled","getCurrentTarget","hasAttribute","getIsDefaultRenderFn","addDocumentPress","transition","_getDefaultTemplateCh2","getDefaultTemplateChildren","_instance$popperInsta2","_getDefaultTemplateCh3","_box","_content","handleAriaContentAttribute","onTransitionEnd","hide","isAlreadyHidden","removeDocumentPress","_getDefaultTemplateCh4","unmount","hideWithInteractivity","getDocument","destroyPopperInstance","_props$render","pluginsHooks","hasAriaExpanded","scheduleShow","getNormalizedTouchSettings","getIsCustomTouchBehavior","_instance$props$rende","getDelay","isShow","fromHide","pointerEvents","hook","shouldInvokePropsHook","_instance$props","pluginHooks","attr","currentValue","nextValue","onDocumentPress","actualTarget","onTouchMove","onTouchStart","eventType","onBlurOrFocusOut","_lastTriggerEvent","shouldScheduleClickHide","isEventListenerStopped","wasFocused","scheduleHide","isCursorOverReferenceOrPopper","popperTreeData","_instance$popperInsta","popperState","clientY","topDistance","bottomDistance","leftDistance","rightDistance","exceedsTop","exceedsBottom","exceedsLeft","exceedsRight","_instance$props2","computedReference","_getNormalizedTouchSe","touchValue","touchDelay","createTippy","setDefaultProps","mouseCoords","activeInstances","storeMouseCoords","isInternalUpdate","wasFocusEvent","isUnmounted","getIsInitialBehavior","addListener","removeListener","unsetGetReferenceClientRect","isCursorOverReference","relativeX","relativeY","_interval","_needsTabIndex","_tooltip","remove","clearInterval","_HdsTooltipModifier_brand","HdsTooltipModifier","Modifier","onKeyDown","registerDestructor","_didSetup","_assertClassBrand","_setup","_update","_createPopoverContainer","tooltipProps","_getTooltipProps","containerElement","_containerId","setProperty","$anchor","$el","queryResult","clonedElement","cloneNode","outerHTML","tooltip","$trigger","hideOnEsc","ipAddress","did","abnormal_mechanism","ignoreDuration","sid","init","started","errors","startingTime","attrs","user_agent","TRACEPARENT_REGEXP","extractTraceparentData","traceparent","parentSampled","sampledString","sentryTrace","traceparentData","baggage$1","parsedSampleRand","parseSampleRate","parsedSampleRate","_traceId","_spanId","TRACE_FLAG_NONE","_timestamp","_values","isRecording","addEvent","_attributesOrStartTime","_startTime","addLink","_link","addLinks","_links","recordException","_exception","_time","SUPPRESS_TRACING_KEY","withActiveSpan","getAcs","createChildOrRootSpan","parentSpan","spanArguments","forceTransaction","sentryNonRecordingSpan","SentryNonRecordingSpan","freezeDscOnSpan","spanUtils","sentrySpan","SentrySpan","addChildSpanToSpan","endTimestamp","_startRootSpan","logSpans","logSpanStart","setCapturedScopesOnSpan","parseSentrySpanArguments","initialCtx","isStandalone","experimental","ctx","startTimestamp","currentPropagationContext","localSampleRateWasApplied","sampling","sampleSpan","parentSampleRate","getParentSpan","parentSpanIsAlwaysRootSpan","getActiveSpanWrapper","continueTrace","propagationContextFromHeaders","startInactiveSpan","customParentSpan","onlyIfParent","info","startSpan","customScope","customForkedScope","activeSpan","handleCallbackErrors","SPAN_STATUS_ERROR","startSpanManual","suppressTracing","captureCheckIn","checkIn","upsertMonitorConfig","endSession","closeSession","session$1","_sendSessionUpdate","captureSession","prepareEvent","parseEventHintOrCaptureContext","close","flush","getTransport","currentScope","makeSession","currentSession","monitorSlug","checkInId","finishCheckIn","maybePromiseResult","SentryError","logLevel","exceptionFromError","parseStackFrames","extractType","extractMessage","eventFromError","skipLines","reactMinifiedRegexp","isWebAssemblyException","WebAssembly","Exception","eventFromUnknownInput","attachStacktrace","isUnhandledRejection","isErrorEvent","isDOMError","isDOMException","domException","eventFromString","normalizeDepth","errorFromProp","__serialized__","getNonErrorObjectExceptionValue","synthetic","__sentry_template_string__","__sentry_template_values__","logentry","extractExceptionKeysForMessage","captureType","resolvedSyncPromise","_previousCls","_previousFid","_previousLcp","_previousTtfb","_previousInp","triggerHandlers","instrumentCls","onCLS","instrumentFid","onFID","instrumentLcp","onLCP","instrumentTtfb","onTTFB","instrumentInp","onINP","addMetricObserver","previousValue","stopOnCallback","stopListening","addHandler","getCleanupCallback","durationThreshold","entry","checkResponseStart","navigationEntry","getEntriesByType","responseStart","called","firstHiddenTime","onVisibilityUpdate","timeStamp","removeChangeListeners","getVisibilityWatcher","Infinity","nextHopProtocol","char","startTimeInSeconds","parentStartTime","updateStartTime","passedAttributes","sendDefaultPii","replay","getIntegrationByName","replayId","getReplayId","userDisplay","profileId","profile_id","replay_id","baseIsArguments","isObjectLike","propertyIsEnumerable","isArguments","reIsUint","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","nativeCreate","isKeyable","__data__","castPath","toKey","objValue","baseKeysIn","CssSyntaxError","Stringifier","sourceOffset","inputCSS","postcssNode","overrides","cloned","targetParent","childClone","valueClone","cloneAfter","cloneBefore","rangeBy","markClean","positionBy","positionInside","word","prev","endIndex","defaultType","replaceWith","bookmark","foundSelf","inputs","emitInputs","holderOfRoot","queue","holder","fixed","fixedArray","inputId","proxyCache","stringifier","builder","variable","nanoid","isAbsolute","SourceMapConsumer","SourceMapGenerator","fileURLToPath","pathToFileURL","PreviousMap","terminalHighlight","lineToIndexCache","sourceMapAvailable","pathAvailable","getLineToIndex","lineToIndex","prevIndex","Input","file","hasBOM","consumer","mapResolve","endColumn","endLine","endOffset","fromOffset","col","fromLineAndColumn","mid","sourceRoot","fromUrl","originalPositionFor","toPosition","URL","mapFile","sourceContentFor","json","consumerCache","registerInput","RELEASE_TYPES","SEMVER_SPEC_VERSION","process","NODE_DEBUG","gt","operator","COMPARATOR","cmp","TASK_CANCELATION_NAME","didCancel","CancelRequest","kind","finalize","esCompat","__esModule","freeProcess","nodeUtil","binding","HdsPaginationDirectionValues","Next","Prev","HDS_PAGINATION_DIRECTION_ARIA_LABEL_KEYS","getHdsPaginationDirectionAriaLabel","intl","HDS_PAGINATION_DIRECTION_LABEL_KEYS","getHdsPaginationDirectionLabel","H","HdsButtonSet","HdsAlertGenericDeprecated","available","_HdsAlertGenericDeprecated","HdsAlertTypeValues","HdsAlertColorValues","MAPPING_COLORS_TO_ICONS","CONTENT_ELEMENT_SELECTOR","_role","_ariaLabelledBy","HdsAlert","isSemanticAlert","labelId","onDismiss","_HdsAlert","HdsAlertTitle","HdsAlertDescription","HdsLinkStandalone","HdsDismissButton","_isControlled","HdsDisclosurePrimitive","onClickToggle","_HdsDisclosurePrimitive","didUpdate","_isExpanded","_dropdownToggleElement","hasActiveFilters","filters","onFilter","newFilters","_copyFilters","search","filterValue","newKeyfilter","_filterData","resultLabel","resultValue","separatorText","startDateText","_formatDateFilterText","endDateText","dateText","dateString","filterType","dateStyle","timeStyle","Intl","DateTimeFormat","dismissTagText","searchValue","_getFilterValueText","searchAriaLabel","_HdsFilterBar","HdsFilterBarFiltersDropdown","HdsFilterBarActionsDropdown","HdsSeparator","HdsFilterBarAppliedFilters","_HdsFormIndicator","HdsFilterBarTabsTab","insertCallbackFunction","destroyCallbackFunction","didInsertNode","_tabId","willDestroyNode","nodeIndex","onKeydown","tabIds","coupledPanelId","panelIds","selectedTabIndex","_HdsFilterBarTabsTab","HdsFilterBarTabsPanel","_panelId","coupledTabId","_HdsFilterBarTabsPanel","DEFAULT_SPACING","HdsSeparatorSpacingValues","TwentyFour","SPACING","spacing","_HdsSeparator","HdsTooltipPlacementValues","HdsTooltip","extraTippyOptions","_HdsTooltip","HdsApplicationStateAlignValues","isAutoCentered","validAlignValues","_HdsApplicationState","HdsApplicationStateMedia","HdsApplicationStateHeader","HdsApplicationStateBody","HdsApplicationStateFooter","HdsLinkIconPositionValues","HdsLinkColorValues","HdsLinkStandaloneSizeValues","href","route","_HdsLinkStandalone","sortByDOMPosition","leftEntry","rightEntry","leftIndex","rightIndex","isConnected","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","findGroupId","groups","_compositeElement","_preserveTabIndex","_syncCompositeElement","_resortRegisteredElements","handleKey","_navigationSnapshot","_moveTo","_registerItem","onFocus","_items","registered","_unregisterItem","_registerGroup","_unregisterGroup","defaultCurrentId","_currentId","_resolvedCurrentId","requestedItem","_firstEnabledItem","_currentItem","activeId","findFirstEnabled","_currentIndex","orientation","loop","_groups","currentItem","_reassociateGroups","groupId","_syncAllElements","wasCurrent","newGroup","previousItem","nextItem","_syncItemElement","isCurrent","_Composite","isExpanded","isExpandAll","onToggle","_HdsAdvancedTableThButtonExpand","_HdsAdvancedTableThButtonTooltip","_HdsAdvancedTableTd","_HdsDismissButton","HdsDialogPrimitiveBody","HdsDialogPrimitiveFooter","_HdsDialogPrimitiveFooter","HdsDialogPrimitiveHeader","titleTag","HdsDialogPrimitiveHeaderTitleTagValues","_HdsDialogPrimitiveHeader","HdsDialogPrimitiveOverlay","HdsDialogPrimitiveWrapper","HdsFormSectionHeader","HdsFormSectionMultiFieldGroup","_HdsFormLegend","HdsFormVisibilityToggle","HdsFormFileInputBase","_isContentMasked","HdsFormMaskedInputBase","isContentMasked","visibilityToggleAriaLabel","visibilityToggleAriaMessageText","copyButtonText","_HdsFormMaskedInputBase","_HdsFormSuperSelectOptionGroup","HdsPaginationControlArrow","isFocused","onFocusHandled","onFocusHandledFrame","showLabel","_HdsPaginationControlArrow","HdsPaginationSizeSelector","pageSizes","selectedSize","_HdsPaginationSizeSelector","STATUSES","HdsStepperStepIndicator","isInteractive","_HdsStepperStepIndicator","HdsTableThButtonSort","_HdsTableThButtonSort","HdsTableTh","_HdsTableTh","HdsTableThButtonTooltip","_HdsTableThButtonTooltip","REGEX_BACKSLASH","REGEX_REMOVE_BACKSLASH","REGEX_SPECIAL_CHARS","REGEX_SPECIAL_CHARS_GLOBAL","hasRegexChars","lastIdx","lastIndexOf","escapeLast","negated","windows","segs","HdsAccordionTypeValues","Card","Flush","HdsAccordionSizeValues","Small","Large","HdsAccordionForceStateValues","Open","Close","HdsAccordionItemTitleTagValues","ariaDescriptorMap","register","findOrCreateElementSet","unregister","_elements","BaseComponent","_EnhancedComponent","_ARIA_DESCRIPTION_IDS__","EnhancedComponent","descriptors","__ARIA_DESCRIPTION_IDS__","extraAriaDescribedBy","synchronizeDescriptors","DEFAULT_WIDTH","HdsAdvancedTableColumnManagerWidth","_columnWidths","_originalColumnWidths","_transientColumnWidths","thElements","columnIndex","_resizeStartWidths","_getPxWidth","deltaPx","draggedKeys","rightKeys","actualDelta","capacity","_distributableCapacity","_distributeWidthChange","startPixelWidth","transientWidth","frMultiplier","_parseFrMultiplier","hasMoved","pxPerFrUnit","_resolvePxPerFrUnit","originalWidth","gridTemplateColumns","orderedColumns","_colMinPx","_colMaxPx","amount","getColumnByKey","applied","grow","sum","flexible","totalWeight","totalPixels","_HdsAdvancedTableColumnManagerWidth","scrollOptions","_HdsAdvancedTableCellModifier_brand","_observer","_keydownHandler","shouldTrapFocus","_setupObserver","setCellElement","handleEnableFocusTrap","updateTabbableChildren","cellFocusableChildren","MutationObserver","childList","subtree","hdsFormatDate","DateTime","fromJSDate","setLocale","language","toLocaleString","hdsFormatDateHelper","helper","initialObj","mergeObj","levels","isRootSpan","header","infoParts","metadata","getSdkMetadataForEnvelopeHeader","packages","envelopeHeaders","createEventEnvelopeHeaders","eventItem","createEnvelope","spans","beforeSendSpan","convertToSpanJSON","showSpanDropWarning","createSpanEnvelopeItem","applyClientOptions","dist","maxValueLength","request","applyDebugIds","filenameDebugIdMap","getFilenameToDebugIdMap","debug_id","applyDebugMeta","abs_path","debug_meta","images","code_file","getFinalScope","finalScope","scope$1","captureContextKeys","normalizeMaxBreadth","prepared","integrationNames","clientEventProcessors","getEventProcessors","getGlobalScope","isolationData","mergeScopeData","finalScopeData","applyScopeDataToEvent","notifyEventProcessors","eventProcessors$1","evt","maxBreadth","getBaseApiEndpoint","sentry_version","sentry_key","sentry_client","URLSearchParams","dsnLike","dialogOptions","makeDsn","endpoint","encodedOptions","getException","misc","parseRetryAfterHeader","headerDelay","headerDate","disabledUntil","limits","dataCategory","statusCode","updatedRateLimits","rateLimitHeader","retryAfterHeader","retryAfter","categories","namespaces","category","getTraceData","spanToTraceHeader","getDynamicSamplingContextFromScope","nativeFetch","browserUtils","getNativeImplementation","pendingBodySize","pendingCount","createTransport","requestSize","requestOptions","referrerPolicy","keepalive","fetchOptions","clearCachedImplementation","rejectedSyncPromise","response","DOCUMENT","NAVIGATOR","TRIGGER_LABEL","sendFeedback","includeReplay","captureFeedback","getLocationHref","mergeOptions","optionOverrides","onFormOpen","onFormClose","onSubmitSuccess","onSubmitError","onFormSubmitted","themeDark","themeLight","setAttributesNS","setAttributeNS","PURPLE","DEFAULT_LIGHT","foreground","background","accentForeground","accentBackground","successColor","errorColor","border","boxShadow","outline","interactiveFilter","DEFAULT_DARK","getThemedCssVariables","u$1","i$1","o$1","r$1","f$1","c$1","s$1","a$1","h$1","v$1","p$1","y$1","d$1","ref","__k","__","__b","__e","__d","__c","__v","__i","__u","l$1","vnode","b$1","m$1","w$1","__P","__n","ownerSVGElement","k$1","x$1","C$1","__r","debounceRendering","j$1","P$1","g$1","I","O","N","nextSibling","T$1","A$1","cssText","D$1","C","S","T","A","contextType","__E","q$1","sub","__h","_sb","__s","getDerivedStateFromProps","componentWillMount","componentDidMount","componentWillReceiveProps","shouldComponentUpdate","componentWillUpdate","componentDidUpdate","getChildContext","getSnapshotBeforeUpdate","z$1","diffed","localName","createTextNode","createElementNS","childNodes","__html","componentWillUnmount","getDerivedStateFromError","setState","componentDidCatch","__H","__V","__N","q","B","__m","useDebugValue","SentryLogo","svg","viewBox","fill","DialogHeader","logoHtml","useMemo","class","formTitle","showBranding","rel","retrieveStringValue","formData","Form","defaultEmail","defaultName","onSubmit","showEmail","showName","screenshotInput","addScreenshotButtonLabel","removeScreenshotButtonLabel","cancelButtonLabel","emailLabel","emailPlaceholder","isEmailRequired","isNameRequired","messageLabel","messagePlaceholder","nameLabel","namePlaceholder","submitButtonLabel","isRequiredLabel","isSubmitting","setIsSubmitting","useState","setError","showScreenshotInput","setShowScreenshotInput","ScreenshotInputComponent","screenshotError","setScreenshotError","onScreenshotError","useCallback","hasAllRequiredFields","missingFields","emptyFields","handleSubmit","HTMLFormElement","FormData","LabelText","placeholder","required","autoFocus","rows","SuccessIcon","clipPath","path2","speakerDefs","speakerClipPathDef","speakerRect","Dialog","open","successIconHtml","setTimeoutId","handleOnSuccessClick","successMessageText","CROP_BUTTON_OFFSET","CROP_BUTTON_SIZE","DPI","constructRect","endX","startY","endY","getContainedSize","img","imgClientHeight","imgClientWidth","createScreenshotInputStyles","styleNonce","surface200","gray100","ScreenshotEditorFactory","imageBuffer","dialog","useTakeScreenshot","onBeforeScreenshot","onScreenshot","onAfterScreenshot","useEffect","stream","mediaDevices","getDisplayMedia","video","innerWidth","innerHeight","audio","monitorTypeSurfaces","preferCurrentTab","selfBrowserSurface","surfaceSwitching","srcObject","onloadedmetadata","getTracks","track","stop","play","Toolbar","setAction","PenIcon","xmlns","stroke","strokeWidth","strokeLinecap","strokeLinejoin","CropIcon","Annotations","annotatingRef","onMouseDown","onAnnotateStart","handleMouseMove","moveEvent","annotateCanvas","lineTo","beginPath","moveTo","handleMouseUp","applyAnnotation","imageCtx","drawImage","annotateCtx","clearRect","Crop","CropCorner","corner","onGrabButton","croppingRef","cropContainerRef","croppingRect","setCroppingRect","initialPositionRef","useRef","initialX","initialY","isResizing","setIsResizing","confirmCrop","setConfirmCrop","cropper","imageDimensions","croppingBox","fillStyle","fillRect","strokeStyle","lineWidth","strokeRect","makeHandleMouseMove","cropCanvas","cropBoundingRect","mouseX","mouseY","deltaY","newStartX","newStartY","newEndX","newEndY","DPI$1","cutoutCanvas","imageBox","cutoutCtx","confirmButtonLabel","innerText","canvasContainerRef","resizeCanvas","canvasRef","canvas","cropContainer","imageSource","videoWidth","videoHeight","nonce","_experiments","annotations","buildFeedbackIntegration","lazyLoadIntegration","getModalIntegration","getScreenshotIntegration","feedbackIntegration","autoInject","enableScreenshot","useSentryUser","scriptNonce","colorScheme","triggerLabel","triggerAriaLabel","_shadow","_subscriptions","_createShadow","attachShadow","_loadAndRenderDialog","screenshotRequired","maxTouchPoints","isSecureContext","modalIntegration","screenshotIntegration","screenshotIntegrationFn","createDialog","shadow","_attachTo","targetEl","handleClick","removeFromDom","appendToDom","unsubscribe","_createActor","actor","ariaHidden","isBrowser","readyState","attachTo","createWidget","createForm","feedbackModalIntegration","userKey","currentUser","isolationUser","globalUser","originalOverflow","renderContent","createInput","firstChild","feedbackScreenshotIntegration","blob","toBlob","arrayBuffer","DEFAULT_THUNK","normalizeThunk","thunk","TYPE","registerUsable","definition","invokeHelper","Resource","contextOrThunk","thunkOrUndefined","__INTERNAL__","klass","_typeof","ResourceManager","hasDestroyable","prim","toPrimitive","createHelper","Class","createCache","associateDestroyableChild","getDestroyable","setHelperManager","emberService","_store","_error","_isLoading","_hasRan","__REQUEST_FUNCTION__","_named","isSuccess","retry","waitForPromise","hasRan","_Request","getPrototype","baseIsTypedArray","baseUnary","nodeIsTypedArray","isTypedArray","stackClear","stackDelete","stackGet","stackHas","stackSet","Stack","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","baseIsEqualDeep","baseIsEqual","bitmask","arrayFilter","stubArray","nativeGetSymbols","getOwnPropertySymbols","getSymbols","symbol","reIsDeepProp","reIsPlainProp","iteratee","byteLength","WIN_SLASH","WIN_NO_SLASH","DOT_LITERAL","SLASH_LITERAL","QMARK","END_ANCHOR","START_ANCHOR","DOTS_SLASH","POSIX_CHARS","PLUS_LITERAL","QMARK_LITERAL","ONE_CHAR","NO_DOT","NO_DOTS","NO_DOT_SLASH","NO_DOTS_SLASH","QMARK_NO_DOT","SEP","WINDOWS_CHARS","DEFAULT_MAX_EXTGLOB_RECURSION","POSIX_REGEX_SOURCE","__proto__","alnum","alpha","ascii","blank","cntrl","graph","lower","print","punct","space","upper","xdigit","REGEX_NON_SPECIAL_CHARS","REGEX_SPECIAL_CHARS_BACKREF","REPLACEMENTS","CHAR_0","CHAR_9","CHAR_UPPERCASE_A","CHAR_LOWERCASE_A","CHAR_UPPERCASE_Z","CHAR_LOWERCASE_Z","CHAR_LEFT_PARENTHESES","CHAR_RIGHT_PARENTHESES","CHAR_ASTERISK","CHAR_AMPERSAND","CHAR_AT","CHAR_BACKWARD_SLASH","CHAR_CARRIAGE_RETURN","CHAR_CIRCUMFLEX_ACCENT","CHAR_COLON","CHAR_COMMA","CHAR_DOT","CHAR_DOUBLE_QUOTE","CHAR_EQUAL","CHAR_EXCLAMATION_MARK","CHAR_FORM_FEED","CHAR_FORWARD_SLASH","CHAR_GRAVE_ACCENT","CHAR_HASH","CHAR_HYPHEN_MINUS","CHAR_LEFT_ANGLE_BRACKET","CHAR_LEFT_CURLY_BRACE","CHAR_LEFT_SQUARE_BRACKET","CHAR_LINE_FEED","CHAR_NO_BREAK_SPACE","CHAR_PERCENT","CHAR_PLUS","CHAR_QUESTION_MARK","CHAR_RIGHT_ANGLE_BRACKET","CHAR_RIGHT_CURLY_BRACE","CHAR_RIGHT_SQUARE_BRACKET","CHAR_SEMICOLON","CHAR_SINGLE_QUOTE","CHAR_SPACE","CHAR_TAB","CHAR_UNDERSCORE","CHAR_VERTICAL_LINE","CHAR_ZERO_WIDTH_NOBREAK_SPACE","extglobChars","chars","globChars","win32","pico","setMessage","captureStackTrace","showSourceCode","isColorSupported","aside","mark","highlight","bold","gray","red","createColors","subLineStart","subLineEnd","subLine","comma","sep","Parser","Result","messages","lastPlugin","postcssPlugin","warning","warnings","looseOption","freeze","emptyOpts","versionA","versionB","lt","gte","lte","outside","hilo","gtfn","ltefn","ltfn","ecomp","high","low","comparator","mac","ie","fromCharCode","nav","vendor","ie_edge","ie_upto10","ie_11up","gecko","chrome","webkit","safari","ios","linux","dist_ie","ie_version","documentMode","gecko_version","chrome_version","android","webkit_version","safari_version","tabSize","combineAttrs","noAttrs","attrsEq","keysA","keysB","updateAttrs","dom","changed","getAttrs","WidgetType","widget","updateDOM","view","estimatedHeight","lineBreaks","ignoreEvent","coordsAt","isHidden","editable","BlockType","WidgetBefore","WidgetAfter","WidgetRange","Decoration","RangeValue","startSide","endSide","spec","heightRelevant","MarkDecoration","inlineOrder","PointDecoration","isBlockGap","getInclusive","LineDecoration","RangeSet","hasHeight","none","RangeError","point","mapMode","MapMode","TrackBefore","isReplace","TrackAfter","TrackDel","inclusiveStart","inclusiveEnd","inclusive","addRange","ranges","BlockWrapper","rank","getSelection","hasSelection","selection","anchorNode","clientRectsFor","textRange","nodeValue","isEquivalentPosition","targetNode","targetOff","scanFor","domIndex","previousSibling","isBlockElement","contentEditable","flattenRect","toLeft","windowRect","vp","elt","scrollableParents","getX","cur","DOMSelectionState","anchorOffset","focusNode","focusOffset","domSel","setRange","getScrollStack","restoreScrollStack","vert","scratchRange","preventScrollSupported","focusPreventScroll","setActive","createRange","setEnd","setStart","dispatchKey","mods","which","cancelable","altKey","ctrlKey","metaKey","down","KeyboardEvent","up","defaultPrevented","isScrolledToBottom","Window","textNodeBefore","startNode","startOffset","textNodeAfter","DOMPos","precise","Direction","LTR","RTL","dec","LowTypes","ArabicTypes","Brackets","BracketStack","charCodeAt","charType","ch","BidiRE","BidiSpan","assoc","maybe","isolatesEq","iA","iB","emitSpans","baseLevel","isolates","ourType","iCh","iI","sameDir","isNum","recurse","localLevel","iScan","run","upto","jI","computeSectionOrder","outerType","rFrom","rTo","prevType","prevStrong","oppositeType","sI","br","sJ","embed","beforeL","fromJ","computeOrder","trivialOrder","movedOver","moveVisually","startIndex","head","spanI","bidiLevel","spanEnd","nextI","findClusterBreak","nextSpan","EditorSelection","autoDirection","clickAddsSelectionRange","Facet","define","dragMovesSelection$1","mouseSelectionStyle","exceptionSink","updateListener","inputHandler","focusChangeEffect","clipboardInputFilter","clipboardOutputFilter","perLineTextDirection","combine","nativeSelectionHidden","scrollHandler","ScrollTarget","yMargin","xMargin","isSnapshot","changes","clip","StateEffect","setEditContextFormatting","logException","facet","onerror","nextPluginID","viewPlugin","ViewPlugin","domEventHandlers","domEventObservers","buildExtensions","baseExtensions","extension","eventHandlers","eventObservers","provide","decorations","deco","ext","pluginInst","fromClass","cls","PluginInstance","mustUpdate","editorAttributes","contentAttributes","blockWrappers","outerDecorations","atomicRanges","bidiIsolatedRanges","getIsolatedRanges","sets","fromDoc","toDoc","bidiIsolate","scrollMargins","getScrollMargins","styleModule","ChangedRange","fromA","toA","fromB","toB","addToSet","me","extendWithRanges","dI","rI","nextD","nextR","ViewUpdate","transactions","startState","ChangeSet","tr","compose","changedRanges","iterChangedRanges","viewportChanged","viewportMoved","heightChanged","geometryChanged","docChanged","focusChanged","selectionSet","noChildren","Tile","cmTile","breakAfter","isWidget","isComposite","isLine","isText","isBlock","domAttrs","sync","setDOM","posAtStart","posBefore","posAtEnd","tile","posAfter","covers","coordsIn","domPosFor","overrideDOMText","DocTile","CompositeTile","_children","lastChild","tracking","written","rm$1","owns","nearest","blockTiles","BlockWrapperTile","resolveBlock","beforeOff","afterOff","LineTile","keepAttrs","resolveInline","forCoords","scan","onSameLine","found","domIn","saw","posA","posB","MarkTile","TextTile","WidgetTile","coordsInWidget","custom","fromBack","toDOM","WidgetBufferTile","TilePointer","beforeBreak","parents","advance","walker","break","leave","brk","enter","take","OpenWrapper","TileBuilder","curLine","lastBlock","afterWidget","wrappers","wrapperPos","addText","marks","openStart","flushBuffer","ensureMarks","reused","addComposition","composition","freeNode","nw","oldTile","addInlineWidget","noSpace","getBuffer","addMark","addBlockWidget","getBlockPos","continueWidget","addLineStart","lineBaseAttrs","addLine","addBreak","addLineStartIfNotCovered","blockPosCovered","ensureLine","hasContent","findWidget","BreakWidget","updateBlockWrappers","goto","TextStream","skipCount","textOff","iter","lineBreak","done","buckets","bucket","TileCache","widgets","reuse","maybeReuse","TileUpdate","old","disallowBlockEffectsFor","openWidget","openMarks","contentDOM","reuseWalker","compositionContext","getCompositionContext","skipA","preserve","incStart","incEnd","activeMarks","ptr","pendingLineAttrs","markCount","openEnd","lineAt","NullWidget","requireText","DocView","dynamicDecorationMap","domChanged","hasComposition","editContextFormatting","lastCompositionAfterCursor","minWidthFrom","minWidthTo","impreciseAnchor","impreciseHead","forceSelection","lastUpdate","updateDeco","updateInner","mapPos","updateEditContextFormatting","readCompositionAt","inputState","composing","observer","editContext","newSel","touched","main","headPos","findCompositionNode","textNode","sliceString","inv","invertedDesc","prevDeco","prevWrappers","decoDiff","DecorationComparator$1","blockDiff","WrapperComparator","viewState","mustMeasureContent","destroyDropped","contentHeight","flexBasis","selectionRange","gaps","BlockGapWidget","updateGaps","effects","updateSelection","mustRead","fromPointer","readSelectionRange","activeElt","focused","selectionNotFocus","force","inlineDOMNearPos","dummy","suppressWidgetCursorChange","inside","rawSel","nextTo","collapse","caretBidiLevel","removeAllRanges","setSelectionRange","sel","posFromDOM","enforceCursorAssoc","lineStart","domAtPos","newRange","docView","bias","beforeBad","afterBad","coordsForChar","measureVisibleLineHeights","contentWidth","isWider","scrollDOM","widest","ltr","textDirection","spaceAbove","measureBounds","childRect","textDirectionAt","measureTextSize","lineMeasure","textHeight","totalWidth","lineHeight","charWidth","computeBlockGapDeco","vs","viewports","lineBlockAt","allDeco","dynamicOuter","outerDeco","dynamic","lineGapDeco","margins","targetRect","bounding","moveX","moveY","rectHeight","boundingHeight","movedX","movedY","lineHasWidget","textBefore","textAfter","tileAfter","tileBefore","compareRange","comparePoint","boundChange","blockAt","best","moveByChar","by","bidiSpans","visualLineSide","skipAtomicRanges","atoms","moved","skipAtomsForSelection","updated","undirectional","undirectionalRange","mainIndex","skipAtoms","oldPos","newPos","PosAssoc","posAtCoords","scanY","docTop","yOffset","docHeight","elementAtHeight","halfLine","heightOracle","contentRect","into","defaultCharacterWidth","lineWrapping","defaultLineHeight","sliceDoc","findColumn","InlineCoordsScan","scanTile","baseDir","bidiSpansAt","baseDirAt","dirAt","bidiIn","positions","getRects","recursed","above","below","closestRect","lo","hi","seen","bidi","closestI","closestDx","adjust","dx","scanText","LineBreakPlaceholder","DOMReader","points","lineSeparator","EditorState","readRange","findPointBefore","oldLen","readNode","nextTile","isEmptyToEnd","readTextNode","nextBreak","breakSize","fromView","findPointInside","isAtEnd","override","DOMPoint","DOMChange","typeOver","bounds","iHead","iAnchor","curSel","readOnly","domBoundsAround","selPoints","reader","startDOM","endDOM","single","offFrom","offTo","replaceRange","lastTouchTime","coordsAtPos","lastTouchY","fromI","fromStart","toI","toEnd","prevEnd","applyDOMChange","domChange","change","lastKey","lastKeyTime","lastKeyCode","preferredPos","preferredSide","selEnd","insert","findDiff","hasFocus","sameSelPos","insertingTextAt","toText","insertingText","applyDOMChangeInner","userEvent","lastSelectionTime","lastSelectionOrigin","dispatch","flushIOSKey","defaultTr","defaultInsert","inAtomic","replaceSelection","mainSel","newLength","compositionPendingChange","compositionRange","replaced","dLen","changeByRange","rangeChanges","selOff","compositionEndedAt","compositionFirstChange","InputState","setSelectionOrigin","touchActive","lastTouchX","lastFocusTime","lastScrollTop","lastScrollLeft","lastWheelEvent","pendingIOSKey","lastIOSMomentumScroll","tabFocusMode","lastContextMenu","scrollHandlers","compositionPendingKey","mouseSelection","draggedContent","handleEvent","notifiedFocused","appliedFirefoxHack","ignoreDuringComposition","keydown","updateState","runHandlers","observers","ensureHandlers","bindHandler","computeHandlers","exists","modifierCodes","delayAndroidKey","PendingKeys","EmacsyPendingKeys","autocapitalize","forceFlush","startMouseSelection","dragScrollSpeed","MouseSelection","startEvent","mustSelect","scrollSpeed","scrolling","lastEvent","move","multiple","allowMultipleSelections","dragging","rangeCount","getRangeAt","getClickType","buttons","sx","sy","setScrollSpeed","setInterval","isUserEvent","brokenClipboardAPI","textFilter","doPaste","byLine","lastLinewiseCopy","lastLine","rangeForClick","categorize","charCategorizer","linePos","cat","visual","iState","wheel","mousewheel","touchstart","targetTouches","touchmove","touchend","mousedown","makeStyle","posAndSideAtCoords","startSel","removed","startRange","mustFocus","mouseSel","BadMouseDetail","lastMouseDown","lastMouseDownCount","lastMouseDownTime","lastTime","dropText","direct","dropPos","del","ins","dragstart","draggable","dataTransfer","setData","effectAllowed","dragend","files","read","finishFile","FileReader","onload","readAsText","getData","paste","clipboardData","copy","cut","linewise","clearData","selectionEnd","selectionStart","isFocusChange","Annotation","focusChangeTransaction","getEffect","updateForFocusChange","clearSelectionRange","compositionstart","compositionupdate","compositionend","pendingRecords","flushSoon","contextmenu","beforeinput","_b","getTargetRanges","posAtDOM","startContainer","endContainer","startViewHeight","wrappingWhiteSpace","heightChangeFlag","clearHeightChangeFlag","HeightOracle","heightSamples","heightForGap","heightForLine","setDoc","mustRefreshForWrapping","whiteSpace","mustRefreshForHeights","lineHeights","newHeight","knownHeights","MeasuredHeights","heights","more","BlockInfo","widgetLineBreaks","QueryType","ByPos","ByHeight","ByPosNoHeight","Epsilon","HeightMap","outdated","setHeight","_from","_to","decomposeLeft","decomposeRight","applyChanges","oldDoc","oracle","NodeBuilder","updateHeight","HeightMapText","HeightMapBranch","SpaceDeco","HeightMapBlock","mainBlock","_oracle","_type","forEachLine","setMeasuredHeight","measured","_force","collapsed","widgetHeight","breaks","HeightMapGap","heightMetrics","perLine","firstLine","perChar","totalPerLine","guess","lineTop","linesAbove","singleHeight","rightTop","rightOffset","subQuery","rightStart","balanced","mergeGaps","rebalance","around","lineEnd","covering","writtenTo","isCovered","addBlock","addLineDeco","enterLine","blankContent","finish","DecorationComparator","visiblePixelRange","parentRect","fullPixelRange","LineGap","displaySize","same","gA","gB","draw","wrapping","LineGapWidget","vertical","ViewState","pixelViewport","inView","paddingBottom","contentDOMWidth","contentDOMHeight","editorHeight","editorWidth","scrollOffset","scrolledToBottom","scrollAnchorPos","scrollAnchorHeight","scaler","IdScaler","scrollTarget","printing","defaultTextDirection","visibleRanges","mustEnforceCursorAssoc","guessWrapping","stateDeco","staticDeco","heightMap","getViewport","updateForViewport","updateViewportLines","lineGaps","ensureLineGaps","computeVisibleRanges","Viewport","updateScaler","BigScaler","viewportLines","scaleBlock","contentChanges","heightChanges","prevHeight","scrollAnchor","scrollAnchorAt","mapViewport","viewportIsAppropriate","viewportChange","updateLineGaps","mapLineGaps","measure","domRect","measureContent","getScrollOffset","dTop","dBottom","visibleTop","fromDOM","visibleBottom","marginTop","topPos","viewHeight","mapped","touchesRange","mayMeasure","halfMargin","doubleMargin","addGap","structure","avoid","moveToLineBoundary","gapSize","checkLine","viewFrom","viewTo","bot","marginHeight","targetFrac","findFraction","spaceFrac","findPosition","marginWidth","horizOffset","pxLeft","pxRight","fraction","lineBlockAtHeight","counted","outer","vpHeight","domBase","domTop","domBottom","bTop","bBottom","strs","darkTheme","baseThemeID","StyleModule","newName","baseLightID","baseDarkID","lightDarkIDs","buildTheme","scopes","baseTheme$1","boxSizing","flexDirection","alignItems","fontFamily","overflowAnchor","flexGrow","flexShrink","wordWrap","minHeight","WebkitUserModify","whiteSpace_fallback","wordBreak","overflowWrap","caretColor","userSelect","opacity","borderLeft","borderLeftColor","backgroundColor","borderRadius","unicodeBidi","insetInlineStart","insetInlineEnd","borderRightWidth","borderLeftWidth","textAlign","borderBottom","borderTop","fontSize","font","verticalAlign","backgroundImage","backgroundPosition","backgroundSize","backgroundRepeat","observeOptions","characterData","characterDataOldValue","useCharData","DOMObserver","selectionChanged","delayedFlush","resizeTimeout","delayedAndroidKey","flushingAndroidKey","lastChange","scrollTargets","intersection","resizeScroll","intersecting","gapIntersection","printQuery","parentCheck","mutations","mut","removedNodes","oldValue","EditContext","EDIT_CONTEXT","EditContextManager","onCharData","onResize","onPrint","onScroll","matchMedia","addWindowListeners","listenForScroll","onScrollChanged","createEvent","requestMeasure","measureReq","wasChanged","getComposedRanges","buildSelectionRangeFromRange","execCommand","processRecords","clearDelayedAndroidKey","takeRecords","readMutation","readChange","readSelection","rec","childBefore","findChild","childAfter","setWindow","removeWindowListeners","curTile","curAnchor","pendingContextChange","resetRange","toContextPos","textupdate","toEditorPos","updateRangeStart","updateRangeEnd","contextBase","editorBase","drifted","deletes","newLen","revertPending","setSelection","characterboundsupdate","rangeStart","rangeEnd","DOMRect","updateCharacterBounds","textformatupdate","getTextFormats","lineStyle","underlineStyle","thickness","underlineThickness","updateSelectionBounds","applyEdits","abort","iterChanges","_fromB","_toB","updateText","reverted","rangeIsValid","contextPos","clipLen","editorPos","EditorView","compositionStarted","_root","pluginMap","editorAttrs","contentAttrs","bidiCache","destroyed","measureScheduled","measureRequests","announceDOM","dispatchTransactions","trs","scrollTo","mountStyles","fonts","ready","Transaction","redrawn","attrsChanged","focusFlag","dispatchFocus","annotation","pendingKey","phrases","cursorScrollMargin","CachedOrder","updatePlugins","styleModules","showAnnouncements","docViewUpdate","hadFocus","prevSpecs","specs","newPlugins","measuring","BadMeasure","write","themeClasses","attrsFromFacet","spellcheck","autocorrect","writingsuggestions","contenteditable","changedContent","changedEditor","announce","cspNonce","mount","readMeasured","known","documentTop","documentPadding","viewportLineBlocks","moveByGroup","initial","nextCat","CharCategory","Space","includeWrap","editorRect","moveVertically","startPos","goal","goalColumn","startCoords","resolvedGoal","halfText","posCoords","MaxBidiLine","fresh","setRoot","scrollSnapshot","setTabFocusMode","dark","baseTheme","Prec","lowest","findFromDOM","dragMovesSelection","lastDir","sources","currentPlatform","handleKeyEvents","getKeymap","keymap","enables","Keymaps","bindings","bound","isPrefix","checkPrefix","command","scopeObj","alt","ctrl","meta","ourObj","storedPrefix","PrefixTimeout","full","_any","any","currentKeyEvent","runScopeHandlers","charCode","codePointAt","isChar","codePointSize","prevented","baseName","shiftName","ran","runFor","cmd","RectangleMarker","forRange","getBase","lineElt","leftSide","textIndent","rightSide","paddingRight","startBlock","endBlock","visualStart","visualEnd","wrappedLine","pieces","drawForLine","drawForWidget","piece","horizontal","addSpan","fromOpen","toOpen","fromCoords","toCoords","endPos","docLine","spanFrom","spanTo","LayerView","layer","drawn","setOrder","layerOrder","updateOnDocViewUpdate","markers","oldI","marker","selectionConfig","configs","combineConfig","cursorBlinkRate","drawRangeCursor","iosSelectionHandles","drawSelection","cursorLayer","selectionLayer","hideNativeSelection","getDrawSelectionConfig","configChanged","conf","cursors","animationName","confChange","setBlinkRate","animationDuration","selectionBg","highest","setDropCursorPos","mapping","dropCursorPos","StateField","drawDropCursor","readPos","drawCursor","cursorPos","setDropPos","dragover","dragleave","dropCursor","iterMatches","iterRange","MatchDecorator","regexp","decoration","decorate","addMatch","_view","createDeco","RangeSetBuilder","visible","changeFrom","changeTo","_t","updateRange","updateFrom","updateTo","fromLine","toLine","filterFrom","filterTo","UnicodeRegexpSupport","unicode","Specials","Names","_supportsTabSize","specialCharConfig","specialChars","addSpecialChars","replaceTabs","MozTabSize","highlightSpecialChars","_plugin","decorationCache","makeDecorator","countColumn","TabWidget","SpecialCharWidget","ph","phrase","scrollPastEnd","highlightActiveLine","activeLineHighlighter","lineDeco","getDeco","lastLineStart","Placeholder","MaxOff","getPos","rectangularSelection","eventFilter","newStart","_extend","startLine","startOff","endOff","startCol","endCol","Alt","Control","Meta","showCrosshair","crosshairCursor","isDown","keyup","mousemove","Outside","TooltipViewManager","createTooltipView","removeTooltipView","tooltips","tooltipViews","newAbove","tip","tooltipView","tooltipConfig","windowSpace","docElt","tooltipSpace","knownHeight","tooltipPlugin","madeAbsolute","lastTransaction","measureTimeout","createContainer","readMeasure","writeMeasure","measureSoon","manager","showTooltip","createTooltip","intersectionObserver","observeIntersection","maybeMeasure","shouldMeasure","newConfig","makeAbsolute","tv","getCoords","others","tView","arrowHeight","noOffset","strictSide","spaceVert","overlap","setLeftStyle","arrowLeft","toggle","positioned","borderRight","borderTopColor","borderBottomColor","showHoverTooltip","HoverTooltipHost","mounted","createHostedView","hostedView","passProp","given","showHoverTooltipHost","hoverPlugin","HoverPlugin","locked","setHover","hoverTime","hoverTimeout","restartTimeout","lastMove","checkHover","mouseleave","startHover","hovered","activateHover","tooltipMargin","docBottom","watchTooltipLeave","watch","hoverTooltip","hoverState","lock","hideOnChange","hideOn","closeHoverTooltipEffect","getTooltip","hasHoverTooltips","closeHoverTooltips","closeHoverTooltip","repositionTooltips","panelConfig","topContainer","bottomContainer","panels","getPanel","panel","panelPlugin","showPanel","PanelGroup","syncClasses","scrollMargin","syncDOM","curDOM","rm","showDialog","panelCtor","submitLabel","forms","onclick","dialogField","openDialogEffect","appendConfig","closeDialogEffect","getDialog","dialogs","computeN","GutterMarker","elementClass","gutterLineClass","gutterWidgetClass","renderEmptyElements","elementStyle","lineMarker","widgetMarker","lineMarkerChange","initialSpacer","updateSpacer","activeGutters","gutters","unfixGutters","gutterView","domAfter","prevViewport","SingleGutterView","getDOMAfter","syncGutters","updateGutters","vpA","vpB","vpOverlap","detach","lineClasses","classSet","UpdateContext","advanceCursor","cx","addElement","newElt","GutterElement","extraMarkers","localMarkers","forLine","spacer","prevMarkers","setMarkers","domPos","iNew","iOld","skipTo","lineNumberMarkers","lineNumberWidgetMarker","lineNumberConfig","formatNumber","NumberMarker","lineNumberGutter","maxLineNumber","lineNumbers","activeLineGutterMarker","activeLineGutterHighlighter","highlightActiveLineGutter","tabDeco","spaceDeco","whitespaceHighlighter","highlightWhitespace","trailingHighlighter","highlightTrailingWhitespace","__test","getHeightChangeFlag","cellTabbableChildren","isFocusTrapActive","__WEBPACK_DEFAULT_EXPORT__","getValueArrayAndUseDeepEqualFromParams","_element$getRootNode","_isInert","lookUp","_node$getAttribute","inertAtt","isInert","_getCandidatesIteratively","scopeParent","hasTabIndex","getTabIndex","_node$getAttribute2","attValue","checkVisibility","checkOpacity","opacityProperty","contentVisibilityAuto","visibilityProperty","checkVisibilityCSS","_nodeRoot","_nodeRootHost","_nodeRootHost$ownerDo","nodeRoot","attached","_nodeRoot2","_nodeRootHost2","_nodeRootHost2$ownerD","isShadowRootTabbable","_sortByOrder","BoundedPolicy","maxConcurrency","yieldableSymbol","YIELDABLE_CONTINUE","YIELDABLE_RETURN","YieldableState","taskInstance","resumeIndex","_taskInstance","_resumeIndex","getTaskInstance","proceed","return","def","thinInstance","_index","resumeType","maybeDisposer","AnimationFrameYieldable","RawTimeoutYieldable","forever","rawTimeout","__awaiter","_arguments","P","fulfilled","rejected","__generator","sent","trys","ops","verb","ReCaptchaInstance","siteKey","recaptchaID","recaptcha","styleContainer","execute","enterprise","getSiteKey","hideBadge","showBadge","TEXT_SIZE_MAP","small","medium","large","HdsAccordionItem","ariaLabelledBy","containsInteractive","toggleTextSize","forceState","isStatic","_HdsAccordionItem","HdsAccordionItemButton","getIndex","at","next_default","previous_default","invokeFunction","isPromise","pipe","pipe_default","currentIdx","nextIdx","toggle_default","HdsFilterBarFilterTypeValues","multiSelect","singleSelect","numerical","datetime","generic","Inverted","Outlined","NeutralDarkMode","inlineStyles","basis","shrink","enableCollapseBelowContentSize","_HdsLayoutFlexItem","toggleButtonText","_HdsFilterBarActionsDropdown","HdsDropdownToggleButtonSizeValues","HdsDropdownToggleButtonColorValues","badgeType","_HdsDropdownToggleButton","HdsDropdownToggleChevron","HdsDropdownToggleIconSizeValues","Secondary","HdsDropdownToggleIconAllowedIconValues","MoreHorizontal","MoreVertical","ALLOWED_ICON_LIST","_hasImage","imageSrc","onDidUpdateImageSrc","onImageLoadError","hasChevron","_HdsDropdownToggleIcon","_HdsDropdownListItemCheckbox","_HdsDropdownListItemCheckmark","isTruncated","_HdsDropdownListItemCopyItem","HdsCopySnippet","HdsCopySnippetColorValues","textToShow","textToCopy","_HdsCopySnippet","HdsTextCode","_HdsTextCode","_HdsDropdownListItemDescription","HdsDropdownListItemInteractiveColorValues","_HdsDropdownListItemInteractive","_HdsDropdownListItemRadio","_HdsDropdownListItemTitle","DEFAULT_DROPDOWN_HEIGHT","_internalFilters","internalFilters","isLiveFilter","_applyFilters","closeDropdown","dropdownHeightStyle","heightStyle","_HdsFilterBarFiltersDropdown","HdsFilterBarTabs","HdsFilterBarFilterGroup","_searchValue","newFilter","formattedFilters","onClear","numFilters","keyFilters","_HdsFilterBarFilterGroup","HdsFilterBarFilterGroupClearButton","HdsFilterBarFilterGroupRadio","HdsFilterBarFilterGroupCheckbox","isChecked","_HdsFilterBarFilterGroupCheckbox","_HdsFilterBarFilterGroupRadio","_tabIds","_tabNodes","_panelNodes","_panelIds","_selectedTabIndex","tabId","panelId","nextTabIndex","_focusTab","prevTabIndex","_HdsFilterBarTabs","onFilterDismiss","valueText","_filterValueText","_filterKeyText","_filterSeparatorText","keyText","_numericalFilterValueText","_dateFilterValueText","_genericFilterValueText","formatDate","_HdsFilterBarAppliedFilters","HdsTag","HdsTagColorValues","TOOLTIP_PLACEMENTS","HdsTagTooltipPlacementValues","DEFAULT_TOOLTIP_PLACEMENT","overflowed","textContainer","_isTextOverflow","tooltipPlacement","_HdsTag","HdsApplicationStateTitleTagValues","_HdsApplicationStateHeader","HdsAlertTitleTagValues","_HdsAlertTitle","HdsAppFooterCopyright","_HdsAppFooterCopyright","HdsAppFooterStatusLink","statuses","HdsAppFooterStatusLinkStatusValues","statusIcon","iconName","itemStyle","statusIconColor","_HdsAppFooterStatusLink","Trailing","_HdsLinkInline","HdsAppFooterLegalLinks","hrefForSupport","hrefForTerms","hrefForPrivacy","hrefForSecurity","hrefForAccessibility","_HdsAppFooterLegalLinks","HdsAppSideNavToggleButton","_titleIds","HdsAppSideNavList","titleId","titleIds","_HdsAppSideNavList","HdsAppSideNavListBackLink","HdsAppSideNavListTitle","HdsAppSideNavListLink","didInsertTitle","_HdsAppSideNavListTitle","HdsCodeBlockCopyButton","_HdsCodeBlockCopyButton","HdsCodeBlockTitle","HdsCodeBlockTitleTagValues","_HdsCodeBlockTitle","HdsCodeBlockDescription","_HdsCodeBlockDescription","HdsCodeEditorDescription","editorId","_HdsCodeEditorDescription","HdsCodeEditorFullScreenButton","isFullScreen","stateClass","_HdsCodeEditorFullScreenButton","HdsCodeEditorTitle","_HdsCodeEditorTitle","HdsDialogPrimitiveDescription","HdsFormSeparator","_HdsFormSeparator","HdsFormFooter","_HdsFormFooter","HdsFormHeader","_HdsFormHeader","HdsFormSection","_HdsFormSection","HdsFormCheckboxField","HdsFormKeyValueInputsDeleteRowButton","returnFocusTo","rowData","rowIndex","rowNumber","_HdsFormKeyValueInputsDeleteRowButton","HdsFormKeyValueInputsField","_HdsFormKeyValueInputsField","labelHiddenText","labelIdPrefix","LABEL_ID_PREFIX","HdsFormKeyValueInputsGeneric","_HdsFormKeyValueInputsGeneric","HdsFormKeyValueInputsAddRowButton","ariaDescription","_HdsFormKeyValueInputsAddRowButton","HdsFormRadioField","DEFAULT_CONTROL_POSITION","HdsFormRadioCardControlPositionValues","Bottom","DEFAULT_ALIGNMENT","HdsFormRadioCardAlignmentValues","CONTROL_POSITIONS","HdsFormRadioCard","controlPosition","_HdsFormRadioCard","HdsFormRadioCardLabel","HdsFormRadioCardDescription","HdsFormToggleBase","syncAriaChecked","ariaCheckedValue","attributeFilter","_HdsFormToggleBase","HdsFormToggleField","HdsIconTileSizeValues","HdsIconTileColorNeutral","HdsIconTileProductValues","PRODUCTS","HdsIconTile","logo","iconWrapperClass","entity","iconSecondary","_HdsIconTile","HdsPageHeaderActions","HdsPageHeaderBadges","HdsPageHeaderDescription","HdsPageHeaderSubtitle","HdsPageHeaderTitle","HdsPaginationInfo","showTotalItems","translatedItemsRange","itemsRangeStart","itemsRangeEnd","totalItems","translationKey","interpolationProps","_HdsPaginationInfo","HdsApplicationPaginationNavEllipsis","HdsPaginationControlNumber","page","_HdsPaginationControlNumber","HdsRevealToggleButton","_HdsRevealToggleButton","HdsRichTooltipToggleIconPositionValues","HdsRichTooltipToggleSizeValues","HdsRichTooltipToggle","_HdsRichTooltipToggle","HdsRichTooltipBubble","sizingStyles","arrowId","_HdsRichTooltipBubble","HdsStepperListStep","_statusSrOnlyTextMap","stepNumber","stepIds","_stepId","statusSrOnlyText","_HdsStepperListStep","MAPPING_STATUS_TO_INDICATOR_STATUS","HdsStepperNavStep","_elementId","onStepChange","onKeyUp","isNavInteractive","currentStep","stepIndicatorStatus","_HdsStepperNavStep","HdsStepperNavPanel","coupledStepId","_HdsStepperNavPanel","HdsTableTr","_HdsTableTr","HdsTableThSelectable","_HdsTableThSelectable","HdsTableThSort","_HdsTableThSort","HdsTableTd","_HdsTableTd","HdsTabsTab","didUpdateNode","_HdsTabsTab","HdsTabsPanel","_HdsTabsPanel","_hdsTime","HdsTimeRange","startDateIsoUtcString","startDate","hdsTime","toIsoUtcString","endDateIsoUtcString","endDate","startDateDisplayFormat","endDateDisplayFormat","_HdsTimeRange","HdsTimeSingleComponent","hdsFormatRelativeHelper","HdsAppFrameFooter","HdsAppFrameHeader","HdsAppFrameMain","HdsAppFrameModals","HdsAppFrameSidebar","HdsLayoutGridItem","sm","md","lg","xl","xxl","_HdsLayoutGridItem","dynamicRequire","isBrowserBundle","existingModule","cwd","hex2rgba","hex","hexCode","hexValue","light","rendererOpts","qrSize","imgData","qr","modules","symbolSize","scaledMargin","palette","posDst","pxColor","models","hdsLinkToModelsHelper","hdsLinkToQueryHelper","getTextToCopy","getTargetElement","targetElement","NodeList","getTextToCopyFromTargetElement","HTMLInputElement","HTMLTextAreaElement","HTMLSelectElement","srOnlyTexts","removeProperty","writeTextToClipboard","clipboard","writeText","__webpack_require__","copyToClipboard","normalizedColumns","_HdsAdvancedTableColumnManager","HdsAdvancedTableColumnManagerOrder","_resizeOptions","resizeOptions","_resetColumnWidth","_resizeColumn","_reorderOptions","reorderOptions","_moveColumn","translatedMoveColumnToStartLabel","_moveColumnToPosition","translatedMoveColumnToEndLabel","_stickyColumnOptions","translatedPinLabel","translatedUnpinLabel","_pinFirstColumn","allGroups","resizeHandleElement","dropdownCloseCallback","onGetRenderedWidth","onRestoreColumnWidth","onFocusReorderHandle","onMoveColumnToTerminalPosition","onPinFirstColumn","_HdsAdvancedTableThContextMenu","handleDragStart","thElement","thElementWidth","dragPreview","dragPreviewElement","setDragImage","_HdsAdvancedTableThReorderHandle","sortedModel","ancestorsExpanded","hasChildren","lastVisibleRowId","visibleRows","lastVisibleRow","_HdsAdvancedTableBody","Page","Inline","Compact","HdsAppFooterStatusValues","Operational","Degraded","Maintenance","Outage","HdsAppFooterThemeValues","Light","Dark","INTERMEDIATE_VALUE","INTERNAL","CURRENT","ReadonlyCell","_getter","toHTML","Cell","updater","cellEvaluator","helperCapabilities","compatOwner","getOwner","ResourceInvokerManager","resource","setOwner$1","resource2","resourceFactory","wrapperFn","ResourceInvokerFactory","FunctionResourceManager","previousFn","thisFn","usableCache","currentFn","destroyer","use","usable","previousCache","nestedCache","maybeValue","ResourceManagerFactory","_prototype","descriptorGetter","getCurrentValue","USABLES","useFn","caches","internalConfig","languageDataProp","NodeProp","defineLanguageFacet","baseData","sublanguageProp","Language","extraExtensions","syntaxTree","languageData","topNodeAt","innerNode","sublang","isActiveAt","findRegions","allowsNesting","explore","tree","overlay","Tree","topLang","topNode","IterMode","ExcludeBuffers","EnterBracketed","isTop","LRLanguage","configure","hasWrappers","ensureSyntaxTree","oldVieport","updateViewport","isDone","work","syntaxTreeAvailable","forceParsing","success","syntaxParserRunning","parseWorker","isWorking","DocInput","syncTo","chunk","lineChunks","stringStart","currentContext","ParseContext","fragments","treeLen","scheduleOn","tempSkipped","startParse","takeTree","withContext","stoppedAt","stopAt","withoutTempSkipped","TreeFragment","addTree","parsedPos","cutFragments","startLen","skipUntilInView","getSkippingParser","createParse","NodeType","frags","LanguageState","newCx","vpTo","parseState","requestIdle","requestIdleCallback","idle","cancelIdleCallback","isInputPending","scheduling","working","workScheduled","chunkEnd","chunkBudget","scheduleWork","checkAsyncSchedule","deadline","timeRemaining","viewportFirst","languages","LanguageSupport","support","LanguageDescription","extensions","loadFunc","loading","load","matchFilename","matchLanguageName","fuzzy","indentService","indentUnit","getIndentUnit","indentString","cols","ts","getIndentation","IndentContext","ast","resolveStack","resolveInner","enterUnfinishedNodesBefore","indentFor","indentRange","overrideIndentation","indent","norm","simulateBreak","simulateDoubleBreak","textAfterPos","lineIndent","overriden","simulatedBreak","indentNodeProp","indentStrategy","TreeIndentContext","closedBy","closed","delimitedStrategy","topIndent","baseIndent","baseIndentFor","atBreak","isParent","continue","delimitedIndent","closing","closedAt","aligned","openToken","sim","openLine","isSkipped","continuedIndent","except","matchExcept","DontIndentBeyond","indentOnInput","transactionFilter","rules","languageDataAt","newDoc","newSelection","sequential","foldService","foldNodeProp","foldInside","isUnfinished","foldable","mapRange","foldEffect","unfoldEffect","selectedLines","foldState","folded","clearTouchedFolds","rangesToFold","foldExists","preparePlaceholder","foldConfig","PreparedFoldWidget","foldWidget","fromJSON","foldedRanges","findFold","maybeEnable","codeFolding","foldCode","announceFold","unfoldCode","fold","lineFrom","foldAll","unfoldAll","foldableContainer","lineBlock","foldableRegion","foldKeymap","defaultConfig","placeholderDOM","placeholderText","widgetToDOM","foldGutterDefaults","openText","closedText","markerDOM","foldingChanged","FoldMarker","foldGutter","fullConfig","canFold","canUnfold","buildMarkers","HighlightStyle","modSpec","scopeOpt","tagHighlighter","themeType","highlighterFacet","fallbackHighlighter","getHighlighters","syntaxHighlighting","highlighter","treeHighlighter","fallback","highlightingFor","highlighters","markCache","buildDeco","decoratedTo","styleChange","decoratedToMapped","highlightTree","defaultHighlightStyle","link","textDecoration","heading","fontWeight","emphasis","fontStyle","strong","strikethrough","keyword","atom","bool","contentSeparator","labelName","literal","inserted","deleted","special","variableName","typeName","namespace","macroName","propertyName","comment","DefaultScanDist","DefaultBrackets","bracketMatchingConfig","afterCursor","brackets","maxScanDistance","renderMatch","defaultRenderMatch","matchingMark","nonmatchingMark","bracketDeco","matchBrackets","bracketMatchingUnique","bracketMatching","bracketMatchingHandle","matchingNodes","byProp","openedBy","findHandle","hasHandle","handle","matchMarkedBrackets","tokenType","startCh","bracket","startToken","basePos","_pos","matching","firstToken","endHandle","prevSibling","countCol","startValue","StringStream","overrideIndent","lastColumnPos","lastColumnValue","eol","sol","peek","eat","ok","eatWhile","eatSpace","skipToEnd","backUp","indentation","consume","caseInsensitive","cased","defaultCopyState","IndentedFrom","StreamLanguage","blankLine","copyState","tokenTable","noTokens","mergeTokens","Parse","typeArray","getIndent","streamParser","stateAfter","perNode","TokenTable","defaultTokenTable","statePos","findState","readToken","cutTree","chunks","chunkPos","chunkReused","rangeIndex","editorState","chunkStart","moveRangeIndex","parseEnd","parseLine","finishChunk","lineAfter","nextLine","skipGapsTo","offPos","emitToken","len0","nodeSet","topID","maxBufferLength","balance","NodeSet","warned","byTag","defaultTable","legacyName","createTokenType","warnForPart","part","tagStr","tags$1","styleTags","buildForLine","textHasRTL","alwaysIsolate","bidiIsolates","isolateMarks","always","hasRTL","added","fA","tA","fB","tB","access","iterate","isolate","foldRange","isPromiseProxyLike","isCancellablePromise","_resolvedOptions","_resolvedSelected","_repeatingChar","_expirableSearchText","_searchResult","_isActive","_loading","_searchText","_lastSearchedText","_highlighted","PowerSelectComponent","_search","_highlight","_select","choose","_choose","_scrollTo","labelClick","_labelClick","results","searchText","__updateOptions","eager","__updateSelected","triggerElement","publicAPI","__registerAPI","term","__performSearch","searchStartOffset","repeatingChar","isNumpadKeyEvent","storedAPI","highlighted","indexOfOption","isNone","findWithOffset","legacyMultiple","_lastSelectedPromise","_selectedObserverCallback","highlightOnHover","labelClickAction","highlightedIndex","pathForOption","searchMessage","noMatchesMessage","mustShowSearchMessage","mustShowNoMessages","lastSearchedText","toPlainArray","_filterResultsCache","_filter","countOptions","ariaMultiSelectable","triggerId","_uid","labelText","labelComponent","searchFieldPosition","tabindex","triggerComponent","searchEnabled","buildSelection","_defaultMultipleBuildSelection","handleOpen","focusInput","_resetHighlighted","handleClose","handleInput","correctedTerm","onInput","_publicAPIActions","_routeKeydown","handleTriggerKeydown","triggerTypingTask","_handleKeySpace","getTriggerElement","handleFocus","_updateIsActive","handleBlur","onBlur","_updateOptions","_updateHighlighted","_updateSelected","opt","closeOnSelect","option","optionsList","uniqueId","optionElement","optionTopScroll","optionBottomScroll","_registerAPI","_performSearch","_lastOptionsPromise","currentOptionsPromise","resolvedOptions","currentSelectedPromise","resolvedSelected","_lastSearchPromise","searchResult","_defaultBuildSelection","_handleKeyUpDown","_handleKeyEnter","_handleKeyTab","_handleKeyESC","newHighlighted","advanceSelectableOption","defHighlighted","defaultHighlighted","skipDisabled","optionMatcher","getOptionMatcher","defaultMatcher","searchField","filterOptions","typeAheadOptionMatcher","defaultTypeAheadMatcher","findOptionWithOffset","_PowerSelectComponent","collection","coll","TEMPLATE","errorsInstrumented","errorCallback","addGlobalErrorInstrumentationHandler","addGlobalUnhandledRejectionInstrumentationHandler","_oldOnErrorHandler","instrumentError","handlerData","__SENTRY_INSTRUMENTED__","maybeInstrument","_oldOnUnhandledRejectionHandler","instrumentUnhandledRejection","onunhandledrejection","_htmlElementAsString","keyAttrs","elem","dataset","sentryComponent","sentryElement","keyAttrPairs","keyAttr","keyAttrPair","allowedAttrs","currentElem","location","oO","MAX_TRAVERSE_HEIGHT","sepLength","nextStr","maxStringLength","onFinally","samplingContext","inheritOrSampleWith","fallbackSampleRate","shouldSample","_attributes","_parentSpanId","_sampled","_endTime","_isStandaloneSpan","_onSpanEnded","TRACE_FLAG_SAMPLED","timeInput","logSpanEnd","SEMANTIC_ATTRIBUTE_PROFILE_ID","exclusive_time","SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME","measurements","timedEventsToMeasurements","is_segment","segment_id","attributesOrStartTime","isSpanTimeInput","time$1","isStandaloneSpan","spanItems","sendEnvelope","createSpanEnvelope","transactionEvent","_convertSpanToTransaction","isFullFinishedSpan","capturedSpanScope","capturedSpanIsolationScope","getSpanDescendants","spanToTransactionTraceContext","transaction_info","SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE","SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT","events","processors","final","parsedStackResults","lastKeysCount","cachedFilenameDebugIds","debugIdMap","_sentryDebugIds","debugIdKeys","stackKey","parsedStack","stackFrame","debugId","resource_paths","mergeAndOverwriteScopeData","mergeVal","cleanedExtra","cleanedTags","cleanedUser","cleanedContexts","spanToTraceContext","mergedBreadcrumbs","mergeData","ALREADY_SEEN_ERROR","MISSING_RELEASE_FOR_SESSION_ERROR","Client","_integrations","_numProcessing","_outcomes","_hooks","_dsn","getEnvelopeEndpointWithUrlEncodedAuth","_metadata","_transport","transport","transportOptions","checkOrSetAlreadyCaught","hintWithEventId","_process","eventFromException","_captureEvent","eventMessage","promisedEvent","eventFromMessage","sendSession","getSdkMetadata","_isClientDoneProcessing","clientFinished","transportFlushed","eventProcessor","_isEnabled","_setupIntegrations","integrationName","integration$1","isAlreadyInstalled","afterSetupIntegrations","sendEvent","createEventEnvelope","addItemToEnvelope","envelope$1","createAttachmentEnvelopeItem","sendResponse","clientReleaseOption","clientEnvironmentOption","sessionAttrs","createSessionEnvelope","sendClientReports","cbIndex","callbacks","send","syncpromise","setupIntegrations","_updateSessionFromEvent","crashed","errored","exceptions","sessionNonTerminal","ticked","interval","_prepareEvent","getTraceContextFromScope","dynamicSamplingContext$1","eventUtils","getPossibleEventMessages","_processEvent","finalEvent","isTransaction","isTransactionEvent","beforeSendLabel","__sentry__","beforeSend","beforeSendTransaction","processedEvent","processedRootSpanJson","convertTransactionEventToSpanJson","convertSpanJsonToTransactionEvent","processedSpans","processedSpan","spanCountBefore","spanCountBeforeProcessing","beforeSendResult","invalidValueError","spanCount","droppedSpanCount","transactionInfo","_clearOutcomes","outcomes","quantity","_flushOutcomes","clientreport","createClientReportEnvelope","BaseClient","discarded_events","clientReportItem","possibleMessages","lastException","taskProducer","drain","counter","capturedSetTimeout","aggregateExceptionsFromError","exceptionFromErrorImplementation","prevExceptions","exceptionId","newExceptions","applyExceptionGroupFieldsForParentException","newException","newExceptionId","applyExceptionGroupFieldsForChildException","childError","is_exception_group","exception_id","parentId","parent_id","maxValueLimit","filenameMetadataMap","parsedStacks","getMetadataForUrl","_sentryModuleMetadata","module_metadata","instrumentConsole","normalizeArray","allowAboveRoot","splitPathRe","splitPath","truncated","resolvedPath","resolvedAbsolute","normalizePath","isPathAbsolute","trailingSlash","normalizedPath","fromParts","toParts","samePartsLength","outputParts","fragment","relative","urlPath","supportsFetch","Headers","Response","isNativeFunction","DOMError","DOMException","ErrorEvent","history","EdgeRuntime","fetch","sandbox","hidden","contentWindow","__SENTRY_BROWSER_BUNDLE__","filenameIsInApp","isNative","getModule","FILENAME_MATCH","FULL_MATCH","lineMatch","functionName","methodName","methodStart","objectEnd","UNKNOWN_FUNCTION","_parseIntOrUndefined","in_app","BrowserClient","sdkSource","SENTRY_SDK_SOURCE","getSDKSource","applySdkMetadata","addAutoIpAddressToUser","addAutoIpAddressToSession","interactionCountEstimate","minKnownInteractionId","maxKnownInteractionId","updateEstimate","interactionId","getInteractionCount","interactionCount","initInteractionCountPolyfill","rIC","runOnce","createFrame","chromeRegexNoFnName","chromeRegex","chromeEvalRegex","chromeStackLineParser","noFnParts","subMatch","extractSafariExtensionDetails","geckoREgex","geckoEvalRegex","geckoStackLineParser","winjsRegex","winjsStackLineParser","opera10Regex","opera10StackLineParser","opera11Regex","opera11StackLineParser","defaultStackLineParsers","defaultStackParser","isSafariExtension","isSafariWebExtension","breadcrumbsIntegration","defineIntegration","_breadcrumbsIntegration","xhr","addConsoleInstrumentationHandler","severityLevelFromString","safeJoin","addClickKeypressInstrumentationHandler","componentName","serializeAttribute","getComponentName","addXhrInstrumentationHandler","sentryXhrData","SENTRY_XHR_DATA_KEY","status_code","getBreadcrumbLogLevelFromHttpStatusCode","addFetchInstrumentationHandler","fetchData","request_body_size","response_body_size","addHistoryInstrumentationHandler","parsedLoc","parseUrl","helpers","parsedFrom","parsedTo","getEventDescription","DEFAULT_EVENT_TARGET","browserApiErrorsIntegration","_browserApiErrorsIntegration","XMLHttpRequest","eventTarget","_wrapTimeFunction","_wrapRAF","_wrapXHR","eventTargetOption","_wrapEventTarget","originalCallback","originalSend","wrapOptions","originalFunction","globalObject","originalRemoveEventListener","originalEventHandler","browserSessionIntegration","startSession","globalHandlersIntegration","_globalHandlersIntegration","stackTraceLimit","shouldIgnoreOnError","ev","ev0","ev0s","ev0sf","globalHandlerLog","httpContextIntegration","referrer","Referer","linkedErrorsIntegration","_linkedErrorsIntegration","applyAggregateErrorsToEvent","LazyLoadableIntegrations","replayIntegration","replayCanvasIntegration","captureConsoleIntegration","contextLinesIntegration","dedupeIntegration","extraErrorDataIntegration","graphqlClientIntegration","httpClientIntegration","reportingObserverIntegration","rewriteFramesIntegration","browserProfilingIntegration","moduleMetadataIntegration","WindowWithMaybeIntegration","bundle","sentryOnWindow","Sentry","baseURL","cdnBaseUrl","script","crossOrigin","waitForLoad","currentScript","integrationFn","responseToSpanId","spanIdToEndTimestamp","defaultRequestInstrumentationOptions","traceFetch","traceXHR","enableHTTPTimings","trackFetchStreamPerformance","addHTTPTimings","addPerformanceInstrumentationHandler","entryType","initiatorType","endsWith","resourceTiming","extractNetworkProtocol","timingSpanData","browserPerformanceTimeOrigin","getAbsoluteTime","redirectStart","fetchStart","domainLookupStart","domainLookupEnd","connectStart","secureConnectionStart","connectEnd","requestStart","responseEnd","shouldAttachHeaders","targetUrl","tracePropagationTargets","resolvedUrl","currentOrigin","isSameOriginRequest","stringMatchesSomePattern","pathname","isRelativeSameOriginRequest","xhrCallback","shouldCreateSpan","__sentry_own_request__","shouldCreateSpanResult","__sentry_xhr_span_id__","setHttpStatus","fullUrl","getFullURL","parsedUrl","urlForSpanName","stripUrlQueryAndFragment","hasParent","sentryTraceHeader","sentryBaggageHeader","setRequestHeader","shouldCreateSpanForRequest","shouldAttachHeadersWithTargets","updatedTimestamp","addFetchEndInstrumentationHandler","createdSpan","instrumentFetchRequest","__span","MS_TO_NS","THREAD_ID_STRING","OS_PLATFORM","OS_PLATFORM_VERSION","OS_ARCH","OS_BROWSER","OS_MODEL","OS_LOCALE","enrichWithThreadInformation","convertJSSelfProfileToSampledFormat","createProfilePayload","processed_profile","enrichedThreadProfile","transactionStartMs","transactionEndMs","runtime","os","build_number","device","manufacturer","architecture","is_emulator","applyDebugMetadata","resources","active_thread_id","relative_start_ns","relative_end_ns","EMPTY_STACK_ID","STACK_ID","samples","stacks","thread_metadata","firstSample","perfOrigin","adjustForOriginChange","jsSample","stackId","elapsed_since_start_ns","stack_id","thread_id","stackTop","resourceId","getDebugImagesForResources","isValidSampleRate","getHighEntropyValues","ua","platformVersion","fullVersionList","firstUa","PROFILING_CONSTRUCTOR_FAILED","PROFILE_MAP","profiles","profilesSampleRate","JSProfilerConstructor","Profiler","maxSamples","MAX_PROFILE_DURATION_MS","sampleInterval","maxBufferSize","getNative","funcToString","baseFor","baseTimes","isIndex","inherited","isArr","isArg","isBuff","skipIndexes","isPrototype","nativeKeys","SetCache","arraySome","cacheHas","equalFunc","isPartial","arrLength","othLength","arrStacked","othStacked","arrValue","othValue","compared","othIndex","setCacheAdd","setCacheHas","baseGetAllKeys","arrayPush","keysFunc","symbolsFunc","srcValue","baseGet","baseToString","baseHasIn","hasPath","hasFunc","arrayIncludes","arrayIncludesWith","createSet","setToArray","isCommon","computed","seenIndex","predicate","fromIndex","fromRight","baseFlatten","reHasUnicode","baseForOwn","baseEach","getSymbolsIn","overRest","setToString","nativeMax","otherArgs","baseSetToString","toFinite","remainder","STYLE_TAG","COMMENT_OPEN","AT_NAME_END","escapeHTMLInCSS","DEFAULT_RAW","beforeClose","beforeComment","beforeDecl","beforeOpen","beforeRule","colon","commentLeft","commentRight","emptyBody","semicolon","atruleStart","afterName","isCustomProperty","pushBody","isDocument","childSemicolon","pushBlock","hasNodes","ownSemicolon","atrule","beforeAfter","detect","expandable","important","own","rawCache","rawBeforeClose","rawBeforeComment","rawBeforeDecl","rawBeforeOpen","rawBeforeRule","rawColon","rawEmptyBody","rawIndent","rawSemicolon","rule","existsSync","readFileSync","realpathSync","dirname","realPath","unsafeMap","loadAnnotation","startWith","loadMap","decodeInline","uriMatch","baseUriMatch","atob","encoding","getAnnotationURL","sourceMapString","isMap","mappings","_mappings","sections","comments","loadFile","cssFile","trusted","fromSourceMap","prevPath","unknown","withContent","sourcesContent","separators","inQuote","prevQuote","letter","MapGenerator","TYPE_TO_CLASS_NAME","PLUGIN_PROPS","AtRuleExit","CommentExit","DeclarationExit","DocumentExit","Once","OnceExit","prepare","RootExit","RuleExit","NOT_VISITORS","getEvents","toStack","eventIndex","visitorIndex","visitors","cleanMarks","postcss","processed","syntax","processing","runAsync","onRejected","getAsyncError","handleError","postcssVersion","prepareVisitors","hasListener","runOnRoot","visitTick","visitor","roots","subRoot","rootSource","generate","walkSync","visitSync","onFulfilled","descending","visitNode","descended","registerPostcss","cssString","mapOpts","originalCSS","usesFileUrls","absolute","memoizedFileURLs","memoizedPaths","memoizedURLs","addAnnotation","toBase64","outputFile","applyPrevMaps","toUrl","applySourceMap","clearAnnotation","generateMap","generateString","ignoreInvalidMapping","addMapping","generated","isSourcesContent","setSourcesContent","isAnnotation","noSource","sourcePath","previousMaps","already","toFileUrl","setSourceContent","btoa","unescape","fileURL","printed","neq","HdsCodeBlockLanguageValues","Bash","Go","Hcl","Json","Log","Ruby","ShellSession","Yaml","HdsFormTagValues","rangeFrom","rangeTo","isExtendingChar","isRegionalIndicator","numbers","ZWJ","includeExtending","nextClusterBreak","prevClusterBreak","surrogateLow","surrogateHigh","countBefore","code0","code1","lineInner","decompose","TextNode","scanIdentical","RawTextCursor","PartialTextCursor","iterLines","LineCursor","TextLeaf","Line","sliceText","joined","appendText","lineSep","childOpen","totalLines","eA","eB","chA","chB","flat","maxChunk","minChunk","chunked","currentLines","currentLen","currentChunk","nextInner","offsetValue","afterBreak","findClusterBreak$1","fromCodePoint","DefaultSplit","Simple","ChangeDesc","iterGaps","individual","composeDesc","composeSets","mapDesc","mapSet","endA","invert","resultSections","resultInserted","filteredSections","SectionIter","addSection","addInsert","filtered","insText","insLen","forceJoin","endB","setA","setB","mkSet","len2","sectionLen","insB","textBit","forward2","SelectionRange","includeAssoc","asSingle","checkSelection","docLength","nextID","compareInput","sameArray","static","FacetProvider","deps","dependencies","dynamicSlot","addresses","multi","depDoc","depSel","depAddrs","ensureAll","newVal","compareArray","reconfigure","oldState","oldAddr","address","oldVal","getAddr","addrs","addr","ensureAddr","dynamicFacetSlot","providers","providerAddrs","providerTypes","depChanged","oldProviders","facets","initField","createF","updateF","compareF","provides","slot","reInit","oldInit","prec","PrecExtension","Compartment","CompartmentInstance","compartment","compartments","Configuration","dynamicSlots","staticValues","statusTemplate","staticFacet","fields","newCompartments","oldFacets","computeSlot","changeFilter","transactionExtender","AnnotationType","StateEffectType","mapEffects","_doc","applyTransaction","ann","reconfigured","joinRanges","mergeTransaction","mapForA","mapForB","resolveTransactionInner","docSize","resolveTransaction","seq","extenders","back","addToHistory","remote","Word","Other","nonASCIISingleCaseWordChar","wordChar","startValues","result1","newChanges","newMapped","mapBy","fieldInit","configuration","provider","wordChars","wordAt","kA","kB","cmpVal","cmpRange","Chunk","maxPoint","startAt","newFrom","newTo","curFrom","curTo","nextLayer","updateSpec","LayerCursor","spill","addInner","chunkIndex","addChunk","nextChunk","finishInner","HeapCursor","oldSets","newSets","textDiff","minPointSize","sharedChunks","findSharedChunks","sideA","SpanCursor","sideB","sameValues","openRanges","activeForPoint","openCount","pointFrom","pointRank","newArrays","setMaxPoint","lastFrom","lastTo","inA","shared","minPoint","gotoInner","setRangeIndex","heap","heapBubble","childIndex","activeTo","activeRank","minActive","removeActive","findMinIndex","addActive","trackOpen","wasPoint","nextVal","startA","startB","dPos","dEnd","clipEnd","foundPos","childFirst","sparse","EnterNode","datum","namespaceURI","_next","_parent","bindIndex","exit","groupLength","dataLength","bindKey","keyValue","nodeByKeyValue","keyValues","arraylike","ascending","attrRemove","attrRemoveNS","fullname","removeAttributeNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","propertyRemove","propertyConstant","propertyFunction","classArray","ClassList","_node","_names","classedAdd","classedRemove","classedTrue","classedFalse","classedFunction","textRemove","textConstant","textFunction","htmlRemove","htmlConstant","htmlFunction","raise","constantNull","selection_cloneShallow","selection_cloneDeep","typename","__on","onAdd","initEvent","dispatchConstant","dispatchFunction","Selection","_parents","subgroups","subnode","subgroup","selectAll","selectorAll","selectChild","childMatcher","selectChildren","enterGroup","updateGroup","i0","i1","_enter","_exit","onenter","onupdate","onexit","groups0","groups1","m0","m1","merges","group0","group1","compareNode","sortgroups","sortgroup","getAttributeNS","selection_style","classed","deep","typenames","src_selection","styleRemove","styleConstant","styleFunction","styleValue","getPropertyValue","completionState","COMPLETION_PENDING","isSuccessful","isCanceled","hasStarted","isFinished","getMaskAt","maskPattern","Patterns","PATTERN000","PATTERN001","PATTERN010","PATTERN011","PATTERN100","PATTERN101","PATTERN110","PATTERN111","mask","sameCountCol","sameCountRow","lastCol","lastRow","bitsCol","bitsRow","darkCount","modulesCount","isReserved","xor","setupFormatFunc","numPatterns","bestPattern","lowerPenalty","applyMask","penalty","getPenaltyN1","getPenaltyN2","getPenaltyN3","getPenaltyN4","nextTagID","Tag","modified","nameOrParent","defineModifier","nextModifierID","byName","ruleNodeProp","opaque","inherit","tagClass","putStyle","HighlightBuilder","highlightRange","inheritedClass","matchContext","tagCls","innerHighlighters","hasChild","nextPos","punctuation","lineComment","blockComment","docComment","attributeName","docString","character","attributeValue","integer","float","null","operatorKeyword","controlKeyword","definitionKeyword","moduleKeyword","derefOperator","arithmeticOperator","logicOperator","bitwiseOperator","compareOperator","updateOperator","definitionOperator","typeOperator","controlOperator","angleBracket","squareBracket","paren","brace","heading1","heading2","heading3","heading4","heading5","heading6","quote","monospace","documentMeta","processingInstruction","constant","standard","DefaultBufferLength","nextPropID","deserialize","contextHash","lookAhead","MountedTree","bracketed","noProps","isAnonymous","newTypes","newProps","CachedNode","CachedInnerNode","IncludeAnonymous","IgnoreMounts","IgnoreOverlays","TreeCursor","cursorAt","_tree","TreeNode","resolveNode","layers","iterStack","anon","entered","propValues","balanceRange","makeTree","minRepeatType","FlatBufferCursor","takeNode","parentStart","minPos","inRepeat","lookAheadAtStart","contextAtStart","fork","minStart","nodeSize","localSkipped","nodeStart","Uint16Array","copyToBuffer","TreeBuffer","localChildren","localPositions","localInRepeat","lastGroup","lastEnd","makeRepeatLeaf","takeFlatNode","make","lookAheadProp","lastI","nodeCount","pair","bufferStart","childString","pick","checkSide","startI","endI","overlays","BaseNode","getChild","matchNodeContext","nextChild","BufferNode","BufferContext","rPos","enterBracketed","nextSignificantParent","toTree","externalSibling","heads","picked","newHeads","StackIterator","bufferNode","yieldNode","yieldBuf","yield","enterChild","sibling","atLastNode","mustLeave","nodeSizeCache","balanceType","mkTop","mkTree","maxChild","divide","groupFrom","groupStart","groupSize","nextSize","only","NodeWeakMap","setBuffer","cursorSet","cursorGet","partial","minGap","fI","nextF","cI","nextC","fFrom","fTo","StringInput","parseMixed","nest","MixedParse","InnerParse","checkRanges","ActiveOverlay","mounts","stoppedInner","innerDone","baseTree","baseParse","startInner","fragmentCursor","FragmentCursor","covered","hasNode","frag","checkCover","materialize","oldMounts","findMounts","punchRanges","enterFragments","sliceBuf","newStack","innerOffset","stackPos","targetI","StructureCursor","fragI","curFrag","nextFrag","gapFrom","gapTo","findCoverChanges","inB","nextA","nextB","allocUnsafe","isDeep","SINGLETON_REDUCER","UnboundedPolicy","makeReducer","MODIFIER_REGISTRY","setBufferPolicy","EnqueuedPolicy","evented","setEvented","setDebug","DropPolicy","groupName","setGroup","KeepLatestPolicy","setMaxConcurrency","onState","onStateCallback","setOnState","RestartablePolicy","registerModifier","getModifier","hasModifier","taskDefinition","taskable","UnboundedSchedulerPolicy","_processModifierOptions","getTaskOptions","Task","generatorFactory","TaskGroup","getScheduler","schedulerPolicy","stateTrackingEnabled","Scheduler","scheduler","_onStateCallback","_taskGroupPath","_schedulerPolicyClass","_maxConcurrency","_debug","hasEnabledEvents","_hasEnabledEvents","enabledModifiers","_enabledModifiers","modifierOptions","policy","_hasSetBufferPolicy","_hasSetConcurrencyConstraint","__WEBPACK_AMD_DEFINE_RESULT__","FUNC_TYPE","UNDEF_TYPE","OBJ_TYPE","STR_TYPE","MAJOR","MODEL","NAME","VENDOR","VERSION","ARCHITECTURE","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","EMBEDDED","AMAZON","APPLE","ASUS","BLACKBERRY","BROWSER","CHROME","FIREFOX","GOOGLE","HUAWEI","LG","MICROSOFT","MOTOROLA","OPERA","SAMSUNG","SHARP","SONY","XIAOMI","ZEBRA","FACEBOOK","CHROMIUM_OS","MAC_OS","enumerize","enums","str1","str2","lowerize","rgxMapper","arrays","strMapper","windowsVersionMap","ME","XP","Vista","RT","cpu","engine","EDGE","UAParser","getResult","_navigator","_ua","_uach","_rgxmap","mergedRegexes","_isSelfNav","getBrowser","_browser","brave","isBrave","getCPU","_cpu","getDevice","_device","mobile","getEngine","_engine","getOS","_os","getUA","setUA","CPU","DEVICE","ENGINE","OS","jQuery","Zepto","propertyModifiers","RestartableSchedulerPolicy","EnqueueSchedulerPolicy","DropSchedulerPolicy","KeepLatestSchedulerPolicy","taskGroupPath","callSuperSetup","addPerformEvents","cancelOn","addCancelEvents","observes","addObserverKeys","setDecorator","Ember","cp","codes","removeDiacritics","registeredLocales","alpha2","alpha3","numeric","invertedNumeric","formatNumericCode","filterNameBy","countryNameList","alpha3ToAlpha2","alpha2ToAlpha3","numericToAlpha3","numericToAlpha2","toAlpha2","codeInformation","countries","nameList","localeList","newLocaleList","normalizeString","areSimilar","codenames","mappedName","getAlpha2Code","toAlpha3","getSimpleAlpha2Code","coerced","Column","Start","End","SpaceBetween","SpaceAround","SpaceEvenly","Stretch","Four","Eight","Twelve","ThirtyTwo","FortyEight","BottomLeft","TopLeft","TopRight","HdsCardBackgroundValues","NeutralPrimary","NeutralSecondary","HdsCardLevelValues","Base","Mid","High","HdsCardOverflowValues","Hidden","Visible","HdsCardTagValues","Li","BaseTaskInstance","performType","onStarted","onCancel","formatCancelReason","selfCancelLoopWarning","onFinalize","yieldResumeType","proceedChecked","parentTaskInstance","onYielded","cancelReason","CANCEL_KIND_EXPLICIT","INITIAL_STATE","isDropped","isRunning","_recomputeState","triggerEvent","getName","parentName","childName","allArgs","eventNamespace","TRACKED_INITIAL_INSTANCE_STATE","defineProperties","TaskGroup$1","TRACKED_INITIAL_TASK_STATE","TASKABLE_MIXIN","AVAILABLE_TAGS","HdsForm","sectionMaxWidthStyle","sectionMaxWidth","_HdsForm","HdsModalSizeValues","HdsModalColorValues","HdsModal","isDismissDisabled","showModal","_performCloseCleanup","_body","_bodyInitialOverflowValue","registerOnCloseCallback","_mousedownOutsideModalHandler","_mousedownWasOutsideModal","_clickOutsideToDismissHandler","initiator","getElementById","_HdsModal","PNGlib","Identicon","saturation","brightness","hue","hsl2rgb","image","isSvg","Svg","baseMargin","bg","fg","rectangle","rectangles","getDump","getBase64","xml","HdsAccordion","_HdsAccordion","DASHERIZE_REGEX","StyleModifier","setStyles","newStyles","existingStyles","rulesToRemove","typeOf","UNINITIALIZED","ElementHelper","componentClass","EmberComponent","runInDebug","append_default","isEmberArray","resultIndex","chunk_default","compact","compact_default","compute_default","dec_default","dropAmount","drop_default","entries_default","filterBy","byPath","filterFn","filterBy_default","filter_default","findBy","findBy_default","flattened","flatten_default","fromEntries_default","groupBy","groupBy_default","hasNext","hasNext_default","hasPrevious","hasPrevious_default","inc_default","needleOrNeedles","haystack","needles","haystackAsEmberArray","needle","includes_default","intersect","confirmedArrays","candidate","intersect_default","invoke","promises","invoke_default","rawArray","join_default","keys_default","mapBy_default","map_default","noop","noop_default","objectAt","objectAt_default","pick_default","invokeMaybeNullable","queue_default","isInclusive","testFn","range_default","reduce_default","rejectBy","rejectBy_default","repeat","repeat_default","emberArray","reverse_default","shuffle","randomizer","rand","shuffle_default","slice_default","collator","Collator","sensitivity","normalizeToBoolean","safeValueForKey","sortDesc","aValue","bValue","isANullable","isBNullable","sortAsc","SortBy","defaultSort","sortKey","BubbleSort","swapped","compFuncs","compFunc","sortParams","sortKeys","sortKlass","sortBy_default","takeAmount","take_default","union","union_default","values_default","without","without_default","Tertiary","THEMES","HdsAppFooter","_HdsAppFooter","_isDesktop","_hasOverflowContent","HdsAppHeader","hasA11yRefocus","a11yRefocusSkipTo","breakpoint","hdsBreakpoints","_desktopMQ","_desktopMQVal","addEventListeners","removeEventListeners","escapePress","updateDesktopVariable","syntheticEvent","MediaQueryListEvent","media","_HdsAppHeader","NavigationNarrator","HdsAppHeaderMenuButton","shallowEqual","defaultValidator","current_a","current_b","queryParams","_router","_isSkipLinkFocused","hasSameRoute","excludeAllQueryParams","hasQueryParams","routeChangeValidator","timer","isSkipLinkFocused","router","onRouteChange","skipLink","skipText","navigationText","_NavigationNarrator","_HdsAppHeaderMenuButton","HdsAppHeaderHomeLink","_HdsAppHeaderHomeLink","_isMinimized","_isAnimating","HdsAppSideNav","_navWrapperBody","synchronizeInert","unlockBodyScroll","onToggleMinimizedStatus","lockBodyScroll","onDesktopViewportChange","isMinimized","isResponsive","isCollapsible","isMobileCollapsible","showToggleButton","_HdsAppSideNav","HdsAppSideNavPortal","Portal","_numSubnavs","_lastPanelEl","HdsAppSideNavPortalTarget","portalCount","animateSubnav","activeIndex","prefersReducedMotion","columnWidth","slideDuration","fadeDuration","fadeDelay","animate","easing","finished","allPrev","ele","nextPanelEl","lastPanelEl","prefersReducedMotionOverride","_prefersReducedMotionMQ","_HdsAppSideNavPortalTarget","PortalTarget","HdsBreadcrumb","itemsCanWrap","_HdsBreadcrumb","HdsBreadcrumbItem","_HdsBreadcrumbItem","HdsBreadcrumbTruncation","_HdsBreadcrumbTruncation","DEFAULT_LEVEL","DEFAULT_BACKGROUND","DEFAULT_OVERFLOW","LEVELS","BACKGROUNDS","OVERFLOWS","HdsCardContainer","levelHover","levelActive","hasBorder","_HdsCardContainer","LANGUAGES","_prismCode","_codeContentHeight","_codeContainerHeight","_descriptionId","HdsCodeBlock","_preCodeElement","contentBoxSize","_updateCodeHeights","_updatePrismPlugins","setPrismCode","grammar","Prism","htmlSafe","highlightLines","_addHighlightSrOnlyText","hasLineNumbers","numLines","lineOffset","lineNumberStart","highlightedLines","currentRange","NormalizeWhitespace","showFooter","hasLineWrapping","_HdsCodeBlock","_self","plainTextGrammar","manual","disableWorkerMessageHandler","util","Token","objId","__id","deepClone","getLanguage","setLanguage","scripts","getElementsByTagName","defaultActivation","no","plain","plaintext","txt","redef","newToken","DFS","propertyType","highlightAll","highlightAllUnder","highlightElement","insertHighlightedCode","highlightedCode","Worker","worker","onmessage","postMessage","immediateClose","tokenize","tokenList","LinkedList","addAfter","matchGrammar","tail","matchedStr","matchPattern","lookbehind","lookbehindLength","rematch","cause","patternObj","greedy","reach","removeCount","matchStr","removeFrom","removeRange","nestedRematch","newNode","highlightAutomaticallyCallback","WorkerGlobalScope","markup","prolog","doctype","cdata","includedCdataInside","attrName","mathml","ssml","rss","addInlined","addAttribute","clike","boolean","javascript","parameter","hashbang","interpolation","js","EXTENSIONS","py","rb","ps1","psm1","sh","bat","tex","STATUS_ATTR","STATUS_LOADING","STATUS_LOADED","SELECTOR","pre","autoloader","loadLanguages","onreadystatechange","responseText","statusText","fileHighlight","logged","_isFullScreen","_isSetupComplete","HdsCodeEditor","handleKeyDown","toggleFullScreen","editorView","onSetup","hasActions","hasCopyButton","hasFullScreenButton","_HdsCodeEditor","HdsCodeEditorGeneric","HdsCodeEditorModifier","EmberScheduler","scheduleRefresh","once","handlerCounter","registerOnPrototype","addListenerOrObserver","taskMethod","handlerName","makeTaskCallback","ensureArray","possibleArr","eventNames","propertyPaths","EncapsulatedTask","taskObj","cancelEventNames","_cancelEventNames","_observes","_eventNames","HdsFlyoutSizesValues","HdsFlyout","_HdsFlyout","HdsFormCheckboxGroup","HdsFormFileInputField","KEY_VALUE_INPUTS_FIELD_SELECTOR","KEY_VALUE_INPUTS_GENERIC_SELECTOR","KEY_VALUE_INPUTS_DELETE_ROW_CONTAINER_SELECTOR","HdsFormKeyValueInputs","_gridTemplateColumns","_HdsFormKeyValueInputs","_updateColumns","updatedGridTemplateColumns","columnElement","glueId","HdsFormMaskedInputField","HdsFormRadioGroup","HdsFormRadioCardGroup","HdsFormSuperSelectSingleField","idPrefix","_HdsFormSuperSelectSingleField","HdsFormSuperSelectMultipleField","_HdsFormSuperSelectMultipleField","HdsFormTextareaField","_isPasswordMasked","HdsFormTextInputField","showVisibilityToggle","_HdsFormTextInputField","HdsFormToggleGroup","Boundary","Consul","HCP","Nomad","Packer","Terraform","Vagrant","Vault","Waypoint","HdsPageHeader","DEFAULT_PAGE_SIZES","_currentPageSize","_lastActivatedDirection","HdsPaginationCompact","showLabels","showSizeSelector","newPage","onPageChange","newPageSize","onPageSizeChange","queryFunction","currentPageSize","buildQueryParamsObject","pageSize","routing","queryPrev","queryNext","shouldFocusPrevArrow","isDisabledNext","isDisabledPrev","shouldFocusNextArrow","_HdsPaginationCompact","ELLIPSIS","elliptize","pages","sliceStart","sliceEnd","sliceCurr","_currentPage","HdsPaginationNumbered","showInfo","showPageNumbers","gotoPageNumber","currentPage","totalPages","queryPages","elliptizedPageArrayItemAsNumber","_HdsPaginationNumbered","HdsReveal","textWhenOpen","_HdsReveal","HdsRichTooltip","_HdsRichTooltip","HdsSegmentedGroup","_HdsSegmentedGroup","_stepIds","HdsStepperList","stepId","_HdsStepperList","_stepNodes","HdsStepperNav","updateSteps","updatePanels","currentStepIndex","nextStepIndex","findNextInteractiveStepIndex","focusStep","prevStepIndex","steps","newStepIds","newStepNodes","newPanelIds","newPanelNodes","increment","newStepIndex","stepIndex","progressBarWidthStyle","progressBarWidth","progressBarOffset","activeStepWidth","_HdsStepperNav","MAPPING_STATUS_TO_ICONS","HdsStepperTaskIndicator","_HdsStepperTaskIndicator","_sortBy","_sortOrder","HdsTable","getSortCriteria","lowerCaseTranslatedSortOrder","isFixedLayout","_HdsTable","HdsTabsSizeValues","_selectedTabId","HdsTabs","setTabIndicator","onClickTab","focusTab","tabElem","tabElemParentNode","tabsElemClosestList","tabLeftPos","tabWidth","_HdsTabs","dateIsValid","HdsTime","isValidDate","isValidDateRange","hasTooltip","isoUtcString","rangeIsoUtcString","nextDiff","timeDifference","difference","absValueInMs","valueInMs","_HdsTime","HdsToast","HdsAppFrame","hasHeader","hasSidebar","hasFooter","hasModals","_HdsAppFrame","HdsLayoutGridAlignValues","HdsLayoutGridGapValues","HdsLayoutGrid","columnMinWidth","_HdsLayoutGrid","localStorage","getItem","miss","setItem","removeItem","serializable","WithinHeaders","queryParameters","WithinQueryParameters","wait","cacheable","Read","Write","Any","accept","transporterStackTrace","connectTimeout","timeouts","connect","responseTimeout","triesLeft","onRetry","isTimedOut","hostsCache","onFail","requester","getTimeout","statelessHosts","requestsCache","responsesCache","hosts","mappedRequestOptions","transporter","segment","U","J","F","K","batch","shouldStop","acl","Y","cluster","users","G","operation","destination","methods","waitTask","tt","taskID","nt","Rules","V","Settings","Synonyms","X","Z","ee","te","retrieveMappings","getClusters","appId","indexName","ne","ae","oe","ue","se","requests","ce","fe","de","facetName","facetQuery","searchForFacetValues","Ye","le","pe","he","ye","ge","ve","hitsPerPage","Ze","_highlightResult","be","$e","Pe","batchSize","taskIDs","objectIDs","Oe","we","forwardToReplicas","je","Ie","xe","qe","De","objectID","rt","DeleteObject","Se","ke","Te","Je","Ne","queryLanguages","Re","paginate","Xe","nbPages","Ae","Ee","Ce","attributesToRetrieve","Ue","getVersion","ze","Fe","He","createIfNotExists","PartialUpdateObject","PartialUpdateObjectNoCreate","Me","autoGenerateObjectIDIfNotExist","Qe","Ke","Le","clearExistingRules","We","clearExistingSynonyms","Be","AddObject","UpdateObject","Ge","Ve","replaceExistingSynonyms","et","DeleteIndex","ClearIndex","apiKey","OPENED","authMode","addAlgoliaAgent","clearCache","multipleBatch","multipleGetObjects","multipleQueries","copyIndex","copySettings","copySynonyms","copyRules","moveIndex","listIndices","getLogs","listClusters","multipleSearchForFacetValues","getApiKey","addApiKey","listApiKeys","updateApiKey","deleteApiKey","restoreApiKey","assignUserID","assignUserIDs","getUserID","searchUserIDs","listUserIDs","getTopUserIDs","removeUserID","hasPendingMappings","initIndex","findAnswers","getObject","getObjects","saveObject","saveObjects","setSettings","getSettings","partialUpdateObject","partialUpdateObjects","deleteObject","deleteObjects","deleteBy","clearObjects","browseObjects","getObjectPosition","findObject","saveSynonym","saveSynonyms","getSynonym","searchSynonyms","browseSynonyms","deleteSynonym","clearSynonyms","replaceAllObjects","replaceAllSynonyms","searchRules","getRule","deleteRule","saveRule","saveRules","replaceAllRules","browseRules","clearRules","initAnalytics","region","addABTest","getABTest","getABTests","stopABTest","deleteABTest","initRecommendation","getPersonalizationStrategy","setPersonalizationStrategy","FormatDateHelper","_intl","_FormatDateHelper","FormatDateRangeHelper","formatDateRange","_FormatDateRangeHelper","FormatDisplayNameHelper","formatDisplayName","_FormatDisplayNameHelper","FormatListHelper","formatList","_FormatListHelper","FormatMessageHelper","formatMessage","_FormatMessageHelper","FormatNumberHelper","_FormatNumberHelper","FormatRelativeTimeHelper","formatRelativeTime","_FormatRelativeTimeHelper","FormatTimeHelper","formatTime","_FormatTimeHelper","THelper","positionalOptions","namedOptions","_THelper","PageTitle","_dec","_class","_initializerDefineProperty","tokenId","scheduleTitleUpdate","_applyDecoratedDescriptor","offs","byte4","byte2lsb","pix_size","data_size","ihdr_offs","ihdr_size","plte_offs","plte_size","trns_offs","trns_size","idat_offs","idat_size","iend_offs","iend_size","buffer_size","pindex","_crc32","bits","green","blue","ndx","c1","c2","c3","e1","e2","e3","e4","BASE","s1","s2","crc32","png","crc","moment","symbolMap","numberMap","pluralForm","plurals","pluralize","weekdaysParseExact","suffixes","relativeTimeWithPlural","lastDigit","last2Digits","monthsParseExact","relativeTimeWithMutation","mutationTable","lastNumber","minWeekdaysParse","fullWeekdaysParse","shortWeekdaysParse","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","ll","lll","llll","plural","processRelativeTime","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","_calendarEl","monthsShortDot","numbersPast","numbersFuture","monthsShortWithDots","monthsShortWithoutDots","weekEndings","eraYearOrdinalRegex","$1","$2","isUpper","eifelerRegelAppliesToNumber","translateSingular","relativeTimeWithSingular","translator","words","correctGrammaticalCase","wordKey","relativeTimeMr","monthsNominative","monthsSubjective","relativeTimeWithSuffix","numbersNouns","numberNoun","hundred","ten","processHoursFunction","nominative","accusative","genitive","trailingSeparator","lastSegmentLength","lastSlash","dots","lastSlashIndex","_unused","Utils","ECCode","ECLevel","Mode","G18_BCH","getBCHDigit","getReservedBitsCount","getCharCountIndicator","getTotalBitsFromDataArray","segments","totalBits","reservedBits","getBitsLength","errorCorrectionLevel","dataTotalCodewordsBits","getSymbolTotalCodewords","getTotalCodewordsCount","MIXED","usableBits","seg","ecl","currentVersion","getCapacity","getLength","NumericData","AlphanumericData","ByteData","KanjiData","dijkstra","getStringByteLength","getSegments","getSegmentsFromString","numSegs","alphaNumSegs","byteSegs","kanjiSegs","isKanjiModeEnabled","BYTE_KANJI","getSegmentBitsLength","buildSingleSegment","modesHint","bestMode","getBestModeForData","prevNodeIds","nodeGroup","currentNodeIds","lastCount","prevNodeId","find_path","optimizedSegs","fromArray","prevSeg","__assign","ELoadingState","ReCaptchaInstance_1","NOT_LOADED","LOADING","LOADED","ReCaptchaLoader","getLoadingState","instanceSiteKey","successfulLoadingConsumers","errorLoadingRunnable","setLoadingState","loader","loadScript","useRecaptchaNet","useEnterprise","renderParameters","customUrl","widgetID","doExplicitRender","grecaptcha","explicitRenderParameters","autoHideBadge","getInstance","loadingState","_this","scriptElement","scriptBase","parametersQuery","buildQueryString","waitForScriptToLoad","parameters","parameterKey","SCRIPT_LOAD_DELAY","isEnterprise","augmentedParameters","sitekey","$L","$u","$x","$offset","$d","$y","$M","$D","$W","$H","$m","$s","$ms","$utils","$g","$locale","weekStart","$set","toUTCString","$i","isDayjs","en","Ls","evaluateOpCodes","opCodes","opCode","evaluateOpCode_pick","evaluateOpCode_index","evaluateOpCode_slice","evaluateOpCode_explode","evaluateOpCode_create_array","evaluateOpCode_create_object","evaluateOpCode_pipe","indexed","exploder","exploded","makeExploderCb","evaluateOpCode_create_object_build","in","peg$SyntaxError","expected","ctor","buildMessage","DESCRIBE_EXPECTATION_FNS","expectation","literalEscape","escapedParts","classEscape","inverted","describeExpectation","descriptions","peg$result","peg$FAILED","peg$startRuleFunctions","Script","peg$parseScript","peg$startRuleFunction","peg$c0","peg$c1","peg$otherExpectation","peg$c2","peg$c3","peg$classExpectation","peg$c4","peg$c5","peg$literalExpectation","peg$c6","peg$c7","peg$c8","peg$c9","peg$c10","peg$c11","peg$c12","peg$c13","peg$c14","peg$c15","peg$c16","peg$c17","peg$c18","peg$c19","peg$c20","peg$c21","peg$c22","peg$c23","peg$c24","peg$c25","peg$c26","peg$c27","peg$c28","peg$c29","peg$c30","peg$c31","peg$c32","peg$c33","peg$c34","peg$c35","negative","stringArray","peg$c36","peg$c37","peg$c38","peg$c39","peg$c40","peg$c41","peg$c42","peg$c43","peg$c44","peg$c45","peg$c46","peg$c47","peg$c48","peg$c49","peg$c50","peg$c51","peg$c52","peg$c53","peg$c54","peg$c55","peg$c56","peg$c57","peg$c58","peg$c59","peg$c60","peg$c61","peg$c62","peg$c63","peg$c64","peg$c65","sequence","peg$c66","peg$c67","peg$c68","peg$c69","peg$c70","peg$c71","peg$c72","digits","peg$c73","peg$c74","peg$c75","peg$c76","peg$c77","peg$c78","peg$c79","peg$c80","peg$c81","peg$c82","peg$c83","peg$c84","peg$c85","peg$c86","peg$c87","peg$c88","peg$c89","peg$c90","peg$c91","peg$c92","peg$c93","peg$c94","peg$currPos","peg$posDetailsCache","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","startRule","ignoreCase","peg$computePosDetails","details","peg$computeLocation","startPosDetails","endPosDetails","peg$fail","peg$parseExpression","s0","s3","s4","s5","s6","s7","peg$parseOperation","peg$parse_","peg$parsePipe","peg$parseTraversal","peg$parseNumber","peg$parseIdentifier","peg$parseString","s8","s9","peg$parseKeyValue","peg$parseIdentifierStart","peg$parseIdentifierPart","peg$parseHexDigit","parentContainsInteractive","_HdsAccordionItemButton","callHelper","optional","optionalHelper","_targetElement","_eventHandler","useCapture","TopStart","TopEnd","RightStart","RightEnd","BottomStart","BottomEnd","LeftStart","LeftEnd","_draggedColumnKey","_reorderHoveredColumnKey","_columnOrder","columnKeys","_getColumnKey","nextOrder","visibleSet","hiddenKeys","reordered","visibleIdx","hiddenIdx","missingKeys","setColumnOrder","targetColumnKey","lastColumn","moveColumnToTarget","newIndex","firstNonStickyColumnIndex","sourceColumnKey","oldIndex","adjustedIndex","visibleColumnOrder","visibleKeys","columnMap","firstColumn","firstNonStickyColumn","_HdsAdvancedTableColumnManagerOrder","Tracker","_portalService","newTarget","previousTarget","portalService","registerPortal","unregisterPortal","getTarget","_Tracker","_tracker","tracker","renderInPlace","_Portal","inputFn","registerTarget","unregisterTarget","getPortalCount","_PortalTarget","defineStreamLanguage","getErrorMessage","getCSPNonceFromMeta","rego","ruby","sentinel","shell","go","hcl","loadLinter","onLint","markdown","sql","yaml","isLintingEnabled","validLanguageKeys","extensionPromises","extraKeys","customExtensions","defaultKeymap","historyKeymap","languageExtensions","_loadLanguageExtensionsTask","handleUpdateExtension","lineWrappingCompartment","hdsDark","hdsDarkHighlightStyle","customKeyMap","_buildExtensionsTask","editor","_createEditorTask","_setupEditorBlurHandler","lintingDescriptionElement","_createLintingDescriptionElement","_setupEditorMutationObserver","_setupEditorAriaAttributes","mutationObserver","blurHandler","isIntersecting","_setupTask","inputElement","_setupEditorAriaLabel","_setupEditorAriaDescribedBy","ariaDescribedByArray","insertAdjacentElement","mutation","_HdsCodeEditorModifier","LAST_APPLIED_TAGS","Refresh","stateTracker","taskInstances","initialTaskInstances","startingInstances","numRunning","numQueued","filterFinishedTaskInstances","reducer","finalTaskInstances","setTaskInstanceExecutionState","computeFinalStates","applyState","taskState","stateFor","executorState","onCompletion","desiredState","onPerformed","onStart","onRunning","TYPE_QUEUED","onQueued","guid","numPerformedInc","RefreshState","lastRunning","lastComplete","COMPLETION_SUCCESS","COMPLETION_ERROR","lastErrored","COMPLETION_CANCEL","lastCanceled","lastIncomplete","lastPerformed","recurseTaskGroups","applyStateFrom","CURRENT_REFRESH_TAGS","StateTracker","states","currentTag","computeRecursiveState","forEachState","lastState","NULL_STATE","NullStateTracker","cancelRequest","cancelations","guids","cancelation","SchedulerRefresh","guidId","Taskable","cancelRequestKind","resetState","_resetState","_isAlive","DEFAULT_STATE","isQueued","isIdle","performCount","GeneratorStepResult","GeneratorState","resolvedValue","iteratorMethod","PERFORM_TYPE_DEFAULT","PERFORM_TYPE_UNLINKED","PERFORM_TYPE_LINKED","CANCEL_RETURN_VALUE_SENTINEL","TASK_INSTANCE_STACK","getRunningInstance","TaskInstanceExecutor","generatorState","disposers","finalizeCallbacks","proceedSync","requestCancel","proceedWithCancelAsync","finalizeWithCancel","advanceIndex","YIELDABLE_CANCEL","CANCEL_KIND_YIELDABLE_CANCEL","proceedAsync","dispose","handleResolvedReturnedValue","handleResolvedContinueValue","resumeValue","beforeIndex","stepResult","generatorStep","handleYieldedValue","YIELDABLE_THROW","handleYieldedUnknownThenable","thenable","yieldedValue","addDisposer","invokeYieldable","proceedWithSimpleValue","_expectsLinkedYield","maybeResolveDefer","runFinalizeCallbacks","maybeThrowUnhandledTaskErrorLater","reportUncaughtRejection","finalizeShared","debugEnabled","globalDebuggingEnabled","dispatchFinalizeEvents","getPerformType","detectSelfCancelLoop","CANCEL_KIND_PARENT_CANCEL","parentCancelRequest","CANCEL_KIND_LIFESPAN_END","EmberEnvironment","Environment","DEBUG_TASKS","applyTracked","propDesc","INITIAL_TASK_STATE","INITIAL_INSTANCE_STATE","CLOSE_BUTTON_SELECTOR","PANEL_DIAGNOSTIC_ITEM_SELECTOR","HDS_CODE_BLOCK_WHITE","HDS_CODE_EDITOR_COLOR_SURFACE_PRIMARY","HDS_CODE_BLOCK_GREEN","HDS_CODE_EDITOR_COLOR_FOREGROUND_FAINT","justifyContent","borderColor","HDS_CODE_BLOCK_LINE_HIGHLIGHT_BORDER","HDS_CODE_BLOCK_LINE_HIGHLIGHT","HDS_CODE_EDITOR_COLOR_FOREGROUND_CRITICAL","marginBottom","HDS_CODE_EDITOR_COLOR_SURFACE_FAINT","HDS_CODE_EDITOR_COLOR_FOCUS_ACTION_EXTERNAL","HDS_CODE_EDITOR_COLOR_FOCUS_ACTION_INTERNAL","HDS_CODE_EDITOR_COLOR_SURFACE_INTERACTIVE_ACTIVE","HDS_CODE_BLOCK_CYAN","HDS_CODE_BLOCK_BLUE","HDS_CODE_BLOCK_ORANGE","HDS_CODE_BLOCK_PURPLE","HDS_CODE_BLOCK_RED","HDS_CODE_EDITOR_COLOR_FOREGROUND_PRIMARY","isGroup","optionAtIndex","originalCollection","ancestorIsDisabled","localCounter","copyGroup","suboptions","groupCopy","foundBeforeOffset","foundAfterOffset","canStop","entryIsDisabled","currentOption","resultsLength","DIACRITICS","Ａ","À","Á","Â","Ầ","Ấ","Ẫ","Ẩ","Ã","Ā","Ă","Ằ","Ắ","Ẵ","Ẳ","Ȧ","Ǡ","Ä","Ǟ","Ả","Å","Ǻ","Ǎ","Ȁ","Ȃ","Ạ","Ậ","Ặ","Ḁ","Ą","Ⱥ","Ɐ","Ꜳ","Æ","Ǽ","Ǣ","Ꜵ","Ꜷ","Ꜹ","Ꜻ","Ꜽ","Ｂ","Ḃ","Ḅ","Ḇ","Ƀ","Ƃ","Ɓ","Ｃ","Ć","Ĉ","Ċ","Č","Ç","Ḉ","Ƈ","Ȼ","Ꜿ","Ｄ","Ḋ","Ď","Ḍ","Ḑ","Ḓ","Ḏ","Đ","Ƌ","Ɗ","Ɖ","Ꝺ","Ǳ","Ǆ","ǲ","ǅ","Ｅ","È","É","Ê","Ề","Ế","Ễ","Ể","Ẽ","Ē","Ḕ","Ḗ","Ĕ","Ė","Ë","Ẻ","Ě","Ȅ","Ȇ","Ẹ","Ệ","Ȩ","Ḝ","Ę","Ḙ","Ḛ","Ɛ","Ǝ","Ｆ","Ḟ","Ƒ","Ꝼ","Ｇ","Ǵ","Ĝ","Ḡ","Ğ","Ġ","Ǧ","Ģ","Ǥ","Ɠ","Ꞡ","Ᵹ","Ꝿ","Ｈ","Ĥ","Ḣ","Ḧ","Ȟ","Ḥ","Ḩ","Ḫ","Ħ","Ⱨ","Ⱶ","Ɥ","Ｉ","Ì","Í","Î","Ĩ","Ī","Ĭ","İ","Ï","Ḯ","Ỉ","Ǐ","Ȉ","Ȋ","Ị","Į","Ḭ","Ɨ","Ｊ","Ĵ","Ɉ","Ｋ","Ḱ","Ǩ","Ḳ","Ķ","Ḵ","Ƙ","Ⱪ","Ꝁ","Ꝃ","Ꝅ","Ꞣ","Ｌ","Ŀ","Ĺ","Ľ","Ḷ","Ḹ","Ļ","Ḽ","Ḻ","Ł","Ƚ","Ɫ","Ⱡ","Ꝉ","Ꝇ","Ꞁ","Ǉ","ǈ","Ｍ","Ḿ","Ṁ","Ṃ","Ɱ","Ɯ","Ｎ","Ǹ","Ń","Ñ","Ṅ","Ň","Ṇ","Ņ","Ṋ","Ṉ","Ƞ","Ɲ","Ꞑ","Ꞥ","Ǌ","ǋ","Ｏ","Ò","Ó","Ô","Ồ","Ố","Ỗ","Ổ","Õ","Ṍ","Ȭ","Ṏ","Ō","Ṑ","Ṓ","Ŏ","Ȯ","Ȱ","Ö","Ȫ","Ỏ","Ő","Ǒ","Ȍ","Ȏ","Ơ","Ờ","Ớ","Ỡ","Ở","Ợ","Ọ","Ộ","Ǫ","Ǭ","Ø","Ǿ","Ɔ","Ɵ","Ꝋ","Ꝍ","Ƣ","Ꝏ","Ȣ","Ｐ","Ṕ","Ṗ","Ƥ","Ᵽ","Ꝑ","Ꝓ","Ꝕ","Ｑ","Ꝗ","Ꝙ","Ɋ","Ｒ","Ŕ","Ṙ","Ř","Ȑ","Ȓ","Ṛ","Ṝ","Ŗ","Ṟ","Ɍ","Ɽ","Ꝛ","Ꞧ","Ꞃ","Ｓ","ẞ","Ś","Ṥ","Ŝ","Ṡ","Š","Ṧ","Ṣ","Ṩ","Ș","Ş","Ȿ","Ꞩ","Ꞅ","Ｔ","Ṫ","Ť","Ṭ","Ț","Ţ","Ṱ","Ṯ","Ŧ","Ƭ","Ʈ","Ⱦ","Ꞇ","Ꜩ","Ｕ","Ù","Ú","Û","Ũ","Ṹ","Ū","Ṻ","Ŭ","Ü","Ǜ","Ǘ","Ǖ","Ǚ","Ủ","Ů","Ű","Ǔ","Ȕ","Ȗ","Ư","Ừ","Ứ","Ữ","Ử","Ự","Ụ","Ṳ","Ų","Ṷ","Ṵ","Ʉ","Ｖ","Ṽ","Ṿ","Ʋ","Ꝟ","Ʌ","Ꝡ","Ｗ","Ẁ","Ẃ","Ŵ","Ẇ","Ẅ","Ẉ","Ⱳ","Ｘ","Ẋ","Ẍ","Ｙ","Ỳ","Ý","Ŷ","Ỹ","Ȳ","Ẏ","Ÿ","Ỷ","Ỵ","Ƴ","Ɏ","Ỿ","Ｚ","Ź","Ẑ","Ż","Ž","Ẓ","Ẕ","Ƶ","Ȥ","Ɀ","Ⱬ","Ꝣ","ａ","ẚ","à","á","â","ầ","ấ","ẫ","ẩ","ã","ā","ă","ằ","ắ","ẵ","ẳ","ȧ","ǡ","ä","ǟ","ả","å","ǻ","ǎ","ȁ","ȃ","ạ","ậ","ặ","ḁ","ą","ⱥ","ɐ","ꜳ","æ","ǽ","ǣ","ꜵ","ꜷ","ꜹ","ꜻ","ꜽ","ｂ","ḃ","ḅ","ḇ","ƀ","ƃ","ɓ","ｃ","ć","ĉ","ċ","č","ç","ḉ","ƈ","ȼ","ꜿ","ↄ","ｄ","ḋ","ď","ḍ","ḑ","ḓ","ḏ","đ","ƌ","ɖ","ɗ","ꝺ","ǳ","ǆ","ｅ","è","é","ê","ề","ế","ễ","ể","ẽ","ē","ḕ","ḗ","ĕ","ė","ë","ẻ","ě","ȅ","ȇ","ẹ","ệ","ȩ","ḝ","ę","ḙ","ḛ","ɇ","ɛ","ǝ","ｆ","ḟ","ƒ","ꝼ","ｇ","ǵ","ĝ","ḡ","ğ","ġ","ǧ","ģ","ǥ","ɠ","ꞡ","ᵹ","ꝿ","ｈ","ĥ","ḣ","ḧ","ȟ","ḥ","ḩ","ḫ","ẖ","ħ","ⱨ","ⱶ","ɥ","ƕ","ｉ","ì","í","î","ĩ","ī","ĭ","ï","ḯ","ỉ","ǐ","ȉ","ȋ","ị","į","ḭ","ɨ","ı","ｊ","ĵ","ǰ","ɉ","ｋ","ḱ","ǩ","ḳ","ķ","ḵ","ƙ","ⱪ","ꝁ","ꝃ","ꝅ","ꞣ","ｌ","ŀ","ĺ","ľ","ḷ","ḹ","ļ","ḽ","ḻ","ſ","ł","ƚ","ɫ","ⱡ","ꝉ","ꞁ","ꝇ","ǉ","ｍ","ḿ","ṁ","ṃ","ɱ","ɯ","ｎ","ǹ","ń","ñ","ṅ","ň","ṇ","ņ","ṋ","ṉ","ƞ","ɲ","ŉ","ꞑ","ꞥ","ǌ","ｏ","ò","ó","ô","ồ","ố","ỗ","ổ","õ","ṍ","ȭ","ṏ","ō","ṑ","ṓ","ŏ","ȯ","ȱ","ö","ȫ","ỏ","ő","ǒ","ȍ","ȏ","ơ","ờ","ớ","ỡ","ở","ợ","ọ","ộ","ǫ","ǭ","ø","ǿ","ɔ","ꝋ","ꝍ","ɵ","ƣ","ȣ","ꝏ","ｐ","ṕ","ṗ","ƥ","ᵽ","ꝑ","ꝓ","ꝕ","ｑ","ɋ","ꝗ","ꝙ","ｒ","ŕ","ṙ","ř","ȑ","ȓ","ṛ","ṝ","ŗ","ṟ","ɍ","ɽ","ꝛ","ꞧ","ꞃ","ｓ","ß","ś","ṥ","ŝ","ṡ","š","ṧ","ṣ","ṩ","ș","ş","ȿ","ꞩ","ꞅ","ẛ","ｔ","ṫ","ẗ","ť","ṭ","ț","ţ","ṱ","ṯ","ŧ","ƭ","ʈ","ⱦ","ꞇ","ꜩ","ｕ","ù","ú","û","ũ","ṹ","ū","ṻ","ŭ","ü","ǜ","ǘ","ǖ","ǚ","ủ","ů","ű","ǔ","ȕ","ȗ","ư","ừ","ứ","ữ","ử","ự","ụ","ṳ","ų","ṷ","ṵ","ʉ","ｖ","ṽ","ṿ","ʋ","ꝟ","ʌ","ꝡ","ｗ","ẁ","ẃ","ŵ","ẇ","ẅ","ẘ","ẉ","ⱳ","ｘ","ẋ","ẍ","ｙ","ỳ","ý","ŷ","ỹ","ȳ","ẏ","ÿ","ỷ","ẙ","ỵ","ƴ","ɏ","ỿ","ｚ","ź","ẑ","ż","ž","ẓ","ẕ","ƶ","ȥ","ɀ","ⱬ","ꝣ","Ά","Έ","Ή","Ί","Ϊ","Ό","Ύ","Ϋ","Ώ","ά","έ","ή","ί","ϊ","ΐ","ό","ύ","ϋ","ΰ","ω","ς","stripDiacritics","hdsFormatRelative","RelativeTimeFormat","wordRegexp","keywords","builtins","mkRego","parserConf","delimiters","operators","tokenBase","tokenComment","escaped","commentTokens","closeBrackets","wordOperators","mkSentinel","HdsCodeEditorJsonLintingError","InvalidSyntax","KeyExpected","KeyMustBeDoubleQuoted","MissingComma","TrailingComma","ValueExpected","findNextToken","determineErrorMessage","previousToken","nextToken","errorToken","renderErrorMessage","lineNumber","errorNodeName","jsonLinter","linter","lintGutter","lintKeymap","diagnostics","seenLines","severity","renderMessage","__loader","ClosureActionModule","ACTION","AsyncContextStack","assignedScope","assignedIsolationScope","_stack","_isolationScope","_pushScope","_popScope","getStackTop","getScope","getAsyncContextStack","getDefaultCurrentScope","defaultScopes","getDefaultIsolationScope","TRACING_DEFAULTS","idleTimeout","finalTimeout","childSpanTimeout","startSpanOptions","activities","_idleTimeoutID","_finished","_finishReason","_autoFinishAllowed","disableAutoFinish","_cleanupHooks","beforeSpanEnd","previousActiveSpan","_cancelIdleTimeout","_restartIdleTimeout","_restartChildSpanTimeout","onIdleSpanEnded","spanJSON","SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON","discardedSpans","childSpanJSON","childEndTimestamp","childStartTimestamp","spanStartedBeforeIdleSpanEnd","spanEndedBeforeFinalTimeout","stringifiedSpan","removeChildSpanFromSpan","definedEndTimestamp","spanEndTimestamp","childEndTimestamps","latestSpanEndTimestamp","spanStartTimestamp","startedSpan","endedSpan","spanToAllowAutoFinish","ServerRuntimeClient","registerSpanErrorInstrumentation","setCurrentRequestSessionErroredOrCrashed","monitorConfig","serializedCheckIn","check_in_id","monitor_slug","monitor_config","checkin_margin","checkinMargin","max_runtime","maxRuntime","timezone","failure_issue_threshold","failureIssueThreshold","recovery_threshold","recoveryThreshold","traceContext","_getTraceInfoFromScope","createCheckInEnvelope","serverName","server_name","eventHint","requestSession","isHandledException","setCurrentClient","clientClass","initialScope","makeRequest","promisebuffer","makePromiseBuffer","bufferSize","rateLimits","filteredEnvelopeItems","envelopeItemTypeToDataCategory","isRateLimited","filteredEnvelope","recordEnvelopeLoss","requestTask","serializeEnvelope","updateRateLimits","MIN_DELAY","START_DELAY","createStore","flushTimer","retryDelay","flushIn","unref","flushWithBackOff","isRetry","envelopeContainsItemType","shouldStore","flushAtStartup","eventFromEnvelope","overrideDsn","fallbackTransport","otherTransports","validatedDsn","api","transports","getEvent","transportsWithFallback","allTransports","removeTrailingSlash","objWithMaybeUser","winterCGHeadersToDict","winterCGHeaders","headersToDict","reqHeaders","extractQueryParamsFromUrl","socket","encrypted","absoluteUrl","cookies","query_string","req","DEFAULT_BREADCRUMBS","beforeBreadcrumb","finalBreadcrumb","originalFunctionToString","SETUP_CLIENTS","functionToStringIntegration","_functionToStringIntegration","DEFAULT_IGNORE_ERRORS","eventFiltersIntegration","_eventFiltersIntegration","_hint","clientOptions","internalOptions","allowUrls","denyUrls","ignoreErrors","disableErrorDefaults","ignoreTransactions","ignoreInternal","_getEventFilterUrl","inboundFiltersIntegration","rootException","stripMetadataFromStackFrames","addMetadataToStackFrames","DEFAULT_INCLUDE","requestDataIntegration","_requestDataIntegration","include","normalizedRequest","includeWithDefaultPiiApplied","ip","additionalData","extractNormalizedRequestData","getClientIPAddress","requestData","cookie","ipHeaderNames","ipHeaderName","parseCookie","eqIdx","endIdx","headerName","_captureConsoleIntegration","exports$1","_dedupeIntegration","previousEvent","currentEvent","_shouldDropEvent","currentMessage","previousMessage","_isSameFingerprint","_isSameStacktrace","previousException","_getExceptionFromEvent","currentException","currentFrames","getFramesFromEvent","previousFrames","frameA","frameB","currentFingerprint","previousFingerprint","_extraErrorDataIntegration","captureErrorCause","exceptionName","errorData","extraErrorInfo","serializedError","normalizedErrorData","generateIteratee","originalEvent","isWindowsFrame","startsWithSlash","oldFilename","basename","flattenIssue","issue","unionErrors","flattenIssuePath","formatIssueMessage","zodError","errorKeyMap","iss","issues","issuePath","errorKeys","rootExpectedType","applyZodErrorsToEvent","saveZodIssuesAsAttachment","flattenedIssues","zodErrorsIntegration","_zodErrorsIntegration","thirdPartyErrorFilterIntegration","frameKeys","BUNDLER_PLUGIN_APP_KEY_PREFIX","behaviour","filterKeys","third_party_code","isProfilingIntegrationWithProfiler","_profiler","profiler","startProfiler","stopProfiler","stripBaggageHeaderOfSentryBaggageValues","spanOrigin","url$1","spanstatus","contentLength","contentLengthNum","fetchOptionsObj","traceHeaders","traceData","newHeaders","prevBaggageHeader","prevHeaderStrippedFromSentryBaggage","headerValue","existingBaggageHeader","newBaggageHeaders","headerItem","fetchHint","trpcCaptureContext","rawInput","getRawInput","trpcContext","procedure_path","procedure_type","attachRpcInput","rawRes","nextResult","associatedEventId","feedbackEvent","contact_email","associated_event_id","instrumentFetch","onFetchResolved","skipNativeFetchCheck","supportsNativeFetch","originalFetch","virtualError","parseFetchArgs","streamHandler","clonedResponseForResolving","onFinishedResolving","responseReader","getReader","maxFetchDurationTimeout","readingActive","chunkTimeout","releaseLock","hasProp","getUrlFromResource","fetchArgs","isNodeEnv","getModuleFromFilename","columnNumber","createTimer","pollInterval","anrThreshold","triggered","diffMs","getTimeMs","poll","_maxSize","_cache","vercelRequestContextGlobal","waitUntil","regexString","CLSThresholds","onReport","onFCP","report","sessionValue","sessionEntries","handleEntries","hadRecentInput","firstSessionEntry","lastSessionEntry","FCPThresholds","whenActivated","visibilityWatcher","FIDThresholds","handleEntry","processingStart","INPThresholds","PerformanceEventTiming","whenIdle","processInteractionEntry","estimateP98LongestInteraction","latency","DEFAULT_DURATION_THRESHOLD","longestInteractionList","longestInteractionMap","entryPreProcessingCallbacks","candidateInteractionIndex","minLongestInteraction","existingInteraction","interaction","LCPThresholds","reportedMetricIDs","TTFBThresholds","whenReady","_lcpEntry","_clsEntry","_performanceCursor","_measurements","_addMeasureSpans","requestTime","msToSec","measureStartTimestamp","startTimeStamp","measureEndTimestamp","startAndEndSpan","_addPerformanceNavigationTiming","eventEnd","_addResourceSpans","resourceUrl","setResourceEntrySizeData","deliveryType","renderBlockingStatus","dataKey","entryVal","getBrowserPerformanceAPI","performanceEntries","transactionStartTime","requestStartTimestamp","responseEndTimestamp","responseStartTimestamp","firstHidden","shouldRecord","fcp","connection","effectiveType","isMeasurementValue","rtt","deviceMemory","hardwareConcurrency","fidMark","fid","recordClsOnPageloadSpan","measurementName","measurement","setMeasurement","loadTime","renderTime","spanOptions","parentStartTimestamp","parentOp","initialScript","invoker","invokerType","sourceURL","sourceFunctionName","sourceCharPosition","recordClsStandaloneSpans","fidCleanupCallback","instrument","addFidInstrumentationHandler","lcpCleanupCallback","addLcpInstrumentationHandler","lcp","ttfbCleanupCallback","addTtfbInstrumentationHandler","ttfb","clsCleanupCallback","trackClsAsStandaloneSpan","addClsInstrumentationHandler","standaloneClsEntry","pageloadSpanId","standaloneCLsValue","sentSpan","_collectClsOnce","clsValue","routeName","startStandaloneWebVitalSpan","cleanupClsHandler","unsubscribeStartNavigation","debounceTimerID","lastCapturedEventType","lastCapturedEventTargetId","instrumentDOM","triggerDOMHandler","globalDOMEventHandler","makeDOMEventHandler","originalAddEventListener","__sentry_instrumentation_handlers__","handlerForType","refCount","globalListener","_sentryCaptured","_sentryId","lastHref","instrumentHistory","historyReplacementFunction","originalHistoryFunction","supportsHistory","cachedImplementations","impl","instrumentXHR","xhrproto","originalOpen","xhrOpenThisArg","xhrOpenArgArray","request_headers","onreadystatechangeHandler","xhrInfo","originalOnreadystatechange","onreadystatechangeThisArg","onreadystatechangeArgArray","originalSetRequestHeader","setRequestHeaderThisArg","setRequestHeaderArgArray","sendThisArg","sendArgArray","serializeFormData","_logger","LAST_INTERACTIONS","INTERACTIONS_SPAN_MAP","INP_ENTRY_MAP","pointerdown","pointerup","mouseup","mouseover","mouseout","mouseenter","pointerover","pointerout","pointerenter","pointerleave","drag","dragenter","keypress","activeRootSpan","isPerformanceEventTiming","inpCallback","addInpInstrumentationHandler","interactionType","spanToUse","getDefaultIntegrations","applyDefaultOptions","optionsArg","__SENTRY_RELEASE__","SENTRY_RELEASE","dropTopLevelUndefinedKeys","mutatetedObj","browserOptions","skipBrowserExtensionCheck","windowWithMaybeExtension","extensionObject","runtimeId","isDedicatedExtensionPage","isNWjs","stackParserFromStackParserOptions","stackParsers","getIntegrationsToSetup","makeFetchTransport","initAndBind","getReportDialogEndpoint","onLoad","reportDialogClosedMessageHandler","injectionPoint","_reportingObserverIntegration","reports","plainBody","crashId","supportsReportingObserver","ReportingObserver","_httpClientIntegration","failedRequestStatusCodes","failedRequestTargets","requestInfo","requestInit","_shouldCaptureResponse","bodyUsed","requestHeaders","responseHeaders","requestCookies","responseCookies","_shouldSendDefaultPii","_parseCookieHeaders","_createEvent","responseURL","cookieString","getResponseHeader","_parseCookieString","getAllResponseHeaders","cookieHeader","_getResponseSizeFromHeaders","givenRequestTarget","isSentryRequestUrl","virtualStackTrace","body_size","_contextLinesIntegration","contextLines","frameContextLines","htmlFilename","htmlLines","applySourceContextToFrame","addContextToFrame","_getGraphQLOperation","requestBody","graphqlQuery","operationName","graphqlOperationName","operationType","parseGraphQLQuery","getRequestPayloadXhrOrFetch","getBodyString","sentryFetchData","getFetchRequestArgBody","namedMatch","unnamedMatch","getGraphQLRequestPayload","graphqlBody","spanAttributes","httpUrl","SEMANTIC_ATTRIBUTE_URL_FULL","httpMethod","SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD","endpoints","isTracedGraphqlEndpoint","operationInfo","graphql","REPLAY_SESSION_KEY","UNABLE_TO_SEND_REPLAY","NETWORK_BODY_MAX_SIZE","CONSOLE_ARG_MAX_SIZE","REPLAY_MAX_EVENT_BUFFER_SIZE","__defProp$1","__publicField$1","__defNormalProp$1","NodeType$2","NodeType2","DocumentType","CDATA","n2","isNativeShadowDom","stringifyStylesheet","rules2","cssRules","stringifyRule","importStringified","styleSheet","statement","layerName","supportsText","mediaText","needsSafariColonFix","selectorText","needsAllFix","i2","styleDeclaration","isImportant","getPropertyPriority","Mirror","getId","getMeta","getNode","idNodeMap","getIds","nodeMetaMap","removeNodeFromMap","childNode","oldNode","shouldMaskInput","maskInputOptions","maskInputValue","isMasked","maskInputFn","ORIGINAL_ATTRIBUTE_NAME","getInputType","getInputValue","extractFileExtension","cachedImplementations$1","getImplementation$1","document2","setTimeout$2","clearTimeout$1","getIframeContentDocument","iframe","contentDocument","tagNameRegex","genId","canvasService","canvasCtx","URL_IN_CSS_REF","URL_PROTOCOL_MATCH","URL_WWW_MATCH","DATA_URI","absoluteToStylesheet","quote1","path1","quote2","path3","filePath","maybeQuote","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","cachedDocument","absoluteToDoc","getHref","customHref","a2","transformAttribute","maskAttributeFn","collectCharacters","regEx","chars2","descriptorsStr","inParens","ignoreAttribute","_isBlockedElement","blockClass","blockSelector","unblockSelector","eIndex","distanceToMatch","matchPredicate","createMatchPredicate","needMaskingText","maskTextClass","maskTextSelector","unmaskTextClass","unmaskTextSelector","maskAllText","autocomplete","maskDistance","unmaskDistance","lowerIfExists","maybeAttr","serializeNodeWithId","mirror","mirror2","skipChild","inlineStylesheet","maskTextFn","slimDOMOptions","dataURLOptions","inlineImages","recordCanvas","onSerialize","onIframeLoad","iframeLoadTimeout","onStylesheetLoad","stylesheetLoadTimeout","keepIframeSrcFn","newlyAddedElement","preserveWhiteSpace","_serializedNode","rootId","docId","DOCUMENT_NODE","DOCUMENT_TYPE_NODE","publicId","systemId","needBlock","processedTagName","attributes2","stylesheet","styleSheets","crossorigin","_cssText","sheet","forceMask","__context","getImageData","originalGetImageData","Uint32Array","pixel","rr_dataURL","toDataURL","quality","canvasDataURL","blankCanvas","currentSrc","priorCrossOrigin","recordInlineImage","naturalWidth","naturalHeight","complete","rr_mediaState","rr_mediaCurrentTime","currentTime","rr_scrollLeft","rr_scrollTop","rr_width","rr_height","isCustomElement","rr_src","customElements","isSVG","isCustom","TEXT_NODE","parentTagName","isStyle","isScript","isTextarea","textarea","CDATA_SECTION_NODE","COMMENT_NODE","sn","headFavicon","headMetaDescKeywords","headMetaSocial","headMetaRobots","headMetaHttpEquiv","headMetaAuthorship","headMetaVerification","serializedNode2","recordChild","isShadowHost","headWhitespace","bypassOptions","childN","serializedChildNode","isShadow","iframeEl","fired","blankUrl","iframeDoc","serializedIframeNode","styleSheetLoadTimeout","styleSheetLoaded","serializedLinkNode","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","throttle$1","leading","getImplementation","trailing","setTimeout$1","hookSetter","isRevoked","replacement","__rrweb_original__","receiver","nowTimestamp","scrollingElement","getWindowHeight","getWindowWidth","closestElementOfNode","isBlocked","checkAncestors","blockedPredicate","isUnblocked","blockDistance","unblockDistance","isIgnored","isAncestorRemoved","legacy_isTouchEvent","changedTouches","isSerializedIframe","isSerializedStylesheet","hasShadowRoot","StyleSheetMirror","styleIDMap","idStyleMap","newId","getStyle","generateId","getShadowHost","shadowHost","DOCUMENT_FRAGMENT_NODE","inDom","rootShadowHost","EventType","EventType2","DomContentLoaded","Load","FullSnapshot","IncrementalSnapshot","Custom","Plugin","IncrementalSource","IncrementalSource2","Mutation","MouseMove","MouseInteraction","Scroll","ViewportResize","TouchMove","MediaInteraction","StyleSheetRule","CanvasMutation","Font","Drag","StyleDeclaration","AdoptedStyleSheet","CustomElement","MouseInteractions","MouseInteractions2","MouseUp","MouseDown","Click","ContextMenu","DblClick","Focus","Blur","TouchStart","TouchMove_Departed","TouchEnd","TouchCancel","PointerTypes","PointerTypes2","Mouse","Pen","Touch","MediaInteractions","MediaInteractions2","Play","Pause","Seeked","VolumeChange","RateChange","getIFrameContentDocument","isNodeInLinkedList","DoubleLinkedList","addNode","__ln","removeNode","moveKey","MutationBuffer","frozen","texts","attributeMap","removes","mapRemoves","movedMap","addedSet","movedSet","droppedSet","processMutations","processMutation","adds","addedIds","addList","getNextId","ns","nextId","pushAdd","currentN","iframeManager","addIframe","stylesheetManager","trackLinkElement","shadowDomManager","addShadowRoot","childSn","attachIframe","canvasManager","addWindow","observeAttachShadow","attachLinkElement","isParentRemoved","isAncestorInSet","tailNode","unhandledNode","diffAsStr","styleDiff","unchangedAsStr","_unchangedStyles","mutationCb","isInputMasked","unattachedDoc","implementation","createHTMLDocument","pname","newPriority","addedNodes","genAdds","nodeId","deepDelete","processedNodeManager","inOtherBuffer","targetId","unfreeze","unlock","addsSet","r2","_isAncestorInSet","errorHandler","callbackWrapper","rrwebWrapped","mutationBuffers","getEventTarget","initMutationObserver","rootEl","mutationBuffer","mutationObserverCtor","__rrMutationObserver","angularZoneSymbol","Zone","__symbol__","onMutation","attributeOldValue","initScrollObserver","scrollCb","scrollLeftTop","INPUT_TAGS","lastInputValueMap","initInputObserver","inputCb","ignoreClass","ignoreSelector","userTriggeredOnInput","eventHandler","userTriggered","isTrusted","cbWithDedup","el2","text2","v2","lastInputValue","currentWindow","propertyDescriptor","hookProperties","HTMLOptionElement","getNestedCSSRulePositions","childRule","hasNestedCSSRule","parentRule","CSSGroupingRule","CSSMediaRule","CSSSupportsRule","CSSConditionRule","parentStyleSheet","getIdAndStyleId","styleMirror","styleId","ownerNode","initAdoptedStyleSheetObserver","hostId","patchTarget","originalPropertyDescriptor","sheets","adoptStyleSheets","initObservers","o2","recordDOM","mousemoveHandler","mousemoveCb","callbackThreshold","mousemoveCallback","timeBaseline","wrappedCb","totalOffset","timeOffset","updatePosition","DragEvent","MouseEvent","mouseInteractionHandler","mouseInteractionCb","mouseInteraction","disableMap","currentPointerType","eventKey","pointerType","thisEventKey","PointerEvent","viewportResizeHandler","viewportResizeCb","lastH","lastW","mediaInteractionHandler","mediaInteractionCb","volume","muted","playbackRate","styleSheetObserver","adoptedStyleSheetObserver","styleDeclarationObserver","fontObserver","styleSheetRuleCb","CSSStyleSheet","insertRule","argumentsList","replaceSync","supportedNestedCSSRuleTypes","canMonkeyPatchNestedCSSRule","unmodifiedFunctions","typeKey","styleDeclarationCb","ignoreCSSAttributes","CSSStyleDeclaration","collectFonts","fontCb","fontMap","originalFontFace","FontFace","family","fontFace","fontSource","restoreHandler","selectionObserver","selectionCb","isCollapsed","customElementObserver","customElementCb","pluginHandlers","CrossOriginIframeMirror","generateIdFn","iframeIdToRemoteIdMap","iframeRemoteIdToIdMap","remoteId","idToRemoteMap","remoteToIdMap","idToRemoteIdMap","getIdToRemoteIdMap","remoteIdToIdMap","getRemoteIdToIdMap","getRemoteId","getRemoteIds","IframeManagerNoop","crossOriginIframeMirror","crossOriginIframeRootIdMap","addLoadListener","IframeManager","iframes","crossOriginIframeMap","wrappedEmit","recordCrossOriginIframes","crossOriginIframeStyleMirror","handleMessage","loadListener","isAttachIframe","adoptedStyleSheets","crossOriginMessageEvent","transformedEvent","transformCrossOriginEvent","isCheckout","replaceIdOnNode","patchRootIdOnNode","replaceIds","replaceStyleIds","iframeMirror","ShadowDomManagerNoop","ShadowDomManager","shadowDoms","restoreHandlers","patchAttachShadow","iframeElement","iframeWindow","resetShadowRoots","lookup","CanvasManagerNoop","snapshot","StylesheetManager","trackedLinkElements","adoptedStyleSheetCb","linkEl","trackStylesheetInLinkElement","adoptedStyleSheetData","styleIds","CSSRule","_linkEl","ProcessedNodeManager","nodeMap","thisBuffer","_takeFullSnapshot","cleanFrame","checkoutEveryNms","checkoutEveryNth","maskAllInputs","_maskInputOptions","_slimDOMOptions","maxCanvasSize","packFn","mousemoveWait","recordAfter","errorHandler2","getCanvasManager","inEmittingFrame","passEmitsToParent","tel","radio","lastFullSnapshotEvent","DOMTokenList","incrementalSnapshotCount","exceedCount","exceedTime","takeFullSnapshot2","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","__RRWEB_EXCLUDE_IFRAME__","getMirror","nodeMirror","getCanvasManagerFn","__RRWEB_EXCLUDE_SHADOW_DOM__","slimDOM","initialOffset","canvasMutationCb","t2","timestampToMs","timestampToS","addBreadcrumbEvent","triggerUserActivity","checkAndHandleExpiredSession","addUpdate","throttledAddEvent","getClosestInteractive","getClickTargetNode","getTargetNode","takeFullSnapshot","NotStarted","Running","Stopped","IncrementalMutationSources","ClickDetector","slowClickConfig","_addBreadcrumbEvent","_lastMutation","_lastScroll","_clicks","_timeout","_threshold","_scrollTimeout","scrollTimeout","_replay","_ignoreSelector","cleanupWindowOpen","nowInSeconds","originalWindowOpen","_teardown","_checkClickTimeout","SLOW_CLICK_TAGS","newClick","clickBreadcrumb","clickCount","_scheduleCheckClicks","registerMutation","registerScroll","registerClick","_handleMultiClick","_getClicks","_checkClicks","timedOutClicks","mutationAfter","scrollAfter","_generateBreadcrumbs","hadScroll","hadMutation","isSlowClick","timeAfterClickMs","endReason","getCurrentRoute","createBreadcrumb","ATTRIBUTES_TO_RECORD","getAttributesToRecord","normalizedKey","getBaseDomBreadcrumb","ENTRY_TYPES","decodedBodySize","encodedBodySize","responseStatus","transferSize","paint","navigation","domComplete","domContentLoadedEventStart","domContentLoadedEventEnd","domInteractive","loadEventStart","loadEventEnd","redirectCount","webVitalHandler","replayPerformanceEntries","createPerformanceEntry","getLargestContentfulPaint","lastEntry","getWebVital","isLayoutShift","getCumulativeLayoutShift","layoutShifts","nodeIds","getFirstInputDelay","getInteractionToNextPaint","attributions","PREFIX","_addBreadcrumb","_capture","_trace","infoTick","captureExceptions","traceInternals","EventBufferSizeExceededError","EventBufferArray","_totalSize","hasCheckout","waitForCheckout","hasEvents","eventSize","eventsRet","getEarliestTimestamp","WorkerHandler","_worker","ensureReady","_ensureReadyPromise","terminate","_getAndIncrementId","EventBufferCompressionWorker","_earliestTimestamp","_sendEventToWorker","_finishRequest","EventBufferProxy","_fallback","_compression","_used","_ensureWorkerIsLoadedPromise","_ensureWorkerIsLoaded","ensureWorkerIsLoaded","_switchToCompressionWorker","addEventPromises","hasSessionStorage","sessionStorage","isSampled","lastActivity","segmentId","previousSessionId","saveSession","createSession","sessionSampleRate","allowBuffering","stickySession","isExpired","initialTime","expiry","targetTime","isSessionExpired","maxReplayDuration","sessionIdleExpire","shouldRefreshSession","loadOrCreateSession","sessionOptions","existingSession","sessionStringFromStorage","sessionObj","addEventSync","shouldAddEvent","_addEvent","eventBuffer","isBufferMode","recordingMode","eventAfterPossibleCallback","beforeAddRecordingEvent","isExceeded","handleException","timestampInMs","sessionIdlePause","initialTimestamp","isFeedbackEvent","isBreadcrumbWithCategory","resetReplayIdOnDynamicSamplingContext","createPerformanceSpans","addNetworkBreadcrumb","getBodySize","textEncoder","formDataStr","Blob","parseContentLengthHeader","mergeWarning","_meta","newMeta","existingWarnings","makeNetworkReplayBreadcrumb","buildSkippedNetworkRequestOrResponse","bodySize","buildNetworkRequestOrResponse","normalizedBody","exceedsSizeLimit","isProbablyJson","truncatedBody","getAllowedHeaders","allowedHeaders","filteredHeaders","urlMatches","urls","baseURI","fixedUrl","getAllHeaders","allHeaders","getHeadersFromOptions","createMemoryEntry","memoryEntry","jsHeapSizeLimit","totalJSHeapSize","usedJSHeapSize","memory","getHandleRecordingEmit","hadFirstEvent","_isCheckout","clickDetector","setInitialState","shouldRecordCanvas","isRecordingCanvas","errorSampleRate","useCompressionOption","useCompression","blockAllMedia","networkDetailHasUrls","networkDetailAllowUrls","networkCaptureBodies","networkRequestHasHeaders","networkRequestHeaders","networkResponseHasHeaders","networkResponseHeaders","earliestEvent","TransportStatusCodeError","RateLimitError","sendReplay","replayData","retryConfig","recordingData","eventContext","preparedRecordingData","payloadWithSequence","replayHeaders","errorIds","traceIds","baseEvent","replay_start_timestamp","error_ids","trace_ids","replay_type","replayEvent","preparedEvent","_retryCount","THROTTLED","ReplayContainer","recordingOptions","_lastActivity","_isPaused","_requiresManualStart","_hasInitializedCoreListeners","_context","initialUrl","_recordingOptions","_debouncedFlush","callbackReturnValue","maxTimerId","maxWait","invokeFunc","cancelTimers","debounced","_flush","flushMinDelay","flushMaxDelay","_throttledAddEvent","isThrottled","wasThrottled","slowClickTimeout","slowClickIgnoreSelectors","experiments","_handleVisibilityChange","_doChangeToForegroundTasks","_doChangeToBackgroundTasks","_handleWindowBlur","_handleWindowFocus","_handleKeyboardEvent","updateUserActivity","hasModifierKey","isCharacterKey","_canvas","initializeSampling","requiresManualStart","_initializeSessionForSampling","_initializeRecording","_updateUserActivity","startBuffering","startRecording","canvasOptions","_stopRecording","continuousCheckout","_onMutationHandler","stopRecording","_removeListeners","resume","_checkSession","sendBufferedReplayOrFlush","continueRecording","flushImmediate","activityTime","hasStoppedRecording","_updateSessionActivity","_maybeSaveSession","cbResult","conditionalFlush","cancelFlush","getSessionId","_clearContext","lastActiveSpan","lastRootSpan","workerUrl","customWorkerUrl","__SENTRY_EXCLUDE_REPLAY_WORKER__","createObjectURL","_addListeners","_refreshSession","autoFlushOnFeedback","isClick","normalizedArgs","normalizedArg","networkDetailDenyUrls","reqSize","resSize","responseType","requestBodySize","responseBodySize","requestWarning","responseBody","responseWarning","captureDetails","bodyStr","bodyText","handleNetworkBreadcrumbs","feedbackId","__rrweb__","isErrorEventSampled","exceptionValue","replayContext","beforeErrorSampling","_performanceCleanupCallback","addPerformanceEntry","onEntries","clearCallbacks","clearCallback","_createCustomBreadcrumb","_addPerformanceEntries","initialTimestampInSeconds","_updateInitialTimestampFromEventBuffer","_popEventContext","_runFlush","dropReason","tooShort","minReplayDuration","tooLong","_flushInProgress","_flushLock","mutationLimit","overMutationLimit","mutationBreadcrumbLimit","defaultSelectors","MEDIA_SELECTORS","DEFAULT_NETWORK_HEADERS","_initialized","Replay","MAX_REPLAY_DURATION","maskAttributes","unmask","unblock","maskFn","privacyOptions","password","_initialOptions","_getMergedNetworkHeaders","_isInitialized","_initialize","getRecordingMode","_maybeLoadFromReplayCanvasIntegration","finalOptions","initialOptions","replaysSessionSampleRate","replaysOnErrorSampleRate","canvasIntegration","onRequestAnimationFrame","CanvasContext","CanvasContext2","WebGL","WebGL2","canvasVarMap","saveWebGLVar","isInstanceOfWebGLObject","contextMap","serializeArg","Float32Array","Float64Array","Int32Array","Int16Array","Int8Array","Uint8ClampedArray","rr_type","base64","arraybuffer","bytes","byteOffset","HTMLImageElement","HTMLCanvasElement","ImageData","serializeArgs","supportedWebGLConstructorNames","initCanvasContextObserver","setPreserveDrawingBufferToTrue","ctxName","contextAttributes","preserveDrawingBuffer","patchGLPrototype","blockClass2","_mirror2","recordArgs","hookHandler","CanvasManager","pendingCanvasMutations","rafStamps","latestId","invokeId","windowsSet","snapshotInProgressMap","lastSnapshotTime","enableManualSnapshot","initFPSWorker","startRAFTimestamping","startPendingCanvasMutationFlusher","initCanvasFPSObserver","WeakRef","initCanvasMutationObserver","canvasContextReset","commands","fps","rafId","takeSnapshot","canvas2DReset","props2D","CanvasRenderingContext2D","canvasWebGL1and2Reset","WebGLRenderingContext","WebGL2RenderingContext","canvasElement","isManualSnapshot","timeBetweenSnapshots","getCanvas","canvasElement2","matchedCanvas","searchCanvas","window2","deref","_document","takeCanvasSnapshots","getContextAttributes","COLOR_BUFFER_BIT","createImageBitmap","bitmap","flushPendingCanvasMutations","setLatestRAFTimestamp","flushPendingCanvasMutationFor","valuesWithType","type2","CANVAS_QUALITY","DEFAULT_MAX_CANVAS_SIZE","_replayCanvasIntegration","maxCanvasWidth","maxCanvasHeight","_canvasOptions","canvasManagerResolve","_canvasManager","getCanvasManagerOptions","feedbackAsyncIntegration","feedbackSyncIntegration","BROWSER_TRACING_INTEGRATION_ID","DEFAULT_BROWSER_TRACING_OPTIONS","instrumentNavigation","instrumentPageLoad","markBackgroundSpan","enableLongTask","enableLongAnimationFrame","enableInp","startBrowserTracingPageLoadSpan","traceOptions","getActiveIdleSpan","startBrowserTracingNavigationSpan","getMetaContent","metaName","optionalWindowDocument","metaTag","ACTIVE_IDLE_SPAN_PROPERTY","setActiveIdleSpan","browserTracingIntegration","enableInteractions","enableStandaloneClsSpans","beforeStartSpan","_collectWebVitals","startTrackingWebVitals","startTrackingINP","startTrackingLongAnimationFrames","startTrackingLongTasks","startTrackingInteractions","latestRoute","_createRouteSpan","isPageloadTransaction","finalStartSpanOptions","idleSpan","startIdleSpan","addPerformanceEntries","oldPropagationContext","emitFinish","startingUrl","maybeEndActiveSpan","backgroundtab","registerBackgroundTabDetection","inflightInteractionSpan","registerInteractionTransaction","activeIdleSpan","currentRootSpanOp","registerInpInteractionListener","instrumentOutgoingRequests","cancelledStatus","promisifyRequest","oncomplete","onsuccess","onabort","dbName","storeName","indexedDB","onupgradeneeded","createObjectStore","dbp","db","objectStore","getAllKeys","maxQueueSize","put","createIndexedDbStore","getStore","deserialized","parseEnvelope","makeOfflineTransport","_browserProfilingIntegration","isAutomatedPageLoadSpan","shouldProfileSpan","startProfileForSpan","getActiveProfilesCount","profiledTransactionEvents","findProfiledTransactionsFromEnvelope","profilesToAddToEnvelope","profiledTransaction","takeProfileFromGlobalCache","profileEvent","createProfilingEvent","addProfilesToEnvelope","startJSSelfProfile","onProfileHandler","maxDurationTimeoutID","addProfileToGlobalCache","originalEnd","INTEGRATION_NAME","spotlightBrowserIntegration","_spotlightIntegration","sidecarUrl","isSpotlightInteraction","makeFetch","failCount","featureFlagsIntegration","copyFlagsFromScopeToEvent","addFeatureFlag","insertFlagToScope","launchDarklyIntegration","synchronous","flagKey","flagDetail","openFeatureIntegration","_hookContext","evaluationDetails","hookContext","_hookHints","unleashIntegration","featureFlagClientClass","unleashClientClass","unleashClientPrototype","_wrappedIsEnabled","toggleName","statsigIntegration","featureFlagClient","statsigClient","gate","__WEBPACK_AMD_DEFINE_FACTORY__","PacketKind","__makeTemplateObject","cooked","EOS","ESC","Unknown","SGR","OSCURL","AnsiUp","setup_palettes","_use_classes","_buffer","_url_whitelist","http","https","ansi_colors","rgb","class_name","palette_256","grey_level","gry","escape_txt_for_html","append_buffer","get_next_packet","pkt","next_char","_csi_regex","rgx","rpos","_osc_st","tmplObj","subst","txt2","match_1","match_2","ansi_to_html","packet","blocks","transform_to_html","with_state","process_ansi","process_hyperlink","sgr_cmds","sgr_cmd_str","is_foreground","mode_cmd","palette_index","style_string","class_string","ta","autosize","heightOffset","cachedHeight","pageResize","borderTopWidth","borderBottomWidth","changeOverflow","styleHeight","actualHeight","seal","construct","Func","arrayForEach","unapply","arrayLastIndexOf","arrayPop","arraySplice","arrayIsArray","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","numberToString","booleanToString","bigintToString","BigInt","symbolToString","objectHasOwnProperty","regExpTest","typeErrorCreate","_len4","_key4","_len3","_key3","transformCaseFunc","lcElement","cleanArray","newObject","_slicedToArray","lookupGetter","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","mathMl","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","ELEMENT_MARKUP_PROBE","COMMENT_MARKUP_PROBE","FALLBACK_TAG_CLOSE","SELF_CLOSING_TAG","LITERAL_TEXT_ELEMENT_NAMES","LITERAL_TEXT_ELEMENTS","LITERAL_TEXT_CLOSE","_resolveSetOption","cfg","_resolveObjectOption","makeFallback","purify_default","createDOMPurify","DOMPurify","isSupported","originalDocument","DocumentFragment","HTMLTemplateElement","NodeFilter","NamedNodeMap","MozNamedAttrMap","DOMParser","trustedTypes","ElementPrototype","removeAttributeNode","getNextSibling","getChildNodes","getAttributes","getNodeType","_readNodeType","_readNodeName","template","trustedTypesPolicy","defaultTrustedTypesPolicy","emptyHTML","defaultTrustedTypesPolicyResolved","IN_TRUSTED_TYPES_POLICY","_assertNotInTrustedTypesPolicy","_createTrustedHTML","createHTML","createNodeIterator","createDocumentFragment","importNode","afterSanitizeAttributes","afterSanitizeElements","afterSanitizeShadowDOM","beforeSanitizeAttributes","beforeSanitizeElements","beforeSanitizeShadowDOM","uponSanitizeAttribute","uponSanitizeElement","uponSanitizeShadowNode","MUSTACHE_EXPR$1","ERB_EXPR$1","TMPLIT_EXPR$1","DATA_ATTR$1","ARIA_ATTR$1","IS_SCRIPT_OR_DATA$1","ATTR_WHITESPACE$1","CUSTOM_ELEMENT$1","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","tagNameCheck","attributeNameCheck","allowCustomizedBuiltInElements","FORBID_TAGS","FORBID_ATTR","EXTRA_ELEMENT_HANDLING","tagCheck","attributeCheck","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","SET_CONFIG_ALLOWED_TAGS","SET_CONFIG_ALLOWED_ATTR","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","DEFAULT_MATHML_TEXT_INTEGRATION_POINTS","MATHML_TEXT_INTEGRATION_POINTS","DEFAULT_HTML_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","ALLOWED_URI_REGEXP","customElementHandling","ADD_TAGS","ADD_ATTR","ADD_FORBID_CONTENTS","tbody","TRUSTED_TYPES_POLICY","createScriptURL","previousTrustedTypesPolicy","purifyHostElement","createPolicy","ATTR_NAME","policyName","scriptUrl","ALL_SVG_TAGS","ALL_MATHML_TAGS","_forceRemove","_stripAttributeNode","_neutralizeRoot","_neutralizeSubtree","_removeAttribute","getAttributeNode","_stripDisallowedAttributes","_isPatchLinkageAttribute","lcName","lcTag","_initDocument","dirty","leadingWhitespace","dirtyPayload","parseFromString","createDocument","_createNodeIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","SHOW_PROCESSING_INSTRUCTION","SHOW_CDATA_SECTION","_stripTemplateExpressions","_scrubTemplateExpressions2","_node$querySelectorAl","nextNode","templates","tmpl","_isDocumentFragment","_isClobbered","realTagName","hasChildNodes","_isNode","_executeHooks","_matchesNameCheck","_forkSharedAllowlist","hookList","defaultSet","setConfigSet","_handleHookDetachedNode","_sanitizeElements","allowedTags","_isBasicCustomElement","hoisted","_isValidAttribute","nameIsPermitted","RESERVED_CUSTOM_ELEMENT_NAMES","_applyTrustedTypesToAttribute","getAttributeType","_setAttributeValue","_sanitizeAttributes","hookEvent","attrValue","keepAttr","allowedAttributes","forceKeepAttr","initValue","recreatedNamedProp","_sanitizeShadowDOM2","shadowNode","shadowIterator","innerSr","_sanitizeAttachedShadowRoots","rootName","sr","sanitize","importedNode","returnNode","valueAsRecord","valueToString","inPlace","nn","walkRoot","nodeIterator","rootWasRemoved","shadowroot","shadowrootmode","serializedHTML","clearConfig","isValidAttribute","addHook","entryPoint","hookFunction","removeHook","removeHooks","removeAllHooks","BasicDropdownTrigger","disableDocumentTextSelect","_BasicDropdownTrigger","DropdownTriggerModifier","handleMouseEvent","handleTouchStart","handleTouchEnd","_touchMoveHandler","dropdown","desiredEventType","didSetup","registerTriggerElement","handleMouseEventBound","handleKeyDownBound","handleTouchStartBound","handleTouchEndBound","notLeftClick","toggleIsBeingHandledByTouchEvents","touchMoveHandlerBound","touchMoveEvent","initMouseEvent","_DropdownTriggerModifier","scrollLineHeight","getScrollDeltas","deltaMode","iframeDocument","getScrollLineHeight","calculateScrollDistribution","accumulator","scrollInformation","scrollLeftMax","scrollTopMax","availableScroll","distributeScroll","scrollInfos","BasicDropdownContent","transitioningInClass","transitionedInClass","transitioningOutClass","isTouchDevice","_contentWormhole","_animationClass","dropdownContentWormhole","dropdownElement","registerDropdownElement","handleRootMouseDown","dropdownIsValidParent","dropdownId","rootEventType","rootElement","repositionBound","touchStartHandlerBound","scrollableAncestors","nextScrollable","nextParent","addScrollHandling","removeGlobalEvents","removeScrollHandling","reposition","animationEnabled","waitForAnimations","animationClass","destinationElement","shouldReposition","containsRelevantMutation","touchMoveHandler","touchStartHandler","animationEnabledArg","positionStyles","wheelHandler","deltaXNegative","deltaXPositive","deltaYNegative","deltaYPositive","addScrollEvents","removeScrollEvents","nodeList","closestContent","animationPlayState","eventCallback","closestDropdown","parentDropdown","parentAttrId","_BasicDropdownContent","defaultRules","singular","irregularPairs","uncountable","BLANK_REGEX","LAST_WORD_DASHED_REGEX","LAST_WORD_CAMELIZED_REGEX","CAMELIZED_REGEX","CAPITALIZE_REGEX","loadUncountable","loadIrregular","irregular","irregularInverse","Inflector","ruleSet","makeDictionary","enableCache","_dict","inflector","singularize","purgeCache","_cacheUsed","_sCache","_singularize","numberOrWord","withoutCount","_pCache","disableCache","wordOrCount","inflect","typeRules","inflection","substitution","wordSplit","lastWord","isBlank","isCamelized","isUncountable","taskHelperClosure","helperName","outerArgs","innerArgs","makeHelper","helperFunction","makeBoundHelper","tKey","doNothingHandler","_thisArg","currentHandler","_setCurrentHandler","funcProto","objectCtorString","nativeObjectToString","isOwn","unmasked","baseIteratee","reIsHostCtor","reIsNative","uid","coreJsData","maskSrcKey","IE_PROTO","typedArrayTags","baseIsMatch","getMatchData","matchesStrictComparable","matchData","noCustomizer","COMPARE_PARTIAL_FLAG","assocIndexOf","pairs","LARGE_ARRAY_SIZE","Hash","hashClear","hashDelete","hashGet","hashHas","hashSet","getMapData","equalArrays","equalByTag","equalObjects","argsTag","arrayTag","objectTag","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","mapToArray","symbolProto","symbolValueOf","convert","stacked","objProps","objLength","objStacked","skipCtor","objCtor","othCtor","resIndex","isStrictComparable","hasIn","memoizeCapped","rePropName","reEscapeChar","subString","resolver","memoized","arrayMap","baseProperty","basePropertyDeep","baseUniq","baseIndexOf","baseFindIndex","baseIsNaN","strictIndexOf","isFlattenable","spreadableSymbol","isConcatSpreadable","lowerFirst","castSlice","hasUnicode","stringToArray","strSymbols","baseSlice","asciiToArray","unicodeToArray","rsAstralRange","rsAstral","rsCombo","rsFitz","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsModifier","rsOptVar","rsSeq","rsSymbol","reUnicode","baseMap","eachFunc","baseClone","CLONE_DEEP_FLAG","arrayEach","baseAssign","baseAssignIn","cloneBuffer","copyArray","copySymbols","copySymbolsIn","getAllKeysIn","initCloneArray","initCloneByTag","initCloneObject","isSet","keysIn","funcTag","cloneableTags","isFlat","isFull","isFunc","subValue","copyObject","nativeKeysIn","isProto","cloneArrayBuffer","cloneDataView","cloneRegExp","cloneSymbol","cloneTypedArray","dataView","reFlags","baseCreate","objectCreate","baseIsMap","nodeIsMap","baseIsSet","nodeIsSet","baseInvoke","baseRest","invokeMap","nativeNow","lastCalled","stamp","baseHas","baseValues","castFunction","basePick","paths","basePickBy","baseSet","nested","createAssigner","isIterateeCall","assigner","guard","findIndexFunc","toInteger","toNumber","INFINITY","baseTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","isBinary","trimmedEndIndex","reTrimStart","reWhitespace","equal","nblk","blks","olda","oldb","oldc","oldd","ff","addme","rhex","hex_chr","bitOR","bitXOR","bitAND","lsw","cmn","cnt","constants","picomatch","glob","returnState","fns","arrayMatcher","isMatch","isState","posix","compileRe","makeRe","ignoreOpts","onMatch","onResult","returnObject","onIgnore","toPosixSlashes","matchBase","fastpaths","returnOutput","toRegex","parsed","nocase","isPathSeparator","isGlobstar","scanToEnd","slashes","isBrace","isBracket","isGlob","isExtglob","braceEscaped","backslashes","negatedExtglob","braces","eos","noext","nonegate","noparen","removeBackslashes","maxDepth","expandRange","escapeRegex","syntaxError","splitTopLevel","normalizeSimpleBranch","branch","parseRepeatedExtglob","requireEnd","getStarExtglobSequenceOutput","branches","repeatedExtglobRecursion","SyntaxError","bos","PLATFORM_CHARS","EXTGLOB_CHARS","globstar","dot","nodot","qmarkNoDot","star","bash","noextglob","consumed","backtrack","parens","quotes","removePrefix","extglobs","negate","decrement","extglob","extglobOpen","conditions","tokensIndex","extglobClose","analysis","analyzeRepeatedExtglob","maxExtglobRecursion","risky","safeOutput","extglobStar","expression","wrapOutput","keepQuotes","strictBrackets","nobracket","literalBrackets","nobrace","outputIndex","toks","noglobstar","prior","afterStar","strictSlashes","slashDot","BitBuffer","bufIndex","putBit","getLengthInBits","BitMatrix","reservedBit","reserved","getSymbolSize","posCount","intervals","getRowColCoords","posLength","EC_BLOCKS_TABLE","EC_CODEWORDS_TABLE","Polynomial","ReedSolomonEncoder","degree","genPoly","initialize","generateECPolynomial","paddedData","buff","GF","coeff","mul","divident","poly","exp","byte","TEST_KANJI","TEST_NUMERIC","TEST_ALPHANUMERIC","bitBuffer","remainingNum","ALPHA_NUM_CHARS","toSJIS","single_source_shortest_paths","predecessors","costs","cost_of_s_to_u","adjacent_nodes","cost_of_s_to_u_plus_cost_of_e","cost_of_s_to_v","PriorityQueue","cost","extract_shortest_path_from_predecessor_list","sorter","default_sorter","qrData","canvasEl","getImageWidth","createImageData","qrToImageData","putImageData","listUnicodeChar","stripListLeaders","gfm","useImgAltText","replaceLinksWithURL","htmlTagsToSkip","throwError","htmlReplaceRegex","joinedHtmlTagsToSkip","htmlparser","escapeStringRegexp","deepmerge","parseSrcset","postcssParse","naughtyHref","launderNaughtyHref","mediaTags","vulnerableTags","svgAnimationTags","alwaysUrlAttributes","sanitizeHtml","VALID_HTML_ATTRIBUTE_NAME","_recursing","tempResult","Frame","attribs","tagPosition","openingTagLength","mediaChildren","updateParentNodeText","updateParentNodeMediaChildren","htmlParserDefaults","tagAllowed","allowVulnerableTags","nonTextTagsArray","nonTextTags","allowedAttributesMap","allowedAttributesGlobMap","globRegex","allowedClassesMap","allowedClassesGlobMap","allowedClassesRegexMap","allowedClasses","transformTagsMap","transformTagsAll","skipMap","transformMap","skipTextDepth","transformTags","transFun","simpleTransform","addedText","initializeState","onopentag","onOpenTag","enforceHtmlBoundary","hasText","transformedTag","schemeCheckedAttributes","allowedSchemesAppliedToAttributes","disallowedTagsMode","nestingLimit","escapeHtml","allowedScriptHostnames","allowedScriptDomains","preserveEscapedAttributes","allowedEmptyAttributes","nonBooleanAttributes","passedAllowedAttributesMapCheck","splitStrArray","allowedHostname","hostname","allowedDomain","domain","isRelativeUrl","allowIframeRelativeUrls","allowedIframeHostnames","allowedIframeDomains","evil","allowedSpecificClasses","allowedWildcardClasses","allowedSpecificClassesGlob","allowedSpecificClassesRegex","allowedWildcardClassesRegex","allowedClassesGlobs","allowedGlobs","clss","parseStyleAttributes","filteredAST","extractedAttributes","attrObject","abstractSyntaxTree","allowedStyles","astRules","selectedRule","allowedDeclarationsList","attributeObject","regularExpression","selfClosing","ontext","lastFrame","onclosetag","isImplied","onCloseTag","exclusiveFilter","filterResult","lastParsedIndex","unparsed","decodeEntities","allowedSchemes","allowedSchemesByTag","allowProtocolRelative","newTagName","newAttribs","attrib","isMergeableObject","$$typeof","REACT_ELEMENT_TYPE","cloneUnlessOtherwiseSpecified","defaultArrayMerge","getKeys","propertyIsOnObject","arrayMerge","sourceIsArray","customMerge","deepmerge_1","isSpace","currentDescriptor","inputLength","regexLeadingSpaces","regexLeadingCommasOrSpaces","regexLeadingNotSpaces","regexTrailingCommas","regexNonNegativeInteger","regexFloatingPoint","parseDescriptors","lastChar","intVal","floatVal","pError","warningPrinted","LANG","transformer","processOpts","pluginOpts","atRule","dim","italic","underline","inverse","black","yellow","magenta","cyan","white","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite","blackBright","redBright","greenBright","yellowBright","blueBright","magentaBright","cyanBright","whiteBright","bgBlackBright","bgRedBright","bgGreenBright","bgYellowBright","bgBlueBright","bgMagentaBright","bgCyanBright","bgWhiteBright","hydrateInputs","inputHydrated","constructNode","jsonNodes","childJson","tokenizer","SAFE_COMMENT_NEIGHBOR","tokensToString","spaces","createTokenizer","unnamedAtrule","endOfFile","getPosition","spacesAndCommentsFromEnd","spacesAndCommentsFromStart","checkMissedSemicolon","founded","doubleColon","customProperty","unknownWord","propStart","betweenStart","firstSpacesStart","firstSpaces","precheckMissedSemicolon","stringFrom","spacesFromEnd","emptyRule","unexpectedClose","endFile","unclosedBlock","freeSemicolon","unclosedBracket","clean","lastTokenType","SINGLE_QUOTE","DOUBLE_QUOTE","BACKSLASH","SLASH","NEWLINE","SPACE","FEED","TAB","CR","OPEN_SQUARE","CLOSE_SQUARE","OPEN_PARENTHESES","CLOSE_PARENTHESES","OPEN_CURLY","CLOSE_CURLY","SEMICOLON","ASTERISK","COLON","AT","RE_AT_END","RE_WORD_END","RE_BAD_BRACKET","RE_HEX_ESCAPE","currentToken","escapePos","returned","lastBadParen","unclosed","what","ignoreUnclosed","controlChar","NoWorkResult","_css","_opts","_processor","_map","generatedCSS","generatedMap","dayjs","cleanHref","firstIndex","scheme","filterTag","padInteger","places","httpsFix","choices","choice","addBooleanFilterToCriteria","criteria","booleanOrNull","$ne","returnDefault","nowYear","nowCentury","theirYear","ampm","idRegExp","anum","bnum","rcompareIdentifiers","valid","version1","version2","v1","comparison","v1Higher","highVersion","lowVersion","highHasPre","rcompare","compareLoose","rsort","coerce","coerceRtlRegex","COERCERTLFULL","COERCERTL","truncation","clonedVersion","cloneInputVersion","versionStringToParse","doTruncation","isPrerelease","toComparators","maxSatisfying","versions","maxSV","rangeObj","minSatisfying","minSV","minVersion","minver","setMin","compver","validRange","gtr","r1","simplified","minimumVersionWithPreRelease","minimumVersion","simpleSubset","eqSet","gtltComp","higher","hasDomLT","hasDomGT","higherGT","lowerLT","needDomLTPre","needDomGTPre","subset","sawNonNull","OUTER","simpleSub","simpleDom","isSub","ipRegex","tlds","ipv4","v4","ipv6","v6","defaultTlds","RE2","hasRE2","SafeRegExp","re2","exact","auth","localhost","apostrophes","trailingPeriod","returnString","tld","disallowedChars","includeBoundaries","v6seg","v46Exact","v4exact","v6exact","Flag","Email","Password","Url","Time","DateTimeLocal","Search","Month","Week","Tel","matchesAxis","findEnabledItem","findLastEnabled","getItemsInGroup","resolveColumnTarget","targetItems","navigateInRow","navigateColumn","navigateRowEnd","navigateColumnEnd","navigateLinear","rowItems","adjacentGroupIndex","adjacentItems","targetGroupIndex","wrapGroupIndex","nextColumnIndex","wrapItems","Horizontal","creatorInherit","uri","xhtml","creatorFixed","sourceEvent","createSVGPoint","matrixTransform","getScreenCTM","pageX","pageY","_performCount","derivedState","LuxonError","InvalidDateTimeError","toMessage","InvalidIntervalError","InvalidDurationError","ConflictingSpecificationError","InvalidUnitError","InvalidArgumentError","ZoneIsAbstractError","DATE_SHORT","DATE_MED","DATE_MED_WITH_WEEKDAY","DATE_FULL","DATE_HUGE","TIME_SIMPLE","TIME_WITH_SECONDS","TIME_WITH_SHORT_OFFSET","timeZoneName","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","hourCycle","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED","DATETIME_MED_WITH_SECONDS","DATETIME_MED_WITH_WEEKDAY","DATETIME_FULL","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE","DATETIME_HUGE_WITH_SECONDS","ianaName","isUniversal","offsetName","formatOffset","otherZone","singleton","SystemZone","timeZone","parseZoneInfo","dtfCache","typeToPos","ianaZoneCache","IANAZone","resetCache","isValidSpecifier","isValidZone","dtf","hour12","adOrBc","formatToParts","filled","fMonth","fDay","fYear","fadOrBc","fHour","fMinute","fSecond","asTS","over","objToLocalTS","intlLFCache","intlDTCache","getCachedDTF","locString","intlNumCache","intlRelCache","sysLocaleCache","intlResolvedOptionsCache","getCachedIntResolvedOptions","weekInfoCache","listStuff","loc","englishFn","intlFn","listingMode","PolyNumberFormatter","forceSimple","padTo","otherOpts","intlOpts","useGrouping","minimumIntegerDigits","inf","NumberFormat","padStart","roundTo","PolyDateFormatter","dt","originalZone","gmtOffset","offsetZ","setZone","plus","toJSDate","PolyRelFormatter","isEnglish","hasRelative","rtf","cacheKeyOpts","lastable","isDay","isInPast","fmtValue","lilUnits","fmtUnit","fallbackWeekSettings","firstDay","minimalDays","weekend","fromOpts","numberingSystem","outputCalendar","weekSettings","defaultToEN","specifiedLocale","defaultLocale","localeR","numberingSystemR","defaultNumberingSystem","outputCalendarR","defaultOutputCalendar","weekSettingsR","validateWeekSettings","defaultWeekSettings","fromObject","numbering","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","localeStr","xIndex","uIndex","selectedStr","smaller","weekdaysCache","monthsCache","meridiemCache","eraCache","fastNumbersCached","fastNumbers","isActuallyEn","hasNoWeirdness","alts","redefaultToEN","redefaultToSystem","English.months","monthSpecialCase","formatStr","mapper","dtFormatter","extract","English.weekdays","meridiems","English.meridiems","English.eras","numberFormatter","relFormatter","listFormatter","ListFormat","getWeekSettings","hasLocaleWeekInfo","getWeekInfo","getStartOfWeek","getMinDaysInFirstWeek","getWeekendDays","FixedOffsetZone","utcInstance","parseSpecifier","signedOffset","InvalidZone","normalizeZone","defaultZone","lowered","numberingSystems","arab","arabext","bali","beng","deva","fullwide","gujr","hanidec","khmr","knda","laoo","limb","mlym","mong","mymr","orya","tamldec","telu","thai","tibt","latn","numberingSystemsUTF16","hanidecChars","digitRegexCache","digitRegex","appendCache","throwOnInvalid","twoDigitCutoffYear","cutoffYear","resetCaches","Invalid","explanation","nonLeapLadder","leapLadder","unitOutOfRange","dayOfWeek","computeOrdinal","uncomputeOrdinal","month0","isoWeekdayToLocal","startOfWeek","gregorianToWeek","gregObj","minDaysInFirstWeek","weekNumber","timeObject","weekToGregorian","weekData","weekdayOfJan4","yearInDays","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","usesLocalWeekValues","localWeekday","localWeekNumber","localWeekYear","hasInvalidGregorianData","validYear","isInteger","validMonth","integerBetween","validDay","hasInvalidTimeData","validHour","validMinute","validSecond","validMillisecond","bestBy","settings","parseInteger","parseFloating","parseMillis","rounding","factor","trunc","offsetFormat","offHourStr","offMinuteStr","offHour","offMin","asNumber","numericValue","normalizeObject","normalizer","monthsLong","monthsNarrow","weekdaysLong","weekdaysNarrow","erasLong","erasShort","stringifyTokens","splits","tokenToString","macroTokenToFormatOpts","Formats.DATE_SHORT","DD","Formats.DATE_MED","Formats.DATE_FULL","DDDD","Formats.DATE_HUGE","Formats.TIME_SIMPLE","Formats.TIME_WITH_SECONDS","ttt","Formats.TIME_WITH_SHORT_OFFSET","tttt","Formats.TIME_WITH_LONG_OFFSET","Formats.TIME_24_SIMPLE","TT","Formats.TIME_24_WITH_SECONDS","TTT","Formats.TIME_24_WITH_SHORT_OFFSET","TTTT","Formats.TIME_24_WITH_LONG_OFFSET","Formats.DATETIME_SHORT","Formats.DATETIME_MED","fff","Formats.DATETIME_FULL","ffff","Formats.DATETIME_HUGE","Formats.DATETIME_SHORT_WITH_SECONDS","FF","Formats.DATETIME_MED_WITH_SECONDS","FFF","Formats.DATETIME_FULL_WITH_SECONDS","FFFF","Formats.DATETIME_HUGE_WITH_SECONDS","Formatter","parseFormat","fmt","currentFull","formatOpts","systemLoc","formatWithSystemDefault","formatDateTime","formatDateTimeParts","formatInterval","formatRange","signDisplay","formatDateTimeFromString","knownEnglish","useDateTimeFormatter","isOffsetFixed","allowZ","maybeMacro","formatDurationFromString","dur","invertLargest","signMode","tokenToField","realTokens","shiftTo","lildur","inversionFactor","isNegativeDuration","largestUnit","ianaRegex","combineRegexes","combineExtractors","extractors","mergedVals","mergedZone","extractor","simpleParse","offsetRegex","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","extractISOWeekData","extractISOOrdinalData","sqlTimeRegex","sqlTimeExtensionRegex","int","extractISOTime","extractISOOffset","fullOffset","extractIANAZone","isoTimeOnly","isoDuration","extractISODuration","weekStr","millisecondsStr","hasNegativePrefix","negativeSeconds","maybeNegate","fromStrings","English.monthsShort","English.weekdaysLong","English.weekdaysShort","extractRFC2822","milOffset","rfc1123","rfc850","extractRFC1123Or850","extractASCII","isoYmdWithTimeExtensionRegex","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","extractISOWeekTimeAndOffset","extractISOOrdinalDateAndTime","extractISOTimeAndOffset","extractISOTimeOnly","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOTimeOffsetAndIANAZone","INVALID","lowOrderMatrix","casualMatrix","accurateMatrix","daysInYearAccurate","daysInMonthAccurate","orderedUnits","reverseUnits","conversionAccuracy","matrix","durationToMillis","vals","normalizeValues","reduceRight","previousVal","conv","rollUp","removeZeroes","newVals","accurate","isLuxonDuration","fromMillis","normalizeUnit","fromDurationLike","durationLike","fromISO","fromISOTime","toFormat","fmtOpts","toHuman","showZeros","unitDisplay","listStyle","toISO","toISOTime","millis","toMillis","suppressMilliseconds","suppressSeconds","includePrefix","includeOffset","invalidReason","minus","mapUnits","rescale","shiftToAll","built","accumulated","lastUnit","ak","removeZeros","invalidExplanation","Interval","isLuxonInterval","fromDateTimes","builtStart","friendlyDateTime","builtEnd","validateError","startIsValid","endIsValid","isInterval","lastDateTime","toDuration","useLocaleWeeks","hasSame","dateTime","splitAt","dateTimes","sorted","splitBy","divideEqually","numberOfParts","overlaps","abutsStart","abutsEnd","engulfs","sofar","currentCount","ends","toISODate","mapEndpoints","mapFn","Info","hasDST","isValidIANAZone","locObj","getMinimumDaysInFirstWeek","getWeekendWeekdays","monthsFormat","weekdaysFormat","features","localeWeek","dayDiff","earlier","utcDayStart","toUTC","intUnit","post","deser","spaceOrNBSP","spaceOrNBSPRegExp","fixListRegex","stripInsensitivities","oneOf","simple","partTypeStyleToTokenVal","short","long","dayperiod","dayPeriod","hour24","dummyDateTimeCache","expandMacroTokens","formatOptsToTokens","TokenParser","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","disqualifyingUnit","explainFromTokens","rawMatches","matchIndex","specificOffset","df","resolvedOpts","actualType","MAX_DATE","unsupportedZone","possiblyCachedWeekData","possiblyCachedLocalWeekData","localWeekData","inst","fixOffset","localTS","tz","utcGuess","o3","tsToObj","objToTS","adjustTime","oPre","millisToAdd","parseDataToDateTime","parsedZone","interpretationZone","toTechFormat","extended","precision","longFormat","extendedZone","showSeconds","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedWeekUnits","orderedOrdinalUnits","weeknumber","weeksnumber","weeknumbers","normalizeUnitWithLocalWeeks","quickDT","offsetProvis","zoneOffsetTs","offsetGuess","zoneOffsetGuessCache","diffRelative","calendary","differ","lastOpts","argList","ot","_zone","isLuxonDateTime","zoneToUse","fromSeconds","tsNow","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","useWeekData","defaultValues","objNow","foundFirst","higherOrderInvalid","validWeek","validWeekday","validOrdinal","gregorian","tsFinal","offsetFinal","fromRFC2822","fromHTTP","fromFormat","localeToUse","fromString","fromSQL","isDateTime","parseFormatForOpts","localeOpts","isWeekend","monthShort","monthLong","weekdayShort","weekdayLong","offsetNameShort","offsetNameLong","isInDST","getPossibleOffsets","dayMs","minuteMs","oEarlier","oLater","o1","ts1","ts2","isInLeapYear","weeksInLocalWeekYear","resolvedLocaleOptions","toLocal","keepCalendarTime","newTS","asObj","settingWeekStuff","mixed","normalizedUnit","toLocaleParts","toISOWeekDate","toRFC2822","toHTTP","toSQLDate","toSQLTime","includeZone","includeOffsetSpace","toSQL","toSeconds","toUnixInteger","toBSON","includeConfig","otherDateTime","durOpts","otherIsLater","highWater","lowestOrder","differs","remainingMillis","lowerOrderUnits","diffNow","adjustedToZone","toRelative","toRelativeCalendar","fromFormatExplain","fromStringExplain","buildFormatParser","fromFormatParser","formatParser","Formats.DATE_MED_WITH_WEEKDAY","Formats.DATETIME_MED_WITH_WEEKDAY","dateTimeish","Dispatch","taskHead","taskTail","clockLast","clockNow","clockSkew","clock","setFrame","clearNow","Timer","_call","restart","wake","t0","t1","sleep","poke","xlink","_configSet","assertNonEmptyArray","assertArrayHasAtLeast2","decodeMap","BinTrieFlags","CharCodes","EntityDecoderState","DecodingMode","ZERO","NINE","isHexadecimalCharacter","UPPER_A","UPPER_F","LOWER_A","LOWER_F","isEntityInAttributeInvalidEnd","EQUALS","UPPER_Z","LOWER_Z","VALUE_LENGTH","FLAG13","BRANCH_LENGTH","JUMP_TABLE","NUM","SEMI","LOWER_X","EntityStart","NumericStart","NumericDecimal","NumericHex","NamedEntity","Legacy","Strict","Attribute","EntityDecoder","decodeTree","emitCodePoint","startEntity","decodeMode","treeIndex","excess","runConsumed","stateNumericStart","stateNamedEntity","stateNumericDecimal","stateNumericHex","emitNumericEntity","lastCp","expectedLength","absenceOfDigitsInNumericCharacterReference","codePoint","missingSemicolonAfterCharacterReference","validateNumericCharacterReference","valueLength","runLength","emitNotTerminatedNamedEntity","charIndexInPacked","packedWord","expectedChar","emitNamedEntityData","determineBranch","branchCount","jumpOffset","packedKeySlots","midKey","htmlDecodeTree","decodeBase64","binary","evenLength","outIndex","diff_match_patch","Diff_Timeout","Diff_EditCost","Match_Threshold","Match_Distance","Patch_DeleteThreshold","Patch_Margin","Match_MaxBits","DIFF_DELETE","Diff","diff_main","text1","opt_checklines","opt_deadline","MAX_VALUE","checklines","commonlength","diff_commonPrefix","commonprefix","diff_commonSuffix","commonsuffix","diff_compute_","diff_cleanupMerge","longtext","shorttext","diff_halfMatch_","text1_a","text1_b","text2_a","text2_b","mid_common","diffs_a","diffs_b","diff_lineMode_","diff_bisect_","diff_linesToChars_","chars1","linearray","lineArray","diff_charsToLines_","diff_cleanupSemantic","pointer","count_delete","count_insert","text_delete","text_insert","subDiff","text1_length","text2_length","max_d","v_offset","v_length","front","k1start","k1end","k2start","k2end","k1","k1_offset","y1","x1","k2_offset","x2","diff_bisectSplit_","k2","y2","text1a","text2a","text1b","text2b","diffsb","lineHash","diff_linesToCharsMunge_","lineArrayLength","pointermin","pointermax","pointermid","pointerstart","pointerend","diff_commonOverlap_","text_length","dmp","diff_halfMatchI_","best_longtext_a","best_longtext_b","best_shorttext_a","best_shorttext_b","seed","best_common","prefixLength","suffixLength","hm1","hm2","equalities","equalitiesLength","lastEquality","length_insertions1","length_deletions1","length_insertions2","length_deletions2","diff_cleanupSemanticLossless","deletion","insertion","overlap_length1","overlap_length2","diff_cleanupSemanticScore_","char1","char2","nonAlphaNumeric1","nonAlphaNumericRegex_","nonAlphaNumeric2","whitespace1","whitespaceRegex_","whitespace2","lineBreak1","linebreakRegex_","lineBreak2","blankLine1","blanklineEndRegex_","blankLine2","blanklineStartRegex_","equality1","edit","equality2","commonOffset","commonString","bestEquality1","bestEdit","bestEquality2","bestScore","diff_cleanupEfficiency","pre_ins","pre_del","post_ins","post_del","diff_cleanupSplitSurrogates","thisDiff","thisTop","thisEnd","isHighSurrogate","isLowSurrogate","digit16","decoded","byte1","URIError","byte2","byte3","diff_xIndex","last_chars1","last_chars2","diff_prettyHtml","pattern_amp","pattern_lt","pattern_gt","pattern_para","diff_text1","diff_text2","diff_levenshtein","levenshtein","insertions","deletions","diff_toDelta","diff_fromDelta","diffsLength","match_main","match_bitap_","match_alphabet_","match_bitapScore_","accuracy","proximity","score_threshold","best_loc","bin_min","bin_mid","matchmask","last_rd","bin_max","rd","charMatch","patch_addContext_","start2","length1","start1","length2","patch_make","opt_b","opt_c","patches","patch_obj","patchDiffLength","char_count1","char_count2","prepatch_text","postpatch_text","diff_type","diff_text","patch_deepCopy","patchesCopy","patchCopy","patch_apply","nullPadding","patch_addPadding","patch_splitMax","start_loc","expected_loc","end_loc","index2","index1","paddingLength","extraLength","patch_size","bigpatch","precontext","postcontext","patch_toText","patch_fromText","textline","textPointer","patchHeader","executeScript","checkScript","parseScript","decoratorWithRequiredParams","__isComputedDecorator","expandProperties","expandedPath","unobserves","templateObject_1","templateObject_2","templateObject_3","faint","_url_allowlist","_escape_html","boldStyle","faintStyle","italicStyle","_boldClass","_faintClass","_italicClass","_underlineClass","use_classes","url_allowlist","escape_html","_boldStyle","_faintStyle","_italicStyle","_underlineStyle","truecolor_class_name","xterm_index","rgb_to_xterm_index","best_index","best_distance","dr","dg","_osc_regex","nearest_idx","nearest_color","fg_class_name","bg_class_name","PLUGIN_NAME","NEW_LINE_EXP","getLine","lineNumberRows","lineNumberEnd","resizeElements","assumeViewportIndependence","lastWidth","lineNumbersWrapper","linesNum","counterReset","currentStyle","infos","codeElement","lineNumberSizer","codeLines","oneLinerHeight","sizer","LINE_NUMBERS_CLASS","LINKABLE_LINE_NUMBERS_CLASS","lineHighlight","mutateActions","lineBreakMatch","numberOfLines","codePreOffset","parentStyle","childStyle","pxToNumber","endNode","hasClass","$$","lineSpan","callFunction","fakeTimer","isActiveFor","completeHook","isLineNumbersLoaded","applyHash","envVars","commandAfterHeredoc","insideString","shebang","builtin","toBeCopied","heredoc","webmanifest","javastacktrace","uuid","percentExpression","symbolName","shellsession","anchorOrAlias","plainKey","createValuePattern","scalar","directive","yml","getPlaceholder","buildPlaceholders","placeholderPattern","replaceFilter","tokenStack","tokenizePlaceholders","walkTokens","middle","handlebars","hbs","mustache","CANCELLED","makeCancelState","DropReducer","remainingSlots","KeepLatestReducer","numToCancel","QUEUED","totalRunning","RestartableReducer","TaskLinkProxy","linkedObject","_performShared","_perform","linked","unlinked","_clone","_curry","_curryArgs","fullArgs","_taskInstanceFactory","_taskInstanceOptions","_linkedObject","deferable","COUNT","SET","splitSelector","isKeyframes","isAt","keyframes","getRules","setNonce","StyleSet","adoptedSet","adopted","styleTag","appInstance","resolveRegistration","flightIconsSpriteLazyEmbed","svgSprite","insertAdjacentHTML","loadSprite","HdsCodeEditorLanguageValues","Rego","Shell","JavaScript","Markdown","Sentinel","Sql","HdsIntlService","Service","factoryFor","restOptions","SECOND_IN_MS","HOUR_IN_MS","DAY_IN_MS","WEEK_IN_MS","THRESHOLD_RELATIVE_TIME_IN_MS","HdsTimeRelativeUnitValues","Second","Hour","Minute","Day","DEFAULT_RELATIVE_THRESHOLDS","HdsDisplayKeyValues","FriendlyRelative","FriendlyLocal","FriendlyOnly","Relative","Utc","FORMAT_PRECISION_SHORT_DATE","FORMAT_PRECISION_MINUTE","FORMAT_PRECISION_SECOND","DATE_DISPLAY_FORMATS","DEFAULT_DISPLAY_MAPPING","displayFormat","showFriendly","showRelative","tooltipFormat","DISPLAY_SCALE","DISPLAYS","_listeners","_now","TimeService","displayKey","selectTimeRelativeUnit","formatTimeRelativeUnit","_TimeService","closurePipe","pipeAction","closureToggle","toggleAction","enLocaleData","decimal","enLocaleData$1","findLocaleData","topLevelData","numbersHash","compactFormat","matchingRule","financialFormat","significantDigits","arbitraryPrecision","testRangeHigh","formatter","numberOfDigits","normalizedLocale","minimumFractionDigits","maximumFractionDigits","digitsConfig","powOf10","strength","ym","yp","leaf","x0","_x0","y0","_y0","_x1","_y1","_x","_y","quad","defaultX","defaultY","quadtree","Quadtree","addAll","leaf_copy","treeProto","jiggle","vx","vy","collide","radius","radii","iterations","xi","yi","ri","ri2","visitAfter","rj","sqrt","_nodes","_random","nodeById","src_link","strengths","distances","initializeStrength","initializeDistance","cover","xz","yz","extent","x3","y3","quads","Quad","dy","d2","retainer","initialRadius","initialAngle","PI","simulation","alphaMin","alphaDecay","alphaTarget","velocityDecay","forces","stepper","tick","fx","fy","initializeNodes","angle","cos","sin","initializeForce","randomSource","manyBody","distanceMin2","distanceMax2","theta2","accumulate","distanceMin","distanceMax","theta","radial","radiuses","src_x","src_y","Local","pointers","touches","nonpassivecapture","noevent","cosh","src_zoom","zoomRho","rho","rho2","rho4","zoom","p0","ux0","uy0","w0","ux1","uy1","w1","d1","b0","b1","r0","coshr0","SQRT2","_1","_2","elapsed","emptyOn","emptyTween","STARTING","ENDING","ENDED","schedules","__transition","tween","ease","interrupt","svgNode","degrees","translateX","translateY","skewX","atan2","atan","interpolateTransform","pxComma","pxParen","degParen","xa","ya","xb","yb","interpolateTransformCss","DOMMatrix","WebKitCSSMatrix","isIdentity","interpolateTransformSvg","baseVal","consolidate","tweenRemove","tween0","tween1","tweenFunction","tweenValue","src_define","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","blanchedalmond","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","whitesmoke","yellowgreen","color_formatHex","formatHex","color_formatRgb","formatRgb","rgbn","Rgb","rgba","hsla","rgb_formatHex","rgb_formatRgb","clampa","clampi","Hsl","hslConvert","clamph","clampt","m2","v0","v3","t3","channels","displayable","formatHex8","formatHsl","nogamma","rgbGamma","colorRgb","gamma","rgbSpline","spline","colors","reA","reB","am","bm","bs","bi","interpolate","interpolateNumber","interpolateRgb","interpolateString","value1","string00","interpolate0","string1","string0","string10","attrTweenNS","attrTween","delayFunction","delayConstant","durationFunction","durationConstant","Transition","selection_prototype","id0","id1","on0","on1","sit","styleTween","listener0","textTween","easeVarying","defaultTiming","src_constant","ZoomEvent","Transform","applyX","applyY","invertX","invertY","rescaleX","rescaleY","__zoom","nopropagation","src_noevent","defaultFilter","defaultExtent","defaultTransform","defaultWheelDelta","defaultTouchable","defaultConstrain","translateExtent","dx0","dx1","dy0","dy1","touchstarting","touchfirst","touchending","constrain","wheelDelta","touchable","scaleExtent","interpolateZoom","clickDistance2","tapDistance","wheeled","mousedowned","dblclicked","touchstarted","touchmoved","touchended","centroid","gesture","__zooming","Gesture","taps","mouse","noclick","MozUserSelect","__noselect","touch0","touch1","l0","l1","dp","dl","hypot","scaleBy","scaleTo","translateBy","translateTo","clickDistance","assign$1","buildHelper","registeredTimers","getTimers","destroyable","timers","cancelId","focusableElements","DEFAULT_SELECTOR","autofocus","shouldMoveFocus","taskOrName","NULL_TIMER_ID","IGNORED_STYLES","_hPosition","_vPosition","_top","_left","_right","_width","_height","_otherStyles","_renderInPlace","BasicDropdown","_getDestinationId","_previousDisabled","_actions","onInit","_getTriggerElement","_dropdownId","skipFocus","hPosition","vPosition","previousVerticalPosition","previousHorizontalPosition","_getDropdownElement","positionData","calculatePosition","applyReposition","_trigger","otherStyles","utilConfig","configEnvironment","legacyConfigString","APP","ensureSafeComponent","contentComponent","_BasicDropdown","initiallyOpened","BasicDropdownWormholeComponent","getDestinationId","_BasicDropdownWormholeComponent","EmberObjectAbility","parseProperty","getAbility","abilityValue","extendResolver","pluralizedTypes","ability","CanHelper","_abilities","abilityString","abilities","can","_CanHelper","CannotHelper","cannot","_CannotHelper","stopWords","AbilitiesService","abilityName","abilityFor","AbilityFactory","possibleAbilityClass","abilityClass","valueFor","LOG_LIMIT","setupDeprecationWorkflow","deprecationWorkflow","deprecationLog","registerDeprecationHandler","handleDeprecationWorkflow","deprecationCollector","flushDeprecations","matchesWorkflow","detectWorkflow","workflow","idMatcher","matchMessage","matchId","collected","mergedConfig","matchingWorkflow","logCounts","throwOnUnhandled","FlashMessage","_dec2","_dec3","_dec4","_dec5","_descriptor2","_descriptor3","_descriptor4","pendingSet","_mouseEnterHandler","_mouseEnter","_mouseLeaveHandler","_mouseLeave","_destroyFlashMessage","messageStyle","showProgress","flash","notExiting","exiting","showProgressBar","exitingClass","messageStylePrefix","_defaultMessageStylePrefix","alertType","flashType","progressDuration","preventExit","allowExit","destroyMessage","destroyOnClick","FlashObject","dependentKey","emberGuidFor","Evented","disableTimeout","testHelperDisableTimeout","timerTask","_setInitializedTime","_cancelTimer","exitTaskInstance","exitTimerTask","exitMessage","isExitable","_checkIfShouldExit","timerTaskInstance","extendedTimeout","initializedTime","_getElapsedTime","flashService","removeObject","getWithDefault","objectInstance","FlashMessagesService","_setDefaults","clearMessages","_enqueue","_newFlashMessage","flashes","registerTypes","_registerType","peekFirst","firstObject","peekLast","lastObject","getFlashObject","defaultPreventDuplicates","preventDuplicates","originalObj","keysToRemove","flashMessageOptions","_getOptionOrDefault","defaultOption","flashMessageDefaults","configOverrides","defaultKey","setProperties","_hasDuplicate","_guids","flashInstance","instancePreventDuplicates","pushObject","CANCEL_REASON","cancelHelper","maybeReportError","performHelper","reified","fullParams","cacheDefault","serializer","serializerDefault","strategyDefault","monadic","computedValue","variadic","assemble","serialize","ObjectWithoutPrototypeCache","strategies","DATE_TIME_REGEX","parseDateTimeSkeleton","skeleton","WHITE_SPACE_REGEX","icuUnitToEcma","FRACTION_PRECISION_REGEX","SIGNIFICANT_PRECISION_REGEX","INTEGER_WIDTH_REGEX","CONCISE_INTEGER_WIDTH_REGEX","parseSignificantPrecision","roundingPriority","g1","g2","minimumSignificantDigits","maximumSignificantDigits","parseSign","currencySign","parseConciseScientificAndEngineeringStem","stem","notation","parseNotationOptions","parseNumberSkeleton","currency","compactDisplay","currencyDisplay","roundingMode","g3","g4","g5","trailingZeroDisplay","signOpts","conciseScientificAndEngineeringOpts","ErrorKind","EXPECT_ARGUMENT_CLOSING_BRACE","EMPTY_ARGUMENT","MALFORMED_ARGUMENT","EXPECT_ARGUMENT_TYPE","INVALID_ARGUMENT_TYPE","EXPECT_ARGUMENT_STYLE","INVALID_NUMBER_SKELETON","INVALID_DATE_TIME_SKELETON","EXPECT_NUMBER_SKELETON","EXPECT_DATE_TIME_SKELETON","UNCLOSED_QUOTE_IN_ARGUMENT_STYLE","EXPECT_SELECT_ARGUMENT_OPTIONS","EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE","INVALID_PLURAL_ARGUMENT_OFFSET_VALUE","EXPECT_SELECT_ARGUMENT_SELECTOR","EXPECT_PLURAL_ARGUMENT_SELECTOR","EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT","EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT","INVALID_PLURAL_ARGUMENT_SELECTOR","DUPLICATE_PLURAL_ARGUMENT_SELECTOR","DUPLICATE_SELECT_ARGUMENT_SELECTOR","MISSING_OTHER_CLAUSE","INVALID_TAG","INVALID_TAG_NAME","UNMATCHED_CLOSING_TAG","UNCLOSED_TAG","argument","pound","SKELETON_TYPE","isLiteralElement","isArgumentElement","isNumberElement","isDateElement","isTimeElement","isSelectElement","isPluralElement","isPoundElement","isTagElement","isNumberSkeleton","isDateTimeSkeleton","SPACE_SEPARATOR_REGEX","timeData","AC","AD","AE","AF","AG","AI","AL","AM","AO","AR","AS","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CP","CU","CV","CW","CX","CY","CZ","DE","DG","DJ","DK","DM","DO","DZ","EA","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HN","HR","HU","IC","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LU","LV","LY","MA","MC","MD","MF","MG","MH","MK","ML","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TA","TC","TD","TF","TG","TH","TJ","TL","TM","TN","TO","TR","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","XK","YE","YT","ZA","ZM","ZW","getDefaultHourSymbolFromLocale","hourCycles","languageTag","regionTag","maximize","SPACE_SEPARATOR_START_REGEX","SPACE_SEPARATOR_END_REGEX","createLocation","hasNativeFromEntries","hasTrimStart","trimStart","hasTrimEnd","trimEnd","IDENTIFIER_PREFIX_RE","ignoreTag","requiresOtherClause","shouldParseSkeletons","parseMessage","nestingLevel","parentArgType","expectingCloseTag","isEOF","parseArgument","clonePosition","_isAlpha","parseTag","parseLiteral","bump","startPosition","parseTagName","bumpSpace","bumpIf","childrenResult","endTagStartPosition","closingTagNameStartPosition","_isPotentialElementNameChar","parseQuoteResult","tryParseQuote","parseUnquotedResult","tryParseUnquoted","parseLeftAngleResult","tryParseLeftAngleBracket","codepoint","codePoints","openingBracePosition","parseIdentifierIfPossible","parseArgumentOptions","startingPosition","bumpTo","typeStartPosition","argType","typeEndPosition","styleAndLocation","styleStartPosition","parseSimpleArgStyleIfPossible","styleLocation","argCloseResult","tryParseArgumentClose","parseNumberSkeletonFromString","dateTimePattern","skeletonCopy","patternPos","patternChar","hourLen","dayPeriodLen","dayPeriodChar","hourChar","parsedOptions","identifierAndLocation","pluralOffset","tryParseDecimalInteger","optionsResult","tryParsePluralOrSelectOptions","pluralType","nestedBraces","apostrophePosition","bumpUntil","stringTokens","stringToken","stemAndOptions","expectCloseTag","parsedFirstIdentifier","hasOtherClause","parsedSelectors","selectorLocation","fragmentResult","expectNumberError","invalidNumberError","hasDigits","isSafeInteger","currentOffset","targetOffset","_isWhiteSpace","pruneLocation","ErrorCode","MISSING_VALUE","INVALID_VALUE","MISSING_INTL_API","FormatError","originalMessage","InvalidValueError","variableId","InvalidValueTypeError","MissingValueError","PART_TYPE","isFormatXMLElementFn","formatters","currentPluralValue","getNumberFormat","varName","getDateTimeFormat","formatFn","exactKey","PluralRules","getPluralRules","lastPart","createFastMemoizeCache","IntlMessageFormat","_IntlMessageFormat","overrideFormats","pluralRules","resolvedLocale","supportedLocalesOf","resolveLocale","__parse","parseOpts","formatterCache","memoizedDefaultLocale","supportedLocales","captureLocation","percent","IntlErrorCode","FORMAT_ERROR","UNSUPPORTED_FORMATTER","INVALID_CONFIG","MISSING_DATA","MISSING_TRANSLATION","IntlError","UnsupportedFormatterError","InvalidConfigError","MissingDataError","IntlFormatError","MessageFormatError","defaultMessage","MissingTranslationError","filterProps","allowlist","DEFAULT_INTL_CONFIG","defaultFormats","fallbackOnEmptyString","onWarn","getNamedFormat","formatType","setTimeZoneInOptions","deepMergeOptions","opts1","opts2","deepMergeFormatsAndSetTimeZone","f1","mfFormats","defaultRichTextElements","messageDescriptor","msgId","Err","getMessageFormat","DATE_TIME_FORMAT_OPTIONS","getFormatter$2","filteredOptions","formatDateTimeRange","fromDate","formatDateToParts","formatTimeToParts","DISPLAY_NAMES_OPTONS","getDisplayNames","DisplayNames","LIST_FORMAT_OPTIONS","getListFormat","formatListToParts","richValues","serializedValues","PLURAL_FORMAT_OPTIONS","formatPlural","RELATIVE_TIME_FORMAT_OPTIONS","getRelativeTimeFormat","NUMBER_FORMAT_OPTIONS","getFormatter","formatNumberToParts","intlShape","needToEscape","badCharacters","escapeExpression","convertToArray","convertToString","flattenKeys","translation","_intls","IntlService","displayNames","primaryLocale","addTranslations","translations","updateIntl","createIntl","dateTimeRange","_formats","resolvedConfig","$t","_onFormatjsError","getTranslation","formatOptions","getIntlShape","escapedOptions","isHTMLSafe","getIntl","setFormats","proposedLocale","locale1","locale2","updateDocumentLanguage","setOnFormatjsError","onFormatjsError","setOnMissingTranslation","onMissingTranslation","_onMissingTranslation","documentService","newIntl","_IntlService","createCustomError","LDUnexpectedResponseError","LDInvalidEnvironmentIdError","LDInvalidUserError","LDInvalidEventKeyError","LDInvalidArgumentError","LDInvalidDataError","LDFlagFetchError","isHttpErrorRecoverable","appendUrlPath","base64URLEncode","chunkEventsForUrl","deepEquals","getLDUserAgentString","onNextTick","sanitizeContext","transformValuesToVersionedValues","transformVersionedValuesToValues","wrapPromiseCallback","DNS","clockseq","rng","msecs","nsecs","v5","NIL","validate","commonBasicLogger","validateLogger","bootstrapInvalid","bootstrapOldFormat","clientInitialized","clientNotReady","debugEnqueueingEvent","debugPostingDiagnosticEvent","debugPostingEvents","debugStreamDelete","debugStreamDeleteIgnored","debugStreamPatch","debugStreamPatchIgnored","debugStreamPing","debugPolling","debugStreamPut","deprecated","environmentNotFound","environmentNotSpecified","errorFetchingFlags","eventCapacityExceeded","eventWithoutContext","httpErrorMessage","httpUnavailable","identifyDisabled","inspectorMethodError","invalidContentType","invalidData","invalidInspector","invalidKey","invalidContext","invalidTagValue","localStorageUnavailable","networkError","optionBelowMinimum","streamClosing","streamConnecting","streamError","tagValueTooLong","unknownCustomEventKey","unknownOption","contextNotSpecified","unrecoverableStreamError","wrongOptionType","wrongOptionTypeBoolean","baseUrl","streamUrl","eventsUrl","sendEvents","streaming","sendLDHeaders","requestHeaderTransform","sendEventsOnlyForVariation","useReport","evaluationReasons","eventCapacity","minimum","flushInterval","samplingInterval","streamReconnectDelay","allAttributesPrivate","privateAttributes","bootstrap","diagnosticRecordingInterval","diagnosticOptOut","wrapperName","wrapperVersion","stateProvider","application","validator","inspectors","baseOptionDefs","getTags","getLDHeaders","userAgentHeaderName","transformHeaders","httpFallbackPing","httpRequest","serverTime","httpAllowsPost","sendChunk","checkContext","getContextKeys","getContextKinds","getCanonicalKey","cloneExcluding","excluded","literalToReference","anonymous","processContext","ct","ut","flagUsed","flagDetailsChanged","flagDetailChanged","clientIdentityChanged","InspectorTypes","InspectorManager","hasListeners","onFlagUsed","onFlags","onFlagChanged","onIdentityChanged","ft","vt","pt","mt","ht","yt","getEventListenerCount","onReady","getInitializationPromise","getReadyPromise","signalSuccess","signalFailure","diagnosticId","sdkKeySuffix","getProps","dataSinceDate","droppedEvents","eventsInLastBatch","streamInits","incrementDroppedEvents","setEventsInLastBatch","recordStreamInit","failed","durationMillis","diagnosticUseCombinedEvent","customBaseURI","customStreamURI","customEventsURI","eventsCapacity","eventsFlushIntervalMillis","reconnectTimeMillis","streamingDisabled","diagnosticRecordingIntervalMillis","usingSecureMode","bootstrapMode","fetchGoalsDisabled","fetchGoals","diagnosticPlatformData","creationDate","diagnosticSdkData","setStreaming","readTimeoutMillis","eventSourceFactory","eventSourceAllowsReport","onopen","eventSourceIsActive","summarizeEvent","contextKeys","getSummary","counters","contextKinds","clearSummary","redactedAttributes","privateAttributeNames","trackEvents","debugEventsUntilDate","flushTick","addPromise","coalescer","resultPromise","fetchJSON","fetchFlagSettings","loadFlags","$schema","clearFlags","saveFlags","enqueueEvent","isDoNotTrack","variationIndex","flagVersion","trackReason","errorKind","ping","getInitialState","waitForInitialization","waitUntilReady","identify","variationDetail","customEventFilter","getCurrentUrl","contextKind","metricValue","allFlags","finishClose","emitter","ident","requestor","getFlagsInternal","getEnvironmentId","internalChangeEventName","wt","bt","Et","Dt","Ct","St","Ot","Lt","Ut","Tt","At","jt","eventUrlTransformer","disableSyncEventPost","synchronousFlush","Image","doNotTrack","msDoNotTrack","EventSourcePolyfill","supportedOptions","EventSource","heartbeatTimeout","silentTimeout","skipDefaultHeaders","OPEN","CONNECTING","waitUntilGoalsReady","pushState","resolveInitializer","loadInitializers","app","explicitModules","initializerPrefix","instanceInitializerPrefix","initializers","instanceInitializers","requirejs","_eak_seen","moduleNames","instanceInitializer","lowerCase","DEFAULT_SPLIT_REGEXP","DEFAULT_STRIP_REGEXP","capitalCaseTransform","capitalCase","splitRegexp","stripRegexp","inflections_default","uncountable2","irregularPairs2","singular2","_Inflector2_brand","_Inflector2","normalizedRuleSet","_classPrivateFieldSet","_Inflector","classCallCheck","Constructor","createClass","protoProps","staticProps","icPart","singulars","uncountables","humans","acronyms","acronymRegex","sRest","pRest","sRestIC","pRestIC","defaults$1","inflections","applyInflections","DEFAULT_APPROXIMATIONS","instances$1","Transliterator","approximations","approximate","createObject","createMap","Target","delegate","willAddRoute","addChild","Matcher","routes","generateMatch","startingPath","fullPath","addRoute","routeArray","eachRoute","baseRoute","normalizeSegment","contextEntered","SEGMENT_RESERVED_CHARS","PATH_SEGMENT_ENCODINGS","encodePathSegment","getParam","eachChar","currentState","RouteRecognizer","ENCODE_AND_DECODE_PATH_SEGMENTS","EmptyObject","EmptyArray","shouldDecodes","isEqualCharSpec","State","nextStates","_regex","recognizeChar","child$1","RecognizeResults","decodeQueryParamPart","rootState","allSegments","handlersFor","hasRoute","generateQueryString","arrayPair","parseQueryString","queryString","keyLength","recognize","isSlashDropped","hashStart","queryStart","originalPath","pathLen","solutions","astatics","adynamics","astars","ref$1","bstatics","bdynamics","bstars","captures","currentCapture","isDynamic","Normalizer","addRouteCallback","_Event","httpStatusCodes","unsafeHeaders","Connection","Cookie","Cookie2","Expect","Host","TE","Trailer","Upgrade","Via","_addEventListener","EventedObject","_eventListeners","FakeXMLHttpRequest","UNSENT","upload","onloadend","onloadstart","onprogress","ontimeout","_progress","lengthComputable","loaded","HEADERS_RECEIVED","DONE","FakeXMLHttpRequestProto","withCredentials","responseXML","sendFlag","_readyStateChange","verifyState","hasContentTypeHeader","errorFlag","onSend","aborted","overrideMimeType","mimeType","forceMimeType","_setResponseHeaders","_setResponseBody","chunkSize","xmlDoc","ActiveXObject","loadXML","respond","fake_xml_http_request","commonjsGlobal","requiresPort","querystringify_1","protocolre","windowsDriveLetter","trimLeft","isSpecial","lolcation","finaldestination","extractProtocol","forwardSlashes","otherSlashes","slashesCount","extracted","instruction","instructions","qs","urlParse","parseURL","fullpath","Registry","verbs","GET","PUT","POST","DELETE","PATCH","HEAD","OPTIONS","Hosts","registries","forURL","global$1","viewClasses","isArrayBufferView","isView","normalizeName","normalizeValue","iteratorFor","fileReaderReady","readBlobAsArrayBuffer","readAsArrayBuffer","bufferClone","_initBody","_bodyInit","_bodyText","isPrototypeOf","_bodyBlob","_bodyFormData","_bodyArrayBuffer","decode$1","upcased","credentials","signal","reParamSearch","bodyInit","redirectStatuses","redirect","abortXhr","rawHeaders","FakeFetch","NoopArray","scheduleProgressEvent","totalTime","totalSize","File","elapsedTime","progressTransmitted","PASSTHROUGH","verbify","Pretender","passthrough","lastArg","shouldNotTrack","trackRequests","handledRequests","passthroughRequests","unhandledRequests","requestReferences","forcePassthrough","disableUnhandled","_nativeXMLHttpRequest","running","pretender","FakeRequest","sendArguments","checkPassthrough","handleRequest","fakeXHR","nativeXMLHttpRequest","evts","uploadEvents","lifecycleProps","_passthroughRequest","eventable","createHandler","propertyNames","fromXHR","toXHR","createUploadHandler","_passthroughCheck","_fetchProps","argLength","maps","handlerInstance","numberOfCalls","recognized","passthroughRequest","_handlerFor","async_1","pretender_1","_handleRequest_1","statusHeadersAndBody","prepareHeaders","prepareBody","handleResponse","handledRequest","resolvedResult","erroredRequest","unhandledRequest","pretender_2","requiresManualResolution","_headers","_verb","_path","_request","shutdown","Factory","topLevelAttrs","afterCreate","isTrait","refs","edges","uniq","outgoing","edge","preds","buildAttrs","buildSingleValue","mapValues","newAttrs","Subclass","extractAfterCreateCallbacks","_this2","traits","afterCreateCallbacks","__isTrait__","IdentityManager","_classCallCheck","_nextId","_ids","uniqueIdentifier","camelizeCache","dasherizeCache","underscoreCache","capitalizeCache","camelized","uppercaseFirstLetter","dasherized","underscored","capitalized","capitalize$1","errorProps","MirageError","Association","ownerModelName","schema","isExplicitReflexive","isImplicitReflexive","polymorphic","getForeignKey","identifierCache$1","BelongsTo","_Association","foreignKey","ModelClass","modelPrototype","association","associationHash","belongsToAssociations","belongsToAssociationFks","addDependentAssociation","associationKeys","associationIdKeys","_tempAssociations","tempParent","isPolymorphic","toCollectionName","foreignKeyId","hasInverseFor","inverseFor","associate","new","save","reload","fk","where","potentialOwner","dependent","disassociate","duplicate","DbCollection","initialData","identityManager","_insertRecord","_findRecords","_findRecord","_findRecordBy","_findRecordsWhere","attributesForCreate","mergedAttributes","changedRecords","oldRecord","_updateRecord","_this3","currentId","Db","identityManagers","_collections","registerIdentityManagers","loadData","createCollection","cloneDeep","_IdentityManager","identityManagerFor","newCollection","recordsCopy","collections","_identityManagers","_container","Collection","filteredModels","sortedModels","_this$models","slicedModels","PolymorphicCollection","identifierCache","HasMany","hasManyAssociations","hasManyAssociationFks","tempChildren","currentIds","pathModelClassCache","BaseRouteHandler","jsonApiDoc","serializerOrRegistry","_getJsonApiDocForRequest","_getIdForRequest","relationships","relationshipName","valueForRelationship","relationship","modelClassFor","associationFor","urlEncodedPart","_urlEncodedPart$split2","FunctionRouteHandler","_BaseRouteHandler","userFunction","server","_super","serializerType","serializerFor","explicit","lowerCaseHeaders","_getAttrsForFormRequest","getModelClassFromPath","hasModelForModelName","_getAttrsForRequest","ObjectRouteHandler","BaseShorthandRouteHandler","shorthand","modelClass","handleStringShorthand","modelClasses","handleArrayShorthand","GetShorthandRouteHandler","_BaseShorthandRouteHa","camelizedModelName","coalesce","getCoalescedIds","PostShorthandRouteHandler","PutShorthandRouteHandler","DeleteShorthandRouteHandler","HeadShorthandRouteHandler","_model","DEFAULT_CODES","RouteHandler","rawHandler","customizedCode","_construct","_getMirageResponseForRequest","mirageResponse","serializedMirageResponse","toRackResponse","setRequest","handleWithMiddleware","_toConsumableArray","_toMirageResponse","_middleware","_this4","_getCodeForResponse","Child","_inherits","_createSuper","_protoProps$construct","_assertThisInitialized","Model","fks","_schema","_validateAttr","_setupAttr","_setupRelationship","toInternalCollectionName","_definePlainAttribute","isSaving","_saveAssociations","isSaved","_disassociateFromDependents","hasDbRecord","collectionName","associationsFor","associations","_explicitInverseFor","_implicitInverseFor","_checkForMultipleExplicitInverses","matchingPolymorphic","matchingInverse","modelMatches","inverseKeyMatches","candidateInverse","candidateIsImplicitInverse","candidateIsExplicitInverse","associatedModelOrCollection","alreadyAssociatedWith","existingProperty","isFk","isAssociation","_validateForeignKeyExistsInDatabase","isNull","isCollection","isArrayOfModels","isModelOrCollection","_isArrayOfModels","modelOrCollection","foreignKeyName","foreignKeys","foreignKeyLabel","_found","_association","_foreignKeyLabel","_saveBelongsToAssociations","_saveHasManyAssociations","_disassociateFromOldInverses","_saveNewAssociates","_associateWithNewInverses","_this5","_disassociateFromHasManyInverses","_disassociateFromBelongsToInverse","_this6","tempAssociation","associateIds","associateId","_updateInDb","_this7","dependentAssociationsFor","disassociateAllDependentsFromTarget","tempAssociate","__isSavingNewChildren","fkValue","_syncTempAssociations","_this8","_associateModelWithInverse","_this9","inverseFk","ownerId","_newId","inverseCollection","currentIdsForInverse","newIdsForInverse","_this10","idLabel","findBelongsToAssociation","associationType","Serializer","_embedFn","serializeIds","primaryKey","primaryResource","buildPayload","toInclude","didSerialize","_this$getHashForPrima2","getHashForPrimaryResource","resourceHash","newIncludes","newDidSerialize","nextIncludedResource","_this$getHashForInclu2","getHashForIncludedResource","_resourceHash","newToInclude","_newDidSerialize","newJson","mergePayloads","hashWithRoot","_this$getHashForResou2","getHashForResource","addToIncludes","keyForResource","_serializer$getHashFo2","newModels","rootKey","keyForRelationship","removeForeignKeys","isModel","_hashForModel","modelSerializer","uniqBy","getKeysForIncluded","resourceHashKey","keyForModel","keyForCollection","_attrsForModel","getKeysForEmbedded","associatedResource","associatedResourceHash","formattedKey","keyForEmbeddedRelationship","_maybeAddAssociationIds","_formatAttributeKeys","newHash","keyForRelationshipIds","formattedTypeKey","keyForPolymorphicForeignKeyType","formattedIdKey","keyForPolymorphicForeignKeyId","keyForForeignKey","_formattedKey2","keyForId","getAssociationKeys","formattedAttrs","formattedValue","valueForId","keyForAttribute","JSONAPISerializer","_Serializer","alwaysIncludeLinkageData","_createRequestedIncludesGraph","getAddToIncludesForResource","included","hasQueryParamIncludes","getResourceObjectForModel","relationshipPaths","getQueryParamIncludes","getAddToIncludesForResourceAndPaths","relationshipNames","getIncludesForResourceAndPath","nameForCurrentResource","modelsToAdd","typeKeyForModel","_maybeAddRelationshipsToResourceObjectForModel","relationshipKey","relationshipHash","hasLinksForRelationship","shouldIncludeLinkageData","_relationshipIsIncludedForModel","graphResource","_includesGraph","graphKey","_graphKeyForModel","primaryResourceKey","_addPrimaryModelToRequestedIncludesGraph","includesPath","relationshipKeys","graphRelationshipKey","normalizedRelationshipKey","relationshipData","_addResourceToRequestedIncludesGraph","_addModelToRequestedIncludesGraph","resourceKey","_addResourceRelationshipsToRequestedIncludesGraph","SerializerRegistry","serializerMap","_serializerMap","_isModelOrCollection","_isCollection","_ref$explicit","SerializerForResponse","_isModel","newSerializerMaps","currentSerializerMap","collectionNameCache","internalCollectionNameCache","modelNameCache","Schema","modelsMap","_registry","_dependentAssociations","registerModels","forIn","registerModel","dependentAssociations","fksAddedFromThisModel","associationProperty","toModelName","setSchema","_association$getForei2","getForeignKeyArray","fkHolder","_addForeignKeyToRegistry","addMethodsToModelClass","findOrCreateBy","_instantiateModel","collectionForType","_hydrate","directDependents","polymorphicAssociations","modelFor","internalCollectionName","_modelFor","_foreignKeysFor","defaultInflector","defaultContainer","ActiveModelSerializer","normalizeIds","belongsToKeys","hasManyKeys","jsonApiPayload","associationModel","startMirage","makeServer","otherOptions","logging","__pretenderNodePolyfill","isFastBoot","FastBoot","RouterEvent","configKeys","PageTitleService","_updateTitle","_validateExistingTitleElement","fromEnv","pageTitle","configValue","_defaultConfig","applyTokenDefaults","defaultSeparator","defaultPrepend","defaultReplace","inheritFromPrevious","tokenForId","_findTokenById","visibleTokens","sortedTokens","appending","frontGroups","toBeTitle","updateFastbootTitle","titleDidUpdate","headElement","headChildNodes","titleEl","titleContents","_title","PowerSelectMultipleComponent","computedTabIndex","defaultBuildSelection","_PowerSelectMultipleComponent","PowerSelectMultipleInputComponent","maybePlaceholder","isDefaultPlaceholder","lastSelection","_PowerSelectMultipleInputComponent","TriggerComponent","_openChanged","openChanged","chooseOption","selectedIndex","numericIndex","selectedObject","_el","_lastIsOpen","_TriggerComponent","PowerSelectBeforeOptionsComponent","_focusInput","clearSearch","focusLaterTask","_PowerSelectBeforeOptionsComponent","PowerSelectInput","_PowerSelectInput","PowerSelectLabelComponent","onLabelClick","_PowerSelectLabelComponent","ElementProto","mozMatchesSelector","PowerSelectOptionsComponent","_isTouchDevice","_didHandlerSetup","_listElement","_addHandlers","_removeHandlers","addHandlers","removeHandlers","_optionFromIndex","_hasMoved","endEvent","touchType","changedTouch","horizontalDistance","verticalDistance","findOptionAndPerform","optionItem","optionIndex","mouseUpHandler","mouseOverHandler","touchEndHandler","_PowerSelectOptionsComponent","PowerSelectGroupComponent","PowerSelectTriggerComponent","_PowerSelectTriggerComponent","emberPowerSelectIsEqual","emberPowerSelectIsEqual_default","emberPowerSelectIsGroup","maybeGroup","emberPowerSelectIsGroup_default","emberPowerSelectIsSelectedPresent","emberPowerSelectIsSelectedPresent_default","ModuleRegistry","_entries","Resolver","withModules","_Class","podBasedModuleName","podBasedComponentsInSubdir","mainModuleName","defaultModuleName","nestedColocationComponentModuleName","_moduleRegistry","addModules","makeToString","fullName","modulePrefix","shouldWrapInClassFactory","parseName","parsedName","fullNameParts","prefixParts","nameParts","fullNameWithoutType","resolveMethodName","resolveOther","normalizedModuleName","findModuleName","defaultExport","_extractDefaultExport","injections","_normalizeCache","_normalize","resolved","podBasedLookupWithPrefix","podPrefix","podModulePrefix","resolveEngine","engineModule","resolveRouteMap","engineName","engineRoutesModule","routeMap","isRouteMap","resolveTemplate","tmpPrefix","moduleNameLookupPatterns","tmpModuleName","chooseModuleName","underscoredModuleName","knownForType","moduleKeys","translateToContainerFullname","podSuffix","nonPodPrefix","TargetTracker","_targets","_portalCount","PortalService","diacriticsMap","replacementList","CallbackType","elementExists","getElement","removeElement","destroyRegistry","Notifications","addCallback","dispatchCallback","IntersectionObserverAdmin","elementRegistry","__extends","setupObserver","matchingRootEntry","findMatchingRootEntry","addEnterCallback","addExitCallback","dispatchEnterCallback","dispatchExitCallback","setupOnIntersection","ioEntries","onIntersection","matchingEntryForRoot","potentialRootMatch","findRootFromRegistry","determineMatchingElements","observerEntry","newObserver","stringifiedOptions","stringifyOptions","newIO","matchingRoot","matchingStringifiedOptions","comparableOptions","areOptionsSame","type1","classToken","dateReviver","regexMatch","Context","hasResult","lastNonEmpty","nextAfterChildren","prepareDeltaResult","omitRemovedValues","cloneDiffValues","defaultClone","filterName","resultCheck","shouldHaveResult","should","noResult","selfOptions","pipes","pipeArg","lastPipe","nextPipe","defaultMatch","matchItems","value2","objectHash","matchByPosition","hashCache1","hash1","hashCache2","hash2","diffFilter","leftIsArray","commonHead","commonTail","len1","val1","val2","DiffContext","trimmed1","trimmed2","innerContext","lengthMatrix","matrixNewRow","matrixRowX","matrixRowBeforeX","subsequence","indices1","indices2","matrixRowIndex1","valueAtMatrixAbove","matrixRowBeforeIndex1","valueAtMatrixLeft","removedItems","detectMove","includeValueOnMove","removedItemsLength","indexOnArray2","isMove","removeItemIndex1","resultItem","numerically","patchFilter","nestedDelta","toRemove","toInsert","toModify","removedOrMovedIndex","numberIndex","indexDiff","removedValue","toInsertLength","toModifyLength","modification","PatchContext","collectChildrenPatchFilter","reverseFilter","nonNestedDelta","arrayMoveDelta","arrayDelta","ReverseContext","reverseArrayDeltaIndex","itemDelta","reverseIndex","deltaIndex","deltaItem","moveFromIndex","moveToIndex","collectChildrenReverseFilter","deltaWithChildren","UNSAFE_KEYS","collectChildrenDiffFilter","objectsDiffFilter","leftType","propertyFilter","objectDelta","childrenPushed","leftValue","cachedDiffPatch","getDiffMatchPatch","diffMatchPatch","diff_match_patch_not_found","txt1","resultOk","textPatchFailed","textDiffDelta","textDeltaReverse","headerRegex","lineTmp","rightType","rightIsArray","regexArgs","diffpatcher","Pipe","trivial","unpatch","DiffPatcher","defaultInstance","prepareContext","preparedContext","typeFormattterNotFound","deltaType","typeFormattterErrorFormatter","_err","_delta","_leftValue","_leftKey","_movedFrom","leftKey","movedFrom","isLast","getDeltaType","typeFormattter","nodeBegin","rootBegin","nodeEnd","rootEnd","formatDeltaChildren","forEachDeltaKey","deltaKeys","leftArray","leftLength","maxIndex","previousFnArgs","rightLength","addKey","hasDelta","leftIndexKey","rightIndexKey","movedFromIndex","isItemAdded","includeMoveDestinations","parseTextDiff","lineOutput","pieceIndex","piecesLength","pieceOutput","HtmlFormatter","BaseFormatter","htmlEscape","formatValue","valueAsHtml","formatTextDiffString","nodeClass","hasArrows","adjustArrows","format_unchanged","format_movedestination","format_node","format_added","format_modified","format_deleted","format_moved","format_textdiff","replacements","nodeArg","eachByQuery","elems","arrowParent","moveDestinationElem","getElementText","destinationElem","eachChildren","curve","showUnchanged","showing","hiding","intervalId","hideUnchanged","macro","getPath","getPaths","setPath","objPath","resolvedObj","setFrom","asc","pedantic","renderer","silent","caret","getRegex","codeRemoveIndent","outputLinkReplace","indentCodeCompensation","beginningSpace","endingHash","startingSpaceChar","endingSpaceChar","nonSpaceChar","newLineCharGlobal","tabCharGlobal","multipleSpaceGlobal","doubleBlankLine","blockquoteStart","blockquoteSetextReplace","blockquoteSetextReplace2","listReplaceNesting","listIsTask","listReplaceTask","listTaskCheckbox","anyLine","hrefBrackets","tableDelimiter","tableAlignChars","tableRowBlankLine","tableAlignRight","tableAlignCenter","tableAlignLeft","startATag","endATag","startPreScriptTag","endPreScriptTag","startAngleBracket","endAngleBracket","pedanticHrefTitle","unicodeAlphaNumeric","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","percentDecode","findPipe","splitPipe","slashPipe","carriageReturn","spaceLine","notSpaceStart","endingNewline","listItemRegex","nextBulletRegex","hrRegex","fencesBeginRegex","headingBeginRegex","htmlBeginRegex","blockquoteBeginRegex","blockquote","fences","lheading","newline","paragraph","_backpedal","anyPunctuation","autolink","blockSkip","delLDelim","delRDelim","emStrongLDelim","emStrongRDelimAst","emStrongRDelimUnd","nolink","reflink","reflinkSearch","normal","inLink","inlineTokens","codeBlockStyle","lexer","blockTokens","ordered","rawLine","inlineQueue","inRawBlock","emStrong","codespan","inlineText","lex","lexInline","infiniteLoopError","emStrongMask","startInline","langString","parseInline","listitem","tablecell","tablerow","em","textRenderer","renderers","_Class3","preprocess","postprocess","processAllTokens","provideLexer","provideParser","parseMarkdown","childTokens","passThroughHooks","passThroughHooksRespectAsync","getDefaults","Renderer","TextRenderer","Lexer","Tokenizer","Hooks","Ft","Kt","Wt","Xt","Jt","Vt","Yt","BananaSlug","occurrences","slug","maintainCase","originalSlug","slugger","headings","unescapeTest","resetHeadings","getHeadingList","gfmHeadingId","globalSlugs","headerIds","useNewRenderer","UNDEFINED_CODE_POINTS","CODE_POINTS","EOF","NULL","TABULATION","CARRIAGE_RETURN","LINE_FEED","FORM_FEED","EXCLAMATION_MARK","QUOTATION_MARK","AMPERSAND","APOSTROPHE","HYPHEN_MINUS","SOLIDUS","DIGIT_0","DIGIT_9","LESS_THAN_SIGN","EQUALS_SIGN","GREATER_THAN_SIGN","QUESTION_MARK","LATIN_CAPITAL_A","LATIN_CAPITAL_Z","RIGHT_SQUARE_BRACKET","GRAVE_ACCENT","LATIN_SMALL_A","LATIN_SMALL_Z","SEQUENCES","isSurrogate","isControlCodePoint","isUndefinedCodePoint","ERR","TokenType","controlCharacterInInputStream","noncharacterInInputStream","surrogateInInputStream","nonVoidHtmlElementStartTagWithTrailingSolidus","endTagWithAttributes","endTagWithTrailingSolidus","unexpectedSolidusInTag","unexpectedNullCharacter","unexpectedQuestionMarkInsteadOfTagName","invalidFirstCharacterOfTagName","unexpectedEqualsSignBeforeAttributeName","missingEndTagName","unexpectedCharacterInAttributeName","unknownNamedCharacterReference","unexpectedCharacterAfterDoctypeSystemIdentifier","unexpectedCharacterInUnquotedAttributeValue","eofBeforeTagName","eofInTag","missingAttributeValue","missingWhitespaceBetweenAttributes","missingWhitespaceAfterDoctypePublicKeyword","missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers","missingWhitespaceAfterDoctypeSystemKeyword","missingQuoteBeforeDoctypePublicIdentifier","missingQuoteBeforeDoctypeSystemIdentifier","missingDoctypePublicIdentifier","missingDoctypeSystemIdentifier","abruptDoctypePublicIdentifier","abruptDoctypeSystemIdentifier","cdataInHtmlContent","incorrectlyOpenedComment","eofInScriptHtmlCommentLikeText","eofInDoctype","nestedComment","abruptClosingOfEmptyComment","eofInComment","incorrectlyClosedComment","eofInCdata","nullCharacterReference","surrogateCharacterReference","characterReferenceOutsideUnicodeRange","controlCharacterReference","noncharacterCharacterReference","missingWhitespaceBeforeDoctypeName","missingDoctypeName","invalidCharacterSequenceAfterDoctypeName","duplicateAttribute","nonConformingDoctype","missingDoctype","misplacedDoctype","endTagWithoutMatchingOpenElement","closingOfElementWithOpenChildElements","disallowedContentInNoscriptInHead","openElementsLeftAfterEof","abandonedHeadElementChild","misplacedStartTagForHeadElement","nestedNoscriptInHead","eofInElementThatCanContainOnlyText","Preprocessor","lastGapPos","gapStack","skipNextNewLine","lastChunkWritten","endOfChunkHit","bufferWaterline","isEol","lineStartPos","droppedBufferSize","lastErrOffset","getError","cpOffset","onParseError","_addGap","_processSurrogate","nextCp","willDropParsedChunk","dropParsedChunk","isLastChunk","insertHtmlAtCurrentPos","caseSensitive","_checkForProblematicCharacters","retreat","getTokenAttr","CHARACTER","NULL_CHARACTER","WHITESPACE_CHARACTER","START_TAG","END_TAG","COMMENT","DOCTYPE","HIBERNATION","NS","ATTRS","DOCUMENT_MODE","TAG_NAMES","TAG_ID","HTML","MATHML","SVG","XLINK","XML","XMLNS","ENCODING","PROMPT","COLOR","FACE","SIZE","NO_QUIRKS","QUIRKS","LIMITED_QUIRKS","ADDRESS","ANNOTATION_XML","APPLET","AREA","ARTICLE","ASIDE","BASEFONT","BGSOUND","BIG","BLOCKQUOTE","BODY","BUTTON","CAPTION","CENTER","CODE","COL","COLGROUP","DESC","DETAILS","DIALOG","DIR","DIV","DL","DT","EM","EMBED","FIELDSET","FIGCAPTION","FIGURE","FONT","FOOTER","FOREIGN_OBJECT","FORM","FRAME","FRAMESET","HEADER","HGROUP","IMG","IMAGE","INPUT","IFRAME","KEYGEN","LABEL","LINK","LISTING","MAIN","MALIGNMARK","MARQUEE","MATH","MENU","META","MGLYPH","MI","MTEXT","NAV","NOBR","NOFRAMES","NOEMBED","NOSCRIPT","OBJECT","OL","OPTGROUP","OPTION","PARAM","PLAINTEXT","PRE","RB","RP","RTC","RUBY","SCRIPT","SEARCH","SECTION","SELECT","SOURCE","SMALL","SPAN","STRIKE","STRONG","STYLE","SUB","SUMMARY","SUP","TABLE","TBODY","TEXTAREA","TFOOT","THEAD","TITLE","TRACK","UL","VAR","WBR","XMP","UNKNOWN","TAG_NAME_TO_ID","getTagID","SPECIAL_ELEMENTS","NUMBERED_HEADERS","UNESCAPED_TEXT","hasUnescapedText","tn","scriptingEnabled","DATA","RCDATA","RAWTEXT","SCRIPT_DATA","TAG_OPEN","END_TAG_OPEN","TAG_NAME","RCDATA_LESS_THAN_SIGN","RCDATA_END_TAG_OPEN","RCDATA_END_TAG_NAME","RAWTEXT_LESS_THAN_SIGN","RAWTEXT_END_TAG_OPEN","RAWTEXT_END_TAG_NAME","SCRIPT_DATA_LESS_THAN_SIGN","SCRIPT_DATA_END_TAG_OPEN","SCRIPT_DATA_END_TAG_NAME","SCRIPT_DATA_ESCAPE_START","SCRIPT_DATA_ESCAPE_START_DASH","SCRIPT_DATA_ESCAPED","SCRIPT_DATA_ESCAPED_DASH","SCRIPT_DATA_ESCAPED_DASH_DASH","SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN","SCRIPT_DATA_ESCAPED_END_TAG_OPEN","SCRIPT_DATA_ESCAPED_END_TAG_NAME","SCRIPT_DATA_DOUBLE_ESCAPE_START","SCRIPT_DATA_DOUBLE_ESCAPED","SCRIPT_DATA_DOUBLE_ESCAPED_DASH","SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH","SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN","SCRIPT_DATA_DOUBLE_ESCAPE_END","BEFORE_ATTRIBUTE_NAME","ATTRIBUTE_NAME","AFTER_ATTRIBUTE_NAME","BEFORE_ATTRIBUTE_VALUE","ATTRIBUTE_VALUE_DOUBLE_QUOTED","ATTRIBUTE_VALUE_SINGLE_QUOTED","ATTRIBUTE_VALUE_UNQUOTED","AFTER_ATTRIBUTE_VALUE_QUOTED","SELF_CLOSING_START_TAG","BOGUS_COMMENT","MARKUP_DECLARATION_OPEN","COMMENT_START","COMMENT_START_DASH","COMMENT_LESS_THAN_SIGN","COMMENT_LESS_THAN_SIGN_BANG","COMMENT_LESS_THAN_SIGN_BANG_DASH","COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH","COMMENT_END_DASH","COMMENT_END","COMMENT_END_BANG","BEFORE_DOCTYPE_NAME","AFTER_DOCTYPE_NAME","AFTER_DOCTYPE_PUBLIC_KEYWORD","BEFORE_DOCTYPE_PUBLIC_IDENTIFIER","DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED","DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED","AFTER_DOCTYPE_PUBLIC_IDENTIFIER","BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS","AFTER_DOCTYPE_SYSTEM_KEYWORD","BEFORE_DOCTYPE_SYSTEM_IDENTIFIER","DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED","DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED","AFTER_DOCTYPE_SYSTEM_IDENTIFIER","BOGUS_DOCTYPE","CDATA_SECTION","CDATA_SECTION_BRACKET","CDATA_SECTION_END","CHARACTER_REFERENCE","AMBIGUOUS_AMPERSAND","TokenizerMode","isAsciiUpper","isAsciiLetter","isAsciiAlphaNumeric","toAsciiLower","isWhitespace","isScriptDataDoubleEscapeSequenceEnd","inLoop","inForeignNode","lastStartTagName","entityStartPos","consumedAfterSnapshot","currentCharacterToken","currentAttr","preprocessor","currentLocation","getCurrentLocation","entityDecoder","_flushCodePointConsumedAsCharacterReference","sourceCodeLocationInfo","_runParsingLoop","_consume","_ensureHibernation","_callState","writeCallback","_advanceBy","_consumeSequenceIfMatch","_createStartTagToken","tagID","ackSelfClosing","_createEndTagToken","_createCommentToken","_createDoctypeToken","initialName","forceQuirks","_createCharacterToken","_createAttr","attrNameFirstCh","_leaveAttrName","_leaveAttrValue","prepareToken","_emitCurrentCharacterToken","emitCurrentTagToken","onStartTag","onEndTag","emitCurrentComment","onComment","emitCurrentDoctype","onDoctype","nextLocation","onCharacter","onNullCharacter","onWhitespaceCharacter","_emitEOFToken","onEof","_appendCharToCurrentCharacterToken","_emitCodePoint","_emitChars","_startCharacterReference","_isCharacterReferenceInAttribute","_stateData","_stateRcdata","_stateRawtext","_stateScriptData","_statePlaintext","_stateTagOpen","_stateEndTagOpen","_stateTagName","_stateRcdataLessThanSign","_stateRcdataEndTagOpen","_stateRcdataEndTagName","_stateRawtextLessThanSign","_stateRawtextEndTagOpen","_stateRawtextEndTagName","_stateScriptDataLessThanSign","_stateScriptDataEndTagOpen","_stateScriptDataEndTagName","_stateScriptDataEscapeStart","_stateScriptDataEscapeStartDash","_stateScriptDataEscaped","_stateScriptDataEscapedDash","_stateScriptDataEscapedDashDash","_stateScriptDataEscapedLessThanSign","_stateScriptDataEscapedEndTagOpen","_stateScriptDataEscapedEndTagName","_stateScriptDataDoubleEscapeStart","_stateScriptDataDoubleEscaped","_stateScriptDataDoubleEscapedDash","_stateScriptDataDoubleEscapedDashDash","_stateScriptDataDoubleEscapedLessThanSign","_stateScriptDataDoubleEscapeEnd","_stateBeforeAttributeName","_stateAttributeName","_stateAfterAttributeName","_stateBeforeAttributeValue","_stateAttributeValueDoubleQuoted","_stateAttributeValueSingleQuoted","_stateAttributeValueUnquoted","_stateAfterAttributeValueQuoted","_stateSelfClosingStartTag","_stateBogusComment","_stateMarkupDeclarationOpen","_stateCommentStart","_stateCommentStartDash","_stateComment","_stateCommentLessThanSign","_stateCommentLessThanSignBang","_stateCommentLessThanSignBangDash","_stateCommentLessThanSignBangDashDash","_stateCommentEndDash","_stateCommentEnd","_stateCommentEndBang","_stateDoctype","_stateBeforeDoctypeName","_stateDoctypeName","_stateAfterDoctypeName","_stateAfterDoctypePublicKeyword","_stateBeforeDoctypePublicIdentifier","_stateDoctypePublicIdentifierDoubleQuoted","_stateDoctypePublicIdentifierSingleQuoted","_stateAfterDoctypePublicIdentifier","_stateBetweenDoctypePublicAndSystemIdentifiers","_stateAfterDoctypeSystemKeyword","_stateBeforeDoctypeSystemIdentifier","_stateDoctypeSystemIdentifierDoubleQuoted","_stateDoctypeSystemIdentifierSingleQuoted","_stateAfterDoctypeSystemIdentifier","_stateBogusDoctype","_stateCdataSection","_stateCdataSectionBracket","_stateCdataSectionEnd","_stateCharacterReference","_stateAmbiguousAmpersand","REPLACEMENT_CHARACTER","handleSpecialEndTag","_cp","IMPLICIT_END_TAG_REQUIRED","IMPLICIT_END_TAG_REQUIRED_THOROUGHLY","SCOPING_ELEMENTS_HTML","SCOPING_ELEMENTS_HTML_LIST","SCOPING_ELEMENTS_HTML_BUTTON","SCOPING_ELEMENTS_MATHML","SCOPING_ELEMENTS_SVG","TABLE_ROW_CONTEXT","TABLE_BODY_CONTEXT","TABLE_CONTEXT","TABLE_CELLS","OpenElementStack","currentTmplContentOrNode","_isInTemplate","treeAdapter","getTemplateContent","tagIDs","tmplCount","currentTagId","_indexOf","getNamespaceURI","_updateCurrentElement","onItemPush","popped","onItemPop","oldElement","newElement","referenceElement","newElementID","insertionIdx","popUntilTagNamePopped","targetIdx","shortenToLength","popUntilElementPopped","popUntilPopped","tagNames","targetNS","_indexOfTagNames","popUntilNumberedHeaderPopped","popUntilTableCellPopped","popAllUpToHtmlElement","clearBackTo","clearBackToTableContext","clearBackToTableBodyContext","clearBackToTableRowContext","tryPeekProperlyNestedBodyElement","getCommonAncestor","elementIdx","isRootHtmlElementCurrent","hasInDynamicScope","htmlScope","hasInScope","hasInListItemScope","hasInButtonScope","hasNumberedHeaderInScope","hasInTableScope","hasTableBodyContextInTableScope","hasInSelectScope","generateImpliedEndTags","generateImpliedEndTagsThoroughly","generateImpliedEndTagsWithExclusion","exclusionId","EntryType","Marker","MARKER","FormattingElementList","_getNoahArkConditionCandidates","neAttrs","neAttrsLength","neTagName","getTagName","neNamespaceURI","elementAttrs","getAttrList","_ensureNoahArkCondition","neAttrsMap","neAttr","validCandidates","cAttr","insertMarker","pushElement","insertElementAfterBookmark","bookmarkIdx","removeEntry","entryIndex","clearToLastMarker","markerIdx","getElementEntryInScopeWithTagName","getElementEntry","defaultTreeAdapter","createCommentNode","referenceNode","setTemplateContent","templateElement","contentElement","setDocumentType","doctypeNode","setDocumentMode","getDocumentMode","detachNode","insertText","prevNode","isTextNode","insertTextBefore","adoptAttributes","recipient","recipientAttrsMap","getFirstChild","getTextNodeContent","getCommentNodeContent","commentNode","getDocumentTypeNodeName","getDocumentTypeNodePublicId","getDocumentTypeNodeSystemId","isCommentNode","isDocumentTypeNode","isElementNode","setNodeSourceCodeLocation","sourceCodeLocation","getNodeSourceCodeLocation","updateNodeSourceCodeLocation","endLocation","VALID_DOCTYPE_NAME","QUIRKS_MODE_PUBLIC_ID_PREFIXES","QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES","QUIRKS_MODE_PUBLIC_IDS","LIMITED_QUIRKS_PUBLIC_ID_PREFIXES","LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES","hasPrefix","prefixes","MIME_TYPES","TEXT_HTML","APPLICATION_XML","DEFINITION_URL_ATTR","ADJUSTED_DEFINITION_URL_ATTR","SVG_ATTRS_ADJUSTMENT_MAP","XML_ATTRS_ADJUSTMENT_MAP","SVG_TAG_NAMES_ADJUSTMENT_MAP","EXITS_FOREIGN_CONTENT","causesExit","startTagToken","adjustTokenMathMLAttrs","adjustTokenSVGAttrs","adjustedAttrName","adjustTokenXMLAttrs","adjustedAttrEntry","adjustTokenSVGTagName","adjustedTagName","isIntegrationPoint","foreignNS","InsertionMode","INITIAL","BEFORE_HTML","BEFORE_HEAD","IN_HEAD","IN_HEAD_NO_SCRIPT","AFTER_HEAD","IN_BODY","TEXT","IN_TABLE","IN_TABLE_TEXT","IN_CAPTION","IN_COLUMN_GROUP","IN_TABLE_BODY","IN_ROW","IN_CELL","IN_SELECT","IN_SELECT_IN_TABLE","IN_TEMPLATE","AFTER_BODY","IN_FRAMESET","AFTER_FRAMESET","AFTER_AFTER_BODY","AFTER_AFTER_FRAMESET","BASE_LOC","TABLE_STRUCTURE_TAGS","defaultParserOptions","fragmentContext","scriptHandler","stopped","insertionMode","originalInsertionMode","currentNotInHTML","tmplInsertionModeStack","pendingCharacterTokens","hasNonWhitespacePendingCharacterToken","framesetOk","fosterParentingEnabled","activeFormattingElements","fragmentContextID","_setContextModes","openElements","getFragmentParser","documentMock","_initTokenizerForFragmentParsing","_insertFakeRootElement","_resetInsertionMode","_findFormInFragmentContext","getFragment","_adoptNodes","beforeToken","tid","_setEndLocation","isHTML","_isIntegrationPoint","_switchToTextParsing","nextTokenizerState","_insertElement","switchToPlaintextParsing","_getAdjustedCurrentElement","_setDocumentType","docTypeNode","_attachElementToTree","startTag","_shouldFosterParentOnInsertion","_fosterParentElement","_appendElement","_insertFakeElement","_insertTemplate","_appendCommentNode","_insertCharacters","beforeElement","_findFosterParentingLocation","siblings","textNodeIdx","donor","closingToken","ctLoc","endLoc","endTag","shouldProcessStartTagTokenInForeignContent","_processToken","_processStartTag","foreignContent","_reconstructActiveFormattingElements","listLength","_closeTableCell","_closePElement","_resetInsertionModeForSelect","selectIdx","_isElementCausesFosterParenting","openElement","_isSpecialElement","tokenInInitialMode","tokenBeforeHtml","tokenBeforeHead","tokenInHead","tokenInHeadNoScript","tokenAfterHead","characterInBody","characterInTable","characterInTableText","tokenInColumnGroup","tokenAfterBody","tokenAfterAfterBody","appendComment","tokenInTableText","popUntilHtmlOrIntegrationPoint","_startTagOutsideForeignContent","currentNs","startTagInBody","startTagInHead","startTagInTable","TABLE_VOID_ELEMENTS","startTagInColumnGroup","startTagInTableBody","startTagInRow","startTagInSelect","_endTagOutsideForeignContent","templateEndTagInHead","endTagInBody","endTagInTable","endTagInTableBody","endTagInRow","endTagInSelect","endTagAfterBody","eofInBody","eofInTemplate","stopParsing","whitespaceCharacterInBody","whitespaceCharacterInTableText","aaObtainFormattingElementEntry","formattingElementEntry","genericEndTagInBody","aaObtainFurthestBlock","furthestBlock","aaInnerLoop","formattingElement","lastElement","nextElement","elementEntry","counterOverflow","aaRecreateElementFromEntry","aaInsertLastNodeInCommonAncestor","commonAncestor","aaReplaceFormattingElement","callAdoptionAgency","htmlElement","htmlLocation","bodyElement","bodyLocation","errCode","modeInBody","areaStartTagInBody","isHiddenInput","rawTextStartTagInBody","genericStartTagInBody","activeElementEntry","elementId","inTemplate","tokenInTable","savedFosterParentingState","getEscaper","escapeAttribute","escapeText","VOID_ELEMENTS","isVoidElement","defaultOpts","serializeChildNodes","serializeOuter","serializeNode","parentTn","parseFragment","resolvedEntries","settledEntries","canPromise","QRCode","CanvasRenderer","SvgRenderer","renderCanvas","renderFunc","argsNum","isLastArgCb","renderToDataURL","AlignmentPattern","FinderPattern","MaskPattern","Version","FormatInfo","Segments","setupFormatInfo","getEncodedBits","createSymbol","estimatedVersion","rawSegments","rawSplit","getBestVersionForData","bestVersion","dataBits","remainingByte","totalCodewords","dataTotalCodewords","ecTotalBlocks","getBlocksCount","blocksInGroup1","totalCodewordsInGroup1","dataCodewordsInGroup1","dataCodewordsInGroup2","ecCount","rs","dcData","ecData","maxDataSize","dataSize","moduleCount","getPositions","bitIndex","byteIndex","getBestMask","toSJISFunc","setToSJISFunction","EXP_TABLE","LOG_TABLE","G15_BCH","getColorAttrib","svgCmd","qrcodesize","moveBy","newRow","svgTag","requestId","RAFAdmin","pool","ReCaptchaLoader_1","xmlDecodeTree","QuoteType","NewLine","Tab","FormFeed","CarriageReturn","isEndOfTagSection","Slash","Gt","ExclamationMark","Amp","SingleQuote","DoubleQuote","Dash","Nine","Semi","Eq","Questionmark","UpperA","LowerA","UpperF","LowerF","UpperZ","LowerZ","LowerX","OpeningSquareBracket","BeforeTagName","InTagName","InSelfClosingTag","BeforeClosingTagName","InClosingTagName","AfterClosingTagName","BeforeAttributeName","InAttributeName","AfterAttributeName","BeforeAttributeValue","InAttributeValueDq","InAttributeValueSq","InAttributeValueNq","BeforeDeclaration","InDeclaration","InProcessingInstruction","BeforeComment","CDATASequence","DeclarationSequence","InSpecialComment","InCommentLike","SpecialStartSequence","InSpecialTag","InPlainText","InEntity","NoValue","Unquoted","Single","Double","Sequences","Empty","Cdata","CdataEnd","CommentEnd","Doctype","IframeEnd","NoembedEnd","NoframesEnd","Plaintext","ScriptEnd","StyleEnd","TitleEnd","TextareaEnd","XmpEnd","specialStartSequences","xmlMode","recognizeSelfClosing","cbs","sectionStart","baseState","currentSequence","sequenceIndex","stateText","fastForwardTo","enterTagBody","stateSpecialStartSequence","stateInTagName","stateCDATASequence","stateInDeclaration","stateInSpecialComment","emitComment","oncomment","stateInCommentLike","oncdata","isTagStartChar","stateInSpecialTag","endOfText","actualIndex","stateInClosingTagName","stateBeforeTagName","isInForeignContext","onopentagname","stateBeforeAttributeName","stateBeforeClosingTagName","stateAfterClosingTagName","onopentagend","stateInSelfClosingTag","onselfclosingtag","stateInAttributeName","onattribname","stateAfterAttributeName","onattribend","stateBeforeAttributeValue","stateInAttributeValueNoQuotes","handleInAttributeValue","onattribdata","stateInAttributeValueDoubleQuotes","stateInAttributeValueSingleQuotes","stateBeforeDeclaration","stateDeclarationSequence","ondeclaration","stateInProcessingInstruction","onprocessinginstruction","stateBeforeComment","entityStart","stateInEntity","indexInBuffer","shouldContinue","handleTrailingData","onend","handleTrailingCommentLikeData","cdataStart","handleTrailingMarkupDeclaration","onattribentity","ontextentity","formTags","pTag","headingTags","tableSectionTags","ddtTags","rtpTags","openImpliesClose","voidElements","foreignContextElements","htmlIntegrationElements","svgTagNameAdjustments","ForeignContext","MathML","reNameEnd","Parser_defineProperty","htmlMode","lowerCaseTagNames","lowerCaseTags","lowerCaseAttributeNames","foreignContext","onparserinit","getSlice","readTagName","adjusted","emitOpenTag","openTagStart","tagname","impliesClose","popElement","endOpenTag","closeCurrentTag","implied","isOpenImplied","attribname","attribvalue","onattribute","hasOwn","getInstructionName","DOCUMENT_TYPE","oncommentend","recognizeCDATA","oncdatastart","oncdataend","onreset","bufferOffset","writeIndex","ended","parseComplete","shiftBuffer","prot","internalRe","simplifyRange","nil","dist_validate","REGEX","dist_parse","byteToHex","unsafeStringify","dist_stringify","rnds8","v1Bytes","rnds","tl","tmh","dist_v1","isV6","_v6","optionsKeys","v1ToV6","v6Bytes","getOutputLength","inputLength8","safeAdd","md5cmn","md5ff","md5gg","md5hh","md5ii","dist_md5","xpad","v35","valueBytes","namespaceBytes","md5","dist_v3","dist_native","dist_v4","native","ROTL","dist_sha1","newBytes","sha1","dist_v5","dist_v6","v6ToV1","v7Bytes","dist_v7","dist_version","rem","EnqueuedReducer","excludeStaticParent","overflowRegex","calculateInPlacePosition","_destination","dropdownRect","triggerRect","viewportRight","triggerWidth","dropdownWidth","calculateWormholedPosition","triggerLeft","triggerTop","triggerHeight","dropdownHeight","viewportWidth","anchorElement","anchorPosition","isBodyPositionRelative","triggerLeftWithScroll","leftVisible","rightVisible","triggerTopWithScroll","enoughRoomBelow","enoughRoomAbove","Task$1","currentTaskInstanceSymbol","_encapsulatedTaskStates","_encapsulatedTaskInstanceProxies","_getEncapsulatedTaskClass","encapsulatedTaskImplClass","_encapsulatedTaskImplClass","unknownProperty","taskInstanceProxy","encapsulatedTaskImpl","_wrappedEncapsulatedTaskInstance","proxy","crelt"],"sources":["webpack://__ember_auto_import__/node_modules/.pnpm/@glimmer+component@2.1.1/node_modules/@glimmer/component/dist/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/moment.js","webpack://__ember_auto_import__/src/runtime.ts","webpack://__ember_auto_import__/src/-private/class-based/modifier-manager.ts","webpack://__ember_auto_import__/src/-private/class-based/modifier.ts","webpack://__ember_auto_import__/src/-private/function-based/modifier.ts","webpack://__ember_auto_import__/src/-private/function-based/modifier-manager.ts","webpack://__ember_auto_import__/node_modules/.pnpm/@hashicorp+flight-icons@5.2.0/node_modules/@hashicorp/flight-icons/svg/index.js","webpack://__ember_auto_import__/src/components/hds/icon/index.gts","webpack://__ember_auto_import__/src/components/hds/text/body.gts","webpack://__ember_auto_import__/src/helpers/hds-t.ts","webpack://__ember_auto_import__/src/utils-hoist/logger.ts","webpack://__ember_auto_import__/src/utils-hoist/object.ts","webpack://__ember_auto_import__/src/currentScopes.ts","webpack://__ember_auto_import__/src/utils/as-array.ts","webpack://__ember_auto_import__/src/debug-build.ts","webpack://__ember_auto_import__/src/utils-hoist/worldwide.ts","webpack://__ember_auto_import__/src/utils-hoist/is.ts","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/classes/semver.js","webpack://__ember_auto_import__/src/components/hds/button/index.gts","webpack://__ember_auto_import__/src/utils/spanUtils.ts","webpack://__ember_auto_import__/src/helpers.ts","webpack://__ember_auto_import__/src/types.ts","webpack://__ember_auto_import__/src/modifiers/did-insert.ts","webpack://__ember_auto_import__/src/components/hds/yield/index.gts","webpack://__ember_auto_import__/src/components/hds/interactive/index.gts","webpack://__ember_auto_import__/src/utils/hds-link-to-external.ts","webpack://__ember_auto_import__/src/integration.ts","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isArray.js","webpack://__ember_auto_import__/src/components/hds/form/field/index.gts","webpack://__ember_auto_import__/src/utils-hoist/time.ts","webpack://__ember_auto_import__/src/utils-hoist/misc.ts","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/compare.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/classes/range.js","webpack://__ember_auto_import__/src/cache.ts","webpack://__ember_auto_import__/src/index.ts","webpack://__ember_auto_import__/src/carrier.ts","webpack://__ember_auto_import__/src/semanticAttributes.ts","webpack://__ember_auto_import__/src/utils-hoist/envelope.ts","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_root.js","webpack://__ember_auto_import__/src/components/hds/form/text-input/base.gts","webpack://__ember_auto_import__/src/utils-hoist/string.ts","webpack://__ember_auto_import__/src/tracing/dynamicSamplingContext.ts","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isObject.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isArrayLike.js","webpack://__ember_auto_import__/src/-private/new/array.ts","webpack://__ember_auto_import__/src/-private/new/map.ts","webpack://__ember_auto_import__/src/-private/new/set.ts","webpack://__ember_auto_import__/src/-private/old/object.ts","webpack://__ember_auto_import__/src/-private/tracked-storage.ts","webpack://__ember_auto_import__/src/-private/map.ts","webpack://__ember_auto_import__/src/-private/set.ts","webpack://__ember_auto_import__/src/-private/array.ts","webpack://__ember_auto_import__/src/-private/object.ts","webpack://__ember_auto_import__/src/-private/decorator.ts","webpack://__ember_auto_import__/src/utils/hds-get-element-id.ts","webpack://__ember_auto_import__/src/index.js","webpack://__ember_auto_import__/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/ember-focus-trap@1.1.1_ember-source@6.12.0_@glimmer+component@2.1.1_rsvp@4.8.5_/node_modules/ember-focus-trap/dist/modifiers/focus-trap.js","webpack://__ember_auto_import__/src/utils-hoist/propagationContext.ts","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isObjectLike.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/keys.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/container.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mode.js","webpack://__ember_auto_import__/src/components/hds/form/checkbox/base.gts","webpack://__ember_auto_import__/src/components/hds/text/display.gts","webpack://__ember_auto_import__/src/utils-hoist/stacktrace.ts","webpack://__ember_auto_import__/src/utils-hoist/dsn.ts","webpack://__ember_auto_import__/src/metrics/web-vitals/lib/observe.ts","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_getNative.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/parse.js","webpack://__ember_auto_import__/src/components/hds/advanced-table/th-resize-handle.gts","webpack://__ember_auto_import__/src/components/hds/advanced-table/th-reorder-drop-target.gts","webpack://__ember_auto_import__/src/components/hds/advanced-table/th.gts","webpack://__ember_auto_import__/src/components/hds/advanced-table/th-selectable.gts","webpack://__ember_auto_import__/src/components/hds/advanced-table/tr.gts","webpack://__ember_auto_import__/src/components/hds/advanced-table/index.gts","webpack://__ember_auto_import__/src/components/hds/stepper/types.ts","webpack://__ember_auto_import__/src/components/hds/badge/index.gts","webpack://__ember_auto_import__/src/components/hds/dropdown/index.gts","webpack://__ember_auto_import__/src/components/hds/layout/flex/index.gts","webpack://__ember_auto_import__/src/components/hds/advanced-table/utils.ts","webpack://__ember_auto_import__/src/components/hds/table/types.ts","webpack://__ember_auto_import__/src/utils-hoist/debug-build.ts","webpack://__ember_auto_import__/src/tracing/spanstatus.ts","webpack://__ember_auto_import__/src/utils/hasSpansEnabled.ts","webpack://__ember_auto_import__/src/utils-hoist/normalize.ts","webpack://__ember_auto_import__/src/utils-hoist/syncpromise.ts","webpack://__ember_auto_import__/src/metrics/web-vitals/lib/bindReporter.ts","webpack://__ember_auto_import__/src/metrics/web-vitals/lib/initMetric.ts","webpack://__ember_auto_import__/src/metrics/web-vitals/lib/onHidden.ts","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseGetTag.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_Symbol.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_toKey.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js","webpack://__ember_auto_import__/src/components/hds/advanced-table/types.ts","webpack://__ember_auto_import__/src/components/hds/form/helper-text/index.gts","webpack://__ember_auto_import__/src/components/hds/form/label/index.gts","webpack://__ember_auto_import__/src/components/hds/form/error/index.gts","webpack://__ember_auto_import__/src/components/hds/form/select/base.gts","webpack://__ember_auto_import__/src/components/hds/form/radio/base.gts","webpack://__ember_auto_import__/src/components/hds/app-side-nav/list/item.gts","webpack://__ember_auto_import__/src/components/hds/form/header/title.gts","webpack://__ember_auto_import__/src/components/hds/form/header/description.gts","webpack://__ember_auto_import__/src/components/hds/form/fieldset/index.gts","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/re.js","webpack://__ember_auto_import__/src/modifiers/did-update.ts","webpack://__ember_auto_import__/src/modifiers/will-destroy.ts","webpack://__ember_auto_import__/src/-private/async-arrow-runtime.js","webpack://__ember_auto_import__/src/-private/utils.js","webpack://__ember_auto_import__/src/-private/external/task-decorators.js","webpack://__ember_auto_import__/src/-private/task-decorators.js","webpack://__ember_auto_import__/src/-private/task-public-api.js","webpack://__ember_auto_import__/src/-private/cancelable-promise-helpers.js","webpack://__ember_auto_import__/src/-private/wait-for.js","webpack://__ember_auto_import__/src/utils-hoist/instrument/handlers.ts","webpack://__ember_auto_import__/src/asyncContext/index.ts","webpack://__ember_auto_import__/src/scope.ts","webpack://__ember_auto_import__/src/utils/spanOnScope.ts","webpack://__ember_auto_import__/src/tracing/utils.ts","webpack://__ember_auto_import__/src/utils/parseSampleRate.ts","webpack://__ember_auto_import__/src/utils-hoist/baggage.ts","webpack://__ember_auto_import__/src/metrics/web-vitals/lib/getActivationStart.ts","webpack://__ember_auto_import__/src/metrics/web-vitals/lib/whenActivated.ts","webpack://__ember_auto_import__/src/utils/featureFlags.ts","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_isPrototype.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseIteratee.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_getTag.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_castPath.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_copyObject.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/root.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/satisfies.js","webpack://__ember_auto_import__/src/components/hds/text/types.ts","webpack://__ember_auto_import__/src/-private/external/scheduler/policies/execution-states.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isBuffer.js","webpack://__ember_auto_import__/src/-private/resources/find-all.ts","webpack://__ember_auto_import__/src/-private/resources/errors.ts","webpack://__ember_auto_import__/src/-private/resources/find-record.ts","webpack://__ember_auto_import__/src/-private/resources/query.ts","webpack://__ember_auto_import__/src/-private/resources/query-record.ts","webpack://__ember_auto_import__/src/components/hds/text/index.gts","webpack://__ember_auto_import__/src/components/hds/filter-bar/filter-group/numerical.gts","webpack://__ember_auto_import__/src/components/hds/filter-bar/filter-group/generic.gts","webpack://__ember_auto_import__/src/components/hds/form/character-count/index.gts","webpack://__ember_auto_import__/src/components/hds/filter-bar/filter-group/date.gts","webpack://__ember_auto_import__/src/components/hds/popover-primitive/index.gts","webpack://__ember_auto_import__/src/components/hds/badge-count/index.gts","webpack://__ember_auto_import__/src/components/hds/advanced-table/th-button-sort.gts","webpack://__ember_auto_import__/src/components/hds/app-footer/link.gts","webpack://__ember_auto_import__/src/components/hds/app-footer/item.gts","webpack://__ember_auto_import__/src/components/hds/copy/button/index.gts","webpack://__ember_auto_import__/src/components/hds/form/section/multi-field-group/item.gts","webpack://__ember_auto_import__/src/components/hds/form/textarea/base.gts","webpack://__ember_auto_import__/src/components/hds/form/super-select/multiple/base.gts","webpack://__ember_auto_import__/src/components/hds/form/super-select/single/base.gts","webpack://__ember_auto_import__/src/utils/is-equal.ts","webpack://__ember_auto_import__/node_modules/.pnpm/@floating-ui+utils@0.2.12/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","webpack://__ember_auto_import__/node_modules/.pnpm/@floating-ui+core@1.8.0/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","webpack://__ember_auto_import__/node_modules/.pnpm/@floating-ui+utils@0.2.12/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","webpack://__ember_auto_import__/node_modules/.pnpm/@floating-ui+dom@1.8.0/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","webpack://__ember_auto_import__/src/modifiers/hds-anchored-position.ts","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/math.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/userAgent.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/enums.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/createPopper.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/getVariation.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/within.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/modifiers/hide.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/popper.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/debounce.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/modifiers/offset.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/modifiers/flip.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack://__ember_auto_import__/node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack://__ember_auto_import__/src/constants.ts","webpack://__ember_auto_import__/src/utils.ts","webpack://__ember_auto_import__/src/dom-utils.ts","webpack://__ember_auto_import__/src/bindGlobalEventListeners.ts","webpack://__ember_auto_import__/src/browser.ts","webpack://__ember_auto_import__/src/props.ts","webpack://__ember_auto_import__/src/template.ts","webpack://__ember_auto_import__/src/createTippy.ts","webpack://__ember_auto_import__/src/addons/createSingleton.ts","webpack://__ember_auto_import__/src/plugins/followCursor.ts","webpack://__ember_auto_import__/build/base.js","webpack://__ember_auto_import__/src/modifiers/hds-tooltip.ts","webpack://__ember_auto_import__/src/session.ts","webpack://__ember_auto_import__/src/utils-hoist/tracing.ts","webpack://__ember_auto_import__/src/tracing/sentryNonRecordingSpan.ts","webpack://__ember_auto_import__/src/tracing/trace.ts","webpack://__ember_auto_import__/src/exports.ts","webpack://__ember_auto_import__/src/utils-hoist/error.ts","webpack://__ember_auto_import__/src/eventbuilder.ts","webpack://__ember_auto_import__/src/metrics/instrument.ts","webpack://__ember_auto_import__/src/metrics/web-vitals/lib/getNavigationEntry.ts","webpack://__ember_auto_import__/src/metrics/web-vitals/lib/runOnce.ts","webpack://__ember_auto_import__/src/metrics/web-vitals/lib/getVisibilityWatcher.ts","webpack://__ember_auto_import__/src/metrics/utils.ts","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isArguments.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_isIndex.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_ListCache.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_assocIndexOf.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/eq.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_nativeCreate.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_getMapData.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseGet.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isSymbol.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/identity.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_assignValue.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/keysIn.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/comment.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/node.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/stringify.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/declaration.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/input.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/constants.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/debug.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/gt.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/classes/comparator.js","webpack://__ember_auto_import__/src/-private/external/task-instance/cancelation.js","webpack://__ember_auto_import__/node_modules/.pnpm/@embroider+macros@1.21.1_@babel+core@7.29.7_@glint+template@1.9.0/node_modules/@embroider/macros/src/addon/es-compat2.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_nodeUtil.js","webpack://__ember_auto_import__/src/components/hds/pagination/types.ts","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-level.js","webpack://__ember_auto_import__/src/components/hds/button-set/index.gts","webpack://__ember_auto_import__/src/components/hds/alert/index.gts","webpack://__ember_auto_import__/src/components/hds/disclosure-primitive/index.gts","webpack://__ember_auto_import__/src/components/hds/filter-bar/index.gts","webpack://__ember_auto_import__/src/components/hds/form/select/field.gts","webpack://__ember_auto_import__/src/components/hds/form/indicator/index.gts","webpack://__ember_auto_import__/src/components/hds/filter-bar/tabs/tab.gts","webpack://__ember_auto_import__/src/components/hds/filter-bar/tabs/panel.gts","webpack://__ember_auto_import__/src/components/hds/separator/index.gts","webpack://__ember_auto_import__/src/components/hds/tooltip-button/index.gts","webpack://__ember_auto_import__/src/components/hds/application-state/index.gts","webpack://__ember_auto_import__/src/components/hds/link/standalone.gts","webpack://__ember_auto_import__/src/components/hds/composite/index.gts","webpack://__ember_auto_import__/src/components/hds/advanced-table/th-button-expand.gts","webpack://__ember_auto_import__/src/components/hds/advanced-table/th-button-tooltip.gts","webpack://__ember_auto_import__/src/components/hds/advanced-table/td.gts","webpack://__ember_auto_import__/src/components/hds/dismiss-button/index.gts","webpack://__ember_auto_import__/src/components/hds/dialog-primitive/body.gts","webpack://__ember_auto_import__/src/components/hds/dialog-primitive/footer.gts","webpack://__ember_auto_import__/src/components/hds/dialog-primitive/header.gts","webpack://__ember_auto_import__/src/components/hds/dialog-primitive/overlay.gts","webpack://__ember_auto_import__/src/components/hds/dialog-primitive/wrapper.gts","webpack://__ember_auto_import__/src/components/hds/form/section/header.gts","webpack://__ember_auto_import__/src/components/hds/form/section/multi-field-group/index.gts","webpack://__ember_auto_import__/src/components/hds/form/legend/index.gts","webpack://__ember_auto_import__/src/components/hds/form/visibility-toggle/index.gts","webpack://__ember_auto_import__/src/components/hds/form/file-input/base.gts","webpack://__ember_auto_import__/src/components/hds/form/masked-input/base.gts","webpack://__ember_auto_import__/src/components/hds/form/super-select/after-options.gts","webpack://__ember_auto_import__/src/components/hds/form/super-select/option-group.gts","webpack://__ember_auto_import__/src/components/hds/pagination/nav/arrow.gts","webpack://__ember_auto_import__/src/components/hds/pagination/size-selector/index.gts","webpack://__ember_auto_import__/src/components/hds/stepper/step/indicator.gts","webpack://__ember_auto_import__/src/components/hds/table/th-button-sort.gts","webpack://__ember_auto_import__/src/components/hds/table/th.gts","webpack://__ember_auto_import__/src/components/hds/table/th-button-tooltip.gts","webpack://__ember_auto_import__/node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/lib/utils.js","webpack://__ember_auto_import__/src/components/hds/accordion/types.ts","webpack://__ember_auto_import__/src/utils/hds-aria-described-by.ts","webpack://__ember_auto_import__/src/components/hds/advanced-table/column-manager/width.gts","webpack://__ember_auto_import__/src/modifiers/hds-scroll-into-view-on-focus.ts","webpack://__ember_auto_import__/src/modifiers/hds-advanced-table-cell.ts","webpack://__ember_auto_import__/src/helpers/hds-format-date.ts","webpack://__ember_auto_import__/src/utils-hoist/version.ts","webpack://__ember_auto_import__/src/utils/merge.ts","webpack://__ember_auto_import__/src/tracing/logSpans.ts","webpack://__ember_auto_import__/src/envelope.ts","webpack://__ember_auto_import__/src/utils/prepareEvent.ts","webpack://__ember_auto_import__/src/api.ts","webpack://__ember_auto_import__/src/utils-hoist/eventbuilder.ts","webpack://__ember_auto_import__/src/utils-hoist/ratelimit.ts","webpack://__ember_auto_import__/src/utils/traceData.ts","webpack://__ember_auto_import__/src/transports/fetch.ts","webpack://__ember_auto_import__/src/constants/index.ts","webpack://__ember_auto_import__/src/core/sendFeedback.ts","webpack://__ember_auto_import__/src/util/debug-build.ts","webpack://__ember_auto_import__/src/util/mergeOptions.ts","webpack://__ember_auto_import__/src/util/setAttributesNS.ts","webpack://__ember_auto_import__/src/core/createMainStyles.ts","webpack://__ember_auto_import__/node_modules/preact/dist/preact.mjs","webpack://__ember_auto_import__/node_modules/preact/hooks/dist/hooks.mjs","webpack://__ember_auto_import__/src/modal/components/SentryLogo.ts","webpack://__ember_auto_import__/src/modal/components/DialogHeader.tsx","webpack://__ember_auto_import__/src/modal/components/Form.tsx","webpack://__ember_auto_import__/src/util/validate.ts","webpack://__ember_auto_import__/src/modal/components/SuccessIcon.ts","webpack://__ember_auto_import__/src/modal/components/Dialog.tsx","webpack://__ember_auto_import__/src/screenshot/components/Crop.tsx","webpack://__ember_auto_import__/src/screenshot/components/ScreenshotInput.css.ts","webpack://__ember_auto_import__/src/screenshot/components/ScreenshotEditor.tsx","webpack://__ember_auto_import__/src/screenshot/components/useTakeScreenshot.tsx","webpack://__ember_auto_import__/src/screenshot/components/Toolbar.tsx","webpack://__ember_auto_import__/src/screenshot/components/PenIcon.tsx","webpack://__ember_auto_import__/src/screenshot/components/CropIcon.tsx","webpack://__ember_auto_import__/src/screenshot/components/Annotations.tsx","webpack://__ember_auto_import__/src/screenshot/components/CropCorner.tsx","webpack://__ember_auto_import__/src/core/integration.ts","webpack://__ember_auto_import__/src/util/isScreenshotSupported.ts","webpack://__ember_auto_import__/src/core/components/Actor.ts","webpack://__ember_auto_import__/src/core/components/FeedbackIcon.ts","webpack://__ember_auto_import__/src/core/components/Actor.css.ts","webpack://__ember_auto_import__/src/modal/integration.tsx","webpack://__ember_auto_import__/src/modal/components/Dialog.css.ts","webpack://__ember_auto_import__/src/screenshot/integration.ts","webpack://__ember_auto_import__/src/core/getFeedback.ts","webpack://__ember_auto_import__/src/core/utils.ts","webpack://__ember_auto_import__/src/core/class-based/resource.ts","webpack://__ember_auto_import__/node_modules/.pnpm/@babel+runtime@7.23.2/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://__ember_auto_import__/src/core/class-based/manager.ts","webpack://__ember_auto_import__/node_modules/.pnpm/@babel+runtime@7.23.2/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://__ember_auto_import__/node_modules/.pnpm/@babel+runtime@7.23.2/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://__ember_auto_import__/node_modules/.pnpm/@babel+runtime@7.23.2/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://__ember_auto_import__/src/-private/resources/request.ts","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_getPrototype.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isFunction.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseAssignValue.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isTypedArray.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isLength.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseUnary.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_Stack.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_Map.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_MapCache.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseIsEqual.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_setToArray.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_arrayPush.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_getSymbols.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_isKey.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_arrayMap.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_cloneArrayBuffer.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_apply.js","webpack://__ember_auto_import__/node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/lib/constants.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/at-rule.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/css-syntax-error.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/symbols.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/document.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/rule.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/parse.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/result.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/parse-options.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/compare-build.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/lt.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/gte.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/lte.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/outside.js","webpack://__ember_auto_import__/node_modules/.pnpm/w3c-keyname@2.2.8/node_modules/w3c-keyname/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/@codemirror+view@6.43.8/node_modules/@codemirror/view/dist/index.js","webpack://__ember_auto_import__/src/modifiers/hds-advanced-table-cell/dom-management.ts","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/namespace.js","webpack://__ember_auto_import__/src/-private/get-value-array-and-use-deep-equal-from-params.ts","webpack://__ember_auto_import__/src/-private/external/scheduler/policies/bounded-policy.js","webpack://__ember_auto_import__/src/-private/external/yieldables.js","webpack://__ember_auto_import__/node_modules/.pnpm/recaptcha-v3@1.11.3/node_modules/recaptcha-v3/dist/ReCaptchaInstance.js","webpack://__ember_auto_import__/src/components/hds/form/super-select/types.ts","webpack://__ember_auto_import__/src/components/hds/accordion/item/index.gts","webpack://__ember_auto_import__/src/helpers/next.ts","webpack://__ember_auto_import__/src/helpers/previous.ts","webpack://__ember_auto_import__/src/helpers/pipe.ts","webpack://__ember_auto_import__/src/helpers/toggle.ts","webpack://__ember_auto_import__/src/components/hds/filter-bar/types.ts","webpack://__ember_auto_import__/src/components/hds/badge/types.ts","webpack://__ember_auto_import__/src/components/hds/form/error/message.gts","webpack://__ember_auto_import__/src/components/hds/layout/flex/item.gts","webpack://__ember_auto_import__/src/components/hds/filter-bar/actions-dropdown.gts","webpack://__ember_auto_import__/src/components/hds/dropdown/toggle/button.gts","webpack://__ember_auto_import__/src/components/hds/dropdown/toggle/types.ts","webpack://__ember_auto_import__/src/components/hds/dropdown/toggle/icon.gts","webpack://__ember_auto_import__/src/components/hds/dropdown/header.gts","webpack://__ember_auto_import__/src/components/hds/dropdown/list-item/checkbox.gts","webpack://__ember_auto_import__/src/components/hds/dropdown/list-item/checkmark.gts","webpack://__ember_auto_import__/src/components/hds/dropdown/list-item/copy-item.gts","webpack://__ember_auto_import__/src/components/hds/copy/snippet/index.gts","webpack://__ember_auto_import__/src/components/hds/text/code.gts","webpack://__ember_auto_import__/src/components/hds/dropdown/list-item/description.gts","webpack://__ember_auto_import__/src/components/hds/dropdown/list-item/generic.gts","webpack://__ember_auto_import__/src/components/hds/dropdown/list-item/interactive.gts","webpack://__ember_auto_import__/src/components/hds/dropdown/list-item/radio.gts","webpack://__ember_auto_import__/src/components/hds/dropdown/list-item/separator.gts","webpack://__ember_auto_import__/src/components/hds/dropdown/list-item/title.gts","webpack://__ember_auto_import__/src/components/hds/dropdown/footer.gts","webpack://__ember_auto_import__/src/components/hds/filter-bar/filters-dropdown.gts","webpack://__ember_auto_import__/src/components/hds/filter-bar/filter-group/index.gts","webpack://__ember_auto_import__/src/components/hds/filter-bar/filter-group/checkbox.gts","webpack://__ember_auto_import__/src/components/hds/filter-bar/filter-group/radio.gts","webpack://__ember_auto_import__/src/components/hds/filter-bar/filter-group/clear-button.gts","webpack://__ember_auto_import__/src/components/hds/filter-bar/tabs/index.gts","webpack://__ember_auto_import__/src/components/hds/filter-bar/applied-filters.gts","webpack://__ember_auto_import__/src/components/hds/tag/index.gts","webpack://__ember_auto_import__/src/components/hds/application-state/media.gts","webpack://__ember_auto_import__/src/components/hds/application-state/header.gts","webpack://__ember_auto_import__/src/components/hds/application-state/body.gts","webpack://__ember_auto_import__/src/components/hds/application-state/footer.gts","webpack://__ember_auto_import__/src/components/hds/alert/title.gts","webpack://__ember_auto_import__/src/components/hds/alert/description.gts","webpack://__ember_auto_import__/src/components/hds/app-footer/copyright.gts","webpack://__ember_auto_import__/src/components/hds/app-footer/status-link.gts","webpack://__ember_auto_import__/src/components/hds/link/inline.gts","webpack://__ember_auto_import__/src/components/hds/app-footer/legal-links.gts","webpack://__ember_auto_import__/src/components/hds/app-side-nav/toggle-button.gts","webpack://__ember_auto_import__/src/components/hds/app-side-nav/list/index.gts","webpack://__ember_auto_import__/src/components/hds/app-side-nav/list/back-link.gts","webpack://__ember_auto_import__/src/components/hds/app-side-nav/list/title.gts","webpack://__ember_auto_import__/src/components/hds/app-side-nav/list/link.gts","webpack://__ember_auto_import__/src/components/hds/code-block/copy-button.gts","webpack://__ember_auto_import__/src/components/hds/code-block/title.gts","webpack://__ember_auto_import__/src/components/hds/code-block/description.gts","webpack://__ember_auto_import__/src/components/hds/code-editor/description.gts","webpack://__ember_auto_import__/src/components/hds/code-editor/full-screen-button.gts","webpack://__ember_auto_import__/src/components/hds/code-editor/title.gts","webpack://__ember_auto_import__/src/components/hds/dialog-primitive/description.gts","webpack://__ember_auto_import__/src/components/hds/form/separator/index.gts","webpack://__ember_auto_import__/src/components/hds/form/footer/index.gts","webpack://__ember_auto_import__/src/components/hds/form/header/index.gts","webpack://__ember_auto_import__/src/components/hds/form/section/index.gts","webpack://__ember_auto_import__/src/components/hds/form/checkbox/field.gts","webpack://__ember_auto_import__/src/components/hds/form/key-value-inputs/delete-row-button.gts","webpack://__ember_auto_import__/src/components/hds/form/key-value-inputs/field.gts","webpack://__ember_auto_import__/src/components/hds/form/super-select/placeholder.gts","webpack://__ember_auto_import__/src/components/hds/form/key-value-inputs/generic.gts","webpack://__ember_auto_import__/src/components/hds/form/key-value-inputs/add-row-button.gts","webpack://__ember_auto_import__/src/components/hds/form/radio/field.gts","webpack://__ember_auto_import__/src/components/hds/form/radio-card/index.gts","webpack://__ember_auto_import__/src/components/hds/form/radio-card/label.gts","webpack://__ember_auto_import__/src/components/hds/form/radio-card/description.gts","webpack://__ember_auto_import__/src/components/hds/form/toggle/base.gts","webpack://__ember_auto_import__/src/components/hds/form/toggle/field.gts","webpack://__ember_auto_import__/src/components/hds/icon-tile/index.gts","webpack://__ember_auto_import__/src/components/hds/page-header/actions.gts","webpack://__ember_auto_import__/src/components/hds/page-header/badges.gts","webpack://__ember_auto_import__/src/components/hds/page-header/description.gts","webpack://__ember_auto_import__/src/components/hds/page-header/subtitle.gts","webpack://__ember_auto_import__/src/components/hds/page-header/title.gts","webpack://__ember_auto_import__/src/components/hds/pagination/info/index.gts","webpack://__ember_auto_import__/src/components/hds/pagination/nav/ellipsis.gts","webpack://__ember_auto_import__/src/components/hds/pagination/nav/number.gts","webpack://__ember_auto_import__/src/components/hds/reveal/toggle/button.gts","webpack://__ember_auto_import__/src/components/hds/rich-tooltip/toggle.gts","webpack://__ember_auto_import__/src/components/hds/rich-tooltip/bubble.gts","webpack://__ember_auto_import__/src/components/hds/stepper/list/step.gts","webpack://__ember_auto_import__/src/components/hds/stepper/nav/step.gts","webpack://__ember_auto_import__/src/components/hds/stepper/nav/panel.gts","webpack://__ember_auto_import__/src/components/hds/table/tr.gts","webpack://__ember_auto_import__/src/components/hds/table/th-selectable.gts","webpack://__ember_auto_import__/src/components/hds/table/th-sort.gts","webpack://__ember_auto_import__/src/components/hds/table/td.gts","webpack://__ember_auto_import__/src/components/hds/tabs/tab.gts","webpack://__ember_auto_import__/src/components/hds/tabs/panel.gts","webpack://__ember_auto_import__/src/components/hds/time/range.gts","webpack://__ember_auto_import__/src/components/hds/time/single.gts","webpack://__ember_auto_import__/src/components/hds/app-frame/parts/footer.gts","webpack://__ember_auto_import__/src/components/hds/app-frame/parts/header.gts","webpack://__ember_auto_import__/src/components/hds/app-frame/parts/main.gts","webpack://__ember_auto_import__/src/components/hds/app-frame/parts/modals.gts","webpack://__ember_auto_import__/src/components/hds/app-frame/parts/sidebar.gts","webpack://__ember_auto_import__/src/components/hds/layout/grid/item.gts","webpack://__ember_auto_import__/src/utils-hoist/node.ts","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js","webpack://__ember_auto_import__/src/components/hds/dropdown/toggle/chevron.gts","webpack://__ember_auto_import__/src/helpers/hds-link-to-models.ts","webpack://__ember_auto_import__/src/helpers/hds-link-to-query.ts","webpack://__ember_auto_import__/src/modifiers/hds-clipboard.ts","webpack://__ember_auto_import__/src/components/hds/link/types.ts","webpack://__ember_auto_import__/src/components/hds/advanced-table/column-manager/index.gts","webpack://__ember_auto_import__/src/components/hds/advanced-table/th-context-menu.gts","webpack://__ember_auto_import__/src/components/hds/advanced-table/th-reorder-handle.gts","webpack://__ember_auto_import__/src/components/hds/advanced-table/body.gts","webpack://__ember_auto_import__/src/components/hds/alert/types.ts","webpack://__ember_auto_import__/src/components/hds/app-footer/types.ts","webpack://__ember_auto_import__/src/cell.ts","webpack://__ember_auto_import__/src/ember-compat.ts","webpack://__ember_auto_import__/src/immediate-invocation-manager.ts","webpack://__ember_auto_import__/src/resource-manager.ts","webpack://__ember_auto_import__/src/use.ts","webpack://__ember_auto_import__/src/resource.ts","webpack://__ember_auto_import__/node_modules/.pnpm/@codemirror+language@6.12.4/node_modules/@codemirror/language/dist/index.js","webpack://__ember_auto_import__/src/components/power-select.ts","webpack://__ember_auto_import__/src/tracing/errors.ts","webpack://__ember_auto_import__/src/utils-hoist/instrument/globalError.ts","webpack://__ember_auto_import__/src/utils-hoist/instrument/globalUnhandledRejection.ts","webpack://__ember_auto_import__/src/defaultScopes.ts","webpack://__ember_auto_import__/src/utils-hoist/browser.ts","webpack://__ember_auto_import__/src/utils/handleCallbackErrors.ts","webpack://__ember_auto_import__/src/tracing/sampling.ts","webpack://__ember_auto_import__/src/tracing/sentrySpan.ts","webpack://__ember_auto_import__/src/tracing/measurement.ts","webpack://__ember_auto_import__/src/eventProcessors.ts","webpack://__ember_auto_import__/src/utils-hoist/debug-ids.ts","webpack://__ember_auto_import__/src/utils/applyScopeDataToEvent.ts","webpack://__ember_auto_import__/src/client.ts","webpack://__ember_auto_import__/src/utils-hoist/clientreport.ts","webpack://__ember_auto_import__/src/utils/eventUtils.ts","webpack://__ember_auto_import__/src/checkin.ts","webpack://__ember_auto_import__/src/utils-hoist/promisebuffer.ts","webpack://__ember_auto_import__/src/utils-hoist/aggregate-errors.ts","webpack://__ember_auto_import__/src/metadata.ts","webpack://__ember_auto_import__/src/utils-hoist/instrument/console.ts","webpack://__ember_auto_import__/src/utils-hoist/severity.ts","webpack://__ember_auto_import__/src/utils-hoist/path.ts","webpack://__ember_auto_import__/src/utils-hoist/url.ts","webpack://__ember_auto_import__/src/utils-hoist/supports.ts","webpack://__ember_auto_import__/src/utils-hoist/env.ts","webpack://__ember_auto_import__/src/utils-hoist/node-stack-trace.ts","webpack://__ember_auto_import__/src/metrics/web-vitals/lib/polyfills/interactionCountPolyfill.ts","webpack://__ember_auto_import__/src/metrics/web-vitals/lib/whenIdle.ts","webpack://__ember_auto_import__/src/stack-parsers.ts","webpack://__ember_auto_import__/src/integrations/breadcrumbs.ts","webpack://__ember_auto_import__/src/integrations/browserapierrors.ts","webpack://__ember_auto_import__/src/integrations/browsersession.ts","webpack://__ember_auto_import__/src/integrations/globalhandlers.ts","webpack://__ember_auto_import__/src/integrations/httpcontext.ts","webpack://__ember_auto_import__/src/integrations/linkederrors.ts","webpack://__ember_auto_import__/src/utils/lazyLoadIntegration.ts","webpack://__ember_auto_import__/src/tracing/request.ts","webpack://__ember_auto_import__/src/profiling/utils.ts","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_freeGlobal.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_overArg.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_defineProperty.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_toSource.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseForOwn.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseFor.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_arrayLikeKeys.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseKeys.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_equalArrays.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_SetCache.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_cacheHas.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_Uint8Array.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_getAllKeys.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseGetAllKeys.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/stubArray.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_Set.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_isStrictComparable.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_matchesStrictComparable.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/get.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/toString.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/hasIn.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_hasPath.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseUniq.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseFindIndex.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/flatten.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseSlice.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_hasUnicode.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseEach.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_getSymbolsIn.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseRest.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_overRest.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_setToString.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/toInteger.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/stringifier.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/previous-map.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/list.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/lazy-result.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/map-generator.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/warning.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/warn-once.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/eq.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/neq.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/cmp.js","webpack://__ember_auto_import__/src/components/hds/application-state/types.ts","webpack://__ember_auto_import__/src/components/hds/code-block/types.ts","webpack://__ember_auto_import__/src/components/hds/form/types.ts","webpack://__ember_auto_import__/node_modules/.pnpm/@marijn+find-cluster-break@1.0.3/node_modules/@marijn/find-cluster-break/src/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/@codemirror+state@6.7.1/node_modules/@codemirror/state/dist/index.js","webpack://__ember_auto_import__/src/modifiers/hds-code-editor/palettes/hds-dark-palette.ts","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/selectChild.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/selectChildren.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/sparse.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/enter.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/data.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/sort.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/attr.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/property.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/classed.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/text.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/html.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/raise.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/lower.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/insert.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/remove.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/clone.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/on.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/dispatch.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/select.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/selectAll.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/filter.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/constant.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/exit.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/join.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/merge.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/order.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/call.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/nodes.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/node.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/size.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/empty.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/each.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/append.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/datum.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/iterator.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selector.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selectorAll.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/matcher.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/style.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/window.js","webpack://__ember_auto_import__/src/-private/external/task-instance/initial-state.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mask-pattern.js","webpack://__ember_auto_import__/node_modules/.pnpm/@lezer+highlight@1.2.3/node_modules/@lezer/highlight/dist/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/@lezer+common@1.5.2/node_modules/@lezer/common/dist/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_cloneBuffer.js","webpack://__ember_auto_import__/src/-private/external/scheduler/policies/unbounded-policy.js","webpack://__ember_auto_import__/src/-private/external/task-factory.js","webpack://__ember_auto_import__/node_modules/.pnpm/ua-parser-js@1.0.35/node_modules/ua-parser-js/src/ua-parser.js","webpack://__ember_auto_import__/src/-private/task-properties.js","webpack://__ember_auto_import__/node_modules/.pnpm/i18n-iso-countries@6.8.0/node_modules/i18n-iso-countries/index.js","webpack://__ember_auto_import__/src/components/hds/layout/flex/types.ts","webpack://__ember_auto_import__/src/components/hds/dropdown/types.ts","webpack://__ember_auto_import__/src/components/hds/card/types.ts","webpack://__ember_auto_import__/src/-private/external/task-instance/base.js","webpack://__ember_auto_import__/src/-private/task-instance.js","webpack://__ember_auto_import__/src/-private/task-group.js","webpack://__ember_auto_import__/src/components/hds/form/index.gts","webpack://__ember_auto_import__/src/components/hds/modal/index.gts","webpack://__ember_auto_import__/node_modules/.pnpm/identicon.js@2.3.3/node_modules/identicon.js/identicon.js","webpack://__ember_auto_import__/src/components/hds/accordion/index.gts","webpack://__ember_auto_import__/src/modifiers/style.ts","webpack://__ember_auto_import__/src/helpers/element.ts","webpack://__ember_auto_import__/src/helpers/append.ts","webpack://__ember_auto_import__/src/helpers/chunk.ts","webpack://__ember_auto_import__/src/helpers/compact.ts","webpack://__ember_auto_import__/src/helpers/compute.ts","webpack://__ember_auto_import__/src/helpers/dec.ts","webpack://__ember_auto_import__/src/helpers/drop.ts","webpack://__ember_auto_import__/src/helpers/entries.ts","webpack://__ember_auto_import__/src/helpers/filter-by.ts","webpack://__ember_auto_import__/src/helpers/filter.ts","webpack://__ember_auto_import__/src/helpers/find-by.ts","webpack://__ember_auto_import__/src/helpers/flatten.ts","webpack://__ember_auto_import__/src/helpers/from-entries.ts","webpack://__ember_auto_import__/src/helpers/group-by.ts","webpack://__ember_auto_import__/src/helpers/has-next.ts","webpack://__ember_auto_import__/src/helpers/has-previous.ts","webpack://__ember_auto_import__/src/helpers/inc.ts","webpack://__ember_auto_import__/src/helpers/includes.ts","webpack://__ember_auto_import__/src/helpers/intersect.ts","webpack://__ember_auto_import__/src/helpers/invoke.ts","webpack://__ember_auto_import__/src/helpers/join.ts","webpack://__ember_auto_import__/src/helpers/keys.ts","webpack://__ember_auto_import__/src/helpers/map-by.ts","webpack://__ember_auto_import__/src/helpers/map.ts","webpack://__ember_auto_import__/src/helpers/noop.ts","webpack://__ember_auto_import__/src/helpers/object-at.ts","webpack://__ember_auto_import__/src/helpers/pick.ts","webpack://__ember_auto_import__/src/helpers/queue.ts","webpack://__ember_auto_import__/src/utils/comparison.ts","webpack://__ember_auto_import__/src/helpers/range.ts","webpack://__ember_auto_import__/src/helpers/reduce.ts","webpack://__ember_auto_import__/src/helpers/reject-by.ts","webpack://__ember_auto_import__/src/helpers/repeat.ts","webpack://__ember_auto_import__/src/helpers/reverse.ts","webpack://__ember_auto_import__/src/helpers/shuffle.ts","webpack://__ember_auto_import__/src/helpers/slice.ts","webpack://__ember_auto_import__/src/helpers/sort-by.ts","webpack://__ember_auto_import__/src/helpers/take.ts","webpack://__ember_auto_import__/src/helpers/union.ts","webpack://__ember_auto_import__/src/helpers/values.ts","webpack://__ember_auto_import__/src/helpers/without.ts","webpack://__ember_auto_import__/src/components/hds/badge-count/types.ts","webpack://__ember_auto_import__/src/components/hds/button/types.ts","webpack://__ember_auto_import__/src/components/hds/app-footer/index.gts","webpack://__ember_auto_import__/src/components/hds/app-header/index.gts","webpack://__ember_auto_import__/src/utils/routing.ts","webpack://__ember_auto_import__/src/utils/validators.ts","webpack://__ember_auto_import__/src/components/navigation-narrator.gts","webpack://__ember_auto_import__/src/components/hds/app-header/menu-button.gts","webpack://__ember_auto_import__/src/components/hds/app-header/home-link.gts","webpack://__ember_auto_import__/src/components/hds/app-side-nav/index.gts","webpack://__ember_auto_import__/src/components/hds/app-side-nav/portal/index.gts","webpack://__ember_auto_import__/src/components/hds/app-side-nav/portal/target.gts","webpack://__ember_auto_import__/src/components/hds/breadcrumb/index.gts","webpack://__ember_auto_import__/src/components/hds/breadcrumb/item.gts","webpack://__ember_auto_import__/src/components/hds/breadcrumb/truncation.gts","webpack://__ember_auto_import__/src/components/hds/card/container.gts","webpack://__ember_auto_import__/src/components/hds/code-block/index.gts","webpack://__ember_auto_import__/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/prism.js","webpack://__ember_auto_import__/src/components/hds/code-editor/index.gts","webpack://__ember_auto_import__/src/-private/scheduler/ember-scheduler.js","webpack://__ember_auto_import__/src/-private/task-factory.js","webpack://__ember_auto_import__/src/components/hds/flyout/index.gts","webpack://__ember_auto_import__/src/components/hds/form/checkbox/group.gts","webpack://__ember_auto_import__/src/components/hds/form/file-input/field.gts","webpack://__ember_auto_import__/src/components/hds/form/key-value-inputs/index.gts","webpack://__ember_auto_import__/src/components/hds/form/masked-input/field.gts","webpack://__ember_auto_import__/src/components/hds/form/radio/group.gts","webpack://__ember_auto_import__/src/components/hds/form/radio-card/group.gts","webpack://__ember_auto_import__/src/components/hds/form/super-select/single/field.gts","webpack://__ember_auto_import__/src/components/hds/form/super-select/multiple/field.gts","webpack://__ember_auto_import__/src/components/hds/form/textarea/field.gts","webpack://__ember_auto_import__/src/components/hds/form/text-input/field.gts","webpack://__ember_auto_import__/src/components/hds/form/toggle/group.gts","webpack://__ember_auto_import__/src/components/hds/icon-tile/types.ts","webpack://__ember_auto_import__/src/components/hds/page-header/index.gts","webpack://__ember_auto_import__/src/components/hds/pagination/compact/index.gts","webpack://__ember_auto_import__/src/components/hds/pagination/numbered/index.gts","webpack://__ember_auto_import__/src/components/hds/reveal/index.gts","webpack://__ember_auto_import__/src/components/hds/rich-tooltip/index.gts","webpack://__ember_auto_import__/src/components/hds/segmented-group/index.gts","webpack://__ember_auto_import__/src/components/hds/stepper/list/index.gts","webpack://__ember_auto_import__/src/components/hds/stepper/nav/index.gts","webpack://__ember_auto_import__/src/components/hds/stepper/task/indicator.gts","webpack://__ember_auto_import__/src/components/hds/table/index.gts","webpack://__ember_auto_import__/src/components/hds/tabs/index.gts","webpack://__ember_auto_import__/src/components/hds/time/index.gts","webpack://__ember_auto_import__/src/components/hds/toast/index.gts","webpack://__ember_auto_import__/src/components/hds/app-frame/index.gts","webpack://__ember_auto_import__/src/components/hds/layout/grid/index.gts","webpack://__ember_auto_import__/node_modules/.pnpm/algoliasearch@4.8.6/node_modules/algoliasearch/dist/algoliasearch.umd.js","webpack://__ember_auto_import__/src/helpers/format-date.ts","webpack://__ember_auto_import__/src/helpers/format-date-range.ts","webpack://__ember_auto_import__/src/helpers/format-display-name.ts","webpack://__ember_auto_import__/src/helpers/format-list.ts","webpack://__ember_auto_import__/src/helpers/format-message.ts","webpack://__ember_auto_import__/src/helpers/format-number.ts","webpack://__ember_auto_import__/src/helpers/format-relative-time.ts","webpack://__ember_auto_import__/src/helpers/format-time.ts","webpack://__ember_auto_import__/src/helpers/t.ts","webpack://__ember_auto_import__/src/helpers/page-title.ts","webpack://__ember_auto_import__/node_modules/.pnpm/identicon.js@2.3.3/node_modules/identicon.js/pnglib.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/af.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/am-et.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ar.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ar-dz.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ar-kw.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ar-ly.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ar-ma.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ar-ps.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ar-sa.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ar-tn.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/az.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/be.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/bg.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/bm.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/bn.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/bn-bd.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/bo.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/br.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/bs.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ca.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/cs.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/cv.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/cy.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/da.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/de.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/de-at.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/de-ch.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/dv.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/el.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/en-au.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/en-ca.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/en-gb.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/en-ie.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/en-il.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/en-in.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/en-nz.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/en-sg.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/eo.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/es.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/es-do.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/es-mx.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/es-us.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/et.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/eu.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/fa.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/fi.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/fil.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/fo.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/fr.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/fr-ca.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/fr-ch.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/fy.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ga.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/gd.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/gl.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/gom-deva.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/gom-latn.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/gu.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/he.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/hi.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/hr.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/hu.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/hy-am.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/id.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/is.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/it.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/it-ch.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ja.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/jv.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ka.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/kk.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/km.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/kn.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ko.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ku.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ku-kmr.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ky.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/lb.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/lo.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/lt.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/lv.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/me.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/mi.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/mk.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ml.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/mn.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/mr.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ms.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ms-my.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/mt.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/my.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/nb.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ne.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/nl.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/nl-be.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/nn.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/oc-lnc.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/pa-in.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/pl.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ps.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/pt.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/pt-br.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ro.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ru.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/sd.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/se.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/si.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/sk.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/sl.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/sq.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/sr.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/sr-cyrl.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ss.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/sv.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/sw.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ta.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/te.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/tet.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/tg.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/th.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/tk.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/tl-ph.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/tlh.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/tr.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/tzl.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/tzm.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/tzm-latn.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ug-cn.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/uk.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/ur.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/uz.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/uz-latn.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/vi.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/x-pseudo.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/yo.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/zh-cn.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/zh-hk.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/zh-mo.js","webpack://__ember_auto_import__/node_modules/.pnpm/moment@2.31.0/node_modules/moment/locale/zh-tw.js","webpack://__ember_auto_import__/node_modules/.pnpm/path-normalize@6.0.13/node_modules/path-normalize/lib/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/segments.js","webpack://__ember_auto_import__/node_modules/.pnpm/recaptcha-v3@1.11.3/node_modules/recaptcha-v3/dist/ReCaptchaLoader.js","webpack://__ember_auto_import__/node_modules/.pnpm/dayjs@1.11.23/node_modules/dayjs/dayjs.min.js","webpack://__ember_auto_import__/node_modules/.pnpm/@elastic+micro-jq@1.5.0/node_modules/@elastic/micro-jq/src/execute.js","webpack://__ember_auto_import__/node_modules/.pnpm/@elastic+micro-jq@1.5.0/node_modules/@elastic/micro-jq/src/parser.js","webpack://__ember_auto_import__/src/components/hds/accordion/item/button.gts","webpack://__ember_auto_import__/src/helpers/call.ts","webpack://__ember_auto_import__/src/utils/get-index.ts","webpack://__ember_auto_import__/src/helpers/optional.ts","webpack://__ember_auto_import__/src/utils/is-promise.ts","webpack://__ember_auto_import__/src/utils/is-object.ts","webpack://__ember_auto_import__/src/modifiers/hds-register-event.ts","webpack://__ember_auto_import__/src/components/hds/tag/types.ts","webpack://__ember_auto_import__/src/components/hds/advanced-table/column-manager/order.gts","webpack://__ember_auto_import__/src/components/portal.ts","webpack://__ember_auto_import__/src/components/portal-target.ts","webpack://__ember_auto_import__/src/modifiers/hds-code-editor.ts","webpack://__ember_auto_import__/src/-private/external/scheduler/refresh.js","webpack://__ember_auto_import__/src/-private/external/scheduler/state-tracker/state.js","webpack://__ember_auto_import__/src/-private/external/scheduler/state-tracker/state-tracker.js","webpack://__ember_auto_import__/src/-private/external/scheduler/state-tracker/null-state-tracker.js","webpack://__ember_auto_import__/src/-private/external/scheduler/state-tracker/null-state.js","webpack://__ember_auto_import__/src/-private/external/scheduler/scheduler.js","webpack://__ember_auto_import__/src/-private/external/task/taskable.js","webpack://__ember_auto_import__/src/-private/external/task/default-state.js","webpack://__ember_auto_import__/src/-private/external/generator-state.js","webpack://__ember_auto_import__/src/-private/external/task-instance/executor.js","webpack://__ember_auto_import__/src/-private/ember-environment.js","webpack://__ember_auto_import__/src/-private/tracked-state.js","webpack://__ember_auto_import__/src/modifiers/hds-code-editor/themes/hds-dark-theme.ts","webpack://__ember_auto_import__/src/modifiers/hds-code-editor/highlight-styles/hds-dark-highlight-style.ts","webpack://__ember_auto_import__/src/components/hds/code-editor/generic.gts","webpack://__ember_auto_import__/src/utils/group-utils.ts","webpack://__ember_auto_import__/src/components/hds/form/radio-card/types.ts","webpack://__ember_auto_import__/src/components/hds/modal/types.ts","webpack://__ember_auto_import__/src/components/hds/rich-tooltip/types.ts","webpack://__ember_auto_import__/src/helpers/hds-format-relative.ts","webpack://__ember_auto_import__/src/components/hds/layout/grid/types.ts","webpack://__ember_auto_import__/src/modifiers/hds-code-editor/languages/rego.ts","webpack://__ember_auto_import__/src/modifiers/hds-code-editor/languages/sentinel.ts","webpack://__ember_auto_import__/src/modifiers/hds-code-editor/linters/json-linter.ts","webpack://__ember_auto_import__/src/-private/closure-action.ts","webpack://__ember_auto_import__/src/asyncContext/stackStrategy.ts","webpack://__ember_auto_import__/src/tracing/idleSpan.ts","webpack://__ember_auto_import__/src/utils/transactionEvent.ts","webpack://__ember_auto_import__/src/server-runtime-client.ts","webpack://__ember_auto_import__/src/sdk.ts","webpack://__ember_auto_import__/src/transports/base.ts","webpack://__ember_auto_import__/src/transports/offline.ts","webpack://__ember_auto_import__/src/transports/multiplexed.ts","webpack://__ember_auto_import__/src/utils/isSentryRequestUrl.ts","webpack://__ember_auto_import__/src/utils/parameterize.ts","webpack://__ember_auto_import__/src/utils/ipAddress.ts","webpack://__ember_auto_import__/src/utils/sdkMetadata.ts","webpack://__ember_auto_import__/src/utils/meta.ts","webpack://__ember_auto_import__/src/utils/request.ts","webpack://__ember_auto_import__/src/breadcrumbs.ts","webpack://__ember_auto_import__/src/integrations/functiontostring.ts","webpack://__ember_auto_import__/src/integrations/eventFilters.ts","webpack://__ember_auto_import__/src/integrations/metadata.ts","webpack://__ember_auto_import__/src/integrations/requestdata.ts","webpack://__ember_auto_import__/src/utils/cookie.ts","webpack://__ember_auto_import__/src/vendor/getIpAddress.ts","webpack://__ember_auto_import__/src/integrations/captureconsole.ts","webpack://__ember_auto_import__/src/integrations/dedupe.ts","webpack://__ember_auto_import__/src/integrations/extraerrordata.ts","webpack://__ember_auto_import__/src/integrations/rewriteframes.ts","webpack://__ember_auto_import__/src/integrations/zoderrors.ts","webpack://__ember_auto_import__/src/integrations/third-party-errors-filter.ts","webpack://__ember_auto_import__/src/profiling.ts","webpack://__ember_auto_import__/src/fetch.ts","webpack://__ember_auto_import__/src/trpc.ts","webpack://__ember_auto_import__/src/feedback.ts","webpack://__ember_auto_import__/src/utils-hoist/breadcrumb-log-level.ts","webpack://__ember_auto_import__/src/utils-hoist/instrument/fetch.ts","webpack://__ember_auto_import__/src/utils-hoist/isBrowser.ts","webpack://__ember_auto_import__/src/utils-hoist/anr.ts","webpack://__ember_auto_import__/src/utils-hoist/lru.ts","webpack://__ember_auto_import__/src/utils-hoist/vercelWaitUntil.ts","webpack://__ember_auto_import__/src/utils-hoist/vendor/escapeStringForRegex.ts","webpack://__ember_auto_import__/src/metrics/web-vitals/getCLS.ts","webpack://__ember_auto_import__/src/metrics/web-vitals/lib/generateUniqueID.ts","webpack://__ember_auto_import__/src/metrics/web-vitals/onFCP.ts","webpack://__ember_auto_import__/src/metrics/web-vitals/getFID.ts","webpack://__ember_auto_import__/src/metrics/web-vitals/getINP.ts","webpack://__ember_auto_import__/src/metrics/web-vitals/lib/interactions.ts","webpack://__ember_auto_import__/src/metrics/web-vitals/getLCP.ts","webpack://__ember_auto_import__/src/metrics/web-vitals/onTTFB.ts","webpack://__ember_auto_import__/src/metrics/browserMetrics.ts","webpack://__ember_auto_import__/src/metrics/cls.ts","webpack://__ember_auto_import__/src/instrument/dom.ts","webpack://__ember_auto_import__/src/instrument/history.ts","webpack://__ember_auto_import__/src/getNativeImplementation.ts","webpack://__ember_auto_import__/src/instrument/xhr.ts","webpack://__ember_auto_import__/src/networkUtils.ts","webpack://__ember_auto_import__/src/metrics/inp.ts","webpack://__ember_auto_import__/src/userfeedback.ts","webpack://__ember_auto_import__/src/integrations/reportingobserver.ts","webpack://__ember_auto_import__/src/integrations/httpclient.ts","webpack://__ember_auto_import__/src/integrations/contextlines.ts","webpack://__ember_auto_import__/src/integrations/graphqlClient.ts","webpack://__ember_auto_import__/node_modules/@sentry-internal/rrweb/dist/rrweb.js","webpack://__ember_auto_import__/src/util/timestamp.ts","webpack://__ember_auto_import__/src/coreHandlers/util/addBreadcrumbEvent.ts","webpack://__ember_auto_import__/src/coreHandlers/util/domUtils.ts","webpack://__ember_auto_import__/src/coreHandlers/util/onWindowOpen.ts","webpack://__ember_auto_import__/src/coreHandlers/handleClick.ts","webpack://__ember_auto_import__/src/util/createBreadcrumb.ts","webpack://__ember_auto_import__/node_modules/@sentry-internal/rrweb-snapshot/dist/rrweb-snapshot.js","webpack://__ember_auto_import__/src/coreHandlers/util/getAttributesToRecord.ts","webpack://__ember_auto_import__/src/coreHandlers/handleDom.ts","webpack://__ember_auto_import__/src/util/createPerformanceEntries.ts","webpack://__ember_auto_import__/src/util/logger.ts","webpack://__ember_auto_import__/src/eventBuffer/error.ts","webpack://__ember_auto_import__/src/eventBuffer/EventBufferArray.ts","webpack://__ember_auto_import__/src/eventBuffer/WorkerHandler.ts","webpack://__ember_auto_import__/src/eventBuffer/EventBufferCompressionWorker.ts","webpack://__ember_auto_import__/src/eventBuffer/EventBufferProxy.ts","webpack://__ember_auto_import__/src/util/hasSessionStorage.ts","webpack://__ember_auto_import__/src/util/isSampled.ts","webpack://__ember_auto_import__/src/session/Session.ts","webpack://__ember_auto_import__/src/session/saveSession.ts","webpack://__ember_auto_import__/src/session/createSession.ts","webpack://__ember_auto_import__/src/util/isExpired.ts","webpack://__ember_auto_import__/src/util/isSessionExpired.ts","webpack://__ember_auto_import__/src/session/shouldRefreshSession.ts","webpack://__ember_auto_import__/src/session/loadOrCreateSession.ts","webpack://__ember_auto_import__/src/session/fetchSession.ts","webpack://__ember_auto_import__/src/util/addEvent.ts","webpack://__ember_auto_import__/src/util/eventUtils.ts","webpack://__ember_auto_import__/src/coreHandlers/handleBreadcrumbs.ts","webpack://__ember_auto_import__/src/util/resetReplayIdOnDynamicSamplingContext.ts","webpack://__ember_auto_import__/src/util/createPerformanceSpans.ts","webpack://__ember_auto_import__/src/coreHandlers/util/addNetworkBreadcrumb.ts","webpack://__ember_auto_import__/src/util/shouldFilterRequest.ts","webpack://__ember_auto_import__/src/coreHandlers/util/networkUtils.ts","webpack://__ember_auto_import__/src/coreHandlers/util/fetchUtils.ts","webpack://__ember_auto_import__/src/util/addMemoryEntry.ts","webpack://__ember_auto_import__/src/util/getRecordingSamplingOptions.ts","webpack://__ember_auto_import__/src/util/handleRecordingEmit.ts","webpack://__ember_auto_import__/src/types/rrweb.ts","webpack://__ember_auto_import__/src/util/sendReplayRequest.ts","webpack://__ember_auto_import__/src/util/sendReplay.ts","webpack://__ember_auto_import__/src/util/prepareRecordingData.ts","webpack://__ember_auto_import__/src/util/prepareReplayEvent.ts","webpack://__ember_auto_import__/src/util/createReplayEnvelope.ts","webpack://__ember_auto_import__/src/util/throttle.ts","webpack://__ember_auto_import__/src/replay.ts","webpack://__ember_auto_import__/src/util/debounce.ts","webpack://__ember_auto_import__/src/coreHandlers/handleKeyboardEvent.ts","webpack://__ember_auto_import__/src/session/clearSession.ts","webpack://__ember_auto_import__/src/eventBuffer/index.ts","webpack://__ember_auto_import__/replay-worker/build/esm/index.js","webpack://__ember_auto_import__/replay-worker/build/esm/worker.ts","webpack://__ember_auto_import__/src/util/addGlobalListeners.ts","webpack://__ember_auto_import__/src/coreHandlers/handleHistory.ts","webpack://__ember_auto_import__/src/coreHandlers/handleNetworkBreadcrumbs.ts","webpack://__ember_auto_import__/src/coreHandlers/util/xhrUtils.ts","webpack://__ember_auto_import__/src/coreHandlers/handleGlobalEvent.ts","webpack://__ember_auto_import__/src/coreHandlers/util/addFeedbackBreadcrumb.ts","webpack://__ember_auto_import__/src/util/isRrwebError.ts","webpack://__ember_auto_import__/src/coreHandlers/util/shouldSampleForBufferEvent.ts","webpack://__ember_auto_import__/src/coreHandlers/handleBeforeSendEvent.ts","webpack://__ember_auto_import__/src/coreHandlers/handleAfterSendEvent.ts","webpack://__ember_auto_import__/src/coreHandlers/performanceObserver.ts","webpack://__ember_auto_import__/src/util/getPrivacyOptions.ts","webpack://__ember_auto_import__/src/util/maskAttribute.ts","webpack://__ember_auto_import__/src/util/getReplay.ts","webpack://__ember_auto_import__/src/canvas.ts","webpack://__ember_auto_import__/src/feedbackAsync.ts","webpack://__ember_auto_import__/src/feedbackSync.ts","webpack://__ember_auto_import__/src/tracing/browserTracingIntegration.ts","webpack://__ember_auto_import__/src/tracing/backgroundtab.ts","webpack://__ember_auto_import__/src/profiling/integration.ts","webpack://__ember_auto_import__/src/profiling/startProfileForSpan.ts","webpack://__ember_auto_import__/src/integrations/spotlight.ts","webpack://__ember_auto_import__/src/integrations/featureFlags/featureFlagsIntegration.ts","webpack://__ember_auto_import__/src/integrations/featureFlags/launchdarkly/integration.ts","webpack://__ember_auto_import__/src/integrations/featureFlags/openfeature/integration.ts","webpack://__ember_auto_import__/src/integrations/featureFlags/unleash/integration.ts","webpack://__ember_auto_import__/src/integrations/featureFlags/statsig/integration.ts","webpack://__ember_auto_import__/ansi_up.ts/","webpack://__ember_auto_import__/node_modules/.pnpm/autosize@4.0.2/node_modules/autosize/dist/autosize.js","webpack://__ember_auto_import__/src/tags.ts","webpack://__ember_auto_import__/src/attrs.ts","webpack://__ember_auto_import__/src/regexp.ts","webpack://__ember_auto_import__/src/purify.ts","webpack://__ember_auto_import__/src/components/basic-dropdown-trigger.gts","webpack://__ember_auto_import__/src/modifiers/basic-dropdown-trigger.ts","webpack://__ember_auto_import__/src/utils/scroll-helpers.ts","webpack://__ember_auto_import__/src/components/basic-dropdown-content.gts","webpack://__ember_auto_import__/src/lib/system/inflections.js","webpack://__ember_auto_import__/src/lib/system/inflector.js","webpack://__ember_auto_import__/src/lib/system/string.js","webpack://__ember_auto_import__/src/-private/helpers.js","webpack://__ember_auto_import__/src/lib/utils/make-helper.js","webpack://__ember_auto_import__/src/helpers/t-key.ts","webpack://__ember_auto_import__/node_modules/.pnpm/ember-window-mock@2.0.0/node_modules/ember-window-mock/src/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isPlainObject.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_getRawTag.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_objectToString.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/mapValues.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseIsNative.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_isMasked.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_coreJsData.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_getValue.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_createBaseFor.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseTimes.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseIsArguments.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/stubFalse.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseIsTypedArray.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_nativeKeys.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseMatches.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseIsMatch.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_listCacheClear.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_listCacheDelete.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_listCacheGet.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_listCacheHas.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_listCacheSet.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_stackClear.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_stackDelete.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_stackGet.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_stackHas.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_stackSet.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_mapCacheClear.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_Hash.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_hashClear.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_hashDelete.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_hashGet.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_hashHas.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_hashSet.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_mapCacheDelete.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_isKeyable.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_mapCacheGet.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_mapCacheHas.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_mapCacheSet.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseIsEqualDeep.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_setCacheAdd.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_setCacheHas.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_arraySome.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_equalByTag.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_mapToArray.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_equalObjects.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_arrayFilter.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_DataView.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_Promise.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_WeakMap.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_getMatchData.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseMatchesProperty.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_stringToPath.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_memoizeCapped.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/memoize.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseToString.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseHasIn.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/property.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseProperty.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_basePropertyDeep.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/uniq.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_arrayIncludes.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseIndexOf.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseIsNaN.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_strictIndexOf.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_arrayIncludesWith.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_createSet.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/noop.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseFlatten.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_isFlattenable.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/lowerFirst.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_createCaseFirst.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_castSlice.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_stringToArray.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_asciiToArray.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_unicodeToArray.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isEqual.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/map.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseMap.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_createBaseEach.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/cloneDeep.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseClone.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_arrayEach.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseAssign.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseAssignIn.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseKeysIn.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_nativeKeysIn.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_copyArray.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_copySymbols.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_copySymbolsIn.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_getAllKeysIn.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_initCloneArray.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_initCloneByTag.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_cloneDataView.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_cloneRegExp.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_cloneSymbol.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_cloneTypedArray.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_initCloneObject.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseCreate.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isMap.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseIsMap.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isSet.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseIsSet.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/invokeMap.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseInvoke.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/last.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_parent.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseSetToString.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/constant.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_shortOut.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/compact.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/has.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseHas.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/values.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseValues.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isEmpty.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/uniqBy.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/forIn.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_castFunction.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/pick.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_basePick.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_basePickBy.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseSet.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_flatRest.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/assign.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_createAssigner.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_isIterateeCall.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/find.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_createFind.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/findIndex.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/toFinite.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/toNumber.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseTrim.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_trimmedEndIndex.js","webpack://__ember_auto_import__/node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isInteger.js","webpack://__ember_auto_import__/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/md5-o-matic@0.1.1/node_modules/md5-o-matic/lib/md5omatic.js","webpack://__ember_auto_import__/node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/lib/picomatch.js","webpack://__ember_auto_import__/node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/lib/scan.js","webpack://__ember_auto_import__/node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/lib/parse.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/can-promise.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-buffer.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-matrix.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alignment-pattern.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-code.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/reed-solomon-encoder.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/polynomial.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version-check.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/regex.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/numeric-data.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alphanumeric-data.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/byte-data.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/kanji-data.js","webpack://__ember_auto_import__/node_modules/.pnpm/dijkstrajs@1.0.3/node_modules/dijkstrajs/dijkstra.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/canvas.js","webpack://__ember_auto_import__/node_modules/.pnpm/remove-markdown@0.5.5/node_modules/remove-markdown/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/sanitize-html@2.17.7/node_modules/sanitize-html/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/escape-string-regexp@4.0.0/node_modules/escape-string-regexp/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/deepmerge@4.2.2/node_modules/deepmerge/dist/cjs.js","webpack://__ember_auto_import__/node_modules/.pnpm/parse-srcset@1.0.2/node_modules/parse-srcset/src/parse-srcset.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/postcss.js","webpack://__ember_auto_import__/node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.browser.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/fromJSON.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/parser.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/tokenize.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/processor.js","webpack://__ember_auto_import__/node_modules/.pnpm/postcss@8.5.28/node_modules/postcss/lib/no-work-result.js","webpack://__ember_auto_import__/node_modules/.pnpm/launder@1.7.1/node_modules/launder/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/identifiers.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/valid.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/clean.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/inc.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/diff.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/major.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/minor.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/patch.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/prerelease.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/rcompare.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/compare-loose.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/sort.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/rsort.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/coerce.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/truncate.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/lrucache.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/to-comparators.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/max-satisfying.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/min-satisfying.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/min-version.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/valid.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/gtr.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/ltr.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/intersects.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/simplify.js","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/subset.js","webpack://__ember_auto_import__/node_modules/.pnpm/ip-regex@4.3.0/node_modules/ip-regex/index.js","webpack://__ember_auto_import__/src/components/hds/form/field/types.ts","webpack://__ember_auto_import__/src/components/hds/form/text-input/types.ts","webpack://__ember_auto_import__/src/components/hds/copy/snippet/types.ts","webpack://__ember_auto_import__/src/components/hds/dropdown/list-item/types.ts","webpack://__ember_auto_import__/src/components/hds/separator/types.ts","webpack://__ember_auto_import__/src/components/hds/tooltip-button/types.ts","webpack://__ember_auto_import__/src/components/hds/composite/navigation.ts","webpack://__ember_auto_import__/src/components/hds/copy/button/types.ts","webpack://__ember_auto_import__/src/components/hds/flyout/types.ts","webpack://__ember_auto_import__/src/components/hds/dialog-primitive/types.ts","webpack://__ember_auto_import__/src/components/hds/form/fieldset/types.ts","webpack://__ember_auto_import__/src/components/hds/tabs/types.ts","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/creator.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/select.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/pointer.js","webpack://__ember_auto_import__/src/-private/taskable-mixin.js","webpack://__ember_auto_import__/src/errors.js","webpack://__ember_auto_import__/src/impl/formats.js","webpack://__ember_auto_import__/src/zone.js","webpack://__ember_auto_import__/src/zones/systemZone.js","webpack://__ember_auto_import__/src/zones/IANAZone.js","webpack://__ember_auto_import__/src/impl/locale.js","webpack://__ember_auto_import__/src/impl/english.js","webpack://__ember_auto_import__/src/zones/fixedOffsetZone.js","webpack://__ember_auto_import__/src/zones/invalidZone.js","webpack://__ember_auto_import__/src/impl/zoneUtil.js","webpack://__ember_auto_import__/src/impl/util.js","webpack://__ember_auto_import__/src/impl/digits.js","webpack://__ember_auto_import__/src/settings.js","webpack://__ember_auto_import__/src/impl/invalid.js","webpack://__ember_auto_import__/src/impl/conversions.js","webpack://__ember_auto_import__/src/impl/formatter.js","webpack://__ember_auto_import__/src/impl/regexParser.js","webpack://__ember_auto_import__/src/duration.js","webpack://__ember_auto_import__/src/interval.js","webpack://__ember_auto_import__/src/info.js","webpack://__ember_auto_import__/src/impl/diff.js","webpack://__ember_auto_import__/src/impl/tokenParser.js","webpack://__ember_auto_import__/src/datetime.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-dispatch@3.0.1/node_modules/d3-dispatch/src/dispatch.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/timer.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/namespaces.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/array.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/sourceEvent.js","webpack://__ember_auto_import__/src/config.ts","webpack://__ember_auto_import__/node_modules/.pnpm/jsondiffpatch@0.7.6/node_modules/jsondiffpatch/lib/assertions/arrays.js","webpack://__ember_auto_import__/src/decode-codepoint.ts","webpack://__ember_auto_import__/src/internal/bin-trie-flags.ts","webpack://__ember_auto_import__/src/decode.ts","webpack://__ember_auto_import__/src/generated/decode-data-html.ts","webpack://__ember_auto_import__/src/internal/decode-shared.ts","webpack://__ember_auto_import__/src/components/hds/icon/types.ts","webpack://__ember_auto_import__/node_modules/.pnpm/@dmsnell+diff-match-patch@1.1.0/node_modules/@dmsnell/diff-match-patch/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/@elastic+micro-jq@1.5.0/node_modules/@elastic/micro-jq/src/index.js","webpack://__ember_auto_import__/src/decorator.js","webpack://__ember_auto_import__/src/-private/class-field-descriptor.js","webpack://__ember_auto_import__/node_modules/.pnpm/@hashicorp+ansi_up@6.0.8/node_modules/@hashicorp/ansi_up/ansi_up.js","webpack://__ember_auto_import__/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/plugins/line-numbers/prism-line-numbers.js","webpack://__ember_auto_import__/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/plugins/line-highlight/prism-line-highlight.js","webpack://__ember_auto_import__/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-bash.js","webpack://__ember_auto_import__/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-go.js","webpack://__ember_auto_import__/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-hcl.js","webpack://__ember_auto_import__/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-json.js","webpack://__ember_auto_import__/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-log.js","webpack://__ember_auto_import__/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-ruby.js","webpack://__ember_auto_import__/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-shell-session.js","webpack://__ember_auto_import__/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-yaml.js","webpack://__ember_auto_import__/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-markup-templating.js","webpack://__ember_auto_import__/node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-handlebars.js","webpack://__ember_auto_import__/src/-private/external/scheduler/policies/drop-policy.js","webpack://__ember_auto_import__/src/-private/external/scheduler/policies/keep-latest-policy.js","webpack://__ember_auto_import__/src/-private/external/scheduler/policies/restartable-policy.js","webpack://__ember_auto_import__/src/-private/external/task/task.js","webpack://__ember_auto_import__/src/-private/external/task/task-group.js","webpack://__ember_auto_import__/src/-private/external/environment.js","webpack://__ember_auto_import__/node_modules/.pnpm/style-mod@4.1.3/node_modules/style-mod/src/style-mod.js","webpack://__ember_auto_import__/src/instance-initializers/load-sprite.ts","webpack://__ember_auto_import__/src/modifiers/hds-code-editor/types.ts","webpack://__ember_auto_import__/src/services/hds-intl.ts","webpack://__ember_auto_import__/src/services/hds-time.ts","webpack://__ember_auto_import__/src/helpers/pipe-action.ts","webpack://__ember_auto_import__/src/helpers/toggle-action.ts","webpack://__ember_auto_import__/node_modules/.pnpm/cldr-compact-number@0.4.0/node_modules/cldr-compact-number/dist/cldr-compact-number.es5.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/center.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/add.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/quad.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/x.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/y.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/quadtree.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/constant.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/jiggle.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/collide.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/link.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/cover.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/data.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/extent.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/find.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/remove.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/root.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/size.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/visit.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/visitAfter.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/lcg.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/simulation.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/manyBody.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/radial.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/x.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/y.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/create.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/local.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/pointers.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selectAll.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-drag@3.0.0/node_modules/d3-drag/src/noevent.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/zoom.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/timeout.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/schedule.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/interrupt.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/number.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/decompose.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/parse.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/tween.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/define.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/color.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/basis.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/constant.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/color.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/rgb.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/basisClosed.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/string.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/interpolate.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/attr.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/attrTween.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/delay.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/duration.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/selection.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/style.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/select.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/selectAll.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/filter.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/merge.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/transition.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/on.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/styleTween.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/text.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/textTween.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/remove.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/ease.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/easeVarying.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/end.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/transition.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-ease@3.0.1/node_modules/d3-ease/src/cubic.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/interrupt.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/constant.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/event.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/transform.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/noevent.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/zoom.js","webpack://__ember_auto_import__/node_modules/.pnpm/d3-drag@3.0.0/node_modules/d3-drag/src/nodrag.js","webpack://__ember_auto_import__/src/helpers/assign.js","webpack://__ember_auto_import__/node_modules/.pnpm/ember-lifeline@7.1.0_@ember+test-helpers@5.4.3_@babel+core@7.29.7_/node_modules/ember-lifeline/dist/cancel-task.js","webpack://__ember_auto_import__/node_modules/.pnpm/ember-lifeline@7.1.0_@ember+test-helpers@5.4.3_@babel+core@7.29.7_/node_modules/ember-lifeline/dist/poll-task.js","webpack://__ember_auto_import__/node_modules/.pnpm/ember-lifeline@7.1.0_@ember+test-helpers@5.4.3_@babel+core@7.29.7_/node_modules/ember-lifeline/dist/debounce-task.js","webpack://__ember_auto_import__/src/modifiers/autofocus.ts","webpack://__ember_auto_import__/node_modules/.pnpm/ember-lifeline@7.1.0_@ember+test-helpers@5.4.3_@babel+core@7.29.7_/node_modules/ember-lifeline/dist/run-task.js","webpack://__ember_auto_import__/node_modules/.pnpm/ember-lifeline@7.1.0_@ember+test-helpers@5.4.3_@babel+core@7.29.7_/node_modules/ember-lifeline/dist/utils/get-task.js","webpack://__ember_auto_import__/src/components/basic-dropdown.gts","webpack://__ember_auto_import__/src/components/basic-dropdown-wormhole.gts","webpack://__ember_auto_import__/src/ability.ts","webpack://__ember_auto_import__/src/-private/resolver.ts","webpack://__ember_auto_import__/src/helpers/can.ts","webpack://__ember_auto_import__/src/helpers/cannot.ts","webpack://__ember_auto_import__/src/-private/normalize.ts","webpack://__ember_auto_import__/src/services/abilities.ts","webpack://__ember_auto_import__/node_modules/.pnpm/ember-cli-deprecation-workflow@4.0.1_@babel+core@7.29.7/node_modules/ember-cli-deprecation-workflow/src/index.js","webpack://__ember_auto_import__/src/components/flash-message.hbs","webpack://__ember_auto_import__/src/components/flash-message.js","webpack://__ember_auto_import__/src/flash/object.js","webpack://__ember_auto_import__/src/utils/computed.js","webpack://__ember_auto_import__/src/utils/get-with-default.js","webpack://__ember_auto_import__/src/services/flash-messages.js","webpack://__ember_auto_import__/src/utils/object-without.js","webpack://__ember_auto_import__/src/utils/flash-message-options.js","webpack://__ember_auto_import__/src/helpers/cancel-all.ts","webpack://__ember_auto_import__/src/helpers/perform.ts","webpack://__ember_auto_import__/src/helpers/task.ts","webpack://__ember_auto_import__/src/js-helpers.ts","webpack://__ember_auto_import__/src/helpers/pluralize.js","webpack://__ember_auto_import__/src/helpers/singularize.js","webpack://__ember_auto_import__/index.ts","webpack://__ember_auto_import__/date-time.ts","webpack://__ember_auto_import__/regex.generated.ts","webpack://__ember_auto_import__/number.ts","webpack://__ember_auto_import__/error.ts","webpack://__ember_auto_import__/types.ts","webpack://__ember_auto_import__/time-data.generated.ts","webpack://__ember_auto_import__/date-time-pattern-generator.ts","webpack://__ember_auto_import__/parser.ts","webpack://__ember_auto_import__/formatters.ts","webpack://__ember_auto_import__/core.ts","webpack://__ember_auto_import__/utils.ts","webpack://__ember_auto_import__/message.ts","webpack://__ember_auto_import__/dateTime.ts","webpack://__ember_auto_import__/displayName.ts","webpack://__ember_auto_import__/list.ts","webpack://__ember_auto_import__/plural.ts","webpack://__ember_auto_import__/relativeTime.ts","webpack://__ember_auto_import__/src/-private/formatjs/format-message.ts","webpack://__ember_auto_import__/src/-private/utils/escape-format-message-options.ts","webpack://__ember_auto_import__/src/-private/utils/locale.ts","webpack://__ember_auto_import__/src/-private/utils/translations.ts","webpack://__ember_auto_import__/src/services/intl.ts","webpack://__ember_auto_import__/src/-private/formatjs/formats.ts","webpack://__ember_auto_import__/create-intl.ts","webpack://__ember_auto_import__/src/-private/formatjs/format-date.ts","webpack://__ember_auto_import__/src/-private/formatjs/format-date-range.ts","webpack://__ember_auto_import__/src/-private/formatjs/format-display-name.ts","webpack://__ember_auto_import__/src/-private/formatjs/format-list.ts","webpack://__ember_auto_import__/src/-private/formatjs/format-number.ts","webpack://__ember_auto_import__/src/-private/formatjs/format-relative-time.ts","webpack://__ember_auto_import__/src/-private/formatjs/format-time.ts","webpack://__ember_auto_import__/src/-private/utils/get-html-element.ts","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/errors.js","webpack://__ember_auto_import__/node_modules/base64-js/index.js","webpack://__ember_auto_import__/node_modules/fast-deep-equal/index.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/utils.js","webpack://__ember_auto_import__/node_modules/uuid/dist/esm-browser/rng.js","webpack://__ember_auto_import__/node_modules/uuid/dist/esm-browser/regex.js","webpack://__ember_auto_import__/node_modules/uuid/dist/esm-browser/validate.js","webpack://__ember_auto_import__/node_modules/uuid/dist/esm-browser/stringify.js","webpack://__ember_auto_import__/node_modules/uuid/dist/esm-browser/v1.js","webpack://__ember_auto_import__/node_modules/uuid/dist/esm-browser/parse.js","webpack://__ember_auto_import__/node_modules/uuid/dist/esm-browser/v35.js","webpack://__ember_auto_import__/node_modules/uuid/dist/esm-browser/md5.js","webpack://__ember_auto_import__/node_modules/uuid/dist/esm-browser/v3.js","webpack://__ember_auto_import__/node_modules/uuid/dist/esm-browser/sha1.js","webpack://__ember_auto_import__/node_modules/uuid/dist/esm-browser/v5.js","webpack://__ember_auto_import__/node_modules/uuid/dist/esm-browser/v4.js","webpack://__ember_auto_import__/node_modules/uuid/dist/esm-browser/nil.js","webpack://__ember_auto_import__/node_modules/uuid/dist/esm-browser/version.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/loggers.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/messages.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/configuration.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/headers.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/EventSender.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/context.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/EventSummarizer.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/attributeReference.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/EventProcessor.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/InitializationState.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/Stream.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/Requestor.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/AnonymousContextProcessor.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/diagnosticEvents.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/InspectorManager.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/SafeInspector.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/index.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/EventEmitter.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/PersistentStorage.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/ContextFilter.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/promiseCoalescer.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/Identity.js","webpack://__ember_auto_import__/node_modules/launchdarkly-js-sdk-common/src/PersistentFlagStore.js","webpack://__ember_auto_import__/src/basicLogger.js","webpack://__ember_auto_import__/src/httpRequest.js","webpack://__ember_auto_import__/node_modules/escape-string-regexp/index.js","webpack://__ember_auto_import__/src/GoalTracker.js","webpack://__ember_auto_import__/src/GoalManager.js","webpack://__ember_auto_import__/src/browserPlatform.js","webpack://__ember_auto_import__/node_modules/.pnpm/ember-load-initializers@3.0.1_ember-source@6.12.0_@glimmer+component@2.1.1_rsvp@4.8.5_/node_modules/ember-load-initializers/dist/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","webpack://__ember_auto_import__/src/lib/inflections.ts","webpack://__ember_auto_import__/src/lib/inflector.ts","webpack://__ember_auto_import__/src/lib/string.ts","webpack://__ember_auto_import__/node_modules/.pnpm/inflected@2.1.0/node_modules/inflected/dist/esm/inflected.js","webpack://__ember_auto_import__/route-recognizer/util.ts","webpack://__ember_auto_import__/route-recognizer/dsl.ts","webpack://__ember_auto_import__/route-recognizer/normalizer.ts","webpack://__ember_auto_import__/route-recognizer.ts/","webpack://__ember_auto_import__/node_modules/.pnpm/fake-xml-http-request@2.1.2/node_modules/fake-xml-http-request/src/fake-xml-http-request.js","webpack://__ember_auto_import__/node_modules/.pnpm/pretender@3.4.7/node_modules/pretender/dist/pretender.es.js","webpack://__ember_auto_import__/lib/factory.js","webpack://__ember_auto_import__/lib/utils/reference-sort.js","webpack://__ember_auto_import__/lib/identity-manager.js","webpack://__ember_auto_import__/lib/response.js","webpack://__ember_auto_import__/lib/utils/inflector.js","webpack://__ember_auto_import__/lib/assert.js","webpack://__ember_auto_import__/lib/orm/associations/association.js","webpack://__ember_auto_import__/lib/orm/associations/belongs-to.js","webpack://__ember_auto_import__/lib/db-collection.js","webpack://__ember_auto_import__/lib/db.js","webpack://__ember_auto_import__/lib/orm/collection.js","webpack://__ember_auto_import__/lib/orm/polymorphic-collection.js","webpack://__ember_auto_import__/lib/orm/associations/has-many.js","webpack://__ember_auto_import__/lib/route-handlers/base.js","webpack://__ember_auto_import__/lib/route-handlers/function.js","webpack://__ember_auto_import__/lib/route-handlers/object.js","webpack://__ember_auto_import__/lib/route-handlers/shorthands/base.js","webpack://__ember_auto_import__/lib/route-handlers/shorthands/get.js","webpack://__ember_auto_import__/lib/route-handlers/shorthands/post.js","webpack://__ember_auto_import__/lib/route-handlers/shorthands/put.js","webpack://__ember_auto_import__/lib/route-handlers/shorthands/delete.js","webpack://__ember_auto_import__/lib/route-handlers/shorthands/head.js","webpack://__ember_auto_import__/lib/route-handler.js","webpack://__ember_auto_import__/lib/utils/extend.js","webpack://__ember_auto_import__/lib/orm/model.js","webpack://__ember_auto_import__/lib/serializer.js","webpack://__ember_auto_import__/lib/serializers/json-api-serializer.js","webpack://__ember_auto_import__/lib/serializer-registry.js","webpack://__ember_auto_import__/lib/orm/schema.js","webpack://__ember_auto_import__/lib/container.js","webpack://__ember_auto_import__/lib/serializers/active-model-serializer.js","webpack://__ember_auto_import__/src/start-mirage.js","webpack://__ember_auto_import__/lib/serializers/rest-serializer.js","webpack://__ember_auto_import__/node_modules/.pnpm/@miragejs+pretender-node-polyfill@0.1.2/node_modules/@miragejs/pretender-node-polyfill/before.js","webpack://__ember_auto_import__/node_modules/.pnpm/@miragejs+pretender-node-polyfill@0.1.2/node_modules/@miragejs/pretender-node-polyfill/after.js","webpack://__ember_auto_import__/src/services/page-title.ts","webpack://__ember_auto_import__/src/components/power-select-multiple.ts","webpack://__ember_auto_import__/src/components/power-select-multiple/input.ts","webpack://__ember_auto_import__/src/components/power-select-multiple/trigger.ts","webpack://__ember_auto_import__/src/components/power-select/before-options.ts","webpack://__ember_auto_import__/src/components/power-select/input.ts","webpack://__ember_auto_import__/src/components/power-select/label.ts","webpack://__ember_auto_import__/src/components/power-select/no-matches-message.ts","webpack://__ember_auto_import__/src/components/power-select/options.ts","webpack://__ember_auto_import__/src/components/power-select/placeholder.ts","webpack://__ember_auto_import__/src/components/power-select/power-select-group.ts","webpack://__ember_auto_import__/src/components/power-select/search-message.ts","webpack://__ember_auto_import__/src/components/power-select/trigger.ts","webpack://__ember_auto_import__/src/helpers/ember-power-select-is-equal.ts","webpack://__ember_auto_import__/src/helpers/ember-power-select-is-group.ts","webpack://__ember_auto_import__/src/helpers/ember-power-select-is-selected-present.ts","webpack://__ember_auto_import__/node_modules/.pnpm/ember-resolver@13.2.0/node_modules/ember-resolver/addon/string/cache.js","webpack://__ember_auto_import__/node_modules/.pnpm/ember-resolver@13.2.0/node_modules/ember-resolver/addon/string/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/ember-resolver@13.2.0/node_modules/ember-resolver/addon/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/ember-resolver@13.2.0/node_modules/ember-resolver/addon/utils/class-factory.js","webpack://__ember_auto_import__/src/helpers/set.ts","webpack://__ember_auto_import__/src/services/-portal.ts","webpack://__ember_auto_import__/node_modules/.pnpm/glimmer-local-class-transform@1.0.0/node_modules/glimmer-local-class-transform/dist/runtime.js","webpack://__ember_auto_import__/node_modules/.pnpm/diacritics@1.3.0/node_modules/diacritics/index.js","webpack://__ember_auto_import__/src/registry.ts","webpack://__ember_auto_import__/src/notification.ts","webpack://__ember_auto_import__/node_modules/.pnpm/jsondiffpatch@0.7.6/node_modules/jsondiffpatch/lib/date-reviver.js","webpack://__ember_auto_import__/node_modules/.pnpm/jsondiffpatch@0.7.6/node_modules/jsondiffpatch/lib/clone.js","webpack://__ember_auto_import__/node_modules/.pnpm/jsondiffpatch@0.7.6/node_modules/jsondiffpatch/lib/contexts/context.js","webpack://__ember_auto_import__/node_modules/.pnpm/jsondiffpatch@0.7.6/node_modules/jsondiffpatch/lib/contexts/diff.js","webpack://__ember_auto_import__/node_modules/.pnpm/jsondiffpatch@0.7.6/node_modules/jsondiffpatch/lib/contexts/patch.js","webpack://__ember_auto_import__/node_modules/.pnpm/jsondiffpatch@0.7.6/node_modules/jsondiffpatch/lib/contexts/reverse.js","webpack://__ember_auto_import__/node_modules/.pnpm/jsondiffpatch@0.7.6/node_modules/jsondiffpatch/lib/pipe.js","webpack://__ember_auto_import__/node_modules/.pnpm/jsondiffpatch@0.7.6/node_modules/jsondiffpatch/lib/processor.js","webpack://__ember_auto_import__/node_modules/.pnpm/jsondiffpatch@0.7.6/node_modules/jsondiffpatch/lib/filters/lcs.js","webpack://__ember_auto_import__/node_modules/.pnpm/jsondiffpatch@0.7.6/node_modules/jsondiffpatch/lib/filters/arrays.js","webpack://__ember_auto_import__/node_modules/.pnpm/jsondiffpatch@0.7.6/node_modules/jsondiffpatch/lib/filters/dates.js","webpack://__ember_auto_import__/node_modules/.pnpm/jsondiffpatch@0.7.6/node_modules/jsondiffpatch/lib/filters/nested.js","webpack://__ember_auto_import__/node_modules/.pnpm/jsondiffpatch@0.7.6/node_modules/jsondiffpatch/lib/filters/texts.js","webpack://__ember_auto_import__/node_modules/.pnpm/jsondiffpatch@0.7.6/node_modules/jsondiffpatch/lib/filters/trivial.js","webpack://__ember_auto_import__/node_modules/.pnpm/jsondiffpatch@0.7.6/node_modules/jsondiffpatch/lib/diffpatcher.js","webpack://__ember_auto_import__/node_modules/.pnpm/jsondiffpatch@0.7.6/node_modules/jsondiffpatch/lib/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/jsondiffpatch@0.7.6/node_modules/jsondiffpatch/lib/formatters/base.js","webpack://__ember_auto_import__/node_modules/.pnpm/jsondiffpatch@0.7.6/node_modules/jsondiffpatch/lib/formatters/html.js","webpack://__ember_auto_import__/node_modules/.pnpm/macro-decorators@0.1.2/node_modules/macro-decorators/dist/index.js","webpack://__ember_auto_import__/src/defaults.ts","webpack://__ember_auto_import__/src/rules.ts","webpack://__ember_auto_import__/src/Tokenizer.ts","webpack://__ember_auto_import__/src/Lexer.ts","webpack://__ember_auto_import__/src/Renderer.ts","webpack://__ember_auto_import__/src/TextRenderer.ts","webpack://__ember_auto_import__/src/Parser.ts","webpack://__ember_auto_import__/src/Hooks.ts","webpack://__ember_auto_import__/src/Instance.ts","webpack://__ember_auto_import__/src/marked.ts","webpack://__ember_auto_import__/javascript/node_modules/.pnpm/marked-gfm-heading-id@4.1.4_marked@18.0.4/node_modules/marked-gfm-heading-id/lib/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/common/unicode.js","webpack://__ember_auto_import__/node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/common/error-codes.js","webpack://__ember_auto_import__/node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/common/token.js","webpack://__ember_auto_import__/node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/tokenizer/preprocessor.js","webpack://__ember_auto_import__/node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/common/html.js","webpack://__ember_auto_import__/node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/tokenizer/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/parser/open-element-stack.js","webpack://__ember_auto_import__/node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/parser/formatting-element-list.js","webpack://__ember_auto_import__/node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/tree-adapters/default.js","webpack://__ember_auto_import__/node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/common/doctype.js","webpack://__ember_auto_import__/node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/common/foreign-content.js","webpack://__ember_auto_import__/node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/parser/index.js","webpack://__ember_auto_import__/src/escape.ts","webpack://__ember_auto_import__/node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/serializer/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/parse5@8.0.1/node_modules/parse5/dist/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/picomatch@4.0.4/node_modules/picomatch/posix.js","webpack://__ember_auto_import__/node_modules/.pnpm/promisary@1.1.0/node_modules/promisary/dist/utils/hash.js","webpack://__ember_auto_import__/node_modules/.pnpm/promisary@1.1.0/node_modules/promisary/dist/utils/hash-settled.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/browser.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/qrcode.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/finder-pattern.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/galois-field.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/format-info.js","webpack://__ember_auto_import__/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/svg-tag.js","webpack://__ember_auto_import__/node_modules/.pnpm/recaptcha-v3@1.11.3/node_modules/recaptcha-v3/dist/ReCaptcha.js","webpack://__ember_auto_import__/src/generated/decode-data-xml.ts","webpack://__ember_auto_import__/node_modules/.pnpm/is-plain-object@5.0.0/node_modules/is-plain-object/dist/is-plain-object.js","webpack://__ember_auto_import__/javascript/node_modules/.pnpm/nanoid@3.3.19/node_modules/nanoid/non-secure/index.cjs","webpack://__ember_auto_import__/node_modules/.pnpm/semver@7.8.5/node_modules/semver/index.js","webpack://__ember_auto_import__/node_modules/.pnpm/uuid@13.0.2/node_modules/uuid/dist/max.js","webpack://__ember_auto_import__/node_modules/.pnpm/uuid@13.0.2/node_modules/uuid/dist/nil.js","webpack://__ember_auto_import__/node_modules/.pnpm/uuid@13.0.2/node_modules/uuid/dist/regex.js","webpack://__ember_auto_import__/node_modules/.pnpm/uuid@13.0.2/node_modules/uuid/dist/validate.js","webpack://__ember_auto_import__/node_modules/.pnpm/uuid@13.0.2/node_modules/uuid/dist/parse.js","webpack://__ember_auto_import__/node_modules/.pnpm/uuid@13.0.2/node_modules/uuid/dist/stringify.js","webpack://__ember_auto_import__/node_modules/.pnpm/uuid@13.0.2/node_modules/uuid/dist/rng.js","webpack://__ember_auto_import__/node_modules/.pnpm/uuid@13.0.2/node_modules/uuid/dist/v1.js","webpack://__ember_auto_import__/node_modules/.pnpm/uuid@13.0.2/node_modules/uuid/dist/v1ToV6.js","webpack://__ember_auto_import__/node_modules/.pnpm/uuid@13.0.2/node_modules/uuid/dist/md5.js","webpack://__ember_auto_import__/node_modules/.pnpm/uuid@13.0.2/node_modules/uuid/dist/v35.js","webpack://__ember_auto_import__/node_modules/.pnpm/uuid@13.0.2/node_modules/uuid/dist/v3.js","webpack://__ember_auto_import__/node_modules/.pnpm/uuid@13.0.2/node_modules/uuid/dist/native.js","webpack://__ember_auto_import__/node_modules/.pnpm/uuid@13.0.2/node_modules/uuid/dist/v4.js","webpack://__ember_auto_import__/node_modules/.pnpm/uuid@13.0.2/node_modules/uuid/dist/sha1.js","webpack://__ember_auto_import__/node_modules/.pnpm/uuid@13.0.2/node_modules/uuid/dist/v5.js","webpack://__ember_auto_import__/node_modules/.pnpm/uuid@13.0.2/node_modules/uuid/dist/v6.js","webpack://__ember_auto_import__/node_modules/.pnpm/uuid@13.0.2/node_modules/uuid/dist/v6ToV1.js","webpack://__ember_auto_import__/node_modules/.pnpm/uuid@13.0.2/node_modules/uuid/dist/v7.js","webpack://__ember_auto_import__/node_modules/.pnpm/uuid@13.0.2/node_modules/uuid/dist/version.js","webpack://__ember_auto_import__/src/utils/hds-breakpoints.ts","webpack://__ember_auto_import__/src/-private/external/scheduler/policies/enqueued-policy.js","webpack://__ember_auto_import__/src/utils/calculate-position.ts","webpack://__ember_auto_import__/src/utils/has-moved.ts","webpack://__ember_auto_import__/src/-private/task.js","webpack://__ember_auto_import__/node_modules/.pnpm/crelt@1.0.7/node_modules/crelt/index.js"],"sourcesContent":["import { DEBUG } from '@glimmer/env';\nimport { capabilities, setComponentManager } from '@ember/component';\nimport { destroy } from '@ember/destroyable';\nimport { schedule } from '@ember/runloop';\nimport { setOwner } from '@ember/owner';\n\nconst DESTROYING = new WeakMap();\nconst DESTROYED = new WeakMap();\nfunction setDestroying(component) {\n  DESTROYING.set(component, true);\n}\nfunction setDestroyed(component) {\n  DESTROYED.set(component, true);\n}\n\n// This provides a type-safe `WeakMap`: the getter and setter link the key to a\n// specific value. This is how `WeakMap`s actually behave, but the TS type\n// system does not (yet!) have a good way to capture that for types like\n// `WeakMap` where the type is generic over another generic type (here, `Args`).\n\n// SAFETY: this only holds because we *only* acces this when `DEBUG` is `true`.\n// There is not a great way to connect that data in TS at present.\nlet ARGS_SET;\nif (DEBUG) {\n  ARGS_SET = new WeakMap();\n}\n\n// --- Type utilities for component signatures --- //\n// Type-only \"symbol\" to use with `EmptyObject` below, so that it is *not*\n// equivalent to an empty interface.\n\n/**\n * This provides us a way to have a \"fallback\" which represents an empty object,\n * without the downsides of how TS treats `{}`. Specifically: this will\n * correctly leverage \"excess property checking\" so that, given a component\n * which has no named args, if someone invokes it with any named args, they will\n * get a type error.\n *\n * @internal This is exported so declaration emit works (if it were not emitted,\n *   declarations which fall back to it would not work). It is *not* intended for\n *   public usage, and the specific mechanics it uses may change at any time.\n *   The location of this export *is* part of the public API, because moving it\n *   will break existing declarations, but is not legal for end users to import\n *   themselves, so ***DO NOT RELY ON IT***.\n */\n\n/** Given a signature `S`, get back the `Args` type. */\n\n/**\n * Given any allowed shorthand form of a signature, desugars it to its full\n * expanded type.\n *\n * @internal This is only exported so we can avoid duplicating it in\n *   [Glint](https://github.com/typed-ember/glint) or other such tooling. It is\n *   *not* intended for public usage, and the specific mechanics it uses may\n *   change at any time. Although the signature produced by is part of Glimmer's\n *   public API the existence and mechanics of this specific symbol are *not*,\n *   so ***DO NOT RELY ON IT***.\n */\n// The conditional type here is because TS applies conditional types\n// distributively. This means that for union types, checks like `keyof T` get\n// all the keys from all elements of the union, instead of ending up as `never`\n// and then always falling into the `Signature` path instead of falling back to\n// the legacy args handling path.\n\n/**\n * @internal we use this type for convenience internally; inference means users\n *   should not normally need to name it\n */\n\n/**\n * The `Component` class defines an encapsulated UI element that is rendered to\n * the DOM. A component is made up of a template and, optionally, this component\n * object.\n *\n * ## Defining a Component\n *\n * To define a component, subclass `Component` and add your own properties,\n * methods and lifecycle hooks:\n *\n * ```ts\n * import Component from '@glimmer/component';\n *\n * export default class extends Component {\n * }\n * ```\n *\n * ## Lifecycle Hooks\n *\n * Lifecycle hooks allow you to respond to changes to a component, such as when\n * it gets created, rendered, updated or destroyed. To add a lifecycle hook to a\n * component, implement the hook as a method on your component subclass.\n *\n * For example, to be notified when Glimmer has rendered your component so you\n * can attach a legacy jQuery plugin, implement the `didInsertElement()` method:\n *\n * ```ts\n * import Component from '@glimmer/component';\n *\n * export default class extends Component {\n *   didInsertElement() {\n *     $(this.element).pickadate();\n *   }\n * }\n * ```\n *\n * ## Data for Templates\n *\n * `Component`s have two different kinds of data, or state, that can be\n * displayed in templates:\n *\n * 1. Arguments\n * 2. Properties\n *\n * Arguments are data that is passed in to a component from its parent\n * component. For example, if I have a `UserGreeting` component, I can pass it\n * a name and greeting to use:\n *\n * ```hbs\n * <UserGreeting @name=\"Ricardo\" @greeting=\"Olá\" />\n * ```\n *\n * Inside my `UserGreeting` template, I can access the `@name` and `@greeting`\n * arguments that I've been given:\n *\n * ```hbs\n * {{@greeting}}, {{@name}}!\n * ```\n *\n * Arguments are also available inside my component:\n *\n * ```ts\n * console.log(this.args.greeting); // prints \"Olá\"\n * ```\n *\n * Properties, on the other hand, are internal to the component and declared in\n * the class. You can use properties to store data that you want to show in the\n * template, or pass to another component as an argument.\n *\n * ```ts\n * import Component from '@glimmer/component';\n *\n * export default class extends Component {\n *   user = {\n *     name: 'Robbie'\n *   }\n * }\n * ```\n *\n * In the above example, we've defined a component with a `user` property that\n * contains an object with its own `name` property.\n *\n * We can render that property in our template:\n *\n * ```hbs\n * Hello, {{user.name}}!\n * ```\n *\n * We can also take that property and pass it as an argument to the\n * `UserGreeting` component we defined above:\n *\n * ```hbs\n * <UserGreeting @greeting=\"Hello\" @name={{user.name}} />\n * ```\n *\n * ## Arguments vs. Properties\n *\n * Remember, arguments are data that was given to your component by its parent\n * component, and properties are data your component has defined for itself.\n *\n * You can tell the difference between arguments and properties in templates\n * because arguments always start with an `@` sign (think \"A is for arguments\"):\n *\n * ```hbs\n * {{@firstName}}\n * ```\n *\n * We know that `@firstName` came from the parent component, not the current\n * component, because it starts with `@` and is therefore an argument.\n *\n * On the other hand, if we see:\n *\n * ```hbs\n * {{name}}\n * ```\n *\n * We know that `name` is a property on the component. If we want to know where\n * the data is coming from, we can go look at our component class to find out.\n *\n * Inside the component itself, arguments always show up inside the component's\n * `args` property. For example, if `{{@firstName}}` is `Tom` in the template,\n * inside the component `this.args.firstName` would also be `Tom`.\n */\nclass GlimmerComponent {\n  /**\n   * Constructs a new component and assigns itself the passed properties. You\n   * should not construct new components yourself. Instead, Glimmer will\n   * instantiate new components automatically as it renders.\n   *\n   * @param owner\n   * @param args\n   */\n  constructor(owner, args) {\n    if (DEBUG && !(owner !== null && typeof owner === 'object' && ARGS_SET.has(args))) {\n      throw new Error(`You must pass both the owner and args to super() in your component: ${this.constructor.name}. You can pass them directly, or use ...arguments to pass all arguments through.`);\n    }\n    this.args = args;\n    DESTROYING.set(this, false);\n    DESTROYED.set(this, false);\n  }\n\n  /**\n   * Named arguments passed to the component from its parent component.\n   * They can be accessed in JavaScript via `this.args.argumentName` and in the template via `@argumentName`.\n   *\n   * Say you have the following component, which will have two `args`, `firstName` and `lastName`:\n   *\n   * ```hbs\n   * <my-component @firstName=\"Arthur\" @lastName=\"Dent\" />\n   * ```\n   *\n   * If you needed to calculate `fullName` by combining both of them, you would do:\n   *\n   * ```ts\n   * didInsertElement() {\n   *   console.log(`Hi, my full name is ${this.args.firstName} ${this.args.lastName}`);\n   * }\n   * ```\n   *\n   * While in the template you could do:\n   *\n   * ```hbs\n   * <p>Welcome, {{@firstName}} {{@lastName}}!</p>\n   * ```\n   */\n  args;\n  get isDestroying() {\n    return DESTROYING.get(this) || false;\n  }\n  get isDestroyed() {\n    return DESTROYED.get(this) || false;\n  }\n\n  /**\n   * Called before the component has been removed from the DOM.\n   */\n  willDestroy() {}\n}\n\nclass BaseComponentManager {\n  owner;\n  constructor(owner) {\n    this.owner = owner;\n  }\n  createComponent(ComponentClass, args) {\n    if (DEBUG) {\n      ARGS_SET.set(args.named, true);\n    }\n    return new ComponentClass(this.owner, args.named);\n  }\n  getContext(component) {\n    return component;\n  }\n}\n\nconst CAPABILITIES = capabilities('3.13', {\n  destructor: true,\n  asyncLifecycleCallbacks: false,\n  updateHook: false\n});\nfunction scheduledDestroyComponent(component) {\n  if (component.isDestroyed) {\n    return;\n  }\n  destroy(component);\n  setDestroyed(component);\n}\n\n/**\n * This component manager runs in Ember.js environments and extends the base component manager to:\n *\n * 1. Properly destroy the component's associated `meta` data structure\n * 2. Schedule destruction using Ember's runloop\n */\nclass EmberGlimmerComponentManager extends BaseComponentManager {\n  capabilities = CAPABILITIES;\n  destroyComponent(component) {\n    if (component.isDestroying) {\n      return;\n    }\n    setDestroying(component);\n    schedule('actions', component, component.willDestroy);\n    schedule('destroy', this, scheduledDestroyComponent, component);\n  }\n}\n\n/**\n  A component is a reusable UI element that consists of a `.hbs` template and an\n  optional JavaScript class that defines its behavior. For example, someone\n  might make a `button` in the template and handle the click behavior in the\n  JavaScript file that shares the same name as the template.\n\n  Components are broken down into two categories:\n\n  - Components _without_ JavaScript, that are based only on a template. These\n    are called Template-only or TO components.\n  - Components _with_ JavaScript, which consist of a template and a backing\n    class.\n\n  Ember ships with two types of JavaScript classes for components:\n\n  1. Glimmer components, imported from `@glimmer/component`, which are the\n     default components for Ember Octane (3.15) and more recent editions.\n  2. Classic components, imported from `@ember/component`, which were the\n     default for older editions of Ember (pre 3.15).\n\n  Below is the documentation for Template-only and Glimmer components. If you\n  are looking for the API documentation for Classic components, it is\n  [available here](/ember/release/classes/Component). The source code for\n  Glimmer components can be found in [`@glimmer/component`](https://github.com/glimmerjs/glimmer.js/tree/master/packages/%40glimmer/component).\n\n  ## Defining a Template-only Component\n\n  The simplest way to create a component is to create a template file in\n  `app/templates/components`. For example, if you name a template\n  `app/templates/components/person-profile.hbs`:\n\n  ```app/templates/components/person-profile.hbs\n  <h1>{{@person.name}}</h1>\n  <img src={{@person.avatar}}>\n  <p class='signature'>{{@person.signature}}</p>\n  ```\n\n  You will be able to use `<PersonProfile />` to invoke this component elsewhere\n  in your application:\n\n  ```app/templates/application.hbs\n  <PersonProfile @person={{this.currentUser}} />\n  ```\n\n  Note that component names are capitalized here in order to distinguish them\n  from regular HTML elements, but they are dasherized in the file system.\n\n  While the angle bracket invocation form is generally preferred, it is also\n  possible to invoke the same component with the `{{person-profile}}` syntax:\n\n  ```app/templates/application.hbs\n  {{person-profile person=this.currentUser}}\n  ```\n\n  Note that with this syntax, you use dashes in the component name and\n  arguments are passed without the `@` sign.\n\n  In both cases, Ember will render the content of the component template we\n  created above. The end result will be something like this:\n\n  ```html\n  <h1>Tomster</h1>\n  <img src=\"https://emberjs.com/tomster.jpg\">\n  <p class='signature'>Out of office this week</p>\n  ```\n\n  ## File System Nesting\n\n  Components can be nested inside sub-folders for logical groupping. For\n  example, if we placed our template in\n  `app/templates/components/person/short-profile.hbs`, we can invoke it as\n  `<Person::ShortProfile />`:\n\n  ```app/templates/application.hbs\n  <Person::ShortProfile @person={{this.currentUser}} />\n  ```\n\n  Or equivalently, `{{person/short-profile}}`:\n\n  ```app/templates/application.hbs\n  {{person/short-profile person=this.currentUser}}\n  ```\n\n  ## Using Blocks\n\n  You can use `yield` inside a template to include the **contents** of any block\n  attached to the component. For instance, if we added a `{{yield}}` to our\n  component like so:\n\n  ```app/templates/components/person-profile.hbs\n  <h1>{{@person.name}}</h1>\n  {{yield}}\n  ```\n\n  We could then invoke it like this:\n\n  ```handlebars\n  <PersonProfile @person={{this.currentUser}}>\n    <p>Admin mode</p>\n  </PersonProfile>\n  ```\n\n  or with curly syntax like this:\n\n  ```handlebars\n  {{#person-profile person=this.currentUser}}\n    <p>Admin mode</p>\n  {{/person-profile}}\n  ```\n\n  And the content passed in between the brackets of the component would be\n  rendered in the same place as the `{{yield}}` within it, replacing it.\n\n  Blocks are executed in their original context, meaning they have access to the\n  scope and any in-scope variables where they were defined.\n\n  ### Passing parameters to blocks\n\n  You can also pass positional parameters to `{{yield}}`, which are then made\n  available in the block:\n\n  ```app/templates/components/person-profile.hbs\n  <h1>{{@person.name}}</h1>\n  {{yield @person.signature}}\n  ```\n\n  We can then use this value in the block like so:\n\n  ```handlebars\n  <PersonProfile @person={{this.currentUser}} as |signature|>\n    {{signature}}\n  </PersonProfile>\n  ```\n\n  ### Passing multiple blocks\n\n  You can pass multiple blocks to a component by giving them names, and\n  specifying which block you are yielding to with `{{yield}}`. For instance, if\n  we wanted to add a way for users to customize the title of our\n  `<PersonProfile>` component, we could add a named block inside of the header:\n\n  ```app/templates/components/person-profile.hbs\n  <h1>{{yield to=\"title\"}}</h1>\n  {{yield}}\n  ```\n\n  This component could then be invoked like so:\n\n  ```handlebars\n  <PersonProfile @person={{this.currentUser}}>\n    <:title>{{this.currentUser.name}}</:title>\n    <:default>{{this.currentUser.signature}}</:default>\n  </PersonProfile>\n  ```\n\n  When passing named blocks, you must name every block, including the `default`\n  block, which is the block that is defined if you do not pass a `to` parameter\n  to `{{yield}}`. Whenever you invoke a component without passing explicitly\n  named blocks, the passed block is considered the `default` block.\n\n  ### Passing parameters to named blocks\n\n  You can also pass parameters to named blocks:\n\n  ```app/templates/components/person-profile.hbs\n  <h1>{{yield @person.name to=\"title\"}}</h1>\n  {{yield @person.signature}}\n  ```\n\n  These parameters can then be used like so:\n\n  ```handlebars\n  <PersonProfile @person={{this.currentUser}}>\n    <:title as |name|>{{name}}</:title>\n    <:default as |signature|>{{signature}}</:default>\n  </PersonProfile>\n  ```\n\n  ### Checking to see if a block exists\n\n  You can also check to see if a block exists using the `(has-block)` keyword,\n  and conditionally use it, or provide a default template instead.\n\n  ```app/templates/components/person-profile.hbs\n  <h1>\n    {{#if (has-block \"title\")}}\n      {{yield @person.name to=\"title\"}}\n    {{else}}\n      {{@person.name}}\n    {{/if}}\n  </h1>\n\n  {{#if (has-block)}}\n    {{yield @person.signature}}\n  {{else}}\n    {{@person.signature}}\n  {{/if}}\n  ```\n\n  With this template, we can then optionally pass in one block, both blocks, or\n  none at all:\n\n  ```handlebars\n  {{! passing both blocks }}\n  <PersonProfile @person={{this.currentUser}}>\n    <:title as |name|>{{name}}</:title>\n    <:default as |signature|>{{signature}}</:default>\n  </PersonProfile>\n\n  {{! passing just the title block }}\n  <PersonProfile @person={{this.currentUser}}>\n    <:title as |name|>{{name}}</:title>\n  </PersonProfile>\n\n  {{! passing just the default block }}\n  <PersonProfile @person={{this.currentUser}} as |signature|>\n    {{signature}}\n  </PersonProfile>\n\n  {{! not passing any blocks }}\n  <PersonProfile @person={{this.currentUser}}/>\n  ```\n\n  ### Checking to see if a block has parameters\n\n  We can also check if a block receives parameters using the `(has-block-params)`\n  keyword, and conditionally yield different values if so.\n\n  ```app/templates/components/person-profile.hbs\n  {{#if (has-block-params)}}\n    {{yield @person.signature}}\n  {{else}}\n    {{yield}}\n  {{/if}}\n  ```\n\n  ## Customizing Components With JavaScript\n\n  To add JavaScript to a component, create a JavaScript file in the same\n  location as the template file, with the same name, and export a subclass\n  of `Component` as the default value. For example, to add Javascript to the\n  `PersonProfile` component which we defined above, we would create\n  `app/components/person-profile.js` and export our class as the default, like\n  so:\n\n  ```app/components/person-profile.js\n  import Component from '@glimmer/component';\n\n  export default class PersonProfileComponent extends Component {\n    get displayName() {\n      let { title, firstName, lastName } = this.args.person;\n\n      if (title) {\n        return `${title} ${lastName}`;\n      } else {\n        return `${firstName} ${lastName}`;\n      }\n    })\n  }\n  ```\n\n  You can add your own properties, methods, and lifecycle hooks to this\n  subclass to customize its behavior, and you can reference the instance of the\n  class in your template using `{{this}}`. For instance, we could access the\n  `displayName` property of our `PersonProfile` component instance in the\n  template like this:\n\n  ```app/templates/components/person-profile.hbs\n  <h1>{{this.displayName}}</h1>\n  {{yield}}\n  ```\n\n  ## `constructor`\n\n  params: `owner` object and `args` object\n\n  Constructs a new component and assigns itself the passed properties. The\n  constructor is run whenever a new instance of the component is created, and\n  can be used to setup the initial state of the component.\n\n  ```javascript\n  import Component from '@glimmer/component';\n\n  export default class SomeComponent extends Component {\n    constructor(owner, args) {\n      super(owner, args);\n\n      if (this.args.displayMode === 'list') {\n        this.items = [];\n      }\n    }\n  }\n  ```\n\n  Service injections and arguments are available in the constructor.\n\n  ```javascript\n  import Component from '@glimmer/component';\n  import { service } from '@ember/service';\n\n  export default class SomeComponent extends Component {\n    @service myAnimations;\n\n    constructor(owner, args) {\n      super(owner, args);\n\n      if (this.args.fadeIn === true) {\n        this.myAnimations.register(this, 'fade-in');\n      }\n    }\n  }\n  ```\n\n  ## `willDestroy`\n\n  `willDestroy` is called after the component has been removed from the DOM, but\n  before the component is fully destroyed. This lifecycle hook can be used to\n  cleanup the component and any related state.\n\n  ```javascript\n  import Component from '@glimmer/component';\n  import { service } from '@ember/service';\n\n  export default class SomeComponent extends Component {\n    @service myAnimations;\n\n    willDestroy() {\n      super.willDestroy();\n\n      this.myAnimations.unregister(this);\n    }\n  }\n  ```\n\n  ## `args`\n\n  The `args` property of Glimmer components is an object that contains the\n  _arguments_ that are passed to the component. For instance, the\n  following component usage:\n\n  ```handlebars\n  <SomeComponent @fadeIn={{true}} />\n  ```\n\n  Would result in the following `args` object to be passed to the component:\n\n  ```javascript\n  { fadeIn: true }\n  ```\n\n  `args` can be accessed at any point in the component lifecycle, including\n  `constructor` and `willDestroy`. They are also automatically marked as tracked\n  properties, and they can be depended on as computed property dependencies:\n\n  ```javascript\n  import Component from '@glimmer/component';\n  import { computed } from '@ember/object';\n\n  export default class SomeComponent extends Component {\n\n    @computed('args.someValue')\n    get computedGetter() {\n      // updates whenever args.someValue updates\n      return this.args.someValue;\n    }\n\n    get standardGetter() {\n      // updates whenever args.anotherValue updates (Ember 3.13+)\n      return this.args.anotherValue;\n    }\n  }\n  ```\n\n  ## `isDestroying`\n\n  A boolean flag to tell if the component is in the process of destroying. This is set to\n  true before `willDestroy` is called.\n\n  ## `isDestroyed`\n  A boolean to tell if the component has been fully destroyed. This is set to true\n  after `willDestroy` is called.\n\n  @module @glimmer/component\n  @public\n*/\nclass Component extends GlimmerComponent {\n  constructor(owner, args) {\n    super(owner, args);\n    if (DEBUG && !(owner !== null && typeof owner === 'object')) {\n      throw new Error(`You must pass both the owner and args to super() in your component: ${this.constructor.name}. You can pass them directly, or use ...arguments to pass all arguments through.`);\n    }\n    setOwner(this, owner);\n  }\n}\nsetComponentManager(owner => {\n  return new EmberGlimmerComponentManager(owner);\n}, Component);\n\nexport { Component as default };\n","//! moment.js\n//! version : 2.31.0\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks() {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback(callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return (\n            input instanceof Array ||\n            Object.prototype.toString.call(input) === '[object Array]'\n        );\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return (\n            input != null &&\n            Object.prototype.toString.call(input) === '[object Object]'\n        );\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return Object.getOwnPropertyNames(obj).length === 0;\n        } else {\n            var k;\n            for (k in obj) {\n                if (hasOwnProp(obj, k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return (\n            typeof input === 'number' ||\n            Object.prototype.toString.call(input) === '[object Number]'\n        );\n    }\n\n    function isDate(input) {\n        return (\n            input instanceof Date ||\n            Object.prototype.toString.call(input) === '[object Date]'\n        );\n    }\n\n    function map(arr, fn) {\n        var res = [],\n            i,\n            arrLen = arr.length;\n        for (i = 0; i < arrLen; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty: false,\n            unusedTokens: [],\n            unusedInput: [],\n            overflow: -2,\n            charsLeftOver: 0,\n            nullInput: false,\n            invalidEra: null,\n            invalidMonth: null,\n            invalidOffset: null,\n            invalidFormat: false,\n            userInvalidated: false,\n            iso: false,\n            parsedDateParts: [],\n            era: null,\n            meridiem: null,\n            rfc2822: false,\n            weekdayMismatch: false,\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this),\n                len = t.length >>> 0,\n                i;\n\n            for (i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid$2(m) {\n        var flags = null,\n            parsedParts = false,\n            isNowValid = m._d && !isNaN(m._d.getTime());\n        if (isNowValid) {\n            flags = getParsingFlags(m);\n            parsedParts = some.call(flags.parsedDateParts, function (i) {\n                return i != null;\n            });\n            isNowValid =\n                flags.overflow < 0 &&\n                !flags.empty &&\n                !flags.invalidEra &&\n                !flags.invalidMonth &&\n                !flags.invalidOffset &&\n                !flags.invalidWeekday &&\n                !flags.weekdayMismatch &&\n                !flags.nullInput &&\n                !flags.invalidFormat &&\n                !flags.userInvalidated &&\n                (!flags.meridiem || (flags.meridiem && parsedParts));\n            if (m._strict) {\n                isNowValid =\n                    isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n        }\n        if (Object.isFrozen == null || !Object.isFrozen(m)) {\n            m._isValid = isNowValid;\n        } else {\n            return isNowValid;\n        }\n        return m._isValid;\n    }\n\n    function createInvalid$1(flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        } else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = (hooks.momentProperties = []),\n        updateInProgress = false;\n\n    function copyConfig(to, from) {\n        var i,\n            prop,\n            val,\n            momentPropertiesLen = momentProperties.length;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentPropertiesLen > 0) {\n            for (i = 0; i < momentPropertiesLen; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment(obj) {\n        return (\n            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n        );\n    }\n\n    function warn(msg) {\n        if (\n            hooks.suppressDeprecationWarnings === false &&\n            typeof console !== 'undefined' &&\n            console.warn\n        ) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [],\n                    arg,\n                    i,\n                    key,\n                    argLen = arguments.length;\n                for (i = 0; i < argLen; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (key in arguments[0]) {\n                            if (hasOwnProp(arguments[0], key)) {\n                                arg += key + ': ' + arguments[0][key] + ', ';\n                            }\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(\n                    msg +\n                        '\\nArguments: ' +\n                        Array.prototype.slice.call(args).join('') +\n                        '\\n' +\n                        new Error().stack\n                );\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg + '\\n' + new Error().stack);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    var aliases = {\n        D: 'date',\n        dates: 'date',\n        date: 'date',\n        d: 'day',\n        days: 'day',\n        day: 'day',\n        e: 'weekday',\n        weekdays: 'weekday',\n        weekday: 'weekday',\n        E: 'isoWeekday',\n        isoweekdays: 'isoWeekday',\n        isoweekday: 'isoWeekday',\n        DDD: 'dayOfYear',\n        dayofyears: 'dayOfYear',\n        dayofyear: 'dayOfYear',\n        h: 'hour',\n        hours: 'hour',\n        hour: 'hour',\n        ms: 'millisecond',\n        milliseconds: 'millisecond',\n        millisecond: 'millisecond',\n        m: 'minute',\n        minutes: 'minute',\n        minute: 'minute',\n        M: 'month',\n        months: 'month',\n        month: 'month',\n        Q: 'quarter',\n        quarters: 'quarter',\n        quarter: 'quarter',\n        s: 'second',\n        seconds: 'second',\n        second: 'second',\n        gg: 'weekYear',\n        weekyears: 'weekYear',\n        weekyear: 'weekYear',\n        GG: 'isoWeekYear',\n        isoweekyears: 'isoWeekYear',\n        isoweekyear: 'isoWeekYear',\n        w: 'week',\n        weeks: 'week',\n        week: 'week',\n        W: 'isoWeek',\n        isoweeks: 'isoWeek',\n        isoweek: 'isoWeek',\n        y: 'year',\n        years: 'year',\n        year: 'year',\n    };\n\n    function normalizeUnits(units) {\n        return typeof units === 'string'\n            ? aliases[units] || aliases[units.toLowerCase()]\n            : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {\n        date: 9,\n        day: 11,\n        weekday: 11,\n        isoWeekday: 11,\n        dayOfYear: 4,\n        hour: 13,\n        millisecond: 16,\n        minute: 14,\n        month: 8,\n        quarter: 7,\n        second: 15,\n        weekYear: 1,\n        isoWeekYear: 1,\n        week: 5,\n        isoWeek: 5,\n        year: 1,\n    };\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [],\n            u;\n        for (u in unitsObj) {\n            if (hasOwnProp(unitsObj, u)) {\n                units.push({ unit: u, priority: priorities[u] });\n            }\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (\n            (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n            absNumber\n        );\n    }\n\n    var formattingTokens =\n            /(\\[[^\\[]*\\])|(\\\\e)|(\\\\)?(eHHmm|[Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n        localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n        formatFunctions = {},\n        formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken(token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(\n                    func.apply(this, arguments),\n                    token\n                );\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens),\n            i,\n            length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '',\n                i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i])\n                    ? array[i].call(mom, format)\n                    : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        var cacheKey = '$' + format;\n        if (!hasOwnProp(formatFunctions, cacheKey)) {\n            formatFunctions[cacheKey] = makeFormatFunction(format);\n        }\n\n        return formatFunctions[cacheKey](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(\n                localFormattingTokens,\n                replaceLongDateFormatTokens\n            );\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var match1 = /\\d/, //       0 - 9\n        match2 = /\\d\\d/, //      00 - 99\n        match3 = /\\d{3}/, //     000 - 999\n        match4 = /\\d{4}/, //    0000 - 9999\n        match6 = /[+-]?\\d{6}/, // -999999 - 999999\n        match1to2 = /\\d\\d?/, //       0 - 99\n        match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n        match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n        match1to3 = /\\d{1,3}/, //       0 - 999\n        match1to4 = /\\d{1,4}/, //       0 - 9999\n        match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n        matchUnsigned = /\\d+/, //       0 - inf\n        matchSigned = /[+-]?\\d+/, //    -inf - inf\n        matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n        matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n        matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n        // any word (or two) characters or numbers including two/three word month in arabic.\n        // includes scottish gaelic two word and hyphenated months\n        matchWord =\n            /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n        match1to2NoLeadingZero = /^[1-9]\\d?/, //         1-99\n        match1to2HasZero = /^([1-9]\\d|\\d)/, //           0-99\n        regexes;\n\n    regexes = {};\n\n    function addRegexToken(token, regex, strictRegex) {\n        regexes[token] = isFunction(regex)\n            ? regex\n            : function (isStrict, localeData) {\n                  return isStrict && strictRegex ? strictRegex : regex;\n              };\n    }\n\n    function getParseRegexForToken(token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(\n            s\n                .replace('\\\\', '')\n                .replace(\n                    /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n                    function (matched, p1, p2, p3, p4) {\n                        return p1 || p2 || p3 || p4;\n                    }\n                )\n        );\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    function absFloor(number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    var tokens = {};\n\n    function addParseToken(token, callback) {\n        var i,\n            func = callback,\n            tokenLen;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        tokenLen = token.length;\n        for (i = 0; i < tokenLen; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken(token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    var YEAR = 0,\n        MONTH = 1,\n        DATE = 2,\n        HOUR = 3,\n        MINUTE = 4,\n        SECOND = 5,\n        MILLISECOND = 6,\n        WEEK = 7,\n        WEEKDAY = 8;\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY', 4], 0, 'year');\n    addFormatToken(0, ['YYYYY', 5], 0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // PARSING\n\n    addRegexToken('Y', matchSigned);\n    addRegexToken('YY', match1to2, match2);\n    addRegexToken('YYYY', match1to4, match4);\n    addRegexToken('YYYYY', match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] =\n            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear() {\n        return isLeapYear(this.year());\n    }\n\n    function makeGetSet(unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get$2(this, unit);\n            }\n        };\n    }\n\n    function get$2(mom, unit) {\n        if (!mom.isValid()) {\n            return NaN;\n        }\n\n        var d = mom._d,\n            isUTC = mom._isUTC;\n\n        switch (unit) {\n            case 'Milliseconds':\n                return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n            case 'Seconds':\n                return isUTC ? d.getUTCSeconds() : d.getSeconds();\n            case 'Minutes':\n                return isUTC ? d.getUTCMinutes() : d.getMinutes();\n            case 'Hours':\n                return isUTC ? d.getUTCHours() : d.getHours();\n            case 'Date':\n                return isUTC ? d.getUTCDate() : d.getDate();\n            case 'Day':\n                return isUTC ? d.getUTCDay() : d.getDay();\n            case 'Month':\n                return isUTC ? d.getUTCMonth() : d.getMonth();\n            case 'FullYear':\n                return isUTC ? d.getUTCFullYear() : d.getFullYear();\n            default:\n                return NaN; // Just in case\n        }\n    }\n\n    function set$1(mom, unit, value) {\n        var d, isUTC, year, month, date;\n\n        if (!mom.isValid() || isNaN(value)) {\n            return;\n        }\n\n        d = mom._d;\n        isUTC = mom._isUTC;\n\n        switch (unit) {\n            case 'Milliseconds':\n                return void (isUTC\n                    ? d.setUTCMilliseconds(value)\n                    : d.setMilliseconds(value));\n            case 'Seconds':\n                return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n            case 'Minutes':\n                return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n            case 'Hours':\n                return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n            case 'Date':\n                return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n            // case 'Day': // Not real\n            //    return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n            // case 'Month': // Not used because we need to pass two variables\n            //     return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n            case 'FullYear':\n                break; // See below ...\n            default:\n                return; // Just in case\n        }\n\n        year = value;\n        month = mom.month();\n        date = mom.date();\n        date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n        void (isUTC\n            ? d.setUTCFullYear(year, month, date)\n            : d.setFullYear(year, month, date));\n    }\n\n    // MOMENTS\n\n    function stringGet(units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n    function stringSet(units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units),\n                i,\n                prioritizedLen = prioritized.length;\n            for (i = 0; i < prioritizedLen; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    function mod$1(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod$1(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1\n            ? isLeapYear(year)\n                ? 29\n                : 28\n            : 31 - ((modMonth % 7) % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // PARSING\n\n    addRegexToken('M', match1to2, match1to2NoLeadingZero);\n    addRegexToken('MM', match1to2, match2);\n    addRegexToken('MMM', function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var defaultLocaleMonths =\n            'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n                '_'\n            ),\n        defaultLocaleMonthsShort =\n            'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n        defaultMonthsShortRegex = matchWord,\n        defaultMonthsRegex = matchWord,\n        monthsParseProperties = [\n            'monthsParse',\n            'longMonthsParse',\n            'shortMonthsParse',\n            'monthsRegex',\n            'monthsShortRegex',\n            'monthsStrictRegex',\n            'monthsShortStrictRegex',\n        ];\n\n    function clearMonthsParseCache(locale, config) {\n        var i, prop;\n        for (i = 0; i < monthsParseProperties.length; i++) {\n            prop = monthsParseProperties[i];\n            if (!hasOwnProp(config, prop)) {\n                delete locale['_' + prop];\n            }\n        }\n    }\n\n    function localeMonths(m, format) {\n        if (!m) {\n            return isArray(this._months)\n                ? this._months\n                : this._months['standalone'];\n        }\n        return isArray(this._months)\n            ? this._months[m.month()]\n            : this._months[\n                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n                      ? 'format'\n                      : 'standalone'\n              ][m.month()];\n    }\n\n    function localeMonthsShort(m, format) {\n        if (!m) {\n            return isArray(this._monthsShort)\n                ? this._monthsShort\n                : this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort)\n            ? this._monthsShort[m.month()]\n            : this._monthsShort[\n                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n              ][m.month()];\n    }\n\n    function handleStrictParse$1(monthName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse(monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse$1.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp(\n                    '^' + this.months(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n                this._shortMonthsParse[i] = new RegExp(\n                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex =\n                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'MMMM' &&\n                this._longMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'MMM' &&\n                this._shortMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth(mom, value) {\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        var month = value,\n            date = mom.date();\n\n        date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n        void (mom._isUTC\n            ? mom._d.setUTCMonth(month, date)\n            : mom._d.setMonth(month, date));\n        return mom;\n    }\n\n    function getSetMonth(value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get$2(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth() {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    function monthsShortRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict\n                ? this._monthsShortStrictRegex\n                : this._monthsShortRegex;\n        }\n    }\n\n    function monthsRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict\n                ? this._monthsStrictRegex\n                : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            shortP,\n            longP;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortP = regexEscape(this.monthsShort(mom, ''));\n            longP = regexEscape(this.months(mom, ''));\n            shortPieces.push(shortP);\n            longPieces.push(longP);\n            mixedPieces.push(longP);\n            mixedPieces.push(shortP);\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._monthsShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n    addFormatToken('eHHmm', 0, 0, function () {\n        return (\n            '' +\n            this.weekday() +\n            zeroFill(this.hours(), 2) +\n            zeroFill(this.minutes(), 2)\n        );\n    });\n\n    // PARSING\n\n    addRegexToken('d', match1to2);\n    addRegexToken('e', match1to2);\n    addRegexToken('E', match1to2);\n    addRegexToken('eHHmm', match5to6);\n    addRegexToken('dd', function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd', function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd', function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    addWeekParseToken('eHHmm', function (input, week, config) {\n        var weekdayEnd = input.length - 4;\n\n        week.e = toInt(input.substr(0, weekdayEnd));\n        config._a[HOUR] = toInt(input.substr(weekdayEnd, 2));\n        config._a[MINUTE] = toInt(input.substr(weekdayEnd + 2));\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays(ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays =\n            'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        defaultWeekdaysRegex = matchWord,\n        defaultWeekdaysShortRegex = matchWord,\n        defaultWeekdaysMinRegex = matchWord,\n        weekdaysParseProperties = [\n            'weekdaysParse',\n            'fullWeekdaysParse',\n            'shortWeekdaysParse',\n            'minWeekdaysParse',\n            'weekdaysRegex',\n            'weekdaysShortRegex',\n            'weekdaysMinRegex',\n            'weekdaysStrictRegex',\n            'weekdaysShortStrictRegex',\n            'weekdaysMinStrictRegex',\n        ];\n\n    function clearWeekdaysParseCache(locale, config) {\n        var i, prop;\n        for (i = 0; i < weekdaysParseProperties.length; i++) {\n            prop = weekdaysParseProperties[i];\n            if (!hasOwnProp(config, prop)) {\n                delete locale['_' + prop];\n            }\n        }\n    }\n\n    function localeWeekdays(m, format) {\n        var weekdays = isArray(this._weekdays)\n            ? this._weekdays\n            : this._weekdays[\n                  m && m !== true && this._weekdays.isFormat.test(format)\n                      ? 'format'\n                      : 'standalone'\n              ];\n        return m === true\n            ? shiftWeekdays(weekdays, this._week.dow)\n            : m\n              ? weekdays[m.day()]\n              : weekdays;\n    }\n\n    function localeWeekdaysShort(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : m\n              ? this._weekdaysShort[m.day()]\n              : this._weekdaysShort;\n    }\n\n    function localeWeekdaysMin(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : m\n              ? this._weekdaysMin[m.day()]\n              : this._weekdaysMin;\n    }\n\n    function handleStrictParse(weekdayName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse(weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._shortWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._minWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n            }\n            if (!this._weekdaysParse[i]) {\n                regex =\n                    '^' +\n                    this.weekdays(mom, '') +\n                    '|^' +\n                    this.weekdaysShort(mom, '') +\n                    '|^' +\n                    this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'dddd' &&\n                this._fullWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'ddd' &&\n                this._shortWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'dd' &&\n                this._minWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        var day = get$2(this, 'Day');\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    function weekdaysRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict\n                ? this._weekdaysStrictRegex\n                : this._weekdaysRegex;\n        }\n    }\n\n    function weekdaysShortRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict\n                ? this._weekdaysShortStrictRegex\n                : this._weekdaysShortRegex;\n        }\n    }\n\n    function weekdaysMinRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict\n                ? this._weekdaysMinStrictRegex\n                : this._weekdaysMinRegex;\n        }\n    }\n\n    function computeWeekdaysParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [],\n            shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            minp,\n            shortp,\n            longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = regexEscape(this.weekdaysMin(mom, ''));\n            shortp = regexEscape(this.weekdaysShort(mom, ''));\n            longp = regexEscape(this.weekdays(mom, ''));\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysMinStrictRegex = new RegExp(\n            '^(' + minPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    function set(config) {\n        var prop, i;\n        clearMonthsParseCache(this, config);\n        clearWeekdaysParseCache(this, config);\n        for (i in config) {\n            if (hasOwnProp(config, i)) {\n                prop = config[i];\n                if (isFunction(prop)) {\n                    this[i] = prop;\n                } else {\n                    this['_' + i] = prop;\n                }\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' +\n                /\\d{1,2}/.source\n        );\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig),\n            prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (\n                hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])\n            ) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i,\n                res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay: '[Today at] LT',\n        nextDay: '[Tomorrow at] LT',\n        nextWeek: 'dddd [at] LT',\n        lastDay: '[Yesterday at] LT',\n        lastWeek: '[Last] dddd [at] LT',\n        sameElse: 'L',\n    };\n\n    function calendar$1(key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    var defaultLongDateFormat = {\n        LTS: 'h:mm:ss A',\n        LT: 'h:mm A',\n        L: 'MM/DD/YYYY',\n        LL: 'MMMM D, YYYY',\n        LLL: 'MMMM D, YYYY h:mm A',\n        LLLL: 'dddd, MMMM D, YYYY h:mm A',\n    };\n\n    function longDateFormat(key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()],\n            formatCache = this._longDateFormatCache;\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        if (\n            formatCache &&\n            formatCache[key] &&\n            formatCache[key].formatUpper === formatUpper\n        ) {\n            return formatCache[key].format;\n        }\n\n        format = formatUpper\n            .match(formattingTokens)\n            .map(function (tok) {\n                if (\n                    tok === 'MMMM' ||\n                    tok === 'MM' ||\n                    tok === 'DD' ||\n                    tok === 'dddd'\n                ) {\n                    return tok.slice(1);\n                }\n                return tok;\n            })\n            .join('');\n\n        if (!formatCache) {\n            formatCache = this._longDateFormatCache = {};\n        }\n        formatCache[key] = {\n            formatUpper: formatUpper,\n            format: format,\n        };\n        return format;\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate() {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d',\n        defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal(number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future: 'in %s',\n        past: '%s ago',\n        s: 'a few seconds',\n        ss: '%d seconds',\n        m: 'a minute',\n        mm: '%d minutes',\n        h: 'an hour',\n        hh: '%d hours',\n        d: 'a day',\n        dd: '%d days',\n        w: 'a week',\n        ww: '%d weeks',\n        M: 'a month',\n        MM: '%d months',\n        y: 'a year',\n        yy: '%d years',\n    };\n\n    function relativeTimeWithoutPostformat(\n        number,\n        withoutSuffix,\n        string,\n        isFuture\n    ) {\n        var output = this._relativeTime[string];\n        return isFunction(output)\n            ? output(number, withoutSuffix, string, isFuture)\n            : output.replace(/%d/i, number);\n    }\n\n    function relativeTime$1(number, withoutSuffix, string, isFuture) {\n        return this.postformat(\n            relativeTimeWithoutPostformat.call(\n                this,\n                number,\n                withoutSuffix,\n                string,\n                isFuture\n            )\n        );\n    }\n\n    function pastFutureWithoutPostformat(diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    function pastFuture(diff, output) {\n        return this.postformat(\n            pastFutureWithoutPostformat.call(this, diff, output)\n        );\n    }\n\n    function createDate(y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate(y) {\n        var date, args;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear,\n            resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear,\n        };\n    }\n\n    function weekOfYearFromDayOfYear(year, dayOfYear, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            week = Math.floor((dayOfYear - weekOffset - 1) / 7) + 1,\n            resWeek,\n            resYear;\n\n        if (week < 1) {\n            resYear = year - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(year, dow, doy)) {\n            resWeek = week - weeksInYear(year, dow, doy);\n            resYear = year + 1;\n        } else {\n            resYear = year;\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear,\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        return weekOfYearFromDayOfYear(mom.year(), mom.dayOfYear(), dow, doy);\n    }\n\n    function weekOfYearFromDate(year, month, date, dow, doy) {\n        var dayOfYear =\n            Math.round(\n                (createUTCDate(year, month, date) - createUTCDate(year, 0, 1)) /\n                    864e5\n            ) + 1;\n\n        return weekOfYearFromDayOfYear(year, dayOfYear, dow, doy);\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // PARSING\n\n    addRegexToken('w', match1to2, match1to2NoLeadingZero);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W', match1to2, match1to2NoLeadingZero);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(\n        ['w', 'ww', 'W', 'WW'],\n        function (input, week, config, token) {\n            week[token.substr(0, 1)] = toInt(input);\n        }\n    );\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek(mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow: 0, // Sunday is the first day of the week.\n        doy: 6, // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek() {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear() {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek(input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek(input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return (\n            '' +\n            hFormat.apply(this) +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return (\n            '' +\n            this.hours() +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    function meridiem(token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(\n                this.hours(),\n                this.minutes(),\n                lowercase\n            );\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // PARSING\n\n    function matchMeridiem(isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a', matchMeridiem);\n    addRegexToken('A', matchMeridiem);\n    addRegexToken('H', match1to2, match1to2HasZero);\n    addRegexToken('h', match1to2, match1to2NoLeadingZero);\n    addRegexToken('k', match1to2, match1to2NoLeadingZero);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM(input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return (input + '').toLowerCase().charAt(0) === 'p';\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n        // Setting the hour should keep the time, because the user explicitly\n        // specified which hour they want. So trying to maintain the same hour (in\n        // a new timezone) makes sense. Adding/subtracting hours does not follow\n        // this rule.\n        getSetHour = makeGetSet('Hours', true);\n\n    function localeMeridiem(hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse,\n    };\n\n    // internal storage for locale config files\n    var locales = {},\n        localeFamilies = {},\n        globalLocale;\n\n    function commonPrefix(arr1, arr2) {\n        var i,\n            minl = Math.min(arr1.length, arr2.length);\n        for (i = 0; i < minl; i += 1) {\n            if (arr1[i] !== arr2[i]) {\n                return i;\n            }\n        }\n        return minl;\n    }\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0,\n            j,\n            next,\n            locale,\n            split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (\n                    next &&\n                    next.length >= j &&\n                    commonPrefix(split, next) >= j - 1\n                ) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function isLocaleNameSane(name) {\n        // Only canonical locale module names are safe to append to the require path.\n        return typeof name === 'string' && /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(name);\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null,\n            aliasedRequire,\n            normalizedName;\n\n        // Preserve exact custom locale names before trying the canonical built-in name.\n        // Use hasOwnProp rather than a plain lookup so that names like \"__proto__\",\n        // \"constructor\", or \"prototype\" can't resolve to an inherited Object.prototype\n        // property instead of a real (or missing) locale entry.\n        if (hasOwnProp(locales, name)) {\n            return locales[name];\n        }\n\n        normalizedName = normalizeLocale(name);\n        if (hasOwnProp(locales, normalizedName)) {\n            return locales[normalizedName];\n        }\n\n        // TODO: Find a better way to register and load all the locales in Node\n        if (\n            typeof module !== 'undefined' &&\n            module &&\n            module.exports &&\n            isLocaleNameSane(normalizedName)\n        ) {\n            try {\n                oldLocale = globalLocale._abbr;\n                aliasedRequire = require;\n                aliasedRequire('./locale/' + normalizedName);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {\n                // mark as not found to avoid repeating expensive file require call causing high CPU\n                // when trying to find en-US, en_US, en-us for every format call\n                locales[normalizedName] = null; // null means not found\n            }\n        }\n        if (hasOwnProp(locales, normalizedName)) {\n            return locales[normalizedName];\n        }\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale(key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            } else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            } else {\n                if (typeof console !== 'undefined' && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn(\n                        'Locale ' + key + ' not found. Did you forget to load it?'\n                    );\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale(name, config) {\n        if (config !== null) {\n            var locale,\n                parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple(\n                    'defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n                );\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config,\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        var locale,\n            tmpLocale = loadLocale(name),\n            parentConfig = baseConfig;\n\n        if (tmpLocale != null) {\n            name = tmpLocale._abbr;\n        }\n\n        if (config != null) {\n            if (locales[name] != null && locales[name].parentLocale != null) {\n                // Update existing child locale in-place to avoid memory-leaks\n                locales[name].set(mergeConfigs(locales[name]._config, config));\n            } else {\n                // MERGE\n                if (tmpLocale != null) {\n                    parentConfig = tmpLocale._config;\n                }\n                config = mergeConfigs(parentConfig, config);\n                if (tmpLocale == null) {\n                    // updateLocale is called for creating a new locale\n                    // Set abbr so it will have a name (getters return\n                    // undefined otherwise).\n                    config.abbr = name;\n                }\n                locale = new Locale(config);\n                locale.parentLocale = locales[name];\n                locales[name] = locale;\n            }\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                    if (name === getSetGlobalLocale()) {\n                        getSetGlobalLocale(name);\n                    }\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale(key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow(m) {\n        var overflow,\n            a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH] < 0 || a[MONTH] > 11\n                    ? MONTH\n                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n                      ? DATE\n                      : a[HOUR] < 0 ||\n                          a[HOUR] > 24 ||\n                          (a[HOUR] === 24 &&\n                              (a[MINUTE] !== 0 ||\n                                  a[SECOND] !== 0 ||\n                                  a[MILLISECOND] !== 0))\n                        ? HOUR\n                        : a[MINUTE] < 0 || a[MINUTE] > 59\n                          ? MINUTE\n                          : a[SECOND] < 0 || a[SECOND] > 59\n                            ? SECOND\n                            : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n                              ? MILLISECOND\n                              : -1;\n\n            if (\n                getParsingFlags(m)._overflowDayOfYear &&\n                (overflow < YEAR || overflow > DATE)\n            ) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        basicIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n        isoDates = [\n            ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n            ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n            ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n            ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n            ['YYYY-DDD', /\\d{4}-\\d{3}/],\n            ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n            ['YYYYYYMMDD', /[+-]\\d{10}/],\n            ['YYYYMMDD', /\\d{8}/],\n            ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n            ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n            ['YYYYDDD', /\\d{7}/],\n            ['YYYYMM', /\\d{6}/, false],\n            ['YYYY', /\\d{4}/, false],\n        ],\n        // iso time formats and regexes\n        isoTimes = [\n            ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n            ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n            ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n            ['HH:mm', /\\d\\d:\\d\\d/],\n            ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n            ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n            ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n            ['HHmm', /\\d\\d\\d\\d/],\n            ['HH', /\\d\\d/],\n        ],\n        aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n        rfc2822 =\n            /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n        obsOffsets = {\n            UT: 0,\n            GMT: 0,\n            EDT: -4 * 60,\n            EST: -5 * 60,\n            CDT: -5 * 60,\n            CST: -6 * 60,\n            MDT: -6 * 60,\n            MST: -7 * 60,\n            PDT: -7 * 60,\n            PST: -8 * 60,\n        };\n\n    // date from iso format\n    function configFromISO(config) {\n        var i,\n            l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime,\n            dateFormat,\n            timeFormat,\n            tzFormat,\n            isoDatesLen = isoDates.length,\n            isoTimesLen = isoTimes.length;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n            for (i = 0, l = isoDatesLen; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimesLen; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    function extractFromRFC2822Strings(\n        yearStr,\n        monthStr,\n        dayStr,\n        hourStr,\n        minuteStr,\n        secondStr\n    ) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10),\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s\n            .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n            .replace(/(\\s\\s+)/g, ' ')\n            .replace(/^\\s\\s*/, '')\n            .replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(\n                    parsedInput[0],\n                    parsedInput[1],\n                    parsedInput[2]\n                ).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10),\n                m = hm % 100,\n                h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i)),\n            parsedArray;\n        if (match) {\n            parsedArray = extractFromRFC2822Strings(\n                match[4],\n                match[3],\n                match[2],\n                match[5],\n                match[6],\n                match[7]\n            );\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        if (config._strict) {\n            config._isValid = false;\n        } else {\n            // Final attempt, use Input Fallback\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config, now, forWeek) {\n        var hadWeekContext = Object.prototype.hasOwnProperty.call(\n                config,\n                '_isDefaultDatePartsForWeek'\n            ),\n            weekContext = config._isDefaultDatePartsForWeek;\n\n        // hooks is actually the exported moment object\n        config._isDefaultDatePartsForWeek = !!forWeek;\n        try {\n            return hooks._getDefaultDateParts(config, now, forWeek);\n        } finally {\n            if (hadWeekContext) {\n                config._isDefaultDatePartsForWeek = weekContext;\n            } else {\n                delete config._isDefaultDatePartsForWeek;\n            }\n        }\n    }\n\n    function currentDateNow(config) {\n        var now = config._defaultDatePartsNow;\n\n        if (!now) {\n            return hooks.now();\n        }\n        if (!now.hasValue) {\n            now.value = hooks.now();\n            now.hasValue = true;\n        }\n        return now.value;\n    }\n\n    // Internal hook for extensions that supply omitted calendar fields.\n    function getDefaultDateParts(config, now, forWeek) {\n        var useWeekDefaults = forWeek || config._isDefaultDatePartsForWeek,\n            nowValue = useWeekDefaults ? createLocal(now) : new Date(now);\n        if (useWeekDefaults) {\n            return [nowValue.year(), nowValue.month(), nowValue.date()];\n        }\n        if (config._useUTC) {\n            return [\n                nowValue.getUTCFullYear(),\n                nowValue.getUTCMonth(),\n                nowValue.getUTCDate(),\n            ];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    hooks._getDefaultDateParts = getDefaultDateParts;\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray(config) {\n        var i,\n            date,\n            input = [],\n            now,\n            currentDate,\n            expectedWeekday,\n            yearToUse,\n            dateIsDefaulted;\n\n        if (config._d) {\n            return;\n        }\n\n        if (\n            config._a[YEAR] == null ||\n            config._a[MONTH] == null ||\n            config._a[DATE] == null\n        ) {\n            now = currentDateNow(config);\n            currentDate = currentDateArray(config, now);\n        }\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config, currentDateArray(config, now, true));\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse =\n                config._a[YEAR] != null ? config._a[YEAR] : currentDate[YEAR];\n\n            if (\n                config._dayOfYear > daysInYear(yearToUse) ||\n                config._dayOfYear === 0\n            ) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        dateIsDefaulted =\n            config._a[YEAR] == null ||\n            config._a[MONTH] == null ||\n            config._a[DATE] == null;\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] =\n                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (\n            config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0\n        ) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(\n            null,\n            input\n        );\n        expectedWeekday = config._useUTC\n            ? config._d.getUTCDay()\n            : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (\n            config._w &&\n            typeof config._w.d !== 'undefined' &&\n            !dateIsDefaulted &&\n            config._w.d !== expectedWeekday\n        ) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config, currentDate) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(\n                w.GG,\n                config._a[YEAR],\n                weekOfYearFromDate(\n                    currentDate[YEAR],\n                    currentDate[MONTH],\n                    currentDate[DATE],\n                    1,\n                    4\n                ).year\n            );\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            curWeek = weekOfYearFromDate(\n                currentDate[YEAR],\n                currentDate[MONTH],\n                currentDate[DATE],\n                dow,\n                doy\n            );\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i,\n            parsedInput,\n            tokens,\n            token,\n            skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0,\n            era,\n            tokenLen;\n\n        tokens =\n            expandFormat(config._f, config._locale).match(formattingTokens) || [];\n        tokenLen = tokens.length;\n        for (i = 0; i < tokenLen; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n                [])[0];\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(\n                    string.indexOf(parsedInput) + parsedInput.length\n                );\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                } else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            } else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver =\n            stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (\n            config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0\n        ) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(\n            config._locale,\n            config._a[HOUR],\n            config._meridiem\n        );\n\n        // handle era\n        era = getParsingFlags(config).era;\n        if (era !== null) {\n            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n        }\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n    function meridiemFixWrap(locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n            scoreToBeat,\n            i,\n            currentScore,\n            validFormatFound,\n            bestFormatIsValid = false,\n            defaultDatePartsNow = {},\n            configfLen = config._f.length;\n\n        if (configfLen === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < configfLen; i++) {\n            currentScore = 0;\n            validFormatFound = false;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._defaultDatePartsNow = defaultDatePartsNow;\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (isValid$2(tempConfig)) {\n                validFormatFound = true;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (!bestFormatIsValid) {\n                if (\n                    scoreToBeat == null ||\n                    currentScore < scoreToBeat ||\n                    validFormatFound\n                ) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                    if (validFormatFound) {\n                        bestFormatIsValid = true;\n                    }\n                }\n            } else {\n                if (currentScore < scoreToBeat) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                }\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i),\n            dayOrDate = i.day === undefined ? i.date : i.day;\n        config._a = map(\n            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n            function (obj) {\n                return obj && parseInt(obj, 10);\n            }\n        );\n\n        configFromArray(config);\n    }\n\n    function createFromConfig(config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig(config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid$1({ nullInput: true });\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        } else {\n            configFromInput(config);\n        }\n\n        if (!isValid$2(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC(input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (format === true || format === false) {\n            strict = format;\n            format = undefined;\n        }\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if (\n            (isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)\n        ) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other < this ? this : other;\n                } else {\n                    return createInvalid$1();\n                }\n            }\n        ),\n        prototypeMax = deprecate(\n            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other > this ? this : other;\n                } else {\n                    return createInvalid$1();\n                }\n            }\n        );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        for (i = 0; i < moments.length; ++i) {\n            if (isMoment(moments[i])) {\n                res = moments[i];\n                break;\n            }\n        }\n        if (!res) {\n            return createInvalid$1();\n        }\n        for (++i; i < moments.length; ++i) {\n            if (\n                isMoment(moments[i]) &&\n                (!moments[i].isValid() || moments[i][fn](res))\n            ) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +new Date();\n    };\n\n    var ordering = [\n        'year',\n        'quarter',\n        'month',\n        'week',\n        'day',\n        'hour',\n        'minute',\n        'second',\n        'millisecond',\n    ];\n\n    function isDurationValid(m) {\n        var key,\n            unitHasDecimal = false,\n            i,\n            orderLen = ordering.length;\n        for (key in m) {\n            if (\n                hasOwnProp(m, key) &&\n                !(\n                    indexOf.call(ordering, key) !== -1 &&\n                    (m[key] == null || !isNaN(m[key]))\n                )\n            ) {\n                return false;\n            }\n        }\n\n        for (i = 0; i < orderLen; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid() {\n        return createDuration(NaN);\n    }\n\n    function Duration(duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds =\n            +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days + weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months + quarters * 3 + years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration(obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound(number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if (\n                (toInt(array1[i]) !== toInt(array2[i]))\n            ) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    // FORMATTING\n\n    function offset(token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset(),\n                sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return (\n                sign +\n                zeroFill(~~(offset / 60), 2) +\n                separator +\n                zeroFill(~~offset % 60, 2)\n            );\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z', matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        var offset = offsetFromString(matchShortOffset, input);\n        config._useUTC = true;\n        config._tzm = offset;\n        if (offset === null) {\n            getParsingFlags(config).invalidOffset = input;\n        }\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher),\n            chunk,\n            parts,\n            minutes;\n\n        if (matches === null) {\n            return null;\n        }\n\n        chunk = matches[matches.length - 1] || [];\n        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        if (\n            toInt(parts[2]) > 59 ||\n            (parts[0] === '+' ? minutes > 14 * 60 : minutes > 12 * 60)\n        ) {\n            return null;\n        }\n\n        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff =\n                (isMoment(input) || isDate(input)\n                    ? input.valueOf()\n                    : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset(m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset());\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset(input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract$1(\n                        this,\n                        createDuration(input - offset, 'm'),\n                        1,\n                        false\n                    );\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone(input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC(keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal(keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset() {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            } else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset(input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime() {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted() {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {},\n            other;\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted =\n                this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal() {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset() {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc() {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n        // and further modified to allow for strings containing both week and day\n        isoRegex =\n            /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration(input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms: input._milliseconds,\n                d: input._days,\n                M: input._months,\n            };\n        } else if (isNumber(input) || !isNaN(+input)) {\n            duration = {};\n            if (key) {\n                duration[key] = +input;\n            } else {\n                duration.milliseconds = +input;\n            }\n        } else if ((match = aspNetRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: 0,\n                d: toInt(match[DATE]) * sign,\n                h: toInt(match[HOUR]) * sign,\n                m: toInt(match[MINUTE]) * sign,\n                s: toInt(match[SECOND]) * sign,\n                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n            };\n        } else if ((match = isoRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: parseIso(match[2], sign),\n                M: parseIso(match[3], sign),\n                w: parseIso(match[4], sign),\n                d: parseIso(match[5], sign),\n                h: parseIso(match[6], sign),\n                m: parseIso(match[7], sign),\n                s: parseIso(match[8], sign),\n            };\n        } else if (duration == null) {\n            // checks for null or undefined\n            duration = {};\n        } else if (\n            typeof duration === 'object' &&\n            ('from' in duration || 'to' in duration)\n        ) {\n            diffRes = momentsDifference(\n                createLocal(duration.from),\n                createLocal(duration.to)\n            );\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n            ret._isValid = input._isValid;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid;\n\n    function parseIso(inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months =\n            other.month() - base.month() + (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return { milliseconds: 0, months: 0 };\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(\n                    name,\n                    'moment().' +\n                        name +\n                        '(period, number) is deprecated. Please use moment().' +\n                        name +\n                        '(number, period). ' +\n                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n                );\n                tmp = val;\n                val = period;\n                period = tmp;\n            }\n\n            dur = createDuration(val, period);\n            addSubtract$1(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract$1(mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get$2(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get$2(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add$1 = createAdder(1, 'add'),\n        subtract$1 = createAdder(-1, 'subtract');\n\n    function isString(input) {\n        return typeof input === 'string' || input instanceof String;\n    }\n\n    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n    function isMomentInput(input) {\n        return (\n            isMoment(input) ||\n            isDate(input) ||\n            isString(input) ||\n            isNumber(input) ||\n            isNumberOrStringArray(input) ||\n            isMomentInputObject(input) ||\n            input === null ||\n            input === undefined\n        );\n    }\n\n    function isMomentInputObject(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'years',\n                'year',\n                'y',\n                'months',\n                'month',\n                'M',\n                'days',\n                'day',\n                'd',\n                'dates',\n                'date',\n                'D',\n                'hours',\n                'hour',\n                'h',\n                'minutes',\n                'minute',\n                'm',\n                'seconds',\n                'second',\n                's',\n                'milliseconds',\n                'millisecond',\n                'ms',\n            ],\n            i,\n            property,\n            propertyLen = properties.length;\n\n        for (i = 0; i < propertyLen; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function isNumberOrStringArray(input) {\n        var arrayTest = isArray(input),\n            dataTypeTest = false;\n        if (arrayTest) {\n            dataTypeTest =\n                input.filter(function (item) {\n                    return !isNumber(item) && isString(input);\n                }).length === 0;\n        }\n        return arrayTest && dataTypeTest;\n    }\n\n    function isCalendarSpec(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'sameDay',\n                'nextDay',\n                'lastDay',\n                'nextWeek',\n                'lastWeek',\n                'sameElse',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6\n            ? 'sameElse'\n            : diff < -1\n              ? 'lastWeek'\n              : diff < 0\n                ? 'lastDay'\n                : diff < 1\n                  ? 'sameDay'\n                  : diff < 2\n                    ? 'nextDay'\n                    : diff < 7\n                      ? 'nextWeek'\n                      : 'sameElse';\n    }\n\n    function calendar(time, formats) {\n        // Support for single parameter, formats only overload to the calendar function\n        if (arguments.length === 1) {\n            if (!arguments[0]) {\n                time = undefined;\n                formats = undefined;\n            } else if (isMomentInput(arguments[0])) {\n                time = arguments[0];\n                formats = undefined;\n            } else if (isCalendarSpec(arguments[0])) {\n                formats = arguments[0];\n                time = undefined;\n            }\n        }\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse',\n            output =\n                formats &&\n                (isFunction(formats[format])\n                    ? formats[format].call(this, now)\n                    : formats[format]);\n\n        return this.format(\n            output || this.localeData().calendar(format, this, createLocal(now))\n        );\n    }\n\n    function clone$1() {\n        return new Moment(this);\n    }\n\n    function isAfter(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween(from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (\n            (inclusivity[0] === '('\n                ? this.isAfter(localFrom, units)\n                : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')'\n                ? this.isBefore(localTo, units)\n                : !this.isAfter(localTo, units))\n        );\n    }\n\n    function isSame(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return (\n                this.clone().startOf(units).valueOf() <= inputMs &&\n                inputMs <= this.clone().endOf(units).valueOf()\n            );\n        }\n    }\n\n    function isSameOrAfter(input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore(input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff(input, units, asFloat) {\n        var that, zoneDelta, output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year':\n                output = monthDiff(this, that) / 12;\n                break;\n            case 'month':\n                output = monthDiff(this, that);\n                break;\n            case 'quarter':\n                output = monthDiff(this, that) / 3;\n                break;\n            case 'second':\n                output = (this - that) / 1e3;\n                break; // 1000\n            case 'minute':\n                output = (this - that) / 6e4;\n                break; // 1000 * 60\n            case 'hour':\n                output = (this - that) / 36e5;\n                break; // 1000 * 60 * 60\n            case 'day':\n                output = (this - that - zoneDelta) / 864e5;\n                break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week':\n                output = (this - that - zoneDelta) / 6048e5;\n                break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default:\n                output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff(a, b) {\n        if (a.date() < b.date()) {\n            // end-of-month calculations work correct when the start month has more\n            // days than the end month.\n            return -monthDiff(b, a);\n        }\n        // difference in months\n        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2,\n            adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString() {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString$1(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true,\n            m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(\n                m,\n                utc\n                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n            );\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n                    .toISOString()\n                    .replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(\n            m,\n            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n        );\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect() {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment',\n            zone = '',\n            prefix,\n            year,\n            datetime,\n            suffix;\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        prefix = '[' + func + '(\"]';\n        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n        datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format(inputString) {\n        if (!inputString) {\n            inputString = this.isUtc()\n                ? hooks.defaultFormatUtc\n                : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ to: this, from: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow(withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ from: this, to: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow(withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale(key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData() {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000,\n        MS_PER_MINUTE = 60 * MS_PER_SECOND,\n        MS_PER_HOUR = 60 * MS_PER_MINUTE,\n        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod(dividend, divisor) {\n        return ((dividend % divisor) + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(\n                    this.year(),\n                    this.month() - (this.month() % 3),\n                    1\n                );\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - this.weekday()\n                );\n                break;\n            case 'isoWeek':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - (this.isoWeekday() - 1)\n                );\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod(\n                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                    MS_PER_HOUR\n                );\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month() - (this.month() % 3) + 3,\n                        1\n                    ) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - this.weekday() + 7\n                    ) - 1;\n                break;\n            case 'isoWeek':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - (this.isoWeekday() - 1) + 7\n                    ) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time +=\n                    MS_PER_HOUR -\n                    mod(\n                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                        MS_PER_HOUR\n                    ) -\n                    1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf$1() {\n        return this._d.valueOf() - (this._offset || 0) * 60000;\n    }\n\n    function unix() {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate() {\n        return new Date(this.valueOf());\n    }\n\n    function toArray() {\n        var m = this;\n        return [\n            m.year(),\n            m.month(),\n            m.date(),\n            m.hour(),\n            m.minute(),\n            m.second(),\n            m.millisecond(),\n        ];\n    }\n\n    function toObject() {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds(),\n        };\n    }\n\n    function toJSON() {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid() {\n        return isValid$2(this);\n    }\n\n    function parsingFlags() {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt() {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict,\n        };\n    }\n\n    addFormatToken('N', 0, 0, 'eraAbbr');\n    addFormatToken('NN', 0, 0, 'eraAbbr');\n    addFormatToken('NNN', 0, 0, 'eraAbbr');\n    addFormatToken('NNNN', 0, 0, 'eraName');\n    addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n    addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n    addFormatToken('y', ['yy', 2], 0, 'eraYear');\n    addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n    addRegexToken('N', matchEraAbbr);\n    addRegexToken('NN', matchEraAbbr);\n    addRegexToken('NNN', matchEraAbbr);\n    addRegexToken('NNNN', matchEraName);\n    addRegexToken('NNNNN', matchEraNarrow);\n\n    addParseToken(\n        ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n        function (input, array, config, token) {\n            var era = config._locale.erasParse(input, token, config._strict);\n            if (era) {\n                getParsingFlags(config).era = era;\n            } else {\n                getParsingFlags(config).invalidEra = input;\n            }\n        }\n    );\n\n    addRegexToken('y', matchUnsigned);\n    addRegexToken('yy', matchUnsigned);\n    addRegexToken('yyy', matchUnsigned);\n    addRegexToken('yyyy', matchUnsigned);\n    addRegexToken('yo', matchEraYearOrdinal);\n\n    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n    addParseToken(['yo'], function (input, array, config, token) {\n        var match;\n        if (config._locale._eraYearOrdinalRegex) {\n            match = input.match(config._locale._eraYearOrdinalRegex);\n        }\n\n        if (config._locale.eraYearOrdinalParse) {\n            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n        } else {\n            array[YEAR] = parseInt(input, 10);\n        }\n    });\n\n    function localeEras(m, format) {\n        var i,\n            l,\n            date,\n            eras = this._eras || getLocale('en')._eras;\n        for (i = 0, l = eras.length; i < l; ++i) {\n            switch (typeof eras[i].since) {\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].since).startOf('day');\n                    eras[i].since = date.valueOf();\n                    break;\n            }\n\n            switch (typeof eras[i].until) {\n                case 'undefined':\n                    eras[i].until = +Infinity;\n                    break;\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].until).startOf('day').valueOf();\n                    eras[i].until = date.valueOf();\n                    break;\n            }\n        }\n        return eras;\n    }\n\n    function localeErasParse(eraName, format, strict) {\n        var i,\n            l,\n            eras = this.eras(),\n            name,\n            abbr,\n            narrow;\n        eraName = eraName.toUpperCase();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            name = eras[i].name.toUpperCase();\n            abbr = eras[i].abbr.toUpperCase();\n            narrow = eras[i].narrow.toUpperCase();\n\n            if (strict) {\n                switch (format) {\n                    case 'N':\n                    case 'NN':\n                    case 'NNN':\n                        if (abbr === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNN':\n                        if (name === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNNN':\n                        if (narrow === eraName) {\n                            return eras[i];\n                        }\n                        break;\n                }\n            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n                return eras[i];\n            }\n        }\n    }\n\n    function localeErasConvertYear(era, year) {\n        var dir = era.since <= era.until ? 1 : -1;\n        if (year === undefined) {\n            return hooks(era.since).year();\n        } else {\n            return hooks(era.since).year() + (year - era.offset) * dir;\n        }\n    }\n\n    function getEraName() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].name;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].name;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraNarrow() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].narrow;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].narrow;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraAbbr() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].abbr;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].abbr;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraYear() {\n        var i,\n            l,\n            dir,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            dir = eras[i].since <= eras[i].until ? 1 : -1;\n\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (\n                (eras[i].since <= val && val <= eras[i].until) ||\n                (eras[i].until <= val && val <= eras[i].since)\n            ) {\n                return (\n                    (this.year() - hooks(eras[i].since).year()) * dir +\n                    eras[i].offset\n                );\n            }\n        }\n\n        return this.year();\n    }\n\n    function erasNameRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNameRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNameRegex : this._erasRegex;\n    }\n\n    function erasAbbrRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasAbbrRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasAbbrRegex : this._erasRegex;\n    }\n\n    function erasNarrowRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNarrowRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNarrowRegex : this._erasRegex;\n    }\n\n    function matchEraAbbr(isStrict, locale) {\n        return locale.erasAbbrRegex(isStrict);\n    }\n\n    function matchEraName(isStrict, locale) {\n        return locale.erasNameRegex(isStrict);\n    }\n\n    function matchEraNarrow(isStrict, locale) {\n        return locale.erasNarrowRegex(isStrict);\n    }\n\n    function matchEraYearOrdinal(isStrict, locale) {\n        return locale._eraYearOrdinalRegex || matchUnsigned;\n    }\n\n    function computeErasParse() {\n        var abbrPieces = [],\n            namePieces = [],\n            narrowPieces = [],\n            mixedPieces = [],\n            i,\n            l,\n            erasName,\n            erasAbbr,\n            erasNarrow,\n            eras = this.eras();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            erasName = regexEscape(eras[i].name);\n            erasAbbr = regexEscape(eras[i].abbr);\n            erasNarrow = regexEscape(eras[i].narrow);\n\n            namePieces.push(erasName);\n            abbrPieces.push(erasAbbr);\n            narrowPieces.push(erasNarrow);\n            mixedPieces.push(erasName);\n            mixedPieces.push(erasAbbr);\n            mixedPieces.push(erasNarrow);\n        }\n\n        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n        this._erasNarrowRegex = new RegExp(\n            '^(' + narrowPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken(token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg', 'weekYear');\n    addWeekYearFormatToken('ggggg', 'weekYear');\n    addWeekYearFormatToken('GGGG', 'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    // PARSING\n\n    addRegexToken('G', matchSigned);\n    addRegexToken('g', matchSigned);\n    addRegexToken('GG', match1to2, match2);\n    addRegexToken('gg', match1to2, match2);\n    addRegexToken('GGGG', match1to4, match4);\n    addRegexToken('gggg', match1to4, match4);\n    addRegexToken('GGGGG', match1to6, match6);\n    addRegexToken('ggggg', match1to6, match6);\n\n    addWeekParseToken(\n        ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n        function (input, week, config, token) {\n            week[token.substr(0, 2)] = toInt(input);\n        }\n    );\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.week(),\n            this.weekday() + this.localeData()._week.dow,\n            this.localeData()._week.dow,\n            this.localeData()._week.doy\n        );\n    }\n\n    function getSetISOWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.isoWeek(),\n            this.isoWeekday(),\n            1,\n            4\n        );\n    }\n\n    function getISOWeeksInYear() {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getISOWeeksInISOWeekYear() {\n        return weeksInYear(this.isoWeekYear(), 1, 4);\n    }\n\n    function getWeeksInYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getWeeksInWeekYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter(input) {\n        return input == null\n            ? Math.ceil((this.month() + 1) / 3)\n            : this.month((input - 1) * 3 + (this.month() % 3));\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // PARSING\n\n    addRegexToken('D', match1to2, match1to2NoLeadingZero);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict\n            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n            : locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // PARSING\n\n    addRegexToken('DDD', match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear(input) {\n        var dayOfYear =\n            Math.round(\n                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n            ) + 1;\n        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // PARSING\n\n    addRegexToken('m', match1to2, match1to2HasZero);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // PARSING\n\n    addRegexToken('s', match1to2, match1to2HasZero);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n    // PARSING\n\n    addRegexToken('S', match1to3, match1);\n    addRegexToken('SS', match1to3, match2);\n    addRegexToken('SSS', match1to3, match3);\n\n    var token, getSetMillisecond;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n\n    getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z', 0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr() {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName() {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto$2 = Moment.prototype;\n\n    proto$2.add = add$1;\n    proto$2.calendar = calendar;\n    proto$2.clone = clone$1;\n    proto$2.diff = diff;\n    proto$2.endOf = endOf;\n    proto$2.format = format;\n    proto$2.from = from;\n    proto$2.fromNow = fromNow;\n    proto$2.to = to;\n    proto$2.toNow = toNow;\n    proto$2.get = stringGet;\n    proto$2.invalidAt = invalidAt;\n    proto$2.isAfter = isAfter;\n    proto$2.isBefore = isBefore;\n    proto$2.isBetween = isBetween;\n    proto$2.isSame = isSame;\n    proto$2.isSameOrAfter = isSameOrAfter;\n    proto$2.isSameOrBefore = isSameOrBefore;\n    proto$2.isValid = isValid;\n    proto$2.lang = lang;\n    proto$2.locale = locale;\n    proto$2.localeData = localeData;\n    proto$2.max = prototypeMax;\n    proto$2.min = prototypeMin;\n    proto$2.parsingFlags = parsingFlags;\n    proto$2.set = stringSet;\n    proto$2.startOf = startOf;\n    proto$2.subtract = subtract$1;\n    proto$2.toArray = toArray;\n    proto$2.toObject = toObject;\n    proto$2.toDate = toDate;\n    proto$2.toISOString = toISOString$1;\n    proto$2.inspect = inspect;\n    if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n        proto$2[Symbol.for('nodejs.util.inspect.custom')] = function () {\n            return 'Moment<' + this.format() + '>';\n        };\n    }\n    proto$2.toJSON = toJSON;\n    proto$2.toString = toString;\n    proto$2.unix = unix;\n    proto$2.valueOf = valueOf$1;\n    proto$2.creationData = creationData;\n    proto$2.eraName = getEraName;\n    proto$2.eraNarrow = getEraNarrow;\n    proto$2.eraAbbr = getEraAbbr;\n    proto$2.eraYear = getEraYear;\n    proto$2.year = getSetYear;\n    proto$2.isLeapYear = getIsLeapYear;\n    proto$2.weekYear = getSetWeekYear;\n    proto$2.isoWeekYear = getSetISOWeekYear;\n    proto$2.quarter = proto$2.quarters = getSetQuarter;\n    proto$2.month = getSetMonth;\n    proto$2.daysInMonth = getDaysInMonth;\n    proto$2.week = proto$2.weeks = getSetWeek;\n    proto$2.isoWeek = proto$2.isoWeeks = getSetISOWeek;\n    proto$2.weeksInYear = getWeeksInYear;\n    proto$2.weeksInWeekYear = getWeeksInWeekYear;\n    proto$2.isoWeeksInYear = getISOWeeksInYear;\n    proto$2.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n    proto$2.date = getSetDayOfMonth;\n    proto$2.day = proto$2.days = getSetDayOfWeek;\n    proto$2.weekday = getSetLocaleDayOfWeek;\n    proto$2.isoWeekday = getSetISODayOfWeek;\n    proto$2.dayOfYear = getSetDayOfYear;\n    proto$2.hour = proto$2.hours = getSetHour;\n    proto$2.minute = proto$2.minutes = getSetMinute;\n    proto$2.second = proto$2.seconds = getSetSecond;\n    proto$2.millisecond = proto$2.milliseconds = getSetMillisecond;\n    proto$2.utcOffset = getSetOffset;\n    proto$2.utc = setOffsetToUTC;\n    proto$2.local = setOffsetToLocal;\n    proto$2.parseZone = setOffsetToParsedOffset;\n    proto$2.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto$2.isDST = isDaylightSavingTime;\n    proto$2.isLocal = isLocal;\n    proto$2.isUtcOffset = isUtcOffset;\n    proto$2.isUtc = isUtc;\n    proto$2.isUTC = isUtc;\n    proto$2.zoneAbbr = getZoneAbbr;\n    proto$2.zoneName = getZoneName;\n    proto$2.dates = deprecate(\n        'dates accessor is deprecated. Use date instead.',\n        getSetDayOfMonth\n    );\n    proto$2.months = deprecate(\n        'months accessor is deprecated. Use month instead',\n        getSetMonth\n    );\n    proto$2.years = deprecate(\n        'years accessor is deprecated. Use year instead',\n        getSetYear\n    );\n    proto$2.zone = deprecate(\n        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n        getSetZone\n    );\n    proto$2.isDSTShifted = deprecate(\n        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n        isDaylightSavingTimeShifted\n    );\n\n    function createUnix(input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone() {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat(string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar = calendar$1;\n    proto$1.longDateFormat = longDateFormat;\n    proto$1.invalidDate = invalidDate;\n    proto$1.ordinal = ordinal;\n    proto$1.preparse = preParsePostFormat;\n    proto$1.postformat = preParsePostFormat;\n    proto$1.relativeTime = relativeTime$1;\n    proto$1.pastFuture = pastFuture;\n    proto$1.set = set;\n    proto$1.eras = localeEras;\n    proto$1.erasParse = localeErasParse;\n    proto$1.erasConvertYear = localeErasConvertYear;\n    proto$1.erasAbbrRegex = erasAbbrRegex;\n    proto$1.erasNameRegex = erasNameRegex;\n    proto$1.erasNarrowRegex = erasNarrowRegex;\n\n    proto$1.months = localeMonths;\n    proto$1.monthsShort = localeMonthsShort;\n    proto$1.monthsParse = localeMonthsParse;\n    proto$1.monthsRegex = monthsRegex;\n    proto$1.monthsShortRegex = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays = localeWeekdays;\n    proto$1.weekdaysMin = localeWeekdaysMin;\n    proto$1.weekdaysShort = localeWeekdaysShort;\n    proto$1.weekdaysParse = localeWeekdaysParse;\n\n    proto$1.weekdaysRegex = weekdaysRegex;\n    proto$1.weekdaysShortRegex = weekdaysShortRegex;\n    proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1(format, index, field, setter) {\n        var locale = getLocale(),\n            utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl(format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i,\n            out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl(localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0,\n            i,\n            out = [];\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths(format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort(format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        eras: [\n            {\n                since: '0001-01-01',\n                until: +Infinity,\n                offset: 1,\n                name: 'Anno Domini',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: 'Before Christ',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    toInt((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate(\n        'moment.lang is deprecated. Use moment.locale instead.',\n        getSetGlobalLocale\n    );\n    hooks.langData = deprecate(\n        'moment.langData is deprecated. Use moment.localeData instead.',\n        getLocale\n    );\n\n    var mathAbs = Math.abs;\n\n    function abs$1() {\n        var data = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days = mathAbs(this._days);\n        this._months = mathAbs(this._months);\n\n        data.milliseconds = mathAbs(data.milliseconds);\n        data.seconds = mathAbs(data.seconds);\n        data.minutes = mathAbs(data.minutes);\n        data.hours = mathAbs(data.hours);\n        data.months = mathAbs(data.months);\n        data.years = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract(duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days += direction * other._days;\n        duration._months += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add(input, value) {\n        return addSubtract(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract(input, value) {\n        return addSubtract(this, input, value, -1);\n    }\n\n    function absCeil(number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble() {\n        var milliseconds = this._milliseconds,\n            days = this._days,\n            months = this._months,\n            data = this._data,\n            seconds,\n            minutes,\n            hours,\n            years,\n            monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (!(\n            (milliseconds >= 0 && days >= 0 && months >= 0) ||\n            (milliseconds <= 0 && days <= 0 && months <= 0)\n        )) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds = absFloor(milliseconds / 1000);\n        data.seconds = seconds % 60;\n\n        minutes = absFloor(seconds / 60);\n        data.minutes = minutes % 60;\n\n        hours = absFloor(minutes / 60);\n        data.hours = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days = days;\n        data.months = months;\n        data.years = years;\n\n        return this;\n    }\n\n    function daysToMonths(days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return (days * 4800) / 146097;\n    }\n\n    function monthsToDays(months) {\n        // the reverse of daysToMonths\n        return (months * 146097) / 4800;\n    }\n\n    function as(units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days,\n            months,\n            milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':\n                    return months;\n                case 'quarter':\n                    return months / 3;\n                case 'year':\n                    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week':\n                    return days / 7 + milliseconds / 6048e5;\n                case 'day':\n                    return days + milliseconds / 864e5;\n                case 'hour':\n                    return days * 24 + milliseconds / 36e5;\n                case 'minute':\n                    return days * 1440 + milliseconds / 6e4;\n                case 'second':\n                    return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond':\n                    return Math.floor(days * 864e5) + milliseconds;\n                default:\n                    throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    function makeAs(alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms'),\n        asSeconds = makeAs('s'),\n        asMinutes = makeAs('m'),\n        asHours = makeAs('h'),\n        asDays = makeAs('d'),\n        asWeeks = makeAs('w'),\n        asMonths = makeAs('M'),\n        asQuarters = makeAs('Q'),\n        asYears = makeAs('y'),\n        valueOf = asMilliseconds;\n\n    function clone() {\n        return createDuration(this);\n    }\n\n    function get(units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds'),\n        seconds = makeGetter('seconds'),\n        minutes = makeGetter('minutes'),\n        hours = makeGetter('hours'),\n        days = makeGetter('days'),\n        months = makeGetter('months'),\n        years = makeGetter('years');\n\n    function weeks() {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round,\n        thresholds = {\n            ss: 44, // a few seconds to seconds\n            s: 45, // seconds to minute\n            m: 45, // minutes to hour\n            h: 22, // hours to day\n            d: 26, // days to month/week\n            w: null, // weeks to month\n            M: 11, // months to year\n        };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return relativeTimeWithoutPostformat.call(\n            locale,\n            number || 1,\n            !!withoutSuffix,\n            string,\n            isFuture\n        );\n    }\n\n    function relativeTime(posNegDuration, withoutSuffix, thresholds, locale) {\n        var duration = createDuration(posNegDuration).abs(),\n            seconds = round(duration.as('s')),\n            minutes = round(duration.as('m')),\n            hours = round(duration.as('h')),\n            days = round(duration.as('d')),\n            months = round(duration.as('M')),\n            weeks = round(duration.as('w')),\n            years = round(duration.as('y')),\n            a =\n                (seconds <= thresholds.ss && ['s', seconds]) ||\n                (seconds < thresholds.s && ['ss', seconds]) ||\n                (minutes <= 1 && ['m']) ||\n                (minutes < thresholds.m && ['mm', minutes]) ||\n                (hours <= 1 && ['h']) ||\n                (hours < thresholds.h && ['hh', hours]) ||\n                (days <= 1 && ['d']) ||\n                (days < thresholds.d && ['dd', days]);\n\n        if (thresholds.w != null) {\n            a =\n                a ||\n                (weeks <= 1 && ['w']) ||\n                (weeks < thresholds.w && ['ww', weeks]);\n        }\n        a = a ||\n            (months <= 1 && ['M']) ||\n            (months < thresholds.M && ['MM', months]) ||\n            (years <= 1 && ['y']) || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding(roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof roundingFunction === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold(threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize(argWithSuffix, argThresholds) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var withSuffix = false,\n            th = thresholds,\n            locale,\n            output;\n\n        if (typeof argWithSuffix === 'object') {\n            argThresholds = argWithSuffix;\n            argWithSuffix = false;\n        }\n        if (typeof argWithSuffix === 'boolean') {\n            withSuffix = argWithSuffix;\n        }\n        if (typeof argThresholds === 'object') {\n            th = extend(extend({}, thresholds), argThresholds || {});\n            if (argThresholds.s != null && argThresholds.ss == null) {\n                th.ss = argThresholds.s - 1;\n            }\n        }\n\n        locale = this.localeData();\n        output = relativeTime(this, !withSuffix, th, locale);\n\n        if (withSuffix) {\n            output = pastFutureWithoutPostformat.call(locale, +this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs = Math.abs;\n\n    function sign(x) {\n        return (x > 0) - (x < 0) || +x;\n    }\n\n    function toISOString() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs(this._milliseconds) / 1000,\n            days = abs(this._days),\n            months = abs(this._months),\n            minutes,\n            hours,\n            years,\n            s,\n            total = this.asSeconds(),\n            totalSign,\n            ymSign,\n            daysSign,\n            hmsSign;\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes = absFloor(seconds / 60);\n        hours = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n        totalSign = total < 0 ? '-' : '';\n        ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return (\n            totalSign +\n            'P' +\n            (years ? ymSign + years + 'Y' : '') +\n            (months ? ymSign + months + 'M' : '') +\n            (days ? daysSign + days + 'D' : '') +\n            (hours || minutes || seconds ? 'T' : '') +\n            (hours ? hmsSign + hours + 'H' : '') +\n            (minutes ? hmsSign + minutes + 'M' : '') +\n            (seconds ? hmsSign + s + 'S' : '')\n        );\n    }\n\n    var proto = Duration.prototype;\n\n    proto.isValid = isValid$1;\n    proto.abs = abs$1;\n    proto.add = add;\n    proto.subtract = subtract;\n    proto.as = as;\n    proto.asMilliseconds = asMilliseconds;\n    proto.asSeconds = asSeconds;\n    proto.asMinutes = asMinutes;\n    proto.asHours = asHours;\n    proto.asDays = asDays;\n    proto.asWeeks = asWeeks;\n    proto.asMonths = asMonths;\n    proto.asQuarters = asQuarters;\n    proto.asYears = asYears;\n    proto.valueOf = valueOf;\n    proto._bubble = bubble;\n    proto.clone = clone;\n    proto.get = get;\n    proto.milliseconds = milliseconds;\n    proto.seconds = seconds;\n    proto.minutes = minutes;\n    proto.hours = hours;\n    proto.days = days;\n    proto.weeks = weeks;\n    proto.months = months;\n    proto.years = years;\n    proto.humanize = humanize;\n    proto.toISOString = toISOString;\n    proto.toString = toISOString;\n    proto.toJSON = toISOString;\n    proto.locale = locale;\n    proto.localeData = localeData;\n\n    proto.toIsoString = deprecate(\n        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n        toISOString\n    );\n    proto.lang = lang;\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    //! moment.js\n\n    hooks.version = '2.31.0';\n\n    setHookCallback(createLocal);\n\n    hooks.fn = proto$2;\n    hooks.min = min;\n    hooks.max = max;\n    hooks.now = now;\n    hooks.utc = createUTC;\n    hooks.unix = createUnix;\n    hooks.months = listMonths;\n    hooks.isDate = isDate;\n    hooks.locale = getSetGlobalLocale;\n    hooks.invalid = createInvalid$1;\n    hooks.duration = createDuration;\n    hooks.isMoment = isMoment;\n    hooks.weekdays = listWeekdays;\n    hooks.parseZone = createInZone;\n    hooks.localeData = getLocale;\n    hooks.isDuration = isDuration;\n    hooks.monthsShort = listMonthsShort;\n    hooks.weekdaysMin = listWeekdaysMin;\n    hooks.defineLocale = defineLocale;\n    hooks.updateLocale = updateLocale;\n    hooks.locales = listLocales;\n    hooks.weekdaysShort = listWeekdaysShort;\n    hooks.normalizeUnits = normalizeUnits;\n    hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat = getCalendarFormat;\n    hooks.prototype = proto$2;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n        TIME: 'HH:mm', // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n        MONTH: 'YYYY-MM', // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n","export interface Descriptor {\n  configurable?: boolean;\n  enumerable?: boolean;\n  writable?: boolean;\n  get?(): any;\n  set?(v: any): void;\n  initializer?: null | (() => any);\n  value?: any;\n}\nexport type LegacyDecorator = (\n  target: object,\n  prop: unknown,\n  desc: Descriptor,\n) => Descriptor | null | undefined | void;\n\nexport type LegacyClassDecorator = (target: new (...args: any) => any) =>\n  | {\n      new (...args: any): any;\n    }\n  | null\n  | undefined\n  | void;\n\nconst deferred: WeakMap<\n  object,\n  Map<string | number | symbol, Descriptor>\n> = new WeakMap();\n\nfunction deferDecorator(\n  proto: object,\n  prop: string | number | symbol,\n  desc: Descriptor,\n): void {\n  let map = deferred.get(proto);\n  if (!map) {\n    map = new Map();\n    deferred.set(proto, map);\n  }\n  map.set(prop, desc);\n}\n\nfunction findDeferredDecorator(\n  target: object,\n  prop: string | number | symbol,\n): Descriptor | undefined {\n  let cursor: object = (target as any).prototype;\n  while (cursor) {\n    let desc = deferred.get(cursor)?.get(prop);\n    if (desc) {\n      return desc;\n    }\n    cursor = Object.getPrototypeOf(cursor);\n  }\n}\n\nfunction decorateFieldV1(\n  target: { prototype: object },\n  prop: string | number | symbol,\n  decorators: LegacyDecorator[],\n  initializer?: () => any,\n): void {\n  return decorateFieldV2(target.prototype, prop, decorators, initializer);\n}\n\nfunction decorateFieldV2(\n  prototype: object,\n  prop: string | number | symbol,\n  decorators: LegacyDecorator[],\n  initializer?: () => any,\n): void {\n  let desc: Descriptor = {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: null,\n  };\n  if (initializer) {\n    desc.initializer = initializer;\n  }\n  for (let decorator of decorators) {\n    desc = decorator(prototype, prop, desc) || desc;\n  }\n  if (desc.initializer === undefined) {\n    Object.defineProperty(prototype, prop, desc);\n  } else {\n    deferDecorator(prototype, prop, desc);\n  }\n}\n\nfunction decorateMethodV1(\n  { prototype }: { prototype: object },\n  prop: string | number | symbol,\n  decorators: LegacyDecorator[],\n): void {\n  return decorateMethodV2(prototype, prop, decorators);\n}\n\nfunction decorateMethodV2(\n  prototype: object,\n  prop: string | number | symbol,\n  decorators: LegacyDecorator[],\n): void {\n  const origDesc = Object.getOwnPropertyDescriptor(prototype, prop);\n  let desc: Descriptor = { ...origDesc };\n  for (let decorator of decorators) {\n    desc = decorator(prototype, prop, desc) || desc;\n  }\n  if (desc.initializer !== undefined) {\n    desc.value = desc.initializer ? desc.initializer.call(prototype) : void 0;\n    desc.initializer = undefined;\n  }\n  Object.defineProperty(prototype, prop, desc);\n}\n\nfunction initializeDeferredDecorator(\n  target: object,\n  prop: string | number | symbol,\n): void {\n  let desc = findDeferredDecorator(target.constructor, prop);\n  if (desc) {\n    Object.defineProperty(target, prop, {\n      enumerable: desc.enumerable,\n      configurable: desc.configurable,\n      writable: desc.writable,\n      value: desc.initializer ? desc.initializer.call(target) : undefined,\n    });\n  }\n}\n\nfunction decorateClass(\n  target: new (...args: any) => any,\n  decorators: LegacyClassDecorator[],\n): new (...args: any) => any {\n  return decorators.reduce(\n    (accum, decorator) => decorator(accum) || accum,\n    target,\n  );\n}\n\nfunction decoratePOJO(\n  pojo: object,\n  decorated: [\n    'field' | 'method',\n    string | number | symbol,\n    LegacyDecorator[],\n  ][],\n) {\n  for (let [type, prop, decorators] of decorated) {\n    if (type === 'field') {\n      decoratePojoField(pojo, prop, decorators);\n    } else {\n      decorateMethodV2(pojo, prop, decorators);\n    }\n  }\n  return pojo;\n}\nfunction decoratePojoField(\n  pojo: object,\n  prop: string | number | symbol,\n  decorators: LegacyDecorator[],\n) {\n  let desc: Descriptor = {\n    configurable: true,\n    enumerable: true,\n    writable: true,\n    initializer: () => Object.getOwnPropertyDescriptor(pojo, prop)?.value,\n  };\n  for (let decorator of decorators) {\n    desc = decorator(pojo, prop, desc) || desc;\n  }\n  if (desc.initializer) {\n    desc.value = desc.initializer.call(pojo);\n    delete desc.initializer;\n  }\n  Object.defineProperty(pojo, prop, desc);\n}\n\nexport {\n  decorateFieldV1 as f,\n  decorateFieldV2 as g,\n  decorateMethodV1 as m,\n  decorateMethodV2 as n,\n  initializeDeferredDecorator as i,\n  decorateClass as c,\n  decoratePOJO as p,\n};\n","import { capabilities } from '@ember/modifier';\nimport { destroy } from '@ember/destroyable';\nimport type Owner from '@ember/owner';\n\nimport type ClassBasedModifier from './modifier';\nimport type { ArgsFor, ElementFor } from '../signature';\n\n/**\n * The state bucket used throughout the life-cycle of the modifier. Basically a\n * state *machine*, where the framework calls us with the version we hand back\n * to it at each phase. The two states are the two `extends` versions of this\n * below.\n *\n * @internal\n */\ninterface State<S> {\n  instance: ClassBasedModifier<S>;\n}\n\n/**\n * The `State` after calling `createModifier`, and therefore the state available\n * at the start of `InstallModifier`.\n * @internal\n */\ninterface CreatedState<S> extends State<S> {\n  element: null;\n}\n\n/**\n * The `State` after calling `installModifier`, and therefore the state\n * available in all `updateModifier` calls and in `destroyModifier`.\n * @internal\n */\ninterface InstalledState<S> extends State<S> {\n  element: ElementFor<S>;\n}\n\n// Wraps the unsafe (b/c it mutates, rather than creating new state) code that\n// TS does not yet understand.\nfunction installElement<S>(\n  state: CreatedState<S>,\n  element: ElementFor<S>,\n): InstalledState<S> {\n  // SAFETY: this cast represents how we are actually handling the state machine\n  // transition: from this point forward in the lifecycle of the modifier, it\n  // always behaves as `InstalledState<S>`. It is safe because, and *only*\n  // because, we immediately initialize `element`. (We cannot create a new state\n  // from the old one because the modifier manager API expects mutation of a\n  // single state bucket rather than updating it at hook calls.)\n  const installedState = state as State<S> as InstalledState<S>;\n  installedState.element = element;\n  return installedState;\n}\n\nexport default class ClassBasedModifierManager<S> {\n  capabilities = capabilities('3.22');\n\n  constructor(private owner: Owner) {}\n\n  createModifier(\n    modifierClass: typeof ClassBasedModifier,\n    args: ArgsFor<S>,\n  ): CreatedState<S> {\n    const instance = new modifierClass(this.owner, args);\n    return { instance, element: null };\n  }\n\n  installModifier(\n    createdState: CreatedState<S>,\n    element: ElementFor<S>,\n    args: ArgsFor<S>,\n  ): void {\n    const state = installElement(createdState, element);\n    state.instance.modify(element, args.positional, args.named);\n  }\n\n  updateModifier(state: InstalledState<S>, args: ArgsFor<S>): void {\n    state.instance.modify(state.element, args.positional, args.named);\n  }\n\n  destroyModifier({ instance }: InstalledState<S>): void {\n    destroy(instance);\n  }\n}\n","import { setOwner } from '@ember/application';\nimport { setModifierManager } from '@ember/modifier';\nimport type Owner from '@ember/owner';\nimport Manager from './modifier-manager.ts';\nimport type {\n  ElementFor,\n  ArgsFor,\n  DefaultSignature,\n  PositionalArgs,\n  NamedArgs,\n} from '../signature';\nimport type Opaque from '../opaque';\n\n// Preserve the signature on a class-based modifier, so it can be plucked off\n// later (by e.g. Glint), using interface merging with an opaque item to\n// preserve it in the type system. The fact that it's an empty interface is\n// actually the point: it *only* hooks the type parameter into the opaque\n// (nominal) type. Note that this is distinct from the function-based modifier\n// type intentionally, because it is actually the static class side of a\n// class-based modifier which corresponds to the result of calling `modifier()`\n// with a callback defining a function-based modifier.\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport default interface ClassBasedModifier<S = DefaultSignature>\n  extends Opaque<S> {}\n\n/**\n * A base class for modifiers which need more capabilities than function-based\n * modifiers. Useful if, for example:\n *\n * 1. You need to inject services and access them\n * 2. You need fine-grained control of updates, either for performance or\n *    convenience reasons, and don't want to teardown the state of your modifier\n *    every time only to set it up again.\n * 3. You need to store some local state within your modifier.\n *\n * The lifecycle hooks of class modifiers are tracked. When they run, they any\n * values they access will be added to the modifier, and the modifier will\n * update if any of those values change.\n */\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport default class ClassBasedModifier<S = DefaultSignature> {\n  // `args` is passed here for the sake of subclasses to have access to args in\n  // their constructors while having constructors which are properly asssignable\n  // for the superclass.\n  /**\n   *\n   * @param owner An instance of an Owner (for service injection etc.).\n   * @param args The positional and named arguments passed to the modifier.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  constructor(owner: Owner, args: ArgsFor<S>) {\n    setOwner(this, owner);\n  }\n\n  /**\n   * Called when the modifier is installed and any time any tracked state used\n   * in the modifier changes.\n   *\n   * If you need to do first-time-only setup, create a class field representing\n   * the initialization state and check it when running the hook. That is also\n   * where and when you should use `registerDestructor` for any teardown you\n   * need to do. For example:\n   *\n   * ```js\n   * function disconnect(instance) {\n   *  instance.observer?.disconnect();\n   * }\n   *\n   * class IntersectionObserver extends Modifier {\n   *   observer;\n   *\n   *   constructor(owner, args) {\n   *     super(owner, args);\n   *     registerDestructor(this, disconnect);\n   *   }\n   *\n   *   modify(element, callback, options) {\n   *     disconnect(this);\n   *\n   *     this.observer = new IntersectionObserver(callback, options);\n   *     this.observer.observe(element);\n   *   }\n   * }\n   * ```\n   *\n   * @param element The element to which the modifier is applied.\n   * @param positional The positional arguments to the modifier.\n   * @param named The named arguments to the modifier.\n   */\n  modify(\n    /* eslint-disable @typescript-eslint/no-unused-vars */\n    element: ElementFor<S>,\n    positional: PositionalArgs<S>,\n    named: NamedArgs<S>,\n    /* eslint-enable @typescript-eslint/no-unused-vars */\n  ): void {\n    /* no op, for subclassing */\n  }\n}\n\nsetModifierManager((owner) => new Manager(owner), ClassBasedModifier);\n","import { setModifierManager } from '@ember/modifier';\nimport type {\n  ElementFor,\n  EmptyObject,\n  NamedArgs,\n  PositionalArgs,\n} from '../signature';\nimport type Modifier from '../class-based/modifier';\nimport FunctionBasedModifierManager from './modifier-manager.ts';\n\n// Provide a singleton manager.\nconst MANAGER = new FunctionBasedModifierManager();\n\n// This type exists to provide a non-user-constructible, non-subclassable\n// type representing the conceptual \"instance type\" of a function modifier.\n// The abstract field of type `never` prevents subclassing in userspace of\n// the value returned from `modifier()`. By extending `Modifier<S>`, any\n// augmentations of the `Modifier` type performed by tools like Glint will\n// also apply to function-based modifiers as well.\nexport declare abstract class FunctionBasedModifierInstance<\n  S,\n> extends Modifier<S> {\n  protected abstract __concrete__: never;\n}\n\n// This provides a type whose only purpose here is to represent the runtime\n// type of a function-based modifier: a virtually opaque item. The fact that it's\n// a bare constructor type allows `modifier()` to preserve type parameters from\n// a generic function it's passed, and by making it abstract and impossible to\n// subclass (see above) we prevent users from attempting to instantiate the return\n// value from a `modifier()` call.\nexport type FunctionBasedModifier<S> =\n  abstract new () => FunctionBasedModifierInstance<S>;\n\n/**\n * The (optional) return type for a modifier which needs to perform some kind of\n * cleanup or teardown -- for example, removing an event listener from an\n * element besides the one passed into the modifier.\n */\nexport type Teardown = () => unknown;\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, including any of its arguments that it\n * accesses, and if any of them changes, the function will run again.\n *\n * **Note:** this will *not* automatically rerun because an argument changes. It\n * will only rerun if it is *using* that argument (the same as with auto-tracked\n * state in general).\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @param fn The function which defines the modifier.\n */\n// This overload allows users to write types directly on the callback passed to\n// the `modifier` function and infer the resulting type correctly.\nexport default function modifier<\n  E extends Element,\n  P extends unknown[],\n  N = EmptyObject,\n>(\n  fn: (element: E, positional: P, named: N) => void | Teardown,\n): FunctionBasedModifier<{\n  Args: {\n    Positional: P;\n    Named: N;\n  };\n  Element: E;\n}>;\n\n/**\n * An API for writing simple modifiers.\n *\n * This function runs the first time when the element the modifier was applied\n * to is inserted into the DOM, and it *autotracks* while running. Any values\n * that it accesses will be tracked, including any of its arguments that it\n * accesses, and if any of them changes, the function will run again.\n *\n * **Note:** this will *not* automatically rerun because an argument changes. It\n * will only rerun if it is *using* that argument (the same as with auto-tracked\n * state in general).\n *\n * The modifier can also optionally return a *destructor*. The destructor\n * function will be run just before the next update, and when the element is\n * being removed entirely. It should generally clean up the changes that the\n * modifier made in the first place.\n *\n * @param fn The function which defines the modifier.\n */\n// This overload allows users to provide a `Signature` type explicitly at the\n// modifier definition site, e.g. `modifier<Sig>((el, pos, named) => {...})`.\n// **Note:** this overload must appear second, since TS' inference engine will\n// not correctly infer the type of `S` here from the types on the supplied\n// callback.\nexport default function modifier<S>(\n  fn: (\n    element: ElementFor<S>,\n    positional: PositionalArgs<S>,\n    named: NamedArgs<S>,\n  ) => void | Teardown,\n): FunctionBasedModifier<{\n  Element: ElementFor<S>;\n  Args: {\n    Named: NamedArgs<S>;\n    Positional: PositionalArgs<S>;\n  };\n}>;\n\n// This is the runtime signature; it performs no inference whatsover and just\n// uses the simplest version of the invocation possible since, for the case of\n// setting it on the modifier manager, we don't *need* any of that info, and\n// the two previous overloads capture all invocations from a type perspective.\nexport default function modifier(\n  fn: (\n    element: Element,\n    positional: unknown[],\n    named: object,\n  ) => void | Teardown,\n  options?: {\n    name: string;\n  },\n): FunctionBasedModifier<{\n  Element: Element;\n  Args: {\n    Named: object;\n    Positional: unknown[];\n  };\n}> {\n  fn.toString = () => options?.name || fn.name;\n  // SAFETY: the cast here is a *lie*, but it is a useful one. The actual return\n  // type of `setModifierManager` today is `void`; we pretend it actually\n  // returns an opaque `Modifier` type so that we can provide a result from this\n  // type which is useful to TS-aware tooling (e.g. Glint).\n  return setModifierManager(\n    () => MANAGER,\n    fn,\n  ) as unknown as FunctionBasedModifier<{\n    Element: Element;\n    Args: {\n      Named: object;\n      Positional: unknown[];\n    };\n  }>;\n}\n\n/**\n * @internal\n */\nexport type FunctionBasedModifierDefinition<S> = (\n  element: ElementFor<S>,\n  positional: PositionalArgs<S>,\n  named: NamedArgs<S>,\n) => void | Teardown;\n","import { capabilities } from '@ember/modifier';\nimport type { FunctionBasedModifierDefinition, Teardown } from './modifier';\nimport type { ArgsFor, ElementFor } from '../signature';\n\ninterface State<S> {\n  instance: FunctionBasedModifierDefinition<S>;\n}\n\ninterface CreatedState<S> extends State<S> {\n  element: null;\n}\n\ninterface InstalledState<S> extends State<S> {\n  element: ElementFor<S>;\n  teardown?: Teardown;\n}\n\n// Wraps the unsafe (b/c it mutates, rather than creating new state) code that\n// TS does not yet understand.\nfunction installElement<S>(\n  state: CreatedState<S>,\n  element: ElementFor<S>,\n): InstalledState<S> {\n  // SAFETY: this cast represents how we are actually handling the state machine\n  // transition: from this point forward in the lifecycle of the modifier, it\n  // always behaves as `InstalledState<S>`. It is safe because, and *only*\n  // because, we immediately initialize `element`. (We cannot create a new state\n  // from the old one because the modifier manager API expects mutation of a\n  // single state bucket rather than updating it at hook calls.)\n  const installedState = state as State<S> as InstalledState<S>;\n  installedState.element = element;\n  return installedState;\n}\n\nexport default class FunctionBasedModifierManager<S> {\n  capabilities = capabilities('3.22');\n\n  createModifier(\n    instance: FunctionBasedModifierDefinition<S>,\n  ): CreatedState<S> {\n    return { element: null, instance };\n  }\n\n  installModifier(\n    createdState: CreatedState<S>,\n    element: ElementFor<S>,\n    args: ArgsFor<S>,\n  ): void {\n    const state = installElement(createdState, element);\n\n    const { positional, named } = args;\n    const teardown = createdState.instance(element, positional, named);\n    if (typeof teardown === 'function') {\n      state.teardown = teardown;\n    }\n  }\n\n  updateModifier(state: InstalledState<S>, args: ArgsFor<S>): void {\n    if (typeof state.teardown === 'function') {\n      state.teardown();\n    }\n\n    const teardown = state.instance(state.element, args.positional, args.named);\n    if (typeof teardown === 'function') {\n      state.teardown = teardown;\n    }\n  }\n\n  destroyModifier(state: InstalledState<S>): void {\n    if (typeof state.teardown === 'function') {\n      state.teardown();\n    }\n  }\n\n  getDebugName(state: InstalledState<S>): string {\n    return state.instance.toString();\n  }\n\n  getDebugInstance(state: InstalledState<S>): InstalledState<S> {\n    return state;\n  }\n}\n","export const iconNames = [ 'loading', 'loading-static', 'running', 'running-static', 'apple', 'apple-color', 'alibaba', 'alibaba-color', 'amazon-ecs', 'amazon-ecs-color', 'amazon-eks', 'amazon-eks-color', 'ansible-community', 'ansible-community-color', 'ansible-automation-platform', 'ansible-automation-platform-color', 'auth0', 'auth0-color', 'aws', 'aws-color', 'aws-cdk', 'aws-cdk-color', 'aws-cloudwatch', 'aws-cloudwatch-color', 'aws-ec2', 'aws-ec2-color', 'aws-lambda', 'aws-lambda-color', 'aws-s3', 'aws-s3-color', 'azure', 'azure-color', 'azure-aks', 'azure-aks-color', 'azure-blob-storage', 'azure-blob-storage-color', 'azure-devops', 'azure-devops-color', 'azure-vms', 'azure-vms-color', 'bitbucket', 'bitbucket-color', 'bridgecrew', 'bridgecrew-color', 'cisco', 'cisco-color', 'cloudability', 'cloudability-color', 'codepen', 'codepen-color', 'confluence', 'confluence-color', 'confluent', 'confluent-color', 'datadog', 'datadog-color', 'digital-ocean', 'digital-ocean-color', 'docker', 'docker-color', 'duo', 'duo-color', 'elastic-observability', 'elastic-observability-color', 'f5', 'f5-color', 'facebook', 'facebook-color', 'figma', 'figma-color', 'gcp', 'gcp-color', 'git', 'git-color', 'gitlab', 'gitlab-color', 'github', 'github-color', 'google', 'google-color', 'google-docs', 'google-docs-color', 'google-drive', 'google-drive-color', 'google-forms', 'google-forms-color', 'google-sheets', 'google-sheets-color', 'google-slides', 'google-slides-color', 'grafana', 'grafana-color', 'helm', 'helm-color', 'infracost', 'infracost-color', 'jenkins', 'jenkins-color', 'jfrog', 'jfrog-color', 'jira', 'jira-color', 'jwt', 'jwt-color', 'kubernetes', 'kubernetes-color', 'lightlytics', 'lightlytics-color', 'linkedin', 'linkedin-color', 'linode', 'linode-color', 'linux', 'linux-color', 'loom', 'loom-color', 'meetup', 'meetup-color', 'microsoft', 'microsoft-color', 'microsoft-teams', 'microsoft-teams-color', 'minio', 'minio-color', 'mongodb', 'mongodb-color', 'new-relic', 'new-relic-color', 'okta', 'okta-color', 'oracle', 'oracle-color', 'opa', 'opa-color', 'openid', 'openid-color', 'openstack', 'openstack-color', 'pack', 'pack-color', 'pager-duty', 'pager-duty-color', 'ping-identity', 'ping-identity-color', 'postgres', 'postgres-color', 'rabbitmq', 'rabbitmq-color', 'saml', 'saml-color', 'service-now', 'service-now-color', 'slack', 'slack-color', 'snyk', 'snyk-color', 'splunk', 'splunk-color', 'twilio', 'twilio-color', 'twitch', 'twitch-color', 'twitter', 'twitter-color', 'twitter-x', 'twitter-x-color', 'vantage', 'vantage-color', 'venafi', 'venafi-color', 'vercel', 'vercel-color', 'vmware', 'vmware-color', 'youtube', 'youtube-color', 'boundary', 'boundary-color', 'boundary-fill', 'boundary-fill-color', 'boundary-square', 'boundary-square-color', 'consul', 'consul-color', 'consul-fill', 'consul-fill-color', 'consul-square', 'consul-square-color', 'nomad', 'nomad-color', 'nomad-fill', 'nomad-fill-color', 'nomad-square', 'nomad-square-color', 'packer', 'packer-color', 'packer-fill', 'packer-fill-color', 'packer-square', 'packer-square-color', 'terraform', 'terraform-color', 'terraform-fill', 'terraform-fill-color', 'terraform-square', 'terraform-square-color', 'vagrant', 'vagrant-color', 'vagrant-fill', 'vagrant-fill-color', 'vagrant-square', 'vagrant-square-color', 'vault', 'vault-color', 'vault-fill', 'vault-fill-color', 'vault-square', 'vault-square-color', 'vault-radar', 'vault-radar-color', 'vault-radar-fill', 'vault-radar-fill-color', 'vault-radar-square', 'vault-radar-square-color', 'vault-secrets', 'vault-secrets-color', 'vault-secrets-fill', 'vault-secrets-fill-color', 'vault-secrets-square', 'vault-secrets-square-color', 'waypoint', 'waypoint-color', 'waypoint-fill', 'waypoint-fill-color', 'waypoint-square', 'waypoint-square-color', 'hashicorp', 'hashicorp-color', 'hashicorp-fill', 'hashicorp-fill-color', 'hashicorp-square', 'hashicorp-square-color', 'hcp', 'hcp-color', 'hcp-fill', 'hcp-fill-color', 'hcp-square', 'hcp-square-color', 'accessibility', 'folder-users', 'frown', 'identity-service', 'identity-user', 'meh', 'robot', 'smile', 'user', 'user-check', 'user-circle', 'user-circle-fill', 'user-minus', 'user-plus', 'user-x', 'users', 'ampersand', 'beaker', 'bucket', 'bulb', 'circle', 'circle-dash', 'circle-dot', 'circle-fill', 'circle-half', 'diamond', 'diamond-fill', 'disc', 'dot', 'dot-half', 'droplet', 'flag', 'gift', 'government', 'handshake', 'hash', 'hexagon', 'hexagon-fill', 'incomplete-normal', 'labyrinth', 'layers', 'moon', 'octagon', 'outline', 'random', 'rocket', 'sparkle', 'square', 'square-fill', 'sun', 'triangle', 'triangle-fill', 'truck', 'wand', 'zap', 'zap-off', 'docs', 'docs-download', 'docs-link', 'guide', 'guide-link', 'help', 'info', 'info-fill', 'learn', 'learn-link', 'support', 'alert-circle', 'alert-circle-fill', 'alert-diamond', 'alert-diamond-fill', 'alert-octagon', 'alert-octagon-fill', 'alert-triangle', 'alert-triangle-fill', 'check', 'check-circle', 'check-circle-fill', 'error-filled', 'check-diamond', 'check-diamond-fill', 'check-hexagon', 'check-hexagon-fill', 'check-square', 'check-square-fill', 'skip', 'x', 'x-circle', 'x-circle-fill', 'x-diamond', 'x-diamond-fill', 'x-hexagon', 'x-hexagon-fill', 'x-square', 'x-square-fill', 'bug', 'certificate', 'eye', 'eye-off', 'fingerprint', 'key', 'keychain', 'lock', 'lock-fill', 'lock-off', 'shield', 'shield-alert', 'shield-check', 'shield-off', 'shield-x', 'token', 'unlock', 'verified', 'wall', 'minus', 'minus-circle', 'minus-circle-fill', 'minus-plus', 'minus-plus-circle', 'minus-plus-square', 'minus-square', 'minus-square-fill', 'plus', 'plus-circle', 'plus-circle-fill', 'plus-square', 'camera', 'camera-off', 'cast', 'closed-caption', 'fast-forward', 'film', 'headphones', 'image', 'music', 'pause', 'pause-circle', 'play', 'play-circle', 'radio', 'rewind', 'rss', 'skip-back', 'skip-forward', 'speaker', 'stop-circle', 'volume', 'volume-down', 'volume-up', 'volume-x', 'wifi', 'wifi-off', 'compass', 'crosshair', 'map', 'map-pin', 'navigation', 'navigation-alt', 'redirect', 'target', 'align-center', 'align-justify', 'align-left', 'align-right', 'battery', 'battery-charging', 'bookmark', 'bookmark-add', 'bookmark-add-fill', 'bookmark-fill', 'bookmark-remove', 'bookmark-remove-fill', 'bottom', 'command', 'crop', 'dashboard', 'delete', 'download', 'edit', 'end', 'entry-point', 'exit-point', 'external-link', 'filter', 'filter-circle', 'filter-fill', 'grid', 'grid-alt', 'home', 'jump-link', 'layout', 'link', 'list', 'maximize', 'maximize-alt', 'menu', 'minimize', 'minimize-alt', 'more-horizontal', 'more-vertical', 'mouse-pointer', 'move-horizontal', 'paperclip', 'pen-tool', 'pencil-tool', 'pin', 'pin-off', 'power', 'printer', 'reload', 'repeat', 'resize-column', 'rotate-cw', 'rotate-ccw', 'search', 'share', 'sidebar', 'sidebar-hide', 'sidebar-show', 'sign-in', 'sign-out', 'slash', 'slash-square', 'sort-asc', 'sort-desc', 'start', 'switcher', 'sync', 'sync-alert', 'sync-reverse', 'tag', 'text-wrap', 'toggle-left', 'toggle-right', 'top', 'trash', 'type', 'unfold-close', 'unfold-open', 'upload', 'workspace', 'zoom-in', 'zoom-out', 'archive', 'clipboard', 'clipboard-checked', 'clipboard-copy', 'clipboard-x', 'file', 'file-change', 'file-check', 'file-diff', 'file-minus', 'file-plus', 'file-source', 'file-text', 'file-x', 'files', 'folder', 'folder-fill', 'folder-minus', 'folder-minus-fill', 'folder-plus', 'folder-plus-fill', 'folder-star', 'inbox', 'api', 'auto-apply', 'build', 'change', 'change-circle', 'change-square', 'channel', 'cloud', 'cloud-check', 'cloud-download', 'cloud-lightning', 'cloud-lock', 'cloud-off', 'cloud-upload', 'cloud-x', 'code', 'connection', 'connection-gateway', 'cpu', 'duplicate', 'gateway', 'git-branch', 'git-commit', 'git-merge', 'git-pull-request', 'git-repo', 'hammer', 'key-values', 'mainframe', 'mesh', 'module', 'monitor', 'network', 'network-alt', 'node', 'path', 'pipeline', 'plug', 'portal', 'replication-direct', 'replication-perf', 'scissors', 'server', 'server-cluster', 'serverless', 'service', 'settings', 'sliders', 'smartphone', 'socket', 'step', 'tablet', 'terminal', 'terminal-screen', 'test', 'tools', 'transform-data', 'tv', 'webhook', 'wrench', 'calendar', 'clock', 'clock-filled', 'delay', 'event', 'history', 'hourglass', 'watch', 'bar-chart', 'bar-chart-alt', 'box', 'collections', 'database', 'hard-drive', 'line-chart', 'line-chart-up', 'logs', 'package', 'pie-chart', 'queue', 'save', 'trend-down', 'trend-up', 'activity', 'at-sign', 'award', 'bell', 'bell-active', 'bell-active-fill', 'bell-off', 'discussion-circle', 'discussion-square', 'heart', 'heart-fill', 'heart-off', 'mail', 'mail-open', 'message-circle', 'message-circle-fill', 'message-square', 'message-square-fill', 'mic', 'mic-off', 'newspaper', 'phone', 'phone-call', 'phone-off', 'send', 'star', 'star-circle', 'star-fill', 'star-off', 'thumbs-down', 'thumbs-up', 'video', 'video-off', 'bank-vault', 'briefcase', 'credit-card', 'dollar-sign', 'enterprise', 'globe', 'globe-private', 'org', 'provider', 'shopping-bag', 'shopping-cart', 'arrow-down', 'arrow-down-circle', 'arrow-down-left', 'arrow-down-right', 'arrow-left', 'arrow-left-circle', 'arrow-right', 'arrow-right-circle', 'arrow-up', 'arrow-up-circle', 'arrow-up-left', 'arrow-up-right', 'caret', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'chevrons-down', 'chevrons-left', 'chevrons-right', 'chevrons-up', 'corner-down-left', 'corner-down-right', 'corner-left-down', 'corner-left-up', 'corner-right-down', 'corner-right-up', 'corner-up-left', 'corner-up-right', 'load-balancer', 'migrate', 'move', 'shuffle', 'swap-horizontal', 'swap-vertical' ];","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { guidFor } from '@ember/object/internals';\nimport { iconNames } from '@hashicorp/flight-icons/svg';\nimport type { IconName } from '@hashicorp/flight-icons/svg';\nimport type Owner from '@ember/owner';\n\nimport { HdsIconSizeValues, HdsIconColorValues } from './types.ts';\nimport type { HdsIconSizes, HdsIconColors } from './types.ts';\n\nexport const COLORS: HdsIconColors[] = Object.values(HdsIconColorValues);\nexport const NAMES = iconNames;\n\nexport interface HdsIconSignature {\n  Args: {\n    name: IconName;\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n    color?: HdsIconColors | string | undefined;\n    size?: HdsIconSizes;\n    stretched?: boolean;\n    isInline?: boolean;\n    title?: string;\n  };\n  Element: SVGElement;\n}\n\nexport default class HdsIcon extends Component<HdsIconSignature> {\n  private _iconId = 'icon-' + guidFor(this);\n  private _titleId = 'title-' + guidFor(this);\n\n  constructor(owner: Owner, args: HdsIconSignature['Args']) {\n    super(owner, args);\n\n    if (!this.args.name) {\n      assert('Please provide to <Hds::Icon> a value for @name');\n    } else if (!iconNames.includes(this.args.name)) {\n      assert(\n        `The icon @name \"${this.args.name}\" provided to <Hds::Icon> is not correct. Please verify it exists on https://helios.hashicorp.design/icons/library`\n      );\n    }\n  }\n\n  get isInline() {\n    return this.args.isInline ?? false;\n  }\n\n  get predefinedColor() {\n    const { color } = this.args;\n\n    if (color && COLORS.includes(color as HdsIconColors)) {\n      return color as HdsIconColors;\n    } else {\n      return undefined;\n    }\n  }\n\n  get fillColor() {\n    if (this.predefinedColor !== undefined) {\n      return 'currentColor';\n    } else {\n      return this.args.color ?? 'currentColor';\n    }\n  }\n\n  get size() {\n    return this.args.size ?? HdsIconSizeValues.Sixteen;\n  }\n\n  get svgSize(): { width: string; height: string } {\n    return {\n      width: this.args.stretched ? '100%' : this.size,\n      height: this.args.stretched ? '100%' : this.size,\n    };\n  }\n\n  get title() {\n    return this.args.title ?? null;\n  }\n\n  get role() {\n    return this.args.title ? 'img' : null;\n  }\n\n  get ariaLabelledby() {\n    return this.args.title ? this._titleId : null;\n  }\n\n  get classNames() {\n    const { name } = this.args;\n    const classes = ['hds-icon'];\n\n    // add a class based on the @name argument\n    classes.push(`hds-icon-${name}`);\n\n    if (this.isInline) {\n      classes.push('hds-icon--is-inline');\n    }\n\n    // add a (helper) class based on the @color argument (if pre-defined)\n    if (this.predefinedColor) {\n      classes.push(`hds-foreground-${this.predefinedColor}`);\n    }\n\n    // add an extra class to control the animation (depends on the icon)\n    if (['loading', 'running'].includes(name)) {\n      classes.push(`hds-icon--animation-${name}`);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <svg\n      class={{this.classNames}}\n      ...attributes\n      aria-hidden={{if @title \"false\" \"true\"}}\n      aria-labelledby={{this.ariaLabelledby}}\n      data-test-icon={{@name}}\n      fill={{this.fillColor}}\n      id={{this._iconId}}\n      role={{this.role}}\n      width={{this.svgSize.width}}\n      height={{this.svgSize.height}}\n      viewBox=\"0 0 {{this.size}} {{this.size}}\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      {{#if @title}}\n        <title id={{this._titleId}}>{{@title}}</title>\n        <g role=\"presentation\">\n          <use href=\"#flight-{{@name}}-{{this.size}}\" />\n        </g>\n      {{else}}\n        <use href=\"#flight-{{@name}}-{{this.size}}\" />\n      {{/if}}\n    </svg>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\n\nimport HdsText from './index.gts';\nimport { HdsTextSizeValues, HdsTextWeightValues } from './types.ts';\nimport type {\n  HdsTextAligns,\n  HdsTextColors,\n  HdsTextTags,\n  HdsTextWeights,\n} from './types.ts';\n\n// notice: only some combinations of size + font-weight are allowed (per design specs)\n// see: https://www.figma.com/file/oQsMzMMnynfPWpMEt91OpH/HDS-Product---Foundations?node-id=1262%3A9192\n\n// Allow consumers to provide either string or number representation of size\ntype HdsTextBodySizeNumber = Extract<\n  HdsTextSizeValues,\n  | HdsTextSizeValues.OneHundred\n  | HdsTextSizeValues.TwoHundred\n  | HdsTextSizeValues.ThreeHundred\n>;\ntype HdsTextBodySizeString = `${HdsTextBodySizeNumber}`;\nexport type HdsTextBodySizes = HdsTextBodySizeNumber | HdsTextBodySizeString;\nexport const SIZES: HdsTextBodySizes[] = [\n  HdsTextSizeValues.ThreeHundred,\n  HdsTextSizeValues.TwoHundred,\n  HdsTextSizeValues.OneHundred,\n];\nexport const DEFAULT_SIZE = HdsTextSizeValues.TwoHundred;\n\nexport const DEFAULT_WEIGHT = HdsTextWeightValues.Regular;\nexport type HdsTextBodyWeight = Extract<\n  HdsTextWeights,\n  'regular' | 'medium' | 'semibold'\n>;\nexport const WEIGHTS_PER_SIZE: Record<HdsTextBodySizes, HdsTextBodyWeight[]> = {\n  300: [\n    HdsTextWeightValues.Regular,\n    HdsTextWeightValues.Medium,\n    HdsTextWeightValues.Semibold,\n  ],\n  200: [\n    HdsTextWeightValues.Regular,\n    HdsTextWeightValues.Medium,\n    HdsTextWeightValues.Semibold,\n  ],\n  100: [\n    HdsTextWeightValues.Regular,\n    HdsTextWeightValues.Medium,\n    HdsTextWeightValues.Semibold,\n  ],\n};\n\nexport interface HdsTextBodySignature {\n  Args: {\n    size?: HdsTextBodySizes;\n    tag?: HdsTextTags;\n    weight?: HdsTextBodyWeight;\n    align?: HdsTextAligns;\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n    color?: string | HdsTextColors;\n  };\n  Element:\n    | HTMLSpanElement\n    | HTMLHeadingElement\n    | HTMLParagraphElement\n    | HTMLDivElement;\n  Blocks: {\n    default: [];\n  };\n}\n\nexport default class HdsTextBody extends Component<HdsTextBodySignature> {\n  // Sets the \"size\" for the text\n  get size(): HdsTextBodySizes {\n    let { size = DEFAULT_SIZE } = this.args;\n\n    // let's be a bit forgiving with the consumers\n    if (typeof size === 'string') {\n      size = parseInt(size, 10);\n    }\n\n    assert(\n      `@size for \"Hds::Text::Body\" must be one of the following: ${SIZES.join(\n        ', '\n      )}; received: ${size}`,\n      SIZES.includes(size)\n    );\n\n    return size;\n  }\n\n  // Sets the \"weight\" for the text\n  get weight(): HdsTextWeights {\n    const { weight = DEFAULT_WEIGHT } = this.args;\n\n    const weights = WEIGHTS_PER_SIZE[this.size];\n\n    assert(\n      `@weight for \"Hds::Text::Body\" with @size=${\n        this.size\n      } must be one of the following: ${weights.join(\n        ', '\n      )}; received: ${weight}`,\n      weights.includes(weight)\n    );\n\n    return weight;\n  }\n\n  <template>\n    <HdsText\n      @group=\"body\"\n      @size={{this.size}}\n      @weight={{this.weight}}\n      @align={{@align}}\n      @color={{@color}}\n      @tag={{@tag}}\n      ...attributes\n    >{{yield}}</HdsText>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Helper from '@ember/component/helper';\nimport { service } from '@ember/service';\nimport { assert } from '@ember/debug';\nimport { isPresent } from '@ember/utils';\n\nimport type HdsIntlService from '../services/hds-intl';\nimport type { HdsIntlTOptions } from '../services/hds-intl';\n\ninterface HdsTHelperSignature {\n  Args: {\n    Positional: string[];\n    Named: HdsIntlTOptions;\n  };\n  Return: string;\n}\n\nexport default class HdsTHelper extends Helper<HdsTHelperSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  compute(\n    positional: HdsTHelperSignature['Args']['Positional'],\n    named: HdsTHelperSignature['Args']['Named']\n  ): HdsTHelperSignature['Return'] {\n    const key = positional[0];\n\n    assert(\n      'Hds::T helper requires a key as the first positional argument',\n      typeof key === 'string' && isPresent(key)\n    );\n\n    return this.hdsIntl.t(key, named);\n  }\n}\n","import { getGlobalSingleton } from '../carrier';\nimport type { ConsoleLevel } from '../types-hoist';\nimport { DEBUG_BUILD } from './debug-build';\nimport { GLOBAL_OBJ } from './worldwide';\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\nexport const CONSOLE_LEVELS: readonly ConsoleLevel[] = [\n  'debug',\n  'info',\n  'warn',\n  'error',\n  'log',\n  'assert',\n  'trace',\n] as const;\n\ntype LoggerMethod = (...args: unknown[]) => void;\ntype LoggerConsoleMethods = Record<ConsoleLevel, LoggerMethod>;\n\n/** This may be mutated by the console instrumentation. */\nexport const originalConsoleMethods: {\n  [key in ConsoleLevel]?: (...args: unknown[]) => void;\n} = {};\n\n/** A Sentry Logger instance. */\nexport interface Logger extends LoggerConsoleMethods {\n  disable(): void;\n  enable(): void;\n  isEnabled(): boolean;\n}\n\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nexport function consoleSandbox<T>(callback: () => T): T {\n  if (!('console' in GLOBAL_OBJ)) {\n    return callback();\n  }\n\n  const console = GLOBAL_OBJ.console as Console;\n  const wrappedFuncs: Partial<LoggerConsoleMethods> = {};\n\n  const wrappedLevels = Object.keys(originalConsoleMethods) as ConsoleLevel[];\n\n  // Restore all wrapped console methods\n  wrappedLevels.forEach(level => {\n    const originalConsoleMethod = originalConsoleMethods[level] as LoggerMethod;\n    wrappedFuncs[level] = console[level] as LoggerMethod | undefined;\n    console[level] = originalConsoleMethod;\n  });\n\n  try {\n    return callback();\n  } finally {\n    // Revert restoration to wrapped state\n    wrappedLevels.forEach(level => {\n      console[level] = wrappedFuncs[level] as LoggerMethod;\n    });\n  }\n}\n\nfunction makeLogger(): Logger {\n  let enabled = false;\n  const logger: Partial<Logger> = {\n    enable: () => {\n      enabled = true;\n    },\n    disable: () => {\n      enabled = false;\n    },\n    isEnabled: () => enabled,\n  };\n\n  if (DEBUG_BUILD) {\n    CONSOLE_LEVELS.forEach(name => {\n      logger[name] = (...args: Parameters<(typeof GLOBAL_OBJ.console)[typeof name]>) => {\n        if (enabled) {\n          consoleSandbox(() => {\n            GLOBAL_OBJ.console[name](`${PREFIX}[${name}]:`, ...args);\n          });\n        }\n      };\n    });\n  } else {\n    CONSOLE_LEVELS.forEach(name => {\n      logger[name] = () => undefined;\n    });\n  }\n\n  return logger as Logger;\n}\n\n/**\n * This is a logger singleton which either logs things or no-ops if logging is not enabled.\n * The logger is a singleton on the carrier, to ensure that a consistent logger is used throughout the SDK.\n */\nexport const logger = getGlobalSingleton('logger', makeLogger);\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { WrappedFunction } from '../types-hoist';\n\nimport { htmlTreeAsString } from './browser';\nimport { DEBUG_BUILD } from './debug-build';\nimport { isElement, isError, isEvent, isInstanceOf, isPlainObject, isPrimitive } from './is';\nimport { logger } from './logger';\nimport { truncate } from './string';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * If the method on the passed object is not a function, the wrapper will not be applied.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, <other\n * args>)` or `origMethod.apply(this, [<other args>])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nexport function fill(source: { [key: string]: any }, name: string, replacementFactory: (...args: any[]) => any): void {\n  if (!(name in source)) {\n    return;\n  }\n\n  // explicitly casting to unknown because we don't know the type of the method initially at all\n  const original = source[name] as unknown;\n\n  if (typeof original !== 'function') {\n    return;\n  }\n\n  const wrapped = replacementFactory(original) as WrappedFunction;\n\n  // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n  // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n  if (typeof wrapped === 'function') {\n    markFunctionWrapped(wrapped, original);\n  }\n\n  try {\n    source[name] = wrapped;\n  } catch {\n    DEBUG_BUILD && logger.log(`Failed to replace method \"${name}\" in object`, source);\n  }\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nexport function addNonEnumerableProperty(obj: object, name: string, value: unknown): void {\n  try {\n    Object.defineProperty(obj, name, {\n      // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n      value: value,\n      writable: true,\n      configurable: true,\n    });\n  } catch (o_O) {\n    DEBUG_BUILD && logger.log(`Failed to add non-enumerable property \"${name}\" to object`, obj);\n  }\n}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nexport function markFunctionWrapped(wrapped: WrappedFunction, original: WrappedFunction): void {\n  try {\n    const proto = original.prototype || {};\n    wrapped.prototype = original.prototype = proto;\n    addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n  } catch (o_O) {} // eslint-disable-line no-empty\n}\n\n/**\n * This extracts the original function if available.  See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function getOriginalFunction<T extends Function>(func: WrappedFunction<T>): T | undefined {\n  return func.__sentry_original__;\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argument itself, when value is neither an Event nor\n *  an Error.\n */\nexport function convertToPlainObject<V>(value: V):\n  | {\n      [ownProps: string]: unknown;\n      type: string;\n      target: string;\n      currentTarget: string;\n      detail?: unknown;\n    }\n  | {\n      [ownProps: string]: unknown;\n      message: string;\n      name: string;\n      stack?: string;\n    }\n  | V {\n  if (isError(value)) {\n    return {\n      message: value.message,\n      name: value.name,\n      stack: value.stack,\n      ...getOwnProperties(value),\n    };\n  } else if (isEvent(value)) {\n    const newObj: {\n      [ownProps: string]: unknown;\n      type: string;\n      target: string;\n      currentTarget: string;\n      detail?: unknown;\n    } = {\n      type: value.type,\n      target: serializeEventTarget(value.target),\n      currentTarget: serializeEventTarget(value.currentTarget),\n      ...getOwnProperties(value),\n    };\n\n    if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n      newObj.detail = value.detail;\n    }\n\n    return newObj;\n  } else {\n    return value;\n  }\n}\n\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target: unknown): string {\n  try {\n    return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target);\n  } catch (_oO) {\n    return '<unknown>';\n  }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj: unknown): { [key: string]: unknown } {\n  if (typeof obj === 'object' && obj !== null) {\n    const extractedProps: { [key: string]: unknown } = {};\n    for (const property in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, property)) {\n        extractedProps[property] = (obj as Record<string, unknown>)[property];\n      }\n    }\n    return extractedProps;\n  } else {\n    return {};\n  }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nexport function extractExceptionKeysForMessage(exception: Record<string, unknown>, maxLength: number = 40): string {\n  const keys = Object.keys(convertToPlainObject(exception));\n  keys.sort();\n\n  const firstKey = keys[0];\n\n  if (!firstKey) {\n    return '[object has no keys]';\n  }\n\n  if (firstKey.length >= maxLength) {\n    return truncate(firstKey, maxLength);\n  }\n\n  for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n    const serialized = keys.slice(0, includedKeys).join(', ');\n    if (serialized.length > maxLength) {\n      continue;\n    }\n    if (includedKeys === keys.length) {\n      return serialized;\n    }\n    return truncate(serialized, maxLength);\n  }\n\n  return '';\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n */\nexport function dropUndefinedKeys<T>(inputValue: T): T {\n  // This map keeps track of what already visited nodes map to.\n  // Our Set - based memoBuilder doesn't work here because we want to the output object to have the same circular\n  // references as the input object.\n  const memoizationMap = new Map<unknown, unknown>();\n\n  // This function just proxies `_dropUndefinedKeys` to keep the `memoBuilder` out of this function's API\n  return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys<T>(inputValue: T, memoizationMap: Map<unknown, unknown>): T {\n  if (isPojo(inputValue)) {\n    // If this node has already been visited due to a circular reference, return the object it was mapped to in the new object\n    const memoVal = memoizationMap.get(inputValue);\n    if (memoVal !== undefined) {\n      return memoVal as T;\n    }\n\n    const returnValue: { [key: string]: unknown } = {};\n    // Store the mapping of this value in case we visit it again, in case of circular data\n    memoizationMap.set(inputValue, returnValue);\n\n    for (const key of Object.getOwnPropertyNames(inputValue)) {\n      if (typeof inputValue[key] !== 'undefined') {\n        returnValue[key] = _dropUndefinedKeys(inputValue[key], memoizationMap);\n      }\n    }\n\n    return returnValue as T;\n  }\n\n  if (Array.isArray(inputValue)) {\n    // If this node has already been visited due to a circular reference, return the array it was mapped to in the new object\n    const memoVal = memoizationMap.get(inputValue);\n    if (memoVal !== undefined) {\n      return memoVal as T;\n    }\n\n    const returnValue: unknown[] = [];\n    // Store the mapping of this value in case we visit it again, in case of circular data\n    memoizationMap.set(inputValue, returnValue);\n\n    inputValue.forEach((item: unknown) => {\n      returnValue.push(_dropUndefinedKeys(item, memoizationMap));\n    });\n\n    return returnValue as unknown as T;\n  }\n\n  return inputValue;\n}\n\nfunction isPojo(input: unknown): input is Record<string, unknown> {\n  if (!isPlainObject(input)) {\n    return false;\n  }\n\n  try {\n    const name = (Object.getPrototypeOf(input) as { constructor: { name: string } }).constructor.name;\n    return !name || name === 'Object';\n  } catch {\n    return true;\n  }\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nexport function objectify(wat: unknown): typeof Object {\n  let objectified;\n  switch (true) {\n    // this will catch both undefined and null\n    case wat == undefined:\n      objectified = new String(wat);\n      break;\n\n    // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n    // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n    // an object in order to wrap it.\n    case typeof wat === 'symbol' || typeof wat === 'bigint':\n      objectified = Object(wat);\n      break;\n\n    // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n    case isPrimitive(wat):\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      objectified = new (wat as any).constructor(wat);\n      break;\n\n    // by process of elimination, at this point we know that `wat` must already be an object\n    default:\n      objectified = wat;\n      break;\n  }\n  return objectified;\n}\n","import { getAsyncContextStrategy } from './asyncContext';\nimport { getGlobalSingleton, getMainCarrier } from './carrier';\nimport type { Client } from './client';\nimport { Scope } from './scope';\nimport type { TraceContext } from './types-hoist';\nimport { generateSpanId } from './utils-hoist';\nimport { dropUndefinedKeys } from './utils-hoist/object';\n\n/**\n * Get the currently active scope.\n */\nexport function getCurrentScope(): Scope {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  return acs.getCurrentScope();\n}\n\n/**\n * Get the currently active isolation scope.\n * The isolation scope is active for the current execution context.\n */\nexport function getIsolationScope(): Scope {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  return acs.getIsolationScope();\n}\n\n/**\n * Get the global scope.\n * This scope is applied to _all_ events.\n */\nexport function getGlobalScope(): Scope {\n  return getGlobalSingleton('globalScope', () => new Scope());\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n */\nexport function withScope<T>(callback: (scope: Scope) => T): T;\n/**\n * Set the given scope as the active scope in the callback.\n */\nexport function withScope<T>(scope: Scope | undefined, callback: (scope: Scope) => T): T;\n/**\n * Either creates a new active scope, or sets the given scope as active scope in the given callback.\n */\nexport function withScope<T>(\n  ...rest: [callback: (scope: Scope) => T] | [scope: Scope | undefined, callback: (scope: Scope) => T]\n): T {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n\n  // If a scope is defined, we want to make this the active scope instead of the default one\n  if (rest.length === 2) {\n    const [scope, callback] = rest;\n\n    if (!scope) {\n      return acs.withScope(callback);\n    }\n\n    return acs.withSetScope(scope, callback);\n  }\n\n  return acs.withScope(rest[0]);\n}\n\n/**\n * Attempts to fork the current isolation scope and the current scope based on the current async context strategy. If no\n * async context strategy is set, the isolation scope and the current scope will not be forked (this is currently the\n * case, for example, in the browser).\n *\n * Usage of this function in environments without async context strategy is discouraged and may lead to unexpected behaviour.\n *\n * This function is intended for Sentry SDK and SDK integration development. It is not recommended to be used in \"normal\"\n * applications directly because it comes with pitfalls. Use at your own risk!\n */\nexport function withIsolationScope<T>(callback: (isolationScope: Scope) => T): T;\n/**\n * Set the provided isolation scope as active in the given callback. If no\n * async context strategy is set, the isolation scope and the current scope will not be forked (this is currently the\n * case, for example, in the browser).\n *\n * Usage of this function in environments without async context strategy is discouraged and may lead to unexpected behaviour.\n *\n * This function is intended for Sentry SDK and SDK integration development. It is not recommended to be used in \"normal\"\n * applications directly because it comes with pitfalls. Use at your own risk!\n *\n * If you pass in `undefined` as a scope, it will fork a new isolation scope, the same as if no scope is passed.\n */\nexport function withIsolationScope<T>(isolationScope: Scope | undefined, callback: (isolationScope: Scope) => T): T;\n/**\n * Either creates a new active isolation scope, or sets the given isolation scope as active scope in the given callback.\n */\nexport function withIsolationScope<T>(\n  ...rest:\n    | [callback: (isolationScope: Scope) => T]\n    | [isolationScope: Scope | undefined, callback: (isolationScope: Scope) => T]\n): T {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n\n  // If a scope is defined, we want to make this the active scope instead of the default one\n  if (rest.length === 2) {\n    const [isolationScope, callback] = rest;\n\n    if (!isolationScope) {\n      return acs.withIsolationScope(callback);\n    }\n\n    return acs.withSetIsolationScope(isolationScope, callback);\n  }\n\n  return acs.withIsolationScope(rest[0]);\n}\n\n/**\n * Get the currently active client.\n */\nexport function getClient<C extends Client>(): C | undefined {\n  return getCurrentScope().getClient<C>();\n}\n\n/**\n * Get a trace context for the given scope.\n */\nexport function getTraceContextFromScope(scope: Scope): TraceContext {\n  const propagationContext = scope.getPropagationContext();\n\n  const { traceId, parentSpanId, propagationSpanId } = propagationContext;\n\n  const traceContext: TraceContext = dropUndefinedKeys({\n    trace_id: traceId,\n    span_id: propagationSpanId || generateSpanId(),\n    parent_span_id: parentSpanId,\n  });\n\n  return traceContext;\n}\n","import EmberArray, { isArray } from '@ember/array';\nimport EmberObject, { get } from '@ember/object';\n\nimport type ArrayProxy from '@ember/array/proxy';\n\nfunction isIterable(value: unknown) {\n  return Symbol.iterator in Object(value);\n}\n\n// from https://github.com/flexyford/ember-power-select/blob/78a5430c1ac89daf315d0801fd5201e444e82434/addon/components/power-select.ts\nfunction isArrayable<T>(thing: unknown): thing is EmberArray<T> {\n  return typeof (thing as EmberArray<T>).slice === 'function';\n}\n\nfunction isPromiseLike<T>(thing: unknown) {\n  return typeof (thing as Promise<T>).then === 'function';\n}\n\nfunction isPromiseProxyLike<T>(thing: unknown): thing is ArrayProxy<T> {\n  return (\n    isPromiseLike(thing as Promise<T>) &&\n    Object.hasOwnProperty.call(thing, 'content')\n  );\n}\n\nfunction toExtendable<T>(array: T[]) {\n  if (!Object.isExtensible(array)) {\n    return Array.from(array);\n  } else {\n    return array;\n  }\n}\n\nexport default function asArray<T>(maybeArray: T[]): T[] {\n  return toExtendable(_asArray(maybeArray));\n}\n\nfunction _asArray<T>(maybeArray: unknown): T[] {\n  if (typeof maybeArray === 'number') {\n    throw new Error(\n      'Numbers not supported as arrays [ember-composable-helpers]',\n    );\n  }\n  if (typeof maybeArray === 'string') {\n    return maybeArray.split('') as T[];\n  }\n  // for perf-reasons falling back to e-array, instead of using it first\n  if (Array.isArray(maybeArray)) {\n    return maybeArray;\n  } else if (isArray(maybeArray)) {\n    return maybeArray as T[];\n  } else if (typeof maybeArray === 'object' && maybeArray === null) {\n    return [];\n  } else if (typeof maybeArray === 'undefined') {\n    return [];\n  } else if (maybeArray instanceof Set) {\n    return Array.from(maybeArray.values());\n  } else if (maybeArray instanceof Map) {\n    return Array.from(maybeArray.values());\n  } else if (maybeArray instanceof WeakMap) {\n    throw new Error(\n      'WeakMaps is not supported as arrays [ember-composable-helpers]',\n    );\n  } else if (maybeArray instanceof WeakSet) {\n    throw new Error(\n      'WeakSets is not supported as arrays [ember-composable-helpers]',\n    );\n  }\n  if (typeof maybeArray === 'object') {\n    if (isPromiseProxyLike(maybeArray)) {\n      // eslint-disable-next-line ember/no-get -- TODO: Revisit this\n      const content = get(maybeArray, 'content');\n      if (typeof content !== 'object' || content === null) {\n        throw new Error(\n          'Unknown content type in array-like object [ember-composable-helpers]',\n        );\n      }\n      if (isArrayable(content)) {\n        return (content as EmberArray<T>).slice();\n      } else {\n        return _asArray(content);\n      }\n    }\n    if (isPromiseLike(maybeArray)) {\n      throw new Error(\n        'Promise-like objects is not supported as arrays [ember-composable-helpers]',\n      );\n    }\n    if (isArrayable(maybeArray)) {\n      return (maybeArray as EmberArray<T>).slice();\n    }\n    if (maybeArray instanceof EmberObject) {\n      throw new Error(\n        'EmberObjects is not supported as arrays [ember-composable-helpers]',\n      );\n    }\n    return Array.from(Object.values(maybeArray));\n  }\n  if (!maybeArray) {\n    return [];\n  }\n  if (!isIterable(maybeArray)) {\n    throw new Error(\n      'Argument, passed as array is not iterable [ember-composable-helpers]',\n    );\n  }\n  return maybeArray as T[];\n}\n","declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n","/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n *\n * Note: This file was originally called `global.ts`, but was changed to unblock users which might be doing\n * string replaces with bundlers like Vite for `global` (would break imports that rely on importing from utils/src/global).\n *\n * Why worldwide?\n *\n * Why not?\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { Carrier } from '../carrier';\nimport type { SdkSource } from './env';\n\n/** Internal global with common properties and Sentry extensions  */\nexport type InternalGlobal = {\n  navigator?: { userAgent?: string; maxTouchPoints?: number };\n  console: Console;\n  PerformanceObserver?: any;\n  Sentry?: any;\n  onerror?: {\n    (event: object | string, source?: string, lineno?: number, colno?: number, error?: Error): any;\n    __SENTRY_INSTRUMENTED__?: true;\n  };\n  onunhandledrejection?: {\n    (event: unknown): boolean;\n    __SENTRY_INSTRUMENTED__?: true;\n  };\n  SENTRY_ENVIRONMENT?: string;\n  SENTRY_DSN?: string;\n  SENTRY_RELEASE?: {\n    id?: string;\n  };\n  SENTRY_SDK_SOURCE?: SdkSource;\n  /**\n   * Debug IDs are indirectly injected by Sentry CLI or bundler plugins to directly reference a particular source map\n   * for resolving of a source file. The injected code will place an entry into the record for each loaded bundle/JS\n   * file.\n   */\n  _sentryDebugIds?: Record<string, string>;\n  /**\n   * Raw module metadata that is injected by bundler plugins.\n   *\n   * Keys are `error.stack` strings, values are the metadata.\n   */\n  _sentryModuleMetadata?: Record<string, any>;\n  _sentryEsmLoaderHookRegistered?: boolean;\n} & Carrier;\n\n/** Get's the global object for the current JavaScript runtime */\nexport const GLOBAL_OBJ = globalThis as unknown as InternalGlobal;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { ParameterizedString, PolymorphicEvent, Primitive } from '../types-hoist';\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst objectToString = Object.prototype.toString;\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isError(wat: unknown): wat is Error {\n  switch (objectToString.call(wat)) {\n    case '[object Error]':\n    case '[object Exception]':\n    case '[object DOMException]':\n    case '[object WebAssembly.Exception]':\n      return true;\n    default:\n      return isInstanceOf(wat, Error);\n  }\n}\n/**\n * Checks whether given value is an instance of the given built-in class.\n *\n * @param wat The value to be checked\n * @param className\n * @returns A boolean representing the result.\n */\nfunction isBuiltin(wat: unknown, className: string): boolean {\n  return objectToString.call(wat) === `[object ${className}]`;\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isErrorEvent(wat: unknown): boolean {\n  return isBuiltin(wat, 'ErrorEvent');\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMError(wat: unknown): boolean {\n  return isBuiltin(wat, 'DOMError');\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMException(wat: unknown): boolean {\n  return isBuiltin(wat, 'DOMException');\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isString(wat: unknown): wat is string {\n  return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given string is parameterized\n * {@link isParameterizedString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isParameterizedString(wat: unknown): wat is ParameterizedString {\n  return (\n    typeof wat === 'object' &&\n    wat !== null &&\n    '__sentry_template_string__' in wat &&\n    '__sentry_template_values__' in wat\n  );\n}\n\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPrimitive(wat: unknown): wat is Primitive {\n  return wat === null || isParameterizedString(wat) || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal, or a class instance.\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPlainObject(wat: unknown): wat is Record<string, unknown> {\n  return isBuiltin(wat, 'Object');\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isEvent(wat: unknown): wat is PolymorphicEvent {\n  return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isElement(wat: unknown): boolean {\n  return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isRegExp(wat: unknown): wat is RegExp {\n  return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nexport function isThenable(wat: any): wat is PromiseLike<any> {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return Boolean(wat?.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isSyntheticEvent(wat: unknown): boolean {\n  return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nexport function isInstanceOf(wat: any, base: any): boolean {\n  try {\n    return wat instanceof base;\n  } catch (_e) {\n    return false;\n  }\n}\n\ninterface VueViewModel {\n  // Vue3\n  __isVue?: boolean;\n  // Vue2\n  _isVue?: boolean;\n}\n/**\n * Checks whether given value's type is a Vue ViewModel.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isVueViewModel(wat: unknown): boolean {\n  // Not using Object.prototype.toString because in Vue 3 it would read the instance's Symbol(Symbol.toStringTag) property.\n  return !!(typeof wat === 'object' && wat !== null && ((wat as VueViewModel).__isVue || (wat as VueViewModel)._isVue));\n}\n","'use strict'\n\nconst debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\n\nconst isPrereleaseIdentifier = (prerelease, identifier) => {\n  const identifiers = identifier.split('.')\n  if (identifiers.length > prerelease.length) {\n    return false\n  }\n\n  for (let i = 0; i < identifiers.length; i++) {\n    if (compareIdentifiers(prerelease[i], identifiers[i]) !== 0) {\n      return false\n    }\n  }\n\n  return true\n}\n\nclass SemVer {\n  constructor (version, options) {\n    options = parseOptions(options)\n\n    if (version instanceof SemVer) {\n      if (version.loose === !!options.loose &&\n        version.includePrerelease === !!options.includePrerelease) {\n        return version\n      } else {\n        version = version.version\n      }\n    } else if (typeof version !== 'string') {\n      throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n    }\n\n    if (version.length > MAX_LENGTH) {\n      throw new TypeError(\n        `version is longer than ${MAX_LENGTH} characters`\n      )\n    }\n\n    debug('SemVer', version, options)\n    this.options = options\n    this.loose = !!options.loose\n    // this isn't actually relevant for versions, but keep it so that we\n    // don't run into trouble passing this.options around.\n    this.includePrerelease = !!options.includePrerelease\n\n    const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n    if (!m) {\n      throw new TypeError(`Invalid Version: ${version}`)\n    }\n\n    this.raw = version\n\n    // these are actually numbers\n    this.major = +m[1]\n    this.minor = +m[2]\n    this.patch = +m[3]\n\n    if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n      throw new TypeError('Invalid major version')\n    }\n\n    if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n      throw new TypeError('Invalid minor version')\n    }\n\n    if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n      throw new TypeError('Invalid patch version')\n    }\n\n    // numberify any prerelease numeric ids\n    if (!m[4]) {\n      this.prerelease = []\n    } else {\n      this.prerelease = m[4].split('.').map((id) => {\n        if (/^[0-9]+$/.test(id)) {\n          const num = +id\n          if (num >= 0 && num < MAX_SAFE_INTEGER) {\n            return num\n          }\n        }\n        return id\n      })\n    }\n\n    this.build = m[5] ? m[5].split('.') : []\n    this.format()\n  }\n\n  format () {\n    this.version = `${this.major}.${this.minor}.${this.patch}`\n    if (this.prerelease.length) {\n      this.version += `-${this.prerelease.join('.')}`\n    }\n    return this.version\n  }\n\n  toString () {\n    return this.version\n  }\n\n  compare (other) {\n    debug('SemVer.compare', this.version, this.options, other)\n    if (!(other instanceof SemVer)) {\n      if (typeof other === 'string' && other === this.version) {\n        return 0\n      }\n      other = new SemVer(other, this.options)\n    }\n\n    if (other.version === this.version) {\n      return 0\n    }\n\n    return this.compareMain(other) || this.comparePre(other)\n  }\n\n  compareMain (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    if (this.major < other.major) {\n      return -1\n    }\n    if (this.major > other.major) {\n      return 1\n    }\n    if (this.minor < other.minor) {\n      return -1\n    }\n    if (this.minor > other.minor) {\n      return 1\n    }\n    if (this.patch < other.patch) {\n      return -1\n    }\n    if (this.patch > other.patch) {\n      return 1\n    }\n    return 0\n  }\n\n  comparePre (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    // NOT having a prerelease is > having one\n    if (this.prerelease.length && !other.prerelease.length) {\n      return -1\n    } else if (!this.prerelease.length && other.prerelease.length) {\n      return 1\n    } else if (!this.prerelease.length && !other.prerelease.length) {\n      return 0\n    }\n\n    let i = 0\n    do {\n      const a = this.prerelease[i]\n      const b = other.prerelease[i]\n      debug('prerelease compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  compareBuild (other) {\n    if (!(other instanceof SemVer)) {\n      other = new SemVer(other, this.options)\n    }\n\n    let i = 0\n    do {\n      const a = this.build[i]\n      const b = other.build[i]\n      debug('build compare', i, a, b)\n      if (a === undefined && b === undefined) {\n        return 0\n      } else if (b === undefined) {\n        return 1\n      } else if (a === undefined) {\n        return -1\n      } else if (a === b) {\n        continue\n      } else {\n        return compareIdentifiers(a, b)\n      }\n    } while (++i)\n  }\n\n  // preminor will bump the version up to the next minor release, and immediately\n  // down to pre-release. premajor and prepatch work the same way.\n  inc (release, identifier, identifierBase) {\n    if (release.startsWith('pre')) {\n      if (!identifier && identifierBase === false) {\n        throw new Error('invalid increment argument: identifier is empty')\n      }\n      // Avoid an invalid semver results\n      if (identifier) {\n        const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])\n        if (!match || match[1] !== identifier) {\n          throw new Error(`invalid identifier: ${identifier}`)\n        }\n      }\n    }\n\n    switch (release) {\n      case 'premajor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor = 0\n        this.major++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'preminor':\n        this.prerelease.length = 0\n        this.patch = 0\n        this.minor++\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'prepatch':\n        // If this is already a prerelease, it will bump to the next version\n        // drop any prereleases that might already exist, since they are not\n        // relevant at this point.\n        this.prerelease.length = 0\n        this.inc('patch', identifier, identifierBase)\n        this.inc('pre', identifier, identifierBase)\n        break\n      // If the input is a non-prerelease version, this acts the same as\n      // prepatch.\n      case 'prerelease':\n        if (this.prerelease.length === 0) {\n          this.inc('patch', identifier, identifierBase)\n        }\n        this.inc('pre', identifier, identifierBase)\n        break\n      case 'release':\n        if (this.prerelease.length === 0) {\n          throw new Error(`version ${this.raw} is not a prerelease`)\n        }\n        this.prerelease.length = 0\n        break\n\n      case 'major':\n        // If this is a pre-major version, bump up to the same major version.\n        // Otherwise increment major.\n        // 1.0.0-5 bumps to 1.0.0\n        // 1.1.0 bumps to 2.0.0\n        if (\n          this.minor !== 0 ||\n          this.patch !== 0 ||\n          this.prerelease.length === 0\n        ) {\n          this.major++\n        }\n        this.minor = 0\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'minor':\n        // If this is a pre-minor version, bump up to the same minor version.\n        // Otherwise increment minor.\n        // 1.2.0-5 bumps to 1.2.0\n        // 1.2.1 bumps to 1.3.0\n        if (this.patch !== 0 || this.prerelease.length === 0) {\n          this.minor++\n        }\n        this.patch = 0\n        this.prerelease = []\n        break\n      case 'patch':\n        // If this is not a pre-release version, it will increment the patch.\n        // If it is a pre-release it will bump up to the same patch version.\n        // 1.2.0-5 patches to 1.2.0\n        // 1.2.0 patches to 1.2.1\n        if (this.prerelease.length === 0) {\n          this.patch++\n        }\n        this.prerelease = []\n        break\n      // This probably shouldn't be used publicly.\n      // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n      case 'pre': {\n        const base = Number(identifierBase) ? 1 : 0\n\n        if (this.prerelease.length === 0) {\n          this.prerelease = [base]\n        } else {\n          let i = this.prerelease.length\n          while (--i >= 0) {\n            if (typeof this.prerelease[i] === 'number') {\n              this.prerelease[i]++\n              i = -2\n            }\n          }\n          if (i === -1) {\n            // didn't increment anything\n            if (identifier === this.prerelease.join('.') && identifierBase === false) {\n              throw new Error('invalid increment argument: identifier already exists')\n            }\n            this.prerelease.push(base)\n          }\n        }\n        if (identifier) {\n          // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n          // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n          let prerelease = [identifier, base]\n          if (identifierBase === false) {\n            prerelease = [identifier]\n          }\n          if (isPrereleaseIdentifier(this.prerelease, identifier)) {\n            const prereleaseBase = this.prerelease[identifier.split('.').length]\n            if (isNaN(prereleaseBase)) {\n              this.prerelease = prerelease\n            }\n          } else {\n            this.prerelease = prerelease\n          }\n        }\n        break\n      }\n      default:\n        throw new Error(`invalid increment argument: ${release}`)\n    }\n    this.raw = this.format()\n    if (this.build.length) {\n      this.raw += `+${this.build.join('.')}`\n    }\n    return this\n  }\n}\n\nmodule.exports = SemVer\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { eq } from 'ember-truth-helpers';\n// TEST\n\nimport {\n  HdsButtonSizeValues,\n  HdsButtonColorValues,\n  HdsButtonIconPositionValues,\n} from './types.ts';\nimport HdsInteractive from '../interactive/index.gts';\nimport HdsIcon from '../icon/index.gts';\n\nimport type {\n  HdsButtonSizes,\n  HdsButtonColors,\n  HdsButtonIconPositions,\n} from './types.ts';\nimport type { HdsInteractiveSignature } from '../interactive/index.gts';\nimport type { HdsIconSignature } from '../icon/index.gts';\n\nexport const SIZES: HdsButtonSizes[] = Object.values(HdsButtonSizeValues);\nexport const COLORS: HdsButtonColors[] = Object.values(HdsButtonColorValues);\nexport const ICON_POSITIONS: HdsButtonIconPositions[] = Object.values(\n  HdsButtonIconPositionValues\n);\nexport const DEFAULT_SIZE = HdsButtonSizeValues.Medium;\nexport const DEFAULT_COLOR = HdsButtonColorValues.Primary;\nexport const DEFAULT_ICON_POSITION = HdsButtonIconPositionValues.Leading;\n\nexport interface HdsButtonSignature {\n  Args: HdsInteractiveSignature['Args'] & {\n    size?: HdsButtonSizes;\n    color?: HdsButtonColors;\n    text: string;\n    icon?: HdsIconSignature['Args']['name'];\n    iconPosition?: HdsButtonIconPositions;\n    isIconOnly?: boolean;\n    isFullWidth?: boolean;\n    isInline?: boolean;\n  };\n  Element: HdsInteractiveSignature['Element'];\n}\n\nexport default class HdsButton extends Component<HdsButtonSignature> {\n  get text(): string {\n    // TEST2\n    const { text } = this.args;\n\n    assert(\n      '@text for \"Hds::Button\" must have a valid value',\n      text !== undefined\n    );\n\n    return text;\n  }\n\n  get size(): HdsButtonSizes {\n    const { size = DEFAULT_SIZE } = this.args;\n\n    assert(\n      `@size for \"Hds::Button\" must be one of the following: ${SIZES.join(\n        ', '\n      )}; received: ${size}`,\n      SIZES.includes(size)\n    );\n\n    return size;\n  }\n\n  get color(): HdsButtonColors {\n    const { color = DEFAULT_COLOR } = this.args;\n\n    assert(\n      `@color for \"Hds::Button\" must be one of the following: ${COLORS.join(\n        ', '\n      )}; received: ${color}`,\n      COLORS.includes(color)\n    );\n\n    return color;\n  }\n\n  get icon(): HdsIconSignature['Args']['name'] | undefined {\n    assert(\n      `when the \"Hds::Button\" @color is \"tertiary\" an @icon is required`,\n      !(this.color === 'tertiary' && !this.args.icon)\n    );\n\n    return this.args.icon ?? undefined;\n  }\n\n  get isIconOnly(): boolean {\n    if (this.icon) {\n      return this.args.isIconOnly ?? false;\n    }\n    return false;\n  }\n\n  get iconPosition(): HdsButtonIconPositions {\n    const { iconPosition = DEFAULT_ICON_POSITION } = this.args;\n\n    assert(\n      `@iconPosition for \"Hds::Button\" must be one of the following: ${ICON_POSITIONS.join(\n        ', '\n      )}; received: ${iconPosition}`,\n      ICON_POSITIONS.includes(iconPosition)\n    );\n\n    return iconPosition;\n  }\n\n  get iconSize(): HdsIconSignature['Args']['size'] {\n    if (this.args.size === 'large') {\n      return '24';\n    } else {\n      return '16';\n    }\n  }\n\n  get isFullWidth(): boolean {\n    return this.args.isFullWidth ?? false;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-button'];\n\n    // add a class based on the @color argument\n    classes.push(`hds-button--color-${this.color}`);\n\n    // add a class based on the @isFullWidth argument\n    if (this.isFullWidth) {\n      classes.push('hds-button--width-full');\n    }\n\n    // add a class based on isIconOnly argument\n    if (this.isIconOnly) {\n      classes.push('hds-button--is-icon-only');\n    }\n\n    // add a class based on the @isInline argument\n    if (this.args.isInline) {\n      classes.push('hds-button--is-inline');\n    }\n\n    // add a class based on the @size argument\n    classes.push(`hds-button--size-${this.size}`);\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <HdsInteractive\n      class={{this.classNames}}\n      @current-when={{@current-when}}\n      @models={{@models}}\n      @model={{@model}}\n      @query={{@query}}\n      @replace={{@replace}}\n      @route={{@route}}\n      @isRouteExternal={{@isRouteExternal}}\n      @href={{@href}}\n      @isHrefExternal={{@isHrefExternal}}\n      ...attributes\n      aria-label={{if this.isIconOnly this.text null}}\n    >\n      {{#if this.isIconOnly}}\n        {{#if this.icon}}\n          <span class=\"hds-button__icon\">\n            <HdsIcon\n              @name={{this.icon}}\n              @size={{this.iconSize}}\n              @stretched={{true}}\n            />\n          </span>\n        {{/if}}\n      {{else}}\n        {{#if this.icon}}\n          {{#if (eq this.iconPosition \"leading\")}}\n            <span class=\"hds-button__icon\">\n              <HdsIcon\n                @name={{this.icon}}\n                @size={{this.iconSize}}\n                @stretched={{true}}\n              />\n            </span>\n            <span class=\"hds-button__text\">\n              {{this.text}}\n            </span>\n          {{else}}\n            <span class=\"hds-button__text\">\n              {{this.text}}\n            </span>\n            <span class=\"hds-button__icon\">\n              <HdsIcon\n                @name={{this.icon}}\n                @size={{this.iconSize}}\n                @stretched={{true}}\n              />\n            </span>\n          {{/if}}\n        {{else}}\n          <span class=\"hds-button__text\">\n            {{this.text}}\n          </span>\n        {{/if}}\n      {{/if}}\n    </HdsInteractive>\n  </template>\n}\n","import { getAsyncContextStrategy } from '../asyncContext';\nimport { getMainCarrier } from '../carrier';\nimport { getCurrentScope } from '../currentScopes';\nimport {\n  SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n} from '../semanticAttributes';\nimport type { SentrySpan } from '../tracing/sentrySpan';\nimport { SPAN_STATUS_OK, SPAN_STATUS_UNSET } from '../tracing/spanstatus';\nimport { getCapturedScopesOnSpan } from '../tracing/utils';\nimport type {\n  Span,\n  SpanAttributes,\n  SpanJSON,\n  SpanOrigin,\n  SpanStatus,\n  SpanTimeInput,\n  TraceContext,\n} from '../types-hoist';\nimport type { SpanLink, SpanLinkJSON } from '../types-hoist/link';\nimport { consoleSandbox } from '../utils-hoist/logger';\nimport { addNonEnumerableProperty, dropUndefinedKeys } from '../utils-hoist/object';\nimport { generateSpanId } from '../utils-hoist/propagationContext';\nimport { timestampInSeconds } from '../utils-hoist/time';\nimport { generateSentryTraceHeader } from '../utils-hoist/tracing';\nimport { _getSpanForScope } from './spanOnScope';\n\n// These are aligned with OpenTelemetry trace flags\nexport const TRACE_FLAG_NONE = 0x0;\nexport const TRACE_FLAG_SAMPLED = 0x1;\n\nlet hasShownSpanDropWarning = false;\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in an event.\n * By default, this will only include trace_id, span_id & parent_span_id.\n * If `includeAllData` is true, it will also include data, op, status & origin.\n */\nexport function spanToTransactionTraceContext(span: Span): TraceContext {\n  const { spanId: span_id, traceId: trace_id } = span.spanContext();\n  const { data, op, parent_span_id, status, origin, links } = spanToJSON(span);\n\n  return dropUndefinedKeys({\n    parent_span_id,\n    span_id,\n    trace_id,\n    data,\n    op,\n    status,\n    origin,\n    links,\n  });\n}\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in a non-transaction event.\n */\nexport function spanToTraceContext(span: Span): TraceContext {\n  const { spanId, traceId: trace_id, isRemote } = span.spanContext();\n\n  // If the span is remote, we use a random/virtual span as span_id to the trace context,\n  // and the remote span as parent_span_id\n  const parent_span_id = isRemote ? spanId : spanToJSON(span).parent_span_id;\n  const scope = getCapturedScopesOnSpan(span).scope;\n\n  const span_id = isRemote ? scope?.getPropagationContext().propagationSpanId || generateSpanId() : spanId;\n\n  return dropUndefinedKeys({\n    parent_span_id,\n    span_id,\n    trace_id,\n  });\n}\n\n/**\n * Convert a Span to a Sentry trace header.\n */\nexport function spanToTraceHeader(span: Span): string {\n  const { traceId, spanId } = span.spanContext();\n  const sampled = spanIsSampled(span);\n  return generateSentryTraceHeader(traceId, spanId, sampled);\n}\n\n/**\n *  Converts the span links array to a flattened version to be sent within an envelope.\n *\n *  If the links array is empty, it returns `undefined` so the empty value can be dropped before it's sent.\n */\nexport function convertSpanLinksForEnvelope(links?: SpanLink[]): SpanLinkJSON[] | undefined {\n  if (links && links.length > 0) {\n    return links.map(({ context: { spanId, traceId, traceFlags, ...restContext }, attributes }) => ({\n      span_id: spanId,\n      trace_id: traceId,\n      sampled: traceFlags === TRACE_FLAG_SAMPLED,\n      attributes,\n      ...restContext,\n    }));\n  } else {\n    return undefined;\n  }\n}\n\n/**\n * Convert a span time input into a timestamp in seconds.\n */\nexport function spanTimeInputToSeconds(input: SpanTimeInput | undefined): number {\n  if (typeof input === 'number') {\n    return ensureTimestampInSeconds(input);\n  }\n\n  if (Array.isArray(input)) {\n    // See {@link HrTime} for the array-based time format\n    return input[0] + input[1] / 1e9;\n  }\n\n  if (input instanceof Date) {\n    return ensureTimestampInSeconds(input.getTime());\n  }\n\n  return timestampInSeconds();\n}\n\n/**\n * Converts a timestamp to second, if it was in milliseconds, or keeps it as second.\n */\nfunction ensureTimestampInSeconds(timestamp: number): number {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Convert a span to a JSON representation.\n */\n// Note: Because of this, we currently have a circular type dependency (which we opted out of in package.json).\n// This is not avoidable as we need `spanToJSON` in `spanUtils.ts`, which in turn is needed by `span.ts` for backwards compatibility.\n// And `spanToJSON` needs the Span class from `span.ts` to check here.\nexport function spanToJSON(span: Span): SpanJSON {\n  if (spanIsSentrySpan(span)) {\n    return span.getSpanJSON();\n  }\n\n  const { spanId: span_id, traceId: trace_id } = span.spanContext();\n\n  // Handle a span from @opentelemetry/sdk-base-trace's `Span` class\n  if (spanIsOpenTelemetrySdkTraceBaseSpan(span)) {\n    const { attributes, startTime, name, endTime, parentSpanId, status, links } = span;\n\n    return dropUndefinedKeys({\n      span_id,\n      trace_id,\n      data: attributes,\n      description: name,\n      parent_span_id: parentSpanId,\n      start_timestamp: spanTimeInputToSeconds(startTime),\n      // This is [0,0] by default in OTEL, in which case we want to interpret this as no end time\n      timestamp: spanTimeInputToSeconds(endTime) || undefined,\n      status: getStatusMessage(status),\n      op: attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP],\n      origin: attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] as SpanOrigin | undefined,\n      links: convertSpanLinksForEnvelope(links),\n    });\n  }\n\n  // Finally, at least we have `spanContext()`....\n  // This should not actually happen in reality, but we need to handle it for type safety.\n  return {\n    span_id,\n    trace_id,\n    start_timestamp: 0,\n    data: {},\n  };\n}\n\nfunction spanIsOpenTelemetrySdkTraceBaseSpan(span: Span): span is OpenTelemetrySdkTraceBaseSpan {\n  const castSpan = span as Partial<OpenTelemetrySdkTraceBaseSpan>;\n  return !!castSpan.attributes && !!castSpan.startTime && !!castSpan.name && !!castSpan.endTime && !!castSpan.status;\n}\n\n/** Exported only for tests. */\nexport interface OpenTelemetrySdkTraceBaseSpan extends Span {\n  attributes: SpanAttributes;\n  startTime: SpanTimeInput;\n  name: string;\n  status: SpanStatus;\n  endTime: SpanTimeInput;\n  parentSpanId?: string;\n  links?: SpanLink[];\n}\n\n/**\n * Sadly, due to circular dependency checks we cannot actually import the Span class here and check for instanceof.\n * :( So instead we approximate this by checking if it has the `getSpanJSON` method.\n */\nfunction spanIsSentrySpan(span: Span): span is SentrySpan {\n  return typeof (span as SentrySpan).getSpanJSON === 'function';\n}\n\n/**\n * Returns true if a span is sampled.\n * In most cases, you should just use `span.isRecording()` instead.\n * However, this has a slightly different semantic, as it also returns false if the span is finished.\n * So in the case where this distinction is important, use this method.\n */\nexport function spanIsSampled(span: Span): boolean {\n  // We align our trace flags with the ones OpenTelemetry use\n  // So we also check for sampled the same way they do.\n  const { traceFlags } = span.spanContext();\n  return traceFlags === TRACE_FLAG_SAMPLED;\n}\n\n/** Get the status message to use for a JSON representation of a span. */\nexport function getStatusMessage(status: SpanStatus | undefined): string | undefined {\n  if (!status || status.code === SPAN_STATUS_UNSET) {\n    return undefined;\n  }\n\n  if (status.code === SPAN_STATUS_OK) {\n    return 'ok';\n  }\n\n  return status.message || 'unknown_error';\n}\n\nconst CHILD_SPANS_FIELD = '_sentryChildSpans';\nconst ROOT_SPAN_FIELD = '_sentryRootSpan';\n\ntype SpanWithPotentialChildren = Span & {\n  [CHILD_SPANS_FIELD]?: Set<Span>;\n  [ROOT_SPAN_FIELD]?: Span;\n};\n\n/**\n * Adds an opaque child span reference to a span.\n */\nexport function addChildSpanToSpan(span: SpanWithPotentialChildren, childSpan: Span): void {\n  // We store the root span reference on the child span\n  // We need this for `getRootSpan()` to work\n  const rootSpan = span[ROOT_SPAN_FIELD] || span;\n  addNonEnumerableProperty(childSpan as SpanWithPotentialChildren, ROOT_SPAN_FIELD, rootSpan);\n\n  // We store a list of child spans on the parent span\n  // We need this for `getSpanDescendants()` to work\n  if (span[CHILD_SPANS_FIELD]) {\n    span[CHILD_SPANS_FIELD].add(childSpan);\n  } else {\n    addNonEnumerableProperty(span, CHILD_SPANS_FIELD, new Set([childSpan]));\n  }\n}\n\n/** This is only used internally by Idle Spans. */\nexport function removeChildSpanFromSpan(span: SpanWithPotentialChildren, childSpan: Span): void {\n  if (span[CHILD_SPANS_FIELD]) {\n    span[CHILD_SPANS_FIELD].delete(childSpan);\n  }\n}\n\n/**\n * Returns an array of the given span and all of its descendants.\n */\nexport function getSpanDescendants(span: SpanWithPotentialChildren): Span[] {\n  const resultSet = new Set<Span>();\n\n  function addSpanChildren(span: SpanWithPotentialChildren): void {\n    // This exit condition is required to not infinitely loop in case of a circular dependency.\n    if (resultSet.has(span)) {\n      return;\n      // We want to ignore unsampled spans (e.g. non recording spans)\n    } else if (spanIsSampled(span)) {\n      resultSet.add(span);\n      const childSpans = span[CHILD_SPANS_FIELD] ? Array.from(span[CHILD_SPANS_FIELD]) : [];\n      for (const childSpan of childSpans) {\n        addSpanChildren(childSpan);\n      }\n    }\n  }\n\n  addSpanChildren(span);\n\n  return Array.from(resultSet);\n}\n\n/**\n * Returns the root span of a given span.\n */\nexport function getRootSpan(span: SpanWithPotentialChildren): Span {\n  return span[ROOT_SPAN_FIELD] || span;\n}\n\n/**\n * Returns the currently active span.\n */\nexport function getActiveSpan(): Span | undefined {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  if (acs.getActiveSpan) {\n    return acs.getActiveSpan();\n  }\n\n  return _getSpanForScope(getCurrentScope());\n}\n\n/**\n * Logs a warning once if `beforeSendSpan` is used to drop spans.\n */\nexport function showSpanDropWarning(): void {\n  if (!hasShownSpanDropWarning) {\n    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.warn(\n        '[Sentry] Returning null from `beforeSendSpan` is disallowed. To drop certain spans, configure the respective integrations directly.',\n      );\n    });\n    hasShownSpanDropWarning = true;\n  }\n}\n\n/**\n * Updates the name of the given span and ensures that the span name is not\n * overwritten by the Sentry SDK.\n *\n * Use this function instead of `span.updateName()` if you want to make sure that\n * your name is kept. For some spans, for example root `http.server` spans the\n * Sentry SDK would otherwise overwrite the span name with a high-quality name\n * it infers when the span ends.\n *\n * Use this function in server code or when your span is started on the server\n * and on the client (browser). If you only update a span name on the client,\n * you can also use `span.updateName()` the SDK does not overwrite the name.\n *\n * @param span - The span to update the name of.\n * @param name - The name to set on the span.\n */\nexport function updateSpanName(span: Span, name: string): void {\n  span.updateName(name);\n  span.setAttributes({\n    [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom',\n    [SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME]: name,\n  });\n}\n","import { other } from './rules.ts';\n\n/**\n * Helpers\n */\nconst escapeReplacements: { [index: string]: string } = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;',\n};\nconst getEscapeReplacement = (ch: string) => escapeReplacements[ch];\n\nexport function escapeHtmlEntities(html: string, encode?: boolean) {\n  if (encode) {\n    if (other.escapeTest.test(html)) {\n      return html.replace(other.escapeReplace, getEscapeReplacement);\n    }\n  } else {\n    if (other.escapeTestNoEncode.test(html)) {\n      return html.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n    }\n  }\n\n  return html;\n}\n\nexport function cleanUrl(href: string) {\n  try {\n    href = encodeURI(href).replace(other.percentDecode, '%');\n  } catch {\n    return null;\n  }\n  return href;\n}\n\nexport function splitCells(tableRow: string, count?: number) {\n  // ensure that every cell-delimiting pipe has a space\n  // before it to distinguish it from an escaped pipe\n  const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n      let escaped = false;\n      let curr = offset;\n      while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n      if (escaped) {\n        // odd number of slashes means | is escaped\n        // so we leave it alone\n        return '|';\n      } else {\n        // add space before unescaped |\n        return ' |';\n      }\n    }),\n    cells = row.split(other.splitPipe);\n  let i = 0;\n\n  // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n  if (!cells[0].trim()) {\n    cells.shift();\n  }\n  if (cells.length > 0 && !cells.at(-1)?.trim()) {\n    cells.pop();\n  }\n\n  if (count) {\n    if (cells.length > count) {\n      cells.splice(count);\n    } else {\n      while (cells.length < count) cells.push('');\n    }\n  }\n\n  for (; i < cells.length; i++) {\n    // leading or trailing whitespace is ignored per the gfm spec\n    cells[i] = cells[i].trim().replace(other.slashPipe, '|');\n  }\n  return cells;\n}\n\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nexport function rtrim(str: string, c: string, invert?: boolean) {\n  const l = str.length;\n  if (l === 0) {\n    return '';\n  }\n\n  // Length of suffix matching the invert condition.\n  let suffLen = 0;\n\n  // Step left until we fail to match the invert condition.\n  while (suffLen < l) {\n    const currChar = str.charAt(l - suffLen - 1);\n    if (currChar === c && !invert) {\n      suffLen++;\n    } else if (currChar !== c && invert) {\n      suffLen++;\n    } else {\n      break;\n    }\n  }\n\n  return str.slice(0, l - suffLen);\n}\n\nexport function trimTrailingBlankLines(str: string) {\n  const lines = str.split('\\n');\n  let end = lines.length - 1;\n  while (end >= 0 && other.blankLine.test(lines[end])) {\n    end--;\n  }\n  if (lines.length - end <= 2) {\n    // we want to keep single trailing blank lines\n    return str;\n  }\n\n  return lines.slice(0, end + 1).join('\\n');\n}\n\nexport function findClosingBracket(str: string, b: string) {\n  if (str.indexOf(b[1]) === -1) {\n    return -1;\n  }\n\n  let level = 0;\n  for (let i = 0; i < str.length; i++) {\n    if (str[i] === '\\\\') {\n      i++;\n    } else if (str[i] === b[0]) {\n      level++;\n    } else if (str[i] === b[1]) {\n      level--;\n      if (level < 0) {\n        return i;\n      }\n    }\n  }\n  if (level > 0) {\n    return -2;\n  }\n\n  return -1;\n}\n\nexport function expandTabs(line: string, indent = 0) {\n  let col = indent;\n  let expanded = '';\n  for (const char of line) {\n    if (char === '\\t') {\n      const added = 4 - (col % 4);\n      expanded += ' '.repeat(added);\n      col += added;\n    } else {\n      expanded += char;\n      col++;\n    }\n  }\n\n  return expanded;\n}\n","import type Owner from '@ember/owner';\nimport type { Invoke } from '@glint/template/-private/integration';\n\nexport interface Stage1DecoratorDescriptor {\n  initializer: () => unknown;\n}\n\nexport type Stage1Decorator = (\n  prototype: object,\n  key: string | symbol,\n  descriptor?: Stage1DecoratorDescriptor,\n) => any;\n\nexport const INTERMEDIATE_VALUE = '__Intermediate_Value__';\nexport const INTERNAL = '__INTERNAL__';\n\nexport interface InternalFunctionResourceConfig<Value = unknown> {\n  definition: ResourceFunction<Value>;\n  type: 'function-based';\n  name: string;\n  [INTERNAL]: true;\n}\n\nexport const CURRENT = Symbol('ember-resources::CURRENT') as unknown as 'CURRENT';\n\nexport interface GlintRenderable {\n  /**\n   * Cells aren't inherently understood by Glint,\n   * so to work around that, we'll hook in to the fact that\n   * ContentValue (the type expected for all renderables),\n   * defines an interface with this signature.\n   *\n   * (SafeString)\n   *\n   * There *has* been interest in the community to formally support\n   * toString and toHTML APIs across all objects. An RFC needs to be\n   * written so that we can gather feedback / potential problems.\n   */\n  toHTML(): string;\n}\n\n// Will need to be a class for .current flattening / auto-rendering\nexport interface Reactive<Value> extends GlintRenderable {\n  current: Value;\n  [CURRENT]: Value;\n  [Invoke]?: Value;\n}\n\n/**\n * This is the type of the arguments passed to the `resource` function\n *\n * ```ts\n * import { resource, type ResourceAPI } from 'ember-resources';\n *\n * export const Clock = resource((api: ResourceAPI) => {\n *   let { on, use, owner } = api;\n *\n *   // ...\n * })\n * ```\n */\nexport type ResourceAPI = {\n  on: {\n    /**\n     * Optionally a function-resource can provide a cleanup function.\n     *\n     *\n     *  Example:\n     *  ```js\n     *  import { resource } from 'ember-resources';\n     *  import { TrackedObject } from 'tracked-built-ins';\n     *\n     *  const load = resource(({ on }) => {\n     *    let state = new TrackedObject({});\n     *    let controller = new AbortController();\n     *\n     *    on.cleanup(() => controller.abort());\n     *\n     *    fetch(this.url, { signal: controller.signal })\n     *      // ...\n     *\n     *    return state;\n     *  })\n     */\n    cleanup: (destroyer: Destructor) => void;\n  };\n\n  /**\n   * Allows for composition of resources.\n   *\n   * Example:\n   * ```js\n   * let formatter = new Intl.DateTimeFormat(\"en-US\", {\n   *   hour: \"numeric\",\n   *   minute: \"numeric\",\n   *   second: \"numeric\",\n   *   hour12: false,\n   * });\n   * let format = (time: Reactive<Date>) => formatter.format(time.current);\n   *\n   * const Now = resource(({ on }) => {\n   *    let now = cell(nowDate);\n   *    let timer = setInterval(() => now.set(Date.now()), 1000);\n   *\n   *    on.cleanup(() => clearInterval(timer));\n   *\n   *    return () => now.current;\n   *  });\n   *\n   *  const Stopwatch = resource(({ use }) => {\n   *    let time = use(Now);\n   *\n   *     return () => format(time);\n   *  });\n   * ```\n   */\n  use: <Value>(resource: Value) => Reactive<Value extends Reactive<any> ? Value['current'] : Value>;\n  /**\n   * The Application owner.\n   * This allows for direct access to traditional ember services.\n   *\n   * Example:\n   * ```js\n   * resource(({ owner }) => {\n   *   owner.lookup('service:router').currentRouteName\n   *  //...\n   * }\n   * ```\n   */\n  owner: Owner;\n};\n\n/**\n * Type of the callback passed to `resource`\n */\nexport type ResourceFunction<Value = unknown> = (hooks: ResourceAPI) => Value | (() => Value);\n\n/**\n * The perceived return value of `resource`\n * This is a lie to TypeScript, because the effective value of\n * of the resource is the result of the collapsed functions\n * passed to `resource`\n */\nexport type ResourceFn<Value = unknown> = (hooks: ResourceAPI) => Value;\n\nexport type Destructor = () => void;\nexport type Cache = object;\n","import { setModifierManager, capabilities } from '@ember/modifier';\n\nimport type { ModifierArgs, RenderModifierType } from '../types.ts';\n\n/**\n * The `{{didInsert}}` modifier is activated when an element is inserted into the DOM.\n *\n * The callback receives the element as its first argument, followed by any\n * positional arguments passed to the modifier.\n *\n * By default, the executed function will be unbound. If you would like to\n * access the component context in your function, use the `@action` decorator.\n *\n * @example Basic usage\n * ```gjs\n * import { didInsert } from '@ember/render-modifiers';\n *\n * function fadeIn(element) {\n *   element.classList.add('fade-in');\n * }\n *\n * <template>\n *   <div {{didInsert fadeIn}} class=\"alert\">\n *     Hello!\n *   </div>\n * </template>\n * ```\n *\n * @example With `@action` for component context\n * ```gjs\n * import Component from '@glimmer/component';\n * import { tracked } from '@glimmer/tracking';\n * import { action } from '@ember/object';\n * import { didInsert } from '@ember/render-modifiers';\n *\n * export default class MyComponent extends Component {\n *   @tracked count = 0;\n *\n *   @action\n *   incrementCount() {\n *     this.count++;\n *   }\n *\n *   <template>\n *     <div {{didInsert this.incrementCount}}>first</div>\n *     <div {{didInsert this.incrementCount}}>second</div>\n *     <p>{{this.count}} elements were rendered</p>\n *   </template>\n * }\n * ```\n */\nconst DidInsertModifier = setModifierManager(\n  () => ({\n    capabilities: capabilities('3.22', { disableAutoTracking: true }),\n\n    createModifier() {},\n\n    installModifier(\n      _state: undefined,\n      element: Element,\n      { positional: [fn, ...args], named }: ModifierArgs,\n    ) {\n      fn(element, args, named);\n    },\n\n    updateModifier() {},\n    destroyModifier() {},\n  }),\n  class DidInsertModifier {},\n) as unknown as RenderModifierType;\n\nexport default DidInsertModifier;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsYieldSignature {\n  Blocks: {\n    default: [];\n  };\n}\n\nconst HdsYield: TemplateOnlyComponent<HdsYieldSignature> = <template>\n  {{! template-lint-disable no-yield-only }}\n  {{yield}}\n</template>;\n\nexport default HdsYield;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { on } from '@ember/modifier';\nimport { LinkTo } from '@ember/routing';\nimport { array } from '@ember/helper';\n\nimport { getLinkToExternal } from '../../../utils/hds-link-to-external.ts';\nimport { hdsLinkToModels } from '../../../helpers/hds-link-to-models.ts';\nimport { hdsLinkToQuery } from '../../../helpers/hds-link-to-query.ts';\n\nexport interface HdsInteractiveSignature {\n  Args: {\n    href?: string;\n    isHrefExternal?: boolean;\n    isRouteExternal?: boolean;\n    // the arguments and types below are mirroring the ones in LinkTo https://github.com/typed-ember/glint/blob/main/packages/environment-ember-loose/-private/intrinsics/link-to.d.ts#L9\n    // because they're not exported we're unable to import them directly from glint\n    route?: string;\n    models?: unknown[];\n    model?: unknown;\n    query?: Record<string, unknown>;\n    'current-when'?: string | boolean;\n    replace?: boolean;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLAnchorElement | HTMLButtonElement;\n}\n\nexport default class HdsInteractive extends Component<HdsInteractiveSignature> {\n  get linkToExternal(): typeof LinkTo | null {\n    const component = getLinkToExternal();\n    if (component === null) {\n      assert(\n        `HdsInteractive: You attempted to use an external link without configuring HDS with an external component. Please add this in your app.js file:\n\nimport LinkToExternal from 'ember-engines/components/link-to-external';\nimport { setLinkToExternal } from '@hashicorp/design-system-components/utils/hds-link-to-external';\nsetLinkToExternal(LinkToExternal);`\n      );\n    }\n    return component;\n  }\n\n  get isHrefExternal(): boolean {\n    return this.args.isHrefExternal ?? true;\n  }\n\n  get isRouteExternal(): boolean {\n    return this.args.isRouteExternal ?? false;\n  }\n\n  onKeyUp = (event: KeyboardEvent): void => {\n    if (event.key === ' ' || event.code === 'Space') {\n      (event.target as HTMLElement).click();\n    }\n  };\n\n  <template>\n    {{! IMPORTANT: we removed the newlines before/after the yield to reduce the issues with unexpected whitespaces (see https://github.com/hashicorp/design-system/pull/231#issuecomment-1123502499) }}\n    {{! IMPORTANT: we need to add \"squishies\" here (~) because otherwise the whitespace added by Ember becomes visible in the link (being an inline element) - See https://handlebarsjs.com/guide/expressions.html#whitespace-control }}\n    {{! NOTICE: we can't support the direct use of the \"href\" HTML attribute via ...attributes in the <a> elements, because we need to rely on the \"@href\" Ember argument to differentiate between different types of generated output }}\n    {{~#if @route~}}\n      {{~#if this.isRouteExternal~}}\n        <this.linkToExternal\n          @current-when={{@current-when}}\n          @models={{hdsLinkToModels (array @model @models)}}\n          @query={{hdsLinkToQuery (array @query)}}\n          @replace={{@replace}}\n          @route={{@route}}\n          ...attributes\n        >{{yield}}</this.linkToExternal>\n      {{~else~}}\n        <LinkTo\n          @current-when={{@current-when}}\n          @models={{hdsLinkToModels (array @model @models)}}\n          @query={{hdsLinkToQuery (array @query)}}\n          @replace={{@replace}}\n          @route={{@route}}\n          ...attributes\n        >{{yield}}</LinkTo>\n      {{~/if~}}\n    {{~else if @href~}}\n      {{~#if this.isHrefExternal~}}\n        <a\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          ...attributes\n          href={{@href}}\n          {{on \"keyup\" this.onKeyUp}}\n        >{{yield}}</a>\n      {{~else~}}\n        <a\n          ...attributes\n          href={{@href}}\n          {{on \"keyup\" this.onKeyUp}}\n        >{{yield}}</a>\n      {{~/if~}}\n    {{~else~}}\n      <button type=\"button\" ...attributes>{{yield}}</button>\n    {{~/if~}}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { LinkTo } from '@ember/routing';\n\nlet LINK_TO_EXTERNAL_COMPONENT: LinkTo | null = null;\n\nexport function getLinkToExternal(): LinkTo | null {\n  return LINK_TO_EXTERNAL_COMPONENT;\n}\n\nexport function setLinkToExternal(component: LinkTo | null): void {\n  LINK_TO_EXTERNAL_COMPONENT = component;\n}\n","import type { Client } from './client';\nimport { getClient } from './currentScopes';\nimport { DEBUG_BUILD } from './debug-build';\nimport type { Event, EventHint, Integration, IntegrationFn, Options } from './types-hoist';\nimport { logger } from './utils-hoist/logger';\n\nexport const installedIntegrations: string[] = [];\n\n/** Map of integrations assigned to a client */\nexport type IntegrationIndex = {\n  [key: string]: Integration;\n};\n\ntype IntegrationWithDefaultInstance = Integration & { isDefaultInstance?: true };\n\n/**\n * Remove duplicates from the given array, preferring the last instance of any duplicate. Not guaranteed to\n * preserve the order of integrations in the array.\n *\n * @private\n */\nfunction filterDuplicates(integrations: Integration[]): Integration[] {\n  const integrationsByName: { [key: string]: Integration } = {};\n\n  integrations.forEach((currentInstance: IntegrationWithDefaultInstance) => {\n    const { name } = currentInstance;\n\n    const existingInstance: IntegrationWithDefaultInstance | undefined = integrationsByName[name];\n\n    // We want integrations later in the array to overwrite earlier ones of the same type, except that we never want a\n    // default instance to overwrite an existing user instance\n    if (existingInstance && !existingInstance.isDefaultInstance && currentInstance.isDefaultInstance) {\n      return;\n    }\n\n    integrationsByName[name] = currentInstance;\n  });\n\n  return Object.values(integrationsByName);\n}\n\n/** Gets integrations to install */\nexport function getIntegrationsToSetup(options: Pick<Options, 'defaultIntegrations' | 'integrations'>): Integration[] {\n  const defaultIntegrations = options.defaultIntegrations || [];\n  const userIntegrations = options.integrations;\n\n  // We flag default instances, so that later we can tell them apart from any user-created instances of the same class\n  defaultIntegrations.forEach((integration: IntegrationWithDefaultInstance) => {\n    integration.isDefaultInstance = true;\n  });\n\n  let integrations: Integration[];\n\n  if (Array.isArray(userIntegrations)) {\n    integrations = [...defaultIntegrations, ...userIntegrations];\n  } else if (typeof userIntegrations === 'function') {\n    const resolvedUserIntegrations = userIntegrations(defaultIntegrations);\n    integrations = Array.isArray(resolvedUserIntegrations) ? resolvedUserIntegrations : [resolvedUserIntegrations];\n  } else {\n    integrations = defaultIntegrations;\n  }\n\n  return filterDuplicates(integrations);\n}\n\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\nexport function setupIntegrations(client: Client, integrations: Integration[]): IntegrationIndex {\n  const integrationIndex: IntegrationIndex = {};\n\n  integrations.forEach((integration: Integration | undefined) => {\n    // guard against empty provided integrations\n    if (integration) {\n      setupIntegration(client, integration, integrationIndex);\n    }\n  });\n\n  return integrationIndex;\n}\n\n/**\n * Execute the `afterAllSetup` hooks of the given integrations.\n */\nexport function afterSetupIntegrations(client: Client, integrations: Integration[]): void {\n  for (const integration of integrations) {\n    // guard against empty provided integrations\n    if (integration?.afterAllSetup) {\n      integration.afterAllSetup(client);\n    }\n  }\n}\n\n/** Setup a single integration.  */\nexport function setupIntegration(client: Client, integration: Integration, integrationIndex: IntegrationIndex): void {\n  if (integrationIndex[integration.name]) {\n    DEBUG_BUILD && logger.log(`Integration skipped because it was already installed: ${integration.name}`);\n    return;\n  }\n  integrationIndex[integration.name] = integration;\n\n  // `setupOnce` is only called the first time\n  if (installedIntegrations.indexOf(integration.name) === -1 && typeof integration.setupOnce === 'function') {\n    integration.setupOnce();\n    installedIntegrations.push(integration.name);\n  }\n\n  // `setup` is run for each client\n  if (integration.setup && typeof integration.setup === 'function') {\n    integration.setup(client);\n  }\n\n  if (typeof integration.preprocessEvent === 'function') {\n    const callback = integration.preprocessEvent.bind(integration) as typeof integration.preprocessEvent;\n    client.on('preprocessEvent', (event, hint) => callback(event, hint, client));\n  }\n\n  if (typeof integration.processEvent === 'function') {\n    const callback = integration.processEvent.bind(integration) as typeof integration.processEvent;\n\n    const processor = Object.assign((event: Event, hint: EventHint) => callback(event, hint, client), {\n      id: integration.name,\n    });\n\n    client.addEventProcessor(processor);\n  }\n\n  DEBUG_BUILD && logger.log(`Integration installed: ${integration.name}`);\n}\n\n/** Add an integration to the current scope's client. */\nexport function addIntegration(integration: Integration): void {\n  const client = getClient();\n\n  if (!client) {\n    DEBUG_BUILD && logger.warn(`Cannot add integration \"${integration.name}\" because no SDK Client is available.`);\n    return;\n  }\n\n  client.addIntegration(integration);\n}\n\n/**\n * Define an integration function that can be used to create an integration instance.\n * Note that this by design hides the implementation details of the integration, as they are considered internal.\n */\nexport function defineIntegration<Fn extends IntegrationFn>(fn: Fn): (...args: Parameters<Fn>) => Integration {\n  return fn;\n}\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { hash } from '@ember/helper';\nimport { eq } from 'ember-truth-helpers';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport { getElementId } from '../../../../utils/hds-get-element-id.ts';\nimport {\n  ariaDescribedBy,\n  registerAriaDescriptionElement,\n  unregisterAriaDescriptionElement,\n} from '../../../../utils/hds-aria-described-by.ts';\nimport { HdsFormFieldLayoutValues } from './types.ts';\nimport HdsFormLabel from '../label/index.gts';\nimport HdsFormHelperText from '../helper-text/index.gts';\nimport HdsFormCharacterCount from '../character-count/index.gts';\nimport HdsFormError from '../error/index.gts';\nimport HdsYield from '../../yield/index.gts';\n\nimport type { HdsFormFieldLayouts } from './types.ts';\nimport type { AriaDescribedByComponent } from '../../../../utils/hds-aria-described-by.ts';\n\nexport const LAYOUT_TYPES = Object.values(HdsFormFieldLayoutValues);\n\nexport interface HdsFormFieldSignature {\n  Args: {\n    id?: string;\n    extraAriaDescribedBy?: string;\n    contextualClass?: string;\n    isOptional?: boolean;\n    isRequired?: boolean;\n    layout?: HdsFormFieldLayouts;\n  };\n  Blocks: {\n    default: [\n      {\n        Label?: WithBoundArgs<\n          typeof HdsFormLabel,\n          'contextualClass' | 'controlId' | 'isRequired' | 'isOptional'\n        >;\n        HelperText?: WithBoundArgs<\n          typeof HdsFormHelperText,\n          'contextualClass' | 'controlId' | 'onInsert'\n        >;\n        Control?: typeof HdsYield;\n        CharacterCount?: WithBoundArgs<\n          typeof HdsFormCharacterCount,\n          'contextualClass' | 'controlId' | 'onInsert'\n        >;\n        Error?: WithBoundArgs<\n          typeof HdsFormError,\n          'contextualClass' | 'controlId' | 'onInsert' | 'onRemove'\n        >;\n        id?: string;\n        ariaDescribedBy?: string;\n      },\n    ];\n  };\n  Element: HTMLElement;\n}\n\n// @ts-expect-error: decorator function return type 'ClassOf<AriaDescribedBy>' is not assignable to 'typeof HdsFormField'\n@ariaDescribedBy\nexport default class HdsFormField extends Component<HdsFormFieldSignature> {\n  get layout(): HdsFormFieldLayouts | undefined {\n    const { layout } = this.args;\n\n    assert(\n      `@layout for \"Hds::Form::Field\" must be one of the following: ${LAYOUT_TYPES.join(\n        ', '\n      )}; received: ${layout}`,\n      LAYOUT_TYPES.includes(layout as HdsFormFieldLayoutValues)\n    );\n\n    return layout;\n  }\n\n  get id(): string {\n    return getElementId(this);\n  }\n\n  get isRequired(): boolean {\n    return this.args.isRequired || false;\n  }\n\n  get isOptional(): boolean {\n    return this.args.isOptional || false;\n  }\n\n  get classNames(): string {\n    const classes: string[] = [];\n\n    if (this.args.layout) {\n      classes.push(`hds-form-field--layout-${this.layout}`);\n    }\n\n    // add a class based on the @contextualClass argument\n    // notice: this will *not* be documented for public use\n    if (this.args.contextualClass) {\n      classes.push(this.args.contextualClass);\n    }\n\n    return classes.join(' ');\n  }\n\n  appendDescriptor = (element: HTMLElement): void => {\n    registerAriaDescriptionElement(this as AriaDescribedByComponent, element);\n  };\n\n  removeDescriptor = (element: HTMLElement): void => {\n    unregisterAriaDescriptionElement(this as AriaDescribedByComponent, element);\n  };\n\n  <template>\n    <div class={{this.classNames}} ...attributes>\n      {{yield\n        (hash\n          Label=(component\n            HdsFormLabel\n            controlId=this.id\n            isRequired=this.isRequired\n            isOptional=this.isOptional\n            contextualClass=\"hds-form-field__label\"\n          )\n        )\n      }}\n      {{#unless (eq @layout \"flag\")}}\n        {{yield\n          (hash\n            HelperText=(component\n              HdsFormHelperText\n              controlId=this.id\n              onInsert=this.appendDescriptor\n              contextualClass=\"hds-form-field__helper-text\"\n            )\n          )\n        }}\n      {{/unless}}\n      {{! @glint-expect-error }}\n      {{#let this.ariaDescribedBy as |ariaDescribedBy|}}\n        <div class=\"hds-form-field__control\">\n          {{yield\n            (hash Control=HdsYield id=this.id ariaDescribedBy=ariaDescribedBy)\n          }}\n        </div>\n      {{/let}}\n      {{#if (eq @layout \"flag\")}}\n        {{yield\n          (hash\n            HelperText=(component\n              HdsFormHelperText\n              controlId=this.id\n              onInsert=this.appendDescriptor\n              contextualClass=\"hds-form-field__helper-text\"\n            )\n          )\n        }}\n      {{/if}}\n      {{yield\n        (hash\n          CharacterCount=(component\n            HdsFormCharacterCount\n            controlId=this.id\n            onInsert=this.appendDescriptor\n            contextualClass=\"hds-form-field__character-count\"\n          )\n        )\n      }}\n      {{yield\n        (hash\n          Error=(component\n            HdsFormError\n            controlId=this.id\n            onInsert=this.appendDescriptor\n            onRemove=this.removeDescriptor\n            contextualClass=\"hds-form-field__error\"\n          )\n        )\n      }}\n    </div>\n  </template>\n}\n","import { GLOBAL_OBJ } from './worldwide';\n\nconst ONE_SECOND_IN_MS = 1000;\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\ninterface Performance {\n  /**\n   * The millisecond timestamp at which measurement began, measured in Unix time.\n   */\n  timeOrigin: number;\n  /**\n   * Returns the current millisecond timestamp, where 0 represents the start of measurement.\n   */\n  now(): number;\n}\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n */\nexport function dateTimestampInSeconds(): number {\n  return Date.now() / ONE_SECOND_IN_MS;\n}\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction createUnixTimestampInSecondsFunc(): () => number {\n  const { performance } = GLOBAL_OBJ as typeof GLOBAL_OBJ & { performance?: Performance };\n  if (!performance?.now) {\n    return dateTimestampInSeconds;\n  }\n\n  // Some browser and environments don't have a timeOrigin, so we fallback to\n  // using Date.now() to compute the starting time.\n  const approxStartingTimeOrigin = Date.now() - performance.now();\n  const timeOrigin = performance.timeOrigin == undefined ? approxStartingTimeOrigin : performance.timeOrigin;\n\n  // performance.now() is a monotonic clock, which means it starts at 0 when the process begins. To get the current\n  // wall clock time (actual UNIX timestamp), we need to add the starting time origin and the current time elapsed.\n  //\n  // TODO: This does not account for the case where the monotonic clock that powers performance.now() drifts from the\n  // wall clock time, which causes the returned timestamp to be inaccurate. We should investigate how to detect and\n  // correct for this.\n  // See: https://github.com/getsentry/sentry-javascript/issues/2590\n  // See: https://github.com/mdn/content/issues/4713\n  // See: https://dev.to/noamr/when-a-millisecond-is-not-a-millisecond-3h6\n  return () => {\n    return (timeOrigin + performance.now()) / ONE_SECOND_IN_MS;\n  };\n}\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nexport const timestampInSeconds = createUnixTimestampInSecondsFunc();\n\n/**\n * Cached result of getBrowserTimeOrigin.\n */\nlet cachedTimeOrigin: [number | undefined, string] | undefined;\n\n/**\n * Gets the time origin and the mode used to determine it.\n */\nfunction getBrowserTimeOrigin(): [number | undefined, string] {\n  // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n  // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n  // data as reliable if they are within a reasonable threshold of the current time.\n\n  const { performance } = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n  if (!performance?.now) {\n    return [undefined, 'none'];\n  }\n\n  const threshold = 3600 * 1000;\n  const performanceNow = performance.now();\n  const dateNow = Date.now();\n\n  // if timeOrigin isn't available set delta to threshold so it isn't used\n  const timeOriginDelta = performance.timeOrigin\n    ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n    : threshold;\n  const timeOriginIsReliable = timeOriginDelta < threshold;\n\n  // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n  // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n  // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n  // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n  // Date API.\n  // eslint-disable-next-line deprecation/deprecation\n  const navigationStart = performance.timing?.navigationStart;\n  const hasNavigationStart = typeof navigationStart === 'number';\n  // if navigationStart isn't available set delta to threshold so it isn't used\n  const navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n  const navigationStartIsReliable = navigationStartDelta < threshold;\n\n  if (timeOriginIsReliable || navigationStartIsReliable) {\n    // Use the more reliable time origin\n    if (timeOriginDelta <= navigationStartDelta) {\n      return [performance.timeOrigin, 'timeOrigin'];\n    } else {\n      return [navigationStart, 'navigationStart'];\n    }\n  }\n\n  // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n  return [dateNow, 'dateNow'];\n}\n\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nexport function browserPerformanceTimeOrigin(): number | undefined {\n  if (!cachedTimeOrigin) {\n    cachedTimeOrigin = getBrowserTimeOrigin();\n  }\n\n  return cachedTimeOrigin[0];\n}\n","import type { Event, Exception, Mechanism, StackFrame } from '../types-hoist';\n\nimport { addNonEnumerableProperty } from './object';\nimport { snipLine } from './string';\nimport { GLOBAL_OBJ } from './worldwide';\n\ninterface CryptoInternal {\n  getRandomValues(array: Uint8Array): Uint8Array;\n  randomUUID?(): string;\n}\n\n/** An interface for common properties on global */\ninterface CryptoGlobal {\n  msCrypto?: CryptoInternal;\n  crypto?: CryptoInternal;\n}\n\nfunction getCrypto(): CryptoInternal | undefined {\n  const gbl = GLOBAL_OBJ as typeof GLOBAL_OBJ & CryptoGlobal;\n  return gbl.crypto || gbl.msCrypto;\n}\n\n/**\n * UUID4 generator\n * @param crypto Object that provides the crypto API.\n * @returns string Generated UUID4.\n */\nexport function uuid4(crypto = getCrypto()): string {\n  let getRandomByte = (): number => Math.random() * 16;\n  try {\n    if (crypto?.randomUUID) {\n      return crypto.randomUUID().replace(/-/g, '');\n    }\n    if (crypto?.getRandomValues) {\n      getRandomByte = () => {\n        // crypto.getRandomValues might return undefined instead of the typed array\n        // in old Chromium versions (e.g. 23.0.1235.0 (151422))\n        // However, `typedArray` is still filled in-place.\n        // @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#typedarray\n        const typedArray = new Uint8Array(1);\n        crypto.getRandomValues(typedArray);\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        return typedArray[0]!;\n      };\n    }\n  } catch (_) {\n    // some runtimes can crash invoking crypto\n    // https://github.com/getsentry/sentry-javascript/issues/8935\n  }\n\n  // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n  // Concatenating the following numbers as strings results in '10000000100040008000100000000000'\n  return (([1e7] as unknown as string) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, c =>\n    // eslint-disable-next-line no-bitwise\n    ((c as unknown as number) ^ ((getRandomByte() & 15) >> ((c as unknown as number) / 4))).toString(16),\n  );\n}\n\nfunction getFirstException(event: Event): Exception | undefined {\n  return event.exception?.values?.[0];\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nexport function getEventDescription(event: Event): string {\n  const { message, event_id: eventId } = event;\n  if (message) {\n    return message;\n  }\n\n  const firstException = getFirstException(event);\n  if (firstException) {\n    if (firstException.type && firstException.value) {\n      return `${firstException.type}: ${firstException.value}`;\n    }\n    return firstException.type || firstException.value || eventId || '<unknown>';\n  }\n  return eventId || '<unknown>';\n}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nexport function addExceptionTypeValue(event: Event, value?: string, type?: string): void {\n  const exception = (event.exception = event.exception || {});\n  const values = (exception.values = exception.values || []);\n  const firstException = (values[0] = values[0] || {});\n  if (!firstException.value) {\n    firstException.value = value || '';\n  }\n  if (!firstException.type) {\n    firstException.type = type || 'Error';\n  }\n}\n\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nexport function addExceptionMechanism(event: Event, newMechanism?: Partial<Mechanism>): void {\n  const firstException = getFirstException(event);\n  if (!firstException) {\n    return;\n  }\n\n  const defaultMechanism = { type: 'generic', handled: true };\n  const currentMechanism = firstException.mechanism;\n  firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n  if (newMechanism && 'data' in newMechanism) {\n    const mergedData = { ...currentMechanism?.data, ...newMechanism.data };\n    firstException.mechanism.data = mergedData;\n  }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nconst SEMVER_REGEXP =\n  /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n/**\n * Represents Semantic Versioning object\n */\ninterface SemVer {\n  major?: number;\n  minor?: number;\n  patch?: number;\n  prerelease?: string;\n  buildmetadata?: string;\n}\n\nfunction _parseInt(input: string | undefined): number {\n  return parseInt(input || '', 10);\n}\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nexport function parseSemver(input: string): SemVer {\n  const match = input.match(SEMVER_REGEXP) || [];\n  const major = _parseInt(match[1]);\n  const minor = _parseInt(match[2]);\n  const patch = _parseInt(match[3]);\n  return {\n    buildmetadata: match[5],\n    major: isNaN(major) ? undefined : major,\n    minor: isNaN(minor) ? undefined : minor,\n    patch: isNaN(patch) ? undefined : patch,\n    prerelease: match[4],\n  };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nexport function addContextToFrame(lines: string[], frame: StackFrame, linesOfContext: number = 5): void {\n  // When there is no line number in the frame, attaching context is nonsensical and will even break grouping\n  if (frame.lineno === undefined) {\n    return;\n  }\n\n  const maxLines = lines.length;\n  const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n\n  frame.pre_context = lines\n    .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n    .map((line: string) => snipLine(line, 0));\n\n  // We guard here to ensure this is not larger than the existing number of lines\n  const lineIndex = Math.min(maxLines - 1, sourceLine);\n\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n  frame.context_line = snipLine(lines[lineIndex]!, frame.colno || 0);\n\n  frame.post_context = lines\n    .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n    .map((line: string) => snipLine(line, 0));\n}\n\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nexport function checkOrSetAlreadyCaught(exception: unknown): boolean {\n  if (isAlreadyCaptured(exception)) {\n    return true;\n  }\n\n  try {\n    // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n    // `ExtraErrorData` integration\n    addNonEnumerableProperty(exception as { [key: string]: unknown }, '__sentry_captured__', true);\n  } catch (err) {\n    // `exception` is a primitive, so we can't mark it seen\n  }\n\n  return false;\n}\n\nfunction isAlreadyCaptured(exception: unknown): boolean | void {\n  try {\n    return (exception as { __sentry_captured__?: boolean }).__sentry_captured__;\n  } catch {} // eslint-disable-line no-empty\n}\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n  new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","'use strict'\n\nconst SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n  constructor (range, options) {\n    options = parseOptions(options)\n\n    if (range instanceof Range) {\n      if (\n        range.loose === !!options.loose &&\n        range.includePrerelease === !!options.includePrerelease\n      ) {\n        return range\n      } else {\n        return new Range(range.raw, options)\n      }\n    }\n\n    if (range instanceof Comparator) {\n      // just put it in the set and return\n      this.raw = range.value\n      this.set = [[range]]\n      this.formatted = undefined\n      return this\n    }\n\n    this.options = options\n    this.loose = !!options.loose\n    this.includePrerelease = !!options.includePrerelease\n\n    // First reduce all whitespace as much as possible so we do not have to rely\n    // on potentially slow regexes like \\s*. This is then stored and used for\n    // future error messages as well.\n    this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n    // First, split on ||\n    this.set = this.raw\n      .split('||')\n      // map the range to a 2d array of comparators\n      .map(r => this.parseRange(r.trim()))\n      // throw out any comparator lists that are empty\n      // this generally means that it was not a valid range, which is allowed\n      // in loose mode, but will still throw if the WHOLE range is invalid.\n      .filter(c => c.length)\n\n    if (!this.set.length) {\n      throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n    }\n\n    // if we have any that are not the null set, throw out null sets.\n    if (this.set.length > 1) {\n      // keep the first one, in case they're all null sets\n      const first = this.set[0]\n      this.set = this.set.filter(c => !isNullSet(c[0]))\n      if (this.set.length === 0) {\n        this.set = [first]\n      } else if (this.set.length > 1) {\n        // if we have any that are *, then the range is just *\n        for (const c of this.set) {\n          if (c.length === 1 && isAny(c[0])) {\n            this.set = [c]\n            break\n          }\n        }\n      }\n    }\n\n    this.formatted = undefined\n  }\n\n  get range () {\n    if (this.formatted === undefined) {\n      this.formatted = ''\n      for (let i = 0; i < this.set.length; i++) {\n        if (i > 0) {\n          this.formatted += '||'\n        }\n        const comps = this.set[i]\n        for (let k = 0; k < comps.length; k++) {\n          if (k > 0) {\n            this.formatted += ' '\n          }\n          this.formatted += comps[k].toString().trim()\n        }\n      }\n    }\n    return this.formatted\n  }\n\n  format () {\n    return this.range\n  }\n\n  toString () {\n    return this.range\n  }\n\n  parseRange (range) {\n    // strip build metadata so it can't bleed into the version\n    range = range.replace(BUILDSTRIPRE, '')\n\n    // memoize range parsing for performance.\n    // this is a very hot path, and fully deterministic.\n    const memoOpts =\n      (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n      (this.options.loose && FLAG_LOOSE)\n    const memoKey = memoOpts + ':' + range\n    const cached = cache.get(memoKey)\n    if (cached) {\n      return cached\n    }\n\n    const loose = this.options.loose\n    // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n    const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n    range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n    debug('hyphen replace', range)\n\n    // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n    range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n    debug('comparator trim', range)\n\n    // `~ 1.2.3` => `~1.2.3`\n    range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n    debug('tilde trim', range)\n\n    // `^ 1.2.3` => `^1.2.3`\n    range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n    debug('caret trim', range)\n\n    // At this point, the range is completely trimmed and\n    // ready to be split into comparators.\n\n    let rangeList = range\n      .split(' ')\n      .map(comp => parseComparator(comp, this.options))\n      .join(' ')\n      .split(/\\s+/)\n      // >=0.0.0 is equivalent to *\n      .map(comp => replaceGTE0(comp, this.options))\n\n    if (loose) {\n      // in loose mode, throw out any that are not valid comparators\n      rangeList = rangeList.filter(comp => {\n        debug('loose invalid filter', comp, this.options)\n        return !!comp.match(re[t.COMPARATORLOOSE])\n      })\n    }\n    debug('range list', rangeList)\n\n    // if any comparators are the null set, then replace with JUST null set\n    // if more than one comparator, remove any * comparators\n    // also, don't include the same comparator more than once\n    const rangeMap = new Map()\n    const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n    for (const comp of comparators) {\n      if (isNullSet(comp)) {\n        return [comp]\n      }\n      rangeMap.set(comp.value, comp)\n    }\n    if (rangeMap.size > 1 && rangeMap.has('')) {\n      rangeMap.delete('')\n    }\n\n    const result = [...rangeMap.values()]\n    cache.set(memoKey, result)\n    return result\n  }\n\n  intersects (range, options) {\n    if (!(range instanceof Range)) {\n      throw new TypeError('a Range is required')\n    }\n\n    return this.set.some((thisComparators) => {\n      return (\n        isSatisfiable(thisComparators, options) &&\n        range.set.some((rangeComparators) => {\n          return (\n            isSatisfiable(rangeComparators, options) &&\n            thisComparators.every((thisComparator) => {\n              return rangeComparators.every((rangeComparator) => {\n                return thisComparator.intersects(rangeComparator, options)\n              })\n            })\n          )\n        })\n      )\n    })\n  }\n\n  // if ANY of the sets match ALL of its comparators, then pass\n  test (version) {\n    if (!version) {\n      return false\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    for (let i = 0; i < this.set.length; i++) {\n      if (testSet(this.set[i], version, this.options)) {\n        return true\n      }\n    }\n    return false\n  }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n  safeRe: re,\n  src,\n  t,\n  comparatorTrimReplace,\n  tildeTrimReplace,\n  caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\n// unbounded global build-metadata stripper used by parseRange\nconst BUILDSTRIPRE = new RegExp(src[t.BUILD], 'g')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n  let result = true\n  const remainingComparators = comparators.slice()\n  let testComparator = remainingComparators.pop()\n\n  while (result && remainingComparators.length) {\n    result = remainingComparators.every((otherComparator) => {\n      return testComparator.intersects(otherComparator, options)\n    })\n\n    testComparator = remainingComparators.pop()\n  }\n\n  return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n  comp = comp.replace(re[t.BUILD], '')\n  debug('comp', comp, options)\n  comp = replaceCarets(comp, options)\n  debug('caret', comp)\n  comp = replaceTildes(comp, options)\n  debug('tildes', comp)\n  comp = replaceXRanges(comp, options)\n  debug('xrange', comp)\n  comp = replaceStars(comp, options)\n  debug('stars', comp)\n  return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\nconst invalidXRangeOrder = (M, m, p) => (\n  (isX(M) && !isX(m)) ||\n  (isX(m) && p && !isX(p))\n)\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n  return comp\n    .trim()\n    .split(/\\s+/)\n    .map((c) => replaceTilde(c, options))\n    .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n  const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n  // if we're including prereleases in the match, then the lower bound is\n  // -0, the lowest possible prerelease value, just like x-ranges and carets.\n  // this keeps `~1.2` equivalent to the `1.2.x` x-range it's documented as.\n  const z = options.includePrerelease ? '-0' : ''\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('tilde', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      // ~1.2 == >=1.2.0 <1.3.0-0\n      ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n    } else if (pr) {\n      debug('replaceTilde pr', pr)\n      ret = `>=${M}.${m}.${p}-${pr\n      } <${M}.${+m + 1}.0-0`\n    } else {\n      // ~1.2.3 == >=1.2.3 <1.3.0-0\n      ret = `>=${M}.${m}.${p\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('tilde return', ret)\n    return ret\n  })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n  return comp\n    .trim()\n    .split(/\\s+/)\n    .map((c) => replaceCaret(c, options))\n    .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n  debug('caret', comp, options)\n  const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n  const z = options.includePrerelease ? '-0' : ''\n  return comp.replace(r, (_, M, m, p, pr) => {\n    debug('caret', comp, _, M, m, p, pr)\n    let ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n    } else if (isX(p)) {\n      if (M === '0') {\n        ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n      } else {\n        ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n      }\n    } else if (pr) {\n      debug('replaceCaret pr', pr)\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p}-${pr\n          } <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p}-${pr\n        } <${+M + 1}.0.0-0`\n      }\n    } else {\n      debug('no pr')\n      if (M === '0') {\n        if (m === '0') {\n          ret = `>=${M}.${m}.${p\n          } <${M}.${m}.${+p + 1}-0`\n        } else {\n          ret = `>=${M}.${m}.${p\n          } <${M}.${+m + 1}.0-0`\n        }\n      } else {\n        ret = `>=${M}.${m}.${p\n        } <${+M + 1}.0.0-0`\n      }\n    }\n\n    debug('caret return', ret)\n    return ret\n  })\n}\n\nconst replaceXRanges = (comp, options) => {\n  debug('replaceXRanges', comp, options)\n  return comp\n    .split(/\\s+/)\n    .map((c) => replaceXRange(c, options))\n    .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n  comp = comp.trim()\n  const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n  return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n    debug('xRange', comp, ret, gtlt, M, m, p, pr)\n    if (invalidXRangeOrder(M, m, p)) {\n      return comp\n    }\n\n    const xM = isX(M)\n    const xm = xM || isX(m)\n    const xp = xm || isX(p)\n    const anyX = xp\n\n    if (gtlt === '=' && anyX) {\n      gtlt = ''\n    }\n\n    // if we're including prereleases in the match, then we need\n    // to fix this to -0, the lowest possible prerelease value\n    pr = options.includePrerelease ? '-0' : ''\n\n    if (xM) {\n      if (gtlt === '>' || gtlt === '<') {\n        // nothing is allowed\n        ret = '<0.0.0-0'\n      } else {\n        // nothing is forbidden\n        ret = '*'\n      }\n    } else if (gtlt && anyX) {\n      // we know patch is an x, because we have any x at all.\n      // replace X with 0\n      if (xm) {\n        m = 0\n      }\n      p = 0\n\n      if (gtlt === '>') {\n        // >1 => >=2.0.0\n        // >1.2 => >=1.3.0\n        gtlt = '>='\n        if (xm) {\n          M = +M + 1\n          m = 0\n          p = 0\n        } else {\n          m = +m + 1\n          p = 0\n        }\n      } else if (gtlt === '<=') {\n        // <=0.7.x is actually <0.8.0, since any 0.7.x should\n        // pass.  Similarly, <=7.x is actually <8.0.0, etc.\n        gtlt = '<'\n        if (xm) {\n          M = +M + 1\n        } else {\n          m = +m + 1\n        }\n      }\n\n      if (gtlt === '<') {\n        pr = '-0'\n      }\n\n      ret = `${gtlt + M}.${m}.${p}${pr}`\n    } else if (xm) {\n      ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n    } else if (xp) {\n      ret = `>=${M}.${m}.0${pr\n      } <${M}.${+m + 1}.0-0`\n    }\n\n    debug('xRange return', ret)\n\n    return ret\n  })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n  debug('replaceStars', comp, options)\n  // Looseness is ignored here.  star is always as loose as it gets!\n  return comp\n    .trim()\n    .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n  debug('replaceGTE0', comp, options)\n  return comp\n    .trim()\n    .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n  from, fM, fm, fp, fpr, fb,\n  to, tM, tm, tp, tpr) => {\n  if (isX(fM)) {\n    from = ''\n  } else if (isX(fm)) {\n    from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n  } else if (isX(fp)) {\n    from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n  } else if (fpr) {\n    from = `>=${from}`\n  } else {\n    from = `>=${from}${incPr ? '-0' : ''}`\n  }\n\n  if (isX(tM)) {\n    to = ''\n  } else if (isX(tm)) {\n    to = `<${+tM + 1}.0.0-0`\n  } else if (isX(tp)) {\n    to = `<${tM}.${+tm + 1}.0-0`\n  } else if (tpr) {\n    to = `<=${tM}.${tm}.${tp}-${tpr}`\n  } else if (incPr) {\n    to = `<${tM}.${tm}.${+tp + 1}-0`\n  } else {\n    to = `<=${to}`\n  }\n\n  return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n  for (let i = 0; i < set.length; i++) {\n    if (!set[i].test(version)) {\n      return false\n    }\n  }\n\n  if (version.prerelease.length && !options.includePrerelease) {\n    // Find the set of versions that are allowed to have prereleases\n    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n    // That should allow `1.2.3-pr.2` to pass.\n    // However, `1.2.4-alpha.notready` should NOT be allowed,\n    // even though it's within the range set by the comparators.\n    for (let i = 0; i < set.length; i++) {\n      debug(set[i].semver)\n      if (set[i].semver === Comparator.ANY) {\n        continue\n      }\n\n      if (set[i].semver.prerelease.length > 0) {\n        const allowed = set[i].semver\n        if (allowed.major === version.major &&\n            allowed.minor === version.minor &&\n            allowed.patch === version.patch) {\n          return true\n        }\n      }\n    }\n\n    // Version has a -pre, but it's not one of the ones we like.\n    return false\n  }\n\n  return true\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport default class Cache<T, V> {\n  public size = 0;\n  public misses = 0;\n  public hits = 0;\n\n  constructor(\n    private limit: number,\n    private func: (obj: T) => V,\n    private store?: any,\n  ) {\n    this.store = store || new Map();\n  }\n\n  get(key: T): V {\n    let value = this.store.get(key);\n\n    if (this.store.has(key)) {\n      this.hits++;\n\n      return this.store.get(key);\n    } else {\n      this.misses++;\n      value = this.set(key, this.func(key));\n    }\n\n    return value;\n  }\n\n  set(key: T, value: V) {\n    if (this.limit > this.size) {\n      this.size++;\n      this.store.set(key, value);\n    }\n\n    return value;\n  }\n\n  purge() {\n    this.store.clear();\n    this.size = 0;\n    this.hits = 0;\n    this.misses = 0;\n  }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable no-useless-escape */\n/**\n @module @ember/string\n */\nimport Cache from './cache.ts';\n\n// STATE within a module is frowned upon, this exists\n// to support Ember.STRINGS but shield ember internals from this legacy global\n// API.\nlet STRINGS: { [key: string]: string } = {};\n\nexport function setStrings(strings: { [key: string]: string }) {\n  STRINGS = strings;\n}\n\nexport function getStrings(): { [key: string]: string } {\n  return STRINGS;\n}\n\nexport function getString(name: string): string | undefined {\n  return STRINGS[name];\n}\n\nconst STRING_DASHERIZE_REGEXP = /[ _]/g;\n\nconst STRING_DASHERIZE_CACHE = new Cache<string, string>(1000, (key) =>\n  decamelize(key).replace(STRING_DASHERIZE_REGEXP, '-'),\n);\n\nconst STRING_CAMELIZE_REGEXP_1 = /(\\-|\\_|\\.|\\s)+(.)?/g;\nconst STRING_CAMELIZE_REGEXP_2 = /(^|\\/)([A-Z])/g;\n\nconst CAMELIZE_CACHE = new Cache<string, string>(1000, (key) =>\n  key\n    .replace(STRING_CAMELIZE_REGEXP_1, (_match, _separator, chr) =>\n      chr ? chr.toUpperCase() : '',\n    )\n    .replace(STRING_CAMELIZE_REGEXP_2, (match /*, separator, chr */) =>\n      match.toLowerCase(),\n    ),\n);\n\nconst STRING_CLASSIFY_REGEXP_1 = /^(\\-|_)+(.)?/;\nconst STRING_CLASSIFY_REGEXP_2 = /(.)(\\-|\\_|\\.|\\s)+(.)?/g;\nconst STRING_CLASSIFY_REGEXP_3 = /(^|\\/|\\.)([a-z])/g;\n\nconst CLASSIFY_CACHE = new Cache<string, string>(1000, (str) => {\n  const replace1 = (_match: string, _separator: string, chr: string) =>\n    chr ? `_${chr.toUpperCase()}` : '';\n  const replace2 = (\n    _match: string,\n    initialChar: string,\n    _separator: string,\n    chr: string,\n  ) => initialChar + (chr ? chr.toUpperCase() : '');\n  const parts = str.split('/');\n\n  for (let i = 0; i < parts.length; i++) {\n    parts[i] = (parts as any)[i]\n      .replace(STRING_CLASSIFY_REGEXP_1, replace1)\n      .replace(STRING_CLASSIFY_REGEXP_2, replace2);\n  }\n\n  return parts\n    .join('/')\n    .replace(STRING_CLASSIFY_REGEXP_3, (match /*, separator, chr */) =>\n      match.toUpperCase(),\n    );\n});\n\nconst STRING_UNDERSCORE_REGEXP_1 = /([a-z\\d])([A-Z]+)/g;\nconst STRING_UNDERSCORE_REGEXP_2 = /\\-|\\s+/g;\n\nconst UNDERSCORE_CACHE = new Cache<string, string>(1000, (str) =>\n  str\n    .replace(STRING_UNDERSCORE_REGEXP_1, '$1_$2')\n    .replace(STRING_UNDERSCORE_REGEXP_2, '_')\n    .toLowerCase(),\n);\n\nconst STRING_CAPITALIZE_REGEXP = /(^|\\/)([a-z\\u00C0-\\u024F])/g;\n\nconst CAPITALIZE_CACHE = new Cache<string, string>(1000, (str) =>\n  str.replace(STRING_CAPITALIZE_REGEXP, (match /*, separator, chr */) =>\n    match.toUpperCase(),\n  ),\n);\n\nconst STRING_DECAMELIZE_REGEXP = /([a-z\\d])([A-Z])/g;\n\nconst DECAMELIZE_CACHE = new Cache<string, string>(1000, (str) =>\n  str.replace(STRING_DECAMELIZE_REGEXP, '$1_$2').toLowerCase(),\n);\n\n/**\n  Splits a string into separate units separated by spaces, eliminating any\n  empty strings in the process. This is a convenience method for split that\n  is mostly useful when applied to the `String.prototype`.\n\n  ```javascript\n  import { w } from '@ember/string';\n\n  w(\"alpha beta gamma\").forEach(function(key) {\n    console.log(key);\n  });\n\n  // > alpha\n  // > beta\n  // > gamma\n  ```\n\n  @method w\n  @param {String} str The string to split\n  @return {Array} array containing the split strings\n  @public\n*/\nexport function w(str: string): string[] {\n  return str.split(/\\s+/);\n}\n\n/**\n  Converts a camelized string into all lower case separated by underscores.\n\n  ```javascript\n  import { decamelize } from '@ember/string';\n\n  decamelize('innerHTML');          // 'inner_html'\n  decamelize('action_name');        // 'action_name'\n  decamelize('css-class-name');     // 'css-class-name'\n  decamelize('my favorite items');  // 'my favorite items'\n  ```\n\n  @method decamelize\n  @param {String} str The string to decamelize.\n  @return {String} the decamelized string.\n  @public\n*/\nexport function decamelize(str: string): string {\n  return DECAMELIZE_CACHE.get(str);\n}\n\n/**\n  Replaces underscores, spaces, or camelCase with dashes.\n\n  ```javascript\n  import { dasherize } from '@ember/string';\n\n  dasherize('innerHTML');                // 'inner-html'\n  dasherize('action_name');              // 'action-name'\n  dasherize('css-class-name');           // 'css-class-name'\n  dasherize('my favorite items');        // 'my-favorite-items'\n  dasherize('privateDocs/ownerInvoice';  // 'private-docs/owner-invoice'\n  ```\n\n  @method dasherize\n  @param {String} str The string to dasherize.\n  @return {String} the dasherized string.\n  @public\n*/\nexport function dasherize(str: string): string {\n  return STRING_DASHERIZE_CACHE.get(str);\n}\n\n/**\n  Returns the lowerCamelCase form of a string.\n\n  ```javascript\n  import { camelize } from '@ember/string';\n\n  camelize('innerHTML');                   // 'innerHTML'\n  camelize('action_name');                 // 'actionName'\n  camelize('css-class-name');              // 'cssClassName'\n  camelize('my favorite items');           // 'myFavoriteItems'\n  camelize('My Favorite Items');           // 'myFavoriteItems'\n  camelize('private-docs/owner-invoice');  // 'privateDocs/ownerInvoice'\n  ```\n\n  @method camelize\n  @param {String} str The string to camelize.\n  @return {String} the camelized string.\n  @public\n*/\nexport function camelize(str: string): string {\n  return CAMELIZE_CACHE.get(str);\n}\n\n/**\n  Returns the UpperCamelCase form of a string.\n\n  ```javascript\n  import { classify } from '@ember/string';\n\n  classify('innerHTML');                   // 'InnerHTML'\n  classify('action_name');                 // 'ActionName'\n  classify('css-class-name');              // 'CssClassName'\n  classify('my favorite items');           // 'MyFavoriteItems'\n  classify('private-docs/owner-invoice');  // 'PrivateDocs/OwnerInvoice'\n  ```\n\n  @method classify\n  @param {String} str the string to classify\n  @return {String} the classified string\n  @public\n*/\nexport function classify(str: string): string {\n  return CLASSIFY_CACHE.get(str);\n}\n\n/**\n  More general than decamelize. Returns the lower\\_case\\_and\\_underscored\n  form of a string.\n\n  ```javascript\n  import { underscore } from '@ember/string';\n\n  underscore('innerHTML');                 // 'inner_html'\n  underscore('action_name');               // 'action_name'\n  underscore('css-class-name');            // 'css_class_name'\n  underscore('my favorite items');         // 'my_favorite_items'\n  underscore('privateDocs/ownerInvoice');  // 'private_docs/owner_invoice'\n  ```\n\n  @method underscore\n  @param {String} str The string to underscore.\n  @return {String} the underscored string.\n  @public\n*/\nexport function underscore(str: string): string {\n  return UNDERSCORE_CACHE.get(str);\n}\n\n/**\n  Returns the Capitalized form of a string\n\n  ```javascript\n  import { capitalize } from '@ember/string';\n\n  capitalize('innerHTML')                 // 'InnerHTML'\n  capitalize('action_name')               // 'Action_name'\n  capitalize('css-class-name')            // 'Css-class-name'\n  capitalize('my favorite items')         // 'My favorite items'\n  capitalize('privateDocs/ownerInvoice'); // 'PrivateDocs/ownerInvoice'\n  ```\n\n  @method capitalize\n  @param {String} str The string to capitalize.\n  @return {String} The capitalized string.\n  @public\n*/\nexport function capitalize(str: string): string {\n  return CAPITALIZE_CACHE.get(str);\n}\n","import type { AsyncContextStack } from './asyncContext/stackStrategy';\nimport type { AsyncContextStrategy } from './asyncContext/types';\nimport type { Scope } from './scope';\nimport type { Logger } from './utils-hoist/logger';\nimport { SDK_VERSION } from './utils-hoist/version';\nimport { GLOBAL_OBJ } from './utils-hoist/worldwide';\n\n/**\n * An object that contains globally accessible properties and maintains a scope stack.\n * @hidden\n */\nexport interface Carrier {\n  __SENTRY__?: VersionedCarrier;\n}\n\ntype VersionedCarrier = {\n  version?: string;\n} & Record<Exclude<string, 'version'>, SentryCarrier>;\n\nexport interface SentryCarrier {\n  acs?: AsyncContextStrategy;\n  stack?: AsyncContextStack;\n\n  globalScope?: Scope;\n  defaultIsolationScope?: Scope;\n  defaultCurrentScope?: Scope;\n  logger?: Logger;\n\n  /** Overwrites TextEncoder used in `@sentry/core`, need for `react-native@0.73` and older */\n  encodePolyfill?: (input: string) => Uint8Array;\n  /** Overwrites TextDecoder used in `@sentry/core`, need for `react-native@0.73` and older */\n  decodePolyfill?: (input: Uint8Array) => string;\n}\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nexport function getMainCarrier(): Carrier {\n  // This ensures a Sentry carrier exists\n  getSentryCarrier(GLOBAL_OBJ);\n  return GLOBAL_OBJ;\n}\n\n/** Will either get the existing sentry carrier, or create a new one. */\nexport function getSentryCarrier(carrier: Carrier): SentryCarrier {\n  const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n\n  // For now: First SDK that sets the .version property wins\n  __SENTRY__.version = __SENTRY__.version || SDK_VERSION;\n\n  // Intentionally populating and returning the version of \"this\" SDK instance\n  // rather than what's set in .version so that \"this\" SDK always gets its carrier\n  return (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\n}\n\n/**\n * Returns a global singleton contained in the global `__SENTRY__[]` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `GLOBAL_OBJ`'s return value\n * @returns the singleton\n */\nexport function getGlobalSingleton<Prop extends keyof SentryCarrier>(\n  name: Prop,\n  creator: () => NonNullable<SentryCarrier[Prop]>,\n  obj = GLOBAL_OBJ,\n): NonNullable<SentryCarrier[Prop]> {\n  const __SENTRY__ = (obj.__SENTRY__ = obj.__SENTRY__ || {});\n  const carrier = (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\n  // Note: We do not want to set `carrier.version` here, as this may be called before any `init` is called, e.g. for the default scopes\n  return carrier[name] || (carrier[name] = creator());\n}\n","/**\n * Use this attribute to represent the source of a span.\n * Should be one of: custom, url, route, view, component, task, unknown\n *\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = 'sentry.source';\n\n/**\n * Attributes that holds the sample rate that was locally applied to a span.\n * If this attribute is not defined, it means that the span inherited a sampling decision.\n *\n * NOTE: Is only defined on root spans.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = 'sentry.sample_rate';\n\n/**\n * Use this attribute to represent the operation of a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_OP = 'sentry.op';\n\n/**\n * Use this attribute to represent the origin of a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = 'sentry.origin';\n\n/** The reason why an idle span finished. */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON = 'sentry.idle_span_finish_reason';\n\n/** The unit of a measurement, which may be stored as a TimedEvent. */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT = 'sentry.measurement_unit';\n\n/** The value of a measurement, which may be stored as a TimedEvent. */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE = 'sentry.measurement_value';\n\n/**\n * A custom span name set by users guaranteed to be taken over any automatically\n * inferred name. This attribute is removed before the span is sent.\n *\n * @internal only meant for internal SDK usage\n * @hidden\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME = 'sentry.custom_span_name';\n\n/**\n * The id of the profile that this span occurred in.\n */\nexport const SEMANTIC_ATTRIBUTE_PROFILE_ID = 'sentry.profile_id';\n\nexport const SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME = 'sentry.exclusive_time';\n\nexport const SEMANTIC_ATTRIBUTE_CACHE_HIT = 'cache.hit';\n\nexport const SEMANTIC_ATTRIBUTE_CACHE_KEY = 'cache.key';\n\nexport const SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE = 'cache.item_size';\n\n/** TODO: Remove these once we update to latest semantic conventions */\nexport const SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD = 'http.request.method';\nexport const SEMANTIC_ATTRIBUTE_URL_FULL = 'url.full';\n","import { getSentryCarrier } from '../carrier';\nimport type {\n  Attachment,\n  AttachmentItem,\n  BaseEnvelopeHeaders,\n  BaseEnvelopeItemHeaders,\n  DataCategory,\n  DsnComponents,\n  Envelope,\n  EnvelopeItemType,\n  Event,\n  EventEnvelopeHeaders,\n  SdkInfo,\n  SdkMetadata,\n  SpanItem,\n  SpanJSON,\n} from '../types-hoist';\n\nimport { dsnToString } from './dsn';\nimport { normalize } from './normalize';\nimport { dropUndefinedKeys } from './object';\nimport { GLOBAL_OBJ } from './worldwide';\n\n/**\n * Creates an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nexport function createEnvelope<E extends Envelope>(headers: E[0], items: E[1] = []): E {\n  return [headers, items] as E;\n}\n\n/**\n * Add an item to an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nexport function addItemToEnvelope<E extends Envelope>(envelope: E, newItem: E[1][number]): E {\n  const [headers, items] = envelope;\n  return [headers, [...items, newItem]] as unknown as E;\n}\n\n/**\n * Convenience function to loop through the items and item types of an envelope.\n * (This function was mostly created because working with envelope types is painful at the moment)\n *\n * If the callback returns true, the rest of the items will be skipped.\n */\nexport function forEachEnvelopeItem<E extends Envelope>(\n  envelope: Envelope,\n  callback: (envelopeItem: E[1][number], envelopeItemType: E[1][number][0]['type']) => boolean | void,\n): boolean {\n  const envelopeItems = envelope[1];\n\n  for (const envelopeItem of envelopeItems) {\n    const envelopeItemType = envelopeItem[0].type;\n    const result = callback(envelopeItem, envelopeItemType);\n\n    if (result) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * Returns true if the envelope contains any of the given envelope item types\n */\nexport function envelopeContainsItemType(envelope: Envelope, types: EnvelopeItemType[]): boolean {\n  return forEachEnvelopeItem(envelope, (_, type) => types.includes(type));\n}\n\n/**\n * Encode a string to UTF8 array.\n */\nfunction encodeUTF8(input: string): Uint8Array {\n  const carrier = getSentryCarrier(GLOBAL_OBJ);\n  return carrier.encodePolyfill ? carrier.encodePolyfill(input) : new TextEncoder().encode(input);\n}\n\n/**\n * Decode a UTF8 array to string.\n */\nfunction decodeUTF8(input: Uint8Array): string {\n  const carrier = getSentryCarrier(GLOBAL_OBJ);\n  return carrier.decodePolyfill ? carrier.decodePolyfill(input) : new TextDecoder().decode(input);\n}\n\n/**\n * Serializes an envelope.\n */\nexport function serializeEnvelope(envelope: Envelope): string | Uint8Array {\n  const [envHeaders, items] = envelope;\n\n  // Initially we construct our envelope as a string and only convert to binary chunks if we encounter binary data\n  let parts: string | Uint8Array[] = JSON.stringify(envHeaders);\n\n  function append(next: string | Uint8Array): void {\n    if (typeof parts === 'string') {\n      parts = typeof next === 'string' ? parts + next : [encodeUTF8(parts), next];\n    } else {\n      parts.push(typeof next === 'string' ? encodeUTF8(next) : next);\n    }\n  }\n\n  for (const item of items) {\n    const [itemHeaders, payload] = item;\n\n    append(`\\n${JSON.stringify(itemHeaders)}\\n`);\n\n    if (typeof payload === 'string' || payload instanceof Uint8Array) {\n      append(payload);\n    } else {\n      let stringifiedPayload: string;\n      try {\n        stringifiedPayload = JSON.stringify(payload);\n      } catch (e) {\n        // In case, despite all our efforts to keep `payload` circular-dependency-free, `JSON.stringify()` still\n        // fails, we try again after normalizing it again with infinite normalization depth. This of course has a\n        // performance impact but in this case a performance hit is better than throwing.\n        stringifiedPayload = JSON.stringify(normalize(payload));\n      }\n      append(stringifiedPayload);\n    }\n  }\n\n  return typeof parts === 'string' ? parts : concatBuffers(parts);\n}\n\nfunction concatBuffers(buffers: Uint8Array[]): Uint8Array {\n  const totalLength = buffers.reduce((acc, buf) => acc + buf.length, 0);\n\n  const merged = new Uint8Array(totalLength);\n  let offset = 0;\n  for (const buffer of buffers) {\n    merged.set(buffer, offset);\n    offset += buffer.length;\n  }\n\n  return merged;\n}\n\n/**\n * Parses an envelope\n */\nexport function parseEnvelope(env: string | Uint8Array): Envelope {\n  let buffer = typeof env === 'string' ? encodeUTF8(env) : env;\n\n  function readBinary(length: number): Uint8Array {\n    const bin = buffer.subarray(0, length);\n    // Replace the buffer with the remaining data excluding trailing newline\n    buffer = buffer.subarray(length + 1);\n    return bin;\n  }\n\n  function readJson<T>(): T {\n    let i = buffer.indexOf(0xa);\n    // If we couldn't find a newline, we must have found the end of the buffer\n    if (i < 0) {\n      i = buffer.length;\n    }\n\n    return JSON.parse(decodeUTF8(readBinary(i))) as T;\n  }\n\n  const envelopeHeader = readJson<BaseEnvelopeHeaders>();\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const items: [any, any][] = [];\n\n  while (buffer.length) {\n    const itemHeader = readJson<BaseEnvelopeItemHeaders>();\n    const binaryLength = typeof itemHeader.length === 'number' ? itemHeader.length : undefined;\n\n    items.push([itemHeader, binaryLength ? readBinary(binaryLength) : readJson()]);\n  }\n\n  return [envelopeHeader, items];\n}\n\n/**\n * Creates envelope item for a single span\n */\nexport function createSpanEnvelopeItem(spanJson: Partial<SpanJSON>): SpanItem {\n  const spanHeaders: SpanItem[0] = {\n    type: 'span',\n  };\n\n  return [spanHeaders, spanJson];\n}\n\n/**\n * Creates attachment envelope items\n */\nexport function createAttachmentEnvelopeItem(attachment: Attachment): AttachmentItem {\n  const buffer = typeof attachment.data === 'string' ? encodeUTF8(attachment.data) : attachment.data;\n\n  return [\n    dropUndefinedKeys({\n      type: 'attachment',\n      length: buffer.length,\n      filename: attachment.filename,\n      content_type: attachment.contentType,\n      attachment_type: attachment.attachmentType,\n    }),\n    buffer,\n  ];\n}\n\nconst ITEM_TYPE_TO_DATA_CATEGORY_MAP: Record<EnvelopeItemType, DataCategory> = {\n  session: 'session',\n  sessions: 'session',\n  attachment: 'attachment',\n  transaction: 'transaction',\n  event: 'error',\n  client_report: 'internal',\n  user_report: 'default',\n  profile: 'profile',\n  profile_chunk: 'profile',\n  replay_event: 'replay',\n  replay_recording: 'replay',\n  check_in: 'monitor',\n  feedback: 'feedback',\n  span: 'span',\n  raw_security: 'security',\n  otel_log: 'log_item',\n};\n\n/**\n * Maps the type of an envelope item to a data category.\n */\nexport function envelopeItemTypeToDataCategory(type: EnvelopeItemType): DataCategory {\n  return ITEM_TYPE_TO_DATA_CATEGORY_MAP[type];\n}\n\n/** Extracts the minimal SDK info from the metadata or an events */\nexport function getSdkMetadataForEnvelopeHeader(metadataOrEvent?: SdkMetadata | Event): SdkInfo | undefined {\n  if (!metadataOrEvent?.sdk) {\n    return;\n  }\n  const { name, version } = metadataOrEvent.sdk;\n  return { name, version };\n}\n\n/**\n * Creates event envelope headers, based on event, sdk info and tunnel\n * Note: This function was extracted from the core package to make it available in Replay\n */\nexport function createEventEnvelopeHeaders(\n  event: Event,\n  sdkInfo: SdkInfo | undefined,\n  tunnel: string | undefined,\n  dsn?: DsnComponents,\n): EventEnvelopeHeaders {\n  const dynamicSamplingContext = event.sdkProcessingMetadata?.dynamicSamplingContext;\n  return {\n    event_id: event.event_id as string,\n    sent_at: new Date().toISOString(),\n    ...(sdkInfo && { sdk: sdkInfo }),\n    ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n    ...(dynamicSamplingContext && {\n      trace: dropUndefinedKeys({ ...dynamicSamplingContext }),\n    }),\n  };\n}\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport style from 'ember-style-modifier';\n\nimport { HdsFormTextInputTypeValues } from './types.ts';\nimport type { HdsFormTextInputTypes } from './types.ts';\n\n// notice: we don't support all the possible HTML types, only a subset\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input\nexport const DEFAULT_TYPE = HdsFormTextInputTypeValues.Text;\nexport const TYPES: HdsFormTextInputTypes[] = Object.values(\n  HdsFormTextInputTypeValues\n);\n\nexport interface HdsFormTextInputBaseSignature {\n  Args: {\n    hasVisibilityToggle?: boolean;\n    isInvalid?: boolean;\n    isLoading?: boolean;\n    type?: HdsFormTextInputTypes;\n    value?: string;\n    width?: string;\n    id?: string;\n    ariaDescribedBy?: string;\n  };\n  Element: HTMLInputElement;\n}\n\nexport default class HdsFormTextInputBase extends Component<HdsFormTextInputBaseSignature> {\n  get type(): HdsFormTextInputTypes {\n    const { type = DEFAULT_TYPE } = this.args;\n\n    assert(\n      `@type for \"Hds::Form::TextInput\" must be one of the following: ${TYPES.join(\n        ', '\n      )}; received: ${type}`,\n      TYPES.includes(type)\n    );\n\n    return type;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-form-text-input'];\n\n    // add typographic classes\n    classes.push('hds-typography-body-200', 'hds-font-weight-regular');\n\n    // add a class based on the @isInvalid argument\n    if (this.args.isInvalid) {\n      classes.push(`hds-form-text-input--is-invalid`);\n    }\n\n    // add a class based on the @hasVisibilityToggle argument\n    if (this.args.hasVisibilityToggle) {\n      classes.push(`hds-form-text-input--has-visibility-toggle`);\n    }\n\n    // add a class based on the @isLoading argument\n    if (this.args.isLoading) {\n      classes.push(`hds-form-text-input--is-loading`);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <input\n      class={{this.classNames}}\n      {{style width=@width}}\n      id={{@id}}\n      aria-describedby={{@ariaDescribedBy}}\n      ...attributes\n      value={{@value}}\n      type={{this.type}}\n    />\n  </template>\n}\n","import { isRegExp, isString, isVueViewModel } from './is';\n\nexport { escapeStringForRegex } from './vendor/escapeStringForRegex';\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nexport function truncate(str: string, max: number = 0): string {\n  if (typeof str !== 'string' || max === 0) {\n    return str;\n  }\n  return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nexport function snipLine(line: string, colno: number): string {\n  let newLine = line;\n  const lineLength = newLine.length;\n  if (lineLength <= 150) {\n    return newLine;\n  }\n  if (colno > lineLength) {\n    // eslint-disable-next-line no-param-reassign\n    colno = lineLength;\n  }\n\n  let start = Math.max(colno - 60, 0);\n  if (start < 5) {\n    start = 0;\n  }\n\n  let end = Math.min(start + 140, lineLength);\n  if (end > lineLength - 5) {\n    end = lineLength;\n  }\n  if (end === lineLength) {\n    start = Math.max(end - 140, 0);\n  }\n\n  newLine = newLine.slice(start, end);\n  if (start > 0) {\n    newLine = `'{snip} ${newLine}`;\n  }\n  if (end < lineLength) {\n    newLine += ' {snip}';\n  }\n\n  return newLine;\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\nexport function safeJoin(input: unknown[], delimiter?: string): string {\n  if (!Array.isArray(input)) {\n    return '';\n  }\n\n  const output = [];\n  // eslint-disable-next-line @typescript-eslint/prefer-for-of\n  for (let i = 0; i < input.length; i++) {\n    const value = input[i];\n    try {\n      // This is a hack to fix a Vue3-specific bug that causes an infinite loop of\n      // console warnings. This happens when a Vue template is rendered with\n      // an undeclared variable, which we try to stringify, ultimately causing\n      // Vue to issue another warning which repeats indefinitely.\n      // see: https://github.com/getsentry/sentry-javascript/pull/8981\n      if (isVueViewModel(value)) {\n        output.push('[VueViewModel]');\n      } else {\n        output.push(String(value));\n      }\n    } catch (e) {\n      output.push('[value cannot be serialized]');\n    }\n  }\n\n  return output.join(delimiter);\n}\n\n/**\n * Checks if the given value matches a regex or string\n *\n * @param value The string to test\n * @param pattern Either a regex or a string against which `value` will be matched\n * @param requireExactStringMatch If true, `value` must match `pattern` exactly. If false, `value` will match\n * `pattern` if it contains `pattern`. Only applies to string-type patterns.\n */\nexport function isMatchingPattern(\n  value: string,\n  pattern: RegExp | string,\n  requireExactStringMatch: boolean = false,\n): boolean {\n  if (!isString(value)) {\n    return false;\n  }\n\n  if (isRegExp(pattern)) {\n    return pattern.test(value);\n  }\n  if (isString(pattern)) {\n    return requireExactStringMatch ? value === pattern : value.includes(pattern);\n  }\n\n  return false;\n}\n\n/**\n * Test the given string against an array of strings and regexes. By default, string matching is done on a\n * substring-inclusion basis rather than a strict equality basis\n *\n * @param testString The string to test\n * @param patterns The patterns against which to test the string\n * @param requireExactStringMatch If true, `testString` must match one of the given string patterns exactly in order to\n * count. If false, `testString` will match a string pattern if it contains that pattern.\n * @returns\n */\nexport function stringMatchesSomePattern(\n  testString: string,\n  patterns: Array<string | RegExp> = [],\n  requireExactStringMatch: boolean = false,\n): boolean {\n  return patterns.some(pattern => isMatchingPattern(testString, pattern, requireExactStringMatch));\n}\n","import type { Client } from '../client';\nimport { DEFAULT_ENVIRONMENT } from '../constants';\nimport { getClient } from '../currentScopes';\nimport type { Scope } from '../scope';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '../semanticAttributes';\nimport type { DynamicSamplingContext, Span } from '../types-hoist';\nimport {\n  baggageHeaderToDynamicSamplingContext,\n  dynamicSamplingContextToSentryBaggageHeader,\n} from '../utils-hoist/baggage';\nimport { addNonEnumerableProperty, dropUndefinedKeys } from '../utils-hoist/object';\nimport { hasSpansEnabled } from '../utils/hasSpansEnabled';\nimport { getRootSpan, spanIsSampled, spanToJSON } from '../utils/spanUtils';\nimport { getCapturedScopesOnSpan } from './utils';\n\n/**\n * If you change this value, also update the terser plugin config to\n * avoid minification of the object property!\n */\nconst FROZEN_DSC_FIELD = '_frozenDsc';\n\ntype SpanWithMaybeDsc = Span & {\n  [FROZEN_DSC_FIELD]?: Partial<DynamicSamplingContext> | undefined;\n};\n\n/**\n * Freeze the given DSC on the given span.\n */\nexport function freezeDscOnSpan(span: Span, dsc: Partial<DynamicSamplingContext>): void {\n  const spanWithMaybeDsc = span as SpanWithMaybeDsc;\n  addNonEnumerableProperty(spanWithMaybeDsc, FROZEN_DSC_FIELD, dsc);\n}\n\n/**\n * Creates a dynamic sampling context from a client.\n *\n * Dispatches the `createDsc` lifecycle hook as a side effect.\n */\nexport function getDynamicSamplingContextFromClient(trace_id: string, client: Client): DynamicSamplingContext {\n  const options = client.getOptions();\n\n  const { publicKey: public_key } = client.getDsn() || {};\n\n  const dsc = dropUndefinedKeys({\n    environment: options.environment || DEFAULT_ENVIRONMENT,\n    release: options.release,\n    public_key,\n    trace_id,\n  }) as DynamicSamplingContext;\n\n  client.emit('createDsc', dsc);\n\n  return dsc;\n}\n\n/**\n * Get the dynamic sampling context for the currently active scopes.\n */\nexport function getDynamicSamplingContextFromScope(client: Client, scope: Scope): Partial<DynamicSamplingContext> {\n  const propagationContext = scope.getPropagationContext();\n  return propagationContext.dsc || getDynamicSamplingContextFromClient(propagationContext.traceId, client);\n}\n\n/**\n * Creates a dynamic sampling context from a span (and client and scope)\n *\n * @param span the span from which a few values like the root span name and sample rate are extracted.\n *\n * @returns a dynamic sampling context\n */\nexport function getDynamicSamplingContextFromSpan(span: Span): Readonly<Partial<DynamicSamplingContext>> {\n  const client = getClient();\n  if (!client) {\n    return {};\n  }\n\n  const rootSpan = getRootSpan(span);\n  const rootSpanJson = spanToJSON(rootSpan);\n  const rootSpanAttributes = rootSpanJson.data;\n  const traceState = rootSpan.spanContext().traceState;\n\n  // The span sample rate that was locally applied to the root span should also always be applied to the DSC, even if the DSC is frozen.\n  // This is so that the downstream traces/services can use parentSampleRate in their `tracesSampler` to make consistent sampling decisions across the entire trace.\n  const rootSpanSampleRate =\n    traceState?.get('sentry.sample_rate') ?? rootSpanAttributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE];\n  function applyLocalSampleRateToDsc(dsc: Partial<DynamicSamplingContext>): Partial<DynamicSamplingContext> {\n    if (typeof rootSpanSampleRate === 'number' || typeof rootSpanSampleRate === 'string') {\n      dsc.sample_rate = `${rootSpanSampleRate}`;\n    }\n    return dsc;\n  }\n\n  // For core implementation, we freeze the DSC onto the span as a non-enumerable property\n  const frozenDsc = (rootSpan as SpanWithMaybeDsc)[FROZEN_DSC_FIELD];\n  if (frozenDsc) {\n    return applyLocalSampleRateToDsc(frozenDsc);\n  }\n\n  // For OpenTelemetry, we freeze the DSC on the trace state\n  const traceStateDsc = traceState?.get('sentry.dsc');\n\n  // If the span has a DSC, we want it to take precedence\n  const dscOnTraceState = traceStateDsc && baggageHeaderToDynamicSamplingContext(traceStateDsc);\n\n  if (dscOnTraceState) {\n    return applyLocalSampleRateToDsc(dscOnTraceState);\n  }\n\n  // Else, we generate it from the span\n  const dsc = getDynamicSamplingContextFromClient(span.spanContext().traceId, client);\n\n  // We don't want to have a transaction name in the DSC if the source is \"url\" because URLs might contain PII\n  const source = rootSpanAttributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n  // after JSON conversion, txn.name becomes jsonSpan.description\n  const name = rootSpanJson.description;\n  if (source !== 'url' && name) {\n    dsc.transaction = name;\n  }\n\n  // How can we even land here with hasSpansEnabled() returning false?\n  // Otel creates a Non-recording span in Tracing Without Performance mode when handling incoming requests\n  // So we end up with an active span that is not sampled (neither positively nor negatively)\n  if (hasSpansEnabled()) {\n    dsc.sampled = String(spanIsSampled(rootSpan));\n    dsc.sample_rand =\n      // In OTEL we store the sample rand on the trace state because we cannot access scopes for NonRecordingSpans\n      // The Sentry OTEL SpanSampler takes care of writing the sample rand on the root span\n      traceState?.get('sentry.sample_rand') ??\n      // On all other platforms we can actually get the scopes from a root span (we use this as a fallback)\n      getCapturedScopesOnSpan(rootSpan).scope?.getPropagationContext().sampleRand.toString();\n  }\n\n  applyLocalSampleRateToDsc(dsc);\n\n  client.emit('createDsc', dsc, rootSpan);\n\n  return dsc;\n}\n\n/**\n * Convert a Span to a baggage header.\n */\nexport function spanToBaggageHeader(span: Span): string | undefined {\n  const dsc = getDynamicSamplingContextFromSpan(span);\n  return dynamicSamplingContextToSentryBaggageHeader(dsc);\n}\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var isFunction = require('./isFunction'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","import { trackedArray } from '@ember/reactive/collections';\n\n// Old TrackedArray dirtied all values on change, regardless of whether the value\n// actually changed.\nconst config = {\n  equals: () => false,\n  description: 'TrackedArray from tracked-built-ins',\n};\n\nexport class TrackedArray {\n  static from(iterable: any, mapfn: any, thisArg?: any) {\n    return mapfn\n      ? new TrackedArray(Array.from(iterable, mapfn, thisArg))\n      : new TrackedArray(Array.from(iterable));\n  }\n\n  static of(...arr: unknown[]) {\n    return new TrackedArray(arr);\n  }\n  constructor(arr: unknown[] = []) {\n    const reactive = trackedArray(arr, config);\n    return new Proxy(reactive, {\n      getPrototypeOf() {\n        return TrackedArray.prototype;\n      },\n    });\n  }\n}\n// Ensure instanceof works correctly\nObject.setPrototypeOf(TrackedArray.prototype, Array.prototype);\n","import { trackedMap, trackedWeakMap } from '@ember/reactive/collections';\n\nconst mapConfig = {\n  equals: () => false,\n  description: 'TrackedMap from tracked-built-ins',\n};\nconst weakMapConfig = {\n  equals: () => false,\n  description: 'TrackedWeakMap from tracked-built-ins',\n};\n\nexport class TrackedMap {\n  constructor(existing: any) {\n    const reactive = trackedMap(existing, mapConfig);\n\n    return new Proxy(reactive, {\n      get(target, prop) {\n        const value = Reflect.get(target, prop, target);\n\n        if (typeof value === 'function') {\n          return value.bind(target);\n        }\n        return value;\n      },\n      getPrototypeOf() {\n        return TrackedMap.prototype;\n      },\n    });\n  }\n}\n\nexport class TrackedWeakMap {\n  constructor(values: any) {\n    const reactive = trackedWeakMap(values, weakMapConfig);\n\n    return new Proxy(reactive, {\n      get(target, prop) {\n        const value = Reflect.get(target, prop, target);\n\n        if (typeof value === 'function') {\n          return value.bind(target);\n        }\n        return value;\n      },\n      getPrototypeOf() {\n        return TrackedWeakMap.prototype;\n      },\n    });\n  }\n}\n\n// Ensure instanceof works correctly\nObject.setPrototypeOf(TrackedMap.prototype, Map.prototype);\nObject.setPrototypeOf(TrackedWeakMap.prototype, WeakMap.prototype);\n","import { trackedSet, trackedWeakSet } from '@ember/reactive/collections';\n\nconst setConfig = {\n  equals: () => false,\n  description: 'TrackedSet from tracked-built-ins',\n};\nconst weakSetConfig = {\n  equals: () => false,\n  description: 'TrackedWeakSet from tracked-built-ins',\n};\n\nexport class TrackedSet {\n  constructor(existing: any) {\n    const reactive = trackedSet(existing, setConfig);\n\n    return new Proxy(reactive, {\n      get(target, prop) {\n        const value = Reflect.get(target, prop, target);\n\n        if (typeof value === 'function') {\n          return value.bind(target);\n        }\n        return value;\n      },\n      getPrototypeOf() {\n        return TrackedSet.prototype;\n      },\n    });\n  }\n}\n\nexport class TrackedWeakSet {\n  constructor(values: any) {\n    const reactive = trackedWeakSet(values, weakSetConfig);\n\n    return new Proxy(reactive, {\n      get(target, prop) {\n        const value = Reflect.get(target, prop, target);\n\n        if (typeof value === 'function') {\n          return value.bind(target);\n        }\n        return value;\n      },\n      getPrototypeOf() {\n        return TrackedWeakSet.prototype;\n      },\n    });\n  }\n}\n\n// Ensure instanceof works correctly\nObject.setPrototypeOf(TrackedSet.prototype, Set.prototype);\nObject.setPrototypeOf(TrackedWeakSet.prototype, WeakSet.prototype);\n","import { createStorage, getValue, setValue } from '../tracked-storage.ts';\n\nclass TrackedObjectImplementation<T extends object> {\n  static fromEntries<T = unknown>(\n    entries: Iterable<readonly [PropertyKey, T]>,\n  ) {\n    return new TrackedObject(Object.fromEntries(entries));\n  }\n\n  constructor(...args: Record<PropertyKey, never> extends T ? [] | [T] : [T]);\n  constructor(obj = {}) {\n    const proto = Object.getPrototypeOf(obj);\n    const descs = Object.getOwnPropertyDescriptors(obj);\n\n    const clone = Object.create(proto);\n\n    for (const prop in descs) {\n      Object.defineProperty(clone, prop, descs[prop]!);\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const self = this;\n\n    return new Proxy(clone, {\n      get(target, prop) {\n        self.#readStorageFor(prop);\n\n        return target[prop];\n      },\n\n      has(target, prop) {\n        self.#readStorageFor(prop);\n\n        return prop in target;\n      },\n\n      ownKeys(target: T) {\n        getValue(self.#collection);\n\n        return Reflect.ownKeys(target);\n      },\n\n      set(target, prop, value) {\n        target[prop] = value;\n\n        self.#dirtyStorageFor(prop);\n        self.#dirtyCollection();\n\n        return true;\n      },\n\n      deleteProperty(target, prop) {\n        if (prop in target) {\n          delete target[prop];\n          self.#dirtyStorageFor(prop);\n          self.#storages.delete(prop);\n          self.#dirtyCollection();\n        }\n\n        return true;\n      },\n\n      getPrototypeOf() {\n        return TrackedObjectImplementation.prototype;\n      },\n    });\n  }\n\n  #storages = new Map();\n\n  #collection = createStorage(null, () => false);\n\n  #readStorageFor(key: PropertyKey) {\n    let storage = this.#storages.get(key);\n\n    if (storage === undefined) {\n      storage = createStorage(null, () => false);\n      this.#storages.set(key, storage);\n    }\n\n    getValue(storage);\n  }\n\n  #dirtyStorageFor(key: PropertyKey) {\n    const storage = this.#storages.get(key);\n\n    if (storage) {\n      setValue(storage, null);\n    }\n  }\n\n  #dirtyCollection() {\n    setValue(this.#collection, null);\n  }\n}\n\nexport interface TrackedObject {\n  fromEntries<T = unknown>(\n    entries: Iterable<readonly [PropertyKey, T]>,\n  ): {\n    [k: string]: T;\n  };\n\n  new <T extends Record<PropertyKey, unknown>>(\n    ...args: Record<PropertyKey, never> extends T ? [] | [T] : [T]\n  ): T;\n}\n\nexport const TrackedObject: TrackedObject =\n  TrackedObjectImplementation as unknown as TrackedObject;\n\nexport default TrackedObject;\n","import { tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\n\ndeclare const STORAGE: unique symbol;\n\nexport interface TrackedStorage<T> {\n  [STORAGE]: T;\n}\n\nclass TrackedStorageImpl<T> implements TrackedStorage<T> {\n  declare [STORAGE]: T;\n\n  @tracked _value: T;\n  _lastValue: T;\n  _isEqual: (a: T, b: T) => boolean;\n\n  constructor(initialValue: T, isEqual: (a: T, b: T) => boolean) {\n    this._value = this._lastValue = initialValue;\n    this._isEqual = isEqual;\n  }\n}\n\nfunction tripleEq(a: unknown, b: unknown) {\n  return a === b;\n}\n\nexport function createStorage<T = unknown>(\n  initialValue: T,\n  isEqual: (a: T, b: T) => boolean = tripleEq,\n): TrackedStorage<T> {\n  assert(\n    'the second parameter to `createStorage` must be an equality function or undefined',\n    typeof isEqual === 'function',\n  );\n\n  return new TrackedStorageImpl(initialValue, isEqual);\n}\n\nexport function getValue<T>(storage: TrackedStorage<T>): T {\n  assert(\n    'getValue must be passed a tracked store created with `createStorage`.',\n    storage instanceof TrackedStorageImpl,\n  );\n\n  return storage._value;\n}\n\ntype TrackedStorageValue<T extends TrackedStorage<unknown>> =\n  T extends TrackedStorage<infer U> ? U : never;\n\nexport function setValue<T extends TrackedStorage<unknown>>(\n  storage: T,\n  value: TrackedStorageValue<T>,\n): void {\n  assert(\n    'setValue must be passed a tracked store created with `createStorage`.',\n    storage instanceof TrackedStorageImpl,\n  );\n\n  const { _isEqual: isEqual, _lastValue: lastValue } = storage;\n\n  if (!isEqual(value, lastValue)) {\n    storage._value = storage._lastValue = value;\n  }\n}\n","import {\n  macroCondition,\n  appEmberSatisfies,\n  importSync,\n} from '@embroider/macros';\n\nimport type {\n  TrackedMap as TrackedMapType,\n  TrackedWeakMap as TrackedWeakMapType,\n} from './old/map.ts';\n\nexport interface TrackedMap<K = unknown, V = unknown> extends Map<K, V> {}\nexport let TrackedMap: typeof TrackedMapType;\n\nexport interface TrackedWeakMap<K = unknown, V = unknown> extends Map<K, V> {}\nexport let TrackedWeakMap: typeof TrackedWeakMapType;\n\n/**\n * https://rfcs.emberjs.com/id/1068-tracked-collections\n */\nif (macroCondition(appEmberSatisfies('^6.8.0-beta.1 || >= 6.8.0'))) {\n  const module = importSync('./new/map') as any;\n\n  TrackedMap = module.TrackedMap;\n  TrackedWeakMap = module.TrackedWeakMap;\n} else {\n  const module = importSync('./old/map') as any;\n\n  TrackedMap = module.TrackedMap;\n  TrackedWeakMap = module.TrackedWeakMap;\n}\n","import {\n  macroCondition,\n  appEmberSatisfies,\n  importSync,\n} from '@embroider/macros';\n\nimport type {\n  TrackedSet as TrackedSetType,\n  TrackedWeakSet as TrackedWeakSetType,\n} from './old/set.ts';\n\nexport interface TrackedSet<V = unknown> extends Set<V> {}\nexport let TrackedSet: typeof TrackedSetType;\n\nexport interface TrackedWeakSet<V extends WeakKey> extends WeakSet<V> {}\nexport let TrackedWeakSet: typeof TrackedWeakSetType;\n\n/**\n * https://rfcs.emberjs.com/id/1068-tracked-collections\n */\nif (macroCondition(appEmberSatisfies('^6.8.0-beta.1 || >= 6.8.0'))) {\n  const module = importSync('./new/set') as any;\n\n  TrackedSet = module.TrackedSet;\n  TrackedWeakSet = module.TrackedWeakSet;\n} else {\n  const module = importSync('./old/set') as any;\n\n  TrackedSet = module.TrackedSet;\n  TrackedWeakSet = module.TrackedWeakSet;\n}\n","import {\n  macroCondition,\n  appEmberSatisfies,\n  importSync,\n} from '@embroider/macros';\n\nimport type TrackedArrayType from './old/array.ts';\n\nexport let TrackedArray: typeof TrackedArrayType;\nexport interface TrackedArray<T = unknown> extends Array<T> {}\n\n/**\n * https://rfcs.emberjs.com/id/1068-tracked-collections\n */\nif (macroCondition(appEmberSatisfies('^6.8.0-beta.1 || >= 6.8.0'))) {\n  const module = importSync('./new/array') as any;\n\n  TrackedArray = module.TrackedArray;\n} else {\n  const module = importSync('./old/array') as any;\n\n  TrackedArray = module.default;\n}\n","import {\n  macroCondition,\n  dependencySatisfies,\n  importSync,\n} from '@embroider/macros';\n\nimport type TrackedObjectType from './old/object.ts';\n\nexport let TrackedObject: TrackedObjectType;\n\n/**\n * https://rfcs.emberjs.com/id/1068-tracked-collections\n */\nif (macroCondition(dependencySatisfies('ember-source', '>= 6.8.0-beta.1'))) {\n  const module = importSync('./new/object') as any;\n\n  TrackedObject = module.TrackedObject;\n} else {\n  const module = importSync('./old/object') as any;\n\n  TrackedObject = module.default;\n}\n","import { tracked as glimmerTracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\n\nimport { TrackedMap, TrackedWeakMap } from './map.ts';\nimport { TrackedSet, TrackedWeakSet } from './set.ts';\nimport { TrackedArray } from './array.ts';\nimport { TrackedObject } from './object.ts';\n\nexport default function tracked<T>(obj: T[] | typeof Array): TrackedArray<T>;\n\nexport default function tracked<T>(obj: Set<T> | typeof Set): TrackedSet<T>;\n\nexport default function tracked<T, U>(\n  obj: Map<T, U> | typeof Map,\n): TrackedMap<T, U>;\n\nexport default function tracked<T extends object>(\n  obj: WeakSet<T> | typeof WeakSet,\n): TrackedWeakSet<T>;\n\nexport default function tracked<T extends object, U>(\n  obj: WeakMap<T, U> | typeof WeakMap,\n): TrackedWeakMap<T, U>;\n\nexport default function tracked<T extends object>(obj: T | typeof Object): T;\n\nexport default function tracked(\n  obj: object,\n  key: string | symbol,\n  desc?: PropertyDescriptor,\n): void;\n\nexport default function tracked(\n  obj: object,\n  key?: string | symbol,\n  desc?: PropertyDescriptor,\n): unknown {\n  if (key !== undefined && desc !== undefined) {\n    return glimmerTracked(obj, key as string, desc);\n  }\n\n  if (Array.isArray(obj)) {\n    return new TrackedArray(obj);\n  }\n\n  switch (obj) {\n    case Object:\n      return new TrackedObject();\n    case Array:\n      return new TrackedArray();\n    case Map:\n      return new TrackedMap();\n    case WeakMap:\n      return new TrackedWeakMap();\n    case Set:\n      return new TrackedSet();\n    case WeakSet:\n      return new TrackedWeakSet();\n  }\n\n  if (obj instanceof Map) {\n    return new TrackedMap(obj);\n  } else if (obj instanceof WeakMap) {\n    return new TrackedWeakMap();\n  } else if (obj instanceof Set) {\n    return new TrackedSet(obj);\n  } else if (obj instanceof WeakSet) {\n    return new TrackedWeakSet();\n  } else {\n    assert(\n      `You must either use tracked as a field decorator, or to wrap built-in class instances:\n\n      class Example {\n        @tracked field = 123;\n\n        map = tracked(Map);\n        map = tracked(new Map());\n      }`,\n      typeof obj === 'object' && obj !== null,\n    );\n\n    return new TrackedObject(obj as Record<PropertyKey, unknown>);\n  }\n}\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { guidFor } from '@ember/object/internals';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getElementId(element: any): string {\n  // use @id arg, if provided\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  if (element.args.id) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n    return element.args.id;\n  }\n\n  // otherwise, generate and memoize a guid\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  if (!element._id) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    element._id = guidFor(element);\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n  return element._id;\n}\n","const candidateSelectors = [\n  'input',\n  'select',\n  'textarea',\n  'a[href]',\n  'button',\n  '[tabindex]:not(slot)',\n  'audio[controls]',\n  'video[controls]',\n  '[contenteditable]:not([contenteditable=\"false\"])',\n  'details>summary:first-of-type',\n  'details',\n];\nconst candidateSelector = /* #__PURE__ */ candidateSelectors.join(',');\n\nconst NoElement = typeof Element === 'undefined';\n\nconst matches = NoElement\n  ? function () {}\n  : Element.prototype.matches ||\n    Element.prototype.msMatchesSelector ||\n    Element.prototype.webkitMatchesSelector;\n\nconst getRootNode =\n  !NoElement && Element.prototype.getRootNode\n    ? (element) => element.getRootNode()\n    : (element) => element.ownerDocument;\n\n/**\n * @param {Element} el container to check in\n * @param {boolean} includeContainer add container to check\n * @param {(node: Element) => boolean} filter filter candidates\n * @returns {Element[]}\n */\nconst getCandidates = function (el, includeContainer, filter) {\n  let candidates = Array.prototype.slice.apply(\n    el.querySelectorAll(candidateSelector)\n  );\n  if (includeContainer && matches.call(el, candidateSelector)) {\n    candidates.unshift(el);\n  }\n  candidates = candidates.filter(filter);\n  return candidates;\n};\n\n/**\n * @callback GetShadowRoot\n * @param {Element} element to check for shadow root\n * @returns {ShadowRoot|boolean} ShadowRoot if available or boolean indicating if a shadowRoot is attached but not available.\n */\n\n/**\n * @callback ShadowRootFilter\n * @param {Element} shadowHostNode the element which contains shadow content\n * @returns {boolean} true if a shadow root could potentially contain valid candidates.\n */\n\n/**\n * @typedef {Object} CandidatesScope\n * @property {Element} scope contains inner candidates\n * @property {Element[]} candidates\n */\n\n/**\n * @typedef {Object} IterativeOptions\n * @property {GetShadowRoot|boolean} getShadowRoot true if shadow support is enabled; falsy if not;\n *  if a function, implies shadow support is enabled and either returns the shadow root of an element\n *  or a boolean stating if it has an undisclosed shadow root\n * @property {(node: Element) => boolean} filter filter candidates\n * @property {boolean} flatten if true then result will flatten any CandidatesScope into the returned list\n * @property {ShadowRootFilter} shadowRootFilter filter shadow roots;\n */\n\n/**\n * @param {Element[]} elements list of element containers to match candidates from\n * @param {boolean} includeContainer add container list to check\n * @param {IterativeOptions} options\n * @returns {Array.<Element|CandidatesScope>}\n */\nconst getCandidatesIteratively = function (\n  elements,\n  includeContainer,\n  options\n) {\n  const candidates = [];\n  const elementsToCheck = Array.from(elements);\n  while (elementsToCheck.length) {\n    const element = elementsToCheck.shift();\n    if (element.tagName === 'SLOT') {\n      // add shadow dom slot scope (slot itself cannot be focusable)\n      const assigned = element.assignedElements();\n      const content = assigned.length ? assigned : element.children;\n      const nestedCandidates = getCandidatesIteratively(content, true, options);\n      if (options.flatten) {\n        candidates.push(...nestedCandidates);\n      } else {\n        candidates.push({\n          scope: element,\n          candidates: nestedCandidates,\n        });\n      }\n    } else {\n      // check candidate element\n      const validCandidate = matches.call(element, candidateSelector);\n      if (\n        validCandidate &&\n        options.filter(element) &&\n        (includeContainer || !elements.includes(element))\n      ) {\n        candidates.push(element);\n      }\n\n      // iterate over shadow content if possible\n      const shadowRoot =\n        element.shadowRoot ||\n        // check for an undisclosed shadow\n        (typeof options.getShadowRoot === 'function' &&\n          options.getShadowRoot(element));\n\n      const validShadowRoot =\n        !options.shadowRootFilter || options.shadowRootFilter(element);\n\n      if (shadowRoot && validShadowRoot) {\n        // add shadow dom scope IIF a shadow root node was given; otherwise, an undisclosed\n        //  shadow exists, so look at light dom children as fallback BUT create a scope for any\n        //  child candidates found because they're likely slotted elements (elements that are\n        //  children of the web component element (which has the shadow), in the light dom, but\n        //  slotted somewhere _inside_ the undisclosed shadow) -- the scope is created below,\n        //  _after_ we return from this recursive call\n        const nestedCandidates = getCandidatesIteratively(\n          shadowRoot === true ? element.children : shadowRoot.children,\n          true,\n          options\n        );\n\n        if (options.flatten) {\n          candidates.push(...nestedCandidates);\n        } else {\n          candidates.push({\n            scope: element,\n            candidates: nestedCandidates,\n          });\n        }\n      } else {\n        // there's not shadow so just dig into the element's (light dom) children\n        //  __without__ giving the element special scope treatment\n        elementsToCheck.unshift(...element.children);\n      }\n    }\n  }\n  return candidates;\n};\n\nconst getTabindex = function (node, isScope) {\n  if (node.tabIndex < 0) {\n    // in Chrome, <details/>, <audio controls/> and <video controls/> elements get a default\n    // `tabIndex` of -1 when the 'tabindex' attribute isn't specified in the DOM,\n    // yet they are still part of the regular tab order; in FF, they get a default\n    // `tabIndex` of 0; since Chrome still puts those elements in the regular tab\n    // order, consider their tab index to be 0.\n    // Also browsers do not return `tabIndex` correctly for contentEditable nodes;\n    // so if they don't have a tabindex attribute specifically set, assume it's 0.\n    //\n    // isScope is positive for custom element with shadow root or slot that by default\n    // have tabIndex -1, but need to be sorted by document order in order for their\n    // content to be inserted in the correct position\n    if (\n      (isScope ||\n        /^(AUDIO|VIDEO|DETAILS)$/.test(node.tagName) ||\n        node.isContentEditable) &&\n      isNaN(parseInt(node.getAttribute('tabindex'), 10))\n    ) {\n      return 0;\n    }\n  }\n\n  return node.tabIndex;\n};\n\nconst sortOrderedTabbables = function (a, b) {\n  return a.tabIndex === b.tabIndex\n    ? a.documentOrder - b.documentOrder\n    : a.tabIndex - b.tabIndex;\n};\n\nconst isInput = function (node) {\n  return node.tagName === 'INPUT';\n};\n\nconst isHiddenInput = function (node) {\n  return isInput(node) && node.type === 'hidden';\n};\n\nconst isDetailsWithSummary = function (node) {\n  const r =\n    node.tagName === 'DETAILS' &&\n    Array.prototype.slice\n      .apply(node.children)\n      .some((child) => child.tagName === 'SUMMARY');\n  return r;\n};\n\nconst getCheckedRadio = function (nodes, form) {\n  for (let i = 0; i < nodes.length; i++) {\n    if (nodes[i].checked && nodes[i].form === form) {\n      return nodes[i];\n    }\n  }\n};\n\nconst isTabbableRadio = function (node) {\n  if (!node.name) {\n    return true;\n  }\n  const radioScope = node.form || getRootNode(node);\n  const queryRadios = function (name) {\n    return radioScope.querySelectorAll(\n      'input[type=\"radio\"][name=\"' + name + '\"]'\n    );\n  };\n\n  let radioSet;\n  if (\n    typeof window !== 'undefined' &&\n    typeof window.CSS !== 'undefined' &&\n    typeof window.CSS.escape === 'function'\n  ) {\n    radioSet = queryRadios(window.CSS.escape(node.name));\n  } else {\n    try {\n      radioSet = queryRadios(node.name);\n    } catch (err) {\n      // eslint-disable-next-line no-console\n      console.error(\n        'Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s',\n        err.message\n      );\n      return false;\n    }\n  }\n\n  const checked = getCheckedRadio(radioSet, node.form);\n  return !checked || checked === node;\n};\n\nconst isRadio = function (node) {\n  return isInput(node) && node.type === 'radio';\n};\n\nconst isNonTabbableRadio = function (node) {\n  return isRadio(node) && !isTabbableRadio(node);\n};\n\nconst isZeroArea = function (node) {\n  const { width, height } = node.getBoundingClientRect();\n  return width === 0 && height === 0;\n};\nconst isHidden = function (node, { displayCheck, getShadowRoot }) {\n  // NOTE: visibility will be `undefined` if node is detached from the document\n  //  (see notes about this further down), which means we will consider it visible\n  //  (this is legacy behavior from a very long way back)\n  // NOTE: we check this regardless of `displayCheck=\"none\"` because this is a\n  //  _visibility_ check, not a _display_ check\n  if (getComputedStyle(node).visibility === 'hidden') {\n    return true;\n  }\n\n  const isDirectSummary = matches.call(node, 'details>summary:first-of-type');\n  const nodeUnderDetails = isDirectSummary ? node.parentElement : node;\n  if (matches.call(nodeUnderDetails, 'details:not([open]) *')) {\n    return true;\n  }\n\n  // The root node is the shadow root if the node is in a shadow DOM; some document otherwise\n  //  (but NOT _the_ document; see second 'If' comment below for more).\n  // If rootNode is shadow root, it'll have a host, which is the element to which the shadow\n  //  is attached, and the one we need to check if it's in the document or not (because the\n  //  shadow, and all nodes it contains, is never considered in the document since shadows\n  //  behave like self-contained DOMs; but if the shadow's HOST, which is part of the document,\n  //  is hidden, or is not in the document itself but is detached, it will affect the shadow's\n  //  visibility, including all the nodes it contains). The host could be any normal node,\n  //  or a custom element (i.e. web component). Either way, that's the one that is considered\n  //  part of the document, not the shadow root, nor any of its children (i.e. the node being\n  //  tested).\n  // If rootNode is not a shadow root, it won't have a host, and so rootNode should be the\n  //  document (per the docs) and while it's a Document-type object, that document does not\n  //  appear to be the same as the node's `ownerDocument` for some reason, so it's safer\n  //  to ignore the rootNode at this point, and use `node.ownerDocument`. Otherwise,\n  //  using `rootNode.contains(node)` will _always_ be true we'll get false-positives when\n  //  node is actually detached.\n  const nodeRootHost = getRootNode(node).host;\n  const nodeIsAttached =\n    nodeRootHost?.ownerDocument.contains(nodeRootHost) ||\n    node.ownerDocument.contains(node);\n\n  if (!displayCheck || displayCheck === 'full') {\n    if (typeof getShadowRoot === 'function') {\n      // figure out if we should consider the node to be in an undisclosed shadow and use the\n      //  'non-zero-area' fallback\n      const originalNode = node;\n      while (node) {\n        const parentElement = node.parentElement;\n        const rootNode = getRootNode(node);\n        if (\n          parentElement &&\n          !parentElement.shadowRoot &&\n          getShadowRoot(parentElement) === true // check if there's an undisclosed shadow\n        ) {\n          // node has an undisclosed shadow which means we can only treat it as a black box, so we\n          //  fall back to a non-zero-area test\n          return isZeroArea(node);\n        } else if (node.assignedSlot) {\n          // iterate up slot\n          node = node.assignedSlot;\n        } else if (!parentElement && rootNode !== node.ownerDocument) {\n          // cross shadow boundary\n          node = rootNode.host;\n        } else {\n          // iterate up normal dom\n          node = parentElement;\n        }\n      }\n\n      node = originalNode;\n    }\n    // else, `getShadowRoot` might be true, but all that does is enable shadow DOM support\n    //  (i.e. it does not also presume that all nodes might have undisclosed shadows); or\n    //  it might be a falsy value, which means shadow DOM support is disabled\n\n    // Since we didn't find it sitting in an undisclosed shadow (or shadows are disabled)\n    //  now we can just test to see if it would normally be visible or not, provided it's\n    //  attached to the main document.\n    // NOTE: We must consider case where node is inside a shadow DOM and given directly to\n    //  `isTabbable()` or `isFocusable()` -- regardless of `getShadowRoot` option setting.\n\n    if (nodeIsAttached) {\n      // this works wherever the node is: if there's at least one client rect, it's\n      //  somehow displayed; it also covers the CSS 'display: contents' case where the\n      //  node itself is hidden in place of its contents; and there's no need to search\n      //  up the hierarchy either\n      return !node.getClientRects().length;\n    }\n\n    // Else, the node isn't attached to the document, which means the `getClientRects()`\n    //  API will __always__ return zero rects (this can happen, for example, if React\n    //  is used to render nodes onto a detached tree, as confirmed in this thread:\n    //  https://github.com/facebook/react/issues/9117#issuecomment-284228870)\n    //\n    // It also means that even window.getComputedStyle(node).display will return `undefined`\n    //  because styles are only computed for nodes that are in the document.\n    //\n    // NOTE: THIS HAS BEEN THE CASE FOR YEARS. It is not new, nor is it caused by tabbable\n    //  somehow. Though it was never stated officially, anyone who has ever used tabbable\n    //  APIs on nodes in detached containers has actually implicitly used tabbable in what\n    //  was later (as of v5.2.0 on Apr 9, 2021) called `displayCheck=\"none\"` mode -- essentially\n    //  considering __everything__ to be visible because of the innability to determine styles.\n  } else if (displayCheck === 'non-zero-area') {\n    // NOTE: Even though this tests that the node's client rect is non-zero to determine\n    //  whether it's displayed, and that a detached node will __always__ have a zero-area\n    //  client rect, we don't special-case for whether the node is attached or not. In\n    //  this mode, we do want to consider nodes that have a zero area to be hidden at all\n    //  times, and that includes attached or not.\n    return isZeroArea(node);\n  }\n\n  // visible, as far as we can tell, or per current `displayCheck` mode\n  return false;\n};\n\n// form fields (nested) inside a disabled fieldset are not focusable/tabbable\n//  unless they are in the _first_ <legend> element of the top-most disabled\n//  fieldset\nconst isDisabledFromFieldset = function (node) {\n  if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node.tagName)) {\n    let parentNode = node.parentElement;\n    // check if `node` is contained in a disabled <fieldset>\n    while (parentNode) {\n      if (parentNode.tagName === 'FIELDSET' && parentNode.disabled) {\n        // look for the first <legend> among the children of the disabled <fieldset>\n        for (let i = 0; i < parentNode.children.length; i++) {\n          const child = parentNode.children.item(i);\n          // when the first <legend> (in document order) is found\n          if (child.tagName === 'LEGEND') {\n            // if its parent <fieldset> is not nested in another disabled <fieldset>,\n            // return whether `node` is a descendant of its first <legend>\n            return matches.call(parentNode, 'fieldset[disabled] *')\n              ? true\n              : !child.contains(node);\n          }\n        }\n        // the disabled <fieldset> containing `node` has no <legend>\n        return true;\n      }\n      parentNode = parentNode.parentElement;\n    }\n  }\n\n  // else, node's tabbable/focusable state should not be affected by a fieldset's\n  //  enabled/disabled state\n  return false;\n};\n\nconst isNodeMatchingSelectorFocusable = function (options, node) {\n  if (\n    node.disabled ||\n    isHiddenInput(node) ||\n    isHidden(node, options) ||\n    // For a details element with a summary, the summary element gets the focus\n    isDetailsWithSummary(node) ||\n    isDisabledFromFieldset(node)\n  ) {\n    return false;\n  }\n  return true;\n};\n\nconst isNodeMatchingSelectorTabbable = function (options, node) {\n  if (\n    isNonTabbableRadio(node) ||\n    getTabindex(node) < 0 ||\n    !isNodeMatchingSelectorFocusable(options, node)\n  ) {\n    return false;\n  }\n  return true;\n};\n\nconst isValidShadowRootTabbable = function (shadowHostNode) {\n  const tabIndex = parseInt(shadowHostNode.getAttribute('tabindex'), 10);\n  if (isNaN(tabIndex) || tabIndex >= 0) {\n    return true;\n  }\n  // If a custom element has an explicit negative tabindex,\n  // browsers will not allow tab targeting said element's children.\n  return false;\n};\n\n/**\n * @param {Array.<Element|CandidatesScope>} candidates\n * @returns Element[]\n */\nconst sortByOrder = function (candidates) {\n  const regularTabbables = [];\n  const orderedTabbables = [];\n  candidates.forEach(function (item, i) {\n    const isScope = !!item.scope;\n    const element = isScope ? item.scope : item;\n    const candidateTabindex = getTabindex(element, isScope);\n    const elements = isScope ? sortByOrder(item.candidates) : element;\n    if (candidateTabindex === 0) {\n      isScope\n        ? regularTabbables.push(...elements)\n        : regularTabbables.push(element);\n    } else {\n      orderedTabbables.push({\n        documentOrder: i,\n        tabIndex: candidateTabindex,\n        item: item,\n        isScope: isScope,\n        content: elements,\n      });\n    }\n  });\n\n  return orderedTabbables\n    .sort(sortOrderedTabbables)\n    .reduce((acc, sortable) => {\n      sortable.isScope\n        ? acc.push(...sortable.content)\n        : acc.push(sortable.content);\n      return acc;\n    }, [])\n    .concat(regularTabbables);\n};\n\nconst tabbable = function (el, options) {\n  options = options || {};\n\n  let candidates;\n  if (options.getShadowRoot) {\n    candidates = getCandidatesIteratively([el], options.includeContainer, {\n      filter: isNodeMatchingSelectorTabbable.bind(null, options),\n      flatten: false,\n      getShadowRoot: options.getShadowRoot,\n      shadowRootFilter: isValidShadowRootTabbable,\n    });\n  } else {\n    candidates = getCandidates(\n      el,\n      options.includeContainer,\n      isNodeMatchingSelectorTabbable.bind(null, options)\n    );\n  }\n  return sortByOrder(candidates);\n};\n\nconst focusable = function (el, options) {\n  options = options || {};\n\n  let candidates;\n  if (options.getShadowRoot) {\n    candidates = getCandidatesIteratively([el], options.includeContainer, {\n      filter: isNodeMatchingSelectorFocusable.bind(null, options),\n      flatten: true,\n      getShadowRoot: options.getShadowRoot,\n    });\n  } else {\n    candidates = getCandidates(\n      el,\n      options.includeContainer,\n      isNodeMatchingSelectorFocusable.bind(null, options)\n    );\n  }\n\n  return candidates;\n};\n\nconst isTabbable = function (node, options) {\n  options = options || {};\n  if (!node) {\n    throw new Error('No node provided');\n  }\n  if (matches.call(node, candidateSelector) === false) {\n    return false;\n  }\n  return isNodeMatchingSelectorTabbable(options, node);\n};\n\nconst focusableCandidateSelector = /* #__PURE__ */ candidateSelectors\n  .concat('iframe')\n  .join(',');\n\nconst isFocusable = function (node, options) {\n  options = options || {};\n  if (!node) {\n    throw new Error('No node provided');\n  }\n  if (matches.call(node, focusableCandidateSelector) === false) {\n    return false;\n  }\n  return isNodeMatchingSelectorFocusable(options, node);\n};\n\nexport { tabbable, focusable, isTabbable, isFocusable };\n","import { tabbable, focusable, isFocusable, isTabbable } from 'tabbable';\n\nconst activeFocusTraps = (function () {\n  const trapQueue = [];\n  return {\n    activateTrap(trap) {\n      if (trapQueue.length > 0) {\n        const activeTrap = trapQueue[trapQueue.length - 1];\n        if (activeTrap !== trap) {\n          activeTrap.pause();\n        }\n      }\n\n      const trapIndex = trapQueue.indexOf(trap);\n      if (trapIndex === -1) {\n        trapQueue.push(trap);\n      } else {\n        // move this existing trap to the front of the queue\n        trapQueue.splice(trapIndex, 1);\n        trapQueue.push(trap);\n      }\n    },\n\n    deactivateTrap(trap) {\n      const trapIndex = trapQueue.indexOf(trap);\n      if (trapIndex !== -1) {\n        trapQueue.splice(trapIndex, 1);\n      }\n\n      if (trapQueue.length > 0) {\n        trapQueue[trapQueue.length - 1].unpause();\n      }\n    },\n  };\n})();\n\nconst isSelectableInput = function (node) {\n  return (\n    node.tagName &&\n    node.tagName.toLowerCase() === 'input' &&\n    typeof node.select === 'function'\n  );\n};\n\nconst isEscapeEvent = function (e) {\n  return e.key === 'Escape' || e.key === 'Esc' || e.keyCode === 27;\n};\n\nconst isTabEvent = function (e) {\n  return e.key === 'Tab' || e.keyCode === 9;\n};\n\nconst delay = function (fn) {\n  return setTimeout(fn, 0);\n};\n\n// Array.find/findIndex() are not supported on IE; this replicates enough\n//  of Array.findIndex() for our needs\nconst findIndex = function (arr, fn) {\n  let idx = -1;\n\n  arr.every(function (value, i) {\n    if (fn(value)) {\n      idx = i;\n      return false; // break\n    }\n\n    return true; // next\n  });\n\n  return idx;\n};\n\n/**\n * Get an option's value when it could be a plain value, or a handler that provides\n *  the value.\n * @param {*} value Option's value to check.\n * @param {...*} [params] Any parameters to pass to the handler, if `value` is a function.\n * @returns {*} The `value`, or the handler's returned value.\n */\nconst valueOrHandler = function (value, ...params) {\n  return typeof value === 'function' ? value(...params) : value;\n};\n\nconst getActualTarget = function (event) {\n  // NOTE: If the trap is _inside_ a shadow DOM, event.target will always be the\n  //  shadow host. However, event.target.composedPath() will be an array of\n  //  nodes \"clicked\" from inner-most (the actual element inside the shadow) to\n  //  outer-most (the host HTML document). If we have access to composedPath(),\n  //  then use its first element; otherwise, fall back to event.target (and\n  //  this only works for an _open_ shadow DOM; otherwise,\n  //  composedPath()[0] === event.target always).\n  return event.target.shadowRoot && typeof event.composedPath === 'function'\n    ? event.composedPath()[0]\n    : event.target;\n};\n\nconst createFocusTrap = function (elements, userOptions) {\n  // SSR: a live trap shouldn't be created in this type of environment so this\n  //  should be safe code to execute if the `document` option isn't specified\n  const doc = userOptions?.document || document;\n\n  const config = {\n    returnFocusOnDeactivate: true,\n    escapeDeactivates: true,\n    delayInitialFocus: true,\n    ...userOptions,\n  };\n\n  const state = {\n    // containers given to createFocusTrap()\n    // @type {Array<HTMLElement>}\n    containers: [],\n\n    // list of objects identifying tabbable nodes in `containers` in the trap\n    // NOTE: it's possible that a group has no tabbable nodes if nodes get removed while the trap\n    //  is active, but the trap should never get to a state where there isn't at least one group\n    //  with at least one tabbable node in it (that would lead to an error condition that would\n    //  result in an error being thrown)\n    // @type {Array<{\n    //   container: HTMLElement,\n    //   tabbableNodes: Array<HTMLElement>, // empty if none\n    //   focusableNodes: Array<HTMLElement>, // empty if none\n    //   firstTabbableNode: HTMLElement|null,\n    //   lastTabbableNode: HTMLElement|null,\n    //   nextTabbableNode: (node: HTMLElement, forward: boolean) => HTMLElement|undefined\n    // }>}\n    containerGroups: [], // same order/length as `containers` list\n\n    // references to objects in `containerGroups`, but only those that actually have\n    //  tabbable nodes in them\n    // NOTE: same order as `containers` and `containerGroups`, but __not necessarily__\n    //  the same length\n    tabbableGroups: [],\n\n    nodeFocusedBeforeActivation: null,\n    mostRecentlyFocusedNode: null,\n    active: false,\n    paused: false,\n\n    // timer ID for when delayInitialFocus is true and initial focus in this trap\n    //  has been delayed during activation\n    delayInitialFocusTimer: undefined,\n  };\n\n  let trap; // eslint-disable-line prefer-const -- some private functions reference it, and its methods reference private functions, so we must declare here and define later\n\n  /**\n   * Gets a configuration option value.\n   * @param {Object|undefined} configOverrideOptions If true, and option is defined in this set,\n   *  value will be taken from this object. Otherwise, value will be taken from base configuration.\n   * @param {string} optionName Name of the option whose value is sought.\n   * @param {string|undefined} [configOptionName] Name of option to use __instead of__ `optionName`\n   *  IIF `configOverrideOptions` is not defined. Otherwise, `optionName` is used.\n   */\n  const getOption = (configOverrideOptions, optionName, configOptionName) => {\n    return configOverrideOptions &&\n      configOverrideOptions[optionName] !== undefined\n      ? configOverrideOptions[optionName]\n      : config[configOptionName || optionName];\n  };\n\n  /**\n   * Finds the index of the container that contains the element.\n   * @param {HTMLElement} element\n   * @returns {number} Index of the container in either `state.containers` or\n   *  `state.containerGroups` (the order/length of these lists are the same); -1\n   *  if the element isn't found.\n   */\n  const findContainerIndex = function (element) {\n    // NOTE: search `containerGroups` because it's possible a group contains no tabbable\n    //  nodes, but still contains focusable nodes (e.g. if they all have `tabindex=-1`)\n    //  and we still need to find the element in there\n    return state.containerGroups.findIndex(\n      ({ container, tabbableNodes }) =>\n        container.contains(element) ||\n        // fall back to explicit tabbable search which will take into consideration any\n        //  web components if the `tabbableOptions.getShadowRoot` option was used for\n        //  the trap, enabling shadow DOM support in tabbable (`Node.contains()` doesn't\n        //  look inside web components even if open)\n        tabbableNodes.find((node) => node === element)\n    );\n  };\n\n  /**\n   * Gets the node for the given option, which is expected to be an option that\n   *  can be either a DOM node, a string that is a selector to get a node, `false`\n   *  (if a node is explicitly NOT given), or a function that returns any of these\n   *  values.\n   * @param {string} optionName\n   * @returns {undefined | false | HTMLElement | SVGElement} Returns\n   *  `undefined` if the option is not specified; `false` if the option\n   *  resolved to `false` (node explicitly not given); otherwise, the resolved\n   *  DOM node.\n   * @throws {Error} If the option is set, not `false`, and is not, or does not\n   *  resolve to a node.\n   */\n  const getNodeForOption = function (optionName, ...params) {\n    let optionValue = config[optionName];\n\n    if (typeof optionValue === 'function') {\n      optionValue = optionValue(...params);\n    }\n\n    if (optionValue === true) {\n      optionValue = undefined; // use default value\n    }\n\n    if (!optionValue) {\n      if (optionValue === undefined || optionValue === false) {\n        return optionValue;\n      }\n      // else, empty string (invalid), null (invalid), 0 (invalid)\n\n      throw new Error(\n        `\\`${optionName}\\` was specified but was not a node, or did not return a node`\n      );\n    }\n\n    let node = optionValue; // could be HTMLElement, SVGElement, or non-empty string at this point\n\n    if (typeof optionValue === 'string') {\n      node = doc.querySelector(optionValue); // resolve to node, or null if fails\n      if (!node) {\n        throw new Error(\n          `\\`${optionName}\\` as selector refers to no known node`\n        );\n      }\n    }\n\n    return node;\n  };\n\n  const getInitialFocusNode = function () {\n    let node = getNodeForOption('initialFocus');\n\n    // false explicitly indicates we want no initialFocus at all\n    if (node === false) {\n      return false;\n    }\n\n    if (node === undefined) {\n      // option not specified: use fallback options\n      if (findContainerIndex(doc.activeElement) >= 0) {\n        node = doc.activeElement;\n      } else {\n        const firstTabbableGroup = state.tabbableGroups[0];\n        const firstTabbableNode =\n          firstTabbableGroup && firstTabbableGroup.firstTabbableNode;\n\n        // NOTE: `fallbackFocus` option function cannot return `false` (not supported)\n        node = firstTabbableNode || getNodeForOption('fallbackFocus');\n      }\n    }\n\n    if (!node) {\n      throw new Error(\n        'Your focus-trap needs to have at least one focusable element'\n      );\n    }\n\n    return node;\n  };\n\n  const updateTabbableNodes = function () {\n    state.containerGroups = state.containers.map((container) => {\n      const tabbableNodes = tabbable(container, config.tabbableOptions);\n\n      // NOTE: if we have tabbable nodes, we must have focusable nodes; focusable nodes\n      //  are a superset of tabbable nodes\n      const focusableNodes = focusable(container, config.tabbableOptions);\n\n      return {\n        container,\n        tabbableNodes,\n        focusableNodes,\n        firstTabbableNode: tabbableNodes.length > 0 ? tabbableNodes[0] : null,\n        lastTabbableNode:\n          tabbableNodes.length > 0\n            ? tabbableNodes[tabbableNodes.length - 1]\n            : null,\n\n        /**\n         * Finds the __tabbable__ node that follows the given node in the specified direction,\n         *  in this container, if any.\n         * @param {HTMLElement} node\n         * @param {boolean} [forward] True if going in forward tab order; false if going\n         *  in reverse.\n         * @returns {HTMLElement|undefined} The next tabbable node, if any.\n         */\n        nextTabbableNode(node, forward = true) {\n          // NOTE: If tabindex is positive (in order to manipulate the tab order separate\n          //  from the DOM order), this __will not work__ because the list of focusableNodes,\n          //  while it contains tabbable nodes, does not sort its nodes in any order other\n          //  than DOM order, because it can't: Where would you place focusable (but not\n          //  tabbable) nodes in that order? They have no order, because they aren't tabbale...\n          // Support for positive tabindex is already broken and hard to manage (possibly\n          //  not supportable, TBD), so this isn't going to make things worse than they\n          //  already are, and at least makes things better for the majority of cases where\n          //  tabindex is either 0/unset or negative.\n          // FYI, positive tabindex issue: https://github.com/focus-trap/focus-trap/issues/375\n          const nodeIdx = focusableNodes.findIndex((n) => n === node);\n          if (nodeIdx < 0) {\n            return undefined;\n          }\n\n          if (forward) {\n            return focusableNodes\n              .slice(nodeIdx + 1)\n              .find((n) => isTabbable(n, config.tabbableOptions));\n          }\n\n          return focusableNodes\n            .slice(0, nodeIdx)\n            .reverse()\n            .find((n) => isTabbable(n, config.tabbableOptions));\n        },\n      };\n    });\n\n    state.tabbableGroups = state.containerGroups.filter(\n      (group) => group.tabbableNodes.length > 0\n    );\n\n    // throw if no groups have tabbable nodes and we don't have a fallback focus node either\n    if (\n      state.tabbableGroups.length <= 0 &&\n      !getNodeForOption('fallbackFocus') // returning false not supported for this option\n    ) {\n      throw new Error(\n        'Your focus-trap must have at least one container with at least one tabbable node in it at all times'\n      );\n    }\n  };\n\n  const tryFocus = function (node) {\n    if (node === false) {\n      return;\n    }\n\n    if (node === doc.activeElement) {\n      return;\n    }\n\n    if (!node || !node.focus) {\n      tryFocus(getInitialFocusNode());\n      return;\n    }\n\n    node.focus({ preventScroll: !!config.preventScroll });\n    state.mostRecentlyFocusedNode = node;\n\n    if (isSelectableInput(node)) {\n      node.select();\n    }\n  };\n\n  const getReturnFocusNode = function (previousActiveElement) {\n    const node = getNodeForOption('setReturnFocus', previousActiveElement);\n    return node ? node : node === false ? false : previousActiveElement;\n  };\n\n  // This needs to be done on mousedown and touchstart instead of click\n  // so that it precedes the focus event.\n  const checkPointerDown = function (e) {\n    const target = getActualTarget(e);\n\n    if (findContainerIndex(target) >= 0) {\n      // allow the click since it ocurred inside the trap\n      return;\n    }\n\n    if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n      // immediately deactivate the trap\n      trap.deactivate({\n        // if, on deactivation, we should return focus to the node originally-focused\n        //  when the trap was activated (or the configured `setReturnFocus` node),\n        //  then assume it's also OK to return focus to the outside node that was\n        //  just clicked, causing deactivation, as long as that node is focusable;\n        //  if it isn't focusable, then return focus to the original node focused\n        //  on activation (or the configured `setReturnFocus` node)\n        // NOTE: by setting `returnFocus: false`, deactivate() will do nothing,\n        //  which will result in the outside click setting focus to the node\n        //  that was clicked, whether it's focusable or not; by setting\n        //  `returnFocus: true`, we'll attempt to re-focus the node originally-focused\n        //  on activation (or the configured `setReturnFocus` node)\n        returnFocus:\n          config.returnFocusOnDeactivate &&\n          !isFocusable(target, config.tabbableOptions),\n      });\n      return;\n    }\n\n    // This is needed for mobile devices.\n    // (If we'll only let `click` events through,\n    // then on mobile they will be blocked anyways if `touchstart` is blocked.)\n    if (valueOrHandler(config.allowOutsideClick, e)) {\n      // allow the click outside the trap to take place\n      return;\n    }\n\n    // otherwise, prevent the click\n    e.preventDefault();\n  };\n\n  // In case focus escapes the trap for some strange reason, pull it back in.\n  const checkFocusIn = function (e) {\n    const target = getActualTarget(e);\n    const targetContained = findContainerIndex(target) >= 0;\n\n    // In Firefox when you Tab out of an iframe the Document is briefly focused.\n    if (targetContained || target instanceof Document) {\n      if (targetContained) {\n        state.mostRecentlyFocusedNode = target;\n      }\n    } else {\n      // escaped! pull it back in to where it just left\n      e.stopImmediatePropagation();\n      tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());\n    }\n  };\n\n  // Hijack Tab events on the first and last focusable nodes of the trap,\n  // in order to prevent focus from escaping. If it escapes for even a\n  // moment it can end up scrolling the page and causing confusion so we\n  // kind of need to capture the action at the keydown phase.\n  const checkTab = function (e) {\n    const target = getActualTarget(e);\n    updateTabbableNodes();\n\n    let destinationNode = null;\n\n    if (state.tabbableGroups.length > 0) {\n      // make sure the target is actually contained in a group\n      // NOTE: the target may also be the container itself if it's focusable\n      //  with tabIndex='-1' and was given initial focus\n      const containerIndex = findContainerIndex(target);\n      const containerGroup =\n        containerIndex >= 0 ? state.containerGroups[containerIndex] : undefined;\n\n      if (containerIndex < 0) {\n        // target not found in any group: quite possible focus has escaped the trap,\n        //  so bring it back in to...\n        if (e.shiftKey) {\n          // ...the last node in the last group\n          destinationNode =\n            state.tabbableGroups[state.tabbableGroups.length - 1]\n              .lastTabbableNode;\n        } else {\n          // ...the first node in the first group\n          destinationNode = state.tabbableGroups[0].firstTabbableNode;\n        }\n      } else if (e.shiftKey) {\n        // REVERSE\n\n        // is the target the first tabbable node in a group?\n        let startOfGroupIndex = findIndex(\n          state.tabbableGroups,\n          ({ firstTabbableNode }) => target === firstTabbableNode\n        );\n\n        if (\n          startOfGroupIndex < 0 &&\n          (containerGroup.container === target ||\n            (isFocusable(target, config.tabbableOptions) &&\n              !isTabbable(target, config.tabbableOptions) &&\n              !containerGroup.nextTabbableNode(target, false)))\n        ) {\n          // an exception case where the target is either the container itself, or\n          //  a non-tabbable node that was given focus (i.e. tabindex is negative\n          //  and user clicked on it or node was programmatically given focus)\n          //  and is not followed by any other tabbable node, in which\n          //  case, we should handle shift+tab as if focus were on the container's\n          //  first tabbable node, and go to the last tabbable node of the LAST group\n          startOfGroupIndex = containerIndex;\n        }\n\n        if (startOfGroupIndex >= 0) {\n          // YES: then shift+tab should go to the last tabbable node in the\n          //  previous group (and wrap around to the last tabbable node of\n          //  the LAST group if it's the first tabbable node of the FIRST group)\n          const destinationGroupIndex =\n            startOfGroupIndex === 0\n              ? state.tabbableGroups.length - 1\n              : startOfGroupIndex - 1;\n\n          const destinationGroup = state.tabbableGroups[destinationGroupIndex];\n          destinationNode = destinationGroup.lastTabbableNode;\n        }\n      } else {\n        // FORWARD\n\n        // is the target the last tabbable node in a group?\n        let lastOfGroupIndex = findIndex(\n          state.tabbableGroups,\n          ({ lastTabbableNode }) => target === lastTabbableNode\n        );\n\n        if (\n          lastOfGroupIndex < 0 &&\n          (containerGroup.container === target ||\n            (isFocusable(target, config.tabbableOptions) &&\n              !isTabbable(target, config.tabbableOptions) &&\n              !containerGroup.nextTabbableNode(target)))\n        ) {\n          // an exception case where the target is the container itself, or\n          //  a non-tabbable node that was given focus (i.e. tabindex is negative\n          //  and user clicked on it or node was programmatically given focus)\n          //  and is not followed by any other tabbable node, in which\n          //  case, we should handle tab as if focus were on the container's\n          //  last tabbable node, and go to the first tabbable node of the FIRST group\n          lastOfGroupIndex = containerIndex;\n        }\n\n        if (lastOfGroupIndex >= 0) {\n          // YES: then tab should go to the first tabbable node in the next\n          //  group (and wrap around to the first tabbable node of the FIRST\n          //  group if it's the last tabbable node of the LAST group)\n          const destinationGroupIndex =\n            lastOfGroupIndex === state.tabbableGroups.length - 1\n              ? 0\n              : lastOfGroupIndex + 1;\n\n          const destinationGroup = state.tabbableGroups[destinationGroupIndex];\n          destinationNode = destinationGroup.firstTabbableNode;\n        }\n      }\n    } else {\n      // NOTE: the fallbackFocus option does not support returning false to opt-out\n      destinationNode = getNodeForOption('fallbackFocus');\n    }\n\n    if (destinationNode) {\n      e.preventDefault();\n      tryFocus(destinationNode);\n    }\n    // else, let the browser take care of [shift+]tab and move the focus\n  };\n\n  const checkKey = function (e) {\n    if (\n      isEscapeEvent(e) &&\n      valueOrHandler(config.escapeDeactivates, e) !== false\n    ) {\n      e.preventDefault();\n      trap.deactivate();\n      return;\n    }\n\n    if (isTabEvent(e)) {\n      checkTab(e);\n      return;\n    }\n  };\n\n  const checkClick = function (e) {\n    const target = getActualTarget(e);\n\n    if (findContainerIndex(target) >= 0) {\n      return;\n    }\n\n    if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n      return;\n    }\n\n    if (valueOrHandler(config.allowOutsideClick, e)) {\n      return;\n    }\n\n    e.preventDefault();\n    e.stopImmediatePropagation();\n  };\n\n  //\n  // EVENT LISTENERS\n  //\n\n  const addListeners = function () {\n    if (!state.active) {\n      return;\n    }\n\n    // There can be only one listening focus trap at a time\n    activeFocusTraps.activateTrap(trap);\n\n    // Delay ensures that the focused element doesn't capture the event\n    // that caused the focus trap activation.\n    state.delayInitialFocusTimer = config.delayInitialFocus\n      ? delay(function () {\n          tryFocus(getInitialFocusNode());\n        })\n      : tryFocus(getInitialFocusNode());\n\n    doc.addEventListener('focusin', checkFocusIn, true);\n    doc.addEventListener('mousedown', checkPointerDown, {\n      capture: true,\n      passive: false,\n    });\n    doc.addEventListener('touchstart', checkPointerDown, {\n      capture: true,\n      passive: false,\n    });\n    doc.addEventListener('click', checkClick, {\n      capture: true,\n      passive: false,\n    });\n    doc.addEventListener('keydown', checkKey, {\n      capture: true,\n      passive: false,\n    });\n\n    return trap;\n  };\n\n  const removeListeners = function () {\n    if (!state.active) {\n      return;\n    }\n\n    doc.removeEventListener('focusin', checkFocusIn, true);\n    doc.removeEventListener('mousedown', checkPointerDown, true);\n    doc.removeEventListener('touchstart', checkPointerDown, true);\n    doc.removeEventListener('click', checkClick, true);\n    doc.removeEventListener('keydown', checkKey, true);\n\n    return trap;\n  };\n\n  //\n  // TRAP DEFINITION\n  //\n\n  trap = {\n    get active() {\n      return state.active;\n    },\n\n    get paused() {\n      return state.paused;\n    },\n\n    activate(activateOptions) {\n      if (state.active) {\n        return this;\n      }\n\n      const onActivate = getOption(activateOptions, 'onActivate');\n      const onPostActivate = getOption(activateOptions, 'onPostActivate');\n      const checkCanFocusTrap = getOption(activateOptions, 'checkCanFocusTrap');\n\n      if (!checkCanFocusTrap) {\n        updateTabbableNodes();\n      }\n\n      state.active = true;\n      state.paused = false;\n      state.nodeFocusedBeforeActivation = doc.activeElement;\n\n      if (onActivate) {\n        onActivate();\n      }\n\n      const finishActivation = () => {\n        if (checkCanFocusTrap) {\n          updateTabbableNodes();\n        }\n        addListeners();\n        if (onPostActivate) {\n          onPostActivate();\n        }\n      };\n\n      if (checkCanFocusTrap) {\n        checkCanFocusTrap(state.containers.concat()).then(\n          finishActivation,\n          finishActivation\n        );\n        return this;\n      }\n\n      finishActivation();\n      return this;\n    },\n\n    deactivate(deactivateOptions) {\n      if (!state.active) {\n        return this;\n      }\n\n      const options = {\n        onDeactivate: config.onDeactivate,\n        onPostDeactivate: config.onPostDeactivate,\n        checkCanReturnFocus: config.checkCanReturnFocus,\n        ...deactivateOptions,\n      };\n\n      clearTimeout(state.delayInitialFocusTimer); // noop if undefined\n      state.delayInitialFocusTimer = undefined;\n\n      removeListeners();\n      state.active = false;\n      state.paused = false;\n\n      activeFocusTraps.deactivateTrap(trap);\n\n      const onDeactivate = getOption(options, 'onDeactivate');\n      const onPostDeactivate = getOption(options, 'onPostDeactivate');\n      const checkCanReturnFocus = getOption(options, 'checkCanReturnFocus');\n      const returnFocus = getOption(\n        options,\n        'returnFocus',\n        'returnFocusOnDeactivate'\n      );\n\n      if (onDeactivate) {\n        onDeactivate();\n      }\n\n      const finishDeactivation = () => {\n        delay(() => {\n          if (returnFocus) {\n            tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation));\n          }\n          if (onPostDeactivate) {\n            onPostDeactivate();\n          }\n        });\n      };\n\n      if (returnFocus && checkCanReturnFocus) {\n        checkCanReturnFocus(\n          getReturnFocusNode(state.nodeFocusedBeforeActivation)\n        ).then(finishDeactivation, finishDeactivation);\n        return this;\n      }\n\n      finishDeactivation();\n      return this;\n    },\n\n    pause() {\n      if (state.paused || !state.active) {\n        return this;\n      }\n\n      state.paused = true;\n      removeListeners();\n\n      return this;\n    },\n\n    unpause() {\n      if (!state.paused || !state.active) {\n        return this;\n      }\n\n      state.paused = false;\n      updateTabbableNodes();\n      addListeners();\n\n      return this;\n    },\n\n    updateContainerElements(containerElements) {\n      const elementsAsArray = [].concat(containerElements).filter(Boolean);\n\n      state.containers = elementsAsArray.map((element) =>\n        typeof element === 'string' ? doc.querySelector(element) : element\n      );\n\n      if (state.active) {\n        updateTabbableNodes();\n      }\n\n      return this;\n    },\n  };\n\n  // initialize container elements\n  trap.updateContainerElements(elements);\n\n  return trap;\n};\n\nexport { createFocusTrap };\n","import { capabilities, setModifierManager } from '@ember/modifier';\nimport { createFocusTrap } from 'focus-trap';\n\nlet cap;\ntry {\n  cap = capabilities('3.22');\n} catch {\n  cap = capabilities('3.13');\n}\nvar focusTrap = setModifierManager(() => {\n  return {\n    capabilities: cap,\n    createModifier() {\n      return {\n        focusTrapOptions: undefined,\n        isActive: true,\n        isPaused: false,\n        shouldSelfFocus: false,\n        focusTrap: undefined\n      };\n    },\n    installModifier(state, element, {\n      named: {\n        isActive,\n        isPaused,\n        shouldSelfFocus,\n        focusTrapOptions,\n        additionalElements,\n        _createFocusTrap\n      }\n    }) {\n      // treat the original focusTrapOptions as immutable, so do a shallow copy here\n      state.focusTrapOptions = {\n        ...focusTrapOptions\n      } || {};\n      if (typeof isActive !== 'undefined') {\n        state.isActive = isActive;\n      }\n      if (typeof isPaused !== 'undefined') {\n        state.isPaused = isPaused;\n      }\n      if (state.focusTrapOptions && typeof state.focusTrapOptions.initialFocus === 'undefined' && shouldSelfFocus) {\n        state.focusTrapOptions.initialFocus = element;\n      }\n\n      // Private to allow mocking FocusTrap in tests\n      let createFocusTrap$1 = createFocusTrap;\n      if (_createFocusTrap) {\n        createFocusTrap$1 = _createFocusTrap;\n      }\n      if (state.focusTrapOptions.returnFocusOnDeactivate !== false) {\n        state.focusTrapOptions.returnFocusOnDeactivate = true;\n      }\n      state.focusTrap = createFocusTrap$1(typeof additionalElements !== 'undefined' ? [element, ...additionalElements] : element, state.focusTrapOptions);\n      if (state.isActive) {\n        state.focusTrap.activate();\n      }\n      if (state.isPaused) {\n        state.focusTrap.pause();\n      }\n    },\n    updateModifier(state, {\n      named: params\n    }) {\n      const focusTrapOptions = params.focusTrapOptions || {};\n      if (state.isActive && !params.isActive) {\n        const {\n          returnFocusOnDeactivate\n        } = focusTrapOptions;\n        const returnFocus = typeof returnFocusOnDeactivate === 'undefined' ? true : false;\n        state.focusTrap.deactivate({\n          returnFocus\n        });\n      } else if (!state.isActive && params.isActive) {\n        state.focusTrap.activate();\n      }\n      if (state.isPaused && !params.isPaused) {\n        state.focusTrap.unpause();\n      } else if (!state.isPaused && params.isPaused) {\n        state.focusTrap.pause();\n      }\n\n      // Update state\n      state.focusTrapOptions = focusTrapOptions;\n      if (typeof params.isActive !== 'undefined') {\n        state.isActive = params.isActive;\n      }\n      if (typeof params.isPaused !== 'undefined') {\n        state.isPaused = params.isPaused;\n      }\n    },\n    destroyModifier({\n      focusTrap\n    }) {\n      focusTrap.deactivate();\n    }\n  };\n}, class FocusTrapModifier {});\n\nexport { focusTrap as default };\n","import { uuid4 } from './misc';\n\n/**\n * Generate a random, valid trace ID.\n */\nexport function generateTraceId(): string {\n  return uuid4();\n}\n\n/**\n * Generate a random, valid span ID.\n */\nexport function generateSpanId(): string {\n  return uuid4().substring(16);\n}\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeys = require('./_baseKeys'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","'use strict'\n\nlet Comment = require('./comment')\nlet Declaration = require('./declaration')\nlet Node = require('./node')\nlet { isClean, my } = require('./symbols')\n\nlet AtRule, parse, Root, Rule\n\nfunction cleanSource(nodes) {\n  let stack = nodes.slice()\n  while (stack.length > 0) {\n    let node = stack.pop()\n    delete node.source\n    if (node.nodes) {\n      node.nodes = node.nodes.slice()\n      for (let i of node.nodes) stack.push(i)\n    }\n  }\n  return nodes.slice()\n}\n\nfunction markTreeDirty(node) {\n  let stack = [node]\n  while (stack.length > 0) {\n    let next = stack.pop()\n    next[isClean] = false\n    if (next.proxyOf.nodes) {\n      for (let i of next.proxyOf.nodes) stack.push(i)\n    }\n  }\n}\n\nclass Container extends Node {\n  get first() {\n    if (!this.proxyOf.nodes) return undefined\n    return this.proxyOf.nodes[0]\n  }\n\n  get last() {\n    if (!this.proxyOf.nodes) return undefined\n    return this.proxyOf.nodes[this.proxyOf.nodes.length - 1]\n  }\n\n  append(...children) {\n    for (let child of children) {\n      let nodes = this.normalize(child, this.last)\n      for (let node of nodes) this.proxyOf.nodes.push(node)\n    }\n\n    this.markDirty()\n\n    return this\n  }\n\n  cleanRaws(keepBetween) {\n    let stack = [this]\n    while (stack.length > 0) {\n      let node = stack.pop()\n      if (node !== this && node.cleanRaws !== Container.prototype.cleanRaws) {\n        // Subclass with own logic; let it handle its subtree\n        node.cleanRaws(keepBetween)\n        continue\n      }\n      Node.prototype.cleanRaws.call(node, keepBetween)\n      if (node.nodes) {\n        for (let child of node.nodes) stack.push(child)\n      }\n    }\n  }\n\n  each(callback) {\n    if (!this.proxyOf.nodes) return undefined\n    let iterator = this.getIterator()\n\n    let index, result\n    while (this.indexes[iterator] < this.proxyOf.nodes.length) {\n      index = this.indexes[iterator]\n      result = callback(this.proxyOf.nodes[index], index)\n      if (result === false) break\n\n      this.indexes[iterator] += 1\n    }\n\n    delete this.indexes[iterator]\n    return result\n  }\n\n  every(condition) {\n    return this.nodes.every(condition)\n  }\n\n  getIterator() {\n    if (!this.lastEach) this.lastEach = 0\n    if (!this.indexes) this.indexes = {}\n\n    this.lastEach += 1\n    let iterator = this.lastEach\n    this.indexes[iterator] = 0\n\n    return iterator\n  }\n\n  getProxyProcessor() {\n    return {\n      get(node, prop) {\n        if (prop === 'proxyOf') {\n          return node\n        } else if (!node[prop]) {\n          return node[prop]\n        } else if (\n          prop === 'each' ||\n          (typeof prop === 'string' && prop.startsWith('walk'))\n        ) {\n          return (...args) => {\n            return node[prop](\n              ...args.map(i => {\n                if (typeof i === 'function') {\n                  return (child, index) => i(child.toProxy(), index)\n                } else {\n                  return i\n                }\n              })\n            )\n          }\n        } else if (prop === 'every' || prop === 'some') {\n          return cb => {\n            return node[prop]((child, ...other) =>\n              cb(child.toProxy(), ...other)\n            )\n          }\n        } else if (prop === 'root') {\n          return () => node.root().toProxy()\n        } else if (prop === 'nodes') {\n          return node.nodes.map(i => i.toProxy())\n        } else if (prop === 'first' || prop === 'last') {\n          return node[prop].toProxy()\n        } else {\n          return node[prop]\n        }\n      },\n\n      set(node, prop, value) {\n        if (node[prop] === value) return true\n        node[prop] = value\n        if (prop === 'name' || prop === 'params' || prop === 'selector') {\n          node.markDirty()\n        }\n        return true\n      }\n    }\n  }\n\n  index(child) {\n    if (typeof child === 'number') return child\n    if (child.proxyOf) child = child.proxyOf\n    return this.proxyOf.nodes.indexOf(child)\n  }\n\n  insertAfter(exist, add) {\n    let existIndex = this.index(exist)\n    let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse()\n    existIndex = this.index(exist)\n    for (let node of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node)\n\n    let index\n    for (let id in this.indexes) {\n      index = this.indexes[id]\n      if (existIndex < index) {\n        this.indexes[id] = index + nodes.length\n      }\n    }\n\n    this.markDirty()\n\n    return this\n  }\n\n  insertBefore(exist, add) {\n    let existIndex = this.index(exist)\n    let type = existIndex === 0 ? 'prepend' : false\n    let nodes = this.normalize(\n      add,\n      this.proxyOf.nodes[existIndex],\n      type\n    ).reverse()\n    existIndex = this.index(exist)\n    for (let node of nodes) this.proxyOf.nodes.splice(existIndex, 0, node)\n\n    let index\n    for (let id in this.indexes) {\n      index = this.indexes[id]\n      if (existIndex <= index) {\n        this.indexes[id] = index + nodes.length\n      }\n    }\n\n    this.markDirty()\n\n    return this\n  }\n\n  normalize(nodes, sample) {\n    if (typeof nodes === 'string') {\n      nodes = cleanSource(parse(nodes).nodes)\n    } else if (typeof nodes === 'undefined') {\n      nodes = []\n    } else if (Array.isArray(nodes)) {\n      nodes = nodes.slice(0)\n      for (let i of nodes) {\n        if (i.parent) i.parent.removeChild(i, 'ignore')\n      }\n    } else if (nodes.type === 'root' && this.type !== 'document') {\n      nodes = nodes.nodes.slice(0)\n      for (let i of nodes) {\n        if (i.parent) i.parent.removeChild(i, 'ignore')\n      }\n    } else if (nodes.type) {\n      nodes = [nodes]\n    } else if (nodes.prop) {\n      if (typeof nodes.value === 'undefined') {\n        throw new Error('Value field is missed in node creation')\n      } else if (typeof nodes.value !== 'string') {\n        nodes.value = String(nodes.value)\n      }\n      nodes = [new Declaration(nodes)]\n    } else if (nodes.selector || nodes.selectors) {\n      nodes = [new Rule(nodes)]\n    } else if (nodes.name) {\n      nodes = [new AtRule(nodes)]\n    } else if (nodes.text) {\n      nodes = [new Comment(nodes)]\n    } else {\n      throw new Error('Unknown node type in node creation')\n    }\n\n    let processed = nodes.map(i => {\n      /* c8 ignore next */\n      if (!i[my]) Container.rebuild(i)\n      i = i.proxyOf\n      if (i.parent) i.parent.removeChild(i)\n      if (i[isClean]) markTreeDirty(i)\n\n      if (!i.raws) i.raws = {}\n      if (typeof i.raws.before === 'undefined') {\n        if (sample && typeof sample.raws.before !== 'undefined') {\n          i.raws.before = sample.raws.before.replace(/\\S/g, '')\n        }\n      }\n      i.parent = this.proxyOf\n      return i\n    })\n\n    return processed\n  }\n\n  prepend(...children) {\n    children = children.reverse()\n    for (let child of children) {\n      let nodes = this.normalize(child, this.first, 'prepend').reverse()\n      for (let node of nodes) this.proxyOf.nodes.unshift(node)\n      for (let id in this.indexes) {\n        this.indexes[id] = this.indexes[id] + nodes.length\n      }\n    }\n\n    this.markDirty()\n\n    return this\n  }\n\n  push(child) {\n    child.parent = this\n    this.proxyOf.nodes.push(child)\n    return this\n  }\n\n  removeAll() {\n    for (let node of this.proxyOf.nodes) node.parent = undefined\n    this.proxyOf.nodes = []\n\n    this.markDirty()\n\n    return this\n  }\n\n  removeChild(child) {\n    child = this.index(child)\n    this.proxyOf.nodes[child].parent = undefined\n    this.proxyOf.nodes.splice(child, 1)\n\n    let index\n    for (let id in this.indexes) {\n      index = this.indexes[id]\n      if (index >= child) {\n        this.indexes[id] = index - 1\n      }\n    }\n\n    this.markDirty()\n\n    return this\n  }\n\n  replaceValues(pattern, opts, callback) {\n    if (!callback) {\n      callback = opts\n      opts = {}\n    }\n\n    this.walkDecls(decl => {\n      if (opts.props && !opts.props.includes(decl.prop)) return\n      if (opts.fast && !decl.value.includes(opts.fast)) return\n\n      decl.value = decl.value.replace(pattern, callback)\n    })\n\n    this.markDirty()\n\n    return this\n  }\n\n  some(condition) {\n    return this.nodes.some(condition)\n  }\n\n  walk(callback) {\n    if (!this.proxyOf.nodes) return undefined\n\n    // An explicit stack instead of recursive `each()` calls to survive\n    // deeply nested trees. Each frame keeps a live `indexes` slot, so\n    // insertion and removal during the walk behave like `each()`: the\n    // slot stays at the current child until its subtree is finished.\n    let stack = [{ iterator: this.getIterator(), node: this.proxyOf }]\n\n    while (stack.length > 0) {\n      let { iterator, node } = stack[stack.length - 1]\n      let index = node.indexes[iterator]\n\n      if (index >= node.proxyOf.nodes.length) {\n        delete node.indexes[iterator]\n        stack.pop()\n        let parent = stack[stack.length - 1]\n        // Finish the parent’s step for the child subtree we just left\n        if (parent) parent.node.indexes[parent.iterator] += 1\n        continue\n      }\n\n      let child = node.proxyOf.nodes[index]\n      let result\n      try {\n        result = callback(child, index)\n      } catch (e) {\n        throw child.addToError(e)\n      }\n      if (result === false) {\n        for (let opened of stack) {\n          delete opened.node.indexes[opened.iterator]\n        }\n        return false\n      }\n      if (child.walk && child.proxyOf.nodes) {\n        stack.push({ iterator: child.getIterator(), node: child })\n      } else {\n        node.indexes[iterator] += 1\n      }\n    }\n\n    return undefined\n  }\n\n  walkAtRules(name, callback) {\n    if (!callback) {\n      callback = name\n      return this.walk((child, i) => {\n        if (child.type === 'atrule') {\n          return callback(child, i)\n        }\n      })\n    }\n    if (name instanceof RegExp) {\n      return this.walk((child, i) => {\n        if (child.type === 'atrule' && name.test(child.name)) {\n          return callback(child, i)\n        }\n      })\n    }\n    return this.walk((child, i) => {\n      if (child.type === 'atrule' && child.name === name) {\n        return callback(child, i)\n      }\n    })\n  }\n\n  walkComments(callback) {\n    return this.walk((child, i) => {\n      if (child.type === 'comment') {\n        return callback(child, i)\n      }\n    })\n  }\n\n  walkDecls(prop, callback) {\n    if (!callback) {\n      callback = prop\n      return this.walk((child, i) => {\n        if (child.type === 'decl') {\n          return callback(child, i)\n        }\n      })\n    }\n    if (prop instanceof RegExp) {\n      return this.walk((child, i) => {\n        if (child.type === 'decl' && prop.test(child.prop)) {\n          return callback(child, i)\n        }\n      })\n    }\n    return this.walk((child, i) => {\n      if (child.type === 'decl' && child.prop === prop) {\n        return callback(child, i)\n      }\n    })\n  }\n\n  walkRules(selector, callback) {\n    if (!callback) {\n      callback = selector\n\n      return this.walk((child, i) => {\n        if (child.type === 'rule') {\n          return callback(child, i)\n        }\n      })\n    }\n    if (selector instanceof RegExp) {\n      return this.walk((child, i) => {\n        if (child.type === 'rule' && selector.test(child.selector)) {\n          return callback(child, i)\n        }\n      })\n    }\n    return this.walk((child, i) => {\n      if (child.type === 'rule' && child.selector === selector) {\n        return callback(child, i)\n      }\n    })\n  }\n}\n\nContainer.registerParse = dependant => {\n  parse = dependant\n}\n\nContainer.registerRule = dependant => {\n  Rule = dependant\n}\n\nContainer.registerAtRule = dependant => {\n  AtRule = dependant\n}\n\nContainer.registerRoot = dependant => {\n  Root = dependant\n}\n\nmodule.exports = Container\nContainer.default = Container\n\n/* c8 ignore start */\nContainer.rebuild = node => {\n  let stack = [node]\n  while (stack.length > 0) {\n    let next = stack.pop()\n    if (next.type === 'atrule') {\n      Object.setPrototypeOf(next, AtRule.prototype)\n    } else if (next.type === 'rule') {\n      Object.setPrototypeOf(next, Rule.prototype)\n    } else if (next.type === 'decl') {\n      Object.setPrototypeOf(next, Declaration.prototype)\n    } else if (next.type === 'comment') {\n      Object.setPrototypeOf(next, Comment.prototype)\n    } else if (next.type === 'root') {\n      Object.setPrototypeOf(next, Root.prototype)\n    }\n\n    next[my] = true\n\n    if (next.nodes) {\n      for (let child of next.nodes) stack.push(child)\n    }\n  }\n}\n/* c8 ignore stop */\n","const VersionCheck = require('./version-check')\nconst Regex = require('./regex')\n\n/**\n * Numeric mode encodes data from the decimal digit set (0 - 9)\n * (byte values 30HEX to 39HEX).\n * Normally, 3 data characters are represented by 10 bits.\n *\n * @type {Object}\n */\nexports.NUMERIC = {\n  id: 'Numeric',\n  bit: 1 << 0,\n  ccBits: [10, 12, 14]\n}\n\n/**\n * Alphanumeric mode encodes data from a set of 45 characters,\n * i.e. 10 numeric digits (0 - 9),\n *      26 alphabetic characters (A - Z),\n *   and 9 symbols (SP, $, %, *, +, -, ., /, :).\n * Normally, two input characters are represented by 11 bits.\n *\n * @type {Object}\n */\nexports.ALPHANUMERIC = {\n  id: 'Alphanumeric',\n  bit: 1 << 1,\n  ccBits: [9, 11, 13]\n}\n\n/**\n * In byte mode, data is encoded at 8 bits per character.\n *\n * @type {Object}\n */\nexports.BYTE = {\n  id: 'Byte',\n  bit: 1 << 2,\n  ccBits: [8, 16, 16]\n}\n\n/**\n * The Kanji mode efficiently encodes Kanji characters in accordance with\n * the Shift JIS system based on JIS X 0208.\n * The Shift JIS values are shifted from the JIS X 0208 values.\n * JIS X 0208 gives details of the shift coded representation.\n * Each two-byte character value is compacted to a 13-bit binary codeword.\n *\n * @type {Object}\n */\nexports.KANJI = {\n  id: 'Kanji',\n  bit: 1 << 3,\n  ccBits: [8, 10, 12]\n}\n\n/**\n * Mixed mode will contain a sequences of data in a combination of any of\n * the modes described above\n *\n * @type {Object}\n */\nexports.MIXED = {\n  bit: -1\n}\n\n/**\n * Returns the number of bits needed to store the data length\n * according to QR Code specifications.\n *\n * @param  {Mode}   mode    Data mode\n * @param  {Number} version QR Code version\n * @return {Number}         Number of bits\n */\nexports.getCharCountIndicator = function getCharCountIndicator (mode, version) {\n  if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)\n\n  if (!VersionCheck.isValid(version)) {\n    throw new Error('Invalid version: ' + version)\n  }\n\n  if (version >= 1 && version < 10) return mode.ccBits[0]\n  else if (version < 27) return mode.ccBits[1]\n  return mode.ccBits[2]\n}\n\n/**\n * Returns the most efficient mode to store the specified data\n *\n * @param  {String} dataStr Input data string\n * @return {Mode}           Best mode\n */\nexports.getBestModeForData = function getBestModeForData (dataStr) {\n  if (Regex.testNumeric(dataStr)) return exports.NUMERIC\n  else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC\n  else if (Regex.testKanji(dataStr)) return exports.KANJI\n  else return exports.BYTE\n}\n\n/**\n * Return mode name as string\n *\n * @param {Mode} mode Mode object\n * @returns {String}  Mode name\n */\nexports.toString = function toString (mode) {\n  if (mode && mode.id) return mode.id\n  throw new Error('Invalid mode')\n}\n\n/**\n * Check if input param is a valid mode object\n *\n * @param   {Mode}    mode Mode object\n * @returns {Boolean} True if valid mode, false otherwise\n */\nexports.isValid = function isValid (mode) {\n  return mode && mode.bit && mode.ccBits\n}\n\n/**\n * Get mode object from its name\n *\n * @param   {String} string Mode name\n * @returns {Mode}          Mode object\n */\nfunction fromString (string) {\n  if (typeof string !== 'string') {\n    throw new Error('Param is not a string')\n  }\n\n  const lcStr = string.toLowerCase()\n\n  switch (lcStr) {\n    case 'numeric':\n      return exports.NUMERIC\n    case 'alphanumeric':\n      return exports.ALPHANUMERIC\n    case 'kanji':\n      return exports.KANJI\n    case 'byte':\n      return exports.BYTE\n    default:\n      throw new Error('Unknown mode: ' + string)\n  }\n}\n\n/**\n * Returns mode from a value.\n * If value is not a valid mode, returns defaultValue\n *\n * @param  {Mode|String} value        Encoding mode\n * @param  {Mode}        defaultValue Fallback value\n * @return {Mode}                     Encoding mode\n */\nexports.from = function from (value, defaultValue) {\n  if (exports.isValid(value)) {\n    return value\n  }\n\n  try {\n    return fromString(value)\n  } catch (e) {\n    return defaultValue\n  }\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsFormCheckboxBaseSignature {\n  Args: {\n    value?: string;\n  };\n  Element: HTMLInputElement;\n}\n\nconst HdsFormCheckboxBase: TemplateOnlyComponent<HdsFormCheckboxBaseSignature> =\n  <template>\n    <input\n      type=\"checkbox\"\n      class=\"hds-form-checkbox\"\n      ...attributes\n      value={{@value}}\n    />\n  </template>;\n\nexport default HdsFormCheckboxBase;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\n\nimport HdsText from './index.gts';\nimport { HdsTextSizeValues, HdsTextWeightValues } from './types.ts';\nimport type {\n  HdsTextAligns,\n  HdsTextColors,\n  HdsTextSizes,\n  HdsTextTags,\n  HdsTextWeights,\n} from './types.ts';\n\n// notice: only some combinations of size + font-weight are allowed (per design specs)\n// see: https://www.figma.com/file/oQsMzMMnynfPWpMEt91OpH/HDS-Product---Foundations?node-id=1262%3A9192\n\nexport const DEFAULT_SIZE = HdsTextSizeValues.TwoHundred;\n\n// Filter out reverse mappings from enum\n// https://www.typescriptlang.org/docs/handbook/enums.html#reverse-mappings\nexport const SIZES: HdsTextSizes[] = Object.values(HdsTextSizeValues).filter(\n  (v): boolean => typeof v === 'number'\n) as HdsTextSizes[];\n\nexport type HdsTextDisplayWeight = Extract<\n  HdsTextWeights,\n  'medium' | 'semibold' | 'bold'\n>;\nexport const DEFAULT_WEIGHTS_PER_SIZE: Record<\n  HdsTextSizeValues,\n  HdsTextDisplayWeight\n> = {\n  [HdsTextSizeValues.FiveHundred]: HdsTextWeightValues.Bold,\n  [HdsTextSizeValues.FourHundred]: HdsTextWeightValues.Semibold,\n  [HdsTextSizeValues.ThreeHundred]: HdsTextWeightValues.Semibold,\n  [HdsTextSizeValues.TwoHundred]: HdsTextWeightValues.Semibold,\n  [HdsTextSizeValues.OneHundred]: HdsTextWeightValues.Medium,\n};\nexport const WEIGHTS_PER_SIZE: Record<HdsTextSizes, HdsTextDisplayWeight[]> = {\n  [HdsTextSizeValues.FiveHundred]: [HdsTextWeightValues.Bold],\n  [HdsTextSizeValues.FourHundred]: [\n    HdsTextWeightValues.Medium,\n    HdsTextWeightValues.Semibold,\n    HdsTextWeightValues.Bold,\n  ],\n  [HdsTextSizeValues.ThreeHundred]: [\n    HdsTextWeightValues.Medium,\n    HdsTextWeightValues.Semibold,\n    HdsTextWeightValues.Bold,\n  ],\n  [HdsTextSizeValues.TwoHundred]: [HdsTextWeightValues.Semibold],\n  [HdsTextSizeValues.OneHundred]: [HdsTextWeightValues.Medium],\n};\n\nexport interface HdsTextDisplaySignature {\n  Args: {\n    size?: HdsTextSizes;\n    tag?: HdsTextTags;\n    weight?: HdsTextDisplayWeight;\n    align?: HdsTextAligns;\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n    color?: string | HdsTextColors;\n  };\n  Element:\n    | HTMLSpanElement\n    | HTMLHeadingElement\n    | HTMLParagraphElement\n    | HTMLDivElement;\n  Blocks: {\n    default: [];\n  };\n}\n\nexport default class HdsTextDisplay extends Component<HdsTextDisplaySignature> {\n  // Sets the \"size\" for the text\n  get size(): HdsTextSizes {\n    let { size = DEFAULT_SIZE } = this.args;\n\n    // let's be a bit forgiving with the consumers\n    if (typeof size === 'string') {\n      size = parseInt(size, 10);\n    }\n\n    assert(\n      `@size for \"Hds::Text::Display\" must be one of the following: ${SIZES.join(\n        ', '\n      )}; received: ${size}`,\n      SIZES.includes(size)\n    );\n\n    return size;\n  }\n\n  // Sets the \"weight\" for the text\n  get weight(): HdsTextDisplayWeight {\n    let { weight } = this.args;\n\n    if (weight) {\n      const weights = WEIGHTS_PER_SIZE[this.size];\n      assert(\n        `@weight for \"Hds::Text::Display\" with @size=${\n          this.size\n        } must be one of the following: ${weights.join(\n          ', '\n        )}; received: ${weight}`,\n        weights.includes(weight)\n      );\n    } else {\n      // use the default (first item in the array)\n      weight = DEFAULT_WEIGHTS_PER_SIZE[this.size];\n    }\n\n    return weight;\n  }\n\n  <template>\n    <HdsText\n      @group=\"display\"\n      @size={{this.size}}\n      @weight={{this.weight}}\n      @align={{@align}}\n      @color={{@color}}\n      @tag={{@tag}}\n      ...attributes\n    >{{yield}}</HdsText>\n  </template>\n}\n","import type { Event, StackFrame, StackLineParser, StackParser } from '../types-hoist';\n\nconst STACKTRACE_FRAME_LIMIT = 50;\nexport const UNKNOWN_FUNCTION = '?';\n// Used to sanitize webpack (error: *) wrapped stack errors\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STRIP_FRAME_REGEXP = /captureMessage|captureException/;\n\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n */\nexport function createStackParser(...parsers: StackLineParser[]): StackParser {\n  const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n  return (stack: string, skipFirstLines: number = 0, framesToPop: number = 0): StackFrame[] => {\n    const frames: StackFrame[] = [];\n    const lines = stack.split('\\n');\n\n    for (let i = skipFirstLines; i < lines.length; i++) {\n      const line = lines[i] as string;\n      // Ignore lines over 1kb as they are unlikely to be stack frames.\n      // Many of the regular expressions use backtracking which results in run time that increases exponentially with\n      // input size. Huge strings can result in hangs/Denial of Service:\n      // https://github.com/getsentry/sentry-javascript/issues/2286\n      if (line.length > 1024) {\n        continue;\n      }\n\n      // https://github.com/getsentry/sentry-javascript/issues/5459\n      // Remove webpack (error: *) wrappers\n      const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;\n\n      // https://github.com/getsentry/sentry-javascript/issues/7813\n      // Skip Error: lines\n      if (cleanedLine.match(/\\S*Error: /)) {\n        continue;\n      }\n\n      for (const parser of sortedParsers) {\n        const frame = parser(cleanedLine);\n\n        if (frame) {\n          frames.push(frame);\n          break;\n        }\n      }\n\n      if (frames.length >= STACKTRACE_FRAME_LIMIT + framesToPop) {\n        break;\n      }\n    }\n\n    return stripSentryFramesAndReverse(frames.slice(framesToPop));\n  };\n}\n\n/**\n * Gets a stack parser implementation from Options.stackParser\n * @see Options\n *\n * If options contains an array of line parsers, it is converted into a parser\n */\nexport function stackParserFromStackParserOptions(stackParser: StackParser | StackLineParser[]): StackParser {\n  if (Array.isArray(stackParser)) {\n    return createStackParser(...stackParser);\n  }\n  return stackParser;\n}\n\n/**\n * Removes Sentry frames from the top and bottom of the stack if present and enforces a limit of max number of frames.\n * Assumes stack input is ordered from top to bottom and returns the reverse representation so call site of the\n * function that caused the crash is the last frame in the array.\n * @hidden\n */\nexport function stripSentryFramesAndReverse(stack: ReadonlyArray<StackFrame>): StackFrame[] {\n  if (!stack.length) {\n    return [];\n  }\n\n  const localStack = Array.from(stack);\n\n  // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n  if (/sentryWrapped/.test(getLastStackFrame(localStack).function || '')) {\n    localStack.pop();\n  }\n\n  // Reversing in the middle of the procedure allows us to just pop the values off the stack\n  localStack.reverse();\n\n  // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n  if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || '')) {\n    localStack.pop();\n\n    // When using synthetic events, we will have a 2 levels deep stack, as `new Error('Sentry syntheticException')`\n    // is produced within the scope itself, making it:\n    //\n    //   Sentry.captureException()\n    //   scope.captureException()\n    //\n    // instead of just the top `Sentry` call itself.\n    // This forces us to possibly strip an additional frame in the exact same was as above.\n    if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || '')) {\n      localStack.pop();\n    }\n  }\n\n  return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map(frame => ({\n    ...frame,\n    filename: frame.filename || getLastStackFrame(localStack).filename,\n    function: frame.function || UNKNOWN_FUNCTION,\n  }));\n}\n\nfunction getLastStackFrame(arr: StackFrame[]): StackFrame {\n  return arr[arr.length - 1] || {};\n}\n\nconst defaultFunctionName = '<anonymous>';\n\n/**\n * Safely extract function name from itself\n */\nexport function getFunctionName(fn: unknown): string {\n  try {\n    if (!fn || typeof fn !== 'function') {\n      return defaultFunctionName;\n    }\n    return fn.name || defaultFunctionName;\n  } catch (e) {\n    // Just accessing custom props in some Selenium environments\n    // can cause a \"Permission denied\" exception (see raven-js#495).\n    return defaultFunctionName;\n  }\n}\n\n/**\n * Get's stack frames from an event without needing to check for undefined properties.\n */\nexport function getFramesFromEvent(event: Event): StackFrame[] | undefined {\n  const exception = event.exception;\n\n  if (exception) {\n    const frames: StackFrame[] = [];\n    try {\n      // @ts-expect-error Object could be undefined\n      exception.values.forEach(value => {\n        // @ts-expect-error Value could be undefined\n        if (value.stacktrace.frames) {\n          // @ts-expect-error Value could be undefined\n          frames.push(...value.stacktrace.frames);\n        }\n      });\n      return frames;\n    } catch (_oO) {\n      return undefined;\n    }\n  }\n  return undefined;\n}\n","import type { DsnComponents, DsnLike, DsnProtocol } from '../types-hoist';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { consoleSandbox, logger } from './logger';\n\n/** Regular expression used to parse a Dsn. */\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+)?)?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n\nfunction isValidProtocol(protocol?: string): protocol is DsnProtocol {\n  return protocol === 'http' || protocol === 'https';\n}\n\n/**\n * Renders the string representation of this Dsn.\n *\n * By default, this will render the public representation without the password\n * component. To get the deprecated private representation, set `withPassword`\n * to true.\n *\n * @param withPassword When set to true, the password will be included.\n */\nexport function dsnToString(dsn: DsnComponents, withPassword: boolean = false): string {\n  const { host, path, pass, port, projectId, protocol, publicKey } = dsn;\n  return (\n    `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : ''}` +\n    `@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`\n  );\n}\n\n/**\n * Parses a Dsn from a given string.\n *\n * @param str A Dsn as string\n * @returns Dsn as DsnComponents or undefined if @param str is not a valid DSN string\n */\nexport function dsnFromString(str: string): DsnComponents | undefined {\n  const match = DSN_REGEX.exec(str);\n\n  if (!match) {\n    // This should be logged to the console\n    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.error(`Invalid Sentry Dsn: ${str}`);\n    });\n    return undefined;\n  }\n\n  const [protocol, publicKey, pass = '', host = '', port = '', lastPath = ''] = match.slice(1);\n  let path = '';\n  let projectId = lastPath;\n\n  const split = projectId.split('/');\n  if (split.length > 1) {\n    path = split.slice(0, -1).join('/');\n    projectId = split.pop() as string;\n  }\n\n  if (projectId) {\n    const projectMatch = projectId.match(/^\\d+/);\n    if (projectMatch) {\n      projectId = projectMatch[0];\n    }\n  }\n\n  return dsnFromComponents({ host, pass, path, projectId, port, protocol: protocol as DsnProtocol, publicKey });\n}\n\nfunction dsnFromComponents(components: DsnComponents): DsnComponents {\n  return {\n    protocol: components.protocol,\n    publicKey: components.publicKey || '',\n    pass: components.pass || '',\n    host: components.host,\n    port: components.port || '',\n    path: components.path || '',\n    projectId: components.projectId,\n  };\n}\n\nfunction validateDsn(dsn: DsnComponents): boolean {\n  if (!DEBUG_BUILD) {\n    return true;\n  }\n\n  const { port, projectId, protocol } = dsn;\n\n  const requiredComponents: ReadonlyArray<keyof DsnComponents> = ['protocol', 'publicKey', 'host', 'projectId'];\n  const hasMissingRequiredComponent = requiredComponents.find(component => {\n    if (!dsn[component]) {\n      logger.error(`Invalid Sentry Dsn: ${component} missing`);\n      return true;\n    }\n    return false;\n  });\n\n  if (hasMissingRequiredComponent) {\n    return false;\n  }\n\n  if (!projectId.match(/^\\d+$/)) {\n    logger.error(`Invalid Sentry Dsn: Invalid projectId ${projectId}`);\n    return false;\n  }\n\n  if (!isValidProtocol(protocol)) {\n    logger.error(`Invalid Sentry Dsn: Invalid protocol ${protocol}`);\n    return false;\n  }\n\n  if (port && isNaN(parseInt(port, 10))) {\n    logger.error(`Invalid Sentry Dsn: Invalid port ${port}`);\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Creates a valid Sentry Dsn object, identifying a Sentry instance and project.\n * @returns a valid DsnComponents object or `undefined` if @param from is an invalid DSN source\n */\nexport function makeDsn(from: DsnLike): DsnComponents | undefined {\n  const components = typeof from === 'string' ? dsnFromString(from) : dsnFromComponents(from);\n  if (!components || !validateDsn(components)) {\n    return undefined;\n  }\n  return components;\n}\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://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,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ninterface PerformanceEntryMap {\n  event: PerformanceEventTiming[];\n  'first-input': PerformanceEventTiming[];\n  'layout-shift': LayoutShift[];\n  'largest-contentful-paint': LargestContentfulPaint[];\n  'long-animation-frame': PerformanceLongAnimationFrameTiming[];\n  paint: PerformancePaintTiming[];\n  navigation: PerformanceNavigationTiming[];\n  resource: PerformanceResourceTiming[];\n  // Sentry-specific change:\n  // We add longtask as a supported entry type as we use this in\n  // our `instrumentPerformanceObserver` function also observes 'longtask'\n  // entries.\n  longtask: PerformanceEntry[];\n}\n\n/**\n * Takes a performance entry type and a callback function, and creates a\n * `PerformanceObserver` instance that will observe the specified entry type\n * with buffering enabled and call the callback _for each entry_.\n *\n * This function also feature-detects entry support and wraps the logic in a\n * try/catch to avoid errors in unsupporting browsers.\n */\nexport const observe = <K extends keyof PerformanceEntryMap>(\n  type: K,\n  callback: (entries: PerformanceEntryMap[K]) => void,\n  opts?: PerformanceObserverInit,\n): PerformanceObserver | undefined => {\n  try {\n    if (PerformanceObserver.supportedEntryTypes.includes(type)) {\n      const po = new PerformanceObserver(list => {\n        // Delay by a microtask to workaround a bug in Safari where the\n        // callback is invoked immediately, rather than in a separate task.\n        // See: https://github.com/GoogleChrome/web-vitals/issues/277\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        Promise.resolve().then(() => {\n          callback(list.getEntries() as PerformanceEntryMap[K]);\n        });\n      });\n      po.observe(\n        Object.assign(\n          {\n            type,\n            buffered: true,\n          },\n          opts || {},\n        ) as PerformanceObserverInit,\n      );\n      return po;\n    }\n  } catch (e) {\n    // Do nothing.\n  }\n  return;\n};\n","var baseIsNative = require('./_baseIsNative'),\n    getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n  if (version instanceof SemVer) {\n    return version\n  }\n  try {\n    return new SemVer(version, options)\n  } catch (er) {\n    if (!throwErrors) {\n      return null\n    }\n    throw er\n  }\n}\n\nmodule.exports = parse\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { modifier } from 'ember-modifier';\nimport { on } from '@ember/modifier';\nimport style from 'ember-style-modifier';\nimport { concat } from '@ember/helper';\n\nimport {\n  measureColumnWidth,\n  parsePixel,\n  requestAnimationFrameWaiter,\n} from './utils.ts';\nimport { BORDER_WIDTH } from './index.gts';\nimport { DEFAULT_MIN_WIDTH } from './column-manager/width.gts';\nimport hdsT from '../../../helpers/hds-t.ts';\n\nimport type Owner from '@ember/owner';\nimport type {\n  HdsAdvancedTableNormalizedColumn,\n  HdsAdvancedTablePixelString,\n} from './types';\nimport type { HdsAdvancedTableSignature } from './index.gts';\n\nconst KEYBOARD_RESIZE_STEP = 10;\n\nexport interface HdsAdvancedTableThResizeHandleSignature {\n  Args: {\n    column?: HdsAdvancedTableNormalizedColumn;\n    tableHeight?: number;\n    onBeginColumnResize?: () => void;\n    onColumnResize?: HdsAdvancedTableSignature['Args']['onColumnResize'];\n    onCommitColumnWidths?: () => void;\n    onGetAppliedWidth?: (\n      columnKey: HdsAdvancedTableNormalizedColumn['key']\n    ) => HdsAdvancedTableNormalizedColumn['width'];\n    onResetTransientColumnWidths?: () => void;\n    onResizeColumnByDelta?: (\n      columnKey: HdsAdvancedTableNormalizedColumn['key'],\n      deltaPx: number\n    ) => number;\n  };\n  Blocks: {\n    default?: [];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsAdvancedTableThResizeHandle extends Component<HdsAdvancedTableThResizeHandleSignature> {\n  @tracked resizing: { startX: number } | null = null;\n  @tracked private _transientDelta: number = 0;\n  @tracked private _isUpdateQueued: boolean = false;\n  @tracked private _lastPointerEvent: PointerEvent | null = null;\n\n  private _handleElement!: HdsAdvancedTableThResizeHandleSignature['Element'];\n  private _boundResize: (event: PointerEvent) => void;\n  private _boundStopResize: () => void;\n\n  private _registerHandleElement = modifier(\n    (element: HdsAdvancedTableThResizeHandleSignature['Element']) => {\n      this._handleElement = element;\n    }\n  );\n\n  constructor(\n    owner: Owner,\n    args: HdsAdvancedTableThResizeHandleSignature['Args']\n  ) {\n    super(owner, args);\n\n    this._boundResize = this._resize.bind(this);\n    this._boundStopResize = this._stopResize.bind(this);\n  }\n\n  get currentWidthInPixels(): number {\n    const { column, onGetAppliedWidth } = this.args;\n\n    if (column === undefined || onGetAppliedWidth === undefined) {\n      return 0;\n    }\n\n    const pixelWidth = parsePixel(onGetAppliedWidth(column.key));\n\n    if (pixelWidth !== undefined) {\n      return Math.round(pixelWidth);\n    }\n\n    // the applied width is an `fr` weight once a resize commits, and parsing that\n    // would report 0 — measure the rendered cell instead\n    return parsePixel(measureColumnWidth(this._handleElement)) ?? 0;\n  }\n\n  get minWidthInPixels(): number {\n    return parsePixel(this.args.column?.minWidth ?? DEFAULT_MIN_WIDTH) ?? 0;\n  }\n\n  get maxWidthInPixels(): number {\n    const explicitMax = parsePixel(this.args.column?.maxWidth);\n\n    if (explicitMax !== undefined) {\n      return explicitMax;\n    }\n\n    const table = this._handleElement?.closest('.hds-advanced-table');\n\n    return table instanceof HTMLElement\n      ? table.offsetWidth\n      : this.minWidthInPixels;\n  }\n\n  get widthValueText(): string {\n    return `${this.currentWidthInPixels}px`;\n  }\n\n  get height(): string | undefined {\n    const { tableHeight } = this.args;\n\n    if (tableHeight === undefined) {\n      return;\n    }\n\n    return `${tableHeight - BORDER_WIDTH * 2}px`;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-advanced-table__th-resize-handle'];\n\n    if (this.resizing !== null) {\n      classes.push('hds-advanced-table__th-resize-handle--resizing');\n    }\n\n    return classes.join(' ');\n  }\n\n  @action\n  onColumnResize(key?: string, width?: HdsAdvancedTablePixelString): void {\n    const { onColumnResize } = this.args;\n\n    if (typeof onColumnResize === 'function' && key !== undefined) {\n      onColumnResize(key, width);\n    }\n  }\n\n  private _finishColumnResize(\n    columnKey: HdsAdvancedTableNormalizedColumn['key']\n  ): void {\n    const { onCommitColumnWidths, onResetTransientColumnWidths } = this.args;\n\n    if (this._transientDelta !== 0) {\n      onCommitColumnWidths?.();\n    }\n\n    onResetTransientColumnWidths?.();\n\n    this.resizing = null;\n    this._transientDelta = 0;\n\n    requestAnimationFrameWaiter(() => {\n      this.onColumnResize(columnKey, measureColumnWidth(this._handleElement));\n    });\n  }\n\n  @action\n  handleKeydown(event: KeyboardEvent): void {\n    const validKeys = ['ArrowLeft', 'ArrowRight'];\n\n    if (!validKeys.includes(event.key)) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    const {\n      column,\n      onBeginColumnResize,\n      onResizeColumnByDelta,\n      onCommitColumnWidths,\n      onResetTransientColumnWidths,\n    } = this.args;\n\n    if (\n      column === undefined ||\n      onBeginColumnResize === undefined ||\n      onResizeColumnByDelta === undefined ||\n      onCommitColumnWidths === undefined ||\n      onResetTransientColumnWidths === undefined\n    ) {\n      return;\n    }\n\n    onBeginColumnResize();\n\n    const deltaX =\n      event.key === 'ArrowRight' ? KEYBOARD_RESIZE_STEP : -KEYBOARD_RESIZE_STEP;\n\n    this._transientDelta = onResizeColumnByDelta(column.key, deltaX);\n\n    // ensure the resize handle remains visible during keyboard navigation.\n    this._handleElement.scrollIntoView({\n      behavior: 'smooth',\n      block: 'nearest',\n      inline: 'nearest',\n    });\n\n    // use a microtask to commit the final state after the render pass.\n    queueMicrotask(() => this._finishColumnResize(column.key));\n  }\n\n  @action\n  startResize(event: PointerEvent): void {\n    if (event.button !== 0) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    const { column, onBeginColumnResize } = this.args;\n\n    if (column === undefined || onBeginColumnResize === undefined) {\n      return;\n    }\n\n    onBeginColumnResize();\n\n    this.resizing = { startX: event.clientX };\n\n    window.addEventListener('pointermove', this._boundResize);\n    window.addEventListener('pointerup', this._boundStopResize);\n  }\n\n  private _resize(event: PointerEvent): void {\n    this._lastPointerEvent = event;\n\n    if (this._isUpdateQueued) {\n      return;\n    }\n\n    this._isUpdateQueued = true;\n\n    requestAnimationFrameWaiter(() => {\n      if (this.resizing === null || this._lastPointerEvent === null) {\n        this._isUpdateQueued = false;\n\n        return;\n      }\n\n      const event = this._lastPointerEvent;\n\n      event.preventDefault();\n\n      const { column, onResizeColumnByDelta } = this.args;\n\n      if (column !== undefined && onResizeColumnByDelta !== undefined) {\n        const deltaX = event.clientX - this.resizing.startX;\n\n        this._transientDelta = onResizeColumnByDelta(column.key, deltaX);\n      }\n\n      this._isUpdateQueued = false;\n    });\n  }\n\n  private _stopResize(): void {\n    window.removeEventListener('pointermove', this._boundResize);\n    window.removeEventListener('pointerup', this._boundStopResize);\n\n    const { column } = this.args;\n\n    if (column === undefined) {\n      this.args.onResetTransientColumnWidths?.();\n\n      this.resizing = null;\n      this._transientDelta = 0;\n\n      return;\n    }\n\n    this._finishColumnResize(column.key);\n  }\n\n  <template>\n    {{! template-lint-disable no-pointer-down-event-binding }}\n    <div\n      class={{this.classNames}}\n      draggable=\"false\"\n      role=\"slider\"\n      aria-orientation=\"horizontal\"\n      aria-valuenow={{this.currentWidthInPixels}}\n      aria-valuemin={{this.minWidthInPixels}}\n      aria-valuemax={{this.maxWidthInPixels}}\n      aria-valuetext={{this.widthValueText}}\n      tabindex=\"0\"\n      aria-label={{hdsT\n        \"hds.components.advanced-table.th-resize-handle.aria-label\"\n        columnLabel=@column.label\n        default=(concat \"Resize \" @column.label \" column\")\n      }}\n      {{this._registerHandleElement}}\n      {{on \"pointerdown\" this.startResize}}\n      {{on \"keydown\" this.handleKeydown}}\n      {{style height=this.height}}\n      ...attributes\n    />\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { modifier } from 'ember-modifier';\nimport { on } from '@ember/modifier';\nimport style from 'ember-style-modifier';\n\nimport { BORDER_WIDTH } from './index.gts';\nimport { requestAnimationFrameWaiter } from './utils.ts';\nimport { HdsAdvancedTableColumnReorderSideValues } from './types.ts';\n\nimport type {\n  HdsAdvancedTableNormalizedColumn,\n  HdsAdvancedTableColumnReorderSide,\n} from './types.ts';\nimport type { HdsAdvancedTableSignature } from './index.gts';\n\nexport interface HdsAdvancedTableThReorderDropTargetSignature {\n  Args: {\n    column?: HdsAdvancedTableNormalizedColumn;\n    draggedColumnKey?: HdsAdvancedTableNormalizedColumn['key'] | null;\n    isFirstColumn: boolean;\n    isLastColumn: boolean;\n    hasSelectableRows?: HdsAdvancedTableSignature['Args']['isSelectable'];\n    reorderHoveredColumnKey?: HdsAdvancedTableNormalizedColumn['key'] | null;\n    draggedColumnSiblingColumnKeys?: {\n      previous?: HdsAdvancedTableNormalizedColumn['key'];\n      next?: HdsAdvancedTableNormalizedColumn['key'];\n    };\n    tableHeight?: number;\n    onReorderDrop?: (\n      columnKey: HdsAdvancedTableNormalizedColumn['key'],\n      side: HdsAdvancedTableColumnReorderSide\n    ) => void;\n    onSetReorderHoveredColumnKey?: (\n      key: HdsAdvancedTableNormalizedColumn['key'] | null\n    ) => void;\n  };\n  Blocks: {\n    default?: [];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsAdvancedTableThReorderDropTarget extends Component<HdsAdvancedTableThReorderDropTargetSignature> {\n  @tracked private _dragSide: HdsAdvancedTableColumnReorderSide | null = null;\n  @tracked private _isUpdateQueued: boolean = false;\n\n  private _element!: HdsAdvancedTableThReorderDropTargetSignature['Element'];\n\n  private _registerElement = modifier(\n    (element: HdsAdvancedTableThReorderDropTargetSignature['Element']) => {\n      this._element = element;\n    }\n  );\n\n  // determines whether the drag event is occurring on the left or right side of the element\n  private _getDragSide(event: DragEvent): HdsAdvancedTableColumnReorderSide {\n    const rect = this._element.getBoundingClientRect();\n    const mouseX = event.clientX;\n    const elementMiddleX = rect.left + rect.width / 2;\n\n    return mouseX < elementMiddleX\n      ? HdsAdvancedTableColumnReorderSideValues.Left\n      : HdsAdvancedTableColumnReorderSideValues.Right;\n  }\n\n  get isBeingDragged(): boolean {\n    const { column, draggedColumnKey } = this.args;\n\n    return column !== undefined && column.key === draggedColumnKey;\n  }\n\n  get isDraggingOver(): boolean {\n    const { column, reorderHoveredColumnKey } = this.args;\n\n    return column !== undefined && column.key === reorderHoveredColumnKey;\n  }\n\n  get classNames(): string {\n    const { isFirstColumn, isLastColumn } = this.args;\n\n    const classes = ['hds-advanced-table__th-reorder-drop-target'];\n\n    if (isFirstColumn && !this.args.hasSelectableRows) {\n      classes.push('hds-advanced-table__th-reorder-drop-target--is-first');\n    } else if (isLastColumn) {\n      classes.push('hds-advanced-table__th-reorder-drop-target--is-last');\n    }\n\n    if (this.isBeingDragged) {\n      classes.push(\n        'hds-advanced-table__th-reorder-drop-target--is-being-dragged'\n      );\n    } else if (this.isDraggingOver && this._dragSide !== null) {\n      classes.push(\n        ...[\n          'hds-advanced-table__th-reorder-drop-target--is-dragging-over',\n          `hds-advanced-table__th-reorder-drop-target--is-dragging-over--${this._dragSide}`,\n        ]\n      );\n    }\n\n    return classes.join(' ');\n  }\n\n  get height(): string | undefined {\n    const { tableHeight } = this.args;\n\n    if (tableHeight === undefined) {\n      return;\n    }\n\n    return `${tableHeight - BORDER_WIDTH * 2}px`;\n  }\n\n  @action\n  handleDragOver(event: DragEvent): void {\n    event.preventDefault();\n\n    if (this._isUpdateQueued) {\n      return;\n    }\n\n    this._isUpdateQueued = true;\n\n    requestAnimationFrameWaiter(() => {\n      const {\n        column,\n        draggedColumnKey,\n        draggedColumnSiblingColumnKeys,\n        onSetReorderHoveredColumnKey,\n      } = this.args;\n\n      if (column === undefined || onSetReorderHoveredColumnKey === undefined) {\n        return;\n      }\n\n      if (draggedColumnKey !== null) {\n        if (this.isBeingDragged) {\n          onSetReorderHoveredColumnKey(null);\n        } else {\n          onSetReorderHoveredColumnKey(column.key);\n\n          const { next, previous } = draggedColumnSiblingColumnKeys ?? {};\n          const dragSide = this._getDragSide(event);\n\n          if (\n            (column.key === previous &&\n              dragSide === HdsAdvancedTableColumnReorderSideValues.Left) ||\n            (column.key === next &&\n              dragSide === HdsAdvancedTableColumnReorderSideValues.Right) ||\n            (column.key !== previous && column.key !== next)\n          ) {\n            this._dragSide = dragSide;\n          }\n        }\n      }\n\n      this._isUpdateQueued = false;\n    });\n  }\n\n  @action\n  handleDrop(event: DragEvent): void {\n    event.preventDefault();\n\n    const { column, onReorderDrop, onSetReorderHoveredColumnKey } = this.args;\n    const { _dragSide } = this;\n\n    if (\n      column === undefined ||\n      _dragSide === null ||\n      typeof onReorderDrop !== 'function' ||\n      typeof onSetReorderHoveredColumnKey !== 'function'\n    ) {\n      return;\n    }\n\n    onReorderDrop(column.key, _dragSide);\n\n    this._dragSide = null;\n\n    onSetReorderHoveredColumnKey(null);\n  }\n\n  <template>\n    <div\n      class={{this.classNames}}\n      aria-hidden=\"true\"\n      {{style height=this.height}}\n      {{this._registerElement}}\n      {{on \"dragover\" this.handleDragOver}}\n      {{on \"drop\" this.handleDrop}}\n      ...attributes\n    />\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { scheduleOnce } from '@ember/runloop';\nimport { focusable, type FocusableElement } from 'tabbable';\nimport { modifier } from 'ember-modifier';\nimport style from 'ember-style-modifier';\nimport { and, not } from 'ember-truth-helpers';\n\nimport hdsScrollIntoViewOnFocus from '../../../modifiers/hds-scroll-into-view-on-focus.ts';\nimport hdsAdvancedTableCell from '../../../modifiers/hds-advanced-table-cell.ts';\n// @ts-expect-error: missing types https://github.com/josemarluedke/ember-focus-trap/issues/86\nimport focusTrap from 'ember-focus-trap/modifiers/focus-trap';\nimport { hash } from '@ember/helper';\nimport HdsLayoutFlex from '../layout/flex/index.gts';\nimport HdsAdvancedTableThButtonExpand from './th-button-expand.gts';\nimport HdsAdvancedTableThButtonSort from './th-button-sort.gts';\nimport HdsAdvancedTableThButtonTooltip from './th-button-tooltip.gts';\nimport HdsAdvancedTableThContextMenu from './th-context-menu.gts';\nimport HdsAdvancedTableThReorderHandle from './th-reorder-handle.gts';\nimport HdsAdvancedTableThResizeHandle from './th-resize-handle.gts';\nimport HdsAdvancedTableThReorderDropTarget from './th-reorder-drop-target.gts';\n\nimport { onFocusTrapDeactivate } from '../../../modifiers/hds-advanced-table-cell/dom-management.ts';\nimport {\n  HdsAdvancedTableHorizontalAlignmentValues,\n  HdsAdvancedTableThSortOrderLabelValues,\n  HdsAdvancedTableThSortOrderValues,\n} from './types.ts';\n\nimport type {\n  HdsAdvancedTableHorizontalAlignment,\n  HdsAdvancedTableScope,\n  HdsAdvancedTableExpandState,\n  HdsAdvancedTableColumnReorderSide,\n  HdsAdvancedTableNormalizedColumn,\n  HdsAdvancedTableThSortOrderLabels,\n  HdsAdvancedTableThSortOrder,\n  HdsAdvancedTablePixelString,\n} from './types.ts';\n\nimport type { HdsCompositeSignature } from '../composite/index.gts';\nimport type { HdsAdvancedTableThButtonSortSignature } from './th-button-sort.gts';\nimport type { HdsAdvancedTableThReorderHandleSignature } from './th-reorder-handle.gts';\nimport type { HdsAdvancedTableThResizeHandleSignature } from './th-resize-handle.gts';\nimport type { HdsAdvancedTableSignature } from './index.gts';\nimport type Owner from '@ember/owner';\n\nexport const ALIGNMENTS: HdsAdvancedTableHorizontalAlignment[] = Object.values(\n  HdsAdvancedTableHorizontalAlignmentValues\n);\nexport const DEFAULT_ALIGN = HdsAdvancedTableHorizontalAlignmentValues.Left;\n\nexport interface HdsAdvancedTableThSignature {\n  Args: {\n    align?: HdsAdvancedTableHorizontalAlignment;\n    column?: HdsAdvancedTableNormalizedColumn;\n    colspan?: number;\n    compositeItem?: HdsCompositeSignature['Blocks']['default'][0]['item'];\n    isCompositeItemDisabled?: boolean;\n    depth?: number;\n    draggedColumnKey?: HdsAdvancedTableNormalizedColumn['key'] | null;\n    firstColumnKey?: HdsAdvancedTableNormalizedColumn['key'];\n    firstNonStickyColumnKey?: HdsAdvancedTableNormalizedColumn['key'];\n    hasExpandAllButton?: boolean;\n    hasReorderableColumns?: HdsAdvancedTableSignature['Args']['hasReorderableColumns'];\n    hasResizableColumns?: HdsAdvancedTableSignature['Args']['hasResizableColumns'];\n    hasSelectableRows?: HdsAdvancedTableSignature['Args']['isSelectable'];\n    hasStickyFirstColumn?: HdsAdvancedTableSignature['Args']['hasStickyFirstColumn'];\n    isExpandable?: boolean;\n    isExpanded?: HdsAdvancedTableExpandState;\n    isStickyColumn?: boolean;\n    isStickyColumnPinned?: boolean;\n    lastColumnKey?: HdsAdvancedTableNormalizedColumn['key'];\n    newLabel?: string;\n    parentId?: string;\n    reorderHoveredColumnKey?: HdsAdvancedTableNormalizedColumn['key'] | null;\n    rowspan?: number;\n    scope?: HdsAdvancedTableScope;\n    draggedColumnSiblingColumnKeys?: {\n      previous?: HdsAdvancedTableNormalizedColumn['key'];\n      next?: HdsAdvancedTableNormalizedColumn['key'];\n    };\n    sortOrder?: HdsAdvancedTableThSortOrder;\n    tableHeight?: number;\n    tooltip?: string;\n    didInsertExpandButton?: (button: HTMLButtonElement) => void;\n    onBeginColumnResize?: () => void;\n    onCommitColumnWidths?: () => void;\n    onClickSort?: HdsAdvancedTableThButtonSortSignature['Args']['onClick'];\n    onClickToggle?: () => void;\n    onColumnResize?: HdsAdvancedTableSignature['Args']['onColumnResize'];\n    onGetAppliedWidth?: (\n      columnKey: HdsAdvancedTableNormalizedColumn['key']\n    ) => HdsAdvancedTableNormalizedColumn['width'];\n    onMoveColumnToTerminalPosition?: (\n      columnKey: HdsAdvancedTableNormalizedColumn['key'],\n      position: 'start' | 'end'\n    ) => void;\n    onPinFirstColumn?: () => void;\n    onReorderDrop?: (\n      columnKey: HdsAdvancedTableNormalizedColumn['key'],\n      side: HdsAdvancedTableColumnReorderSide\n    ) => void;\n    onResetTransientColumnWidths?: () => void;\n    onResizeColumnByDelta?: (\n      columnKey: HdsAdvancedTableNormalizedColumn['key'],\n      deltaPx: number\n    ) => number;\n    onRestoreColumnWidth?: (\n      columnKey: HdsAdvancedTableNormalizedColumn['key']\n    ) => void;\n    onGetRenderedWidth?: (\n      columnKey: HdsAdvancedTableNormalizedColumn['key']\n    ) => HdsAdvancedTablePixelString | undefined;\n    onSetDraggedColumnKey?: (\n      key: HdsAdvancedTableNormalizedColumn['key'] | null\n    ) => void;\n    onSetReorderHoveredColumnKey?: (\n      key: HdsAdvancedTableNormalizedColumn['key'] | null\n    ) => void;\n    onStepColumn?: (\n      columnKey: HdsAdvancedTableNormalizedColumn['key'],\n      step: number\n    ) => void;\n    willDestroyExpandButton?: (button: HTMLButtonElement) => void;\n  };\n  Blocks: {\n    default?: [];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsAdvancedTableTh extends Component<HdsAdvancedTableThSignature> {\n  private _labelId: string;\n\n  @tracked private _element!: HTMLDivElement;\n  @tracked private _shouldTrapFocus = false;\n  @tracked\n  private _reorderHandleElement?: HdsAdvancedTableThReorderHandleSignature['Element'];\n  @tracked\n  private _resizeHandleElement?: HdsAdvancedTableThResizeHandleSignature['Element'];\n\n  constructor(owner: Owner, args: HdsAdvancedTableThSignature['Args']) {\n    super(owner, args);\n\n    const { newLabel, rowspan, colspan, isStickyColumn } = args;\n\n    if (isStickyColumn) {\n      assert(\n        'Cannot have custom rowspan or colspan if there are nested rows.',\n        rowspan === undefined || colspan === undefined\n      );\n    }\n\n    this._labelId = newLabel ?? guidFor(this);\n  }\n\n  get isSortable(): boolean {\n    return this.args.column?.isSortable ?? false;\n  }\n\n  get isFirstColumn(): boolean {\n    const { column, firstColumnKey } = this.args;\n\n    return (\n      firstColumnKey !== undefined &&\n      column !== undefined &&\n      firstColumnKey === column.key\n    );\n  }\n\n  get isFirstNonStickyColumn(): boolean {\n    const { column, firstNonStickyColumnKey } = this.args;\n\n    return (\n      firstNonStickyColumnKey !== undefined &&\n      column !== undefined &&\n      firstNonStickyColumnKey === column.key\n    );\n  }\n\n  get isLastColumn(): boolean {\n    const { column, lastColumnKey } = this.args;\n\n    return (\n      lastColumnKey !== undefined &&\n      column !== undefined &&\n      lastColumnKey === column.key\n    );\n  }\n\n  get tableHasColumnBeingDragged(): boolean {\n    const { draggedColumnKey } = this.args;\n\n    return draggedColumnKey != null;\n  }\n\n  get isColumnBeingDragged(): boolean {\n    const { column, draggedColumnKey } = this.args;\n\n    return (\n      draggedColumnKey != null &&\n      column !== undefined &&\n      draggedColumnKey === column.key\n    );\n  }\n\n  get scope(): HdsAdvancedTableScope {\n    return this.args.scope ?? 'col';\n  }\n\n  get role(): string {\n    return this.scope === 'col' ? 'columnheader' : 'rowheader';\n  }\n\n  get ariaSort(): HdsAdvancedTableThSortOrderLabels {\n    switch (this.args.sortOrder) {\n      case HdsAdvancedTableThSortOrderValues.Asc:\n        return HdsAdvancedTableThSortOrderLabelValues.Asc;\n      case HdsAdvancedTableThSortOrderValues.Desc:\n        return HdsAdvancedTableThSortOrderLabelValues.Desc;\n      default:\n        // none is the default per the spec.\n        return HdsAdvancedTableThSortOrderLabelValues.None;\n    }\n  }\n\n  get align(): HdsAdvancedTableHorizontalAlignment {\n    const { align = DEFAULT_ALIGN } = this.args;\n\n    assert(\n      `@align for \"Hds::Table::Th\" must be one of the following: ${ALIGNMENTS.join(\n        ', '\n      )}; received: ${align}`,\n      ALIGNMENTS.includes(align)\n    );\n\n    return align;\n  }\n\n  // rowspan and colspan have to return 'auto' if not defined because otherwise the style modifier sets grid-area: undefined on the cell, which breaks the grid styles\n  get rowspan(): string {\n    return this.args.rowspan !== undefined\n      ? `span ${this.args.rowspan}`\n      : 'auto';\n  }\n\n  get colspan(): string | undefined {\n    return this.args.colspan !== undefined\n      ? `span ${this.args.colspan}`\n      : 'auto';\n  }\n\n  get paddingLeft(): string | undefined {\n    return this.args.depth !== undefined\n      ? `calc(${this.args.depth} * 32px + 16px)`\n      : undefined;\n  }\n\n  get classNames(): string {\n    const { isStickyColumn, isStickyColumnPinned } = this.args;\n\n    const classes = ['hds-advanced-table__th'];\n\n    if (this.isSortable) {\n      classes.push('hds-advanced-table__th--sort');\n    }\n\n    if (this.align) {\n      classes.push(`hds-advanced-table__th--align-${this.align}`);\n    }\n\n    if (isStickyColumn) {\n      classes.push('hds-advanced-table__th--is-sticky-column');\n    }\n\n    if (isStickyColumn && isStickyColumnPinned) {\n      classes.push('hds-advanced-table__th--is-sticky-column-pinned');\n    }\n\n    if (this.isColumnBeingDragged) {\n      classes.push('hds-advanced-table__th--is-being-dragged');\n    }\n\n    return classes.join(' ');\n  }\n\n  get showDropTarget(): boolean {\n    const { isStickyColumn } = this.args;\n\n    return this.tableHasColumnBeingDragged === true && !isStickyColumn;\n  }\n\n  get showResizeHandle(): boolean {\n    const { hasResizableColumns } = this.args;\n\n    return (\n      hasResizableColumns === true &&\n      !this.isLastColumn &&\n      !this.tableHasColumnBeingDragged\n    );\n  }\n\n  @action onFocusTrapDeactivate(): void {\n    this._shouldTrapFocus = false;\n    onFocusTrapDeactivate(this._element);\n  }\n\n  @action enableFocusTrap(): void {\n    this._shouldTrapFocus = true;\n  }\n\n  @action getInitialFocus(): FocusableElement | undefined {\n    const cellFocusableElements = focusable(this._element);\n\n    return cellFocusableElements[0];\n  }\n\n  @action focusReorderHandle(): void {\n    if (this._element === undefined) {\n      return;\n    }\n\n    // focus the th element first (parent) to ensure the handle is visible\n    this._element.focus({ preventScroll: true });\n\n    if (this._reorderHandleElement === undefined) {\n      return;\n    }\n\n    // then focus the reorder handle element\n    this._reorderHandleElement.focus();\n  }\n\n  @action resetTransientColumnWidths(): void {\n    this.args.onResetTransientColumnWidths?.();\n  }\n\n  @action getAppliedWidth(\n    columnKey: HdsAdvancedTableNormalizedColumn['key']\n  ): HdsAdvancedTableNormalizedColumn['width'] | undefined {\n    return this.args.onGetAppliedWidth?.(columnKey);\n  }\n\n  @action setDraggedColumnKey(\n    columnKey: HdsAdvancedTableNormalizedColumn['key'] | null\n  ): void {\n    this.args.onSetDraggedColumnKey?.(columnKey);\n  }\n\n  @action stepColumn(step: number): void {\n    const { column, onStepColumn } = this.args;\n\n    if (column !== undefined && onStepColumn !== undefined) {\n      onStepColumn(column.key, step);\n    }\n  }\n\n  @action setElement(element: HTMLDivElement): void {\n    // eslint-disable-next-line ember/no-runloop, ember/no-incorrect-calls-with-inline-anonymous-functions\n    scheduleOnce('afterRender', () => {\n      this._element = element;\n    });\n  }\n\n  private _registerReorderHandleElement = modifier(\n    (element: HdsAdvancedTableThReorderHandleSignature['Element']) => {\n      this._reorderHandleElement = element;\n    }\n  );\n\n  private _registerResizeHandleElement = modifier(\n    (element: HdsAdvancedTableThResizeHandleSignature['Element']) => {\n      this._resizeHandleElement = element;\n    }\n  );\n\n  private _manageExpandButton = modifier((button: HTMLButtonElement) => {\n    const { didInsertExpandButton, willDestroyExpandButton } = this.args;\n\n    if (typeof didInsertExpandButton === 'function') {\n      didInsertExpandButton(button);\n    }\n\n    return () => {\n      if (typeof willDestroyExpandButton === 'function') {\n        willDestroyExpandButton(button);\n      }\n    };\n  });\n\n  <template>\n    <div\n      class={{this.classNames}}\n      role={{this.role}}\n      aria-sort={{this.ariaSort}}\n      aria-rowspan={{@rowspan}}\n      aria-colspan={{@colspan}}\n      aria-describedby={{@parentId}}\n      {{style\n        grid-row=this.rowspan\n        grid-column=this.colspan\n        padding-left=this.paddingLeft\n      }}\n      {{hdsAdvancedTableCell\n        handleEnableFocusTrap=this.enableFocusTrap\n        shouldTrapFocus=this._shouldTrapFocus\n        setCellElement=this.setElement\n      }}\n      {{focusTrap\n        isActive=this._shouldTrapFocus\n        focusTrapOptions=(hash\n          onDeactivate=this.onFocusTrapDeactivate\n          initialFocus=this.getInitialFocus\n          clickOutsideDeactivates=true\n        )\n      }}\n      {{@compositeItem disabled=@isCompositeItemDisabled}}\n      {{hdsScrollIntoViewOnFocus options=(hash block=\"center\" inline=\"center\")}}\n      ...attributes\n    >\n      <HdsLayoutFlex @justify=\"space-between\" @align=\"center\" @gap=\"8\">\n        {{#if @column.isVisuallyHidden}}\n          <span class=\"sr-only\">{{yield}}</span>\n        {{else}}\n          {{#if (and @isExpandable (not this.isSortable))}}\n            <HdsAdvancedTableThButtonExpand\n              @labelId={{this._labelId}}\n              @onToggle={{@onClickToggle}}\n              @isExpanded={{@isExpanded}}\n              @isExpandAll={{@hasExpandAllButton}}\n              {{this._manageExpandButton}}\n            />\n          {{/if}}\n          <div class=\"hds-advanced-table__th-content\">\n            <span\n              id={{this._labelId}}\n              class=\"hds-advanced-table__th-content-text hds-typography-body-200 hds-font-weight-semibold\"\n            >\n              {{yield}}\n            </span>\n            {{#if @tooltip}}\n              <HdsAdvancedTableThButtonTooltip\n                @tooltip={{@tooltip}}\n                @labelId={{this._labelId}}\n              />\n            {{/if}}\n          </div>\n          {{#if this.isSortable}}\n            <HdsAdvancedTableThButtonSort\n              @sortOrder={{@sortOrder}}\n              @onClick={{@onClickSort}}\n              @labelId={{this._labelId}}\n            />\n          {{/if}}\n          {{#if @column}}\n            <HdsAdvancedTableThContextMenu\n              @column={{@column}}\n              @hasReorderableColumns={{@hasReorderableColumns}}\n              @hasResizableColumns={{@hasResizableColumns}}\n              @isFirstColumn={{this.isFirstColumn}}\n              @isFirstNonStickyColumn={{this.isFirstNonStickyColumn}}\n              @isLastColumn={{this.isLastColumn}}\n              @isStickyColumn={{@isStickyColumn}}\n              @reorderHandleElement={{this._reorderHandleElement}}\n              @resizeHandleElement={{this._resizeHandleElement}}\n              @onColumnResize={{@onColumnResize}}\n              @onFocusReorderHandle={{this.focusReorderHandle}}\n              @onMoveColumnToTerminalPosition={{@onMoveColumnToTerminalPosition}}\n              @onPinFirstColumn={{@onPinFirstColumn}}\n              @onRestoreColumnWidth={{@onRestoreColumnWidth}}\n              @onGetRenderedWidth={{@onGetRenderedWidth}}\n            />\n            {{#if (and @hasReorderableColumns (not @isStickyColumn))}}\n              <HdsAdvancedTableThReorderHandle\n                @column={{@column}}\n                @tableHeight={{@tableHeight}}\n                @thElement={{this._element}}\n                @onFocusReorderHandle={{this.focusReorderHandle}}\n                @onSetDraggedColumnKey={{this.setDraggedColumnKey}}\n                @onStepColumn={{this.stepColumn}}\n                {{this._registerReorderHandleElement}}\n              />\n            {{/if}}\n            {{#if this.showResizeHandle}}\n              <HdsAdvancedTableThResizeHandle\n                @column={{@column}}\n                @tableHeight={{@tableHeight}}\n                @onColumnResize={{@onColumnResize}}\n                @onBeginColumnResize={{@onBeginColumnResize}}\n                @onResizeColumnByDelta={{@onResizeColumnByDelta}}\n                @onCommitColumnWidths={{@onCommitColumnWidths}}\n                @onGetAppliedWidth={{this.getAppliedWidth}}\n                @onResetTransientColumnWidths={{this.resetTransientColumnWidths}}\n                {{this._registerResizeHandleElement}}\n              />\n            {{/if}}\n          {{/if}}\n        {{/if}}\n      </HdsLayoutFlex>\n      {{#if this.showDropTarget}}\n        <HdsAdvancedTableThReorderDropTarget\n          @column={{@column}}\n          @draggedColumnKey={{@draggedColumnKey}}\n          @hasSelectableRows={{@hasSelectableRows}}\n          @isFirstColumn={{this.isFirstColumn}}\n          @isLastColumn={{this.isLastColumn}}\n          @reorderHoveredColumnKey={{@reorderHoveredColumnKey}}\n          @draggedColumnSiblingColumnKeys={{@draggedColumnSiblingColumnKeys}}\n          @tableHeight={{@tableHeight}}\n          @onReorderDrop={{@onReorderDrop}}\n          @onSetReorderHoveredColumnKey={{@onSetReorderHoveredColumnKey}}\n        />\n      {{/if}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\nimport { tracked } from '@glimmer/tracking';\nimport { modifier } from 'ember-modifier';\nimport { service } from '@ember/service';\nimport { on } from '@ember/modifier';\n\nimport type HdsIntlService from '../../../services/hds-intl';\n\nimport {\n  HdsAdvancedTableThSortOrderValues,\n  HdsAdvancedTableThSortOrderLabelValues,\n} from './types.ts';\nimport HdsAdvancedTableTh from './th.gts';\nimport HdsFormCheckboxBase from '../form/checkbox/base.gts';\nimport HdsAdvancedTableThButtonSort from './th-button-sort.gts';\n\nimport type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base.gts';\nimport type {\n  HdsAdvancedTableScope,\n  HdsAdvancedTableThSortOrder,\n  HdsAdvancedTableThSortOrderLabels,\n} from './types.ts';\nimport type { HdsAdvancedTableThSignature } from './th.gts';\nimport type { HdsCompositeSignature } from '../composite/index.gts';\n\nexport interface HdsAdvancedTableThSelectableSignature {\n  Args: {\n    compositeItem?: HdsCompositeSignature['Blocks']['default'][0]['item'];\n    isCompositeItemDisabled?: boolean;\n    didInsert?: (\n      checkbox: HdsFormCheckboxBaseSignature['Element'],\n      selectionKey?: string\n    ) => void;\n    isSelected?: boolean;\n    onClickSortBySelected?: () => void;\n    onSelectionChange?: (\n      target: HdsFormCheckboxBaseSignature['Element'],\n      selectionKey: string | undefined\n    ) => void;\n    selectionAriaLabelSuffix?: string;\n    selectionKey?: string;\n    selectionScope?: HdsAdvancedTableScope;\n    sortBySelectedOrder?: HdsAdvancedTableThSortOrder;\n    willDestroy?: (selectionKey?: string) => void;\n    isStickyColumn?: boolean;\n    isStickyColumnPinned?: boolean;\n  };\n  Element: HdsAdvancedTableThSignature['Element'];\n}\n\nexport default class HdsAdvancedTableThSelectable extends Component<HdsAdvancedTableThSelectableSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n  @tracked private _isSelected = this.args.isSelected ?? false;\n\n  private _guid = guidFor(this);\n  private _checkboxId = `checkbox-${this._guid}`;\n  private _labelId = `label-${this._guid}`;\n\n  get isSortable(): boolean {\n    return this.args.onClickSortBySelected !== undefined;\n  }\n\n  get ariaLabel(): string {\n    const { selectionAriaLabelSuffix = 'row' } = this.args;\n    const defaultString = `Select ${selectionAriaLabelSuffix}`;\n    return this.hdsIntl.t(\n      'hds.components.advanced-table.th-selectable.aria-label',\n      {\n        default: defaultString,\n        suffix: selectionAriaLabelSuffix,\n      }\n    );\n  }\n\n  get ariaSort(): HdsAdvancedTableThSortOrderLabels | undefined {\n    switch (this.args.sortBySelectedOrder) {\n      case HdsAdvancedTableThSortOrderValues.Asc:\n        return HdsAdvancedTableThSortOrderLabelValues.Asc;\n      case HdsAdvancedTableThSortOrderValues.Desc:\n        return HdsAdvancedTableThSortOrderLabelValues.Desc;\n      default:\n        // none is the default per the spec.\n        return HdsAdvancedTableThSortOrderLabelValues.None;\n    }\n  }\n\n  private _manageCheckbox = modifier(\n    (checkbox: HdsFormCheckboxBaseSignature['Element']) => {\n      const { didInsert, willDestroy } = this.args;\n      if (typeof didInsert === 'function') {\n        didInsert(checkbox, this.args.selectionKey);\n      }\n\n      return () => {\n        if (typeof willDestroy === 'function') {\n          willDestroy(this.args.selectionKey);\n        }\n      };\n    }\n  );\n\n  @action\n  onSelectionChange(event: Event): void {\n    // Assert event.target as HdsFormCheckboxBaseSignature['Element'] to access the 'checked' property\n    const target = event.target as HdsFormCheckboxBaseSignature['Element'];\n    this._isSelected = target.checked;\n    const { onSelectionChange } = this.args;\n    if (typeof onSelectionChange === 'function') {\n      onSelectionChange(target, this.args.selectionKey);\n    }\n  }\n\n  <template>\n    <HdsAdvancedTableTh\n      class=\"hds-advanced-table__th--is-selectable\"\n      aria-sort={{if this.isSortable this.ariaSort}}\n      @scope={{@selectionScope}}\n      @isStickyColumn={{@isStickyColumn}}\n      @isStickyColumnPinned={{@isStickyColumnPinned}}\n      @compositeItem={{@compositeItem}}\n      @isCompositeItemDisabled={{@isCompositeItemDisabled}}\n      ...attributes\n    >\n      <div class=\"hds-advanced-table__th-content\">\n        <HdsFormCheckboxBase\n          id={{this._checkboxId}}\n          class=\"hds-advanced-table__checkbox\"\n          checked={{@isSelected}}\n          aria-label={{this.ariaLabel}}\n          {{this._manageCheckbox}}\n          {{on \"change\" this.onSelectionChange}}\n        />\n        {{#if this.isSortable}}\n          <HdsAdvancedTableThButtonSort\n            @sortOrder={{@sortBySelectedOrder}}\n            @onClick={{@onClickSortBySelected}}\n            @labelId={{this._labelId}}\n          />\n        {{/if}}\n      </div>\n    </HdsAdvancedTableTh>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { hash } from '@ember/helper';\nimport { tracked } from '@glimmer/tracking';\nimport { eq } from 'ember-truth-helpers';\n\nimport HdsAdvancedTableThSelectable from './th-selectable.gts';\n\nimport type {\n  HdsAdvancedTableCell,\n  HdsAdvancedTableScope,\n  HdsAdvancedTableThSortOrder,\n} from './types.ts';\nimport type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base.gts';\nimport type { HdsAdvancedTableSignature } from './index.gts';\nimport type { HdsCompositeSignature } from '../composite/index.gts';\nimport type { HdsAdvancedTableThSelectableSignature } from './th-selectable.gts';\n\ntype HdsCompositeDefaultBlock = HdsCompositeSignature['Blocks']['default'][0];\n\nexport interface BaseHdsAdvancedTableTrSignature<T> {\n  Args: {\n    columnOrder?: HdsAdvancedTableSignature['Args']['columnOrder'];\n    compositeGroup?: HdsCompositeDefaultBlock['group'];\n    compositeItem?: HdsCompositeDefaultBlock['item'];\n    displayRow?: boolean;\n    selectableColumnKey?: HdsAdvancedTableSignature['Args']['selectableColumnKey'];\n    isCompositeItemDisabled?: boolean;\n    isLastRow?: boolean;\n    isSelectable?: boolean;\n    isSelected?: boolean;\n    isParentRow?: boolean;\n    hasReorderableColumns?: HdsAdvancedTableSignature['Args']['hasReorderableColumns'];\n    data?: T;\n    selectionAriaLabelSuffix?: string;\n    selectionKey?: string;\n    selectionScope?: HdsAdvancedTableScope;\n    sortBySelectedOrder?: HdsAdvancedTableThSortOrder;\n    depth?: number;\n    didInsert?: (\n      checkbox: HdsFormCheckboxBaseSignature['Element'],\n      selectionKey?: string\n    ) => void;\n    onSelectionChange?: (\n      checkbox?: HdsFormCheckboxBaseSignature['Element'],\n      selectionKey?: string\n    ) => void;\n    willDestroy?: () => void;\n    onClickSortBySelected?: HdsAdvancedTableThSelectableSignature['Args']['onClickSortBySelected'];\n    hasStickyColumn?: boolean;\n    isStickyColumnPinned?: boolean;\n  };\n  Blocks: {\n    default?: [\n      {\n        orderedCells?: HdsAdvancedTableCell<T>[];\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\n/*\n * NOTE: There is currently an issue with `WithBoundArgs` or Glint that causes a typing error where @selectionKey is set as always required.\n *\n * Until this is fixed, we are holding off on doing a union with the SelectableHdsAdvancedTableTrArgs\n */\n\n// Extended interface for selectable rows\n// export interface SelectableHdsAdvancedTableTrArgs\n//   extends BaseHdsAdvancedTableTrSignature {\n//   Args: BaseHdsAdvancedTableTrSignature['Args'] & {\n//     isSelectable: true;\n//     selectionScope?: HdsAdvancedTableScopeValues.Row;\n//     selectionKey: string; // Now required for selectable rows\n//   };\n// }\n\n// Union type to combine both possible states\nexport type HdsAdvancedTableTrSignature<T> = BaseHdsAdvancedTableTrSignature<T>;\n// | SelectableHdsAdvancedTableTrArgs;\n\nexport default class HdsAdvancedTableTr<T> extends Component<\n  HdsAdvancedTableTrSignature<T>\n> {\n  @tracked private isSelectedOverride?: boolean;\n\n  get selectionKey(): string | undefined {\n    if (this.args.isSelectable && this.args.selectionScope === 'row') {\n      assert(\n        `@selectionKey must be defined on Table::Tr or B.Tr when @isSelectable is true`,\n        this.args.selectionKey\n      );\n      return this.args.selectionKey;\n    }\n    return undefined;\n  }\n\n  // Carbon applies styles to the entire row when it is selected, so we need a state to track the selection state to toggle the appropriate class.\n  get isSelected(): boolean {\n    return this.isSelectedOverride ?? this.args.isSelected ?? false;\n  }\n\n  get classNames(): string {\n    const { depth, isLastRow, isParentRow, displayRow } = this.args;\n    const classes = ['hds-advanced-table__tr'];\n\n    if (depth && depth > 0) {\n      classes.push('hds-advanced-table__tr--nested');\n    }\n\n    if (isParentRow) {\n      classes.push('hds-advanced-table__tr--parent-row');\n    }\n\n    if (displayRow === false) {\n      classes.push('hds-advanced-table__tr--hidden');\n    }\n\n    if (isLastRow) {\n      classes.push('hds-advanced-table__tr--last-row');\n    }\n\n    if (this.isSelected) {\n      classes.push(`hds-advanced-table__tr--is-selected`);\n    }\n\n    return classes.join(' ');\n  }\n\n  get cells(): HdsAdvancedTableCell<T>[] {\n    const { columnOrder, data } = this.args;\n\n    if (columnOrder === undefined || data == null) {\n      return [];\n    }\n\n    return columnOrder.map((columnKey) => ({\n      columnKey,\n      content: data[columnKey as keyof T] as HdsAdvancedTableCell<T>['content'],\n    }));\n  }\n\n  get orderedCells(): HdsAdvancedTableCell<T>[] | undefined {\n    const { columnOrder, data, hasReorderableColumns } = this.args;\n\n    if (columnOrder === undefined || data === undefined) {\n      return this.cells;\n    }\n\n    if (hasReorderableColumns) {\n      return columnOrder.reduce<HdsAdvancedTableCell<T>[]>((acc, key) => {\n        const cell = this.cells.find((cell) => cell.columnKey === key);\n\n        if (cell !== undefined) {\n          acc.push(cell);\n        }\n\n        return acc;\n      }, []);\n    } else {\n      return this.cells;\n    }\n  }\n\n  onSelectionChange = (\n    checkbox?: HdsFormCheckboxBaseSignature['Element'],\n    selectionKey?: string\n  ): void => {\n    this.isSelectedOverride = checkbox?.checked ?? false;\n\n    const { onSelectionChange } = this.args;\n    if (typeof onSelectionChange === 'function') {\n      onSelectionChange(checkbox, selectionKey);\n    }\n  };\n\n  <template>\n    <div class={{this.classNames}} role=\"row\" {{@compositeGroup}} ...attributes>\n      {{#if @isSelectable}}\n        <HdsAdvancedTableThSelectable\n          role={{if (eq @selectionScope \"row\") \"gridcell\" \"columnheader\"}}\n          @compositeItem={{@compositeItem}}\n          @isCompositeItemDisabled={{@isCompositeItemDisabled}}\n          @isSelected={{this.isSelected}}\n          @selectionScope={{@selectionScope}}\n          @selectionKey={{this.selectionKey}}\n          @selectionAriaLabelSuffix={{@selectionAriaLabelSuffix}}\n          @sortBySelectedOrder={{@sortBySelectedOrder}}\n          @didInsert={{@didInsert}}\n          @willDestroy={{@willDestroy}}\n          @onClickSortBySelected={{@onClickSortBySelected}}\n          @onSelectionChange={{this.onSelectionChange}}\n          @isStickyColumn={{@hasStickyColumn}}\n          @isStickyColumnPinned={{@isStickyColumnPinned}}\n        />\n      {{/if}}\n\n      {{yield (hash orderedCells=this.orderedCells)}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { cached, tracked } from '@glimmer/tracking';\nimport { guidFor } from '@ember/object/internals';\nimport { service } from '@ember/service';\nimport { modifier } from 'ember-modifier';\nimport { TrackedSet } from 'tracked-built-ins';\nimport { fn, hash } from '@ember/helper';\nimport { and, eq, not, notEq } from 'ember-truth-helpers';\nimport style from 'ember-style-modifier';\nimport { on } from '@ember/modifier';\nimport { sortBy } from '@nullvoxpopuli/ember-composable-helpers';\n\nimport { HdsAdvancedTableThSortOrderValues } from './types.ts';\nimport {\n  HdsAdvancedTableDensityValues,\n  HdsAdvancedTableVerticalAlignmentValues,\n} from './types.ts';\nimport HdsFilterBar from '../filter-bar/index.gts';\nimport HdsApplicationState from '../application-state/index.gts';\nimport HdsComposite from '../composite/index.gts';\nimport HdsAdvancedTableColumnManager from './column-manager/index.gts';\nimport HdsAdvancedTableTr from './tr.gts';\nimport HdsAdvancedTableTh from './th.gts';\nimport HdsAdvancedTableBody from './body.gts';\nimport HdsAdvancedTableTd from './td.gts';\nimport hdsT from '../../../helpers/hds-t.ts';\n\nimport type Owner from '@ember/owner';\nimport type { ComponentLike, WithBoundArgs } from '@glint/template';\nimport type {\n  HdsAdvancedTableColumn,\n  HdsAdvancedTableDensities,\n  HdsAdvancedTableHorizontalAlignment,\n  HdsAdvancedTableOnSelectionChangeSignature,\n  HdsAdvancedTableSelectableRow,\n  HdsAdvancedTableSortingFunction,\n  HdsAdvancedTableThSortOrder,\n  HdsAdvancedTableVerticalAlignment,\n  HdsAdvancedTableExpandState,\n  HdsAdvancedTableColumnReorderCallback,\n  HdsAdvancedTableColumnResizeCallback,\n  HdsAdvancedTableModel,\n} from './types.ts';\n\nimport type { HdsAdvancedTableThSelectableSignature } from './th-selectable.gts';\nimport type { HdsAdvancedTableTrSignature } from './tr.gts';\nimport type { HdsFilterBarSignature } from '../filter-bar/index.gts';\nimport type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base.gts';\nimport type HdsIntlService from '../../../services/hds-intl.ts';\n\n// a flattened signature for the yielded `Tr` component\n// Replaces `WithBoundArgs` to prevent TS infinite recursion crashes\n// when processing deeply nested tree-grid data models.\nexport interface YieldedHdsAdvancedTableTr<T> {\n  Args: {\n    isSelected?: boolean;\n    selectionKey?: string;\n    selectionAriaLabelSuffix?: string;\n    selectableColumnKey?: string;\n    sortBySelectedOrder?: HdsAdvancedTableThSortOrder;\n    onClickSortBySelected?: HdsAdvancedTableThSelectableSignature['Args']['onClickSortBySelected'];\n  };\n  Blocks: HdsAdvancedTableTrSignature<T>['Blocks'];\n  Element: HdsAdvancedTableTrSignature<T>['Element'];\n}\n\nexport const DENSITIES: HdsAdvancedTableDensities[] = Object.values(\n  HdsAdvancedTableDensityValues\n);\nexport const DEFAULT_DENSITY = HdsAdvancedTableDensityValues.Medium;\n\nexport const VALIGNMENTS: HdsAdvancedTableVerticalAlignment[] = Object.values(\n  HdsAdvancedTableVerticalAlignmentValues\n);\nexport const DEFAULT_VALIGN = HdsAdvancedTableVerticalAlignmentValues.Top;\n\nexport const BORDER_WIDTH = 1;\n\nconst DEFAULT_SCROLL_DIMENSIONS = {\n  bottom: '0px',\n  height: '0px',\n  left: '0px',\n  right: '0px',\n  width: '0px',\n};\n\nconst REORDER_EDGE_SCROLL_TRIGGER_PX = 48;\nconst REORDER_EDGE_SCROLL_STEP_PX = 16;\n\nconst getScrollIndicatorDimensions = (\n  scrollWrapper: HTMLDivElement,\n  theadElement: HTMLDivElement,\n  hasStickyFirstColumn: boolean,\n  isStickyColumnPinned: boolean\n) => {\n  const horizontalScrollBarHeight =\n    scrollWrapper.offsetHeight - scrollWrapper.clientHeight;\n  const verticalScrollBarWidth =\n    scrollWrapper.offsetWidth - scrollWrapper.clientWidth;\n\n  let leftOffset = 0;\n\n  if (hasStickyFirstColumn) {\n    const stickyColumnHeaders = theadElement.querySelectorAll(\n      '.hds-advanced-table__th--is-sticky-column'\n    );\n\n    stickyColumnHeaders?.forEach((el) => {\n      // querySelectorAll returns Elements, which don't have offsetWidth\n      // need to use offsetWidth to account for the cell borders\n      const elAsHTMLElement = el as HTMLElement;\n      leftOffset += elAsHTMLElement.offsetWidth;\n    });\n\n    // offsets the left: -1px position if there are multiple sticky columns or the first column has a fixed pixel width\n    if (stickyColumnHeaders.length > 1) {\n      leftOffset -= 1;\n    }\n\n    // offsets the left: -1px position if the sticky column is already pinned when the scroll indicator is calculated\n    if (isStickyColumnPinned) {\n      leftOffset -= 1;\n    }\n  }\n\n  return {\n    bottom: `${horizontalScrollBarHeight}px`,\n    height: `${scrollWrapper.offsetHeight - horizontalScrollBarHeight}px`,\n    left: `${leftOffset}px`,\n    right: `${verticalScrollBarWidth}px`,\n    width: `${scrollWrapper.offsetWidth - verticalScrollBarWidth}px`,\n  };\n};\n\nconst getStickyColumnLeftOffset = (\n  theadElement: HTMLDivElement,\n  hasRowSelection: boolean,\n  isStickyColumnPinned: boolean\n) => {\n  // if there is no select checkbox column, the sticky column is all the way to the left\n  if (!hasRowSelection) return '0px';\n\n  const selectableCell = theadElement.querySelector(\n    '.hds-advanced-table__th--is-selectable'\n  ) as HTMLElement;\n\n  let leftOffset = selectableCell?.offsetWidth ?? 0;\n\n  // if the sticky column is pinned when the offset is calculated, we need to account for the increased width of the border\n  if (isStickyColumnPinned && leftOffset > 0) {\n    leftOffset -= 2;\n  }\n\n  return `${leftOffset}px`;\n};\n\nexport interface HdsAdvancedTableSignature<T = HdsAdvancedTableModel> {\n  Args: {\n    align?: HdsAdvancedTableHorizontalAlignment;\n    caption?: string;\n    columns: HdsAdvancedTableColumn[];\n    columnOrder?: string[];\n    density?: HdsAdvancedTableDensities;\n    identityKey?: string;\n    isSelectable?: boolean;\n    isStriped?: boolean;\n    model: T[];\n    reorderedMessageText?: string;\n    selectionAriaLabelSuffix?: string;\n    sortBy?: string;\n    selectableColumnKey?: string;\n    sortedMessageText?: string;\n    sortOrder?: HdsAdvancedTableThSortOrder;\n    valign?: HdsAdvancedTableVerticalAlignment;\n    hasReorderableColumns?: boolean;\n    hasResizableColumns?: boolean;\n    hasStickyHeader?: boolean;\n    hasStickyFirstColumn?: boolean;\n    childrenKey?: string;\n    maxHeight?: string;\n    onColumnReorder?: HdsAdvancedTableColumnReorderCallback;\n    onColumnResize?: HdsAdvancedTableColumnResizeCallback;\n    onSelectionChange?: (\n      selection: HdsAdvancedTableOnSelectionChangeSignature\n    ) => void;\n    onSort?: (sortBy: string, sortOrder: HdsAdvancedTableThSortOrder) => void;\n  };\n  Blocks: {\n    actions?: [\n      {\n        FilterBar?: ComponentLike<HdsFilterBarSignature>;\n      },\n    ];\n    body?: [\n      {\n        Td?: WithBoundArgs<\n          typeof HdsAdvancedTableTd,\n          'align' | 'compositeItem' | 'isCompositeItemDisabled'\n        >;\n        Tr?: ComponentLike<YieldedHdsAdvancedTableTr<T>>;\n        Th?: WithBoundArgs<\n          typeof HdsAdvancedTableTh,\n          | 'compositeItem'\n          | 'isCompositeItemDisabled'\n          | 'depth'\n          | 'isExpandable'\n          | 'isExpanded'\n          | 'isStickyColumnPinned'\n          | 'newLabel'\n          | 'onClickToggle'\n          | 'parentId'\n          | 'scope'\n        >;\n        data: T;\n        rowIndex?: number | string;\n        isOpen?: HdsAdvancedTableExpandState;\n      },\n    ];\n    emptyState?: [];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsAdvancedTable<\n  T = HdsAdvancedTableModel,\n> extends Component<HdsAdvancedTableSignature<T>> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  @tracked\n  private _selectAllCheckbox?: HdsFormCheckboxBaseSignature['Element'] =\n    undefined;\n  @tracked private _isSelectAllCheckboxSelected?: boolean = undefined;\n  @tracked private _tableHeight = 0;\n  private _selectableRows: HdsAdvancedTableSelectableRow[] = [];\n  private _isBulkSelectionChange = false;\n  private _captionId = 'caption-' + guidFor(this);\n  private _scrollHandler!: (event: Event) => void;\n  private _dragOverHandler!: (event: DragEvent) => void;\n  private _resizeObserver!: ResizeObserver;\n  private _theadElement!: HTMLDivElement;\n  private _scrollWrapperElement!: HTMLDivElement;\n\n  @tracked scrollIndicatorDimensions = DEFAULT_SCROLL_DIMENSIONS;\n  @tracked isStickyColumnPinned = false;\n  @tracked isStickyHeaderPinned = false;\n  @tracked hasPinnedFirstColumn: boolean | undefined = undefined;\n  @tracked reorderedMessageText = '';\n  @tracked showScrollIndicatorLeft = false;\n  @tracked showScrollIndicatorRight = false;\n  @tracked showScrollIndicatorTop = false;\n  @tracked showScrollIndicatorBottom = false;\n  @tracked stickyColumnOffset = '0px';\n\n  // sorting properties\n  @tracked currentSortBy?: string;\n  @tracked currentSortOrder: HdsAdvancedTableThSortOrder =\n    HdsAdvancedTableThSortOrderValues.Asc;\n\n  // row expansion properties\n  expandedRowIds = new TrackedSet<string>();\n\n  private _setUpScrollWrapper = modifier((element: HTMLDivElement) => {\n    this._scrollWrapperElement = element;\n\n    const updateHorizontalScrollIndicators = () => {\n      this.showScrollIndicatorRight = element.clientWidth < element.scrollWidth;\n    };\n\n    const updateBottomScrollIndicator = () => {\n      // when hasReorderableColumns is true, the reorder handles are absolutely\n      // positioned with translateY(50%), which causes them to overflow the\n      // header's bottom edge by half their height, inflating scrollHeight even\n      // when there is no actual scrollable content. visibility:hidden means\n      // getBoundingClientRect() returns zeros at mount time, so we use\n      // offsetHeight / 2 instead.\n      let reorderHandleOverflow = 0;\n      if (this.args.hasReorderableColumns) {\n        const firstHandle = this._theadElement?.querySelector(\n          '.hds-advanced-table__th-reorder-handle'\n        ) as HTMLElement;\n        if (firstHandle) {\n          reorderHandleOverflow = firstHandle.offsetHeight / 2;\n        }\n      }\n\n      this.showScrollIndicatorBottom =\n        element.scrollHeight - reorderHandleOverflow - element.clientHeight > 0;\n    };\n\n    this._scrollHandler = () => {\n      this._updateScrollIndicators(element);\n    };\n\n    this._dragOverHandler = (event: DragEvent) => {\n      if (this.args.hasReorderableColumns !== true) {\n        return;\n      }\n\n      const canScrollHorizontally = element.scrollWidth > element.clientWidth;\n\n      if (!canScrollHorizontally) {\n        return;\n      }\n\n      const firstReorderDropTarget = element.querySelector(\n        '.hds-advanced-table__th-reorder-drop-target'\n      );\n\n      if (firstReorderDropTarget === null) {\n        return;\n      }\n\n      const stickyColumnHeaders = element.querySelectorAll(\n        '.hds-advanced-table__th--is-sticky-column'\n      );\n      const lastStickyColumnHeader = stickyColumnHeaders[\n        stickyColumnHeaders.length - 1\n      ] as HTMLDivElement | undefined;\n\n      const leftVisibleEdge =\n        lastStickyColumnHeader?.getBoundingClientRect().right ??\n        firstReorderDropTarget.getBoundingClientRect().left;\n\n      const leftScrollTrigger =\n        lastStickyColumnHeader !== undefined\n          ? leftVisibleEdge\n          : leftVisibleEdge + REORDER_EDGE_SCROLL_TRIGGER_PX;\n\n      const { right } = element.getBoundingClientRect();\n      const rightScrollTrigger = right - REORDER_EDGE_SCROLL_TRIGGER_PX;\n\n      if (event.clientX <= leftScrollTrigger) {\n        element.scrollBy({ left: -REORDER_EDGE_SCROLL_STEP_PX });\n      } else if (event.clientX >= rightScrollTrigger) {\n        element.scrollBy({ left: REORDER_EDGE_SCROLL_STEP_PX });\n      }\n    };\n\n    element.addEventListener('scroll', this._scrollHandler);\n    element.addEventListener('dragover', this._dragOverHandler);\n\n    const updateMeasurements = () => {\n      const { isSelectable = false } = this.args;\n\n      const newTableHeight = element.offsetHeight;\n\n      const newDimensions = getScrollIndicatorDimensions(\n        element,\n        this._theadElement,\n        this.hasStickyFirstColumn ? true : false,\n        this.isStickyColumnPinned\n      );\n\n      const setUpdatedMeasurements = () => {\n        if (this.isDestroying || this.isDestroyed) {\n          return;\n        }\n\n        const isSameBottom =\n          this.scrollIndicatorDimensions.bottom === newDimensions.bottom;\n        const isSameHeight =\n          this.scrollIndicatorDimensions.height === newDimensions.height;\n        const isSameLeft =\n          this.scrollIndicatorDimensions.left === newDimensions.left;\n        const isSameRight =\n          this.scrollIndicatorDimensions.right === newDimensions.right;\n\n        if (\n          isSameBottom &&\n          isSameHeight &&\n          isSameLeft &&\n          isSameRight &&\n          this._tableHeight === newTableHeight\n        ) {\n          return;\n        }\n\n        this._tableHeight = newTableHeight;\n        this.scrollIndicatorDimensions = newDimensions;\n\n        if (this.hasStickyFirstColumn) {\n          this.stickyColumnOffset = getStickyColumnLeftOffset(\n            this._theadElement,\n            isSelectable,\n            this.isStickyColumnPinned\n          );\n        }\n      };\n\n      window.requestAnimationFrame(setUpdatedMeasurements);\n    };\n\n    this._resizeObserver = new ResizeObserver((entries) => {\n      entries.forEach(() => {\n        updateMeasurements();\n        updateHorizontalScrollIndicators();\n        updateBottomScrollIndicator();\n      });\n    });\n\n    this._resizeObserver.observe(element);\n\n    updateMeasurements();\n\n    // on render check if should show right scroll indicator\n    updateHorizontalScrollIndicators();\n\n    // on render check if should show bottom scroll indicator\n    updateBottomScrollIndicator();\n\n    return () => {\n      element.removeEventListener('scroll', this._scrollHandler);\n      element.removeEventListener('dragover', this._dragOverHandler);\n      this._resizeObserver.disconnect();\n    };\n  });\n\n  private _setUpThead = modifier((element: HTMLDivElement) => {\n    this._theadElement = element;\n  });\n\n  private _syncSortArgs = modifier(() => {\n    const { sortBy, sortOrder } = this.args;\n\n    if (sortBy !== undefined) {\n      this.currentSortBy = sortBy;\n    }\n\n    if (sortOrder !== undefined) {\n      this.currentSortOrder = sortOrder;\n    }\n  });\n\n  constructor(owner: Owner, args: HdsAdvancedTableSignature<T>['Args']) {\n    super(owner, args);\n\n    const { hasStickyFirstColumn, model } = args;\n\n    this._runAssertions();\n\n    this._initializeExpandedRows(model);\n\n    if (hasStickyFirstColumn) {\n      this.hasPinnedFirstColumn = true;\n    }\n  }\n\n  get childrenKey(): string {\n    return this.args.childrenKey ?? 'children';\n  }\n\n  get hasRowsWithChildren(): boolean {\n    const { model } = this.args;\n\n    return model.some((record) => {\n      const children = (record as Record<string, unknown>)[this.childrenKey] as\n        | Record<string, unknown>[]\n        | undefined;\n\n      return Array.isArray(children) && children.length > 0;\n    });\n  }\n\n  @cached\n  get expandableRowIds(): string[] {\n    const { model } = this.args;\n\n    const ids: string[] = [];\n\n    const collect = (items: Record<string, unknown>[]) => {\n      items.forEach((item) => {\n        const children = item[this.childrenKey] as\n          | Record<string, unknown>\n          | undefined;\n\n        if (Array.isArray(children) && children.length > 0) {\n          ids.push(guidFor(item));\n\n          collect(children);\n        }\n      });\n    };\n\n    collect(model as Record<string, unknown>[]);\n\n    return ids;\n  }\n\n  get isAllExpanded(): boolean {\n    if (this.expandableRowIds.length === 0) {\n      return false;\n    }\n\n    return this.expandableRowIds.every((id) => this.expandedRowIds.has(id));\n  }\n\n  get sortCriteria(): string | HdsAdvancedTableSortingFunction<unknown> {\n    const { columns } = this.args;\n\n    const currentColumn = columns.find(\n      (column) => column.key === this.currentSortBy\n    );\n\n    if (\n      currentColumn?.sortingFunction &&\n      typeof currentColumn.sortingFunction === 'function'\n    ) {\n      return currentColumn.sortingFunction;\n    } else {\n      return `${this.currentSortBy}:${this.currentSortOrder}`;\n    }\n  }\n\n  get isEmpty(): boolean {\n    const { model } = this.args;\n\n    return model.length === 0;\n  }\n\n  get identityKey(): string | undefined {\n    // we have to provide a way for the consumer to pass undefined because Ember tries to interpret undefined as missing an arg and therefore falls back to the default\n    if (this.args.identityKey === 'none') {\n      return undefined;\n    } else {\n      return this.args.identityKey ?? '@identity';\n    }\n  }\n\n  get hasStickyFirstColumn(): boolean | undefined {\n    // The user-controlled `hasPinnedFirstColumn` variable takes precedence over the model's `hasStickyFirstColumn` property.\n    if (this.hasPinnedFirstColumn !== undefined) {\n      return this.hasPinnedFirstColumn;\n    } else if (this.args.hasStickyFirstColumn === false) {\n      return this.args.hasStickyFirstColumn;\n    }\n\n    return undefined;\n  }\n\n  get sortedMessageText(): string {\n    const { sortedMessageText } = this.args;\n\n    if (sortedMessageText !== undefined) {\n      return sortedMessageText;\n    } else if (this.currentSortBy !== undefined) {\n      // we should allow the user to define a custom value here (e.g., for i18n) - tracked with HDS-965\n      return `Sorted by ${this.currentSortBy} ${this.currentSortOrder}ending`;\n    } else {\n      return '';\n    }\n  }\n\n  get isSelectable(): boolean {\n    const { isSelectable = false } = this.args;\n\n    if (this.hasRowsWithChildren) {\n      assert(\n        '@isSelectable must not be true if there are nested rows.',\n        !isSelectable\n      );\n      return isSelectable;\n    }\n\n    return isSelectable;\n  }\n\n  get isStriped(): boolean {\n    const { isStriped = false } = this.args;\n\n    if (this.hasRowsWithChildren) {\n      assert(\n        '@isStriped must not be true if there are nested rows.',\n        !isStriped\n      );\n      return isStriped;\n    }\n\n    return isStriped;\n  }\n\n  get density(): HdsAdvancedTableDensities {\n    const { density = DEFAULT_DENSITY } = this.args;\n\n    assert(\n      `@density for \"Hds::Table\" must be one of the following: ${DENSITIES.join(\n        ', '\n      )}; received: ${density}`,\n      DENSITIES.includes(density)\n    );\n\n    return density;\n  }\n\n  get hasStickyHeader(): boolean {\n    if (this.args.maxHeight && this.args.hasStickyHeader !== false) {\n      return true;\n    } else if (this.args.hasStickyHeader && !this.args.maxHeight) {\n      assert('Must set @maxHeight to use @hasStickyHeader.', false);\n    }\n\n    return false;\n  }\n\n  get valign(): HdsAdvancedTableVerticalAlignment {\n    const { valign = DEFAULT_VALIGN } = this.args;\n\n    assert(\n      `@valign for \"Hds::Table\" must be one of the following: ${VALIGNMENTS.join(\n        ', '\n      )}; received: ${valign}`,\n      VALIGNMENTS.includes(valign)\n    );\n\n    return valign;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-advanced-table'];\n\n    if (this.isStriped) {\n      classes.push('hds-advanced-table--striped');\n    }\n\n    if (this.density) {\n      classes.push(`hds-advanced-table--density-${this.density}`);\n    }\n\n    if (this.valign) {\n      classes.push(`hds-advanced-table--valign-${this.valign}`);\n    }\n\n    if (this.hasRowsWithChildren) {\n      classes.push(`hds-advanced-table--nested`);\n    }\n\n    if (this.hasStickyFirstColumn) {\n      classes.push('hds-advanced-table--has-sticky-first-column');\n    }\n\n    if (this.hasStickyFirstColumn && this.isStickyColumnPinned) {\n      classes.push('hds-advanced-table--sticky-first-column-pinned');\n    }\n\n    return classes.join(' ');\n  }\n\n  get theadClassNames(): string {\n    const { hasResizableColumns } = this.args;\n\n    const classes = ['hds-advanced-table__thead'];\n\n    if (this.hasStickyHeader) {\n      classes.push('hds-advanced-table__thead--sticky');\n    }\n\n    if (this.isStickyHeaderPinned) {\n      classes.push('hds-advanced-table__thead--is-pinned');\n    }\n\n    if (hasResizableColumns) {\n      classes.push('hds-advanced-table__thead--has-resizable-columns');\n    }\n\n    return classes.join(' ');\n  }\n\n  // these bridge the gap between strict TS and dynamic Glimmer templates\n  asRowData = (source: Record<string, unknown>): T => source as unknown as T;\n  asScope = (scope: string): 'col' | 'row' => scope as 'col' | 'row';\n  // flattens the row interface to fix the potentially infinite nesting of rows with children\n  asTr = (comp: unknown) => comp as ComponentLike<YieldedHdsAdvancedTableTr<T>>;\n\n  private _initializeExpandedRows(model: T[]) {\n    const traverse = (items: Record<string, unknown>[]) => {\n      items.forEach((item) => {\n        if (item['isOpen'] === true) {\n          this.expandedRowIds.add(guidFor(item));\n        }\n\n        const children = item[this.childrenKey] as\n          | Record<string, unknown>[]\n          | undefined;\n\n        if (Array.isArray(children) && children.length > 0) {\n          traverse(children);\n        }\n      });\n    };\n\n    traverse(model as Record<string, unknown>[]);\n  }\n\n  private _runAssertions() {\n    const {\n      columns,\n      hasReorderableColumns,\n      hasResizableColumns,\n      hasStickyFirstColumn,\n    } = this.args;\n\n    if (this.hasRowsWithChildren) {\n      const sortableColumns = columns.filter((column) => column.isSortable);\n      const sortableColumnLabels = sortableColumns.map(\n        (column) => column.label\n      );\n\n      assert(\n        'Cannot have reorderable columns if there are nested rows.',\n        !hasReorderableColumns\n      );\n\n      assert(\n        `Cannot have sortable columns if there are nested rows. Sortable columns are ${sortableColumnLabels.toString()}`,\n        sortableColumns.length === 0\n      );\n\n      assert(\n        'Cannot have a sticky first column if there are nested rows.',\n        hasStickyFirstColumn === undefined\n      );\n\n      assert(\n        `Cannot have resizable columns if there are nested rows.`,\n        !hasResizableColumns\n      );\n    }\n  }\n\n  private _onColumnReorder: HdsAdvancedTableColumnReorderCallback = ({\n    column,\n    newOrder,\n    insertedAt,\n  }) => {\n    // Guard against accessing hdsIntl service after component destruction\n    if (this.isDestroying || this.isDestroyed) return;\n\n    const { reorderedMessageText } = this.args;\n\n    if (reorderedMessageText !== undefined) {\n      this.reorderedMessageText = reorderedMessageText;\n    } else {\n      const newPosition = insertedAt + 1;\n      const translatedReorderedMessageText = this.hdsIntl.t(\n        'hds.advanced-table.reordered-message',\n        {\n          default: `Moved ${column.label} column to position ${newPosition}`,\n          columnLabel: column.label,\n          newPosition,\n        }\n      );\n\n      this.reorderedMessageText = translatedReorderedMessageText;\n    }\n\n    this.args.onColumnReorder?.({\n      column,\n      newOrder,\n      insertedAt,\n    });\n  };\n\n  onSelectionChangeCallback(\n    checkbox?: HdsFormCheckboxBaseSignature['Element'],\n    selectionKey?: string\n  ): void {\n    const { onSelectionChange } = this.args;\n\n    if (typeof onSelectionChange !== 'function') return;\n\n    onSelectionChange({\n      selectionKey: selectionKey,\n      selectionCheckboxElement: checkbox,\n      selectedRowsKeys: this._selectableRows.reduce<string[]>((acc, row) => {\n        if (row.checkbox.checked) {\n          acc.push(row.selectionKey);\n        }\n        return acc;\n      }, []),\n      selectableRowsStates: this._selectableRows.reduce(\n        (\n          acc: { selectionKey: string; isSelected: boolean | undefined }[],\n          row\n        ) => {\n          acc.push({\n            selectionKey: row.selectionKey,\n            isSelected: row.checkbox.checked,\n          });\n          return acc;\n        },\n        []\n      ),\n    });\n  }\n\n  @action\n  toggleExpandAll() {\n    const allIds = this.expandableRowIds;\n    const isAllExpanded = allIds.every((id) => this.expandedRowIds.has(id));\n\n    if (isAllExpanded) {\n      this.expandedRowIds.clear();\n    } else {\n      // Add all IDs efficiently\n      allIds.forEach((id) => this.expandedRowIds.add(id));\n    }\n  }\n\n  @action\n  toggleRow(rowId: string) {\n    if (this.expandedRowIds.has(rowId)) {\n      this.expandedRowIds.delete(rowId);\n    } else {\n      this.expandedRowIds.add(rowId);\n    }\n  }\n\n  @action\n  onSelectionAllChange(): void {\n    this._isBulkSelectionChange = true;\n\n    this._selectableRows.forEach((row) => {\n      row.checkbox.checked = this._selectAllCheckbox?.checked ?? false;\n      row.checkbox.dispatchEvent(new Event('change', { bubbles: true }));\n    });\n\n    this._isBulkSelectionChange = false;\n    this._isSelectAllCheckboxSelected =\n      this._selectAllCheckbox?.checked ?? false;\n    this.onSelectionChangeCallback(this._selectAllCheckbox, 'all');\n  }\n\n  @action\n  onSelectionRowChange(\n    checkbox?: HdsFormCheckboxBaseSignature['Element'],\n    selectionKey?: string\n  ): void {\n    if (this._isBulkSelectionChange) {\n      return;\n    }\n\n    this.setSelectAllState();\n    this.onSelectionChangeCallback(checkbox, selectionKey);\n  }\n\n  @action\n  didInsertSelectAllCheckbox(\n    checkbox: HdsFormCheckboxBaseSignature['Element']\n  ): void {\n    this._selectAllCheckbox = checkbox;\n  }\n\n  @action\n  willDestroySelectAllCheckbox(): void {\n    this._selectAllCheckbox = undefined;\n  }\n\n  @action\n  didInsertRowCheckbox(\n    checkbox: HdsFormCheckboxBaseSignature['Element'],\n    selectionKey?: string\n  ): void {\n    if (selectionKey) {\n      this._selectableRows.push({ selectionKey, checkbox });\n    }\n    this.setSelectAllState();\n  }\n\n  @action\n  willDestroyRowCheckbox(selectionKey?: string): void {\n    if (selectionKey === undefined) {\n      return;\n    }\n\n    const index = this._selectableRows.findIndex(\n      (row) => row.selectionKey === selectionKey\n    );\n\n    if (index === -1) {\n      return;\n    }\n\n    this._selectableRows.splice(index, 1);\n\n    this.setSelectAllState();\n  }\n\n  @action\n  setSelectAllState(): void {\n    if (this._selectAllCheckbox) {\n      const selectableRowsCount = this._selectableRows.length;\n      const selectedRowsCount = this._selectableRows.filter(\n        (row) => row.checkbox.checked\n      ).length;\n\n      this._selectAllCheckbox.checked =\n        selectedRowsCount === selectableRowsCount;\n      this._selectAllCheckbox.indeterminate =\n        selectedRowsCount > 0 && selectedRowsCount < selectableRowsCount;\n      this._isSelectAllCheckboxSelected = this._selectAllCheckbox.checked;\n    }\n  }\n\n  @action\n  setSortBy(columnKey: HdsAdvancedTableColumn['key']): void {\n    const { onSort } = this.args;\n\n    if (columnKey === undefined) {\n      return;\n    }\n\n    let newSortOrder = HdsAdvancedTableThSortOrderValues.Asc;\n\n    if (this.currentSortBy === columnKey) {\n      newSortOrder =\n        this.currentSortOrder === HdsAdvancedTableThSortOrderValues.Asc\n          ? HdsAdvancedTableThSortOrderValues.Desc\n          : HdsAdvancedTableThSortOrderValues.Asc;\n    }\n\n    this.currentSortBy = columnKey;\n    this.currentSortOrder = newSortOrder;\n\n    if (typeof onSort === 'function') {\n      onSort(columnKey, newSortOrder);\n    }\n  }\n\n  private _updateScrollIndicators(element: HTMLElement): void {\n    // 6px as a buffer so the shadow doesn't appear over the border radius on the edge of the table\n    const SCROLL_BUFFER = 6;\n\n    // left scroll indicator and sticky column styles\n    if (element.scrollLeft > SCROLL_BUFFER) {\n      if (this.hasStickyFirstColumn) {\n        this.isStickyColumnPinned = true;\n      }\n      if (!this.showScrollIndicatorLeft) {\n        this.showScrollIndicatorLeft = true;\n      }\n    } else if (element.scrollLeft === 0 && this.showScrollIndicatorLeft) {\n      this.isStickyColumnPinned = false;\n      this.showScrollIndicatorLeft = false;\n    }\n\n    // the right edge is how far the user can scroll, which is the full width of the table - the visible section of the table (also subtract the buffer)\n    const rightEdge = element.scrollWidth - element.clientWidth - SCROLL_BUFFER;\n\n    // right scroll indicator\n    if (element.scrollLeft < rightEdge) {\n      this.showScrollIndicatorRight = true;\n    } else {\n      this.showScrollIndicatorRight = false;\n    }\n\n    // sticky header\n    if (element.scrollTop > 0) {\n      if (this.hasStickyHeader) {\n        this.isStickyHeaderPinned = true;\n      }\n      this.showScrollIndicatorTop = true;\n    } else {\n      if (this.hasStickyHeader) {\n        this.isStickyHeaderPinned = false;\n      }\n      this.showScrollIndicatorTop = false;\n    }\n\n    // the bottom edge is how far the user can scroll, which is the full height of the table - the visible section of the table (also subtract the buffer)\n    const bottomEdge =\n      element.scrollHeight - element.clientHeight - SCROLL_BUFFER;\n\n    // bottom scroll indicator\n    if (element.scrollTop < bottomEdge) {\n      this.showScrollIndicatorBottom = true;\n    } else {\n      this.showScrollIndicatorBottom = false;\n    }\n  }\n\n  private _onPinFirstColumn = (): void => {\n    this.hasPinnedFirstColumn = this.hasPinnedFirstColumn ? false : true;\n    // we need to retrigger the scroll indicator updates if the pinned state is changed when the table is already scrolled\n    this._updateScrollIndicators(this._scrollWrapperElement);\n  };\n\n  <template>\n    <div class=\"hds-advanced-table__actions-container-wrapper\">\n      {{#if (has-block \"actions\")}}\n        <div class=\"hds-advanced-table__actions\">\n          {{yield (hash FilterBar=(component HdsFilterBar)) to=\"actions\"}}\n        </div>\n      {{/if}}\n\n      <div\n        class=\"hds-advanced-table__container\n          {{(if\n            this.isStickyHeaderPinned\n            'hds-advanced-table__container--header-is-pinned'\n          )}}\"\n        {{this._syncSortArgs}}\n        ...attributes\n      >\n        {{! Caption }}\n        <div\n          id={{this._captionId}}\n          class=\"sr-only hds-advanced-table__caption\"\n          aria-live=\"polite\"\n        >\n          {{@caption}}\n          {{this.sortedMessageText}}\n          {{this.reorderedMessageText}}\n        </div>\n\n        <HdsAdvancedTableColumnManager\n          @columns={{@columns}}\n          @columnOrder={{@columnOrder}}\n          @hasReorderableColumns={{@hasReorderableColumns}}\n          @hasStickyFirstColumn={{this.hasStickyFirstColumn}}\n          @isSelectable={{@isSelectable}}\n          @onColumnReorder={{this._onColumnReorder}}\n          as |CM|\n        >\n          <HdsComposite as |C|>\n            {{! Grid }}\n            <div\n              class={{this.classNames}}\n              role=\"grid\"\n              aria-describedby={{this._captionId}}\n              {{style\n                grid-template-columns=CM.gridTemplateColumns\n                --hds-advanced-table-sticky-column-offset=this.stickyColumnOffset\n                max-height=@maxHeight\n              }}\n              {{this._setUpScrollWrapper}}\n              {{CM.syncColumnOrder CM.columns @columnOrder}}\n              {{CM.syncWidthValues}}\n              {{C.composite}}\n            >\n              {{! Header }}\n              <div\n                class={{this.theadClassNames}}\n                role=\"rowgroup\"\n                {{this._setUpThead}}\n                {{on \"dragleave\" (fn CM.setReorderHoveredColumnKey null)}}\n              >\n                <HdsAdvancedTableTr\n                  @compositeGroup={{C.group}}\n                  @compositeItem={{C.item}}\n                  @selectionScope=\"col\"\n                  @onClickSortBySelected={{if\n                    @selectableColumnKey\n                    (fn this.setSortBy @selectableColumnKey)\n                  }}\n                  @sortBySelectedOrder={{if\n                    (eq this.currentSortBy @selectableColumnKey)\n                    this.currentSortOrder\n                  }}\n                  @isSelectable={{this.isSelectable}}\n                  @onSelectionChange={{this.onSelectionAllChange}}\n                  @didInsert={{this.didInsertSelectAllCheckbox}}\n                  @willDestroy={{this.willDestroySelectAllCheckbox}}\n                  @selectionAriaLabelSuffix=\"all rows\"\n                  @hasStickyColumn={{this.hasStickyFirstColumn}}\n                  @isStickyColumnPinned={{this.isStickyColumnPinned}}\n                >\n                  {{#each CM.orderedColumns as |column|}}\n                    <HdsAdvancedTableTh\n                      @align={{column.align}}\n                      @column={{column}}\n                      @compositeItem={{C.item}}\n                      @draggedColumnKey={{CM.draggedColumnKey}}\n                      @firstColumnKey={{CM.firstColumnKey}}\n                      @firstNonStickyColumnKey={{CM.firstNonStickyColumnKey}}\n                      @hasReorderableColumns={{@hasReorderableColumns}}\n                      @hasResizableColumns={{@hasResizableColumns}}\n                      @hasSelectableRows={{this.isSelectable}}\n                      @hasStickyFirstColumn={{this.hasStickyFirstColumn}}\n                      @isStickyColumn={{if\n                        (and\n                          (eq column.key CM.firstColumnKey)\n                          (notEq this.hasStickyFirstColumn undefined)\n                        )\n                        this.hasStickyFirstColumn\n                        undefined\n                      }}\n                      @isStickyColumnPinned={{this.isStickyColumnPinned}}\n                      @lastColumnKey={{CM.lastColumnKey}}\n                      @reorderHoveredColumnKey={{CM.reorderHoveredColumnKey}}\n                      @draggedColumnSiblingColumnKeys={{if\n                        CM.draggedColumnKey\n                        (CM.getSiblingColumnKeys CM.draggedColumnKey)\n                      }}\n                      @tableHeight={{this._tableHeight}}\n                      @tooltip={{column.tooltip}}\n                      @hasExpandAllButton={{this.hasRowsWithChildren}}\n                      @isExpanded={{this.isAllExpanded}}\n                      @isExpandable={{column.isExpandable}}\n                      @sortOrder={{if\n                        (eq column.key this.currentSortBy)\n                        this.currentSortOrder\n                      }}\n                      @onBeginColumnResize={{CM.beginColumnResize}}\n                      @onClickSort={{if\n                        column.isSortable\n                        (fn this.setSortBy column.key)\n                      }}\n                      @onClickToggle={{this.toggleExpandAll}}\n                      @onColumnResize={{@onColumnResize}}\n                      @onCommitColumnWidths={{CM.commitColumnWidths}}\n                      @onGetAppliedWidth={{CM.getAppliedWidth}}\n                      @onGetRenderedWidth={{CM.getRenderedWidth}}\n                      @onMoveColumnToTerminalPosition={{CM.moveColumnToTerminalPosition}}\n                      @onPinFirstColumn={{this._onPinFirstColumn}}\n                      @onReorderDrop={{CM.moveColumnToDropTarget}}\n                      @onResetTransientColumnWidths={{CM.resetTransientColumnWidths}}\n                      @onResizeColumnByDelta={{CM.resizeColumnByDelta}}\n                      @onRestoreColumnWidth={{CM.restoreColumnWidth}}\n                      @onSetDraggedColumnKey={{CM.setDraggedColumnKey}}\n                      @onSetReorderHoveredColumnKey={{CM.setReorderHoveredColumnKey}}\n                      @onStepColumn={{CM.stepColumn}}\n                      {{CM.syncThElements column.key}}\n                    >\n                      {{column.label}}\n                    </HdsAdvancedTableTh>\n                  {{/each}}\n                </HdsAdvancedTableTr>\n\n                {{#if this.showScrollIndicatorTop}}\n                  <div\n                    class=\"hds-advanced-table__scroll-indicator hds-advanced-table__scroll-indicator-top\"\n                  />\n                {{/if}}\n              </div>\n\n              {{! Body }}\n              <HdsAdvancedTableBody\n                @childrenKey={{this.childrenKey}}\n                @expandedRowIds={{this.expandedRowIds}}\n                {{! @glint-expect-error: [HDS-4380](https://hashicorp.atlassian.net/browse/HDS-4380) }}\n                @sortedModel={{sortBy this.sortCriteria @model}}\n                as |B|\n              >\n                {{#each B.rows key=\"id\" as |row index|}}\n                  {{#let\n                    (and (not this.hasRowsWithChildren) (not row.hasChildren))\n                    as |isSelectionAllowed|\n                  }}\n                    {{yield\n                      (hash\n                        Tr=(this.asTr\n                          (component\n                            HdsAdvancedTableTr\n                            columnOrder=CM.columnOrder\n                            compositeGroup=C.group\n                            compositeItem=C.item\n                            data=(this.asRowData row.source)\n                            depth=row.depth\n                            isCompositeItemDisabled=(not row.isVisible)\n                            isParentRow=row.hasChildren\n                            isLastRow=(and\n                              (eq row.id B.lastVisibleRowId)\n                              (notEq B.lastVisibleRowId undefined)\n                            )\n                            displayRow=row.isVisible\n                            selectionScope=(if\n                              isSelectionAllowed (this.asScope \"row\")\n                            )\n                            isSelectable=(if\n                              isSelectionAllowed this.isSelectable\n                            )\n                            onSelectionChange=(if\n                              isSelectionAllowed this.onSelectionRowChange\n                            )\n                            didInsert=(if\n                              isSelectionAllowed this.didInsertRowCheckbox\n                            )\n                            willDestroy=(if\n                              isSelectionAllowed this.willDestroyRowCheckbox\n                            )\n                            hasStickyColumn=this.hasStickyFirstColumn\n                            isStickyColumnPinned=this.isStickyColumnPinned\n                          )\n                        )\n                        Th=(component\n                          HdsAdvancedTableTh\n                          compositeItem=C.item\n                          isCompositeItemDisabled=(not row.isVisible)\n                          isExpandable=row.hasChildren\n                          isExpanded=row.isExpanded\n                          onClickToggle=(fn this.toggleRow row.id)\n                          depth=row.depth\n                          scope=\"row\"\n                          newLabel=row.id\n                          parentId=undefined\n                          isStickyColumnPinned=this.isStickyColumnPinned\n                        )\n                        Td=(component\n                          HdsAdvancedTableTd\n                          align=@align\n                          compositeItem=C.item\n                          isCompositeItemDisabled=(not row.isVisible)\n                        )\n                        data=(this.asRowData row.source)\n                        rowIndex=index\n                        isOpen=row.isExpanded\n                      )\n                      to=\"body\"\n                    }}\n                  {{/let}}\n                {{/each}}\n              </HdsAdvancedTableBody>\n            </div>\n          </HdsComposite>\n        </HdsAdvancedTableColumnManager>\n\n        {{! Empty state }}\n        {{#if this.isEmpty}}\n          <div class=\"hds-advanced-table__empty-state\">\n            {{#if (has-block \"emptyState\")}}\n              {{yield to=\"emptyState\"}}\n            {{else}}\n              <HdsApplicationState as |A|>\n                <A.Header\n                  @title={{hdsT\n                    \"hds.components.advanced-table.empty-state.title\"\n                    default=\"No data available\"\n                  }}\n                />\n                <A.Body\n                  @text={{hdsT\n                    \"hds.components.advanced-table.empty-state.description\"\n                    default=\"There is currently no data to display in the table.\"\n                  }}\n                />\n              </HdsApplicationState>\n            {{/if}}\n          </div>\n        {{/if}}\n\n        {{#if this.showScrollIndicatorLeft}}\n          <div\n            class=\"hds-advanced-table__scroll-indicator hds-advanced-table__scroll-indicator-left\"\n            {{style\n              height=this.scrollIndicatorDimensions.height\n              left=this.scrollIndicatorDimensions.left\n            }}\n          />\n        {{/if}}\n\n        {{#if this.showScrollIndicatorRight}}\n          <div\n            class=\"hds-advanced-table__scroll-indicator hds-advanced-table__scroll-indicator-right\"\n            {{style\n              height=this.scrollIndicatorDimensions.height\n              right=this.scrollIndicatorDimensions.right\n            }}\n          />\n        {{/if}}\n\n        {{#if (and this.showScrollIndicatorBottom (not this.isEmpty))}}\n          <div\n            class=\"hds-advanced-table__scroll-indicator hds-advanced-table__scroll-indicator-bottom\"\n            {{style\n              bottom=this.scrollIndicatorDimensions.bottom\n              width=this.scrollIndicatorDimensions.width\n            }}\n          />\n        {{/if}}\n      </div>\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\nimport type { HdsIconSignature } from '../icon/index.gts';\nimport type HdsIntlService from '../../../services/hds-intl';\n\nexport enum HdsStepperStatusesValues {\n  Incomplete = 'incomplete',\n  Progress = 'progress',\n  Processing = 'processing',\n  Complete = 'complete',\n}\n\nexport type HdsStepperStatuses = `${HdsStepperStatusesValues}`;\n\nexport const HdsStepperStatusToIconsValues: Record<\n  HdsStepperStatusesValues,\n  HdsIconSignature['Args']['name']\n> = {\n  [HdsStepperStatusesValues.Incomplete]: 'circle',\n  [HdsStepperStatusesValues.Progress]: 'circle-half',\n  [HdsStepperStatusesValues.Processing]: 'loading',\n  [HdsStepperStatusesValues.Complete]: 'check-circle',\n};\n\nexport function HdsStepperStatusToSrOnlyText(\n  hdsIntl: HdsIntlService\n): Record<HdsStepperStatusesValues, string> {\n  return {\n    [HdsStepperStatusesValues.Incomplete]: '',\n    [HdsStepperStatusesValues.Progress]: hdsIntl.t(\n      'hds.components.stepper.progress',\n      {\n        default: '(current)',\n      }\n    ),\n    [HdsStepperStatusesValues.Processing]: hdsIntl.t(\n      'hds.components.stepper.processing',\n      {\n        default: '(in progress)',\n      }\n    ),\n    [HdsStepperStatusesValues.Complete]: hdsIntl.t(\n      'hds.components.stepper.complete',\n      {\n        default: '(complete)',\n      }\n    ),\n  };\n}\n\nexport enum HdsStepperTitleTagValues {\n  Div = 'div',\n  H1 = 'h1',\n  H2 = 'h2',\n  H3 = 'h3',\n  H4 = 'h4',\n  H5 = 'h5',\n  H6 = 'h6',\n}\n\nexport type HdsStepperTitleTags = `${HdsStepperTitleTagValues}`;\n\nexport type HdsStepperNavStepIds = string[];\n\nexport interface HdsStepperNavStep {\n  title: string;\n  description?: string;\n}\n\nexport enum HdsStepperNavStatusesValues {\n  Incomplete = 'incomplete',\n  Active = 'active',\n  Complete = 'complete',\n}\n\nexport type HdsStepperNavStatuses = `${HdsStepperNavStatusesValues}`;\n\nexport const HdsStepperNavStatusToIndicatorStatus: Record<\n  HdsStepperNavStatusesValues,\n  HdsStepperStatusesValues\n> = {\n  [HdsStepperNavStatusesValues.Incomplete]: HdsStepperStatusesValues.Incomplete,\n  [HdsStepperNavStatusesValues.Active]: HdsStepperStatusesValues.Progress,\n  [HdsStepperNavStatusesValues.Complete]: HdsStepperStatusesValues.Complete,\n};\n\nexport function HdsStepperNavStatusToSrOnlyText(\n  hdsIntl: HdsIntlService\n): Record<HdsStepperNavStatusesValues, string> {\n  return {\n    [HdsStepperNavStatusesValues.Incomplete]: '',\n    [HdsStepperNavStatusesValues.Active]: hdsIntl.t(\n      'hds.components.stepper.nav.active',\n      {\n        default: '(current)',\n      }\n    ),\n    [HdsStepperNavStatusesValues.Complete]: hdsIntl.t(\n      'hds.components.stepper.nav.complete',\n      { default: '(complete)' }\n    ),\n  };\n}\n\nexport type HdsStepperNavPanelIds = string[];\n\nexport type HdsStepperListStepIds = string[];\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\n\nimport HdsIcon from '../icon/index.gts';\nimport {\n  HdsBadgeColorValues,\n  HdsBadgeSizeValues,\n  HdsBadgeTypeValues,\n} from './types.ts';\nimport type { HdsBadgeColors, HdsBadgeSizes, HdsBadgeTypes } from './types.ts';\nimport type { HdsIconSignature } from '../icon/index.gts';\n\nexport const SIZES: HdsBadgeSizes[] = Object.values(HdsBadgeSizeValues);\nexport const TYPES: HdsBadgeTypes[] = Object.values(HdsBadgeTypeValues);\nexport const COLORS: HdsBadgeColors[] = Object.values(HdsBadgeColorValues);\nexport const DEFAULT_SIZE = HdsBadgeSizeValues.Medium;\nexport const DEFAULT_TYPE = HdsBadgeTypeValues.Filled;\nexport const DEFAULT_COLOR = HdsBadgeColorValues.Neutral;\n\nexport interface HdsBadgeSignature {\n  Args: {\n    size?: HdsBadgeSizes;\n    type?: HdsBadgeTypes;\n    color?: HdsBadgeColors;\n    text: string | number;\n    icon?: HdsIconSignature['Args']['name'];\n    isIconOnly?: boolean;\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsBadge extends Component<HdsBadgeSignature> {\n  get size() {\n    const { size = DEFAULT_SIZE } = this.args;\n\n    assert(\n      `@size for \"Hds::Badge\" must be one of the following: ${SIZES.join(\n        ', '\n      )}; received: ${size}`,\n      SIZES.includes(size)\n    );\n\n    return size;\n  }\n\n  get type() {\n    const { type = DEFAULT_TYPE } = this.args;\n\n    assert(\n      `@type for \"Hds::Badge\" must be one of the following: ${TYPES.join(\n        ', '\n      )}; received: ${type}`,\n      TYPES.includes(type)\n    );\n\n    return type;\n  }\n\n  get color() {\n    const { color = DEFAULT_COLOR } = this.args;\n\n    assert(\n      `@color for \"Hds::Badge\" must be one of the following: ${COLORS.join(\n        ', '\n      )}; received: ${color}`,\n      COLORS.includes(color)\n    );\n\n    return color;\n  }\n\n  get text() {\n    const { text } = this.args;\n\n    assert(\n      '@text for \"Hds::Badge\" must have a valid value',\n      text !== undefined\n    );\n\n    return text;\n  }\n\n  get isIconOnly() {\n    if (this.args.icon) {\n      return this.args.isIconOnly ?? false;\n    }\n\n    return false;\n  }\n\n  get classNames() {\n    const classes = ['hds-badge'];\n\n    // add a class based on the @size argument\n    classes.push(`hds-badge--size-${this.size}`);\n\n    // add a class based on the @type argument\n    classes.push(`hds-badge--type-${this.type}`);\n\n    // add a class based on the @color argument\n    classes.push(`hds-badge--color-${this.color}`);\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <div class={{this.classNames}} ...attributes>\n      {{#if @icon}}\n        <div class=\"hds-badge__icon\">\n          <HdsIcon @name={{@icon}} @size=\"16\" @stretched={{true}} />\n        </div>\n      {{/if}}\n      {{#if this.isIconOnly}}\n        <span class=\"sr-only\">{{this.text}}</span>\n      {{else}}\n        <div class=\"hds-badge__text\">\n          {{this.text}}\n        </div>\n      {{/if}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { hash } from '@ember/helper';\nimport { or } from 'ember-truth-helpers';\nimport style from 'ember-style-modifier';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport {\n  HdsDropdownPositionToPlacementValues,\n  HdsDropdownPositionValues,\n} from './types.ts';\nimport HdsPopoverPrimitive from '../popover-primitive/index.gts';\nimport HdsDropdownToggleButton from './toggle/button.gts';\nimport HdsDropdownToggleIcon from './toggle/icon.gts';\nimport HdsDropdownHeader from './header.gts';\nimport HdsDropdownListItemCheckbox from './list-item/checkbox.gts';\nimport HdsDropdownListItemCheckmark from './list-item/checkmark.gts';\nimport HdsDropdownListItemCopyItem from './list-item/copy-item.gts';\nimport HdsDropdownListItemDescription from './list-item/description.gts';\nimport HdsDropdownListItemGeneric from './list-item/generic.gts';\nimport HdsDropdownListItemInteractive from './list-item/interactive.gts';\nimport HdsDropdownListItemRadio from './list-item/radio.gts';\nimport HdsDropdownListItemSeparator from './list-item/separator.gts';\nimport HdsDropdownListItemTitle from './list-item/title.gts';\nimport HdsDropdownFooter from './footer.gts';\n\nimport type { HdsPopoverPrimitiveSignature } from '../popover-primitive/index.gts';\nimport type { HdsDropdownPositions } from './types.ts';\nimport type { HdsAnchoredPositionOptions } from '../../../modifiers/hds-anchored-position.ts';\n\nexport const DEFAULT_POSITION = HdsDropdownPositionValues.BottomRight;\nexport const POSITIONS: HdsDropdownPositions[] = Object.values(\n  HdsDropdownPositionValues\n);\n\nexport interface HdsDropdownSignature {\n  Args: {\n    height?: string;\n    isInline?: boolean;\n    isOpen?: HdsPopoverPrimitiveSignature['Args']['isOpen'];\n    listPosition?: HdsDropdownPositions;\n    width?: string;\n    enableCollisionDetection?: HdsAnchoredPositionOptions['enableCollisionDetection'];\n    preserveContentInDom?: boolean;\n    matchToggleWidth?: boolean;\n    onClose?: HdsPopoverPrimitiveSignature['Args']['onClose'];\n    onFocusOut?: HdsPopoverPrimitiveSignature['Args']['onFocusOut'];\n    boundary?: HdsAnchoredPositionOptions['boundary'];\n  };\n  Blocks: {\n    default: [\n      {\n        Footer?: typeof HdsDropdownFooter;\n        Header?: typeof HdsDropdownHeader;\n        Checkbox?: typeof HdsDropdownListItemCheckbox;\n        Checkmark?: typeof HdsDropdownListItemCheckmark;\n        CopyItem?: typeof HdsDropdownListItemCopyItem;\n        Description?: typeof HdsDropdownListItemDescription;\n        Generic?: typeof HdsDropdownListItemGeneric;\n        Interactive?: typeof HdsDropdownListItemInteractive;\n        Radio?: typeof HdsDropdownListItemRadio;\n        Separator?: typeof HdsDropdownListItemSeparator;\n        Title?: typeof HdsDropdownListItemTitle;\n        ToggleButton?: WithBoundArgs<\n          typeof HdsDropdownToggleButton,\n          'isOpen' | 'setupPrimitiveToggle'\n        >;\n        ToggleIcon?: WithBoundArgs<\n          typeof HdsDropdownToggleIcon,\n          'isOpen' | 'setupPrimitiveToggle'\n        >;\n        close: (event?: Event) => void;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsDropdown extends Component<HdsDropdownSignature> {\n  get listPosition(): HdsDropdownPositions {\n    const { listPosition = DEFAULT_POSITION } = this.args;\n\n    assert(\n      `@listPosition for \"Hds::Dropdown::Index\" must be one of the following: ${POSITIONS.join(\n        ', '\n      )}; received: ${listPosition}`,\n      POSITIONS.includes(listPosition)\n    );\n\n    return listPosition;\n  }\n\n  get enableCollisionDetection(): HdsAnchoredPositionOptions['enableCollisionDetection'] {\n    return this.args.enableCollisionDetection ?? false;\n  }\n\n  get matchToggleWidth(): HdsAnchoredPositionOptions['matchToggleWidth'] {\n    return this.args.matchToggleWidth ?? false;\n  }\n\n  get anchoredPositionOptions(): {\n    placement: HdsAnchoredPositionOptions['placement'];\n    offsetOptions: HdsAnchoredPositionOptions['offsetOptions'];\n    enableCollisionDetection: HdsAnchoredPositionOptions['enableCollisionDetection'];\n    matchToggleWidth: HdsAnchoredPositionOptions['matchToggleWidth'];\n    boundary: HdsAnchoredPositionOptions['boundary'];\n  } {\n    // custom options specific for the `RichTooltip` component\n    // for details see the `hds-anchored-position` modifier\n    return {\n      placement: HdsDropdownPositionToPlacementValues[this.listPosition],\n      offsetOptions: 4,\n      enableCollisionDetection: this.enableCollisionDetection ? 'flip' : false,\n      matchToggleWidth: this.matchToggleWidth,\n      boundary: this.args.boundary,\n    };\n  }\n\n  get classNames(): string {\n    const classes = ['hds-dropdown'];\n\n    // add a class based on the @isInline argument\n    if (this.args.isInline) {\n      classes.push('hds-dropdown--is-inline');\n    }\n\n    return classes.join(' ');\n  }\n\n  get classNamesContent(): string {\n    const classes = ['hds-dropdown__content'];\n\n    // add a class based on the @listPosition argument\n    // TODO: we preserved these classes to avoid introducing breaking changes for consumers who rely on these classes for tests, but we aim to remove them in the next major release\n    // context: https://github.com/hashicorp/design-system/pull/2309#discussion_r1706941892\n    classes.push(`hds-dropdown__content--position-${this.listPosition}`);\n\n    // add a class based on the @width or @matchToggleWidth arguments\n    if (this.args.width || this.args.matchToggleWidth) {\n      classes.push('hds-dropdown__content--fixed-width');\n    }\n\n    return classes.join(' ');\n  }\n\n  didInsertList = (element: HTMLUListElement): void => {\n    const checkmarkItems = element.querySelectorAll(`[role=\"option\"]`);\n    if (checkmarkItems.length) {\n      const toggleButtonId = element\n        .closest('.hds-dropdown')\n        ?.querySelector('.hds-dropdown-toggle-button')\n        ?.getAttribute('id');\n\n      element.setAttribute('role', 'listbox');\n\n      if (toggleButtonId) {\n        element.setAttribute('aria-labelledby', toggleButtonId);\n      }\n    }\n  };\n\n  <template>\n    <HdsPopoverPrimitive\n      @isOpen={{@isOpen}}\n      @onClose={{@onClose}}\n      @onFocusOut={{@onFocusOut}}\n      @boundary={{@boundary}}\n      @enableClickEvents={{true}}\n      as |PP|\n    >\n      <div\n        class={{this.classNames}}\n        ...attributes\n        {{PP.setupPrimitiveContainer}}\n      >\n        {{yield\n          (hash\n            ToggleButton=(component\n              HdsDropdownToggleButton\n              isOpen=PP.isOpen\n              setupPrimitiveToggle=PP.setupPrimitiveToggle\n            )\n            ToggleIcon=(component\n              HdsDropdownToggleIcon\n              isOpen=PP.isOpen\n              setupPrimitiveToggle=PP.setupPrimitiveToggle\n            )\n            close=PP.hidePopover\n          )\n        }}\n        <div\n          tabindex=\"-1\"\n          class={{this.classNamesContent}}\n          {{style width=@width max-height=@height}}\n          {{PP.setupPrimitivePopover\n            anchoredPositionOptions=this.anchoredPositionOptions\n          }}\n        >\n          {{#if (or PP.isOpen @preserveContentInDom)}}\n            {{yield (hash Header=HdsDropdownHeader close=PP.hidePopover)}}\n            <ul class=\"hds-dropdown__list\" {{didInsert this.didInsertList}}>\n              {{yield\n                (hash\n                  close=PP.hidePopover\n                  Checkbox=HdsDropdownListItemCheckbox\n                  Checkmark=HdsDropdownListItemCheckmark\n                  CopyItem=HdsDropdownListItemCopyItem\n                  Description=HdsDropdownListItemDescription\n                  Generic=HdsDropdownListItemGeneric\n                  Interactive=HdsDropdownListItemInteractive\n                  Radio=HdsDropdownListItemRadio\n                  Separator=HdsDropdownListItemSeparator\n                  Title=HdsDropdownListItemTitle\n                )\n              }}\n            </ul>\n            {{yield (hash close=PP.hidePopover Footer=HdsDropdownFooter)}}\n          {{/if}}\n        </div>\n      </div>\n    </HdsPopoverPrimitive>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { element } from 'ember-element-helper';\nimport { hash } from '@ember/helper';\n\nimport {\n  HdsLayoutFlexDirectionValues,\n  HdsLayoutFlexJustifyValues,\n  HdsLayoutFlexAlignValues,\n  HdsLayoutFlexGapValues,\n} from './types.ts';\nimport HdsLayoutFlexItem from './item.gts';\n\nimport type {\n  HdsLayoutFlexDirections,\n  HdsLayoutFlexJustifys,\n  HdsLayoutFlexAligns,\n  HdsLayoutFlexGaps,\n  AvailableTagNames,\n  AvailableElements,\n} from './types.ts';\n\nexport const DEFAULT_DIRECTION = HdsLayoutFlexDirectionValues.Row;\nexport const DIRECTIONS: HdsLayoutFlexDirections[] = Object.values(\n  HdsLayoutFlexDirectionValues\n);\nexport const JUSTIFYS: HdsLayoutFlexJustifys[] = Object.values(\n  HdsLayoutFlexJustifyValues\n);\nexport const ALIGNS: HdsLayoutFlexAligns[] = Object.values(\n  HdsLayoutFlexAlignValues\n);\nexport const DEFAULT_GAP = HdsLayoutFlexGapValues.Zero;\nexport const GAPS: HdsLayoutFlexGaps[] = Object.values(HdsLayoutFlexGapValues);\n\nexport interface HdsLayoutFlexSignature {\n  Args: {\n    tag?: AvailableTagNames;\n    direction?: HdsLayoutFlexDirections;\n    justify?: HdsLayoutFlexJustifys;\n    align?: HdsLayoutFlexAligns;\n    wrap?: boolean;\n    gap?: HdsLayoutFlexGaps | [HdsLayoutFlexGaps, HdsLayoutFlexGaps];\n    isInline?: boolean;\n  };\n  Blocks: {\n    default: [\n      {\n        Item?: typeof HdsLayoutFlexItem;\n      },\n    ];\n  };\n  Element: AvailableElements;\n}\n\nexport default class HdsLayoutFlex extends Component<HdsLayoutFlexSignature> {\n  get componentTag(): AvailableTagNames {\n    return this.args.tag ?? 'div';\n  }\n\n  get direction(): HdsLayoutFlexDirections {\n    const { direction = DEFAULT_DIRECTION } = this.args;\n\n    assert(\n      `@direction for \"Hds::Layout::Flex\" must be one of the following: ${DIRECTIONS.join(\n        ', '\n      )}; received: ${direction}`,\n      DIRECTIONS.includes(direction)\n    );\n\n    return direction;\n  }\n\n  get justify(): HdsLayoutFlexJustifys | undefined {\n    const { justify } = this.args;\n\n    if (justify) {\n      assert(\n        `@justify for \"Hds::Layout::Flex\" must be one of the following: ${JUSTIFYS.join(\n          ', '\n        )}; received: ${justify}`,\n        JUSTIFYS.includes(justify)\n      );\n    }\n\n    return justify;\n  }\n\n  get align(): HdsLayoutFlexAligns | undefined {\n    const { align } = this.args;\n\n    if (align) {\n      assert(\n        `@align for \"Hds::Layout::Flex\" must be one of the following: ${ALIGNS.join(\n          ', '\n        )}; received: ${align}`,\n        ALIGNS.includes(align)\n      );\n    }\n\n    return align;\n  }\n\n  get gap():\n    | [HdsLayoutFlexGaps]\n    | [HdsLayoutFlexGaps, HdsLayoutFlexGaps]\n    | undefined {\n    const { gap = DEFAULT_GAP } = this.args;\n\n    if (gap) {\n      assert(\n        `@gap for \"Hds::Layout::Flex\" must be a single value or an array of two values of one of the following: ${GAPS.join(\n          ', '\n          // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n        )}; received: ${gap}`,\n        (!Array.isArray(gap) && GAPS.includes(gap)) ||\n          (Array.isArray(gap) &&\n            gap.length === 2 &&\n            GAPS.includes(gap[0]) &&\n            GAPS.includes(gap[1]))\n      );\n      return Array.isArray(gap) ? gap : [gap];\n    } else {\n      return undefined;\n    }\n  }\n\n  get classNames(): string {\n    const classes = ['hds-layout-flex'];\n\n    // add a class based on the @direction argument\n    classes.push(`hds-layout-flex--direction-${this.direction}`);\n\n    // add a class based on the @justify argument\n    if (this.justify) {\n      classes.push(`hds-layout-flex--justify-content-${this.justify}`);\n    }\n\n    // add a class based on the @align argument\n    if (this.align) {\n      classes.push(`hds-layout-flex--align-items-${this.align}`);\n    }\n\n    // add a class based on the @gap argument\n    if (this.gap) {\n      if (this.gap.length === 2) {\n        classes.push(`hds-layout-flex--row-gap-${this.gap[0]}`);\n        classes.push(`hds-layout-flex--column-gap-${this.gap[1]}`);\n      } else if (this.gap.length === 1) {\n        classes.push(`hds-layout-flex--row-gap-${this.gap[0]}`);\n        classes.push(`hds-layout-flex--column-gap-${this.gap[0]}`);\n      }\n    }\n\n    // add a class based on the @wrap argument\n    if (this.args.wrap) {\n      classes.push('hds-layout-flex--has-wrapping');\n    }\n\n    // add a class based on the @isInline argument\n    if (this.args.isInline) {\n      classes.push('hds-layout-flex--is-inline');\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    {{#let (element this.componentTag) as |Tag|}}\n      <Tag class={{this.classNames}} ...attributes>{{yield\n          (hash Item=HdsLayoutFlexItem)\n        }}</Tag>\n    {{/let}}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { buildWaiter } from '@ember/test-waiters';\n\nconst waiter = buildWaiter('raf-waiter');\n\n// a utility that wraps requestAnimationFrame and integrates with Ember's test waiters\nexport function requestAnimationFrameWaiter(callback: () => void) {\n  const token = waiter.beginAsync();\n\n  return requestAnimationFrame(() => {\n    try {\n      callback();\n    } finally {\n      waiter.endAsync(token);\n    }\n  });\n}\n\nexport function measureColumnWidth(\n  descendant: Element | null | undefined\n): `${number}px` | undefined {\n  const th = descendant?.closest('.hds-advanced-table__th');\n\n  if (!(th instanceof HTMLElement)) {\n    return undefined;\n  }\n\n  return `${th.offsetWidth}px`;\n}\n\nexport function pixelToNumber(px: `${number}px`): number {\n  return Number(px.replace('px', ''));\n}\n\nexport function isPixelSize(value?: string): boolean {\n  if (value === undefined) {\n    return false;\n  }\n\n  return /^-?\\d+(\\.\\d+)?px$/.test(value);\n}\n\nexport function parsePixel(value?: string): number | undefined {\n  if (value === undefined) {\n    return undefined;\n  }\n\n  if (!isPixelSize(value)) {\n    return undefined;\n  }\n\n  return pixelToNumber(value as `${number}px`);\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base.gts';\n\nexport enum HdsTableDensityValues {\n  Default = 'default',\n  Medium = 'medium',\n  Short = 'short',\n  Tall = 'tall',\n}\nexport type HdsTableDensities = `${HdsTableDensityValues}`;\n\nexport enum HdsTableHorizontalAlignmentValues {\n  Center = 'center',\n  Left = 'left',\n  Right = 'right',\n}\nexport type HdsTableHorizontalAlignment =\n  `${HdsTableHorizontalAlignmentValues}`;\n\nexport enum HdsTableScopeValues {\n  Col = 'col',\n  Row = 'row',\n}\nexport type HdsTableScope = `${HdsTableScopeValues}`;\n\nexport enum HdsTableThSortOrderIconValues {\n  ArrowDown = 'arrow-down',\n  ArrowUp = 'arrow-up',\n  SwapVertical = 'swap-vertical',\n}\nexport type HdsTableThSortOrderIcons = `${HdsTableThSortOrderIconValues}`;\n\nexport enum HdsTableThSortOrderLabelValues {\n  Asc = 'ascending',\n  Desc = 'descending',\n  None = 'none',\n}\nexport type HdsTableThSortOrderLabels = `${HdsTableThSortOrderLabelValues}`;\n\nexport enum HdsTableThSortOrderValues {\n  Asc = 'asc',\n  Desc = 'desc',\n}\nexport type HdsTableThSortOrder = `${HdsTableThSortOrderValues}`;\n\nexport enum HdsTableVerticalAlignmentValues {\n  Baseline = 'baseline',\n  Middle = 'middle',\n  Top = 'top',\n}\nexport type HdsTableVerticalAlignment = `${HdsTableVerticalAlignmentValues}`;\n\nexport type HdsTableSelectableRow = {\n  checkbox: HdsFormCheckboxBaseSignature['Element'];\n  selectionKey: string;\n};\n\ninterface BaseHdsTableColumn {\n  align?: HdsTableHorizontalAlignment;\n  isVisuallyHidden?: boolean;\n  label: string;\n  sortingFunction?: HdsTableSortingFunction<unknown>;\n  tooltip?: string;\n  width?: string;\n}\n\ninterface SortableHdsTableColumn extends BaseHdsTableColumn {\n  isSortable: true;\n  key: string;\n}\n\ninterface NonSortableHdsTableColumn extends BaseHdsTableColumn {\n  isSortable?: false;\n  key?: string;\n}\n\nexport type HdsTableColumn = SortableHdsTableColumn | NonSortableHdsTableColumn;\n\nexport type HdsTableSortingFunction<T> = (a: T, b: T) => number;\n\nexport interface HdsTableOnSelectionChangeSignature {\n  selectionKey?: string;\n  selectionCheckboxElement?: HdsFormCheckboxBaseSignature['Element'];\n  selectedRowsKeys: string[];\n  selectableRowsStates: {\n    selectionKey: string;\n    isSelected?: boolean;\n  }[];\n}\n\nexport type HdsTableModel = Array<Record<string, unknown>>;\n","declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n","import type { Span, SpanStatus } from '../types-hoist';\n\nexport const SPAN_STATUS_UNSET = 0;\nexport const SPAN_STATUS_OK = 1;\nexport const SPAN_STATUS_ERROR = 2;\n\n/**\n * Converts a HTTP status code into a sentry status with a message.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\n// https://develop.sentry.dev/sdk/event-payloads/span/\nexport function getSpanStatusFromHttpCode(httpStatus: number): SpanStatus {\n  if (httpStatus < 400 && httpStatus >= 100) {\n    return { code: SPAN_STATUS_OK };\n  }\n\n  if (httpStatus >= 400 && httpStatus < 500) {\n    switch (httpStatus) {\n      case 401:\n        return { code: SPAN_STATUS_ERROR, message: 'unauthenticated' };\n      case 403:\n        return { code: SPAN_STATUS_ERROR, message: 'permission_denied' };\n      case 404:\n        return { code: SPAN_STATUS_ERROR, message: 'not_found' };\n      case 409:\n        return { code: SPAN_STATUS_ERROR, message: 'already_exists' };\n      case 413:\n        return { code: SPAN_STATUS_ERROR, message: 'failed_precondition' };\n      case 429:\n        return { code: SPAN_STATUS_ERROR, message: 'resource_exhausted' };\n      case 499:\n        return { code: SPAN_STATUS_ERROR, message: 'cancelled' };\n      default:\n        return { code: SPAN_STATUS_ERROR, message: 'invalid_argument' };\n    }\n  }\n\n  if (httpStatus >= 500 && httpStatus < 600) {\n    switch (httpStatus) {\n      case 501:\n        return { code: SPAN_STATUS_ERROR, message: 'unimplemented' };\n      case 503:\n        return { code: SPAN_STATUS_ERROR, message: 'unavailable' };\n      case 504:\n        return { code: SPAN_STATUS_ERROR, message: 'deadline_exceeded' };\n      default:\n        return { code: SPAN_STATUS_ERROR, message: 'internal_error' };\n    }\n  }\n\n  return { code: SPAN_STATUS_ERROR, message: 'unknown_error' };\n}\n\n/**\n * Sets the Http status attributes on the current span based on the http code.\n * Additionally, the span's status is updated, depending on the http code.\n */\nexport function setHttpStatus(span: Span, httpStatus: number): void {\n  span.setAttribute('http.response.status_code', httpStatus);\n\n  const spanStatus = getSpanStatusFromHttpCode(httpStatus);\n  if (spanStatus.message !== 'unknown_error') {\n    span.setStatus(spanStatus);\n  }\n}\n","import { getClient } from '../currentScopes';\nimport type { Options } from '../types-hoist';\n\n// Treeshakable guard to remove all code related to tracing\ndeclare const __SENTRY_TRACING__: boolean | undefined;\n\n/**\n * Determines if span recording is currently enabled.\n *\n * Spans are recorded when at least one of `tracesSampleRate` and `tracesSampler`\n * is defined in the SDK config. This function does not make any assumption about\n * sampling decisions, it only checks if the SDK is configured to record spans.\n *\n * Important: This function only determines if span recording is enabled. Trace\n * continuation and propagation is separately controlled and not covered by this function.\n * If this function returns `false`, traces can still be propagated (which is what\n * we refer to by \"Tracing without Performance\")\n * @see https://develop.sentry.dev/sdk/telemetry/traces/tracing-without-performance/\n *\n * @param maybeOptions An SDK options object to be passed to this function.\n * If this option is not provided, the function will use the current client's options.\n */\nexport function hasSpansEnabled(\n  maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler'> | undefined,\n): boolean {\n  if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {\n    return false;\n  }\n\n  const options = maybeOptions || getClient()?.getOptions();\n  return (\n    !!options &&\n    // Note: This check is `!= null`, meaning \"nullish\". `0` is not \"nullish\", `undefined` and `null` are. (This comment was brought to you by 15 minutes of questioning life)\n    (options.tracesSampleRate != null || !!options.tracesSampler)\n  );\n}\n\n/**\n * @see JSDoc of `hasSpansEnabled`\n * @deprecated Use `hasSpansEnabled` instead, which is a more accurately named version of this function.\n * This function will be removed in the next major version of the SDK.\n */\n// TODO(v10): Remove this export\nexport const hasTracingEnabled = hasSpansEnabled;\n","import type { Primitive } from '../types-hoist';\n\nimport { isSyntheticEvent, isVueViewModel } from './is';\nimport { convertToPlainObject } from './object';\nimport { getFunctionName } from './stacktrace';\n\ntype Prototype = { constructor?: (...args: unknown[]) => unknown };\n// This is a hack to placate TS, relying on the fact that technically, arrays are objects with integer keys. Normally we\n// think of those keys as actual numbers, but `arr['0']` turns out to work just as well as `arr[0]`, and doing it this\n// way lets us use a single type in the places where behave as if we are only dealing with objects, even if some of them\n// might be arrays.\ntype ObjOrArray<T> = { [key: string]: T };\n\ntype MemoFunc = [\n  // memoize\n  (obj: object) => boolean,\n  // unmemoize\n  (obj: object) => void,\n];\n\n/**\n * Recursively normalizes the given object.\n *\n * - Creates a copy to prevent original input mutation\n * - Skips non-enumerable properties\n * - When stringifying, calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializable values (`undefined`/`NaN`/functions) to serializable format\n * - Translates known global objects/classes to a string representations\n * - Takes care of `Error` object serialization\n * - Optionally limits depth of final output\n * - Optionally limits number of properties/elements included in any single object/array\n *\n * @param input The object to be normalized.\n * @param depth The max depth to which to normalize the object. (Anything deeper stringified whole.)\n * @param maxProperties The max number of elements or properties to be included in any single array or\n * object in the normalized output.\n * @returns A normalized version of the object, or `\"**non-serializable**\"` if any errors are thrown during normalization.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function normalize(input: unknown, depth: number = 100, maxProperties: number = +Infinity): any {\n  try {\n    // since we're at the outermost level, we don't provide a key\n    return visit('', input, depth, maxProperties);\n  } catch (err) {\n    return { ERROR: `**non-serializable** (${err})` };\n  }\n}\n\n/** JSDoc */\nexport function normalizeToSize<T>(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  object: { [key: string]: any },\n  // Default Node.js REPL depth\n  depth: number = 3,\n  // 100kB, as 200kB is max payload size, so half sounds reasonable\n  maxSize: number = 100 * 1024,\n): T {\n  const normalized = normalize(object, depth);\n\n  if (jsonSize(normalized) > maxSize) {\n    return normalizeToSize(object, depth - 1, maxSize);\n  }\n\n  return normalized as T;\n}\n\n/**\n * Visits a node to perform normalization on it\n *\n * @param key The key corresponding to the given node\n * @param value The node to be visited\n * @param depth Optional number indicating the maximum recursion depth\n * @param maxProperties Optional maximum number of properties/elements included in any single object/array\n * @param memo Optional Memo class handling decycling\n */\nfunction visit(\n  key: string,\n  value: unknown,\n  depth: number = +Infinity,\n  maxProperties: number = +Infinity,\n  memo = memoBuilder(),\n): Primitive | ObjOrArray<unknown> {\n  const [memoize, unmemoize] = memo;\n\n  // Get the simple cases out of the way first\n  if (\n    value == null || // this matches null and undefined -> eqeq not eqeqeq\n    ['boolean', 'string'].includes(typeof value) ||\n    (typeof value === 'number' && Number.isFinite(value))\n  ) {\n    return value as Primitive;\n  }\n\n  const stringified = stringifyValue(key, value);\n\n  // Anything we could potentially dig into more (objects or arrays) will have come back as `\"[object XXXX]\"`.\n  // Everything else will have already been serialized, so if we don't see that pattern, we're done.\n  if (!stringified.startsWith('[object ')) {\n    return stringified;\n  }\n\n  // From here on, we can assert that `value` is either an object or an array.\n\n  // Do not normalize objects that we know have already been normalized. As a general rule, the\n  // \"__sentry_skip_normalization__\" property should only be used sparingly and only should only be set on objects that\n  // have already been normalized.\n  if ((value as ObjOrArray<unknown>)['__sentry_skip_normalization__']) {\n    return value as ObjOrArray<unknown>;\n  }\n\n  // We can set `__sentry_override_normalization_depth__` on an object to ensure that from there\n  // We keep a certain amount of depth.\n  // This should be used sparingly, e.g. we use it for the redux integration to ensure we get a certain amount of state.\n  const remainingDepth =\n    typeof (value as ObjOrArray<unknown>)['__sentry_override_normalization_depth__'] === 'number'\n      ? ((value as ObjOrArray<unknown>)['__sentry_override_normalization_depth__'] as number)\n      : depth;\n\n  // We're also done if we've reached the max depth\n  if (remainingDepth === 0) {\n    // At this point we know `serialized` is a string of the form `\"[object XXXX]\"`. Clean it up so it's just `\"[XXXX]\"`.\n    return stringified.replace('object ', '');\n  }\n\n  // If we've already visited this branch, bail out, as it's circular reference. If not, note that we're seeing it now.\n  if (memoize(value)) {\n    return '[Circular ~]';\n  }\n\n  // If the value has a `toJSON` method, we call it to extract more information\n  const valueWithToJSON = value as unknown & { toJSON?: () => unknown };\n  if (valueWithToJSON && typeof valueWithToJSON.toJSON === 'function') {\n    try {\n      const jsonValue = valueWithToJSON.toJSON();\n      // We need to normalize the return value of `.toJSON()` in case it has circular references\n      return visit('', jsonValue, remainingDepth - 1, maxProperties, memo);\n    } catch (err) {\n      // pass (The built-in `toJSON` failed, but we can still try to do it ourselves)\n    }\n  }\n\n  // At this point we know we either have an object or an array, we haven't seen it before, and we're going to recurse\n  // because we haven't yet reached the max depth. Create an accumulator to hold the results of visiting each\n  // property/entry, and keep track of the number of items we add to it.\n  const normalized = (Array.isArray(value) ? [] : {}) as ObjOrArray<unknown>;\n  let numAdded = 0;\n\n  // Before we begin, convert`Error` and`Event` instances into plain objects, since some of each of their relevant\n  // properties are non-enumerable and otherwise would get missed.\n  const visitable = convertToPlainObject(value as ObjOrArray<unknown>);\n\n  for (const visitKey in visitable) {\n    // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n    if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n      continue;\n    }\n\n    if (numAdded >= maxProperties) {\n      normalized[visitKey] = '[MaxProperties ~]';\n      break;\n    }\n\n    // Recursively visit all the child nodes\n    const visitValue = visitable[visitKey];\n    normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo);\n\n    numAdded++;\n  }\n\n  // Once we've visited all the branches, remove the parent from memo storage\n  unmemoize(value);\n\n  // Return accumulated values\n  return normalized;\n}\n\n/* eslint-disable complexity */\n/**\n * Stringify the given value. Handles various known special values and types.\n *\n * Not meant to be used on simple primitives which already have a string representation, as it will, for example, turn\n * the number 1231 into \"[Object Number]\", nor on `null`, as it will throw.\n *\n * @param value The value to stringify\n * @returns A stringified representation of the given value\n */\nfunction stringifyValue(\n  key: unknown,\n  // this type is a tiny bit of a cheat, since this function does handle NaN (which is technically a number), but for\n  // our internal use, it'll do\n  value: Exclude<unknown, string | number | boolean | null>,\n): string {\n  try {\n    if (key === 'domain' && value && typeof value === 'object' && (value as { _events: unknown })._events) {\n      return '[Domain]';\n    }\n\n    if (key === 'domainEmitter') {\n      return '[DomainEmitter]';\n    }\n\n    // It's safe to use `global`, `window`, and `document` here in this manner, as we are asserting using `typeof` first\n    // which won't throw if they are not present.\n\n    if (typeof global !== 'undefined' && value === global) {\n      return '[Global]';\n    }\n\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof window !== 'undefined' && value === window) {\n      return '[Window]';\n    }\n\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof document !== 'undefined' && value === document) {\n      return '[Document]';\n    }\n\n    if (isVueViewModel(value)) {\n      return '[VueViewModel]';\n    }\n\n    // React's SyntheticEvent thingy\n    if (isSyntheticEvent(value)) {\n      return '[SyntheticEvent]';\n    }\n\n    if (typeof value === 'number' && !Number.isFinite(value)) {\n      return `[${value}]`;\n    }\n\n    if (typeof value === 'function') {\n      return `[Function: ${getFunctionName(value)}]`;\n    }\n\n    if (typeof value === 'symbol') {\n      return `[${String(value)}]`;\n    }\n\n    // stringified BigInts are indistinguishable from regular numbers, so we need to label them to avoid confusion\n    if (typeof value === 'bigint') {\n      return `[BigInt: ${String(value)}]`;\n    }\n\n    // Now that we've knocked out all the special cases and the primitives, all we have left are objects. Simply casting\n    // them to strings means that instances of classes which haven't defined their `toStringTag` will just come out as\n    // `\"[object Object]\"`. If we instead look at the constructor's name (which is the same as the name of the class),\n    // we can make sure that only plain objects come out that way.\n    const objName = getConstructorName(value);\n\n    // Handle HTML Elements\n    if (/^HTML(\\w*)Element$/.test(objName)) {\n      return `[HTMLElement: ${objName}]`;\n    }\n\n    return `[object ${objName}]`;\n  } catch (err) {\n    return `**non-serializable** (${err})`;\n  }\n}\n/* eslint-enable complexity */\n\nfunction getConstructorName(value: unknown): string {\n  const prototype: Prototype | null = Object.getPrototypeOf(value);\n\n  return prototype?.constructor ? prototype.constructor.name : 'null prototype';\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value: string): number {\n  // eslint-disable-next-line no-bitwise\n  return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction jsonSize(value: any): number {\n  return utf8Length(JSON.stringify(value));\n}\n\n/**\n * Normalizes URLs in exceptions and stacktraces to a base path so Sentry can fingerprint\n * across platforms and working directory.\n *\n * @param url The URL to be normalized.\n * @param basePath The application base path.\n * @returns The normalized URL.\n */\nexport function normalizeUrlToBase(url: string, basePath: string): string {\n  const escapedBase = basePath\n    // Backslash to forward\n    .replace(/\\\\/g, '/')\n    // Escape RegExp special characters\n    .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n\n  let newUrl = url;\n  try {\n    newUrl = decodeURI(url);\n  } catch (_Oo) {\n    // Sometime this breaks\n  }\n  return (\n    newUrl\n      .replace(/\\\\/g, '/')\n      .replace(/webpack:\\/?/g, '') // Remove intermediate base path\n      // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n      .replace(new RegExp(`(file://)?/*${escapedBase}/*`, 'ig'), 'app:///')\n  );\n}\n\n/**\n * Helper to decycle json objects\n */\nfunction memoBuilder(): MemoFunc {\n  const inner = new WeakSet<object>();\n  function memoize(obj: object): boolean {\n    if (inner.has(obj)) {\n      return true;\n    }\n    inner.add(obj);\n    return false;\n  }\n\n  function unmemoize(obj: object): void {\n    inner.delete(obj);\n  }\n  return [memoize, unmemoize];\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isThenable } from './is';\n\n/** SyncPromise internal states */\nconst enum States {\n  /** Pending */\n  PENDING = 0,\n  /** Resolved / OK */\n  RESOLVED = 1,\n  /** Rejected / Error */\n  REJECTED = 2,\n}\n\n// Overloads so we can call resolvedSyncPromise without arguments and generic argument\nexport function resolvedSyncPromise(): PromiseLike<void>;\nexport function resolvedSyncPromise<T>(value: T | PromiseLike<T>): PromiseLike<T>;\n\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nexport function resolvedSyncPromise<T>(value?: T | PromiseLike<T>): PromiseLike<T> {\n  return new SyncPromise(resolve => {\n    resolve(value);\n  });\n}\n\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nexport function rejectedSyncPromise<T = never>(reason?: any): PromiseLike<T> {\n  return new SyncPromise((_, reject) => {\n    reject(reason);\n  });\n}\n\ntype Executor<T> = (resolve: (value?: T | PromiseLike<T> | null) => void, reject: (reason?: any) => void) => void;\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nexport class SyncPromise<T> implements PromiseLike<T> {\n  private _state: States;\n  private _handlers: Array<[boolean, (value: T) => void, (reason: any) => any]>;\n  private _value: any;\n\n  public constructor(executor: Executor<T>) {\n    this._state = States.PENDING;\n    this._handlers = [];\n\n    this._runExecutor(executor);\n  }\n\n  /** @inheritdoc */\n  public then<TResult1 = T, TResult2 = never>(\n    onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n    onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null,\n  ): PromiseLike<TResult1 | TResult2> {\n    return new SyncPromise((resolve, reject) => {\n      this._handlers.push([\n        false,\n        result => {\n          if (!onfulfilled) {\n            // TODO: ¯\\_(ツ)_/¯\n            // TODO: FIXME\n            resolve(result as any);\n          } else {\n            try {\n              resolve(onfulfilled(result));\n            } catch (e) {\n              reject(e);\n            }\n          }\n        },\n        reason => {\n          if (!onrejected) {\n            reject(reason);\n          } else {\n            try {\n              resolve(onrejected(reason));\n            } catch (e) {\n              reject(e);\n            }\n          }\n        },\n      ]);\n      this._executeHandlers();\n    });\n  }\n\n  /** @inheritdoc */\n  public catch<TResult = never>(\n    onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null,\n  ): PromiseLike<T | TResult> {\n    return this.then(val => val, onrejected);\n  }\n\n  /** @inheritdoc */\n  public finally<TResult>(onfinally?: (() => void) | null): PromiseLike<TResult> {\n    return new SyncPromise<TResult>((resolve, reject) => {\n      let val: TResult | any;\n      let isRejected: boolean;\n\n      return this.then(\n        value => {\n          isRejected = false;\n          val = value;\n          if (onfinally) {\n            onfinally();\n          }\n        },\n        reason => {\n          isRejected = true;\n          val = reason;\n          if (onfinally) {\n            onfinally();\n          }\n        },\n      ).then(() => {\n        if (isRejected) {\n          reject(val);\n          return;\n        }\n\n        resolve(val as unknown as any);\n      });\n    });\n  }\n\n  /** Excute the resolve/reject handlers. */\n  private _executeHandlers(): void {\n    if (this._state === States.PENDING) {\n      return;\n    }\n\n    const cachedHandlers = this._handlers.slice();\n    this._handlers = [];\n\n    cachedHandlers.forEach(handler => {\n      if (handler[0]) {\n        return;\n      }\n\n      if (this._state === States.RESOLVED) {\n        handler[1](this._value as unknown as any);\n      }\n\n      if (this._state === States.REJECTED) {\n        handler[2](this._value);\n      }\n\n      handler[0] = true;\n    });\n  }\n\n  /** Run the executor for the SyncPromise. */\n  private _runExecutor(executor: Executor<T>): void {\n    const setResult = (state: States, value?: T | PromiseLike<T> | any): void => {\n      if (this._state !== States.PENDING) {\n        return;\n      }\n\n      if (isThenable(value)) {\n        void (value as PromiseLike<T>).then(resolve, reject);\n        return;\n      }\n\n      this._state = state;\n      this._value = value;\n\n      this._executeHandlers();\n    };\n\n    const resolve = (value: unknown): void => {\n      setResult(States.RESOLVED, value);\n    };\n\n    const reject = (reason: unknown): void => {\n      setResult(States.REJECTED, reason);\n    };\n\n    try {\n      executor(resolve, reject);\n    } catch (e) {\n      reject(e);\n    }\n  }\n}\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://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,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { MetricRatingThresholds, MetricType } from '../types';\n\nconst getRating = (value: number, thresholds: MetricRatingThresholds): MetricType['rating'] => {\n  if (value > thresholds[1]) {\n    return 'poor';\n  }\n  if (value > thresholds[0]) {\n    return 'needs-improvement';\n  }\n  return 'good';\n};\n\nexport const bindReporter = <MetricName extends MetricType['name']>(\n  callback: (metric: Extract<MetricType, { name: MetricName }>) => void,\n  metric: Extract<MetricType, { name: MetricName }>,\n  thresholds: MetricRatingThresholds,\n  reportAllChanges?: boolean,\n) => {\n  let prevValue: number;\n  let delta: number;\n  return (forceReport?: boolean) => {\n    if (metric.value >= 0) {\n      if (forceReport || reportAllChanges) {\n        delta = metric.value - (prevValue || 0);\n\n        // Report the metric if there's a non-zero delta or if no previous\n        // value exists (which can happen in the case of the document becoming\n        // hidden when the metric value is 0).\n        // See: https://github.com/GoogleChrome/web-vitals/issues/14\n        if (delta || prevValue === undefined) {\n          prevValue = metric.value;\n          metric.delta = delta;\n          metric.rating = getRating(metric.value, thresholds);\n          callback(metric);\n        }\n      }\n    }\n  };\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://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,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../../types';\nimport type { MetricType } from '../types';\nimport { generateUniqueID } from './generateUniqueID';\nimport { getActivationStart } from './getActivationStart';\nimport { getNavigationEntry } from './getNavigationEntry';\n\nexport const initMetric = <MetricName extends MetricType['name']>(name: MetricName, value?: number) => {\n  const navEntry = getNavigationEntry();\n  let navigationType: MetricType['navigationType'] = 'navigate';\n\n  if (navEntry) {\n    if (WINDOW.document?.prerendering || getActivationStart() > 0) {\n      navigationType = 'prerender';\n    } else if (WINDOW.document?.wasDiscarded) {\n      navigationType = 'restore';\n    } else if (navEntry.type) {\n      navigationType = navEntry.type.replace(/_/g, '-') as MetricType['navigationType'];\n    }\n  }\n\n  // Use `entries` type specific for the metric.\n  const entries: Extract<MetricType, { name: MetricName }>['entries'] = [];\n\n  return {\n    name,\n    value: typeof value === 'undefined' ? -1 : value,\n    rating: 'good' as const, // If needed, will be updated when reported. `const` to keep the type from widening to `string`.\n    delta: 0,\n    entries,\n    id: generateUniqueID(),\n    navigationType,\n  };\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://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,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../../types';\n\nexport interface OnHiddenCallback {\n  (event: Event): void;\n}\n\n// Sentry-specific change:\n// This function's logic was NOT updated to web-vitals 4.2.4 but we continue\n// to use the web-vitals 3.5.2 due to us having stricter browser support.\n// PR with context that made the changes: https://github.com/GoogleChrome/web-vitals/pull/442/files#r1530492402\n// The PR removed listening to the `pagehide` event, in favour of only listening to `visibilitychange` event.\n// This is \"more correct\" but some browsers we still support (Safari 12.1-14.0) don't fully support `visibilitychange`\n// or have known bugs w.r.t the `visibilitychange` event.\n// TODO (v9): If we decide to drop support for Safari 12.1-14.0, we can use the logic from web-vitals 4.2.4\n// In this case, we also need to update the integration tests that currently trigger the `pagehide` event to\n// simulate the page being hidden.\nexport const onHidden = (cb: OnHiddenCallback) => {\n  const onHiddenOrPageHide = (event: Event) => {\n    if (event.type === 'pagehide' || WINDOW.document?.visibilityState === 'hidden') {\n      cb(event);\n    }\n  };\n\n  if (WINDOW.document) {\n    addEventListener('visibilitychange', onHiddenOrPageHide, true);\n    // Some browsers have buggy implementations of visibilitychange,\n    // so we use pagehide in addition, just to be safe.\n    addEventListener('pagehide', onHiddenOrPageHide, true);\n  }\n};\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","let toSJISFunction\nconst CODEWORDS_COUNT = [\n  0, // Not used\n  26, 44, 70, 100, 134, 172, 196, 242, 292, 346,\n  404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,\n  1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,\n  2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706\n]\n\n/**\n * Returns the QR Code size for the specified version\n *\n * @param  {Number} version QR Code version\n * @return {Number}         size of QR code\n */\nexports.getSymbolSize = function getSymbolSize (version) {\n  if (!version) throw new Error('\"version\" cannot be null or undefined')\n  if (version < 1 || version > 40) throw new Error('\"version\" should be in range from 1 to 40')\n  return version * 4 + 17\n}\n\n/**\n * Returns the total number of codewords used to store data and EC information.\n *\n * @param  {Number} version QR Code version\n * @return {Number}         Data length in bits\n */\nexports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {\n  return CODEWORDS_COUNT[version]\n}\n\n/**\n * Encode data with Bose-Chaudhuri-Hocquenghem\n *\n * @param  {Number} data Value to encode\n * @return {Number}      Encoded value\n */\nexports.getBCHDigit = function (data) {\n  let digit = 0\n\n  while (data !== 0) {\n    digit++\n    data >>>= 1\n  }\n\n  return digit\n}\n\nexports.setToSJISFunction = function setToSJISFunction (f) {\n  if (typeof f !== 'function') {\n    throw new Error('\"toSJISFunc\" is not a valid function.')\n  }\n\n  toSJISFunction = f\n}\n\nexports.isKanjiModeEnabled = function () {\n  return typeof toSJISFunction !== 'undefined'\n}\n\nexports.toSJIS = function toSJIS (kanji) {\n  return toSJISFunction(kanji)\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base.gts';\n\nexport enum HdsAdvancedTableDensityValues {\n  Default = 'default',\n  Medium = 'medium',\n  Short = 'short',\n  Tall = 'tall',\n}\nexport type HdsAdvancedTableDensities = `${HdsAdvancedTableDensityValues}`;\n\nexport enum HdsAdvancedTableHorizontalAlignmentValues {\n  Center = 'center',\n  Left = 'left',\n  Right = 'right',\n}\nexport type HdsAdvancedTableHorizontalAlignment =\n  `${HdsAdvancedTableHorizontalAlignmentValues}`;\n\nexport enum HdsAdvancedTableScopeValues {\n  Col = 'col',\n  Row = 'row',\n}\nexport type HdsAdvancedTableScope = `${HdsAdvancedTableScopeValues}`;\n\nexport enum HdsAdvancedTableThExpandIconValues {\n  ChevronUp = 'chevron-up',\n  ChevronDown = 'chevron-down',\n  UnfoldOpen = 'unfold-open',\n  UnfoldClose = 'unfold-close',\n}\nexport type HdsAdvancedTableThSortExpandIcons =\n  `${HdsAdvancedTableThExpandIconValues}`;\n\nexport enum HdsAdvancedTableThSortOrderIconValues {\n  ArrowDown = 'arrow-down',\n  ArrowUp = 'arrow-up',\n  SwapVertical = 'swap-vertical',\n}\nexport type HdsAdvancedTableThSortOrderIcons =\n  `${HdsAdvancedTableThSortOrderIconValues}`;\n\nexport enum HdsAdvancedTableThSortOrderLabelValues {\n  Asc = 'ascending',\n  Desc = 'descending',\n  None = 'none',\n}\nexport type HdsAdvancedTableThSortOrderLabels =\n  `${HdsAdvancedTableThSortOrderLabelValues}`;\n\nexport enum HdsAdvancedTableThSortOrderValues {\n  Asc = 'asc',\n  Desc = 'desc',\n}\nexport type HdsAdvancedTableThSortOrder =\n  `${HdsAdvancedTableThSortOrderValues}`;\n\nexport enum HdsAdvancedTableVerticalAlignmentValues {\n  Baseline = 'baseline',\n  Middle = 'middle',\n  Top = 'top',\n}\nexport type HdsAdvancedTableVerticalAlignment =\n  `${HdsAdvancedTableVerticalAlignmentValues}`;\n\nexport type HdsAdvancedTableSelectableRow = {\n  checkbox: HdsFormCheckboxBaseSignature['Element'];\n  selectionKey: string;\n};\n\nexport type HdsAdvancedTableExpandState = boolean;\n\ninterface BaseHdsAdvancedTableColumn {\n  align?: HdsAdvancedTableHorizontalAlignment;\n  isExpandable?: boolean;\n  isVisuallyHidden?: boolean;\n  label: string;\n  sortingFunction?: HdsAdvancedTableSortingFunction<unknown>;\n  tooltip?: string;\n  width?: string;\n  minWidth?: `${number}px`;\n  maxWidth?: `${number}px`;\n}\n\ninterface SortableHdsAdvancedTableColumn extends BaseHdsAdvancedTableColumn {\n  isSortable: true;\n  key: string;\n}\n\ninterface NonSortableHdsAdvancedTableColumn extends BaseHdsAdvancedTableColumn {\n  isSortable?: false;\n  key?: string;\n}\n\nexport type HdsAdvancedTableColumn =\n  | SortableHdsAdvancedTableColumn\n  | NonSortableHdsAdvancedTableColumn;\n\nexport type HdsAdvancedTableNormalizedColumn = HdsAdvancedTableColumn & {\n  key: string;\n};\n\nexport type HdsAdvancedTableSortingFunction<T> = (a: T, b: T) => number;\n\nexport interface HdsAdvancedTableOnSelectionChangeSignature {\n  selectionKey?: string;\n  selectionCheckboxElement?: HdsFormCheckboxBaseSignature['Element'];\n  selectedRowsKeys: string[];\n  selectableRowsStates: {\n    selectionKey: string;\n    isSelected?: boolean;\n  }[];\n}\n\nexport interface HdsAdvancedTableModelItem {\n  [key: string]: unknown;\n  children?: HdsAdvancedTableModelItem[];\n  id?: string | number;\n  isSelected?: boolean;\n}\n\nexport type HdsAdvancedTableModel = Array<HdsAdvancedTableModelItem>;\n\nexport type HdsAdvancedTableColumnResizeCallback = (\n  columnKey: string,\n  newWidth?: HdsAdvancedTablePixelString\n) => void;\n\nexport type HdsAdvancedTableColumnReorderCallback = ({\n  column,\n  newOrder,\n  insertedAt,\n}: {\n  column: HdsAdvancedTableColumn;\n  newOrder: string[];\n  insertedAt: number;\n}) => void;\n\nexport interface HdsAdvancedTableCell<T = unknown> {\n  columnKey: string;\n  content: (T extends object ? T[keyof T] : unknown) | undefined;\n}\n\nexport enum HdsAdvancedTableColumnReorderSideValues {\n  Left = 'left',\n  Right = 'right',\n}\n\nexport type HdsAdvancedTableColumnReorderSide =\n  `${HdsAdvancedTableColumnReorderSideValues}`;\n\nexport type HdsAdvancedTablePixelString = `${number}px`;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\nimport Component from '@glimmer/component';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\n\nimport type { HdsTextBodySignature } from '../../text/body.gts';\n\nexport const ID_PREFIX = 'helper-text-';\n\nconst NOOP = (): void => {};\n\nexport interface HdsFormHelperTextSignature {\n  Args: {\n    contextualClass?: string;\n    controlId?: string;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    onInsert?: (element: HTMLElement, ...args: any[]) => void;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HdsTextBodySignature['Element'];\n}\n\nexport default class HdsFormHelperText extends Component<HdsFormHelperTextSignature> {\n  get id(): string | null {\n    const { controlId } = this.args;\n    if (controlId) {\n      return `${ID_PREFIX}${controlId}`;\n    }\n    return null;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  get onInsert(): (element: HTMLElement, ...args: any[]) => void {\n    const { onInsert } = this.args;\n\n    // notice: this is a guard used to prevent triggering an error when the component is used as standalone element\n    if (typeof onInsert === 'function') {\n      return onInsert;\n    } else {\n      return NOOP;\n    }\n  }\n\n  get classNames(): string {\n    const classes = ['hds-form-helper-text'];\n\n    // add a class based on the @contextualClass argument\n    // notice: this will *not* be documented for public use\n    // the reason for this is that the contextual component declarations don't pass attributes to the component\n    if (this.args.contextualClass) {\n      classes.push(this.args.contextualClass);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <div\n      class={{this.classNames}}\n      id={{this.id}}\n      {{didInsert this.onInsert}}\n      ...attributes\n    >\n      {{yield}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\n\nimport HdsFormIndicator from '../indicator/index.gts';\n\nimport type { HdsFormIndicatorSignature } from '../indicator/index.gts';\n\nexport const ID_PREFIX = 'label-';\n\nexport interface HdsFormLabelSignature {\n  Args: {\n    contextualClass?: string;\n    controlId?: string;\n    isOptional?: HdsFormIndicatorSignature['Args']['isOptional'];\n    isRequired?: HdsFormIndicatorSignature['Args']['isRequired'];\n    hiddenText?: string;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLLabelElement;\n}\n\nexport default class HdsFormLabel extends Component<HdsFormLabelSignature> {\n  get id(): string | null {\n    const { controlId } = this.args;\n    if (controlId) {\n      return `${ID_PREFIX}${controlId}`;\n    }\n    return null;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-form-label'];\n\n    // add a class based on the @contextualClass argument\n    // notice: this will *not* be documented for public use\n    // the reason for this is that the contextual component declarations don't pass attributes to the component\n    if (this.args.contextualClass) {\n      classes.push(this.args.contextualClass);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <label\n      class={{this.classNames}}\n      for=\"{{@controlId}}\"\n      id={{this.id}}\n      ...attributes\n    >\n      {{yield}}\n      <HdsFormIndicator\n        @isRequired={{@isRequired}}\n        @isOptional={{@isOptional}}\n      />\n      {{#if @hiddenText}}\n        <span class=\"sr-only\">\n          {{@hiddenText}}\n        </span>\n      {{/if}}\n    </label>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { hash } from '@ember/helper';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport willDestroy from '@ember/render-modifiers/modifiers/will-destroy';\n\nimport HdsIcon from '../../icon/index.gts';\nimport HdsFormErrorMessage from './message.gts';\n\nexport const ID_PREFIX = 'error-';\n\nconst NOOP = (): void => {};\n\nexport interface HdsFormErrorSignature {\n  Args: {\n    contextualClass?: string;\n    controlId?: string;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    onInsert?: (element: HTMLElement, ...args: any[]) => void;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    onRemove?: (element: HTMLElement, ...args: any[]) => void;\n  };\n  Blocks: {\n    default: [\n      {\n        Message?: typeof HdsFormErrorMessage;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsFormError extends Component<HdsFormErrorSignature> {\n  get id(): string | null {\n    const { controlId } = this.args;\n    if (controlId) {\n      return `${ID_PREFIX}${controlId}`;\n    }\n    return null;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  get onInsert(): (element: HTMLElement, ...args: any[]) => void {\n    const { onInsert } = this.args;\n\n    // notice: this is a guard used to prevent triggering an error when the component is used as standalone element\n    if (typeof onInsert === 'function') {\n      return onInsert;\n    } else {\n      return NOOP;\n    }\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  get onRemove(): (element: HTMLElement, ...args: any[]) => void {\n    const { onRemove } = this.args;\n\n    // notice: this is a guard used to prevent triggering an error when the component is used as standalone element\n    if (typeof onRemove === 'function') {\n      return onRemove;\n    } else {\n      return NOOP;\n    }\n  }\n\n  get classNames(): string {\n    const classes = ['hds-form-error'];\n\n    // add a class based on the @contextualClass argument\n    // notice: this will *not* be documented for public use\n    // the reason for this is that the contextual component declarations don't pass attributes to the component\n    if (this.args.contextualClass) {\n      classes.push(this.args.contextualClass);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <div\n      class={{this.classNames}}\n      id={{this.id}}\n      {{didInsert this.onInsert}}\n      {{willDestroy this.onRemove}}\n      ...attributes\n    >\n      <HdsIcon class=\"hds-form-error__icon\" @name=\"alert-diamond-fill\" />\n      <div class=\"hds-form-error__content\">\n        {{yield (hash Message=HdsFormErrorMessage)}}\n      </div>\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { hash } from '@ember/helper';\nimport style from 'ember-style-modifier';\n\nimport HdsYield from '../../yield/index.gts';\n\nexport interface HdsFormSelectBaseSignature {\n  Args: {\n    isInvalid?: boolean;\n    width?: string;\n    id?: string;\n    ariaDescribedBy?: string;\n  };\n  Blocks: {\n    default: [\n      {\n        Options?: typeof HdsYield;\n      },\n    ];\n  };\n  Element: HTMLSelectElement;\n}\n\nexport default class HdsFormSelectBase extends Component<HdsFormSelectBaseSignature> {\n  get classNames(): string {\n    const classes = ['hds-form-select'];\n\n    // add typographic classes\n    classes.push('hds-typography-body-200', 'hds-font-weight-regular');\n\n    // add a class based on the @isInvalid argument\n    if (this.args.isInvalid) {\n      classes.push(`hds-form-select--is-invalid`);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <select\n      class={{this.classNames}}\n      {{style width=@width}}\n      id={{@id}}\n      aria-describedby={{@ariaDescribedBy}}\n      ...attributes\n    >\n      {{yield (hash Options=HdsYield)}}\n    </select>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsFormRadioBaseSignature {\n  Args: {\n    value?: string;\n  };\n  Element: HTMLInputElement;\n}\n\nconst HdsFormRadioBase: TemplateOnlyComponent<HdsFormRadioBaseSignature> =\n  <template>\n    <input type=\"radio\" class=\"hds-form-radio\" ...attributes value={{@value}} />\n  </template>;\n\nexport default HdsFormRadioBase;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsAppSideNavListItemSignature {\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLLIElement;\n}\n\nconst HdsAppSideNavListItem: TemplateOnlyComponent<HdsAppSideNavListItemSignature> =\n  <template>\n    <li class=\"hds-app-side-nav__list-item\" ...attributes>\n      {{yield}}\n    </li>\n  </template>;\n\nexport default HdsAppSideNavListItem;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\n\nimport { HdsFormHeaderTitleTagValues } from '../types.ts';\nimport { HdsTextSizeValues } from '../../text/types.ts';\nimport HdsTextDisplay from '../../text/display.gts';\n\nimport type { HdsFormHeaderTitleTags } from '../types.ts';\nimport type { HdsTextDisplaySignature } from '../../text/display.gts';\n\nexport const DEFAULT_SIZE = HdsTextSizeValues.FourHundred;\nexport const DEFAULT_TAG = HdsFormHeaderTitleTagValues.Div;\nexport const TAGS: HdsFormHeaderTitleTags[] = Object.values(\n  HdsFormHeaderTitleTagValues\n);\n\nexport interface HdsFormHeaderTitleSignature {\n  Args: {\n    tag?: HdsFormHeaderTitleTags;\n    size?: HdsTextDisplaySignature['Args']['size'];\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HdsTextDisplaySignature['Element'];\n}\n\nexport default class HdsFormHeaderTitle extends Component<HdsFormHeaderTitleSignature> {\n  get tag(): HdsFormHeaderTitleTags {\n    const { tag = DEFAULT_TAG } = this.args;\n\n    assert(\n      `@tag for \"Hds::Form::Header::Title\" must be one of the following: ${TAGS.join(\n        ', '\n      )}; received: ${tag}`,\n      TAGS.includes(tag)\n    );\n\n    return tag;\n  }\n\n  get size(): HdsTextDisplaySignature['Args']['size'] {\n    return this.args.size ?? DEFAULT_SIZE;\n  }\n\n  <template>\n    <HdsTextDisplay\n      class=\"hds-form__header-title\"\n      @tag={{this.tag}}\n      @size={{this.size}}\n      @color=\"strong\"\n      ...attributes\n    >\n      {{yield}}\n    </HdsTextDisplay>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nimport HdsTextBody from '../../text/body.gts';\n\nimport type { HdsTextBodySignature } from '../../text/body.gts';\n\nexport interface HdsFormHeaderDescriptionSignature {\n  Blocks: {\n    default: [];\n  };\n  Element: HdsTextBodySignature['Element'];\n}\n\nconst HdsFormHeaderDescription: TemplateOnlyComponent<HdsFormHeaderDescriptionSignature> =\n  <template>\n    <HdsTextBody\n      class=\"hds-form__header-description\"\n      @tag=\"p\"\n      @size=\"300\"\n      @color=\"primary\"\n      ...attributes\n    >\n      {{yield}}\n    </HdsTextBody>\n  </template>;\nexport default HdsFormHeaderDescription;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { hash } from '@ember/helper';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport { getElementId } from '../../../../utils/hds-get-element-id.ts';\nimport {\n  ariaDescribedBy,\n  registerAriaDescriptionElement,\n  unregisterAriaDescriptionElement,\n} from '../../../../utils/hds-aria-described-by.ts';\nimport { HdsFormFieldsetLayoutValues } from './types.ts';\nimport HdsFormLegend from '../legend/index.gts';\nimport HdsFormHelperText from '../helper-text/index.gts';\nimport HdsFormError from '../error/index.gts';\nimport HdsYield from '../../yield/index.gts';\n\nimport type { HdsFormFieldsetLayouts } from './types.ts';\nimport type { AriaDescribedByComponent } from '../../../../utils/hds-aria-described-by.ts';\n\nexport const LAYOUT_TYPES: HdsFormFieldsetLayouts[] = Object.values(\n  HdsFormFieldsetLayoutValues\n);\n\nexport interface HdsFormFieldsetSignature {\n  Args: {\n    extraAriaDescribedBy?: string;\n    isOptional?: boolean;\n    isRequired?: boolean;\n    layout?: HdsFormFieldsetLayouts;\n  };\n  Blocks: {\n    default: [\n      {\n        Legend?: WithBoundArgs<\n          typeof HdsFormLegend,\n          'contextualClass' | 'isRequired' | 'isOptional'\n        >;\n        HelperText?: WithBoundArgs<\n          typeof HdsFormHelperText,\n          'contextualClass' | 'controlId' | 'onInsert'\n        >;\n        Control?: typeof HdsYield;\n        Error?: WithBoundArgs<\n          typeof HdsFormError,\n          'contextualClass' | 'controlId' | 'onInsert' | 'onRemove'\n        >;\n        id?: string;\n        ariaDescribedBy?: string;\n      },\n    ];\n  };\n  Element: HTMLElement;\n}\n\n// @ts-expect-error: decorator function return type 'ClassOf<AriaDescribedByComponent>' is not assignable to 'typeof HdsFormFieldComponent'\n@ariaDescribedBy\nexport default class HdsFormFieldset extends Component<HdsFormFieldsetSignature> {\n  get layout(): HdsFormFieldsetLayouts {\n    return this.args.layout ?? HdsFormFieldsetLayoutValues.Vertical;\n  }\n\n  get id(): string {\n    return getElementId(this);\n  }\n\n  get isRequired(): boolean {\n    return this.args.isRequired || false;\n  }\n\n  get isOptional(): boolean {\n    return this.args.isOptional || false;\n  }\n\n  get classNames(): string {\n    // we just need a class for the layout\n    const classes = ['hds-form-group'];\n\n    // add a class based on the @layout argument\n    classes.push(`hds-form-group--layout-${this.layout}`);\n\n    return classes.join(' ');\n  }\n\n  appendDescriptor = (element: HTMLElement): void => {\n    registerAriaDescriptionElement(this as AriaDescribedByComponent, element);\n  };\n\n  removeDescriptor = (element: HTMLElement): void => {\n    unregisterAriaDescriptionElement(this as AriaDescribedByComponent, element);\n  };\n\n  <template>\n    <fieldset class={{this.classNames}} id={{this.id}} ...attributes>\n      {{yield\n        (hash\n          Legend=(component\n            HdsFormLegend\n            isRequired=this.isRequired\n            isOptional=this.isOptional\n            contextualClass=\"hds-form-group__legend\"\n          )\n        )\n      }}\n      {{yield\n        (hash\n          HelperText=(component\n            HdsFormHelperText\n            controlId=this.id\n            onInsert=this.appendDescriptor\n            contextualClass=\"hds-form-group__helper-text\"\n          )\n        )\n      }}\n      <div class=\"hds-form-group__control-fields-wrapper\">\n        {{! @glint-expect-error }}\n        {{yield (hash Control=HdsYield ariaDescribedBy=this.ariaDescribedBy)}}\n      </div>\n      {{yield\n        (hash\n          Error=(component\n            HdsFormError\n            controlId=this.id\n            onInsert=this.appendDescriptor\n            onRemove=this.removeDescriptor\n            contextualClass=\"hds-form-group__error\"\n          )\n        )\n      }}\n    </fieldset>\n  </template>\n}\n","'use strict'\n\nconst {\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_BUILD_LENGTH,\n  MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n  ['\\\\s', 1],\n  ['\\\\d', MAX_LENGTH],\n  [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n  for (const [token, max] of safeRegexReplacements) {\n    value = value\n      .split(`${token}*`).join(`${token}{0,${max}}`)\n      .split(`${token}+`).join(`${token}{1,${max}}`)\n  }\n  return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n  const safe = makeSafeRegex(value)\n  const index = R++\n  debug(name, index, value)\n  t[name] = index\n  src[index] = value\n  safeSrc[index] = safe\n  re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n  safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n                   `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n                        `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n// Non-numeric identifiers include numeric identifiers but can be longer.\n// Therefore non-numeric identifiers must go first.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups.  The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n  src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifier, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n                   `(?:${src[t.PRERELEASE]})?${\n                     src[t.BUILD]}?` +\n                   `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n                        `(?:${src[t.PRERELEASELOOSE]})?${\n                          src[t.BUILD]}?` +\n                        `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n              '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n              `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n              `(?:${src[t.PRERELEASE]})?` +\n              `(?:${src[t.BUILD]})?` +\n              `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s+-\\\\s+` +\n                   `(${src[t.XRANGEPLAIN]})` +\n                   `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s+-\\\\s+` +\n                        `(${src[t.XRANGEPLAINLOOSE]})` +\n                        `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","import { setModifierManager, capabilities } from '@ember/modifier';\nimport { untrack } from '@glimmer/validator';\n\nimport type {\n  ModifierArgs,\n  ModifierState,\n  RenderModifierType,\n} from '../types.ts';\n\n/**\n * The `{{didUpdate}}` modifier is activated when any of its arguments\n * are updated. It does **not** run on initial render.\n *\n * The callback receives the element as its first argument, followed by\n * any positional arguments passed to the modifier.\n *\n * By default, the executed function will be unbound. If you would like to\n * access the component context in your function, use the `@action` decorator.\n *\n * @example Resizing a textarea when `@text` changes\n * ```gjs\n * import { didUpdate } from '@ember/render-modifiers';\n *\n * function resize(element) {\n *   element.style.height = `${element.scrollHeight}px`;\n * }\n *\n * <template>\n *   <textarea {{didUpdate resize @text}} readonly style=\"padding: 0px;\">\n *     {{@text}}\n *   </textarea>\n * </template>\n * ```\n *\n * @example Positional and named arguments\n * ```gjs\n * import { didUpdate } from '@ember/render-modifiers';\n *\n * function logArguments(element, [first, second], { third }) {\n *   console.log('element', element);\n *   console.log('positional args', first, second);\n *   console.log('named args', third);\n * }\n *\n * <template>\n *   <div {{didUpdate logArguments @first @second third=@third}} />\n * </template>\n * ```\n *\n * @example With `@action` for component context\n * ```gjs\n * import Component from '@glimmer/component';\n * import { tracked } from '@glimmer/tracking';\n * import { action } from '@ember/object';\n * import { didUpdate } from '@ember/render-modifiers';\n *\n * export default class MyComponent extends Component {\n *   @tracked scrollPosition = 0;\n *\n *   @action\n *   setScrollPosition(element) {\n *     element.scrollTop = this.scrollPosition;\n *   }\n *\n *   <template>\n *     <div {{didUpdate this.setScrollPosition @scrollPosition}} class=\"scroll-container\">\n *       {{yield}}\n *     </div>\n *   </template>\n * }\n * ```\n */\nconst DidUpdateModifier = setModifierManager(\n  () => ({\n    capabilities: capabilities('3.22', { disableAutoTracking: false }),\n    createModifier(): ModifierState {\n      return { element: null };\n    },\n    installModifier(\n      state: ModifierState,\n      element: Element,\n      args: ModifierArgs,\n    ) {\n      // save element into state bucket\n      state.element = element;\n\n      // Consume individual properties to entangle tracking.\n      // https://github.com/emberjs/ember.js/issues/19277\n      // https://github.com/ember-modifier/ember-modifier/pull/63#issuecomment-815908201\n      args.positional.forEach(() => {});\n      if (args.named) Object.values(args.named);\n    },\n\n    updateModifier({ element }: ModifierState, args: ModifierArgs) {\n      const [fn, ...positional] = args.positional;\n\n      // Consume individual properties to entangle tracking.\n      // https://github.com/emberjs/ember.js/issues/19277\n      // https://github.com/ember-modifier/ember-modifier/pull/63#issuecomment-815908201\n      args.positional.forEach(() => {});\n      if (args.named) Object.values(args.named);\n\n      untrack(() => {\n        fn(element!, positional, args.named);\n      });\n    },\n\n    destroyModifier() {},\n  }),\n  class DidUpdateModifier {},\n) as unknown as RenderModifierType;\n\nexport default DidUpdateModifier;\n","import { setModifierManager, capabilities } from '@ember/modifier';\n\nimport type {\n  ModifierArgs,\n  ModifierState,\n  RenderModifierType,\n} from '../types.ts';\n\n/**\n * The `{{willDestroy}}` modifier is activated immediately before the element\n * is removed from the DOM.\n *\n * The callback receives the element as its first argument, followed by\n * any positional arguments passed to the modifier.\n *\n * By default, the executed function will be unbound. If you would like to\n * access the component context in your function, use the `@action` decorator.\n *\n * @example Basic usage\n * ```gjs\n * import { willDestroy } from '@ember/render-modifiers';\n *\n * function teardownPlugin(element) {\n *   // teardown logic here\n * }\n *\n * <template>\n *   <div {{willDestroy teardownPlugin}}>\n *     {{yield}}\n *   </div>\n * </template>\n * ```\n *\n * @example With `@action` for component context\n * ```gjs\n * import Component from '@glimmer/component';\n * import { action } from '@ember/object';\n * import { service } from '@ember/service';\n * import { willDestroy } from '@ember/render-modifiers';\n *\n * export default class MyComponent extends Component {\n *   @service analytics;\n *\n *   @action\n *   trackRemoval(element) {\n *     this.analytics.track('element-removed', { id: element.id });\n *   }\n *\n *   <template>\n *     <div {{willDestroy this.trackRemoval}} id=\"tracked-element\">\n *       {{yield}}\n *     </div>\n *   </template>\n * }\n * ```\n */\nconst WillDestroyModifier = setModifierManager(\n  () => ({\n    capabilities: capabilities('3.22', { disableAutoTracking: true }),\n    createModifier(): ModifierState {\n      return { element: null };\n    },\n\n    installModifier(state: ModifierState, element: Element) {\n      state.element = element;\n    },\n\n    updateModifier() {},\n\n    destroyModifier({ element }: ModifierState, args: ModifierArgs) {\n      const [fn, ...positional] = args.positional;\n\n      fn(element!, positional, args.named);\n    },\n  }),\n  class WillDestroyModifier {},\n) as unknown as RenderModifierType;\n\nexport default WillDestroyModifier;\n","import { TaskFactory } from './task-factory';\n\n/**\n * This builder function is called by the transpiled code from\n * `task(async () => {})`. See async-arrow-task-transform.js\n *\n * @private\n */\nexport function buildTask(contextFn, options, taskName, bufferPolicyName) {\n  let optionsWithBufferPolicy = options;\n\n  if (bufferPolicyName) {\n    optionsWithBufferPolicy = Object.assign({}, optionsWithBufferPolicy);\n    optionsWithBufferPolicy[bufferPolicyName] = true;\n  }\n\n  const result = contextFn();\n\n  const taskFactory = new TaskFactory(\n    taskName || '<unknown>',\n    result.generator,\n    optionsWithBufferPolicy,\n  );\n  return taskFactory.createTask(result.context);\n}\n","import { later, cancel } from '@ember/runloop';\nimport { EMBER_ENVIRONMENT } from './ember-environment';\nimport { Yieldable } from './external/yieldables';\n\nexport function isEventedObject(c) {\n  return (\n    c &&\n    ((typeof c.one === 'function' && typeof c.off === 'function') ||\n      (typeof c.on === 'function' && typeof c.off === 'function') ||\n      (typeof c.addEventListener === 'function' &&\n        typeof c.removeEventListener === 'function'))\n  );\n}\n\nexport class EmberYieldable extends Yieldable {\n  _deferable() {\n    return EMBER_ENVIRONMENT.defer();\n  }\n}\n\nclass TimeoutYieldable extends EmberYieldable {\n  constructor(ms) {\n    super();\n    this.ms = ms;\n  }\n\n  onYield(state) {\n    let timerId = later(() => state.next(), this.ms);\n\n    return () => cancel(timerId);\n  }\n}\n\n/**\n *\n * Yielding `timeout(ms)` will pause a task for the duration\n * of time passed in, in milliseconds.\n *\n * This timeout will be scheduled on the Ember runloop, which\n * means that test helpers will wait for it to complete before\n * continuing with the test. See `rawTimeout()` if you need\n * different behavior.\n *\n * The task below, when performed, will print a message to the\n * console every second.\n *\n * ```js\n * export default class MyComponent extends Component {\n *   &#64;task *myTask() {\n *     while (true) {\n *       console.log(\"Hello!\");\n *       yield timeout(1000);\n *     }\n *   }\n * }\n * ```\n *\n * @param {number} ms - the amount of time to sleep before resuming\n *   the task, in milliseconds\n */\nexport function timeout(ms) {\n  return new TimeoutYieldable(ms);\n}\n\nexport function deprecatePrivateModule(moduleName) {\n  // eslint-disable-next-line no-console\n  console.warn(\n    `an Ember addon is importing a private ember-concurrency module '${moduleName}' that has moved`,\n  );\n}\n","import { TaskFactory } from './task-factory';\n\nimport { deprecate } from '@ember/debug';\n\nfunction taskFromPropertyDescriptor(\n  target,\n  key,\n  descriptor,\n  params = [],\n  factoryClass = TaskFactory,\n) {\n  let { initializer, get, value } = descriptor;\n  let taskFn;\n\n  deprecate(\n    'Using @task decorator (or any of its variants) is deprecated. Please use modern `taskName = task(async () => {})` syntax instead',\n    false,\n    {\n      id: 'ember-concurrency.deprecate-decorator-task',\n      for: 'ember-concurrency',\n      since: '4.0.5',\n      until: '5.0.0',\n    },\n  );\n\n  if (initializer) {\n    taskFn = initializer.call(undefined);\n  } else if (get) {\n    taskFn = get.call(undefined);\n  } else if (value) {\n    taskFn = value;\n  }\n\n  taskFn.displayName = `${key} (task)`;\n\n  let tasks = new WeakMap();\n  let options = params[0] || {};\n  let factory = new factoryClass(key, taskFn, options);\n  factory._setupEmberKVO(target);\n\n  return {\n    get() {\n      let task = tasks.get(this);\n\n      if (!task) {\n        task = factory.createTask(this);\n        tasks.set(this, task);\n      }\n\n      return task;\n    },\n  };\n}\n\nfunction taskGroupPropertyDescriptor(\n  _target,\n  key,\n  _descriptor,\n  params = [],\n  factoryClass = TaskFactory,\n) {\n  let taskGroups = new WeakMap();\n  let options = params[0] || {};\n  let factory = new factoryClass(key, null, options);\n\n  return {\n    get() {\n      let task = taskGroups.get(this);\n\n      if (!task) {\n        task = factory.createTaskGroup(this);\n        taskGroups.set(this, task);\n      }\n\n      return task;\n    },\n  };\n}\n\n// Cribbed from @ember-decorators/utils\nfunction isFieldDescriptor(possibleDesc) {\n  let [target, key, desc] = possibleDesc;\n\n  return (\n    possibleDesc.length === 3 &&\n    typeof target === 'object' &&\n    target !== null &&\n    typeof key === 'string' &&\n    ((typeof desc === 'object' &&\n      desc !== null &&\n      'enumerable' in desc &&\n      'configurable' in desc) ||\n      desc === undefined) // TS compatibility ???\n  );\n}\n\nexport function decoratorWithParams(descriptorFn) {\n  return function (...params) {\n    if (isFieldDescriptor(params)) {\n      return descriptorFn(...params);\n    } else {\n      return (...desc) => descriptorFn(...desc, params);\n    }\n  };\n}\n\nfunction createDecorator(fn, baseOptions = {}, factoryClass = TaskFactory) {\n  return decoratorWithParams((target, key, descriptor, [userOptions] = []) => {\n    let mergedOptions = Object.assign({}, { ...baseOptions, ...userOptions });\n\n    return fn(target, key, descriptor, [mergedOptions], factoryClass);\n  });\n}\n\nexport function createTaskDecorator(\n  baseOptions = {},\n  factoryClass = TaskFactory,\n) {\n  return createDecorator(taskFromPropertyDescriptor, baseOptions, factoryClass);\n}\n\nexport function createTaskGroupDecorator(\n  baseOptions = {},\n  factoryClass = TaskFactory,\n) {\n  return createDecorator(\n    taskGroupPropertyDescriptor,\n    baseOptions,\n    factoryClass,\n  );\n}\n\nexport const lastValue = decoratorWithParams(\n  (_target, _key, descriptor, [taskName] = []) => {\n    const { initializer } = descriptor;\n    delete descriptor.initializer;\n\n    deprecate(\n      '@lastValue is deprecated is deprecated along with all ember-concurrency decorators. Please use a getter that references taskName.lastSuccessful.value instead.',\n      false,\n      {\n        id: 'ember-concurrency.deprecate-decorator-last-value',\n        for: 'ember-concurrency',\n        since: '4.0.5',\n        until: '5.0.0',\n      },\n    );\n\n    return {\n      get() {\n        let lastInstance = this[taskName].lastSuccessful;\n\n        if (lastInstance) {\n          return lastInstance.value;\n        }\n\n        if (initializer) {\n          return initializer.call(this);\n        }\n\n        return undefined;\n      },\n    };\n  },\n);\n","import {\n  createTaskDecorator,\n  createTaskGroupDecorator,\n  lastValue as nativeLastValue,\n} from './external/task-decorators';\nimport { TaskFactory as EmberTaskFactory } from './task-factory';\n\nexport const lastValue = nativeLastValue;\n\n/**\n * A Task is a cancelable, restartable, asynchronous operation that\n * is driven by a generator function. Tasks are automatically canceled\n * when the object they live on is destroyed (e.g. a Component\n * is unrendered).\n *\n * Turns the decorated generator function into a task.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task. For instance `maxConcurrency`, `on`, `group` or `keepLatest`.\n *\n * By default, tasks have no concurrency constraints\n * (multiple instances of a task can be running at the same time)\n * but much of a power of tasks lies in proper usage of Task Modifiers\n * that you can apply to a task.\n *\n * You can also define an\n * <a href=\"/docs/advanced/encapsulated-task\">Encapsulated Task</a>\n * by decorating an object that defines a `perform` generator\n * method.\n *\n * ```js\n * import Component from '@ember/component';\n * import { task } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n *   &#64;task\n *   *plainTask() {}\n *\n *   &#64;task({ maxConcurrency: 5, keepLatest: true, cancelOn: 'click' })\n *   *taskWithModifiers() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task modifier options\n * @param {string|string[]} [options.cancelOn] Events to cancel task on. Applies only to `&#64;ember/component`\n * @param {boolean} [options.enqueue] Sets `enqueue` modifier on task if `true`\n * @param {boolean} [options.evented] Enables [task lifecycle events](/docs/advanced/lifecycle-events) for this Task, if `true`\n * @param {boolean} [options.debug] Enables task debugging if `true`\n * @param {boolean} [options.drop] Sets `drop` modifier on task if `true`\n * @param {string} [options.group] Associates task with the group specified\n * @param {boolean} [options.keepLatest] Sets `keepLatest` modifier on task if `true`\n * @param {number} [options.maxConcurrency] Sets the maximum number of running task instances for the task\n * @param {string|string[]} [options.observes] Properties to watch and cause task to be performed when they change\n * @param {string|string[]} [options.on] Events to perform task on. Applies only to `&#64;ember/component`\n * @param {function?} [options.onState] Callback to use for state tracking. May be set to `null` to disable state tracking.\n * @param {boolean} [options.restartable] Sets `restartable` modifier on task if `true`\n * @return {Task}\n */\nexport const task = createTaskDecorator({}, EmberTaskFactory);\n\n/**\n * Turns the decorated generator function into a task and applies the\n * `drop` modifier.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task. For instance `maxConcurrency`, `on`, or `group`.\n *\n * You can also define an\n * <a href=\"/docs/advanced/encapsulated-task\">Encapsulated Task</a>\n * by decorating an object that defines a `perform` generator\n * method.\n *\n * ```js\n * import Component from '@ember/component';\n * import { task, dropTask } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n *   &#64;task\n *   *plainTask() {}\n *\n *   &#64;dropTask({ cancelOn: 'click' })\n *   *myDropTask() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task modifier options. See {@link task} for list.\n * @return {Task}\n */\nexport const dropTask = createTaskDecorator({ drop: true }, EmberTaskFactory);\n\n/**\n * Turns the decorated generator function into a task and applies the\n * `enqueue` modifier.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task. For instance `maxConcurrency`, `on`, or `group`.\n *\n * You can also define an\n * <a href=\"/docs/advanced/encapsulated-task\">Encapsulated Task</a>\n * by decorating an object that defines a `perform` generator\n * method.\n *\n * ```js\n * import Component from '@ember/component';\n * import { task, enqueueTask } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n *   &#64;task\n *   *plainTask() {}\n *\n *   &#64;enqueueTask({ cancelOn: 'click' })\n *   *myEnqueueTask() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task modifier options. See {@link task} for list.\n * @return {Task}\n */\nexport const enqueueTask = createTaskDecorator(\n  {\n    enqueue: true,\n  },\n  EmberTaskFactory,\n);\n\n/**\n * Turns the decorated generator function into a task and applies the\n * `keepLatest` modifier.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task. For instance `maxConcurrency`, `on`, or `group`.\n *\n * You can also define an\n * <a href=\"/docs/advanced/encapsulated-task\">Encapsulated Task</a>\n * by decorating an object that defines a `perform` generator\n * method.\n *\n * ```js\n * import Component from '@ember/component';\n * import { task, keepLatestTask } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n *   &#64;task\n *   *plainTask() {}\n *\n *   &#64;keepLatestTask({ cancelOn: 'click' })\n *   *myKeepLatestTask() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task modifier options. See {@link task} for list.\n * @return {Task}\n */\nexport const keepLatestTask = createTaskDecorator(\n  {\n    keepLatest: true,\n  },\n  EmberTaskFactory,\n);\n\n/**\n * Turns the decorated generator function into a task and applies the\n * `restartable` modifier.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task. For instance `maxConcurrency`, `on`, or `group`.\n *\n * You can also define an\n * <a href=\"/docs/advanced/encapsulated-task\">Encapsulated Task</a>\n * by decorating an object that defines a `perform` generator\n * method.\n *\n * ```js\n * import Component from '@ember/component';\n * import { task, restartableTask } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n *   &#64;task\n *   *plainTask() {}\n *\n *   &#64;restartableTask({ cancelOn: 'click' })\n *   *myRestartableTask() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task modifier options. See {@link task} for list.\n * @return {Task}\n */\nexport const restartableTask = createTaskDecorator(\n  {\n    restartable: true,\n  },\n  EmberTaskFactory,\n);\n\n/**\n * \"Task Groups\" provide a means for applying\n * task modifiers to groups of tasks. Once a {@linkcode Task} is declared\n * as part of a group task, modifiers like `drop` or `restartable`\n * will no longer affect the individual `Task`. Instead those\n * modifiers can be applied to the entire group.\n *\n * Turns the decorated property into a task group.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task group. For instance `maxConcurrency` or `keepLatest`.\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { task, taskGroup } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n *   &#64;taskGroup({ maxConcurrency: 5 }) chores;\n *\n *   &#64;task({ group: 'chores' })\n *   *mowLawn() {}\n *\n *   &#64;task({ group: 'chores' })\n *   *doDishes() {}\n * }\n * ```\n *\n * @function\n * @param {object?} [options={}] Task group modifier options. See {@link task} for list.\n * @return {TaskGroup}\n */\nexport const taskGroup = createTaskGroupDecorator({}, EmberTaskFactory);\n\n/**\n * Turns the decorated property into a task group and applies the\n * `drop` modifier.\n *\n * Optionally takes a hash of further options that will be applied as modifiers\n * to the task group.\n *\n * @function\n * @param {object?} [options={}] Task group modifier options. See {@link task} for list.\n * @return {TaskGroup}\n */\nexport const dropTaskGroup = createTaskGroupDecorator(\n  {\n    drop: true,\n  },\n  EmberTaskFactory,\n);\n\n/**\n * Turns the decorated property into a task group and applies the\n * `enqueue` modifier.\n *\n * Optionally takes a hash of further options that will be applied as modifiers\n * to the task group.\n *\n * @function\n * @param {object?} [options={}] Task group modifier options. See {@link task} for list.\n * @return {TaskGroup}\n */\nexport const enqueueTaskGroup = createTaskGroupDecorator(\n  {\n    enqueue: true,\n  },\n  EmberTaskFactory,\n);\n\n/**\n * Turns the decorated property into a task group and applies the\n * `keepLatest` modifier.\n *\n * Optionally takes a hash of further options that will be applied as modifiers\n * to the task group.\n *\n * @function\n * @param {object?} [options={}] Task group modifier options. See {@link task} for list.\n * @return {TaskGroup}\n */\nexport const keepLatestTaskGroup = createTaskGroupDecorator(\n  { keepLatest: true },\n  EmberTaskFactory,\n);\n\n/**\n * Turns the decorated property into a task group and applies the\n * `restartable` modifier.\n *\n * Optionally takes a hash of further options that will be applied as modifiers\n * to the task group.\n *\n * @function\n * @param {object?} [options={}] Task group modifier options. See {@link task} for list.\n * @return {TaskGroup}\n */\nexport const restartableTaskGroup = createTaskGroupDecorator(\n  { restartable: true },\n  EmberTaskFactory,\n);\n","import { assert, deprecate } from '@ember/debug';\nimport {\n  task as taskDecorator,\n  taskGroup as taskGroupDecorator,\n} from './task-decorators';\nimport { TaskFactory } from './task-factory';\nimport {\n  TaskGroupProperty,\n  TaskProperty,\n  taskComputed,\n  taskFactorySymbol,\n} from './task-properties';\n\n// eslint-disable-next-line no-unused-vars\nimport { TaskGroup } from './task-group';\n\n/**\n * A Task is a cancelable, restartable, asynchronous operation that\n * is driven by an async function. Tasks are automatically canceled\n * when the object they live on is destroyed (e.g. a Component\n * is unrendered).\n *\n * To define a task, use the `task(...)` function, and pass in\n * an async arrow function, which will be invoked when the task\n * is performed. Async functions with the await keyword can\n * be used to elegantly express asynchronous, cancelable\n * operations.\n *\n * You can also define an\n * <a href=\"/docs/advanced/encapsulated-task\">Encapsulated Task</a>\n * by passing in an object that defined a `perform` async\n * function property.\n *\n * The following Component defines a task called `myTask` that,\n * when performed, prints a message to the console, sleeps for 1 second,\n * prints a final message to the console, and then completes.\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { task, timeout } from 'ember-concurrency';\n *\n * export default class MyComponent extends Component {\n *   myTask = task(async () => {\n *     console.log(\"Pausing for a second...\");\n *     await timeout(1000);\n *     console.log(\"Done!\");\n *   });\n * }\n * ```\n *\n * ```hbs\n * <button {{action myTask.perform}}>Perform Task</button>\n * ```\n *\n * By default, tasks have no concurrency constraints\n * (multiple instances of a task can be running at the same time)\n * but much of a power of tasks lies in proper usage of Task Modifiers\n * that you can apply to a task.\n *\n * @param {function} taskFunction the async function backing the task.\n * @returns {TaskProperty}\n */\nexport function task(taskFnOrProtoOrDecoratorOptions, key, descriptor) {\n  assert(\n    `It appears you're attempting to use the new task(async () => { ... }) syntax, but the async arrow task function you've provided is not being properly compiled by Babel.\\n\\nPossible causes / remedies:\\n\\n1. You must pass the async function expression directly to the task() function (it is not currently supported to pass in a variable containing the async arrow fn, or any other kind of indirection)\\n2. The new task syntax is only supported by native classes. Ensure that this is one.\\n3. If this code is in an addon, please ensure the addon specifies ember-concurrency \"2.3.0\" or higher in \"dependencies\" (not \"devDependencies\")\\n4. Ensure that there is only one version of ember-concurrency v2.3.0+ being used in your project (including nested dependencies) and consider using npm/yarn/pnpm resolutions to enforce a single version is used\\n5. Ensure that you have registered the Babel transform that Ember Concurrency uses to transform tasks in the \"async-arrow\" notation, see https://ember-concurrency.com/docs/v4-upgrade`,\n    !isUntranspiledAsyncFn(arguments[arguments.length - 1]),\n  );\n\n  if (\n    isDecoratorOptions(taskFnOrProtoOrDecoratorOptions) ||\n    (key && descriptor)\n  ) {\n    return taskDecorator(...arguments);\n  } else {\n    return buildClassicTaskProperty(taskFnOrProtoOrDecoratorOptions);\n  }\n}\n\nfunction isUntranspiledAsyncFn(obj) {\n  return obj && obj.constructor && obj.constructor.name === 'AsyncFunction';\n}\n\n/**\n * Build and return a \"classic\" TaskProperty, which is essentially a subclass of a Computed Property\n * descriptor that can be used to define Tasks on classic Ember.Objects.\n *\n * @private\n */\nfunction buildClassicTaskProperty(taskFn) {\n  const taskProperty = taskComputed(function () {\n    taskProperty[taskFactorySymbol].setTaskDefinition(taskProperty.taskFn);\n    return taskProperty[taskFactorySymbol].createTask(this);\n  });\n\n  deprecate(\n    \"Using task() in any form other than `taskName = task(async () => {})` is deprecated. Please use the modern syntax instead (and consider using one of ember-concurrency's codemods).\",\n    false,\n    {\n      id: 'ember-concurrency.deprecate-classic-task-api',\n      for: 'ember-concurrency',\n      since: '4.0.5',\n      until: '5.0.0',\n    },\n  );\n\n  taskProperty.taskFn = taskFn;\n\n  taskProperty[taskFactorySymbol] = new TaskFactory();\n\n  Object.setPrototypeOf(taskProperty, TaskProperty.prototype);\n\n  return taskProperty;\n}\n\n/**\n * \"Task Groups\" provide a means for applying\n * task modifiers to groups of tasks. Once a {@linkcode Task} is declared\n * as part of a group task, modifiers like `drop` or `restartable`\n * will no longer affect the individual `Task`. Instead those\n * modifiers can be applied to the entire group.\n *\n * ```js\n * import { task, taskGroup } from 'ember-concurrency';\n *\n * export default class MyController extends Controller {\n *   &#64;taskGroup({ drop: true }) chores;\n *\n *   &#64;task({ group: 'chores' }) mowLawn = taskFn;\n *   &#64;task({ group: 'chores' }) doDishes = taskFn;\n *   &#64;task({ group: 'chores' }) changeDiapers = taskFn;\n * }\n * ```\n *\n * @returns {TaskGroup}\n */\nexport function taskGroup(possibleDecoratorOptions, key, descriptor) {\n  if (isDecoratorOptions(possibleDecoratorOptions) || (key && descriptor)) {\n    return taskGroupDecorator(...arguments);\n  } else {\n    let tp = taskComputed(function (key) {\n      tp[taskFactorySymbol].setName(key);\n      return tp[taskFactorySymbol].createTaskGroup(this);\n    });\n\n    tp[taskFactorySymbol] = new TaskFactory();\n\n    Object.setPrototypeOf(tp, TaskGroupProperty.prototype);\n\n    return tp;\n  }\n}\n\nfunction isDecoratorOptions(possibleOptions) {\n  if (!possibleOptions) {\n    return false;\n  }\n  if (typeof possibleOptions === 'function') {\n    return false;\n  }\n\n  if (\n    typeof possibleOptions === 'object' &&\n    'perform' in possibleOptions &&\n    typeof possibleOptions.perform === 'function'\n  ) {\n    return false;\n  }\n\n  return Object.getPrototypeOf(possibleOptions) === Object.prototype;\n}\n","import { assert } from '@ember/debug';\nimport RSVP, { Promise } from 'rsvp';\nimport { TaskInstance } from './task-instance';\nimport { cancelableSymbol, Yieldable } from './external/yieldables';\n\n/**\n * A cancelation-aware variant of [Promise.all](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all).\n * The normal version of a `Promise.all` just returns a regular, uncancelable\n * Promise. The `ember-concurrency` variant of `all()` has the following\n * additional behavior:\n *\n * - if the task that `yield`ed `all()` is canceled, any of the\n *   {@linkcode TaskInstance}s passed in to `all` will be canceled\n * - if any of the {@linkcode TaskInstance}s (or regular promises) passed in reject (or\n *   are canceled), all of the other unfinished `TaskInstance`s will\n *   be automatically canceled.\n *\n * [Check out the \"Awaiting Multiple Child Tasks example\"](/docs/examples/joining-tasks)\n */\nexport const all = taskAwareVariantOf(RSVP.Promise, 'all', identity);\n\n/**\n * A cancelation-aware variant of [RSVP.allSettled](https://api.emberjs.com/ember/release/functions/rsvp/allSettled).\n * The normal version of a `RSVP.allSettled` just returns a regular, uncancelable\n * Promise. The `ember-concurrency` variant of `allSettled()` has the following\n * additional behavior:\n *\n * - if the task that `yield`ed `allSettled()` is canceled, any of the\n *   {@linkcode TaskInstance}s passed in to `allSettled` will be canceled\n */\nexport const allSettled = taskAwareVariantOf(RSVP, 'allSettled', identity);\n\n/**\n * A cancelation-aware variant of [Promise.race](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/race).\n * The normal version of a `Promise.race` just returns a regular, uncancelable\n * Promise. The `ember-concurrency` variant of `race()` has the following\n * additional behavior:\n *\n * - if the task that `yield`ed `race()` is canceled, any of the\n *   {@linkcode TaskInstance}s passed in to `race` will be canceled\n * - once any of the tasks/promises passed in complete (either success, failure,\n *   or cancelation), any of the {@linkcode TaskInstance}s passed in will be canceled\n *\n * [Check out the \"Awaiting Multiple Child Tasks example\"](/docs/examples/joining-tasks)\n */\nexport const race = taskAwareVariantOf(Promise, 'race', identity);\n\n/**\n * A cancelation-aware variant of [RSVP.hash](https://api.emberjs.com/ember/release/functions/rsvp/hash).\n * The normal version of a `RSVP.hash` just returns a regular, uncancelable\n * Promise. The `ember-concurrency` variant of `hash()` has the following\n * additional behavior:\n *\n * - if the task that `yield`ed `hash()` is canceled, any of the\n *   {@linkcode TaskInstance}s passed in to `hash` will be canceled\n * - if any of the items rejects/cancels, all other cancelable items\n *   (e.g. {@linkcode TaskInstance}s) will be canceled\n */\nexport const hash = taskAwareVariantOf(RSVP, 'hash', getValues);\n\n/**\n * A cancelation-aware variant of [RSVP.hashSettled](https://api.emberjs.com/ember/release/functions/rsvp/hashSettled).\n * The normal version of a `RSVP.hashSettled` just returns a regular, uncancelable\n * Promise. The `ember-concurrency` variant of `hashSettled()` has the following\n * additional behavior:\n *\n * - if the task that `yield`ed `hashSettled()` is canceled, any of the\n *   {@linkcode TaskInstance}s passed in to `hashSettled` will be canceled\n */\nexport const hashSettled = taskAwareVariantOf(RSVP, 'hashSettled', getValues);\n\nfunction identity(obj) {\n  return obj;\n}\n\nfunction getValues(obj) {\n  return Object.keys(obj).map((k) => obj[k]);\n}\n\nfunction castForPromiseHelper(castable) {\n  if (castable) {\n    if (castable instanceof TaskInstance) {\n      // Mark TaskInstances, including those that performed synchronously and\n      // have finished already, as having their errors handled, as if they had\n      // been then'd, which this is emulating.\n      castable.executor.asyncErrorsHandled = true;\n    } else if (castable instanceof Yieldable) {\n      // Cast to promise\n      return castable._toPromise();\n    }\n  }\n\n  return castable;\n}\n\nfunction castAwaitables(arrOrHash, callback) {\n  if (Array.isArray(arrOrHash)) {\n    return arrOrHash.map(callback);\n  } else if (typeof arrOrHash === 'object' && arrOrHash !== null) {\n    let obj = {};\n    Object.keys(arrOrHash).forEach((key) => {\n      obj[key] = callback(arrOrHash[key]);\n    });\n    return obj;\n  } else {\n    // :shruggie:\n    return arrOrHash;\n  }\n}\n\nfunction taskAwareVariantOf(obj, method, getItems) {\n  return function (awaitable) {\n    let awaitables = castAwaitables(awaitable, castForPromiseHelper);\n\n    let items = getItems(awaitables);\n    assert(`'${method}' expects an array.`, Array.isArray(items));\n\n    let defer = RSVP.defer();\n\n    obj[method](awaitables).then(defer.resolve, defer.reject);\n\n    let hasCancelled = false;\n    let cancelAll = () => {\n      if (hasCancelled) {\n        return;\n      }\n      hasCancelled = true;\n      items.forEach((it) => {\n        if (it) {\n          if (it instanceof TaskInstance) {\n            it.cancel();\n          } else if (typeof it[cancelableSymbol] === 'function') {\n            it[cancelableSymbol]();\n          }\n        }\n      });\n    };\n\n    let promise = defer.promise.finally(cancelAll);\n    promise[cancelableSymbol] = cancelAll;\n    return promise;\n  };\n}\n","import { assert, deprecate } from '@ember/debug';\nimport { get } from '@ember/object';\nimport { addObserver, removeObserver } from '@ember/object/observers';\nimport { cancel, schedule } from '@ember/runloop';\nimport { EmberYieldable, isEventedObject } from './utils';\n\nclass WaitForQueueYieldable extends EmberYieldable {\n  constructor(queueName) {\n    super();\n    this.queueName = queueName;\n  }\n\n  onYield(state) {\n    let timerId;\n\n    try {\n      timerId = schedule(this.queueName, () => state.next());\n    } catch (error) {\n      state.throw(error);\n    }\n\n    return () => cancel(timerId);\n  }\n}\n\nclass WaitForEventYieldable extends EmberYieldable {\n  constructor(object, eventName) {\n    super();\n    this.object = object;\n    this.eventName = eventName;\n    this.usesDOMEvents = false;\n  }\n\n  on(callback) {\n    if (typeof this.object.addEventListener === 'function') {\n      // assume that we're dealing with a DOM `EventTarget`.\n      this.usesDOMEvents = true;\n      this.object.addEventListener(this.eventName, callback);\n    } else {\n      this.object.on(this.eventName, callback);\n    }\n  }\n\n  off(callback) {\n    if (this.usesDOMEvents) {\n      this.object.removeEventListener(this.eventName, callback);\n    } else {\n      this.object.off(this.eventName, callback);\n    }\n  }\n\n  onYield(state) {\n    let fn = null;\n    let disposer = () => {\n      fn && this.off(fn);\n      fn = null;\n    };\n\n    fn = (event) => {\n      disposer();\n      state.next(event);\n    };\n\n    this.on(fn);\n\n    return disposer;\n  }\n}\n\nclass WaitForPropertyYieldable extends EmberYieldable {\n  constructor(object, key, predicateCallback = Boolean) {\n    super();\n    this.object = object;\n    this.key = key;\n\n    deprecate(\n      'waitForProperty is deprecated due to its use of observers. Consider using a polling approach instead.',\n      false,\n      {\n        id: 'ember-concurrency.deprecate-wait-for-property',\n        for: 'ember-concurrency',\n        since: '4.0.5',\n        until: '5.0.0',\n      },\n    );\n\n    if (typeof predicateCallback === 'function') {\n      this.predicateCallback = predicateCallback;\n    } else {\n      this.predicateCallback = (v) => v === predicateCallback;\n    }\n  }\n\n  onYield(state) {\n    let observerBound = false;\n    let observerFn = () => {\n      let value = get(this.object, this.key);\n      let predicateValue = this.predicateCallback(value);\n      if (predicateValue) {\n        state.next(value);\n        return true;\n      }\n    };\n\n    if (!observerFn()) {\n      // eslint-disable-next-line ember/no-observers\n      addObserver(this.object, this.key, null, observerFn);\n      observerBound = true;\n    }\n\n    return () => {\n      if (observerBound && observerFn) {\n        removeObserver(this.object, this.key, null, observerFn);\n      }\n    };\n  }\n}\n\n/**\n * Use `waitForQueue` to pause the task until a certain run loop queue is reached.\n *\n * ```js\n * import { task, waitForQueue } from 'ember-concurrency';\n * export default class MyComponent extends Component {\n *   &#64;task *myTask() {\n *     yield waitForQueue('afterRender');\n *     console.log(\"now we're in the afterRender queue\");\n *   }\n * }\n * ```\n *\n * @param {string} queueName the name of the Ember run loop queue\n */\nexport function waitForQueue(queueName) {\n  return new WaitForQueueYieldable(queueName);\n}\n\n/**\n * Use `waitForEvent` to pause the task until an event is fired. The event\n * can either be a jQuery event or an Ember.Evented event (or any event system\n * where the object supports `.on()` `.one()` and `.off()`).\n *\n * ```js\n * import { task, waitForEvent } from 'ember-concurrency';\n * export default class MyComponent extends Component {\n *   &#64;task *myTask() {\n *     console.log(\"Please click anywhere..\");\n *     let clickEvent = yield waitForEvent($('body'), 'click');\n *     console.log(\"Got event\", clickEvent);\n *\n *     let emberEvent = yield waitForEvent(this, 'foo');\n *     console.log(\"Got foo event\", emberEvent);\n *\n *     // somewhere else: component.trigger('foo', { value: 123 });\n *   }\n * }\n * ```\n *\n * @param {object} object the Ember Object, jQuery element, or other object with .on() and .off() APIs\n *                 that the event fires from\n * @param {function} eventName the name of the event to wait for\n */\nexport function waitForEvent(object, eventName) {\n  assert(\n    `${object} must include Ember.Evented (or support \\`.on()\\` and \\`.off()\\`) or DOM EventTarget (or support \\`addEventListener\\` and  \\`removeEventListener\\`) to be able to use \\`waitForEvent\\``,\n    isEventedObject(object),\n  );\n  return new WaitForEventYieldable(object, eventName);\n}\n\n/**\n * Use `waitForProperty` to pause the task until a property on an object\n * changes to some expected value. This can be used for a variety of use\n * cases, including synchronizing with another task by waiting for it\n * to become idle, or change state in some other way. If you omit the\n * callback, `waitForProperty` will resume execution when the observed\n * property becomes truthy. If you provide a callback, it'll be called\n * immediately with the observed property's current value, and multiple\n * times thereafter whenever the property changes, until you return\n * a truthy value from the callback, or the current task is canceled.\n * You can also pass in a non-Function value in place of the callback,\n * in which case the task will continue executing when the property's\n * value becomes the value that you passed in.\n *\n * ```js\n * import { task, waitForProperty } from 'ember-concurrency';\n * export default class MyComponent extends Component {\n *   &#64;tracked foo = 0;\n *\n *   &#64;task *myTask() {\n *     console.log(\"Waiting for `foo` to become 5\");\n *\n *     yield waitForProperty(this, 'foo', v => v === 5);\n *     // alternatively: yield waitForProperty(this, 'foo', 5);\n *\n *     // somewhere else: this.foo = 5;\n *\n *     console.log(\"`foo` is 5!\");\n *\n *     // wait for another task to be idle before running:\n *     yield waitForProperty(this, 'otherTask.isIdle');\n *     console.log(\"otherTask is idle!\");\n *   }\n * }\n * ```\n *\n * @param {object} object an object (most likely an Ember Object)\n * @param {string} key the property name that is observed for changes\n * @param {function} callbackOrValue a Function that should return a truthy value\n *                                   when the task should continue executing, or\n *                                   a non-Function value that the watched property\n *                                   needs to equal before the task will continue running\n */\nexport function waitForProperty(object, key, predicateCallback) {\n  return new WaitForPropertyYieldable(object, key, predicateCallback);\n}\n","import { DEBUG_BUILD } from '../debug-build';\nimport { logger } from '../logger';\nimport { getFunctionName } from '../stacktrace';\n\nexport type InstrumentHandlerType =\n  | 'console'\n  | 'dom'\n  | 'fetch'\n  | 'fetch-body-resolved'\n  | 'history'\n  | 'xhr'\n  | 'error'\n  | 'unhandledrejection';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type InstrumentHandlerCallback = (data: any) => void;\n\n// We keep the handlers globally\nconst handlers: { [key in InstrumentHandlerType]?: InstrumentHandlerCallback[] } = {};\nconst instrumented: { [key in InstrumentHandlerType]?: boolean } = {};\n\n/** Add a handler function. */\nexport function addHandler(type: InstrumentHandlerType, handler: InstrumentHandlerCallback): void {\n  handlers[type] = handlers[type] || [];\n  (handlers[type] as InstrumentHandlerCallback[]).push(handler);\n}\n\n/**\n * Reset all instrumentation handlers.\n * This can be used by tests to ensure we have a clean slate of instrumentation handlers.\n */\nexport function resetInstrumentationHandlers(): void {\n  Object.keys(handlers).forEach(key => {\n    handlers[key as InstrumentHandlerType] = undefined;\n  });\n}\n\n/** Maybe run an instrumentation function, unless it was already called. */\nexport function maybeInstrument(type: InstrumentHandlerType, instrumentFn: () => void): void {\n  if (!instrumented[type]) {\n    instrumented[type] = true;\n    try {\n      instrumentFn();\n    } catch (e) {\n      DEBUG_BUILD && logger.error(`Error while instrumenting ${type}`, e);\n    }\n  }\n}\n\n/** Trigger handlers for a given instrumentation type. */\nexport function triggerHandlers(type: InstrumentHandlerType, data: unknown): void {\n  const typeHandlers = type && handlers[type];\n  if (!typeHandlers) {\n    return;\n  }\n\n  for (const handler of typeHandlers) {\n    try {\n      handler(data);\n    } catch (e) {\n      DEBUG_BUILD &&\n        logger.error(\n          `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n          e,\n        );\n    }\n  }\n}\n","import type { Carrier } from './../carrier';\nimport { getMainCarrier, getSentryCarrier } from './../carrier';\nimport { getStackAsyncContextStrategy } from './stackStrategy';\nimport type { AsyncContextStrategy } from './types';\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Sets the global async context strategy\n */\nexport function setAsyncContextStrategy(strategy: AsyncContextStrategy | undefined): void {\n  // Get main carrier (global for every environment)\n  const registry = getMainCarrier();\n  const sentry = getSentryCarrier(registry);\n  sentry.acs = strategy;\n}\n\n/**\n * Get the current async context strategy.\n * If none has been setup, the default will be used.\n */\nexport function getAsyncContextStrategy(carrier: Carrier): AsyncContextStrategy {\n  const sentry = getSentryCarrier(carrier);\n\n  if (sentry.acs) {\n    return sentry.acs;\n  }\n\n  // Otherwise, use the default one (stack)\n  return getStackAsyncContextStrategy();\n}\n","/* eslint-disable max-lines */\nimport type { Client } from './client';\nimport { updateSession } from './session';\nimport type {\n  Attachment,\n  Breadcrumb,\n  Context,\n  Contexts,\n  DynamicSamplingContext,\n  Event,\n  EventHint,\n  EventProcessor,\n  Extra,\n  Extras,\n  Primitive,\n  PropagationContext,\n  RequestEventData,\n  Session,\n  SeverityLevel,\n  Span,\n  User,\n} from './types-hoist';\nimport { isPlainObject } from './utils-hoist/is';\nimport { logger } from './utils-hoist/logger';\nimport { uuid4 } from './utils-hoist/misc';\nimport { generateTraceId } from './utils-hoist/propagationContext';\nimport { dateTimestampInSeconds } from './utils-hoist/time';\nimport { merge } from './utils/merge';\nimport { _getSpanForScope, _setSpanForScope } from './utils/spanOnScope';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * A context to be used for capturing an event.\n * This can either be a Scope, or a partial ScopeContext,\n * or a callback that receives the current scope and returns a new scope to use.\n */\nexport type CaptureContext = Scope | Partial<ScopeContext> | ((scope: Scope) => Scope);\n\n/**\n * Data that can be converted to a Scope.\n */\nexport interface ScopeContext {\n  user: User;\n  level: SeverityLevel;\n  extra: Extras;\n  contexts: Contexts;\n  tags: { [key: string]: Primitive };\n  fingerprint: string[];\n  propagationContext: PropagationContext;\n}\n\nexport interface SdkProcessingMetadata {\n  [key: string]: unknown;\n  requestSession?: {\n    status: 'ok' | 'errored' | 'crashed';\n  };\n  normalizedRequest?: RequestEventData;\n  dynamicSamplingContext?: Partial<DynamicSamplingContext>;\n  capturedSpanScope?: Scope;\n  capturedSpanIsolationScope?: Scope;\n  spanCountBeforeProcessing?: number;\n  ipAddress?: string;\n}\n\n/**\n * Normalized data of the Scope, ready to be used.\n */\nexport interface ScopeData {\n  eventProcessors: EventProcessor[];\n  breadcrumbs: Breadcrumb[];\n  user: User;\n  tags: { [key: string]: Primitive };\n  extra: Extras;\n  contexts: Contexts;\n  attachments: Attachment[];\n  propagationContext: PropagationContext;\n  sdkProcessingMetadata: SdkProcessingMetadata;\n  fingerprint: string[];\n  level?: SeverityLevel;\n  transactionName?: string;\n  span?: Span;\n}\n\n/**\n * Holds additional event information.\n */\nexport class Scope {\n  /** Flag if notifying is happening. */\n  protected _notifyingListeners: boolean;\n\n  /** Callback for client to receive scope changes. */\n  protected _scopeListeners: Array<(scope: Scope) => void>;\n\n  /** Callback list that will be called during event processing. */\n  protected _eventProcessors: EventProcessor[];\n\n  /** Array of breadcrumbs. */\n  protected _breadcrumbs: Breadcrumb[];\n\n  /** User */\n  protected _user: User;\n\n  /** Tags */\n  protected _tags: { [key: string]: Primitive };\n\n  /** Extra */\n  protected _extra: Extras;\n\n  /** Contexts */\n  protected _contexts: Contexts;\n\n  /** Attachments */\n  protected _attachments: Attachment[];\n\n  /** Propagation Context for distributed tracing */\n  protected _propagationContext: PropagationContext;\n\n  /**\n   * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n   * sent to Sentry\n   */\n  protected _sdkProcessingMetadata: SdkProcessingMetadata;\n\n  /** Fingerprint */\n  protected _fingerprint?: string[];\n\n  /** Severity */\n  protected _level?: SeverityLevel;\n\n  /**\n   * Transaction Name\n   *\n   * IMPORTANT: The transaction name on the scope has nothing to do with root spans/transaction objects.\n   * It's purpose is to assign a transaction to the scope that's added to non-transaction events.\n   */\n  protected _transactionName?: string;\n\n  /** Session */\n  protected _session?: Session;\n\n  /** The client on this scope */\n  protected _client?: Client;\n\n  /** Contains the last event id of a captured event.  */\n  protected _lastEventId?: string;\n\n  // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n\n  public constructor() {\n    this._notifyingListeners = false;\n    this._scopeListeners = [];\n    this._eventProcessors = [];\n    this._breadcrumbs = [];\n    this._attachments = [];\n    this._user = {};\n    this._tags = {};\n    this._extra = {};\n    this._contexts = {};\n    this._sdkProcessingMetadata = {};\n    this._propagationContext = {\n      traceId: generateTraceId(),\n      sampleRand: Math.random(),\n    };\n  }\n\n  /**\n   * Clone all data from this scope into a new scope.\n   */\n  public clone(): Scope {\n    const newScope = new Scope();\n    newScope._breadcrumbs = [...this._breadcrumbs];\n    newScope._tags = { ...this._tags };\n    newScope._extra = { ...this._extra };\n    newScope._contexts = { ...this._contexts };\n    if (this._contexts.flags) {\n      // We need to copy the `values` array so insertions on a cloned scope\n      // won't affect the original array.\n      newScope._contexts.flags = {\n        values: [...this._contexts.flags.values],\n      };\n    }\n\n    newScope._user = this._user;\n    newScope._level = this._level;\n    newScope._session = this._session;\n    newScope._transactionName = this._transactionName;\n    newScope._fingerprint = this._fingerprint;\n    newScope._eventProcessors = [...this._eventProcessors];\n    newScope._attachments = [...this._attachments];\n    newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n    newScope._propagationContext = { ...this._propagationContext };\n    newScope._client = this._client;\n    newScope._lastEventId = this._lastEventId;\n\n    _setSpanForScope(newScope, _getSpanForScope(this));\n\n    return newScope;\n  }\n\n  /**\n   * Update the client assigned to this scope.\n   * Note that not every scope will have a client assigned - isolation scopes & the global scope will generally not have a client,\n   * as well as manually created scopes.\n   */\n  public setClient(client: Client | undefined): void {\n    this._client = client;\n  }\n\n  /**\n   * Set the ID of the last captured error event.\n   * This is generally only captured on the isolation scope.\n   */\n  public setLastEventId(lastEventId: string | undefined): void {\n    this._lastEventId = lastEventId;\n  }\n\n  /**\n   * Get the client assigned to this scope.\n   */\n  public getClient<C extends Client>(): C | undefined {\n    return this._client as C | undefined;\n  }\n\n  /**\n   * Get the ID of the last captured error event.\n   * This is generally only available on the isolation scope.\n   */\n  public lastEventId(): string | undefined {\n    return this._lastEventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addScopeListener(callback: (scope: Scope) => void): void {\n    this._scopeListeners.push(callback);\n  }\n\n  /**\n   * Add an event processor that will be called before an event is sent.\n   */\n  public addEventProcessor(callback: EventProcessor): this {\n    this._eventProcessors.push(callback);\n    return this;\n  }\n\n  /**\n   * Set the user for this scope.\n   * Set to `null` to unset the user.\n   */\n  public setUser(user: User | null): this {\n    // If null is passed we want to unset everything, but still define keys,\n    // so that later down in the pipeline any existing values are cleared.\n    this._user = user || {\n      email: undefined,\n      id: undefined,\n      ip_address: undefined,\n      username: undefined,\n    };\n\n    if (this._session) {\n      updateSession(this._session, { user });\n    }\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Get the user from this scope.\n   */\n  public getUser(): User | undefined {\n    return this._user;\n  }\n\n  /**\n   * Set an object that will be merged into existing tags on the scope,\n   * and will be sent as tags data with the event.\n   */\n  public setTags(tags: { [key: string]: Primitive }): this {\n    this._tags = {\n      ...this._tags,\n      ...tags,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Set a single tag that will be sent as tags data with the event.\n   */\n  public setTag(key: string, value: Primitive): this {\n    this._tags = { ...this._tags, [key]: value };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Set an object that will be merged into existing extra on the scope,\n   * and will be sent as extra data with the event.\n   */\n  public setExtras(extras: Extras): this {\n    this._extra = {\n      ...this._extra,\n      ...extras,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Set a single key:value extra entry that will be sent as extra data with the event.\n   */\n  public setExtra(key: string, extra: Extra): this {\n    this._extra = { ...this._extra, [key]: extra };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets the fingerprint on the scope to send with the events.\n   * @param {string[]} fingerprint Fingerprint to group events in Sentry.\n   */\n  public setFingerprint(fingerprint: string[]): this {\n    this._fingerprint = fingerprint;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets the level on the scope for future events.\n   */\n  public setLevel(level: SeverityLevel): this {\n    this._level = level;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets the transaction name on the scope so that the name of e.g. taken server route or\n   * the page location is attached to future events.\n   *\n   * IMPORTANT: Calling this function does NOT change the name of the currently active\n   * root span. If you want to change the name of the active root span, use\n   * `Sentry.updateSpanName(rootSpan, 'new name')` instead.\n   *\n   * By default, the SDK updates the scope's transaction name automatically on sensible\n   * occasions, such as a page navigation or when handling a new request on the server.\n   */\n  public setTransactionName(name?: string): this {\n    this._transactionName = name;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets context data with the given name.\n   * Data passed as context will be normalized. You can also pass `null` to unset the context.\n   * Note that context data will not be merged - calling `setContext` will overwrite an existing context with the same key.\n   */\n  public setContext(key: string, context: Context | null): this {\n    if (context === null) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._contexts[key];\n    } else {\n      this._contexts[key] = context;\n    }\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Set the session for the scope.\n   */\n  public setSession(session?: Session): this {\n    if (!session) {\n      delete this._session;\n    } else {\n      this._session = session;\n    }\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Get the session from the scope.\n   */\n  public getSession(): Session | undefined {\n    return this._session;\n  }\n\n  /**\n   * Updates the scope with provided data. Can work in three variations:\n   * - plain object containing updatable attributes\n   * - Scope instance that'll extract the attributes from\n   * - callback function that'll receive the current scope as an argument and allow for modifications\n   */\n  public update(captureContext?: CaptureContext): this {\n    if (!captureContext) {\n      return this;\n    }\n\n    const scopeToMerge = typeof captureContext === 'function' ? captureContext(this) : captureContext;\n\n    const scopeInstance =\n      scopeToMerge instanceof Scope\n        ? scopeToMerge.getScopeData()\n        : isPlainObject(scopeToMerge)\n          ? (captureContext as ScopeContext)\n          : undefined;\n\n    const { tags, extra, user, contexts, level, fingerprint = [], propagationContext } = scopeInstance || {};\n\n    this._tags = { ...this._tags, ...tags };\n    this._extra = { ...this._extra, ...extra };\n    this._contexts = { ...this._contexts, ...contexts };\n\n    if (user && Object.keys(user).length) {\n      this._user = user;\n    }\n\n    if (level) {\n      this._level = level;\n    }\n\n    if (fingerprint.length) {\n      this._fingerprint = fingerprint;\n    }\n\n    if (propagationContext) {\n      this._propagationContext = propagationContext;\n    }\n\n    return this;\n  }\n\n  /**\n   * Clears the current scope and resets its properties.\n   * Note: The client will not be cleared.\n   */\n  public clear(): this {\n    // client is not cleared here on purpose!\n    this._breadcrumbs = [];\n    this._tags = {};\n    this._extra = {};\n    this._user = {};\n    this._contexts = {};\n    this._level = undefined;\n    this._transactionName = undefined;\n    this._fingerprint = undefined;\n    this._session = undefined;\n    _setSpanForScope(this, undefined);\n    this._attachments = [];\n    this.setPropagationContext({ traceId: generateTraceId(), sampleRand: Math.random() });\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Adds a breadcrumb to the scope.\n   * By default, the last 100 breadcrumbs are kept.\n   */\n  public addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): this {\n    const maxCrumbs = typeof maxBreadcrumbs === 'number' ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n\n    // No data has been changed, so don't notify scope listeners\n    if (maxCrumbs <= 0) {\n      return this;\n    }\n\n    const mergedBreadcrumb = {\n      timestamp: dateTimestampInSeconds(),\n      ...breadcrumb,\n    };\n\n    this._breadcrumbs.push(mergedBreadcrumb);\n    if (this._breadcrumbs.length > maxCrumbs) {\n      this._breadcrumbs = this._breadcrumbs.slice(-maxCrumbs);\n      this._client?.recordDroppedEvent('buffer_overflow', 'log_item');\n    }\n\n    this._notifyScopeListeners();\n\n    return this;\n  }\n\n  /**\n   * Get the last breadcrumb of the scope.\n   */\n  public getLastBreadcrumb(): Breadcrumb | undefined {\n    return this._breadcrumbs[this._breadcrumbs.length - 1];\n  }\n\n  /**\n   * Clear all breadcrumbs from the scope.\n   */\n  public clearBreadcrumbs(): this {\n    this._breadcrumbs = [];\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Add an attachment to the scope.\n   */\n  public addAttachment(attachment: Attachment): this {\n    this._attachments.push(attachment);\n    return this;\n  }\n\n  /**\n   * Clear all attachments from the scope.\n   */\n  public clearAttachments(): this {\n    this._attachments = [];\n    return this;\n  }\n\n  /**\n   * Get the data of this scope, which should be applied to an event during processing.\n   */\n  public getScopeData(): ScopeData {\n    return {\n      breadcrumbs: this._breadcrumbs,\n      attachments: this._attachments,\n      contexts: this._contexts,\n      tags: this._tags,\n      extra: this._extra,\n      user: this._user,\n      level: this._level,\n      fingerprint: this._fingerprint || [],\n      eventProcessors: this._eventProcessors,\n      propagationContext: this._propagationContext,\n      sdkProcessingMetadata: this._sdkProcessingMetadata,\n      transactionName: this._transactionName,\n      span: _getSpanForScope(this),\n    };\n  }\n\n  /**\n   * Add data which will be accessible during event processing but won't get sent to Sentry.\n   */\n  public setSDKProcessingMetadata(newData: SdkProcessingMetadata): this {\n    this._sdkProcessingMetadata = merge(this._sdkProcessingMetadata, newData, 2);\n    return this;\n  }\n\n  /**\n   * Add propagation context to the scope, used for distributed tracing\n   */\n  public setPropagationContext(context: PropagationContext): this {\n    this._propagationContext = context;\n    return this;\n  }\n\n  /**\n   * Get propagation context from the scope, used for distributed tracing\n   */\n  public getPropagationContext(): PropagationContext {\n    return this._propagationContext;\n  }\n\n  /**\n   * Capture an exception for this scope.\n   *\n   * @returns {string} The id of the captured Sentry event.\n   */\n  public captureException(exception: unknown, hint?: EventHint): string {\n    const eventId = hint?.event_id || uuid4();\n\n    if (!this._client) {\n      logger.warn('No client configured on scope - will not capture exception!');\n      return eventId;\n    }\n\n    const syntheticException = new Error('Sentry syntheticException');\n\n    this._client.captureException(\n      exception,\n      {\n        originalException: exception,\n        syntheticException,\n        ...hint,\n        event_id: eventId,\n      },\n      this,\n    );\n\n    return eventId;\n  }\n\n  /**\n   * Capture a message for this scope.\n   *\n   * @returns {string} The id of the captured message.\n   */\n  public captureMessage(message: string, level?: SeverityLevel, hint?: EventHint): string {\n    const eventId = hint?.event_id || uuid4();\n\n    if (!this._client) {\n      logger.warn('No client configured on scope - will not capture message!');\n      return eventId;\n    }\n\n    const syntheticException = new Error(message);\n\n    this._client.captureMessage(\n      message,\n      level,\n      {\n        originalException: message,\n        syntheticException,\n        ...hint,\n        event_id: eventId,\n      },\n      this,\n    );\n\n    return eventId;\n  }\n\n  /**\n   * Capture a Sentry event for this scope.\n   *\n   * @returns {string} The id of the captured event.\n   */\n  public captureEvent(event: Event, hint?: EventHint): string {\n    const eventId = hint?.event_id || uuid4();\n\n    if (!this._client) {\n      logger.warn('No client configured on scope - will not capture event!');\n      return eventId;\n    }\n\n    this._client.captureEvent(event, { ...hint, event_id: eventId }, this);\n\n    return eventId;\n  }\n\n  /**\n   * This will be called on every set call.\n   */\n  protected _notifyScopeListeners(): void {\n    // We need this check for this._notifyingListeners to be able to work on scope during updates\n    // If this check is not here we'll produce endless recursion when something is done with the scope\n    // during the callback.\n    if (!this._notifyingListeners) {\n      this._notifyingListeners = true;\n      this._scopeListeners.forEach(callback => {\n        callback(this);\n      });\n      this._notifyingListeners = false;\n    }\n  }\n}\n","import type { Scope } from '../scope';\nimport type { Span } from '../types-hoist';\nimport { addNonEnumerableProperty } from '../utils-hoist/object';\n\nconst SCOPE_SPAN_FIELD = '_sentrySpan';\n\ntype ScopeWithMaybeSpan = Scope & {\n  [SCOPE_SPAN_FIELD]?: Span;\n};\n\n/**\n * Set the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nexport function _setSpanForScope(scope: Scope, span: Span | undefined): void {\n  if (span) {\n    addNonEnumerableProperty(scope as ScopeWithMaybeSpan, SCOPE_SPAN_FIELD, span);\n  } else {\n    // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n    delete (scope as ScopeWithMaybeSpan)[SCOPE_SPAN_FIELD];\n  }\n}\n\n/**\n * Get the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nexport function _getSpanForScope(scope: ScopeWithMaybeSpan): Span | undefined {\n  return scope[SCOPE_SPAN_FIELD];\n}\n","import type { Scope } from '../scope';\nimport type { Span } from '../types-hoist';\nimport { addNonEnumerableProperty } from '../utils-hoist/object';\n\nconst SCOPE_ON_START_SPAN_FIELD = '_sentryScope';\nconst ISOLATION_SCOPE_ON_START_SPAN_FIELD = '_sentryIsolationScope';\n\ntype SpanWithScopes = Span & {\n  [SCOPE_ON_START_SPAN_FIELD]?: Scope;\n  [ISOLATION_SCOPE_ON_START_SPAN_FIELD]?: Scope;\n};\n\n/** Store the scope & isolation scope for a span, which can the be used when it is finished. */\nexport function setCapturedScopesOnSpan(span: Span | undefined, scope: Scope, isolationScope: Scope): void {\n  if (span) {\n    addNonEnumerableProperty(span, ISOLATION_SCOPE_ON_START_SPAN_FIELD, isolationScope);\n    addNonEnumerableProperty(span, SCOPE_ON_START_SPAN_FIELD, scope);\n  }\n}\n\n/**\n * Grabs the scope and isolation scope off a span that were active when the span was started.\n */\nexport function getCapturedScopesOnSpan(span: Span): { scope?: Scope; isolationScope?: Scope } {\n  return {\n    scope: (span as SpanWithScopes)[SCOPE_ON_START_SPAN_FIELD],\n    isolationScope: (span as SpanWithScopes)[ISOLATION_SCOPE_ON_START_SPAN_FIELD],\n  };\n}\n","/**\n * Parse a sample rate from a given value.\n * This will either return a boolean or number sample rate, if the sample rate is valid (between 0 and 1).\n * If a string is passed, we try to convert it to a number.\n *\n * Any invalid sample rate will return `undefined`.\n */\nexport function parseSampleRate(sampleRate: unknown): number | undefined {\n  if (typeof sampleRate === 'boolean') {\n    return Number(sampleRate);\n  }\n\n  const rate = typeof sampleRate === 'string' ? parseFloat(sampleRate) : sampleRate;\n  if (typeof rate !== 'number' || isNaN(rate) || rate < 0 || rate > 1) {\n    return undefined;\n  }\n\n  return rate;\n}\n","import type { DynamicSamplingContext } from '../types-hoist';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { isString } from './is';\nimport { logger } from './logger';\n\nexport const SENTRY_BAGGAGE_KEY_PREFIX = 'sentry-';\n\nexport const SENTRY_BAGGAGE_KEY_PREFIX_REGEX = /^sentry-/;\n\n/**\n * Max length of a serialized baggage string\n *\n * https://www.w3.org/TR/baggage/#limits\n */\nexport const MAX_BAGGAGE_STRING_LENGTH = 8192;\n\n/**\n * Takes a baggage header and turns it into Dynamic Sampling Context, by extracting all the \"sentry-\" prefixed values\n * from it.\n *\n * @param baggageHeader A very bread definition of a baggage header as it might appear in various frameworks.\n * @returns The Dynamic Sampling Context that was found on `baggageHeader`, if there was any, `undefined` otherwise.\n */\nexport function baggageHeaderToDynamicSamplingContext(\n  // Very liberal definition of what any incoming header might look like\n  baggageHeader: string | string[] | number | null | undefined | boolean,\n): Partial<DynamicSamplingContext> | undefined {\n  const baggageObject = parseBaggageHeader(baggageHeader);\n\n  if (!baggageObject) {\n    return undefined;\n  }\n\n  // Read all \"sentry-\" prefixed values out of the baggage object and put it onto a dynamic sampling context object.\n  const dynamicSamplingContext = Object.entries(baggageObject).reduce<Record<string, string>>((acc, [key, value]) => {\n    if (key.match(SENTRY_BAGGAGE_KEY_PREFIX_REGEX)) {\n      const nonPrefixedKey = key.slice(SENTRY_BAGGAGE_KEY_PREFIX.length);\n      acc[nonPrefixedKey] = value;\n    }\n    return acc;\n  }, {});\n\n  // Only return a dynamic sampling context object if there are keys in it.\n  // A keyless object means there were no sentry values on the header, which means that there is no DSC.\n  if (Object.keys(dynamicSamplingContext).length > 0) {\n    return dynamicSamplingContext as Partial<DynamicSamplingContext>;\n  } else {\n    return undefined;\n  }\n}\n\n/**\n * Turns a Dynamic Sampling Object into a baggage header by prefixing all the keys on the object with \"sentry-\".\n *\n * @param dynamicSamplingContext The Dynamic Sampling Context to turn into a header. For convenience and compatibility\n * with the `getDynamicSamplingContext` method on the Transaction class ,this argument can also be `undefined`. If it is\n * `undefined` the function will return `undefined`.\n * @returns a baggage header, created from `dynamicSamplingContext`, or `undefined` either if `dynamicSamplingContext`\n * was `undefined`, or if `dynamicSamplingContext` didn't contain any values.\n */\nexport function dynamicSamplingContextToSentryBaggageHeader(\n  // this also takes undefined for convenience and bundle size in other places\n  dynamicSamplingContext?: Partial<DynamicSamplingContext>,\n): string | undefined {\n  if (!dynamicSamplingContext) {\n    return undefined;\n  }\n\n  // Prefix all DSC keys with \"sentry-\" and put them into a new object\n  const sentryPrefixedDSC = Object.entries(dynamicSamplingContext).reduce<Record<string, string>>(\n    (acc, [dscKey, dscValue]) => {\n      if (dscValue) {\n        acc[`${SENTRY_BAGGAGE_KEY_PREFIX}${dscKey}`] = dscValue;\n      }\n      return acc;\n    },\n    {},\n  );\n\n  return objectToBaggageHeader(sentryPrefixedDSC);\n}\n\n/**\n * Take a baggage header and parse it into an object.\n */\nexport function parseBaggageHeader(\n  baggageHeader: string | string[] | number | null | undefined | boolean,\n): Record<string, string> | undefined {\n  if (!baggageHeader || (!isString(baggageHeader) && !Array.isArray(baggageHeader))) {\n    return undefined;\n  }\n\n  if (Array.isArray(baggageHeader)) {\n    // Combine all baggage headers into one object containing the baggage values so we can later read the Sentry-DSC-values from it\n    return baggageHeader.reduce<Record<string, string>>((acc, curr) => {\n      const currBaggageObject = baggageHeaderToObject(curr);\n      Object.entries(currBaggageObject).forEach(([key, value]) => {\n        acc[key] = value;\n      });\n      return acc;\n    }, {});\n  }\n\n  return baggageHeaderToObject(baggageHeader);\n}\n\n/**\n * Will parse a baggage header, which is a simple key-value map, into a flat object.\n *\n * @param baggageHeader The baggage header to parse.\n * @returns a flat object containing all the key-value pairs from `baggageHeader`.\n */\nfunction baggageHeaderToObject(baggageHeader: string): Record<string, string> {\n  return baggageHeader\n    .split(',')\n    .map(baggageEntry => baggageEntry.split('=').map(keyOrValue => decodeURIComponent(keyOrValue.trim())))\n    .reduce<Record<string, string>>((acc, [key, value]) => {\n      if (key && value) {\n        acc[key] = value;\n      }\n      return acc;\n    }, {});\n}\n\n/**\n * Turns a flat object (key-value pairs) into a baggage header, which is also just key-value pairs.\n *\n * @param object The object to turn into a baggage header.\n * @returns a baggage header string, or `undefined` if the object didn't have any values, since an empty baggage header\n * is not spec compliant.\n */\nexport function objectToBaggageHeader(object: Record<string, string>): string | undefined {\n  if (Object.keys(object).length === 0) {\n    // An empty baggage header is not spec compliant: We return undefined.\n    return undefined;\n  }\n\n  return Object.entries(object).reduce((baggageHeader, [objectKey, objectValue], currentIndex) => {\n    const baggageEntry = `${encodeURIComponent(objectKey)}=${encodeURIComponent(objectValue)}`;\n    const newBaggageHeader = currentIndex === 0 ? baggageEntry : `${baggageHeader},${baggageEntry}`;\n    if (newBaggageHeader.length > MAX_BAGGAGE_STRING_LENGTH) {\n      DEBUG_BUILD &&\n        logger.warn(\n          `Not adding key: ${objectKey} with val: ${objectValue} to baggage header due to exceeding baggage size limits.`,\n        );\n      return baggageHeader;\n    } else {\n      return newBaggageHeader;\n    }\n  }, '');\n}\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://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,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getNavigationEntry } from './getNavigationEntry';\n\nexport const getActivationStart = (): number => {\n  const navEntry = getNavigationEntry();\n  return navEntry?.activationStart || 0;\n};\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://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,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../../types';\n\nexport const whenActivated = (callback: () => void) => {\n  if (WINDOW.document?.prerendering) {\n    addEventListener('prerenderingchange', () => callback(), true);\n  } else {\n    callback();\n  }\n};\n","import type { Event, FeatureFlag } from '@sentry/core';\n\nimport { getCurrentScope, logger } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build';\n\n/**\n * Ordered LRU cache for storing feature flags in the scope context. The name\n * of each flag in the buffer is unique, and the output of getAll() is ordered\n * from oldest to newest.\n */\n\n/**\n * Max size of the LRU flag buffer stored in Sentry scope and event contexts.\n */\nexport const FLAG_BUFFER_SIZE = 100;\n\n/**\n * Copies feature flags that are in current scope context to the event context\n */\nexport function copyFlagsFromScopeToEvent(event: Event): Event {\n  const scope = getCurrentScope();\n  const flagContext = scope.getScopeData().contexts.flags;\n  const flagBuffer = flagContext ? flagContext.values : [];\n\n  if (!flagBuffer.length) {\n    return event;\n  }\n\n  if (event.contexts === undefined) {\n    event.contexts = {};\n  }\n  event.contexts.flags = { values: [...flagBuffer] };\n  return event;\n}\n\n/**\n * Creates a feature flags values array in current context if it does not exist\n * and inserts the flag into a FeatureFlag array while maintaining ordered LRU\n * properties. Not thread-safe. After inserting:\n * - `flags` is sorted in order of recency, with the newest flag at the end.\n * - No other flags with the same name exist in `flags`.\n * - The length of `flags` does not exceed `maxSize`. The oldest flag is evicted\n *  as needed.\n *\n * @param name     Name of the feature flag to insert.\n * @param value    Value of the feature flag.\n * @param maxSize  Max number of flags the buffer should store. It's recommended\n *   to keep this consistent across insertions. Default is FLAG_BUFFER_SIZE\n */\nexport function insertFlagToScope(name: string, value: unknown, maxSize: number = FLAG_BUFFER_SIZE): void {\n  const scopeContexts = getCurrentScope().getScopeData().contexts;\n  if (!scopeContexts.flags) {\n    scopeContexts.flags = { values: [] };\n  }\n  const flags = scopeContexts.flags.values as FeatureFlag[];\n  insertToFlagBuffer(flags, name, value, maxSize);\n}\n\n/**\n * Exported for tests. Currently only accepts boolean values (otherwise no-op).\n */\nexport function insertToFlagBuffer(flags: FeatureFlag[], name: string, value: unknown, maxSize: number): void {\n  if (typeof value !== 'boolean') {\n    return;\n  }\n\n  if (flags.length > maxSize) {\n    DEBUG_BUILD && logger.error(`[Feature Flags] insertToFlagBuffer called on a buffer larger than maxSize=${maxSize}`);\n    return;\n  }\n\n  // Check if the flag is already in the buffer - O(n)\n  const index = flags.findIndex(f => f.flag === name);\n\n  if (index !== -1) {\n    // The flag was found, remove it from its current position - O(n)\n    flags.splice(index, 1);\n  }\n\n  if (flags.length === maxSize) {\n    // If at capacity, pop the earliest flag - O(n)\n    flags.shift();\n  }\n\n  // Push the flag to the end - O(1)\n  flags.push({\n    flag: name,\n    result: value,\n  });\n}\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nmodule.exports = isPrototype;\n","var baseMatches = require('./_baseMatches'),\n    baseMatchesProperty = require('./_baseMatchesProperty'),\n    identity = require('./identity'),\n    isArray = require('./isArray'),\n    property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n  if (typeof value == 'function') {\n    return value;\n  }\n  if (value == null) {\n    return identity;\n  }\n  if (typeof value == 'object') {\n    return isArray(value)\n      ? baseMatchesProperty(value[0], value[1])\n      : baseMatches(value);\n  }\n  return property(value);\n}\n\nmodule.exports = baseIteratee;\n","var DataView = require('./_DataView'),\n    Map = require('./_Map'),\n    Promise = require('./_Promise'),\n    Set = require('./_Set'),\n    WeakMap = require('./_WeakMap'),\n    baseGetTag = require('./_baseGetTag'),\n    toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nmodule.exports = getTag;\n","var isArray = require('./isArray'),\n    isKey = require('./_isKey'),\n    stringToPath = require('./_stringToPath'),\n    toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n  if (isArray(value)) {\n    return value;\n  }\n  return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var assignValue = require('./_assignValue'),\n    baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nmodule.exports = copyObject;\n","'use strict'\n\nlet Container = require('./container')\n\nlet LazyResult, Processor\n\nclass Root extends Container {\n  constructor(defaults) {\n    super(defaults)\n    this.type = 'root'\n    if (!this.nodes) this.nodes = []\n  }\n\n  normalize(child, sample, type) {\n    let keepBefore = new Set()\n    for (let node of Array.isArray(child) ? child : [child]) {\n      if (\n        node &&\n        typeof node === 'object' &&\n        !node.parent &&\n        node.raws &&\n        typeof node.raws.before !== 'undefined'\n      ) {\n        keepBefore.add(node.raws)\n      }\n    }\n\n    let nodes = super.normalize(child)\n\n    if (sample) {\n      if (type === 'prepend') {\n        if (this.nodes.length > 1) {\n          sample.raws.before = this.nodes[1].raws.before\n        } else {\n          delete sample.raws.before\n        }\n      } else if (this.first !== sample) {\n        for (let node of nodes) {\n          if (!keepBefore.has(node.raws)) {\n            node.raws.before = sample.raws.before\n          }\n        }\n      }\n    }\n\n    return nodes\n  }\n\n  removeChild(child, ignore) {\n    let index = this.index(child)\n\n    if (!ignore && index === 0 && this.nodes.length > 1) {\n      this.nodes[1].raws.before = this.nodes[index].raws.before\n    }\n\n    return super.removeChild(child)\n  }\n\n  toResult(opts = {}) {\n    let lazy = new LazyResult(new Processor(), this, opts)\n    return lazy.stringify()\n  }\n}\n\nRoot.registerLazyResult = dependant => {\n  LazyResult = dependant\n}\n\nRoot.registerProcessor = dependant => {\n  Processor = dependant\n}\n\nmodule.exports = Root\nRoot.default = Root\n\nContainer.registerRoot(Root)\n","'use strict'\n\nconst Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n  try {\n    range = new Range(range, options)\n  } catch (er) {\n    return false\n  }\n  return range.test(version)\n}\nmodule.exports = satisfies\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport type HdsTextTags = keyof HTMLElementTagNameMap;\n\nexport enum HdsTextColorValues {\n  Primary = 'primary',\n  Strong = 'strong',\n  Faint = 'faint',\n  Disabled = 'disabled',\n  HighContrast = 'high-contrast',\n  Action = 'action',\n  ActionHover = 'action-hover',\n  ActionActive = 'action-active',\n  Highlight = 'highlight',\n  HighlightOnSurface = 'highlight-on-surface',\n  HighlightHighContrast = 'highlight-high-contrast',\n  Success = 'success',\n  SuccessOnSurface = 'success-on-surface',\n  SuccessHighContrast = 'success-high-contrast',\n  Warning = 'warning',\n  WarningOnSurface = 'warning-on-surface',\n  WarningHighContrast = 'warning-high-contrast',\n  Critical = 'critical',\n  CriticalOnSurface = 'critical-on-surface',\n  CriticalHighContrast = 'critical-high-contrast',\n}\nexport type HdsTextColors = `${HdsTextColorValues}`;\n\nexport enum HdsTextAlignValues {\n  Left = 'left',\n  Center = 'center',\n  Right = 'right',\n}\nexport type HdsTextAligns = `${HdsTextAlignValues}`;\n\nexport enum HdsTextWeightValues {\n  Regular = 'regular',\n  Medium = 'medium',\n  Semibold = 'semibold',\n  Bold = 'bold',\n}\nexport type HdsTextWeights = `${HdsTextWeightValues}`;\n\nexport enum HdsTextSizeValues {\n  FiveHundred = 500,\n  FourHundred = 400,\n  ThreeHundred = 300,\n  TwoHundred = 200,\n  OneHundred = 100,\n}\ntype HdsTextSizesString = `${HdsTextSizeValues}`;\ntype HdsTextSizesNumber =\n  `${HdsTextSizeValues}` extends `${infer T extends number}` ? T : never;\nexport type HdsTextSizes = HdsTextSizesString | HdsTextSizesNumber;\n\nexport enum HdsTextGroupValues {\n  Code = 'code',\n  Display = 'display',\n  Body = 'body',\n}\nexport type HdsTextGroups = `${HdsTextGroupValues}`;\n","export const TYPE_CANCELLED = 'CANCELLED';\nexport const TYPE_STARTED = 'STARTED';\nexport const TYPE_QUEUED = 'QUEUED';\n\nexport const STARTED = { type: TYPE_STARTED };\nexport const QUEUED = { type: TYPE_QUEUED };\n\nexport const makeCancelState = (reason) => ({ type: TYPE_CANCELLED, reason });\n","var root = require('./_root'),\n    stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","import { tracked } from '@glimmer/tracking';\nimport { isDestroyed, isDestroying } from '@ember/destroyable';\nimport { action } from '@ember/object';\n\nimport { Request } from './request.ts';\n\nimport type ArrayProxy from '@ember/array/proxy';\nimport type Store from '@ember-data/store';\n\nexport type FindAllOptions = Parameters<Store['findAll']>[1];\n\ntype PositionalArgs = [string];\nexport interface NamedArgs {\n  options: FindAllOptions;\n}\n\nexport interface Args {\n  named: NamedArgs;\n  positional: PositionalArgs;\n}\n\nexport class FindAll<Model, LocalArgs extends Args = Args> extends Request<LocalArgs> {\n  @tracked private _records: ArrayProxy<Model> | undefined;\n\n  @action\n  async __WRAPPED_FUNCTION__([modelName]: PositionalArgs, { options }: NamedArgs): Promise<void> {\n    const records = await this.store.findAll(modelName as never, options);\n\n    if (isDestroyed(this) || isDestroying(this)) return;\n\n    this._records = records;\n  }\n\n  get records(): ArrayProxy<Model> | undefined {\n    return this._records;\n  }\n}\n","export class IdRequiredError extends TypeError {\n  constructor(modelName: string) {\n    super(\n      `While trying to request a resource from ${modelName}, the ID was either null or undefined, and the ID is required for fetching resources`,\n    );\n  }\n}\n\nexport class IdTypeError extends TypeError {\n  constructor(modelName: string, id: unknown) {\n    super(\n      `While trying to request a resource from ${modelName}, the ID was of invalid type ${typeof id}: only string and number are supported`,\n    );\n  }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { isDestroyed, isDestroying } from '@ember/destroyable';\nimport { action } from '@ember/object';\nimport { waitFor } from '@ember/test-waiters';\n\nimport { IdRequiredError, IdTypeError } from './errors.ts';\nimport { Request } from './request.ts';\n\nimport type { Id } from './types.ts';\nimport type Store from '@ember-data/store';\n\nexport type FindRecordOptions = Parameters<Store['findRecord']>[2];\n\ntype PositionalArgs = [string, Id];\nexport interface NamedArgs {\n  options: FindRecordOptions;\n}\n\nexport interface Args {\n  named: NamedArgs;\n  positional: PositionalArgs;\n}\n\nexport class FindRecord<Model, LocalArgs extends Args = Args> extends Request<LocalArgs> {\n  @tracked private _record: Model | undefined;\n\n  @action\n  @waitFor\n  async __WRAPPED_FUNCTION__([modelName, id]: PositionalArgs, { options }: NamedArgs) {\n    /**\n     * ember-data forbids usage of invalid arguments\n     * in JS, this is typically fine as we can also try-catch, but\n     * since this *might* be used in a template as well as JS, we need to instead\n     * throw our own error that gives a bit more context to the user so\n     * they can pass in the correct arguments\n     */\n    if (id === null || id === undefined) {\n      throw new IdRequiredError(modelName);\n    } else if (typeof id !== 'string' && typeof id !== 'number') {\n      throw new IdTypeError(modelName, id);\n    }\n\n    const record = await this.store.findRecord(modelName as never, id, options);\n\n    if (isDestroyed(this) || isDestroying(this)) return;\n\n    this._record = record;\n  }\n\n  get record(): Model | undefined {\n    return this._record;\n  }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { isDestroyed, isDestroying } from '@ember/destroyable';\nimport { action } from '@ember/object';\n\nimport { Request } from './request.ts';\n\nimport type ArrayProxy from '@ember/array/proxy';\nimport type Store from '@ember-data/store';\n\ntype QueryParams = Parameters<Store['query']>;\nexport type QueryQuery = QueryParams[1];\nexport type QueryOptions = QueryParams[2];\n\ntype PositionalArgs = [string, QueryQuery];\nexport interface NamedArgs {\n  options: QueryOptions;\n}\n\nexport interface Args {\n  named: NamedArgs;\n  positional: PositionalArgs;\n}\n\nexport class Query<Model, LocalArgs extends Args = Args> extends Request<LocalArgs> {\n  @tracked private _records: ArrayProxy<Model> | undefined;\n\n  @action\n  async __WRAPPED_FUNCTION__([modelName, query]: PositionalArgs, { options }: NamedArgs) {\n    const records = await this.store.query(modelName as never, query, options);\n\n    if (isDestroyed(this) || isDestroying(this)) return;\n\n    this._records = records;\n  }\n\n  get records(): ArrayProxy<Model> | undefined {\n    return this._records;\n  }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { isDestroyed, isDestroying } from '@ember/destroyable';\nimport { action } from '@ember/object';\n\nimport { Request } from './request.ts';\n\nimport type Store from '@ember-data/store';\n\ntype QueryParams = Parameters<Store['queryRecord']>;\nexport type QueryRecordQuery = QueryParams[1];\nexport type QueryRecordOptions = QueryParams[2];\n\ntype PositionalArgs = [string, QueryRecordQuery];\nexport interface NamedArgs {\n  options: QueryRecordOptions;\n}\n\nexport interface Args {\n  named: NamedArgs;\n  positional: PositionalArgs;\n}\n\nexport class QueryRecord<Model, LocalArgs extends Args = Args> extends Request<LocalArgs> {\n  @tracked private _record: Model | undefined;\n\n  @action\n  async __WRAPPED_FUNCTION__([modelName, query]: PositionalArgs, { options }: NamedArgs) {\n    const record = await this.store.queryRecord(modelName as never, query, options);\n\n    if (isDestroyed(this) || isDestroying(this)) return;\n\n    this._record = record;\n  }\n\n  get record(): Model | undefined {\n    return this._record;\n  }\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport style from 'ember-style-modifier';\nimport { element } from 'ember-element-helper';\n\nimport { HdsTextAlignValues, HdsTextColorValues } from './types.ts';\nimport type {\n  HdsTextAligns,\n  HdsTextColors,\n  HdsTextGroups,\n  HdsTextSizes,\n  HdsTextTags,\n  HdsTextWeights,\n} from './types.ts';\n\nexport const COLORS: HdsTextColors[] = Object.values(HdsTextColorValues);\nexport const ALIGNS: HdsTextAligns[] = Object.values(HdsTextAlignValues);\n\n// A union of all types in the HTMLElementTagNameMap interface\ntype AvailableElements = HTMLElementTagNameMap[keyof HTMLElementTagNameMap];\n\nexport interface HdsTextSignature {\n  Args: {\n    size: HdsTextSizes;\n    tag?: HdsTextTags;\n    weight?: HdsTextWeights;\n    align?: HdsTextAligns;\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n    color?: HdsTextColors | string | undefined;\n    group: HdsTextGroups;\n  };\n  Element: AvailableElements;\n  Blocks: {\n    default: [];\n  };\n}\n\nexport default class HdsText extends Component<HdsTextSignature> {\n  // Get a tag to render based on the `@tag` argument passed or the value of `this.size` (via mapping)\n  get componentTag(): HdsTextTags {\n    const { tag = 'span' } = this.args;\n\n    return tag;\n  }\n\n  // Sets the \"variant\" (style) for the text\n  get variant(): string {\n    const { group, size } = this.args;\n\n    // notice: for performance reasons we don't do any other extra check on these values\n    // we assume they've already been validated by the \"parent\" components\n    return `${group}-${size}`;\n  }\n\n  // Sets the alignment of the text\n  get align(): HdsTextAligns | undefined {\n    const { align } = this.args;\n\n    if (align) {\n      assert(\n        `@align for \"Hds::Text\" must be one of the following: ${ALIGNS.join(\n          ', '\n        )}; received: ${align}`,\n        ALIGNS.includes(align)\n      );\n    }\n\n    return align;\n  }\n\n  // Sets the color of the text as pre-defined value\n  get predefinedColor(): HdsTextColors | undefined {\n    const { color } = this.args;\n\n    if (color && COLORS.includes(color as HdsTextColors)) {\n      return color as HdsTextColors;\n    } else {\n      return undefined;\n    }\n  }\n\n  // Sets the color of the text as custom value (via inline style)\n  get customColor(): string | undefined {\n    const { color } = this.args;\n\n    if (color && !COLORS.includes(color as HdsTextColors)) {\n      return color as HdsTextColors;\n    } else {\n      return undefined;\n    }\n  }\n\n  get classNames(): string {\n    const classes = ['hds-text'];\n\n    // add a (helper) class based on the \"group + size\" variant\n    classes.push(`hds-typography-${this.variant}`);\n\n    // add a (helper) class based on the @weight argument\n    if (this.args.weight) {\n      classes.push(`hds-font-weight-${this.args.weight}`);\n    }\n\n    // add a class based on the @align argument\n    if (this.align) {\n      classes.push(`hds-text--align-${this.align}`);\n    }\n\n    // add a (helper) class based on the @color argument (if pre-defined)\n    if (this.predefinedColor) {\n      classes.push(`hds-foreground-${this.predefinedColor}`);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    {{! IMPORTANT: we removed any extra newline/whitespace between the 'let' and the '<Tag>' to reduce the issues with unexpected whitespaces (see https://github.com/hashicorp/design-system/pull/1652) }}\n    {{#let (element this.componentTag) as |Tag|}}<Tag\n        class={{this.classNames}}\n        {{style color=this.customColor}}\n        ...attributes\n      >{{yield}}</Tag>{{/let}}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { guidFor } from '@ember/object/internals';\nimport { service } from '@ember/service';\nimport { concat, fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { eq } from 'ember-truth-helpers';\n\nimport { HdsFilterBarNumericalFilterSelectorValues } from '../types.ts';\nimport hdsT from '../../../../helpers/hds-t.ts';\nimport HdsFilterBarFilterGroupGeneric from './generic.gts';\nimport HdsFormSelectField from '../../form/select/field.gts';\nimport HdsLayoutFlex from '../../layout/flex/index.gts';\nimport HdsFormTextInputBase from '../../form/text-input/base.gts';\n\nimport type { HdsFilterBarFilterGroupGenericSignature } from './generic.gts';\nimport type HdsIntlService from '../../../../services/hds-intl.ts';\nimport type {\n  HdsFilterBarFilter,\n  HdsFilterBarNumericalFilterData,\n  HdsFilterBarNumericalFilterSelector,\n} from '../types.ts';\n\nexport const NUMERICAL_SELECTORS: HdsFilterBarNumericalFilterSelector[] =\n  Object.values(HdsFilterBarNumericalFilterSelectorValues);\n\nexport const NUMERICAL_SELECTORS_TEXT: Record<\n  HdsFilterBarNumericalFilterSelector,\n  string\n> = {\n  [HdsFilterBarNumericalFilterSelectorValues.lessThan]: '<',\n  [HdsFilterBarNumericalFilterSelectorValues.lessThanOrEqualTo]: '≤',\n  [HdsFilterBarNumericalFilterSelectorValues.equalTo]: '=',\n  [HdsFilterBarNumericalFilterSelectorValues.greaterThanOrEqualTo]: '≥',\n  [HdsFilterBarNumericalFilterSelectorValues.greaterThan]: '>',\n  [HdsFilterBarNumericalFilterSelectorValues.between]: 'between',\n};\n\nexport const NUMERICAL_SELECTORS_INPUT_TEXT: Record<\n  HdsFilterBarNumericalFilterSelector,\n  string\n> = {\n  [HdsFilterBarNumericalFilterSelectorValues.lessThan]: 'Less than (<)',\n  [HdsFilterBarNumericalFilterSelectorValues.lessThanOrEqualTo]:\n    'Less than or equal to (≤)',\n  [HdsFilterBarNumericalFilterSelectorValues.equalTo]: 'Equal to (=)',\n  [HdsFilterBarNumericalFilterSelectorValues.greaterThanOrEqualTo]:\n    'Greater than or equal to (≥)',\n  [HdsFilterBarNumericalFilterSelectorValues.greaterThan]: 'Greater than (>)',\n  [HdsFilterBarNumericalFilterSelectorValues.between]: 'Between',\n};\n\nexport interface HdsFilterBarFilterGroupNumericalSignature {\n  Args: {\n    key: string;\n    keyFilter?: HdsFilterBarFilter;\n    text?: string;\n    onChange?: (filter: HdsFilterBarFilter) => void;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HdsFilterBarFilterGroupGenericSignature['Element'];\n}\n\nexport default class HdsFilterBarFilterGroupNumerical extends Component<HdsFilterBarFilterGroupNumericalSignature> {\n  @service hdsIntl!: HdsIntlService;\n\n  @tracked private _selectorInputValue:\n    | HdsFilterBarNumericalFilterSelector\n    | undefined;\n  @tracked private _valueInputValue: number | undefined;\n  @tracked private _betweenValueStartInputValue: number | undefined;\n  @tracked private _betweenValueEndInputValue: number | undefined;\n\n  private _selectorValues = NUMERICAL_SELECTORS;\n  private _selectorInputId = 'selector-input-' + guidFor(this);\n  private _valueInputId = 'value-input-' + guidFor(this);\n  private _betweenValueStartInputId =\n    'between-value-start-input-' + guidFor(this);\n  private _betweenValueEndInputId = 'between-value-end-input-' + guidFor(this);\n\n  get keyFilterData(): HdsFilterBarNumericalFilterData | undefined {\n    const { keyFilter } = this.args;\n    if (keyFilter && keyFilter.type === 'numerical') {\n      return keyFilter.data;\n    }\n    return undefined;\n  }\n\n  get selector(): HdsFilterBarNumericalFilterSelector | undefined {\n    if (this._selectorInputValue !== undefined) {\n      return this._selectorInputValue;\n    } else if (this.keyFilterData) {\n      return this.keyFilterData.selector;\n    }\n  }\n\n  get value(): number | undefined {\n    if (this._valueInputValue !== undefined) {\n      return this._valueInputValue;\n    } else if (this.keyFilterData) {\n      if (this.keyFilterData.selector !== 'between') {\n        return Number(this.keyFilterData.value);\n      }\n    }\n  }\n\n  get betweenValueStart(): number | undefined {\n    if (this._betweenValueStartInputValue !== undefined) {\n      return this._betweenValueStartInputValue;\n    } else if (this.keyFilterData) {\n      if (\n        this.keyFilterData.selector === 'between' &&\n        typeof this.keyFilterData.value === 'object'\n      ) {\n        return Number(this.keyFilterData.value.start);\n      }\n    }\n  }\n\n  get betweenValueEnd(): number | undefined {\n    if (this._betweenValueEndInputValue !== undefined) {\n      return this._betweenValueEndInputValue;\n    } else if (this.keyFilterData) {\n      if (\n        this.keyFilterData.selector === 'between' &&\n        typeof this.keyFilterData.value === 'object'\n      ) {\n        return Number(this.keyFilterData.value.end);\n      }\n    }\n  }\n\n  get stringValue(): string | undefined {\n    return this.value !== undefined ? this.value.toString() : undefined;\n  }\n\n  get stringBetweenValueStart(): string | undefined {\n    return this.betweenValueStart !== undefined\n      ? this.betweenValueStart.toString()\n      : undefined;\n  }\n\n  get stringBetweenValueEnd(): string | undefined {\n    return this.betweenValueEnd !== undefined\n      ? this.betweenValueEnd.toString()\n      : undefined;\n  }\n\n  onSelectorChange = (\n    updateFilter: (filter: HdsFilterBarFilter) => void,\n    event: Event\n  ): void => {\n    const select = event.target as HTMLSelectElement;\n    this._selectorInputValue =\n      select.value as HdsFilterBarNumericalFilterSelector;\n    if (this._selectorInputValue === 'between') {\n      this._valueInputValue = undefined;\n    } else {\n      this._betweenValueStartInputValue = undefined;\n      this._betweenValueEndInputValue = undefined;\n    }\n    this._updateFilter(updateFilter);\n  };\n\n  onValueChange = (\n    updateFilter: (filter: HdsFilterBarFilter) => void,\n    event: Event\n  ): void => {\n    const input = event.target as HTMLInputElement;\n    this._valueInputValue = parseFloat(input.value);\n    this._updateFilter(updateFilter);\n  };\n\n  onBetweenValueStartChange = (\n    updateFilter: (filter: HdsFilterBarFilter) => void,\n    event: Event\n  ): void => {\n    const input = event.target as HTMLInputElement;\n    this._betweenValueStartInputValue = parseFloat(input.value);\n    this._updateFilter(updateFilter);\n  };\n\n  onBetweenValueEndChange = (\n    updateFilter: (filter: HdsFilterBarFilter) => void,\n    event: Event\n  ): void => {\n    const input = event.target as HTMLInputElement;\n    this._betweenValueEndInputValue = parseFloat(input.value);\n    this._updateFilter(updateFilter);\n  };\n\n  onChange = (filter: HdsFilterBarFilter): void => {\n    const { onChange } = this.args;\n    if (onChange && typeof onChange === 'function') {\n      onChange(filter);\n    }\n  };\n\n  private _updateFilter = (\n    updateFilter: (filter: HdsFilterBarFilter) => void\n  ): void => {\n    const addFilter = (): HdsFilterBarFilter => {\n      const value =\n        this._selectorInputValue === 'between'\n          ? {\n              start: this._betweenValueStartInputValue,\n              end: this._betweenValueEndInputValue,\n            }\n          : this._valueInputValue;\n      const newFilter = {\n        type: 'numerical',\n        text: this.args.text,\n        data: {\n          selector: this._selectorInputValue,\n          value: value,\n        },\n      } as HdsFilterBarFilter;\n      return newFilter;\n    };\n\n    if (this._isFormCompleted()) {\n      updateFilter(addFilter());\n    }\n  };\n\n  private _isFormCompleted = (): boolean => {\n    if (this._selectorInputValue === 'between') {\n      return (\n        this._betweenValueStartInputValue !== undefined &&\n        this._betweenValueEndInputValue !== undefined\n      );\n    } else {\n      return (\n        this._selectorInputValue !== undefined &&\n        this._valueInputValue !== undefined\n      );\n    }\n  };\n\n  private _getSelectorText = (\n    selector: HdsFilterBarNumericalFilterSelector\n  ): string => {\n    return this.hdsIntl.t(\n      `hds.components.filter-bar.filter-group.numerical.selector-input.${selector}`,\n      {\n        default: NUMERICAL_SELECTORS_INPUT_TEXT[selector],\n      }\n    );\n  };\n\n  <template>\n    <HdsFilterBarFilterGroupGeneric\n      class=\"hds-filter-bar__filter-group__numerical\"\n      @onChange={{this.onChange}}\n      ...attributes\n      as |G|\n    >\n      <fieldset class=\"hds-filter-bar__filter-group__fieldset\">\n        <legend class=\"sr-only\">\n          {{hdsT\n            \"hds.components.filter-bar.filter-group.numerical.legend\"\n            text=@text\n            default=\"Filter by number\"\n          }}\n        </legend>\n        <HdsFormSelectField\n          @id={{this._selectorInputId}}\n          name={{concat @key \"-selector\"}}\n          class=\"hds-filter-bar__filter-group__field\"\n          {{on \"change\" (fn this.onSelectorChange G.updateFilter)}}\n          as |F|\n        >\n          <F.Label>\n            {{hdsT\n              \"hds.components.filter-bar.filter-group.numerical.label\"\n              default=\"Number is\"\n            }}\n          </F.Label>\n          <F.Options>\n            <option value=\"\">{{hdsT\n                \"hds.components.filter-bar.filter-group.numerical.selector-input.default-value\"\n                default=\"Pick a selector\"\n              }}</option>\n            {{#each this._selectorValues as |selectorValue|}}\n              <option\n                value={{selectorValue}}\n                selected={{eq selectorValue this.selector}}\n              >{{this._getSelectorText selectorValue}}</option>\n            {{/each}}\n          </F.Options>\n        </HdsFormSelectField>\n        {{#if (eq this.selector \"between\")}}\n          <HdsLayoutFlex @gap=\"8\">\n            <HdsFormTextInputBase\n              @id={{this._betweenValueStartInputId}}\n              @type=\"text\"\n              @value={{this.stringBetweenValueStart}}\n              name={{concat @key \"-between-start\"}}\n              aria-label={{hdsT\n                \"hds.components.filter-bar.between-value-inputs.start.aria-label\"\n                default=\"Number start value\"\n              }}\n              placeholder={{hdsT\n                \"hds.components.filter-bar.between-value-inputs.start.placeholder\"\n                default=\"Start\"\n              }}\n              class=\"hds-filter-bar__filter-group__field hds-filter-bar__filter-group__field--between\"\n              {{on \"change\" (fn this.onBetweenValueStartChange G.updateFilter)}}\n            />\n            <HdsFormTextInputBase\n              @id={{this._betweenValueEndInputId}}\n              @type=\"text\"\n              @value={{this.stringBetweenValueEnd}}\n              name={{concat @key \"-between-end\"}}\n              aria-label={{hdsT\n                \"hds.components.filter-bar.between-value-inputs.end.aria-label\"\n                default=\"Number end value\"\n              }}\n              placeholder={{hdsT\n                \"hds.components.filter-bar.between-value-inputs.end.placeholder\"\n                default=\"End\"\n              }}\n              class=\"hds-filter-bar__filter-group__field hds-filter-bar__filter-group__field--between\"\n              {{on \"change\" (fn this.onBetweenValueEndChange G.updateFilter)}}\n            />\n          </HdsLayoutFlex>\n        {{else}}\n          <HdsFormTextInputBase\n            @id={{this._valueInputId}}\n            @type=\"text\"\n            @value={{this.stringValue}}\n            name={{concat @key \"-value\"}}\n            aria-label={{hdsT\n              \"hds.components.filter-bar.filter-group.numerical.value-input.aria-label\"\n              default=\"Number value\"\n            }}\n            placeholder={{hdsT\n              \"hds.components.filter-bar.filter-group.numerical.value-input.placeholder\"\n              default=\"Enter a value\"\n            }}\n            class=\"hds-filter-bar__filter-group__field\"\n            {{on \"change\" (fn this.onValueChange G.updateFilter)}}\n          />\n        {{/if}}\n      </fieldset>\n    </HdsFilterBarFilterGroupGeneric>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { hash } from '@ember/helper';\n\nimport type { HdsFilterBarFilter } from '../types.ts';\n\nexport interface HdsFilterBarFilterGroupGenericSignature {\n  Args: {\n    onChange?: (filter: HdsFilterBarFilter) => void;\n  };\n  Blocks: {\n    default: [\n      {\n        updateFilter: (filter: HdsFilterBarFilter) => void;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsFilterBarFilterGroupGeneric extends Component<HdsFilterBarFilterGroupGenericSignature> {\n  updateFilter = (filter: HdsFilterBarFilter): void => {\n    const { onChange } = this.args;\n    if (onChange && typeof onChange === 'function') {\n      onChange(filter);\n    }\n  };\n\n  <template>\n    <div class=\"hds-filter-bar__filter-group__generic\" ...attributes>\n      {{yield (hash updateFilter=this.updateFilter)}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\nimport Component from '@glimmer/component';\nimport { hash } from '@ember/helper';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\n\nimport type { HdsTextBodySignature } from '../../text/body.gts';\n\nconst ID_PREFIX = 'character-count-';\nconst NOOP = (): void => {};\n\nexport interface HdsFormCharacterCountSignature {\n  Args: {\n    contextualClass?: string;\n    controlId?: string;\n    maxLength?: number | string;\n    minLength?: number | string;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    onInsert?: (element: HTMLElement, ...args: any[]) => void;\n    value?: string;\n  };\n  Blocks: {\n    default?: [\n      {\n        minLength?: number;\n        maxLength?: number;\n        currentLength?: number;\n        remaining?: number;\n        shortfall?: number;\n      },\n    ];\n  };\n  Element: HdsTextBodySignature['Element'];\n}\n\nexport default class HdsFormCharacterCount extends Component<HdsFormCharacterCountSignature> {\n  // The current number of characters in @value\n  get currentLength(): number {\n    const { value } = this.args;\n    return value ? value.length : 0;\n  }\n\n  // Inflector utility function to determine plural or singular for 'character' noun\n  private _pluralize(\n    count?: number,\n    prefix = '',\n    noun = 'character',\n    suffix = 's'\n  ): string {\n    return `${count}${prefix ? ' ' + prefix : ''} ${noun}${\n      count !== 1 ? suffix : ''\n    }`;\n  }\n\n  get maxLength(): number | undefined {\n    const { maxLength } = this.args;\n    if (maxLength) {\n      return typeof maxLength === 'number' ? maxLength : parseInt(maxLength);\n    }\n  }\n\n  get minLength(): number | undefined {\n    const { minLength } = this.args;\n    if (minLength) {\n      return typeof minLength === 'number' ? minLength : parseInt(minLength);\n    }\n  }\n\n  get remaining(): number | undefined {\n    return this.maxLength ? this.maxLength - this.currentLength : undefined;\n  }\n\n  get shortfall(): number | undefined {\n    return this.minLength ? this.minLength - this.currentLength : undefined;\n  }\n\n  get message(): string {\n    let messageText = '';\n    if (this.minLength && this.currentLength === 0) {\n      messageText = `${this._pluralize(this.minLength)} required`;\n    } else if (this.minLength && this.currentLength < this.minLength) {\n      messageText = `${this._pluralize(this.shortfall, 'more')} required`;\n    } else if (this.maxLength && this.currentLength === 0) {\n      messageText = `${this._pluralize(this.maxLength)} allowed`;\n    } else if (this.maxLength && this.currentLength <= this.maxLength) {\n      messageText = `${this._pluralize(this.remaining)} remaining`;\n    } else if (\n      this.maxLength &&\n      this.remaining &&\n      this.currentLength > this.maxLength\n    ) {\n      messageText = `Exceeded by ${this._pluralize(-this.remaining)}`;\n    } else {\n      messageText = `${this._pluralize(this.currentLength)} entered`;\n    }\n    return messageText;\n  }\n\n  get id(): string | null {\n    const { controlId } = this.args;\n    if (controlId) {\n      return `${ID_PREFIX}${controlId}`;\n    }\n    return null;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  get onInsert(): (element: HTMLElement, ...args: any[]) => void {\n    const { onInsert } = this.args;\n    // notice: this is a guard used to prevent triggering an error when the component is used as standalone element\n    if (typeof onInsert === 'function') {\n      return onInsert;\n    } else {\n      return NOOP;\n    }\n  }\n\n  get classNames(): string {\n    const classes = ['hds-form-character-count'];\n\n    // add a class based on the @contextualClass argument\n    // notice: this will *not* be documented for public use\n    // the reason for this is that the contextual component declarations don't pass attributes to the component\n    if (this.args.contextualClass) {\n      classes.push(this.args.contextualClass);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <div\n      class={{this.classNames}}\n      id={{this.id}}\n      {{didInsert this.onInsert}}\n      ...attributes\n      aria-live=\"polite\"\n    >\n      {{#if (has-block)}}\n        {{yield\n          (hash\n            minLength=this.minLength\n            maxLength=this.maxLength\n            currentLength=this.currentLength\n            remaining=this.remaining\n            shortfall=this.shortfall\n          )\n        }}\n      {{else}}\n        {{this.message}}\n      {{/if}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { guidFor } from '@ember/object/internals';\nimport { service } from '@ember/service';\nimport { on } from '@ember/modifier';\nimport { concat, fn } from '@ember/helper';\nimport { eq } from 'ember-truth-helpers';\n\nimport hdsT from '../../../../helpers/hds-t.ts';\nimport HdsFormSelectField from '../../form/select/field.gts';\nimport HdsFormTextInputBase from '../../form/text-input/base.gts';\nimport HdsLayoutFlex from '../../layout/flex/index.gts';\nimport HdsFilterBarFilterGroupGeneric from './generic.gts';\n\nimport type { HdsFilterBarFilterGroupGenericSignature } from './generic.gts';\nimport type HdsIntlService from '../../../../services/hds-intl.ts';\nimport type { HdsFormTextInputTypes } from '../../form/text-input/types.ts';\n\nimport type {\n  HdsFilterBarFilter,\n  HdsFilterBarDateFilterData,\n  HdsFilterBarDateFilterSelector,\n  HdsFilterBarFilterGroupDateType,\n} from '../types.ts';\nimport {\n  HdsFilterBarDateFilterSelectorValues,\n  HdsFilterBarFilterGroupDateTypeValues,\n} from '../types.ts';\n\nexport const DATE_SELECTORS: HdsFilterBarDateFilterSelector[] = Object.values(\n  HdsFilterBarDateFilterSelectorValues\n);\n\nexport const DATE_SELECTORS_TEXT: Record<\n  HdsFilterBarDateFilterSelector,\n  string\n> = {\n  [HdsFilterBarDateFilterSelectorValues.before]: 'before',\n  [HdsFilterBarDateFilterSelectorValues.exactly]: 'exactly',\n  [HdsFilterBarDateFilterSelectorValues.after]: 'after',\n  [HdsFilterBarDateFilterSelectorValues.between]: 'between',\n};\n\nexport const DATE_SELECTORS_INPUT_TEXT: Record<\n  HdsFilterBarDateFilterSelector,\n  string\n> = {\n  [HdsFilterBarDateFilterSelectorValues.before]: 'Before',\n  [HdsFilterBarDateFilterSelectorValues.exactly]: 'Exactly',\n  [HdsFilterBarDateFilterSelectorValues.after]: 'After',\n  [HdsFilterBarDateFilterSelectorValues.between]: 'Between',\n};\n\nexport const DATE_FILTER_GROUP_TYPES: HdsFilterBarFilterGroupDateType[] =\n  Object.values(HdsFilterBarFilterGroupDateTypeValues);\n\nexport interface HdsFilterBarFilterGroupDateSignature {\n  Args: {\n    key: string;\n    keyFilter?: HdsFilterBarFilter;\n    type?: HdsFilterBarFilterGroupDateType;\n    text?: string;\n    onChange?: (filter: HdsFilterBarFilter) => void;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HdsFilterBarFilterGroupGenericSignature['Element'];\n}\n\nexport default class HdsFilterBarFilterGroupDate extends Component<HdsFilterBarFilterGroupDateSignature> {\n  @service hdsIntl!: HdsIntlService;\n\n  @tracked private _selectorInputValue:\n    | HdsFilterBarDateFilterSelector\n    | undefined;\n  @tracked private _valueInputValue: string | undefined;\n  @tracked private _betweenValueStartInputValue: string | undefined;\n  @tracked private _betweenValueEndInputValue: string | undefined;\n\n  private _selectorValues = DATE_SELECTORS;\n  private _selectorInputId = 'selector-input-' + guidFor(this);\n  private _valueInputId = 'value-input-' + guidFor(this);\n  private _betweenValueStartInputId =\n    'between-value-start-input-' + guidFor(this);\n  private _betweenValueEndInputId = 'between-value-end-input-' + guidFor(this);\n\n  get type(): 'date' | 'time' | 'datetime' {\n    return this.args.type || 'date';\n  }\n\n  get inputType(): HdsFormTextInputTypes {\n    if (this.type === 'datetime') {\n      return 'datetime-local';\n    }\n    return this.type;\n  }\n\n  get selectorLabelText(): string {\n    return this.hdsIntl.t(\n      `hds.components.filter-bar.filter-group.date.${this.type}.label`,\n      {\n        default: 'Date is',\n      }\n    );\n  }\n\n  get keyFilterData(): HdsFilterBarDateFilterData | undefined {\n    const { keyFilter } = this.args;\n    if (\n      keyFilter &&\n      (keyFilter.type === 'date' ||\n        keyFilter.type === 'time' ||\n        keyFilter.type === 'datetime')\n    ) {\n      return keyFilter.data;\n    }\n    return undefined;\n  }\n\n  get selector(): HdsFilterBarDateFilterSelector | undefined {\n    if (this._selectorInputValue !== undefined) {\n      return this._selectorInputValue;\n    } else if (this.keyFilterData) {\n      return this.keyFilterData.selector;\n    }\n  }\n\n  get value(): string | undefined {\n    if (this._valueInputValue !== undefined) {\n      return this._valueInputValue;\n    } else if (this.keyFilterData) {\n      if (this.keyFilterData.selector !== 'between') {\n        return this.keyFilterData.value as string;\n      }\n    }\n  }\n\n  get betweenValueStart(): string | undefined {\n    if (this._betweenValueStartInputValue !== undefined) {\n      return this._betweenValueStartInputValue;\n    } else if (this.keyFilterData) {\n      if (\n        this.keyFilterData.selector === 'between' &&\n        typeof this.keyFilterData.value === 'object'\n      ) {\n        return this.keyFilterData.value.start;\n      }\n    }\n  }\n\n  get betweenValueEnd(): string | undefined {\n    if (this._betweenValueEndInputValue !== undefined) {\n      return this._betweenValueEndInputValue;\n    } else if (this.keyFilterData) {\n      if (\n        this.keyFilterData.selector === 'between' &&\n        typeof this.keyFilterData.value === 'object'\n      ) {\n        return this.keyFilterData.value.end;\n      }\n    }\n  }\n\n  onSelectorChange = (\n    updateFilter: (filter: HdsFilterBarFilter) => void,\n    event: Event\n  ): void => {\n    const select = event.target as HTMLSelectElement;\n    this._selectorInputValue = select.value as HdsFilterBarDateFilterSelector;\n    if (this._selectorInputValue === 'between') {\n      this._valueInputValue = undefined;\n    } else {\n      this._betweenValueStartInputValue = undefined;\n      this._betweenValueEndInputValue = undefined;\n    }\n    this._updateFilter(updateFilter);\n  };\n\n  onValueChange = (\n    updateFilter: (filter: HdsFilterBarFilter) => void,\n    event: Event\n  ): void => {\n    const input = event.target as HTMLInputElement;\n    this._valueInputValue = input.value;\n    this._updateFilter(updateFilter);\n  };\n\n  onBetweenValueStartChange = (\n    updateFilter: (filter: HdsFilterBarFilter) => void,\n    event: Event\n  ): void => {\n    const input = event.target as HTMLInputElement;\n    this._betweenValueStartInputValue = input.value;\n    this._updateFilter(updateFilter);\n  };\n\n  onBetweenValueEndChange = (\n    updateFilter: (filter: HdsFilterBarFilter) => void,\n    event: Event\n  ): void => {\n    const input = event.target as HTMLInputElement;\n    this._betweenValueEndInputValue = input.value;\n    this._updateFilter(updateFilter);\n  };\n\n  onChange = (filter: HdsFilterBarFilter): void => {\n    const { onChange } = this.args;\n    if (onChange && typeof onChange === 'function') {\n      onChange(filter);\n    }\n  };\n\n  private _updateFilter = (\n    updateFilter: (filter: HdsFilterBarFilter) => void\n  ): void => {\n    const addFilter = (): HdsFilterBarFilter => {\n      const value =\n        this._selectorInputValue === 'between'\n          ? {\n              start: this._betweenValueStartInputValue,\n              end: this._betweenValueEndInputValue,\n            }\n          : this._valueInputValue;\n      const newFilter = {\n        type: this.type,\n        text: this.args.text,\n        data: {\n          selector: this._selectorInputValue,\n          value: value,\n        },\n      } as HdsFilterBarFilter;\n      return newFilter;\n    };\n\n    if (this._isFormCompleted()) {\n      updateFilter(addFilter());\n    }\n  };\n\n  private _isFormCompleted = (): boolean => {\n    if (this._selectorInputValue === 'between') {\n      return (\n        this._betweenValueStartInputValue !== undefined &&\n        this._betweenValueEndInputValue !== undefined\n      );\n    } else {\n      return (\n        this._selectorInputValue !== undefined &&\n        this._valueInputValue !== undefined\n      );\n    }\n  };\n\n  private _getSelectorText = (\n    selector: HdsFilterBarDateFilterSelector\n  ): string => {\n    return this.hdsIntl.t(\n      `hds.components.filter-bar.filter-group.date.selector-input.${selector}`,\n      {\n        default: DATE_SELECTORS_INPUT_TEXT[selector],\n      }\n    );\n  };\n\n  <template>\n    <HdsFilterBarFilterGroupGeneric\n      class=\"hds-filter-bar__filter-group__date\"\n      @onChange={{this.onChange}}\n      ...attributes\n      as |G|\n    >\n      <fieldset class=\"hds-filter-bar__filter-group__fieldset\">\n        <legend class=\"sr-only\">\n          {{hdsT\n            \"hds.components.filter-bar.filter-group.date.legend\"\n            text=@text\n            default=\"Filter by date\"\n          }}\n        </legend>\n        <HdsFormSelectField\n          @id={{this._selectorInputId}}\n          name={{concat @key \"-selector\"}}\n          {{on \"change\" (fn this.onSelectorChange G.updateFilter)}}\n          class=\"hds-filter-bar__filter-group__field\"\n          as |F|\n        >\n          <F.Label>{{this.selectorLabelText}}</F.Label>\n          <F.Options>\n            <option value=\"\">{{hdsT\n                \"hds.components.filter-bar.filter-group.date.selector-input.default-value\"\n                default=\"Pick a selector\"\n              }}</option>\n            {{#each this._selectorValues as |selectorValue|}}\n              <option\n                value={{selectorValue}}\n                selected={{eq selectorValue this.selector}}\n              >{{this._getSelectorText selectorValue}}</option>\n            {{/each}}\n          </F.Options>\n        </HdsFormSelectField>\n        {{#if (eq this.selector \"between\")}}\n          <HdsLayoutFlex\n            @gap=\"8\"\n            @direction={{if (eq @type \"datetime\") \"column\" \"row\"}}\n          >\n            <HdsFormTextInputBase\n              @id={{this._betweenValueStartInputId}}\n              @type={{this.inputType}}\n              @value={{this.betweenValueStart}}\n              name={{concat @key \"-between-start\"}}\n              aria-label={{hdsT\n                \"hds.components.filter-bar.filter-group.date.between-value-inputs.start.aria-label\"\n                type=this.type\n                default=\"Date start value\"\n              }}\n              placeholder={{hdsT\n                \"hds.components.filter-bar.filter-group.date.between-value-inputs.start.placeholder\"\n                default=\"Start\"\n              }}\n              class=\"hds-filter-bar__filter-group__field hds-filter-bar__filter-group__field--between\"\n              {{on \"change\" (fn this.onBetweenValueStartChange G.updateFilter)}}\n            />\n            <HdsFormTextInputBase\n              @id={{this._betweenValueEndInputId}}\n              @type={{this.inputType}}\n              @value={{this.betweenValueEnd}}\n              name={{concat @key \"-between-end\"}}\n              aria-label={{hdsT\n                \"hds.components.filter-bar.filter-group.date.between-value-inputs.end.aria-label\"\n                type=this.type\n                default=\"Date end value\"\n              }}\n              placeholder={{hdsT\n                \"hds.components.filter-bar.filter-group.date.between-value-inputs.end.placeholder\"\n                default=\"End\"\n              }}\n              class=\"hds-filter-bar__filter-group__field hds-filter-bar__filter-group__field--between\"\n              {{on \"change\" (fn this.onBetweenValueEndChange G.updateFilter)}}\n            />\n          </HdsLayoutFlex>\n        {{else}}\n          <HdsFormTextInputBase\n            @id={{this._valueInputId}}\n            @type={{this.inputType}}\n            @value={{this.value}}\n            name={{concat @key \"-value\"}}\n            aria-label={{hdsT\n              \"hds.components.filter-bar.filter-group.date.value-input.aria-label\"\n              type=this.type\n              default=\"Date value\"\n            }}\n            class=\"hds-filter-bar__filter-group__field\"\n            {{on \"change\" (fn this.onValueChange G.updateFilter)}}\n          />\n        {{/if}}\n      </fieldset>\n    </HdsFilterBarFilterGroupGeneric>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { assert, warn } from '@ember/debug';\nimport { next } from '@ember/runloop';\nimport { guidFor } from '@ember/object/internals';\nimport { modifier } from 'ember-modifier';\nimport { hash } from '@ember/helper';\n\nimport type { ModifierLike } from '@glint/template';\nimport type Owner from '@ember/owner';\n\nimport registerEvent from '../../../modifiers/hds-register-event.ts';\nimport anchoredPositionModifier from '../../../modifiers/hds-anchored-position.ts';\n\nimport type { HdsAnchoredPositionOptions } from '../../../modifiers/hds-anchored-position.ts';\n\nexport interface HdsPopoverPrimitiveSignature {\n  Args: {\n    isOpen?: boolean;\n    enableSoftEvents?: boolean;\n    enableClickEvents?: boolean;\n    boundary?: HdsAnchoredPositionOptions['boundary'];\n    onOpen?: () => void;\n    onClose?: () => void;\n    onFocusOut?: () => void;\n  };\n  Blocks: {\n    default: [\n      {\n        setupPrimitiveContainer: ModifierLike<SetupPrimitiveContainerModifier>;\n        setupPrimitiveToggle: ModifierLike<SetupPrimitiveToggleModifier>;\n        setupPrimitivePopover: ModifierLike<SetupPrimitivePopoverModifier>;\n        toggleElement?: HTMLButtonElement;\n        popoverElement?: HTMLElement;\n        isOpen: boolean;\n        showPopover: () => void;\n        hidePopover: (event?: Event) => void;\n        togglePopover: () => void;\n        boundary?: HdsAnchoredPositionOptions['boundary'];\n      },\n    ];\n  };\n}\n\ninterface SetupPrimitiveContainerModifier {\n  Element: HTMLElement;\n}\n\nexport interface SetupPrimitiveToggleModifier {\n  Element: HTMLButtonElement;\n}\n\nexport interface SetupPrimitivePopoverModifier {\n  Element: HTMLElement;\n  Args: {\n    Positional: [];\n    Named: { anchoredPositionOptions?: HdsAnchoredPositionOptions };\n  };\n}\n\nexport default class HdsPopoverPrimitive extends Component<HdsPopoverPrimitiveSignature> {\n  @tracked private _isOpen;\n  @tracked private _isClosing = false;\n  @tracked private _anchoredPositionOptions?: HdsAnchoredPositionOptions;\n  private _containerElement?: HTMLElement;\n  private _toggleElement?: HTMLButtonElement;\n  private _popoverElement?: HTMLElement;\n  // this will enable \"soft\" events for the toggle (\"hover\" and \"focus\")\n  enableSoftEvents = this.args.enableSoftEvents ?? false;\n  // this will enable \"click\" events for the toggle\n  enableClickEvents = this.args.enableClickEvents ?? false;\n  private _timer?: ReturnType<typeof setTimeout> | null;\n\n  constructor(owner: Owner, args: HdsPopoverPrimitiveSignature['Args']) {\n    super(owner, args);\n    this._isOpen = this.args.isOpen ?? false;\n  }\n\n  setupPrimitiveContainer = modifier<SetupPrimitiveContainerModifier>(\n    (element: HTMLElement): void => {\n      this._containerElement = element;\n\n      // we register the \"soft\" events\n      if (this.enableSoftEvents) {\n        // @ts-expect-error: known issue with type of invocation\n        registerEvent(this._containerElement, [\n          'mouseenter',\n\n          this.onMouseEnter,\n        ]);\n        // @ts-expect-error: known issue with type of invocation\n        registerEvent(this._containerElement, [\n          'mouseleave',\n\n          this.onMouseLeave,\n        ]);\n        // @ts-expect-error: known issue with type of invocation\n        registerEvent(this._containerElement, ['focusin', this.onFocusIn]);\n      }\n      // we always want the focusOut event\n      // @ts-expect-error: known issue with type of invocation\n      registerEvent(this._containerElement, ['focusout', this.onFocusOut]);\n    }\n  );\n\n  setupPrimitiveToggle = modifier<SetupPrimitiveToggleModifier>(\n    (element: HTMLButtonElement) => {\n      this._toggleElement = element;\n\n      assert(\n        `The toggle element of \"Hds::PopoverPrimitive\" must be a <button>; element received: <${element.tagName.toLowerCase()}>`,\n        element instanceof HTMLButtonElement\n      );\n\n      this._linkToggleAndPopover();\n\n      // Return a teardown function to clean up the modifier's side effects.\n      // This is a safeguard against bugs where this element might be\n      // cached and re-parented in the DOM, rather than being fully destroyed.\n      return () => {\n        element.removeAttribute('aria-controls');\n        element.removeAttribute('popovertarget');\n      };\n    }\n  );\n\n  setupPrimitivePopover = modifier(\n    (\n      element: HTMLElement,\n      _positional,\n      named: { anchoredPositionOptions?: HdsAnchoredPositionOptions }\n    ): void => {\n      this._popoverElement = element;\n\n      // We need to create a popoverId in order to connect the popover and the toggle with aria-controls\n      // and an id is needed to implement `onclick` event listeners\n      if (!this._popoverElement.id) {\n        this._popoverElement.id = guidFor(this);\n      }\n\n      // this should be an extremely edge case, but in the case the popover needs to be initially forced to be open\n      // we need to use the \"manual\" state to support the case of multiple \"menus\" opened at the same time\n      // IMPORTANT! if a \"popover\" is set to \"open\" with a \"manual\" state, then it can't be closed via `esc` and `click outside`\n      if (this.args.isOpen) {\n        this._popoverElement.popover = 'manual';\n        this._popoverElement.showPopover();\n      } else {\n        this._popoverElement.popover = 'auto';\n      }\n\n      // Register \"onBeforeToggle\" + \"onToggle\" callback functions to be called when a native 'toggle' event is dispatched\n      // @ts-expect-error: known issue with type of invocation\n      registerEvent(this._popoverElement, [\n        'beforetoggle',\n        this.onBeforeTogglePopover,\n      ]);\n      // @ts-expect-error: known issue with type of invocation\n      registerEvent(this._popoverElement, ['toggle', this.onTogglePopover]);\n\n      // we need to spread the argument because if it's set via `{{ hash … }}` Ember complains when we overwrite one of its values\n      if (named.anchoredPositionOptions) {\n        this._anchoredPositionOptions = {\n          ...named.anchoredPositionOptions,\n        };\n      }\n\n      this._linkToggleAndPopover();\n    }\n  );\n\n  // Apply the `hds-anchored-position` modifier to the \"popover\" element\n  // (notice: this function runs the first time when the element the modifier was applied to is inserted into the DOM, and it autotracks while running.\n  // Any tracked values that it accesses will be tracked, including the arguments it receives, and if any of them changes, the function will run again)\n  // This modifiers uses the Floating UI library to provide:\n  // - positioning of the \"popover\" in relation to the \"toggle\"\n  // - collision detection (optional)\n  private _applyAnchoredPositionModifier(): void {\n    if (\n      this._toggleElement !== undefined &&\n      this._popoverElement !== undefined\n    ) {\n      // eslint-disable-next-line ember/no-runloop\n      next((): void => {\n        // @ts-expect-error: known issue with type of invocation\n        anchoredPositionModifier(\n          this._popoverElement, // element the modifier is attached to\n          [this._toggleElement], // positional arguments\n          this._anchoredPositionOptions // named arguments\n        );\n      });\n    }\n  }\n\n  private _linkToggleAndPopover(): void {\n    if (\n      this._toggleElement === undefined ||\n      this._popoverElement === undefined\n    ) {\n      return;\n    }\n\n    const popoverId = this._popoverElement.id;\n\n    this._toggleElement.setAttribute('aria-controls', popoverId);\n\n    if (this.enableClickEvents) {\n      this._toggleElement.setAttribute('popovertarget', popoverId);\n    } else {\n      this._toggleElement.removeAttribute('popovertarget');\n    }\n\n    this._applyAnchoredPositionModifier();\n  }\n\n  showPopover = (): void => {\n    try {\n      if (this._popoverElement) {\n        this._popoverElement.showPopover();\n      }\n    } catch (error) {\n      warn(\n        `The invocation of \\`showPopover\\` for the popover element caused an unexpected error: ${JSON.stringify(\n          error\n        )}`,\n        {\n          id: 'hds-popover.show-popover-action.invocation-failed',\n        }\n      );\n    }\n  };\n\n  // the event may be passed by the `on` modifier, so we need to keep it as an argument here\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  hidePopover = (_event?: Event): void => {\n    try {\n      if (this._popoverElement) {\n        this._popoverElement.hidePopover();\n      }\n    } catch (error) {\n      warn(\n        `The invocation of \\`hidePopover\\` for the popover element caused an unexpected error: ${JSON.stringify(\n          error\n        )}`,\n        {\n          id: 'hds-popover.hide-popover-action.invocation-failed',\n        }\n      );\n    }\n  };\n\n  togglePopover = (): void => {\n    try {\n      if (this._popoverElement) {\n        this._popoverElement.togglePopover();\n      }\n    } catch (error) {\n      warn(\n        `The invocation of \\`togglePopover\\` for the popover element caused an unexpected error: ${JSON.stringify(\n          error\n        )}`,\n        {\n          id: 'hds-popover.toggle-popover-action.invocation-failed',\n        }\n      );\n    }\n  };\n\n  // fired just _before_ the \"popover\" is shown or hidden\n  onBeforeTogglePopover = (event: ToggleEvent): void => {\n    if (event.newState === 'closed') {\n      // we need this flag to check if it's in the \"closing\" process,\n      // because the browser automatically returns the focus to the \"trigger\" button\n      // and this would re-open immediately the popover because of the `focusin` event\n      this._isClosing = true;\n    }\n  };\n\n  // fired just _after_ the \"popover\" is shown or hidden\n  onTogglePopover = (event: ToggleEvent): void => {\n    if (event.newState === 'open') {\n      this._isOpen = true;\n\n      // we call the \"onOpen\" callback if it exists (and is a function)\n      const { onOpen } = this.args;\n      if (typeof onOpen === 'function') {\n        onOpen();\n      }\n    } else {\n      this._isOpen = false;\n\n      // reset the \"isClosing\" flag (the `toggle` event is fired _after_ the popover is closed)\n      this._isClosing = false;\n\n      // if the popover was initially forced to be open (using the \"manual\" state) then revert its status to `auto` once the user interacts with it\n      if (this.args.isOpen) {\n        if (this._popoverElement) {\n          this._popoverElement.popover = 'auto';\n        }\n      }\n\n      // we call the \"onClose\" callback if it exists (and is a function)\n      const { onClose } = this.args;\n      if (typeof onClose === 'function') {\n        onClose();\n      }\n    }\n  };\n\n  onMouseEnter = (): void => {\n    if (this._timer) {\n      clearTimeout(this._timer);\n    }\n    this.showPopover();\n  };\n\n  onFocusIn = (): void => {\n    // don't re-open the popover if the focus is returned because the closing\n    if (!this._isClosing) {\n      if (this._timer) {\n        clearTimeout(this._timer);\n      }\n      this.showPopover();\n    }\n  };\n\n  onMouseLeave = (): void => {\n    this._timer = setTimeout((): void => this.hidePopover(), 500);\n  };\n\n  onFocusOut = (event: FocusEvent): void => {\n    if (this._containerElement) {\n      let isFocusStillInside = false;\n      if (\n        event.relatedTarget &&\n        // if the related target is not part of the disclosed content we close the disclosed container\n        this._containerElement.contains(event.relatedTarget as Node)\n      ) {\n        isFocusStillInside = true;\n      } else if (\n        document.activeElement &&\n        // due to inconsistent implementation of relatedTarget across browsers we use the activeElement as a fallback\n        this._containerElement.contains(document.activeElement)\n      ) {\n        isFocusStillInside = true;\n      }\n      // if the target receiving the focus is _not_ part of the disclosed content we close the disclosed container\n      if (!isFocusStillInside) {\n        const { onFocusOut } = this.args;\n        if (!event.relatedTarget && typeof onFocusOut === 'function') {\n          onFocusOut();\n        } else {\n          this.hidePopover();\n        }\n      }\n    }\n  };\n\n  <template>\n    {{yield\n      (hash\n        setupPrimitiveContainer=this.setupPrimitiveContainer\n        setupPrimitiveToggle=this.setupPrimitiveToggle\n        setupPrimitivePopover=this.setupPrimitivePopover\n        toggleElement=this._toggleElement\n        popoverElement=this._popoverElement\n        isOpen=this._isOpen\n        showPopover=this.showPopover\n        hidePopover=this.hidePopover\n        togglePopover=this.togglePopover\n        boundary=@boundary\n      )\n    }}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\n\nimport {\n  HdsBadgeCountColorValues,\n  HdsBadgeCountSizeValues,\n  HdsBadgeCountTypeValues,\n} from './types.ts';\nimport type {\n  HdsBadgeCountColors,\n  HdsBadgeCountSizes,\n  HdsBadgeCountTypes,\n} from './types.ts';\n\nexport const SIZES: HdsBadgeCountSizes[] = Object.values(\n  HdsBadgeCountSizeValues\n);\nexport const TYPES: HdsBadgeCountTypes[] = Object.values(\n  HdsBadgeCountTypeValues\n);\nexport const COLORS: HdsBadgeCountColors[] = Object.values(\n  HdsBadgeCountColorValues\n);\nexport const DEFAULT_SIZE = HdsBadgeCountSizeValues.Medium;\nexport const DEFAULT_TYPE = HdsBadgeCountTypeValues.Filled;\nexport const DEFAULT_COLOR = HdsBadgeCountColorValues.Neutral;\n\nexport interface HdsBadgeCountSignature {\n  Args: {\n    size?: HdsBadgeCountSizes;\n    type?: HdsBadgeCountTypes;\n    color?: HdsBadgeCountColors;\n    text: string | number;\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsBadgeCount extends Component<HdsBadgeCountSignature> {\n  get size(): HdsBadgeCountSizes {\n    const { size = DEFAULT_SIZE } = this.args;\n\n    assert(\n      `@size for \"Hds::BadgeCount\" must be one of the following: ${SIZES.join(\n        ', '\n      )}; received: ${size}`,\n      SIZES.includes(size)\n    );\n\n    return size;\n  }\n\n  get type(): HdsBadgeCountTypes {\n    const { type = DEFAULT_TYPE } = this.args;\n\n    assert(\n      `@type for \"Hds::BadgeCount\" must be one of the following: ${TYPES.join(\n        ', '\n      )}; received: ${type}`,\n      TYPES.includes(type)\n    );\n\n    return type;\n  }\n\n  get color(): HdsBadgeCountColors {\n    const { color = DEFAULT_COLOR } = this.args;\n\n    assert(\n      `@color for \"Hds::BadgeCount\" must be one of the following: ${COLORS.join(\n        ', '\n      )}; received: ${color}`,\n      COLORS.includes(color)\n    );\n\n    return color;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-badge-count'];\n\n    // add a class based on the @size argument\n    classes.push(`hds-badge-count--size-${this.size}`);\n\n    // add a class based on the @type argument\n    classes.push(`hds-badge-count--type-${this.type}`);\n\n    // add a class based on the @color argument\n    classes.push(`hds-badge-count--color-${this.color}`);\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <div class={{this.classNames}} ...attributes>\n      {{@text}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { on } from '@ember/modifier';\n\nimport {\n  HdsAdvancedTableThSortOrderIconValues,\n  HdsAdvancedTableThSortOrderLabelValues,\n  HdsAdvancedTableThSortOrderValues,\n} from './types.ts';\nimport HdsIcon from '../icon/index.gts';\nimport hdsT from '../../../helpers/hds-t.ts';\n\nimport type {\n  HdsAdvancedTableThSortOrder,\n  HdsAdvancedTableThSortOrderIcons,\n  HdsAdvancedTableThSortOrderLabels,\n} from './types.ts';\n\nexport interface HdsAdvancedTableThButtonSortSignature {\n  Args: {\n    labelId?: string;\n    onClick?: () => void;\n    sortOrder?: HdsAdvancedTableThSortOrder;\n  };\n  Element: HTMLButtonElement;\n}\n\nconst NOOP = () => {};\n\nexport default class HdsAdvancedTableThButtonSort extends Component<HdsAdvancedTableThButtonSortSignature> {\n  // Generates a unique ID for the (hidden) \"label prefix/suffix\" <span> elements\n  private _prefixLabelId = 'prefix-' + guidFor(this);\n  private _suffixLabelId = 'suffix-' + guidFor(this);\n\n  get icon(): HdsAdvancedTableThSortOrderIcons {\n    switch (this.args.sortOrder) {\n      case HdsAdvancedTableThSortOrderValues.Asc:\n        return HdsAdvancedTableThSortOrderIconValues.ArrowUp;\n      case HdsAdvancedTableThSortOrderValues.Desc:\n        return HdsAdvancedTableThSortOrderIconValues.ArrowDown;\n      default:\n        return HdsAdvancedTableThSortOrderIconValues.SwapVertical;\n    }\n  }\n\n  // Determines the label (suffix) to use in the `aria-labelledby` attribute of the button,\n  // used to indicate what will happen if the user clicks on the button\n  get sortOrderLabel(): HdsAdvancedTableThSortOrderLabels {\n    return this.args.sortOrder === HdsAdvancedTableThSortOrderValues.Asc\n      ? HdsAdvancedTableThSortOrderLabelValues.Desc\n      : HdsAdvancedTableThSortOrderLabelValues.Asc;\n  }\n\n  get onClick(): () => void {\n    const { onClick } = this.args;\n\n    if (typeof onClick === 'function') {\n      return onClick;\n    } else {\n      return NOOP;\n    }\n  }\n\n  get classNames(): string {\n    const classes = [\n      'hds-advanced-table__th-button',\n      'hds-advanced-table__th-button--sort',\n    ];\n\n    // add a class based on the @sortOrder argument\n    if (\n      this.args.sortOrder === HdsAdvancedTableThSortOrderValues.Asc ||\n      this.args.sortOrder === HdsAdvancedTableThSortOrderValues.Desc\n    ) {\n      classes.push(`hds-advanced-table__th-button--is-sorted`);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <button\n      type=\"button\"\n      class={{this.classNames}}\n      {{on \"click\" this.onClick}}\n      aria-labelledby=\"{{this._prefixLabelId}} {{@labelId}} {{this._suffixLabelId}}\"\n      ...attributes\n    >\n      <span\n        id={{this._prefixLabelId}}\n        class=\"hds-advanced-table__th-button-aria-label-hidden-segment\"\n      >\n        {{hdsT \"hds.components.common.sort-by\" default=\"Sort by\"}}\n      </span>\n      <span\n        id={{this._suffixLabelId}}\n        class=\"hds-advanced-table__th-button-aria-label-hidden-segment\"\n      >{{this.sortOrderLabel}}</span>\n      <HdsIcon @name={{this.icon}} />\n    </button>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nimport HdsAppFooterItem from './item.gts';\nimport HdsLinkInline from '../link/inline.gts';\nimport HdsTextBody from '../text/body.gts';\n\nimport type { HdsInteractiveSignature } from '../interactive/index.gts';\nimport type { HdsLinkColors, HdsLinkIconPositions } from '../link/types.ts';\nimport type { HdsLinkInlineSignature } from '../link/inline.gts';\nimport type { HdsIconSignature } from '../icon/index.gts';\n\nexport interface HdsAppFooterLinkSignature {\n  Args: HdsInteractiveSignature['Args'] & {\n    color?: HdsLinkColors;\n    icon?: HdsIconSignature['Args']['name'];\n    iconPosition?: HdsLinkIconPositions;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HdsLinkInlineSignature['Element'];\n}\n\nconst HdsAppFooterLink: TemplateOnlyComponent<HdsAppFooterLinkSignature> =\n  <template>\n    <HdsAppFooterItem>\n      <HdsLinkInline\n        class=\"hds-app-footer__link\"\n        @color=\"secondary\"\n        @current-when={{@current-when}}\n        @models={{@models}}\n        @model={{@model}}\n        @query={{@query}}\n        @replace={{@replace}}\n        @route={{@route}}\n        @isRouteExternal={{@isRouteExternal}}\n        @href={{@href}}\n        @isHrefExternal={{@isHrefExternal}}\n        @icon={{@icon}}\n        @iconPosition={{@iconPosition}}\n        ...attributes\n      ><HdsTextBody\n          @tag=\"span\"\n          @size=\"100\"\n        >{{yield}}</HdsTextBody></HdsLinkInline>\n    </HdsAppFooterItem>\n  </template>;\n\nexport default HdsAppFooterLink;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsAppFooterItemSignature {\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLLIElement;\n}\n\nconst HdsAppFooterItem: TemplateOnlyComponent<HdsAppFooterItemSignature> =\n  <template>\n    <li class=\"hds-app-footer__list-item\" ...attributes>\n      {{yield}}\n    </li>\n  </template>;\n\nexport default HdsAppFooterItem;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { tracked } from '@glimmer/tracking';\nimport { service } from '@ember/service';\n\nimport { HdsCopyButtonSizeValues } from './types.ts';\nimport HdsButton from '../../button/index.gts';\nimport hdsClipboard from '../../../../modifiers/hds-clipboard.ts';\n\nimport type { HdsCopyButtonSizes } from './types.ts';\nimport type { HdsButtonSignature } from '../../button/index.gts';\nimport type { HdsClipboardModifierSignature } from '../../../../modifiers/hds-clipboard.ts';\nimport type { HdsIconSignature } from '../../icon/index.gts';\nimport type HdsIntlService from '../../../../services/hds-intl.ts';\n\nexport const DEFAULT_SIZE = HdsCopyButtonSizeValues.Medium;\nexport const SIZES: HdsCopyButtonSizes[] = Object.values(\n  HdsCopyButtonSizeValues\n);\nexport const DEFAULT_ICON = 'clipboard-copy';\nexport const SUCCESS_ICON = 'clipboard-checked';\nexport const ERROR_ICON = 'clipboard-x';\nexport const DEFAULT_STATUS = 'idle';\n\nexport interface HdsCopyButtonSignature {\n  Args: HdsButtonSignature['Args'] & {\n    size?: HdsCopyButtonSizes;\n    textToCopy?: HdsClipboardModifierSignature['Args']['Named']['text'];\n    targetToCopy?: HdsClipboardModifierSignature['Args']['Named']['target'];\n    onSuccess?: HdsClipboardModifierSignature['Args']['Named']['onSuccess'];\n    onError?: HdsClipboardModifierSignature['Args']['Named']['onError'];\n    ariaMessageText?: string;\n  };\n  Element: HdsButtonSignature['Element'];\n}\n\nexport default class HdsCopyButton extends Component<HdsCopyButtonSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  @tracked private _status = DEFAULT_STATUS;\n  @tracked private _timer: ReturnType<typeof setTimeout> | undefined;\n\n  get icon(): HdsIconSignature['Args']['name'] {\n    let icon: HdsIconSignature['Args']['name'] = DEFAULT_ICON;\n    if (this._status === 'success') {\n      icon = SUCCESS_ICON;\n    } else if (this._status === 'error') {\n      icon = ERROR_ICON;\n    }\n    return icon;\n  }\n\n  get size(): HdsCopyButtonSizes {\n    const { size = DEFAULT_SIZE } = this.args;\n\n    assert(\n      `@size for \"Hds::Copy::Button\" must be one of the following: ${SIZES.join(\n        ', '\n      )}; received: ${size}`,\n      SIZES.includes(size)\n    );\n\n    return size;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-copy-button'];\n\n    // add a class based on the @size argument\n    classes.push(`hds-button--size-${this.size}`);\n\n    classes.push(`hds-copy-button--status-${this._status}`);\n\n    return classes.join(' ');\n  }\n\n  get ariaMessageText(): string {\n    if (this._status === 'success') {\n      return (\n        this.args.ariaMessageText ??\n        this.hdsIntl.t('hds.components.copy-button.aria-message-text.success', {\n          default: 'Copied to clipboard',\n        })\n      );\n    } else if (this._status === 'error') {\n      return this.hdsIntl.t(\n        'hds.components.copy-button.aria-message-text.error',\n        {\n          default: 'Failed to copy to clipboard',\n        }\n      );\n    } else {\n      return '';\n    }\n  }\n\n  onSuccess = (\n    args: HdsClipboardModifierSignature['Args']['Named']['onSuccess']\n  ): void => {\n    this._status = 'success';\n    this.resetStatusDelayed();\n\n    const { onSuccess } = this.args;\n\n    if (typeof onSuccess === 'function') {\n      onSuccess(args);\n    }\n  };\n\n  onError = (\n    args: HdsClipboardModifierSignature['Args']['Named']['onError']\n  ): void => {\n    this._status = 'error';\n    this.resetStatusDelayed();\n\n    const { onError } = this.args;\n\n    if (typeof onError === 'function') {\n      onError(args);\n    }\n  };\n\n  resetStatusDelayed = (): void => {\n    clearTimeout(this._timer);\n    // make it fade back to the default state\n    this._timer = setTimeout((): void => {\n      this._status = DEFAULT_STATUS;\n    }, 1500);\n  };\n\n  <template>\n    <HdsButton\n      class={{this.classNames}}\n      @size={{this.size}}\n      @isFullWidth={{@isFullWidth}}\n      @text={{@text}}\n      @icon={{this.icon}}\n      @isIconOnly={{@isIconOnly}}\n      @color=\"secondary\"\n      @iconPosition=\"trailing\"\n      {{hdsClipboard\n        text=@textToCopy\n        target=@targetToCopy\n        onSuccess=this.onSuccess\n        onError=this.onError\n      }}\n      ...attributes\n    />\n    <span class=\"sr-only\" aria-live=\"polite\">{{this.ariaMessageText}}</span>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport style from 'ember-style-modifier';\n\nexport interface HdsFormSectionMultiFieldGroupItemSignature {\n  Args: {\n    width?: string;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsFormSectionMultiFieldGroupItem extends Component<HdsFormSectionMultiFieldGroupItemSignature> {\n  get widthStyle(): Record<string, string> {\n    const widthStyle: { [key: string]: string } = {};\n\n    if (this.args.width) {\n      widthStyle['--hds-form-section-multi-field-group-item-width'] =\n        this.args.width;\n    }\n    return widthStyle;\n  }\n\n  <template>\n    <div\n      class=\"hds-form__section-multi-field-group-item\"\n      {{style this.widthStyle}}\n      ...attributes\n    >{{yield}}</div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport style from 'ember-style-modifier';\nimport { Textarea } from '@ember/component';\n\nexport interface HdsFormTextareaBaseSignature {\n  Args: {\n    isInvalid?: boolean;\n    value?: string;\n    width?: string;\n    height?: string;\n    id?: string;\n    ariaDescribedBy?: string;\n  };\n  Element: HTMLTextAreaElement;\n}\n\nexport default class HdsFormTextareaBase extends Component<HdsFormTextareaBaseSignature> {\n  get classNames(): string {\n    const classes = ['hds-form-textarea'];\n\n    // add typographic classes\n    classes.push('hds-typography-body-200', 'hds-font-weight-regular');\n\n    // add a class based on the @isInvalid argument\n    if (this.args.isInvalid) {\n      classes.push(`hds-form-textarea--is-invalid`);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    {{! Notice: this is not the native HTML <textarea> but the Ember component <Textarea> }}\n    <Textarea\n      class={{this.classNames}}\n      {{style width=@width height=@height}}\n      rows=\"4\"\n      id={{@id}}\n      aria-describedby={{@ariaDescribedBy}}\n      ...attributes\n      @value={{@value}}\n    />\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { or } from 'ember-truth-helpers';\nimport style from 'ember-style-modifier';\nimport PowerSelect from 'ember-power-select/components/power-select';\n\nimport type { PowerSelectSignature } from 'ember-power-select/components/power-select';\nimport type { Select } from 'ember-power-select/components/power-select';\nimport type { CalculatePositionResult } from 'ember-basic-dropdown/utils/calculate-position';\n\nimport {\n  HdsFormSuperSelectHorizontalPositionValues,\n  HdsFormSuperSelectHorizontalPositionToPlacementValues,\n} from '../types.ts';\nimport anchoredPositionModifier from '../../../../../modifiers/hds-anchored-position.ts';\nimport HdsFormSuperSelectAfterOptions from '../after-options.gts';\nimport HdsFormSuperSelectOptionGroup from '../option-group.gts';\n\nimport type { HdsFormSuperSelectHorizontalPositions } from '../types.ts';\n\nexport const DEFAULT_HORIZONTAL_POSITION: string =\n  HdsFormSuperSelectHorizontalPositionValues.Left;\nexport const HORIZONTAL_POSITION_MAPPING =\n  HdsFormSuperSelectHorizontalPositionToPlacementValues;\n\nexport interface HdsFormSuperSelectMultipleBaseSignature {\n  Args: Omit<PowerSelectSignature['Args'], 'resultCountMessage'> & {\n    showAfterOptions?: boolean;\n    afterOptionsContent?: string;\n    resultCountMessage?:\n      | string\n      | PowerSelectSignature['Args']['resultCountMessage'];\n    dropdownMaxWidth?: string;\n    matchTriggerWidth?: boolean;\n    isInvalid?: boolean;\n  };\n  Blocks: PowerSelectSignature['Blocks'];\n  Element: PowerSelectSignature['Element'];\n}\n\nexport default class HdsFormSuperSelectMultipleBase extends Component<HdsFormSuperSelectMultipleBaseSignature> {\n  @tracked private _powerSelectAPI?: Select;\n  @tracked private _showOnlySelected = false;\n  @tracked private _showNoSelectedMessage = false;\n\n  get horizontalPosition(): HdsFormSuperSelectHorizontalPositions {\n    const { horizontalPosition = DEFAULT_HORIZONTAL_POSITION } = this.args;\n    return horizontalPosition as HdsFormSuperSelectHorizontalPositions;\n  }\n\n  get selectedCount(): string {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n    return this._powerSelectAPI?.selected?.length || '0';\n  }\n\n  get optionsCount(): string {\n    return this._powerSelectAPI?.resultsCount.toString() || '0';\n  }\n\n  get resultCountMessageText(): string {\n    if (typeof this.args.resultCountMessage === 'string') {\n      return this.args.resultCountMessage;\n    }\n\n    return `${this.optionsCount} total`;\n  }\n\n  get resultCountMessageFunction(): PowerSelectSignature['Args']['resultCountMessage'] {\n    if (typeof this.args.resultCountMessage === 'function') {\n      return this.args.resultCountMessage;\n    }\n\n    return undefined;\n  }\n\n  calculatePosition = (\n    trigger: Element,\n    content: HTMLElement\n  ): CalculatePositionResult => {\n    // use `hds-anchored-position` to calculate and set position\n    // @ts-expect-error: known issue with type of invocation\n    anchoredPositionModifier(content, [trigger], {\n      placement: HORIZONTAL_POSITION_MAPPING[this.horizontalPosition],\n      offsetOptions: 4,\n      enableCollisionDetection: true,\n    });\n    // prevent PowerSelect from setting position\n    return {\n      horizontalPosition: 'auto',\n      verticalPosition: 'auto',\n      style: {},\n    };\n  };\n\n  /**\n   * This action sets the powerSelectAPI property and optionally calls a registerAPI function.\n   *\n   * @param {Object} powerSelectAPI - The API object for the PowerSelect component.\n   *\n   * If a `registerAPI` function is passed in through the component's arguments,\n   * this function will be called with the `powerSelectAPI` as its argument.\n   * This allows parent components or controllers to have access to the PowerSelect API.\n   *\n   * The `powerSelectAPI` is also stored on the component instance and used in `clearSelected`\n   */\n  setPowerSelectAPI = (powerSelectAPI: Select): void => {\n    if (typeof this.args.registerAPI === 'function') {\n      this.args.registerAPI(powerSelectAPI);\n    }\n    this._powerSelectAPI = powerSelectAPI;\n  };\n\n  showSelected = (): void => {\n    this._showNoSelectedMessage = this.selectedCount === '0';\n    this._showOnlySelected = true;\n  };\n\n  showAll = (): void => {\n    this._showNoSelectedMessage = false;\n    this._showOnlySelected = false;\n  };\n\n  clearSelected = (): void => {\n    this._powerSelectAPI?.actions.select(null);\n    // show all options after clearing all selection\n    this._showNoSelectedMessage = false;\n    this._showOnlySelected = false;\n  };\n\n  get showAfterOptions(): boolean {\n    return this.args.showAfterOptions ?? true;\n  }\n\n  // NOTE: The searchPlaceholder doesn't currently work for the multiple select\n  get searchPlaceholder(): string {\n    return this.args.searchPlaceholder ?? 'Search';\n  }\n\n  get styles(): Record<string, string> {\n    const styles: { [key: string]: string } = {};\n\n    if (this.args.dropdownMaxWidth) {\n      styles['--hds-form-super-select-dropdown-max-width'] =\n        this.args.dropdownMaxWidth;\n    }\n\n    if (this.selectedCount === '0') {\n      styles['--hds-form-super-select-selected-text-display'] = 'none';\n    } else {\n      styles['--hds-form-super-select-selected-text-display'] = 'flex';\n    }\n\n    styles['--hds-form-super-select-selected-text'] =\n      `'${this.selectedCount} selected'`;\n\n    return styles;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-form-super-select', 'hds-form-super-select-multiple'];\n\n    // add a class based on the @matchTriggerWidth argument or whether dropdownMaxWidth is set\n    if (this.args.matchTriggerWidth === false || this.args.dropdownMaxWidth) {\n      classes.push('hds-form-super-select--dropdown-content-auto-width');\n    }\n\n    // add a class based on the @isInvalid argument\n    if (this.args.isInvalid) {\n      classes.push(`hds-form-super-select--is-invalid`);\n    }\n\n    // add a class based on the showOnlySelected\n    if (this._showOnlySelected) {\n      classes.push(`hds-form-super-select--show-only-selected`);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    {{! Important: if an argument is added in base.hbs, it must also be added/processed in the Base component used in field.hbs }}\n    <div class={{this.classNames}} {{style this.styles}}>\n      <PowerSelect\n        tabindex=\"0\"\n        @afterOptionsComponent={{if\n          this.showAfterOptions\n          (or\n            @afterOptionsComponent\n            (component\n              HdsFormSuperSelectAfterOptions\n              content=@afterOptionsContent\n              resultCountMessage=this.resultCountMessageText\n              showNoSelectedMessage=this._showNoSelectedMessage\n              showOnlySelected=this._showOnlySelected\n              showSelected=this.showSelected\n              showAll=this.showAll\n              clearSelected=this.clearSelected\n              selectedCount=this.selectedCount\n            )\n          )\n        }}\n        @ariaDescribedBy={{@ariaDescribedBy}}\n        @ariaInvalid={{@ariaInvalid}}\n        @ariaLabel={{@ariaLabel}}\n        @ariaLabelledBy={{@ariaLabelledBy}}\n        @beforeOptionsComponent={{@beforeOptionsComponent}}\n        @calculatePosition={{if\n          @verticalPosition\n          undefined\n          this.calculatePosition\n        }}\n        @closeOnSelect={{false}}\n        @disabled={{@disabled}}\n        @dropdownClass={{@dropdownClass}}\n        @extra={{@extra}}\n        @groupComponent={{HdsFormSuperSelectOptionGroup}}\n        @horizontalPosition={{@horizontalPosition}}\n        @initiallyOpened={{@initiallyOpened}}\n        @labelText={{@labelText}}\n        @loadingMessage={{@loadingMessage}}\n        @matcher={{@matcher}}\n        @matchTriggerWidth={{if @dropdownMaxWidth false @matchTriggerWidth}}\n        @multiple={{true}}\n        @noMatchesMessage={{@noMatchesMessage}}\n        @onBlur={{@onBlur}}\n        @onChange={{@onChange}}\n        @onClose={{@onClose}}\n        @onFocus={{@onFocus}}\n        @onInput={{@onInput}}\n        @onKeydown={{@onKeydown}}\n        @onOpen={{@onOpen}}\n        @options={{@options}}\n        @optionsComponent={{@optionsComponent}}\n        @placeholder={{@placeholder}}\n        @placeholderComponent={{@placeholderComponent}}\n        @preventScroll={{@preventScroll}}\n        @registerAPI={{this.setPowerSelectAPI}}\n        @renderInPlace={{true}}\n        @resultCountMessage={{this.resultCountMessageFunction}}\n        @scrollTo={{@scrollTo}}\n        @search={{@search}}\n        @searchEnabled={{@searchEnabled}}\n        @searchField={{@searchField}}\n        @searchFieldPosition=\"before-options\"\n        @searchMessage={{@searchMessage}}\n        @searchPlaceholder={{this.searchPlaceholder}}\n        @selected={{@selected}}\n        @selectedItemComponent={{@selectedItemComponent}}\n        @tabindex={{@tabindex}}\n        @triggerClass={{@triggerClass}}\n        @triggerComponent={{@triggerComponent}}\n        @triggerId={{@triggerId}}\n        @triggerRole={{@triggerRole}}\n        @typeAheadOptionMatcher={{@typeAheadOptionMatcher}}\n        @verticalPosition={{@verticalPosition}}\n        ...attributes\n        as |option select|\n      >\n        {{! even if technically what is yielded here are _a list_ of options, we've decided to keep the option name for consistency with the existing PowerSelect API }}\n        {{yield option select}}\n      </PowerSelect>\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { or } from 'ember-truth-helpers';\nimport style from 'ember-style-modifier';\nimport PowerSelect from 'ember-power-select/components/power-select';\n\nimport type { PowerSelectSignature } from 'ember-power-select/components/power-select';\nimport type { Select } from 'ember-power-select/components/power-select';\nimport type { CalculatePositionResult } from 'ember-basic-dropdown/utils/calculate-position';\n\nimport {\n  HdsFormSuperSelectHorizontalPositionValues,\n  HdsFormSuperSelectHorizontalPositionToPlacementValues,\n} from '../types.ts';\nimport anchoredPositionModifier from '../../../../../modifiers/hds-anchored-position.ts';\nimport HdsTextBody from '../../../text/body.gts';\nimport HdsFormSuperSelectOptionGroup from '../option-group.gts';\nimport HdsFormSuperSelectPlaceholder from '../placeholder.gts';\nimport HdsFormSuperSelectAfterOptions from '../after-options.gts';\n\nimport type { HdsFormSuperSelectHorizontalPositions } from '../types.ts';\n\nexport const DEFAULT_HORIZONTAL_POSITION: string =\n  HdsFormSuperSelectHorizontalPositionValues.Left;\nexport const HORIZONTAL_POSITION_MAPPING =\n  HdsFormSuperSelectHorizontalPositionToPlacementValues;\n\nexport interface HdsFormSuperSelectSingleBaseSignature {\n  Args: Omit<PowerSelectSignature['Args'], 'resultCountMessage'> & {\n    showAfterOptions?: boolean;\n    afterOptionsContent?: string;\n    resultCountMessage?:\n      | string\n      | PowerSelectSignature['Args']['resultCountMessage'];\n    dropdownMaxWidth?: string;\n    matchTriggerWidth?: boolean;\n    isInvalid?: boolean;\n  };\n  Blocks: PowerSelectSignature['Blocks'];\n  Element: PowerSelectSignature['Element'];\n}\n\nexport default class HdsFormSuperSelectSingleBase extends Component<HdsFormSuperSelectSingleBaseSignature> {\n  @tracked powerSelectAPI?: Select;\n\n  get horizontalPosition(): HdsFormSuperSelectHorizontalPositions {\n    const { horizontalPosition = DEFAULT_HORIZONTAL_POSITION } = this.args;\n    return horizontalPosition as HdsFormSuperSelectHorizontalPositions;\n  }\n\n  get resultCountMessageText(): string {\n    if (typeof this.args.resultCountMessage === 'string') {\n      return this.args.resultCountMessage;\n    }\n\n    return `${this.powerSelectAPI?.resultsCount || 0} total`;\n  }\n\n  get resultCountMessageFunction(): PowerSelectSignature['Args']['resultCountMessage'] {\n    if (typeof this.args.resultCountMessage === 'function') {\n      return this.args.resultCountMessage;\n    }\n\n    return undefined;\n  }\n\n  /**\n   * This action sets the powerSelectAPI property and optionally calls a registerAPI function.\n   *\n   * @param {Object} powerSelectAPI - The API object for the PowerSelect component.\n   *\n   * If a `registerAPI` function is passed in through the component's arguments,\n   * this function will be called with the `powerSelectAPI` as its argument.\n   * This allows parent components or controllers to have access to the PowerSelect API.\n   *\n   * The `powerSelectAPI` is also stored on the component instance and used in `clearSelected`\n   */\n  setPowerSelectAPI = (powerSelectAPI: Select): void => {\n    if (typeof this.args.registerAPI === 'function') {\n      this.args.registerAPI(powerSelectAPI);\n    }\n    this.powerSelectAPI = powerSelectAPI;\n  };\n\n  calculatePosition = (\n    trigger: Element,\n    content: HTMLElement\n  ): CalculatePositionResult => {\n    // use `hds-anchored-position` to calculate and set position\n    // @ts-expect-error: known issue with type of invocation\n    anchoredPositionModifier(content, [trigger], {\n      placement: HORIZONTAL_POSITION_MAPPING[this.horizontalPosition],\n      offsetOptions: 4,\n      enableCollisionDetection: true,\n    });\n    // prevent PowerSelect from setting position\n    return {\n      horizontalPosition: 'auto',\n      verticalPosition: 'auto',\n      style: {},\n    };\n  };\n\n  get showAfterOptions(): boolean | string {\n    return this.args.showAfterOptions ?? this.args.afterOptionsContent ?? false;\n  }\n\n  get searchPlaceholder(): string {\n    return this.args.searchPlaceholder ?? 'Search';\n  }\n\n  get dropdownMaxWidthStyle(): Record<string, string> {\n    const maxWidthStyle: { [key: string]: string } = {};\n    if (this.args.dropdownMaxWidth) {\n      maxWidthStyle['--hds-form-super-select-dropdown-max-width'] =\n        this.args.dropdownMaxWidth;\n    }\n    return maxWidthStyle;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-form-super-select', 'hds-form-super-select-single'];\n\n    // add a class based on the @matchTriggerWidth argument or whether dropdownMaxWidth is set\n    if (this.args.matchTriggerWidth === false || this.args.dropdownMaxWidth) {\n      classes.push('hds-form-super-select--dropdown-content-auto-width');\n    }\n\n    // add a class based on the @isInvalid argument\n    if (this.args.isInvalid) {\n      classes.push(`hds-form-super-select--is-invalid`);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    {{! Important: if an argument is added in base.hbs, it must also be added/processed in the Base component used in field.hbs }}\n    <div class={{this.classNames}} {{style this.dropdownMaxWidthStyle}}>\n      <PowerSelect\n        @afterOptionsComponent={{if\n          this.showAfterOptions\n          (or\n            @afterOptionsComponent\n            (component\n              HdsFormSuperSelectAfterOptions\n              content=@afterOptionsContent\n              resultCountMessage=this.resultCountMessageText\n            )\n          )\n        }}\n        @ariaDescribedBy={{@ariaDescribedBy}}\n        @ariaInvalid={{@ariaInvalid}}\n        @ariaLabel={{@ariaLabel}}\n        @ariaLabelledBy={{@ariaLabelledBy}}\n        @beforeOptionsComponent={{@beforeOptionsComponent}}\n        @calculatePosition={{if\n          @verticalPosition\n          undefined\n          this.calculatePosition\n        }}\n        @closeOnSelect={{@closeOnSelect}}\n        @disabled={{@disabled}}\n        @dropdownClass={{@dropdownClass}}\n        @extra={{@extra}}\n        @groupComponent={{HdsFormSuperSelectOptionGroup}}\n        @horizontalPosition={{@horizontalPosition}}\n        @initiallyOpened={{@initiallyOpened}}\n        @labelText={{@labelText}}\n        @loadingMessage={{@loadingMessage}}\n        @matcher={{@matcher}}\n        @matchTriggerWidth={{if @dropdownMaxWidth false @matchTriggerWidth}}\n        @noMatchesMessage={{@noMatchesMessage}}\n        @onBlur={{@onBlur}}\n        @onChange={{@onChange}}\n        @onClose={{@onClose}}\n        @onFocus={{@onFocus}}\n        @onInput={{@onInput}}\n        @onKeydown={{@onKeydown}}\n        @onOpen={{@onOpen}}\n        @options={{@options}}\n        @optionsComponent={{@optionsComponent}}\n        @placeholder={{@placeholder}}\n        @placeholderComponent={{HdsFormSuperSelectPlaceholder}}\n        @preventScroll={{@preventScroll}}\n        @registerAPI={{this.setPowerSelectAPI}}\n        @renderInPlace={{true}}\n        @resultCountMessage={{this.resultCountMessageFunction}}\n        @scrollTo={{@scrollTo}}\n        @search={{@search}}\n        @searchEnabled={{@searchEnabled}}\n        @searchField={{@searchField}}\n        @searchFieldPosition=\"before-options\"\n        @searchMessage={{@searchMessage}}\n        @searchPlaceholder={{this.searchPlaceholder}}\n        @selected={{@selected}}\n        @selectedItemComponent={{@selectedItemComponent}}\n        @tabindex={{@tabindex}}\n        @triggerClass={{@triggerClass}}\n        @triggerComponent={{@triggerComponent}}\n        @triggerId={{@triggerId}}\n        @triggerRole={{@triggerRole}}\n        @typeAheadOptionMatcher={{@typeAheadOptionMatcher}}\n        @verticalPosition={{@verticalPosition}}\n        ...attributes\n        as |option select|\n      >\n        <HdsTextBody>{{yield option select}}</HdsTextBody>\n      </PowerSelect>\n    </div>\n  </template>\n}\n","import { isEqual as emberIsEqual } from '@ember/utils';\n\nexport default function isEqual(\n  firstValue: unknown,\n  secondValue: unknown,\n  useDeepEqual = false,\n) {\n  if (useDeepEqual) {\n    return JSON.stringify(firstValue) === JSON.stringify(secondValue);\n  } else {\n    return (\n      emberIsEqual(firstValue, secondValue) ||\n      emberIsEqual(secondValue, firstValue)\n    );\n  }\n}\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n  const firstChar = placement[0];\n  return firstChar === 't' || firstChar === 'b' ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.includes('start') ? placement.replace('start', 'end') : placement.replace('end', 'start');\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rlPlacement : lrPlacement;\n      return isStart ? lrPlacement : rlPlacement;\n    case 'left':\n    case 'right':\n      return isStart ? tbPlacement : btPlacement;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  const side = getSide(placement);\n  return oppositeSideMap[side] + placement.slice(side.length);\n}\nfunction expandPaddingObject(padding) {\n  var _padding$top, _padding$right, _padding$bottom, _padding$left;\n  return {\n    top: (_padding$top = padding.top) != null ? _padding$top : 0,\n    right: (_padding$right = padding.right) != null ? _padding$right : 0,\n    bottom: (_padding$bottom = padding.bottom) != null ? _padding$bottom : 0,\n    left: (_padding$left = padding.left) != null ? _padding$left : 0\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  const alignment = getAlignment(placement);\n  if (alignment) {\n    coords[alignmentAxis] += commonAlign * (alignment === 'end' ? 1 : -1) * (rtl && isVertical ? -1 : 1);\n  }\n  return coords;\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    x,\n    y,\n    width: rects.floating.width,\n    height: rects.floating.height\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) && (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\n// Maximum number of resets that can occur before bailing to avoid infinite reset loops.\nconst MAX_RESET_COUNT = 50;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const platformWithDetectOverflow = platform.detectOverflow ? platform : {\n    ...platform,\n    detectOverflow\n  };\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let resetCount = 0;\n  const middlewareData = {};\n  for (let i = 0; i < middleware.length; i++) {\n    const currentMiddleware = middleware[i];\n    if (!currentMiddleware) {\n      continue;\n    }\n    const {\n      name,\n      fn\n    } = currentMiddleware;\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform: platformWithDetectOverflow,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData[name] = {\n      ...middlewareData[name],\n      ...data\n    };\n    if (reset && resetCount < MAX_RESET_COUNT) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(minPadding, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < minPadding ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < minPadding ? center - minPadding : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements$1[0]\n          }\n        };\n      }\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const initialSideAxis = getSideAxis(initialPlacement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n      if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n          if (!ignoreCrossAxisOverflow ||\n          // We leave the current main axis only if every placement on that axis\n          // overflows the main axis.\n          overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n            // Try next placement and re-run the lifecycle.\n            return {\n              data: {\n                index: nextIndex,\n                overflows: overflowsData\n              },\n              reset: {\n                placement: nextPlacement\n              }\n            };\n          }\n        }\n\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$filter2;\n                const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n                  if (hasFallbackAxisSideDirection) {\n                    const currentSideAxis = getSideAxis(d.placement);\n                    return currentSideAxis === initialSideAxis ||\n                    // Create a bias to the `y` side axis due to horizontal\n                    // reading directions favoring greater width.\n                    currentSideAxis === 'y';\n                  }\n                  return true;\n                }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        rects,\n        platform\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await platform.detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await platform.detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = evaluate(options, state);\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n\n      // No rects (e.g. a hidden or detached reference, or a collapsed range) —\n      // keep the existing reference rect rather than resetting to an invalid\n      // one with non-finite values.\n      if (!nativeClientRects.length) {\n        return {};\n      }\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getPaddingObject(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && (clientRects[0].left > clientRects[1].right || clientRects[1].left > clientRects[0].right) && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getSideAxis(placement) === 'y') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            return rectToClientRect({\n              x: left,\n              y: top,\n              width: right - left,\n              height: bottom - top\n            });\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          return rectToClientRect({\n            x: minLeft,\n            y: top,\n            width: maxRight - minLeft,\n            height: bottom - top\n          });\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === 'y';\n  const mainAxisMulti = originSides.has(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: rawValue.mainAxis || 0,\n    crossAxis: rawValue.crossAxis || 0,\n    alignmentAxis: rawValue.alignmentAxis\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      var _middlewareData$offse, _middlewareData$arrow;\n      const {\n        x,\n        y,\n        placement,\n        middlewareData\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n\n      // If the placement is the same and the arrow caused an alignment offset\n      // then we don't need to change the positioning coordinates.\n      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: {\n          ...diffCoords,\n          placement\n        }\n      };\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        platform\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const clampCoord = (axis, coord) => clamp(coord + overflow[axis === 'y' ? 'top' : 'left'], coord, coord - overflow[axis === 'y' ? 'bottom' : 'right']);\n      if (checkMainAxis) {\n        mainAxisCoord = clampCoord(mainAxis, mainAxisCoord);\n      }\n      if (checkCrossAxis) {\n        crossAxisCoord = clampCoord(crossAxis, crossAxisCoord);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y,\n          enabled: {\n            [mainAxis]: checkMainAxis,\n            [crossAxis]: checkCrossAxis\n          }\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      var _rawOffset$mainAxis, _rawOffset$crossAxis;\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: (_rawOffset$mainAxis = rawOffset.mainAxis) != null ? _rawOffset$mainAxis : 0,\n        crossAxis: (_rawOffset$crossAxis = rawOffset.crossAxis) != null ? _rawOffset$crossAxis : 0\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = originSides.has(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n// Method syntax keeps callback parameters bivariant, but expressing the\n// explicit `| undefined` required by `exactOptionalPropertyTypes` needs\n// property syntax, which is contravariant under `strictFunctionTypes`.\n// Extracting the function from a method position restores that bivariance so\n// consumers can still assign callbacks with narrower parameter types.\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const maximumClippingHeight = height - overflow.top - overflow.bottom;\n      const maximumClippingWidth = width - overflow.left - overflow.right;\n      const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n      const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n      const shiftData = state.middlewareData.shift;\n      const noShift = !shiftData;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if (shiftData != null && shiftData.enabled.x) {\n        availableWidth = maximumClippingWidth;\n      }\n      if (shiftData != null && shiftData.enabled.y) {\n        availableHeight = maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        if (isYAxis) {\n          availableWidth = width - 2 * max(overflow.left, overflow.right);\n        } else {\n          availableHeight = height - 2 * max(overflow.top, overflow.bottom);\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n  return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== 'inline' && display !== 'contents';\n}\nfunction isTableElement(element) {\n  return /^(table|td|th)$/.test(getNodeName(element));\n}\nfunction isTopLayer(element) {\n  try {\n    if (element.matches(':popover-open')) {\n      return true;\n    }\n  } catch (_e) {\n    // no-op\n  }\n  try {\n    return element.matches(':modal');\n  } catch (_e) {\n    return false;\n  }\n}\nconst willChangeRe = /transform|translate|scale|rotate|perspective|filter/;\nconst containRe = /paint|layout|strict|content/;\nconst isNotNone = value => !!value && value !== 'none';\nlet isWebKitValue;\nfunction isContainingBlock(elementOrCss) {\n  const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n  return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || '') || containRe.test(css.contain || '');\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else if (isTopLayer(currentNode)) {\n      return null;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (isWebKitValue == null) {\n    isWebKitValue = typeof CSS !== 'undefined' && CSS.supports && CSS.supports('-webkit-backdrop-filter', 'none');\n  }\n  return isWebKitValue;\n}\nfunction isLastTraversableNode(node) {\n  return /^(html|body|#document)$/.test(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.scrollX,\n    scrollTop: element.scrollY\n  };\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return (node.ownerDocument || node).body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    const frameElement = getFrameElement(win);\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n  } else {\n    return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n  }\n}\nfunction getFrameElement(win) {\n  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle$1(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  return !!floatingOffsetParent && isFixed && floatingOffsetParent === getWindow(element);\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement && offsetParent) {\n    const win = getWindow(domElement);\n    const offsetWin = isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentWin = win;\n    let currentIFrame = getFrameElement(currentWin);\n    while (currentIFrame && offsetWin !== currentWin) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle$1(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentWin = getWindow(currentIFrame);\n      currentIFrame = getFrameElement(currentWin);\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n  const leftScroll = getNodeScroll(element).scrollLeft;\n  if (!rect) {\n    return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n  }\n  return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n  const htmlRect = documentElement.getBoundingClientRect();\n  const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n  const y = htmlRect.top + scroll.scrollTop;\n  return {\n    x,\n    y\n  };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isFixed = strategy === 'fixed';\n  const documentElement = getDocumentElement(offsetParent);\n  const topLayer = elements ? isTopLayer(elements.floating) : false;\n  if (offsetParent === documentElement || topLayer && isFixed) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  if (isOffsetParentAnElement || !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n  };\n}\n\nfunction getClientRects(element) {\n  return element.getClientRects ? Array.from(element.getClientRects()) : [];\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(html) {\n  const scroll = getNodeScroll(html);\n  const body = html.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(html);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle$1(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy, rootBoundary) {\n  if (rootBoundary === void 0) {\n    rootBoundary = 'viewport';\n  }\n  const isLayoutViewport = rootBoundary === 'layoutViewport';\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    // Client coordinates are relative to the layout viewport, except in\n    // WebKit with an `absolute` strategy, where they are relative to the\n    // visual viewport.\n    const layoutRelativeClientCoords = !isWebKit() || strategy === 'fixed';\n    if (isLayoutViewport) {\n      if (!layoutRelativeClientCoords) {\n        x = -visualViewport.offsetLeft;\n        y = -visualViewport.offsetTop;\n      }\n    } else {\n      width = visualViewport.width;\n      height = visualViewport.height;\n      if (layoutRelativeClientCoords) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n  }\n  const windowScrollbarX = getWindowScrollBarX(html);\n  // `scrollbar-gutter: stable` on the <html> reserves gutter space that shrinks\n  // the visual width but isn't reflected in `html.clientWidth`, so subtract it.\n  // Only the inline-end (right) gutter can hold the scrollbar; `both-edges` also\n  // reserves an empty inline-start gutter that clips nothing, so exclude just\n  // the one scrollbar-side gutter — halve the measured (two-gutter) total. A\n  // left-side scrollbar (`windowScrollbarX > 0`) is already handled by\n  // `getHTMLOffset`/`visualViewport.width`; skip it here.\n  if (windowScrollbarX <= 0) {\n    const doc = html.ownerDocument;\n    const body = doc.body;\n    const bodyStyles = getComputedStyle(body);\n    const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n    const reservedWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n    const gutter = getComputedStyle(html).scrollbarGutter === 'stable both-edges' ? reservedWidth / 2 : reservedWidth;\n    if (gutter <= SCROLLBAR_MAX) {\n      width -= gutter;\n    }\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = getScale(element);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport' || clippingAncestor === 'layoutViewport') {\n    rect = getViewportRect(element, strategy, clippingAncestor);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y,\n      width: clippingAncestor.width,\n      height: clippingAncestor.height\n    };\n  }\n  return rectToClientRect(rect);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let lastKeptComputedStyle = null;\n  const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle$1(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    // Position of the containing block chain below the current node. A fixed\n    // element whose containing block hasn't been found yet is a fixed chain.\n    const lastPosition = lastKeptComputedStyle ? lastKeptComputedStyle.position : elementIsFixed ? 'fixed' : '';\n\n    // A non-containing ancestor does not clip the element when the chain\n    // below it escapes it: a fixed chain escapes all ancestors up to the\n    // next containing block, an absolute chain escapes static ancestors.\n    const shouldDropCurrentNode = !currentNodeIsContaining && (lastPosition === 'fixed' || lastPosition === 'absolute' && computedStyle.position === 'static');\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // The kept node carries the chain position for the next iteration.\n      lastKeptComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);\n  let top = firstRect.top;\n  let right = firstRect.right;\n  let bottom = firstRect.bottom;\n  let left = firstRect.left;\n  for (let i = 1; i < clippingAncestors.length; i++) {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);\n    top = max(rect.top, top);\n    right = min(rect.right, right);\n    bottom = min(rect.bottom, bottom);\n    left = max(rect.left, left);\n  }\n  return {\n    width: right - left,\n    height: bottom - top,\n    x: left,\n    y: top\n  };\n}\n\nfunction getDimensions(element) {\n  const {\n    width,\n    height\n  } = getCssDimensions(element);\n  return {\n    width,\n    height\n  };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createCoords(0);\n  if (isOffsetParentAnElement || !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n\n  // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n  // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n  if (!isOffsetParentAnElement && documentElement) {\n    offsets.x = getWindowScrollBarX(documentElement);\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n  const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n  return {\n    x,\n    y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction isStaticPositioned(element) {\n  return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  let rawOffsetParent = element.offsetParent;\n\n  // Firefox returns the <html> element as the offsetParent if it's non-static,\n  // while Chrome and Safari return the <body> element. The <body> element must\n  // be used to perform the correct calculations even if the <html> element is\n  // non-static.\n  if (getDocumentElement(element) === rawOffsetParent) {\n    rawOffsetParent = rawOffsetParent.ownerDocument.body;\n  }\n  return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const win = getWindow(element);\n  if (isTopLayer(element)) {\n    return win;\n  }\n  if (!isHTMLElement(element)) {\n    let svgOffsetParent = getParentNode(element);\n    while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n      if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n        return svgOffsetParent;\n      }\n      svgOffsetParent = getParentNode(svgOffsetParent);\n    }\n    return win;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n    return win;\n  }\n  return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  const floatingDimensions = await getDimensionsFn(data.floating);\n  return {\n    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      width: floatingDimensions.width,\n      height: floatingDimensions.height\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n  return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove, ancestorResize) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    var _io;\n    clearTimeout(timeoutId);\n    (_io = io) == null || _io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const elementRectForRootMargin = element.getBoundingClientRect();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = elementRectForRootMargin;\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n\n      // The entry is a snapshot, so the reference may have moved since the\n      // intersection was computed (under performance constraints, or between\n      // consecutive frames of a multi-frame layout shift). The reported ratio\n      // and the observed area are stale in that case and cannot be trusted to\n      // detect subsequent movement, so refresh regardless of the ratio.\n      if (!rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n        return refresh();\n      }\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          // If the reference is clipped in place, the ratio is 0. Throttle\n          // the refresh to prevent an infinite loop of updates.\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 1000);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (_e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  const win = getWindow(element);\n  // The window is a resize ancestor, so when `ancestorResize` is enabled its\n  // listener already runs the update on resize. Here we only need to rebuild\n  // the `IntersectionObserver` for the new root size, skipping a redundant\n  // update. When `ancestorResize` is disabled, this becomes the sole update.\n  const handleResize = () => refresh(ancestorResize);\n  win.addEventListener('resize', handleResize);\n  refresh(true);\n  return () => {\n    win.removeEventListener('resize', handleResize);\n    cleanup();\n  };\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...(floating ? getOverflowAncestors(floating) : [])] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update);\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update, ancestorResize) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          var _resizeObserver;\n          (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    if (floating) {\n      resizeObserver.observe(floating);\n    }\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _resizeObserver2;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo == null || cleanupIo();\n    (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = options != null ? options : {};\n  const platformWithCache = {\n    ...platform,\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { modifier } from 'ember-modifier';\nimport { assert } from '@ember/debug';\n\nimport {\n  autoUpdate,\n  computePosition,\n  offset,\n  flip,\n  shift,\n  limitShift,\n  autoPlacement,\n  arrow,\n  // ---\n  // this could be used in the future if we want to give consumers an option to hide the \"floating\" element when the \"anchor\" hides from the viewport\n  // see: https://floating-ui.com/docs/hide\n  // hide,\n  // ---\n  size,\n} from '@floating-ui/dom';\n\nimport type {\n  Placement,\n  Strategy,\n  OffsetOptions,\n  FlipOptions,\n  ShiftOptions,\n  AutoPlacementOptions,\n  ArrowOptions,\n  Middleware,\n  Boundary,\n} from '@floating-ui/dom';\n\ntype BoundaryExtended = Boundary | (string & {});\n\nexport enum HdsEnableCollisionDetectionOptions {\n  Shift = 'shift',\n  Flip = 'flip',\n  Auto = 'auto',\n}\n\nexport type HdsEnableCollisionDetection =\n  `${HdsEnableCollisionDetectionOptions}`;\n\nexport const DEFAULT_PLACEMENT = 'bottom';\nexport const PLACEMENTS: Placement[] = [\n  'top',\n  'top-start',\n  'top-end',\n  'right',\n  'right-start',\n  'right-end',\n  'bottom',\n  'bottom-start',\n  'bottom-end',\n  'left',\n  'left-start',\n  'left-end',\n];\n\nexport const ENABLE_COLLISION_DETECTION_OPTIONS: HdsEnableCollisionDetection[] =\n  Object.values(HdsEnableCollisionDetectionOptions);\n\n// share the same default value of \"padding\" for `flip/shift/autoPlacement` options\n// this refers to the minimum distance from the boundaries' edges (the viewport)\n// before the floating element changes its position (flips, shifts, or autoplace itself)\nconst DEFAULT_EDGE_DISTANCE = 8;\n\nexport type FloatingUIOptions = {\n  placement?: Placement;\n  strategy?: Strategy;\n  offsetOptions?: OffsetOptions;\n  flipOptions?: FlipOptions;\n  shiftOptions?: ShiftOptions;\n  autoPlacementOptions?: AutoPlacementOptions;\n  middlewareExtra?: Middleware[];\n  enableCollisionDetection?: boolean | HdsEnableCollisionDetection;\n  arrowElement?: ArrowOptions['element'];\n  arrowPadding?: ArrowOptions['padding'];\n  matchToggleWidth?: boolean;\n  boundary?: BoundaryExtended;\n};\n\nexport type HdsAnchoredPositionOptions = FloatingUIOptions & {\n  arrowSelector?: string;\n};\n\n// resolve boundary selector/values to Floating UI Boundary\nconst resolveBoundary = (boundary?: BoundaryExtended): Boundary | undefined => {\n  if (typeof boundary === 'string') {\n    // this is necessary to satisfy TypeScript\n    if (boundary === 'clippingAncestors') {\n      return 'clippingAncestors';\n    }\n    const el = document.querySelector(boundary);\n    assert(\n      '`hds-anchored-position` modifier - the `boundary` selector `' +\n        boundary +\n        '` did not resolve to an element',\n      el !== null && el.nodeType === Node.ELEMENT_NODE\n    );\n    return el;\n  } else {\n    return boundary;\n  }\n};\n\n// we use this function to process all the options provided to the modifier in a single place,\n// in relation to the Floating UI APIs, and keep the modifier code more clean/simple\nexport const getFloatingUIOptions = (\n  options: FloatingUIOptions\n): {\n  placement: Placement;\n  strategy: Strategy;\n  middleware: Middleware[];\n} => {\n  const {\n    placement = DEFAULT_PLACEMENT,\n    strategy = 'absolute', // we don't need to use `fixed` if we use the Popover API for the \"floating\" element (it puts the element in the `top-layer`)\n    offsetOptions,\n    flipOptions = { padding: DEFAULT_EDGE_DISTANCE },\n    shiftOptions = { padding: DEFAULT_EDGE_DISTANCE, limiter: limitShift() },\n    autoPlacementOptions = { padding: DEFAULT_EDGE_DISTANCE },\n    middlewareExtra = [],\n    enableCollisionDetection,\n    arrowElement,\n    arrowPadding,\n    matchToggleWidth,\n    boundary,\n  } = options;\n\n  const resolvedBoundary = resolveBoundary(boundary);\n\n  // build options for each type of collision detection, adding the `boundary` if defined\n\n  const flipOptsExtended: FlipOptions = {\n    ...flipOptions,\n    ...(resolvedBoundary ? { boundary: resolvedBoundary } : {}),\n  };\n\n  const autoPlacementOptsExtended: AutoPlacementOptions = {\n    ...autoPlacementOptions,\n    ...(resolvedBoundary ? { boundary: resolvedBoundary } : {}),\n  };\n\n  const shiftOptsExtended: ShiftOptions = {\n    ...shiftOptions,\n    ...(resolvedBoundary ? { boundary: resolvedBoundary } : {}),\n  };\n\n  // we build dynamically the list of middleware functions to invoke, depending on the options provided\n\n  const middleware = [];\n\n  // https://floating-ui.com/docs/offset\n  middleware.push(offset(offsetOptions));\n\n  // https://floating-ui.com/docs/flip\n  // https://floating-ui.com/docs/shift\n  // https://floating-ui.com/docs/autoPlacement\n  if (\n    enableCollisionDetection === true ||\n    enableCollisionDetection === 'flip'\n  ) {\n    middleware.push(flip(flipOptsExtended));\n  }\n  if (\n    enableCollisionDetection === true ||\n    enableCollisionDetection === 'shift'\n  ) {\n    middleware.push(shift(shiftOptsExtended));\n  }\n  if (enableCollisionDetection === 'auto') {\n    middleware.push(autoPlacement(autoPlacementOptsExtended));\n  }\n\n  // https://floating-ui.com/docs/arrow\n  if (arrowElement) {\n    middleware.push(\n      arrow({\n        element: arrowElement,\n        padding: arrowPadding ?? 0,\n      })\n    );\n  }\n\n  // https://floating-ui.com/docs/size#match-reference-width\n  if (matchToggleWidth) {\n    middleware.push(\n      size({\n        apply({ rects, elements }) {\n          // wrap Object.assign inside a requestAnimationFrame to avoid ResizeObserver loop limit exceeded error\n          // https://github.com/floating-ui/floating-ui/issues/1740\n          requestAnimationFrame(() => {\n            Object.assign(elements.floating.style, {\n              width: `${rects.reference.width}px`,\n            });\n          });\n        },\n      })\n    );\n  }\n\n  middleware.push(...middlewareExtra);\n\n  return {\n    placement,\n    strategy,\n    middleware,\n  };\n};\n\nexport interface HdsAnchoredPositionSignature {\n  Element: HTMLElement;\n  Args: {\n    Positional: [HTMLElement | SVGElement];\n    Named: HdsAnchoredPositionOptions;\n  };\n}\n\n// Notice: we use a function-based modifier here instead of a class-based one\n// because it's quite simple in its logic, and doesn't require injecting services\n// see: https://github.com/ember-modifier/ember-modifier#function-based-modifiers\n\nexport default modifier<HdsAnchoredPositionSignature>(\n  (element, positional, named = {}) => {\n    // the element that \"floats\" next to the \"anchor\" (whose position is calculated in relation to the anchor)\n    // notice: this is the element the Ember modifier is attached to\n    const _floatingElement = element;\n\n    // the element that acts as an \"anchor\" for the \"floating\" element\n    // it can be a DOM (string) selector or a DOM element\n    // notice: it's expressed as \"positional\" argument (array of arguments) for the modifier\n    const _anchorTarget = positional[0];\n    const _anchorElement =\n      typeof _anchorTarget === 'string'\n        ? document.querySelector(_anchorTarget)\n        : _anchorTarget;\n\n    assert(\n      '`hds-anchored-position` modifier - the provided \"anchoring\" element is not defined correctly',\n      _anchorElement instanceof HTMLElement ||\n        _anchorElement instanceof SVGElement\n    );\n\n    // the \"arrow\" element (optional) associated with the \"floating\" element\n    // it can be a DOM selector (string) or a DOM element\n    // notice: it's declared inside the \"named\" argument (object) for the modifier\n    // but we need to extract it also here so it can be used to assign inline styles to it\n    let arrowElement: HTMLElement | SVGElement | undefined;\n\n    if (named.arrowElement) {\n      assert(\n        '`hds-anchored-position` modifier - the `element` provided for the \"arrow\" element is not a valid DOM node',\n        named.arrowElement instanceof HTMLElement ||\n          named.arrowElement instanceof SVGElement\n      );\n\n      arrowElement = named.arrowElement;\n    } else if (named.arrowSelector) {\n      assert(\n        '`hds-anchored-position` modifier - the `selector` provided for the \"arrow\" element must be a string',\n        typeof named.arrowSelector === 'string'\n      );\n\n      const selectedArrowElement = document.querySelector(named.arrowSelector);\n      if (selectedArrowElement instanceof HTMLElement) {\n        arrowElement = selectedArrowElement;\n      } else {\n        assert(\n          '`hds-anchored-position` modifier - the `selector` provided for the \"arrow\" element is not a valid DOM selector'\n        );\n      }\n    }\n\n    // the Floating UI \"options\" to apply to the \"floating\" element\n    // notice: we spread the `named` argument and override its `arrowElement` value instead of setting it directly because Ember complains that modifier's arguments must be immutable\n    const floatingOptions = getFloatingUIOptions({ ...named, arrowElement });\n\n    const computeFloatingPosition = async () => {\n      // important to know: `computePosition()` is not stateful, it only positions the \"floating\" element once\n      // see: https://floating-ui.com/docs/computePosition\n      const state = await computePosition(\n        _anchorElement,\n        _floatingElement,\n        floatingOptions\n      );\n\n      const { x, y, placement, strategy, middlewareData } = state;\n\n      Object.assign(_floatingElement.style, {\n        position: strategy,\n        top: `${y}px`,\n        left: `${x}px`,\n        // TODO? commenting this for now, will need to make this conditional to some argument (and understand how this relates to the `@height` argument)\n        // maxHeight: `${middlewareData.size.availableHeight - 10}px`,\n      });\n\n      if (arrowElement && middlewareData.arrow) {\n        // we assign a \"data\" attribute to the \"arrow\" element so we can use CSS (in the consuming components) to position/rotate it accordingly and we avoid calculating at runtime values that technically we already know\n        // (similar to what Tippy.js does: https://github.com/atomiks/tippyjs/blob/master/src/scss/svg-arrow.scss)\n        // IMPORTANT: floating-ui assumes the \"arrow\" container is square!\n        arrowElement.setAttribute(\n          'data-hds-anchored-arrow-placement',\n          placement\n        );\n\n        // we set `x` or `y` value (depends on the position of the arrow in relation to the \"floating\" element placement)\n        // see: https://floating-ui.com/docs/arrow#usage\n        Object.assign(arrowElement.style, {\n          left:\n            middlewareData.arrow.x != null ? `${middlewareData.arrow.x}px` : '',\n          top:\n            middlewareData.arrow.y != null ? `${middlewareData.arrow.y}px` : '',\n        });\n      }\n    };\n\n    // the `autoUpdate` function automatically updates the position of the floating element when necessary.\n    // it should only be called when the floating element is mounted on the DOM or visible on the screen.\n    // it returns a \"cleanup\" function that should be invoked when the floating element is removed from the DOM or hidden from the screen.\n    // see: https://floating-ui.com/docs/autoUpdate\n    const cleanupFloatingUI = autoUpdate(\n      _anchorElement,\n      _floatingElement,\n      // eslint-disable-next-line @typescript-eslint/no-misused-promises\n      computeFloatingPosition\n    );\n\n    // this (teardown) function is run when the element is removed from the DOM\n    return (): void => {\n      cleanupFloatingUI();\n    };\n  }\n);\n","export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n  var uaData = navigator.userAgentData;\n\n  if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands.map(function (item) {\n      return item.brand + \"/\" + item.version;\n    }).join(' ');\n  }\n\n  return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n\n  var clientRect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n  }\n\n  var _ref = isElement(element) ? getWindow(element) : window,\n      visualViewport = _ref.visualViewport;\n\n  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n  var width = clientRect.width / scaleX;\n  var height = clientRect.height / scaleY;\n  return {\n    width: width,\n    height: height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x: x,\n    y: y\n  };\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}","export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}","export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = /firefox/i.test(getUAString());\n  var isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        });\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref) {\n        var name = _ref.name,\n            _ref$options = _ref.options,\n            options = _ref$options === void 0 ? {} : _ref$options,\n            effect = _ref.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}","export default function getVariation(placement) {\n  return placement.split('-')[1];\n}","export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n  var x = _ref.x,\n      y = _ref.y;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }, getWindow(popper)) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};","var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}","var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}","export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n  var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    var layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}","export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$strategy = _options.strategy,\n      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}","export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases – research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};","export const ROUND_ARROW =\n  '<svg width=\"16\" height=\"6\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 6s1.796-.013 4.67-3.615C5.851.9 6.93.006 8 0c1.07-.006 2.148.887 3.343 2.385C14.233 6.005 16 6 16 6H0z\"></svg>';\n\nexport const BOX_CLASS = `__NAMESPACE_PREFIX__-box`;\nexport const CONTENT_CLASS = `__NAMESPACE_PREFIX__-content`;\nexport const BACKDROP_CLASS = `__NAMESPACE_PREFIX__-backdrop`;\nexport const ARROW_CLASS = `__NAMESPACE_PREFIX__-arrow`;\nexport const SVG_ARROW_CLASS = `__NAMESPACE_PREFIX__-svg-arrow`;\n\nexport const TOUCH_OPTIONS = {passive: true, capture: true};\n\nexport const TIPPY_DEFAULT_APPEND_TO = () => document.body;\n","import {BasePlacement, Placement} from './types';\n\nexport function hasOwnProperty(\n  obj: Record<string, unknown>,\n  key: string\n): boolean {\n  return {}.hasOwnProperty.call(obj, key);\n}\n\nexport function getValueAtIndexOrReturn<T>(\n  value: T | [T | null, T | null],\n  index: number,\n  defaultValue: T | [T, T]\n): T {\n  if (Array.isArray(value)) {\n    const v = value[index];\n    return v == null\n      ? Array.isArray(defaultValue)\n        ? defaultValue[index]\n        : defaultValue\n      : v;\n  }\n\n  return value;\n}\n\nexport function isType(value: any, type: string): boolean {\n  const str = {}.toString.call(value);\n  return str.indexOf('[object') === 0 && str.indexOf(`${type}]`) > -1;\n}\n\nexport function invokeWithArgsOrReturn(value: any, args: any[]): any {\n  return typeof value === 'function' ? value(...args) : value;\n}\n\nexport function debounce<T>(\n  fn: (arg: T) => void,\n  ms: number\n): (arg: T) => void {\n  // Avoid wrapping in `setTimeout` if ms is 0 anyway\n  if (ms === 0) {\n    return fn;\n  }\n\n  let timeout: any;\n\n  return (arg): void => {\n    clearTimeout(timeout);\n    timeout = setTimeout(() => {\n      fn(arg);\n    }, ms);\n  };\n}\n\nexport function removeProperties<T>(obj: T, keys: string[]): Partial<T> {\n  const clone = {...obj};\n  keys.forEach((key) => {\n    delete (clone as any)[key];\n  });\n  return clone;\n}\n\nexport function splitBySpaces(value: string): string[] {\n  return value.split(/\\s+/).filter(Boolean);\n}\n\nexport function normalizeToArray<T>(value: T | T[]): T[] {\n  return ([] as T[]).concat(value);\n}\n\nexport function pushIfUnique<T>(arr: T[], value: T): void {\n  if (arr.indexOf(value) === -1) {\n    arr.push(value);\n  }\n}\n\nexport function appendPxIfNumber(value: string | number): string {\n  return typeof value === 'number' ? `${value}px` : value;\n}\n\nexport function unique<T>(arr: T[]): T[] {\n  return arr.filter((item, index) => arr.indexOf(item) === index);\n}\n\nexport function getNumber(value: string | number): number {\n  return typeof value === 'number' ? value : parseFloat(value);\n}\n\nexport function getBasePlacement(placement: Placement): BasePlacement {\n  return placement.split('-')[0] as BasePlacement;\n}\n\nexport function arrayFrom(value: ArrayLike<any>): any[] {\n  return [].slice.call(value);\n}\n\nexport function removeUndefinedProps(\n  obj: Record<string, unknown>\n): Partial<Record<string, unknown>> {\n  return Object.keys(obj).reduce((acc, key) => {\n    if (obj[key] !== undefined) {\n      (acc as any)[key] = obj[key];\n    }\n\n    return acc;\n  }, {});\n}\n","import {ReferenceElement, Targets} from './types';\nimport {PopperTreeData} from './types-internal';\nimport {arrayFrom, isType, normalizeToArray, getBasePlacement} from './utils';\n\nexport function div(): HTMLDivElement {\n  return document.createElement('div');\n}\n\nexport function isElement(value: unknown): value is Element | DocumentFragment {\n  return ['Element', 'Fragment'].some((type) => isType(value, type));\n}\n\nexport function isNodeList(value: unknown): value is NodeList {\n  return isType(value, 'NodeList');\n}\n\nexport function isMouseEvent(value: unknown): value is MouseEvent {\n  return isType(value, 'MouseEvent');\n}\n\nexport function isReferenceElement(value: any): value is ReferenceElement {\n  return !!(value && value._tippy && value._tippy.reference === value);\n}\n\nexport function getArrayOfElements(value: Targets): Element[] {\n  if (isElement(value)) {\n    return [value];\n  }\n\n  if (isNodeList(value)) {\n    return arrayFrom(value);\n  }\n\n  if (Array.isArray(value)) {\n    return value;\n  }\n\n  return arrayFrom(document.querySelectorAll(value));\n}\n\nexport function setTransitionDuration(\n  els: (HTMLDivElement | null)[],\n  value: number\n): void {\n  els.forEach((el) => {\n    if (el) {\n      el.style.transitionDuration = `${value}ms`;\n    }\n  });\n}\n\nexport function setVisibilityState(\n  els: (HTMLDivElement | null)[],\n  state: 'visible' | 'hidden'\n): void {\n  els.forEach((el) => {\n    if (el) {\n      el.setAttribute('data-state', state);\n    }\n  });\n}\n\nexport function getOwnerDocument(\n  elementOrElements: Element | Element[]\n): Document {\n  const [element] = normalizeToArray(elementOrElements);\n\n  // Elements created via a <template> have an ownerDocument with no reference to the body\n  return element?.ownerDocument?.body ? element.ownerDocument : document;\n}\n\nexport function isCursorOutsideInteractiveBorder(\n  popperTreeData: PopperTreeData[],\n  event: MouseEvent\n): boolean {\n  const {clientX, clientY} = event;\n\n  return popperTreeData.every(({popperRect, popperState, props}) => {\n    const {interactiveBorder} = props;\n    const basePlacement = getBasePlacement(popperState.placement);\n    const offsetData = popperState.modifiersData.offset;\n\n    if (!offsetData) {\n      return true;\n    }\n\n    const topDistance = basePlacement === 'bottom' ? offsetData.top!.y : 0;\n    const bottomDistance = basePlacement === 'top' ? offsetData.bottom!.y : 0;\n    const leftDistance = basePlacement === 'right' ? offsetData.left!.x : 0;\n    const rightDistance = basePlacement === 'left' ? offsetData.right!.x : 0;\n\n    const exceedsTop =\n      popperRect.top - clientY + topDistance > interactiveBorder;\n    const exceedsBottom =\n      clientY - popperRect.bottom - bottomDistance > interactiveBorder;\n    const exceedsLeft =\n      popperRect.left - clientX + leftDistance > interactiveBorder;\n    const exceedsRight =\n      clientX - popperRect.right - rightDistance > interactiveBorder;\n\n    return exceedsTop || exceedsBottom || exceedsLeft || exceedsRight;\n  });\n}\n\nexport function updateTransitionEndListener(\n  box: HTMLDivElement,\n  action: 'add' | 'remove',\n  listener: (event: TransitionEvent) => void\n): void {\n  const method = `${action}EventListener` as\n    | 'addEventListener'\n    | 'removeEventListener';\n\n  // some browsers apparently support `transition` (unprefixed) but only fire\n  // `webkitTransitionEnd`...\n  ['transitionend', 'webkitTransitionEnd'].forEach((event) => {\n    box[method](event, listener as EventListener);\n  });\n}\n\n/**\n * Compared to xxx.contains, this function works for dom structures with shadow\n * dom\n */\nexport function actualContains(parent: Element, child: Element): boolean {\n  let target = child;\n  while (target) {\n    if (parent.contains(target)) {\n      return true;\n    }\n    target = (target.getRootNode?.() as any)?.host;\n  }\n  return false;\n}\n","import {TOUCH_OPTIONS} from './constants';\nimport {isReferenceElement} from './dom-utils';\n\nexport const currentInput = {isTouch: false};\nlet lastMouseMoveTime = 0;\n\n/**\n * When a `touchstart` event is fired, it's assumed the user is using touch\n * input. We'll bind a `mousemove` event listener to listen for mouse input in\n * the future. This way, the `isTouch` property is fully dynamic and will handle\n * hybrid devices that use a mix of touch + mouse input.\n */\nexport function onDocumentTouchStart(): void {\n  if (currentInput.isTouch) {\n    return;\n  }\n\n  currentInput.isTouch = true;\n\n  if (window.performance) {\n    document.addEventListener('mousemove', onDocumentMouseMove);\n  }\n}\n\n/**\n * When two `mousemove` event are fired consecutively within 20ms, it's assumed\n * the user is using mouse input again. `mousemove` can fire on touch devices as\n * well, but very rarely that quickly.\n */\nexport function onDocumentMouseMove(): void {\n  const now = performance.now();\n\n  if (now - lastMouseMoveTime < 20) {\n    currentInput.isTouch = false;\n\n    document.removeEventListener('mousemove', onDocumentMouseMove);\n  }\n\n  lastMouseMoveTime = now;\n}\n\n/**\n * When an element is in focus and has a tippy, leaving the tab/window and\n * returning causes it to show again. For mouse users this is unexpected, but\n * for keyboard use it makes sense.\n * TODO: find a better technique to solve this problem\n */\nexport function onWindowBlur(): void {\n  const activeElement = document.activeElement as HTMLElement | null;\n\n  if (isReferenceElement(activeElement)) {\n    const instance = activeElement._tippy!;\n\n    if (activeElement.blur && !instance.state.isVisible) {\n      activeElement.blur();\n    }\n  }\n}\n\nexport default function bindGlobalEventListeners(): void {\n  document.addEventListener('touchstart', onDocumentTouchStart, TOUCH_OPTIONS);\n  window.addEventListener('blur', onWindowBlur);\n}\n","export const isBrowser =\n  typeof window !== 'undefined' && typeof document !== 'undefined';\n\nexport const isIE11 = isBrowser\n  ? // @ts-ignore\n    !!window.msCrypto\n  : false;\n","import {DefaultProps, Plugin, Props, ReferenceElement, Tippy} from './types';\nimport {\n  hasOwnProperty,\n  removeProperties,\n  invokeWithArgsOrReturn,\n} from './utils';\nimport {warnWhen} from './validation';\nimport {TIPPY_DEFAULT_APPEND_TO} from './constants';\n\nconst pluginProps = {\n  animateFill: false,\n  followCursor: false,\n  inlinePositioning: false,\n  sticky: false,\n};\n\nconst renderProps = {\n  allowHTML: false,\n  animation: 'fade',\n  arrow: true,\n  content: '',\n  inertia: false,\n  maxWidth: 350,\n  role: 'tooltip',\n  theme: '',\n  zIndex: 9999,\n};\n\nexport const defaultProps: DefaultProps = {\n  appendTo: TIPPY_DEFAULT_APPEND_TO,\n  aria: {\n    content: 'auto',\n    expanded: 'auto',\n  },\n  delay: 0,\n  duration: [300, 250],\n  getReferenceClientRect: null,\n  hideOnClick: true,\n  ignoreAttributes: false,\n  interactive: false,\n  interactiveBorder: 2,\n  interactiveDebounce: 0,\n  moveTransition: '',\n  offset: [0, 10],\n  onAfterUpdate() {},\n  onBeforeUpdate() {},\n  onCreate() {},\n  onDestroy() {},\n  onHidden() {},\n  onHide() {},\n  onMount() {},\n  onShow() {},\n  onShown() {},\n  onTrigger() {},\n  onUntrigger() {},\n  onClickOutside() {},\n  placement: 'top',\n  plugins: [],\n  popperOptions: {},\n  render: null,\n  showOnCreate: false,\n  touch: true,\n  trigger: 'mouseenter focus',\n  triggerTarget: null,\n  ...pluginProps,\n  ...renderProps,\n};\n\nconst defaultKeys = Object.keys(defaultProps);\n\nexport const setDefaultProps: Tippy['setDefaultProps'] = (partialProps) => {\n  /* istanbul ignore else */\n  if (__DEV__) {\n    validateProps(partialProps, []);\n  }\n\n  const keys = Object.keys(partialProps) as Array<keyof DefaultProps>;\n  keys.forEach((key) => {\n    (defaultProps as any)[key] = partialProps[key];\n  });\n};\n\nexport function getExtendedPassedProps(\n  passedProps: Partial<Props> & Record<string, unknown>\n): Partial<Props> {\n  const plugins = passedProps.plugins || [];\n  const pluginProps = plugins.reduce<Record<string, unknown>>((acc, plugin) => {\n    const {name, defaultValue} = plugin;\n\n    if (name) {\n      acc[name] =\n        passedProps[name] !== undefined\n          ? passedProps[name]\n          : (defaultProps as any)[name] ?? defaultValue;\n    }\n\n    return acc;\n  }, {});\n\n  return {\n    ...passedProps,\n    ...pluginProps,\n  };\n}\n\nexport function getDataAttributeProps(\n  reference: ReferenceElement,\n  plugins: Plugin[]\n): Record<string, unknown> {\n  const propKeys = plugins\n    ? Object.keys(getExtendedPassedProps({...defaultProps, plugins}))\n    : defaultKeys;\n\n  const props = propKeys.reduce(\n    (acc: Partial<Props> & Record<string, unknown>, key) => {\n      const valueAsString = (\n        reference.getAttribute(`data-tippy-${key}`) || ''\n      ).trim();\n\n      if (!valueAsString) {\n        return acc;\n      }\n\n      if (key === 'content') {\n        acc[key] = valueAsString;\n      } else {\n        try {\n          acc[key] = JSON.parse(valueAsString);\n        } catch (e) {\n          acc[key] = valueAsString;\n        }\n      }\n\n      return acc;\n    },\n    {}\n  );\n\n  return props;\n}\n\nexport function evaluateProps(\n  reference: ReferenceElement,\n  props: Props\n): Props {\n  const out = {\n    ...props,\n    content: invokeWithArgsOrReturn(props.content, [reference]),\n    ...(props.ignoreAttributes\n      ? {}\n      : getDataAttributeProps(reference, props.plugins)),\n  };\n\n  out.aria = {\n    ...defaultProps.aria,\n    ...out.aria,\n  };\n\n  out.aria = {\n    expanded:\n      out.aria.expanded === 'auto' ? props.interactive : out.aria.expanded,\n    content:\n      out.aria.content === 'auto'\n        ? props.interactive\n          ? null\n          : 'describedby'\n        : out.aria.content,\n  };\n\n  return out;\n}\n\nexport function validateProps(\n  partialProps: Partial<Props> = {},\n  plugins: Plugin[] = []\n): void {\n  const keys = Object.keys(partialProps) as Array<keyof Props>;\n  keys.forEach((prop) => {\n    const nonPluginProps = removeProperties(\n      defaultProps,\n      Object.keys(pluginProps)\n    );\n\n    let didPassUnknownProp = !hasOwnProperty(nonPluginProps, prop);\n\n    // Check if the prop exists in `plugins`\n    if (didPassUnknownProp) {\n      didPassUnknownProp =\n        plugins.filter((plugin) => plugin.name === prop).length === 0;\n    }\n\n    warnWhen(\n      didPassUnknownProp,\n      [\n        `\\`${prop}\\``,\n        \"is not a valid prop. You may have spelled it incorrectly, or if it's\",\n        'a plugin, forgot to pass it in an array as props.plugins.',\n        '\\n\\n',\n        'All props: https://atomiks.github.io/tippyjs/v6/all-props/\\n',\n        'Plugins: https://atomiks.github.io/tippyjs/v6/plugins/',\n      ].join(' ')\n    );\n  });\n}\n","import {\n  ARROW_CLASS,\n  BACKDROP_CLASS,\n  BOX_CLASS,\n  CONTENT_CLASS,\n  SVG_ARROW_CLASS,\n} from './constants';\nimport {div, isElement} from './dom-utils';\nimport {Instance, PopperElement, Props} from './types';\nimport {PopperChildren} from './types-internal';\nimport {arrayFrom} from './utils';\n\n// Firefox extensions don't allow .innerHTML = \"...\" property. This tricks it.\nconst innerHTML = (): 'innerHTML' => 'innerHTML';\n\nfunction dangerouslySetInnerHTML(element: Element, html: string): void {\n  element[innerHTML()] = html;\n}\n\nfunction createArrowElement(value: Props['arrow']): HTMLDivElement {\n  const arrow = div();\n\n  if (value === true) {\n    arrow.className = ARROW_CLASS;\n  } else {\n    arrow.className = SVG_ARROW_CLASS;\n\n    if (isElement(value)) {\n      arrow.appendChild(value);\n    } else {\n      dangerouslySetInnerHTML(arrow, value as string);\n    }\n  }\n\n  return arrow;\n}\n\nexport function setContent(content: HTMLDivElement, props: Props): void {\n  if (isElement(props.content)) {\n    dangerouslySetInnerHTML(content, '');\n    content.appendChild(props.content);\n  } else if (typeof props.content !== 'function') {\n    if (props.allowHTML) {\n      dangerouslySetInnerHTML(content, props.content);\n    } else {\n      content.textContent = props.content;\n    }\n  }\n}\n\nexport function getChildren(popper: PopperElement): PopperChildren {\n  const box = popper.firstElementChild as HTMLDivElement;\n  const boxChildren = arrayFrom(box.children);\n\n  return {\n    box,\n    content: boxChildren.find((node) => node.classList.contains(CONTENT_CLASS)),\n    arrow: boxChildren.find(\n      (node) =>\n        node.classList.contains(ARROW_CLASS) ||\n        node.classList.contains(SVG_ARROW_CLASS)\n    ),\n    backdrop: boxChildren.find((node) =>\n      node.classList.contains(BACKDROP_CLASS)\n    ),\n  };\n}\n\nexport function render(\n  instance: Instance\n): {\n  popper: PopperElement;\n  onUpdate?: (prevProps: Props, nextProps: Props) => void;\n} {\n  const popper = div();\n\n  const box = div();\n  box.className = BOX_CLASS;\n  box.setAttribute('data-state', 'hidden');\n  box.setAttribute('tabindex', '-1');\n\n  const content = div();\n  content.className = CONTENT_CLASS;\n  content.setAttribute('data-state', 'hidden');\n\n  setContent(content, instance.props);\n\n  popper.appendChild(box);\n  box.appendChild(content);\n\n  onUpdate(instance.props, instance.props);\n\n  function onUpdate(prevProps: Props, nextProps: Props): void {\n    const {box, content, arrow} = getChildren(popper);\n\n    if (nextProps.theme) {\n      box.setAttribute('data-theme', nextProps.theme);\n    } else {\n      box.removeAttribute('data-theme');\n    }\n\n    if (typeof nextProps.animation === 'string') {\n      box.setAttribute('data-animation', nextProps.animation);\n    } else {\n      box.removeAttribute('data-animation');\n    }\n\n    if (nextProps.inertia) {\n      box.setAttribute('data-inertia', '');\n    } else {\n      box.removeAttribute('data-inertia');\n    }\n\n    box.style.maxWidth =\n      typeof nextProps.maxWidth === 'number'\n        ? `${nextProps.maxWidth}px`\n        : nextProps.maxWidth;\n\n    if (nextProps.role) {\n      box.setAttribute('role', nextProps.role);\n    } else {\n      box.removeAttribute('role');\n    }\n\n    if (\n      prevProps.content !== nextProps.content ||\n      prevProps.allowHTML !== nextProps.allowHTML\n    ) {\n      setContent(content, instance.props);\n    }\n\n    if (nextProps.arrow) {\n      if (!arrow) {\n        box.appendChild(createArrowElement(nextProps.arrow));\n      } else if (prevProps.arrow !== nextProps.arrow) {\n        box.removeChild(arrow);\n        box.appendChild(createArrowElement(nextProps.arrow));\n      }\n    } else if (arrow) {\n      box.removeChild(arrow!);\n    }\n  }\n\n  return {\n    popper,\n    onUpdate,\n  };\n}\n\n// Runtime check to identify if the render function is the default one; this\n// way we can apply default CSS transitions logic and it can be tree-shaken away\nrender.$$tippy = true;\n","import {createPopper, StrictModifiers, Modifier} from '@popperjs/core';\nimport {currentInput} from './bindGlobalEventListeners';\nimport {isIE11} from './browser';\nimport {TIPPY_DEFAULT_APPEND_TO, TOUCH_OPTIONS} from './constants';\nimport {\n  actualContains,\n  div,\n  getOwnerDocument,\n  isCursorOutsideInteractiveBorder,\n  isMouseEvent,\n  setTransitionDuration,\n  setVisibilityState,\n  updateTransitionEndListener,\n} from './dom-utils';\nimport {defaultProps, evaluateProps, getExtendedPassedProps} from './props';\nimport {getChildren} from './template';\nimport {\n  Content,\n  Instance,\n  LifecycleHooks,\n  PopperElement,\n  Props,\n  ReferenceElement,\n} from './types';\nimport {ListenerObject, PopperTreeData, PopperChildren} from './types-internal';\nimport {\n  arrayFrom,\n  debounce,\n  getValueAtIndexOrReturn,\n  invokeWithArgsOrReturn,\n  normalizeToArray,\n  pushIfUnique,\n  splitBySpaces,\n  unique,\n  removeUndefinedProps,\n} from './utils';\nimport {createMemoryLeakWarning, errorWhen, warnWhen} from './validation';\n\nlet idCounter = 1;\nlet mouseMoveListeners: ((event: MouseEvent) => void)[] = [];\n\n// Used by `hideAll()`\nexport let mountedInstances: Instance[] = [];\n\nexport default function createTippy(\n  reference: ReferenceElement,\n  passedProps: Partial<Props>\n): Instance {\n  const props = evaluateProps(reference, {\n    ...defaultProps,\n    ...getExtendedPassedProps(removeUndefinedProps(passedProps)),\n  });\n\n  // ===========================================================================\n  // 🔒 Private members\n  // ===========================================================================\n  let showTimeout: any;\n  let hideTimeout: any;\n  let scheduleHideAnimationFrame: number;\n  let isVisibleFromClick = false;\n  let didHideDueToDocumentMouseDown = false;\n  let didTouchMove = false;\n  let ignoreOnFirstUpdate = false;\n  let lastTriggerEvent: Event | undefined;\n  let currentTransitionEndListener: (event: TransitionEvent) => void;\n  let onFirstUpdate: () => void;\n  let listeners: ListenerObject[] = [];\n  let debouncedOnMouseMove = debounce(onMouseMove, props.interactiveDebounce);\n  let currentTarget: Element;\n\n  // ===========================================================================\n  // 🔑 Public members\n  // ===========================================================================\n  const id = idCounter++;\n  const popperInstance = null;\n  const plugins = unique(props.plugins);\n\n  const state = {\n    // Is the instance currently enabled?\n    isEnabled: true,\n    // Is the tippy currently showing and not transitioning out?\n    isVisible: false,\n    // Has the instance been destroyed?\n    isDestroyed: false,\n    // Is the tippy currently mounted to the DOM?\n    isMounted: false,\n    // Has the tippy finished transitioning in?\n    isShown: false,\n  };\n\n  const instance: Instance = {\n    // properties\n    id,\n    reference,\n    popper: div(),\n    popperInstance,\n    props,\n    state,\n    plugins,\n    // methods\n    clearDelayTimeouts,\n    setProps,\n    setContent,\n    show,\n    hide,\n    hideWithInteractivity,\n    enable,\n    disable,\n    unmount,\n    destroy,\n  };\n\n  // TODO: Investigate why this early return causes a TDZ error in the tests —\n  // it doesn't seem to happen in the browser\n  /* istanbul ignore if */\n  if (!props.render) {\n    if (__DEV__) {\n      errorWhen(true, 'render() function has not been supplied.');\n    }\n\n    return instance;\n  }\n\n  // ===========================================================================\n  // Initial mutations\n  // ===========================================================================\n  const {popper, onUpdate} = props.render(instance);\n\n  popper.setAttribute('data-__NAMESPACE_PREFIX__-root', '');\n  popper.id = `__NAMESPACE_PREFIX__-${instance.id}`;\n\n  instance.popper = popper;\n  reference._tippy = instance;\n  popper._tippy = instance;\n\n  const pluginsHooks = plugins.map((plugin) => plugin.fn(instance));\n  const hasAriaExpanded = reference.hasAttribute('aria-expanded');\n\n  addListeners();\n  handleAriaExpandedAttribute();\n  handleStyles();\n\n  invokeHook('onCreate', [instance]);\n\n  if (props.showOnCreate) {\n    scheduleShow();\n  }\n\n  // Prevent a tippy with a delay from hiding if the cursor left then returned\n  // before it started hiding\n  popper.addEventListener('mouseenter', () => {\n    if (instance.props.interactive && instance.state.isVisible) {\n      instance.clearDelayTimeouts();\n    }\n  });\n\n  popper.addEventListener('mouseleave', () => {\n    if (\n      instance.props.interactive &&\n      instance.props.trigger.indexOf('mouseenter') >= 0\n    ) {\n      getDocument().addEventListener('mousemove', debouncedOnMouseMove);\n    }\n  });\n\n  return instance;\n\n  // ===========================================================================\n  // 🔒 Private methods\n  // ===========================================================================\n  function getNormalizedTouchSettings(): [string | boolean, number] {\n    const {touch} = instance.props;\n    return Array.isArray(touch) ? touch : [touch, 0];\n  }\n\n  function getIsCustomTouchBehavior(): boolean {\n    return getNormalizedTouchSettings()[0] === 'hold';\n  }\n\n  function getIsDefaultRenderFn(): boolean {\n    // @ts-ignore\n    return !!instance.props.render?.$$tippy;\n  }\n\n  function getCurrentTarget(): Element {\n    return currentTarget || reference;\n  }\n\n  function getDocument(): Document {\n    const parent = getCurrentTarget().parentNode as Element;\n    return parent ? getOwnerDocument(parent) : document;\n  }\n\n  function getDefaultTemplateChildren(): PopperChildren {\n    return getChildren(popper);\n  }\n\n  function getDelay(isShow: boolean): number {\n    // For touch or keyboard input, force `0` delay for UX reasons\n    // Also if the instance is mounted but not visible (transitioning out),\n    // ignore delay\n    if (\n      (instance.state.isMounted && !instance.state.isVisible) ||\n      currentInput.isTouch ||\n      (lastTriggerEvent && lastTriggerEvent.type === 'focus')\n    ) {\n      return 0;\n    }\n\n    return getValueAtIndexOrReturn(\n      instance.props.delay,\n      isShow ? 0 : 1,\n      defaultProps.delay\n    );\n  }\n\n  function handleStyles(fromHide = false): void {\n    popper.style.pointerEvents =\n      instance.props.interactive && !fromHide ? '' : 'none';\n    popper.style.zIndex = `${instance.props.zIndex}`;\n  }\n\n  function invokeHook(\n    hook: keyof LifecycleHooks,\n    args: [Instance, any?],\n    shouldInvokePropsHook = true\n  ): void {\n    pluginsHooks.forEach((pluginHooks) => {\n      if (pluginHooks[hook]) {\n        pluginHooks[hook]!(...args);\n      }\n    });\n\n    if (shouldInvokePropsHook) {\n      instance.props[hook](...args);\n    }\n  }\n\n  function handleAriaContentAttribute(): void {\n    const {aria} = instance.props;\n\n    if (!aria.content) {\n      return;\n    }\n\n    const attr = `aria-${aria.content}`;\n    const id = popper.id;\n    const nodes = normalizeToArray(instance.props.triggerTarget || reference);\n\n    nodes.forEach((node) => {\n      const currentValue = node.getAttribute(attr);\n\n      if (instance.state.isVisible) {\n        node.setAttribute(attr, currentValue ? `${currentValue} ${id}` : id);\n      } else {\n        const nextValue = currentValue && currentValue.replace(id, '').trim();\n\n        if (nextValue) {\n          node.setAttribute(attr, nextValue);\n        } else {\n          node.removeAttribute(attr);\n        }\n      }\n    });\n  }\n\n  function handleAriaExpandedAttribute(): void {\n    if (hasAriaExpanded || !instance.props.aria.expanded) {\n      return;\n    }\n\n    const nodes = normalizeToArray(instance.props.triggerTarget || reference);\n\n    nodes.forEach((node) => {\n      if (instance.props.interactive) {\n        node.setAttribute(\n          'aria-expanded',\n          instance.state.isVisible && node === getCurrentTarget()\n            ? 'true'\n            : 'false'\n        );\n      } else {\n        node.removeAttribute('aria-expanded');\n      }\n    });\n  }\n\n  function cleanupInteractiveMouseListeners(): void {\n    getDocument().removeEventListener('mousemove', debouncedOnMouseMove);\n    mouseMoveListeners = mouseMoveListeners.filter(\n      (listener) => listener !== debouncedOnMouseMove\n    );\n  }\n\n  function onDocumentPress(event: MouseEvent | TouchEvent): void {\n    // Moved finger to scroll instead of an intentional tap outside\n    if (currentInput.isTouch) {\n      if (didTouchMove || event.type === 'mousedown') {\n        return;\n      }\n    }\n\n    const actualTarget =\n      (event.composedPath && event.composedPath()[0]) || event.target;\n\n    // Clicked on interactive popper\n    if (\n      instance.props.interactive &&\n      actualContains(popper, actualTarget as Element)\n    ) {\n      return;\n    }\n\n    // Clicked on the event listeners target\n    if (\n      normalizeToArray(instance.props.triggerTarget || reference).some((el) =>\n        actualContains(el, actualTarget as Element)\n      )\n    ) {\n      if (currentInput.isTouch) {\n        return;\n      }\n\n      if (\n        instance.state.isVisible &&\n        instance.props.trigger.indexOf('click') >= 0\n      ) {\n        return;\n      }\n    } else {\n      invokeHook('onClickOutside', [instance, event]);\n    }\n\n    if (instance.props.hideOnClick === true) {\n      instance.clearDelayTimeouts();\n      instance.hide();\n\n      // `mousedown` event is fired right before `focus` if pressing the\n      // currentTarget. This lets a tippy with `focus` trigger know that it\n      // should not show\n      didHideDueToDocumentMouseDown = true;\n      setTimeout(() => {\n        didHideDueToDocumentMouseDown = false;\n      });\n\n      // The listener gets added in `scheduleShow()`, but this may be hiding it\n      // before it shows, and hide()'s early bail-out behavior can prevent it\n      // from being cleaned up\n      if (!instance.state.isMounted) {\n        removeDocumentPress();\n      }\n    }\n  }\n\n  function onTouchMove(): void {\n    didTouchMove = true;\n  }\n\n  function onTouchStart(): void {\n    didTouchMove = false;\n  }\n\n  function addDocumentPress(): void {\n    const doc = getDocument();\n    doc.addEventListener('mousedown', onDocumentPress, true);\n    doc.addEventListener('touchend', onDocumentPress, TOUCH_OPTIONS);\n    doc.addEventListener('touchstart', onTouchStart, TOUCH_OPTIONS);\n    doc.addEventListener('touchmove', onTouchMove, TOUCH_OPTIONS);\n  }\n\n  function removeDocumentPress(): void {\n    const doc = getDocument();\n    doc.removeEventListener('mousedown', onDocumentPress, true);\n    doc.removeEventListener('touchend', onDocumentPress, TOUCH_OPTIONS);\n    doc.removeEventListener('touchstart', onTouchStart, TOUCH_OPTIONS);\n    doc.removeEventListener('touchmove', onTouchMove, TOUCH_OPTIONS);\n  }\n\n  function onTransitionedOut(duration: number, callback: () => void): void {\n    onTransitionEnd(duration, () => {\n      if (\n        !instance.state.isVisible &&\n        popper.parentNode &&\n        popper.parentNode.contains(popper)\n      ) {\n        callback();\n      }\n    });\n  }\n\n  function onTransitionedIn(duration: number, callback: () => void): void {\n    onTransitionEnd(duration, callback);\n  }\n\n  function onTransitionEnd(duration: number, callback: () => void): void {\n    const box = getDefaultTemplateChildren().box;\n\n    function listener(event: TransitionEvent): void {\n      if (event.target === box) {\n        updateTransitionEndListener(box, 'remove', listener);\n        callback();\n      }\n    }\n\n    // Make callback synchronous if duration is 0\n    // `transitionend` won't fire otherwise\n    if (duration === 0) {\n      return callback();\n    }\n\n    updateTransitionEndListener(box, 'remove', currentTransitionEndListener);\n    updateTransitionEndListener(box, 'add', listener);\n\n    currentTransitionEndListener = listener;\n  }\n\n  function on(\n    eventType: string,\n    handler: EventListener,\n    options: boolean | Record<string, unknown> = false\n  ): void {\n    const nodes = normalizeToArray(instance.props.triggerTarget || reference);\n    nodes.forEach((node) => {\n      node.addEventListener(eventType, handler, options);\n      listeners.push({node, eventType, handler, options});\n    });\n  }\n\n  function addListeners(): void {\n    if (getIsCustomTouchBehavior()) {\n      on('touchstart', onTrigger, {passive: true});\n      on('touchend', onMouseLeave as EventListener, {passive: true});\n    }\n\n    splitBySpaces(instance.props.trigger).forEach((eventType) => {\n      if (eventType === 'manual') {\n        return;\n      }\n\n      on(eventType, onTrigger);\n\n      switch (eventType) {\n        case 'mouseenter':\n          on('mouseleave', onMouseLeave as EventListener);\n          break;\n        case 'focus':\n          on(isIE11 ? 'focusout' : 'blur', onBlurOrFocusOut as EventListener);\n          break;\n        case 'focusin':\n          on('focusout', onBlurOrFocusOut as EventListener);\n          break;\n      }\n    });\n  }\n\n  function removeListeners(): void {\n    listeners.forEach(({node, eventType, handler, options}: ListenerObject) => {\n      node.removeEventListener(eventType, handler, options);\n    });\n    listeners = [];\n  }\n\n  function onTrigger(event: Event): void {\n    let shouldScheduleClickHide = false;\n\n    if (\n      !instance.state.isEnabled ||\n      isEventListenerStopped(event) ||\n      didHideDueToDocumentMouseDown\n    ) {\n      return;\n    }\n\n    const wasFocused = lastTriggerEvent?.type === 'focus';\n\n    lastTriggerEvent = event;\n    currentTarget = event.currentTarget as Element;\n\n    handleAriaExpandedAttribute();\n\n    if (!instance.state.isVisible && isMouseEvent(event)) {\n      // If scrolling, `mouseenter` events can be fired if the cursor lands\n      // over a new target, but `mousemove` events don't get fired. This\n      // causes interactive tooltips to get stuck open until the cursor is\n      // moved\n      mouseMoveListeners.forEach((listener) => listener(event));\n    }\n\n    // Toggle show/hide when clicking click-triggered tooltips\n    if (\n      event.type === 'click' &&\n      (instance.props.trigger.indexOf('mouseenter') < 0 ||\n        isVisibleFromClick) &&\n      instance.props.hideOnClick !== false &&\n      instance.state.isVisible\n    ) {\n      shouldScheduleClickHide = true;\n    } else {\n      scheduleShow(event);\n    }\n\n    if (event.type === 'click') {\n      isVisibleFromClick = !shouldScheduleClickHide;\n    }\n\n    if (shouldScheduleClickHide && !wasFocused) {\n      scheduleHide(event);\n    }\n  }\n\n  function onMouseMove(event: MouseEvent): void {\n    const target = event.target as Node;\n    const isCursorOverReferenceOrPopper =\n      getCurrentTarget().contains(target) || popper.contains(target);\n\n    if (event.type === 'mousemove' && isCursorOverReferenceOrPopper) {\n      return;\n    }\n\n    const popperTreeData = getNestedPopperTree()\n      .concat(popper)\n      .map((popper) => {\n        const instance = popper._tippy!;\n        const state = instance.popperInstance?.state;\n\n        if (state) {\n          return {\n            popperRect: popper.getBoundingClientRect(),\n            popperState: state,\n            props,\n          };\n        }\n\n        return null;\n      })\n      .filter(Boolean) as PopperTreeData[];\n\n    if (isCursorOutsideInteractiveBorder(popperTreeData, event)) {\n      cleanupInteractiveMouseListeners();\n      scheduleHide(event);\n    }\n  }\n\n  function onMouseLeave(event: MouseEvent): void {\n    const shouldBail =\n      isEventListenerStopped(event) ||\n      (instance.props.trigger.indexOf('click') >= 0 && isVisibleFromClick);\n\n    if (shouldBail) {\n      return;\n    }\n\n    if (instance.props.interactive) {\n      instance.hideWithInteractivity(event);\n      return;\n    }\n\n    scheduleHide(event);\n  }\n\n  function onBlurOrFocusOut(event: FocusEvent): void {\n    if (\n      instance.props.trigger.indexOf('focusin') < 0 &&\n      event.target !== getCurrentTarget()\n    ) {\n      return;\n    }\n\n    // If focus was moved to within the popper\n    if (\n      instance.props.interactive &&\n      event.relatedTarget &&\n      popper.contains(event.relatedTarget as Element)\n    ) {\n      return;\n    }\n\n    scheduleHide(event);\n  }\n\n  function isEventListenerStopped(event: Event): boolean {\n    return currentInput.isTouch\n      ? getIsCustomTouchBehavior() !== event.type.indexOf('touch') >= 0\n      : false;\n  }\n\n  function createPopperInstance(): void {\n    destroyPopperInstance();\n\n    const {\n      popperOptions,\n      placement,\n      offset,\n      getReferenceClientRect,\n      moveTransition,\n    } = instance.props;\n\n    const arrow = getIsDefaultRenderFn() ? getChildren(popper).arrow : null;\n\n    const computedReference = getReferenceClientRect\n      ? {\n          getBoundingClientRect: getReferenceClientRect,\n          contextElement:\n            getReferenceClientRect.contextElement || getCurrentTarget(),\n        }\n      : reference;\n\n    const tippyModifier: Modifier<'$$tippy', Record<string, unknown>> = {\n      name: '$$tippy',\n      enabled: true,\n      phase: 'beforeWrite',\n      requires: ['computeStyles'],\n      fn({state}) {\n        if (getIsDefaultRenderFn()) {\n          const {box} = getDefaultTemplateChildren();\n\n          ['placement', 'reference-hidden', 'escaped'].forEach((attr) => {\n            if (attr === 'placement') {\n              box.setAttribute('data-placement', state.placement);\n            } else {\n              if (state.attributes.popper[`data-popper-${attr}`]) {\n                box.setAttribute(`data-${attr}`, '');\n              } else {\n                box.removeAttribute(`data-${attr}`);\n              }\n            }\n          });\n\n          state.attributes.popper = {};\n        }\n      },\n    };\n\n    type TippyModifier = Modifier<'$$tippy', Record<string, unknown>>;\n    type ExtendedModifiers = StrictModifiers | Partial<TippyModifier>;\n\n    const modifiers: Array<ExtendedModifiers> = [\n      {\n        name: 'offset',\n        options: {\n          offset,\n        },\n      },\n      {\n        name: 'preventOverflow',\n        options: {\n          padding: {\n            top: 2,\n            bottom: 2,\n            left: 5,\n            right: 5,\n          },\n        },\n      },\n      {\n        name: 'flip',\n        options: {\n          padding: 5,\n        },\n      },\n      {\n        name: 'computeStyles',\n        options: {\n          adaptive: !moveTransition,\n        },\n      },\n      tippyModifier,\n    ];\n\n    if (getIsDefaultRenderFn() && arrow) {\n      modifiers.push({\n        name: 'arrow',\n        options: {\n          element: arrow,\n          padding: 3,\n        },\n      });\n    }\n\n    modifiers.push(...(popperOptions?.modifiers || []));\n\n    instance.popperInstance = createPopper<ExtendedModifiers>(\n      computedReference,\n      popper,\n      {\n        ...popperOptions,\n        placement,\n        onFirstUpdate,\n        modifiers,\n      }\n    );\n  }\n\n  function destroyPopperInstance(): void {\n    if (instance.popperInstance) {\n      instance.popperInstance.destroy();\n      instance.popperInstance = null;\n    }\n  }\n\n  function mount(): void {\n    const {appendTo} = instance.props;\n\n    let parentNode: any;\n\n    // By default, we'll append the popper to the triggerTargets's parentNode so\n    // it's directly after the reference element so the elements inside the\n    // tippy can be tabbed to\n    // If there are clipping issues, the user can specify a different appendTo\n    // and ensure focus management is handled correctly manually\n    const node = getCurrentTarget();\n\n    if (\n      (instance.props.interactive && appendTo === TIPPY_DEFAULT_APPEND_TO) ||\n      appendTo === 'parent'\n    ) {\n      parentNode = node.parentNode;\n    } else {\n      parentNode = invokeWithArgsOrReturn(appendTo, [node]);\n    }\n\n    // The popper element needs to exist on the DOM before its position can be\n    // updated as Popper needs to read its dimensions\n    if (!parentNode.contains(popper)) {\n      parentNode.appendChild(popper);\n    }\n\n    instance.state.isMounted = true;\n\n    createPopperInstance();\n\n    /* istanbul ignore else */\n    if (__DEV__) {\n      // Accessibility check\n      warnWhen(\n        instance.props.interactive &&\n          appendTo === defaultProps.appendTo &&\n          node.nextElementSibling !== popper,\n        [\n          'Interactive tippy element may not be accessible via keyboard',\n          'navigation because it is not directly after the reference element',\n          'in the DOM source order.',\n          '\\n\\n',\n          'Using a wrapper <div> or <span> tag around the reference element',\n          'solves this by creating a new parentNode context.',\n          '\\n\\n',\n          'Specifying `appendTo: document.body` silences this warning, but it',\n          'assumes you are using a focus management solution to handle',\n          'keyboard navigation.',\n          '\\n\\n',\n          'See: https://atomiks.github.io/tippyjs/v6/accessibility/#interactivity',\n        ].join(' ')\n      );\n    }\n  }\n\n  function getNestedPopperTree(): PopperElement[] {\n    return arrayFrom(\n      popper.querySelectorAll('[data-__NAMESPACE_PREFIX__-root]')\n    );\n  }\n\n  function scheduleShow(event?: Event): void {\n    instance.clearDelayTimeouts();\n\n    if (event) {\n      invokeHook('onTrigger', [instance, event]);\n    }\n\n    addDocumentPress();\n\n    let delay = getDelay(true);\n    const [touchValue, touchDelay] = getNormalizedTouchSettings();\n\n    if (currentInput.isTouch && touchValue === 'hold' && touchDelay) {\n      delay = touchDelay;\n    }\n\n    if (delay) {\n      showTimeout = setTimeout(() => {\n        instance.show();\n      }, delay);\n    } else {\n      instance.show();\n    }\n  }\n\n  function scheduleHide(event: Event): void {\n    instance.clearDelayTimeouts();\n\n    invokeHook('onUntrigger', [instance, event]);\n\n    if (!instance.state.isVisible) {\n      removeDocumentPress();\n\n      return;\n    }\n\n    // For interactive tippies, scheduleHide is added to a document.body handler\n    // from onMouseLeave so must intercept scheduled hides from mousemove/leave\n    // events when trigger contains mouseenter and click, and the tip is\n    // currently shown as a result of a click.\n    if (\n      instance.props.trigger.indexOf('mouseenter') >= 0 &&\n      instance.props.trigger.indexOf('click') >= 0 &&\n      ['mouseleave', 'mousemove'].indexOf(event.type) >= 0 &&\n      isVisibleFromClick\n    ) {\n      return;\n    }\n\n    const delay = getDelay(false);\n\n    if (delay) {\n      hideTimeout = setTimeout(() => {\n        if (instance.state.isVisible) {\n          instance.hide();\n        }\n      }, delay);\n    } else {\n      // Fixes a `transitionend` problem when it fires 1 frame too\n      // late sometimes, we don't want hide() to be called.\n      scheduleHideAnimationFrame = requestAnimationFrame(() => {\n        instance.hide();\n      });\n    }\n  }\n\n  // ===========================================================================\n  // 🔑 Public methods\n  // ===========================================================================\n  function enable(): void {\n    instance.state.isEnabled = true;\n  }\n\n  function disable(): void {\n    // Disabling the instance should also hide it\n    // https://github.com/atomiks/tippy.js-react/issues/106\n    instance.hide();\n    instance.state.isEnabled = false;\n  }\n\n  function clearDelayTimeouts(): void {\n    clearTimeout(showTimeout);\n    clearTimeout(hideTimeout);\n    cancelAnimationFrame(scheduleHideAnimationFrame);\n  }\n\n  function setProps(partialProps: Partial<Props>): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('setProps'));\n    }\n\n    if (instance.state.isDestroyed) {\n      return;\n    }\n\n    invokeHook('onBeforeUpdate', [instance, partialProps]);\n\n    removeListeners();\n\n    const prevProps = instance.props;\n    const nextProps = evaluateProps(reference, {\n      ...prevProps,\n      ...removeUndefinedProps(partialProps),\n      ignoreAttributes: true,\n    });\n\n    instance.props = nextProps;\n\n    addListeners();\n\n    if (prevProps.interactiveDebounce !== nextProps.interactiveDebounce) {\n      cleanupInteractiveMouseListeners();\n      debouncedOnMouseMove = debounce(\n        onMouseMove,\n        nextProps.interactiveDebounce\n      );\n    }\n\n    // Ensure stale aria-expanded attributes are removed\n    if (prevProps.triggerTarget && !nextProps.triggerTarget) {\n      normalizeToArray(prevProps.triggerTarget).forEach((node) => {\n        node.removeAttribute('aria-expanded');\n      });\n    } else if (nextProps.triggerTarget) {\n      reference.removeAttribute('aria-expanded');\n    }\n\n    handleAriaExpandedAttribute();\n    handleStyles();\n\n    if (onUpdate) {\n      onUpdate(prevProps, nextProps);\n    }\n\n    if (instance.popperInstance) {\n      createPopperInstance();\n\n      // Fixes an issue with nested tippies if they are all getting re-rendered,\n      // and the nested ones get re-rendered first.\n      // https://github.com/atomiks/tippyjs-react/issues/177\n      // TODO: find a cleaner / more efficient solution(!)\n      getNestedPopperTree().forEach((nestedPopper) => {\n        // React (and other UI libs likely) requires a rAF wrapper as it flushes\n        // its work in one\n        requestAnimationFrame(nestedPopper._tippy!.popperInstance!.forceUpdate);\n      });\n    }\n\n    invokeHook('onAfterUpdate', [instance, partialProps]);\n  }\n\n  function setContent(content: Content): void {\n    instance.setProps({content});\n  }\n\n  function show(): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('show'));\n    }\n\n    // Early bail-out\n    const isAlreadyVisible = instance.state.isVisible;\n    const isDestroyed = instance.state.isDestroyed;\n    const isDisabled = !instance.state.isEnabled;\n    const isTouchAndTouchDisabled =\n      currentInput.isTouch && !instance.props.touch;\n    const duration = getValueAtIndexOrReturn(\n      instance.props.duration,\n      0,\n      defaultProps.duration\n    );\n\n    if (\n      isAlreadyVisible ||\n      isDestroyed ||\n      isDisabled ||\n      isTouchAndTouchDisabled\n    ) {\n      return;\n    }\n\n    // Normalize `disabled` behavior across browsers.\n    // Firefox allows events on disabled elements, but Chrome doesn't.\n    // Using a wrapper element (i.e. <span>) is recommended.\n    if (getCurrentTarget().hasAttribute('disabled')) {\n      return;\n    }\n\n    invokeHook('onShow', [instance], false);\n    if (instance.props.onShow(instance) === false) {\n      return;\n    }\n\n    instance.state.isVisible = true;\n\n    if (getIsDefaultRenderFn()) {\n      popper.style.visibility = 'visible';\n    }\n\n    handleStyles();\n    addDocumentPress();\n\n    if (!instance.state.isMounted) {\n      popper.style.transition = 'none';\n    }\n\n    // If flipping to the opposite side after hiding at least once, the\n    // animation will use the wrong placement without resetting the duration\n    if (getIsDefaultRenderFn()) {\n      const {box, content} = getDefaultTemplateChildren();\n      setTransitionDuration([box, content], 0);\n    }\n\n    onFirstUpdate = (): void => {\n      if (!instance.state.isVisible || ignoreOnFirstUpdate) {\n        return;\n      }\n\n      ignoreOnFirstUpdate = true;\n\n      // reflow\n      void popper.offsetHeight;\n\n      popper.style.transition = instance.props.moveTransition;\n\n      if (getIsDefaultRenderFn() && instance.props.animation) {\n        const {box, content} = getDefaultTemplateChildren();\n        setTransitionDuration([box, content], duration);\n        setVisibilityState([box, content], 'visible');\n      }\n\n      handleAriaContentAttribute();\n      handleAriaExpandedAttribute();\n\n      pushIfUnique(mountedInstances, instance);\n\n      // certain modifiers (e.g. `maxSize`) require a second update after the\n      // popper has been positioned for the first time\n      instance.popperInstance?.forceUpdate();\n\n      invokeHook('onMount', [instance]);\n\n      if (instance.props.animation && getIsDefaultRenderFn()) {\n        onTransitionedIn(duration, () => {\n          instance.state.isShown = true;\n          invokeHook('onShown', [instance]);\n        });\n      }\n    };\n\n    mount();\n  }\n\n  function hide(): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('hide'));\n    }\n\n    // Early bail-out\n    const isAlreadyHidden = !instance.state.isVisible;\n    const isDestroyed = instance.state.isDestroyed;\n    const isDisabled = !instance.state.isEnabled;\n    const duration = getValueAtIndexOrReturn(\n      instance.props.duration,\n      1,\n      defaultProps.duration\n    );\n\n    if (isAlreadyHidden || isDestroyed || isDisabled) {\n      return;\n    }\n\n    invokeHook('onHide', [instance], false);\n    if (instance.props.onHide(instance) === false) {\n      return;\n    }\n\n    instance.state.isVisible = false;\n    instance.state.isShown = false;\n    ignoreOnFirstUpdate = false;\n    isVisibleFromClick = false;\n\n    if (getIsDefaultRenderFn()) {\n      popper.style.visibility = 'hidden';\n    }\n\n    cleanupInteractiveMouseListeners();\n    removeDocumentPress();\n    handleStyles(true);\n\n    if (getIsDefaultRenderFn()) {\n      const {box, content} = getDefaultTemplateChildren();\n\n      if (instance.props.animation) {\n        setTransitionDuration([box, content], duration);\n        setVisibilityState([box, content], 'hidden');\n      }\n    }\n\n    handleAriaContentAttribute();\n    handleAriaExpandedAttribute();\n\n    if (instance.props.animation) {\n      if (getIsDefaultRenderFn()) {\n        onTransitionedOut(duration, instance.unmount);\n      }\n    } else {\n      instance.unmount();\n    }\n  }\n\n  function hideWithInteractivity(event: MouseEvent): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(\n        instance.state.isDestroyed,\n        createMemoryLeakWarning('hideWithInteractivity')\n      );\n    }\n\n    getDocument().addEventListener('mousemove', debouncedOnMouseMove);\n    pushIfUnique(mouseMoveListeners, debouncedOnMouseMove);\n    debouncedOnMouseMove(event);\n  }\n\n  function unmount(): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('unmount'));\n    }\n\n    if (instance.state.isVisible) {\n      instance.hide();\n    }\n\n    if (!instance.state.isMounted) {\n      return;\n    }\n\n    destroyPopperInstance();\n\n    // If a popper is not interactive, it will be appended outside the popper\n    // tree by default. This seems mainly for interactive tippies, but we should\n    // find a workaround if possible\n    getNestedPopperTree().forEach((nestedPopper) => {\n      nestedPopper._tippy!.unmount();\n    });\n\n    if (popper.parentNode) {\n      popper.parentNode.removeChild(popper);\n    }\n\n    mountedInstances = mountedInstances.filter((i) => i !== instance);\n\n    instance.state.isMounted = false;\n    invokeHook('onHidden', [instance]);\n  }\n\n  function destroy(): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('destroy'));\n    }\n\n    if (instance.state.isDestroyed) {\n      return;\n    }\n\n    instance.clearDelayTimeouts();\n    instance.unmount();\n\n    removeListeners();\n\n    delete reference._tippy;\n\n    instance.state.isDestroyed = true;\n\n    invokeHook('onDestroy', [instance]);\n  }\n}\n","import tippy from '..';\nimport {div} from '../dom-utils';\nimport {\n  CreateSingleton,\n  Plugin,\n  CreateSingletonProps,\n  ReferenceElement,\n  CreateSingletonInstance,\n  Instance,\n  Props,\n} from '../types';\nimport {normalizeToArray, removeProperties} from '../utils';\nimport {errorWhen} from '../validation';\nimport {applyStyles, Modifier} from '@popperjs/core';\n\n// The default `applyStyles` modifier has a cleanup function that gets called\n// every time the popper is destroyed (i.e. a new target), removing the styles\n// and causing transitions to break for singletons when the console is open, but\n// most notably for non-transform styles being used, `gpuAcceleration: false`.\nconst applyStylesModifier: Modifier<'applyStyles', Record<string, unknown>> = {\n  ...applyStyles,\n  effect({state}) {\n    const initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0',\n      },\n      arrow: {\n        position: 'absolute',\n      },\n      reference: {},\n    };\n\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    // intentionally return no cleanup function\n    // return () => { ... }\n  },\n};\n\nconst createSingleton: CreateSingleton = (\n  tippyInstances,\n  optionalProps = {}\n) => {\n  /* istanbul ignore else */\n  if (__DEV__) {\n    errorWhen(\n      !Array.isArray(tippyInstances),\n      [\n        'The first argument passed to createSingleton() must be an array of',\n        'tippy instances. The passed value was',\n        String(tippyInstances),\n      ].join(' ')\n    );\n  }\n\n  let individualInstances = tippyInstances;\n  let references: Array<ReferenceElement> = [];\n  let triggerTargets: Array<Element> = [];\n  let currentTarget: Element | null;\n  let overrides = optionalProps.overrides;\n  let interceptSetPropsCleanups: Array<() => void> = [];\n  let shownOnCreate = false;\n\n  function setTriggerTargets(): void {\n    triggerTargets = individualInstances\n      .map((instance) =>\n        normalizeToArray(instance.props.triggerTarget || instance.reference)\n      )\n      .reduce((acc, item) => acc.concat(item), []);\n  }\n\n  function setReferences(): void {\n    references = individualInstances.map((instance) => instance.reference);\n  }\n\n  function enableInstances(isEnabled: boolean): void {\n    individualInstances.forEach((instance) => {\n      if (isEnabled) {\n        instance.enable();\n      } else {\n        instance.disable();\n      }\n    });\n  }\n\n  function interceptSetProps(singleton: Instance): Array<() => void> {\n    return individualInstances.map((instance) => {\n      const originalSetProps = instance.setProps;\n\n      instance.setProps = (props): void => {\n        originalSetProps(props);\n\n        if (instance.reference === currentTarget) {\n          singleton.setProps(props);\n        }\n      };\n\n      return (): void => {\n        instance.setProps = originalSetProps;\n      };\n    });\n  }\n\n  // have to pass singleton, as it maybe undefined on first call\n  function prepareInstance(\n    singleton: Instance,\n    target: ReferenceElement\n  ): void {\n    const index = triggerTargets.indexOf(target);\n\n    // bail-out\n    if (target === currentTarget) {\n      return;\n    }\n\n    currentTarget = target;\n\n    const overrideProps: Partial<Props> = (overrides || [])\n      .concat('content')\n      .reduce((acc, prop) => {\n        (acc as any)[prop] = individualInstances[index].props[prop];\n        return acc;\n      }, {});\n\n    singleton.setProps({\n      ...overrideProps,\n      getReferenceClientRect:\n        typeof overrideProps.getReferenceClientRect === 'function'\n          ? overrideProps.getReferenceClientRect\n          : (): ClientRect => references[index]?.getBoundingClientRect(),\n    });\n  }\n\n  enableInstances(false);\n  setReferences();\n  setTriggerTargets();\n\n  const plugin: Plugin = {\n    fn() {\n      return {\n        onDestroy(): void {\n          enableInstances(true);\n        },\n        onHidden(): void {\n          currentTarget = null;\n        },\n        onClickOutside(instance): void {\n          if (instance.props.showOnCreate && !shownOnCreate) {\n            shownOnCreate = true;\n            currentTarget = null;\n          }\n        },\n        onShow(instance): void {\n          if (instance.props.showOnCreate && !shownOnCreate) {\n            shownOnCreate = true;\n            prepareInstance(instance, references[0]);\n          }\n        },\n        onTrigger(instance, event): void {\n          prepareInstance(instance, event.currentTarget as Element);\n        },\n      };\n    },\n  };\n\n  const singleton = tippy(div(), {\n    ...removeProperties(optionalProps, ['overrides']),\n    plugins: [plugin, ...(optionalProps.plugins || [])],\n    triggerTarget: triggerTargets,\n    popperOptions: {\n      ...optionalProps.popperOptions,\n      modifiers: [\n        ...(optionalProps.popperOptions?.modifiers || []),\n        applyStylesModifier,\n      ],\n    },\n  }) as CreateSingletonInstance<CreateSingletonProps>;\n\n  const originalShow = singleton.show;\n\n  singleton.show = (target?: ReferenceElement | Instance | number): void => {\n    originalShow();\n\n    // first time, showOnCreate or programmatic call with no params\n    // default to showing first instance\n    if (!currentTarget && target == null) {\n      return prepareInstance(singleton, references[0]);\n    }\n\n    // triggered from event (do nothing as prepareInstance already called by onTrigger)\n    // programmatic call with no params when already visible (do nothing again)\n    if (currentTarget && target == null) {\n      return;\n    }\n\n    // target is index of instance\n    if (typeof target === 'number') {\n      return (\n        references[target] && prepareInstance(singleton, references[target])\n      );\n    }\n\n    // target is a child tippy instance\n    if (individualInstances.indexOf(target as Instance) >= 0) {\n      const ref = (target as Instance).reference;\n      return prepareInstance(singleton, ref);\n    }\n\n    // target is a ReferenceElement\n    if (references.indexOf(target as ReferenceElement) >= 0) {\n      return prepareInstance(singleton, target as ReferenceElement);\n    }\n  };\n\n  singleton.showNext = (): void => {\n    const first = references[0];\n    if (!currentTarget) {\n      return singleton.show(0);\n    }\n    const index = references.indexOf(currentTarget);\n    singleton.show(references[index + 1] || first);\n  };\n\n  singleton.showPrevious = (): void => {\n    const last = references[references.length - 1];\n    if (!currentTarget) {\n      return singleton.show(last);\n    }\n    const index = references.indexOf(currentTarget);\n    const target = references[index - 1] || last;\n    singleton.show(target);\n  };\n\n  const originalSetProps = singleton.setProps;\n\n  singleton.setProps = (props): void => {\n    overrides = props.overrides || overrides;\n    originalSetProps(props);\n  };\n\n  singleton.setInstances = (nextInstances): void => {\n    enableInstances(true);\n    interceptSetPropsCleanups.forEach((fn) => fn());\n\n    individualInstances = nextInstances;\n\n    enableInstances(false);\n    setReferences();\n    setTriggerTargets();\n    interceptSetPropsCleanups = interceptSetProps(singleton);\n\n    singleton.setProps({triggerTarget: triggerTargets});\n  };\n\n  interceptSetPropsCleanups = interceptSetProps(singleton);\n\n  return singleton;\n};\n\nexport default createSingleton;\n","import {getOwnerDocument, isMouseEvent} from '../dom-utils';\nimport {FollowCursor, Instance} from '../types';\n\nlet mouseCoords = {clientX: 0, clientY: 0};\nlet activeInstances: Array<{instance: Instance; doc: Document}> = [];\n\nfunction storeMouseCoords({clientX, clientY}: MouseEvent): void {\n  mouseCoords = {clientX, clientY};\n}\n\nfunction addMouseCoordsListener(doc: Document): void {\n  doc.addEventListener('mousemove', storeMouseCoords);\n}\n\nfunction removeMouseCoordsListener(doc: Document): void {\n  doc.removeEventListener('mousemove', storeMouseCoords);\n}\n\nconst followCursor: FollowCursor = {\n  name: 'followCursor',\n  defaultValue: false,\n  fn(instance) {\n    const reference = instance.reference;\n    const doc = getOwnerDocument(instance.props.triggerTarget || reference);\n\n    let isInternalUpdate = false;\n    let wasFocusEvent = false;\n    let isUnmounted = true;\n    let prevProps = instance.props;\n\n    function getIsInitialBehavior(): boolean {\n      return (\n        instance.props.followCursor === 'initial' && instance.state.isVisible\n      );\n    }\n\n    function addListener(): void {\n      doc.addEventListener('mousemove', onMouseMove);\n    }\n\n    function removeListener(): void {\n      doc.removeEventListener('mousemove', onMouseMove);\n    }\n\n    function unsetGetReferenceClientRect(): void {\n      isInternalUpdate = true;\n      instance.setProps({getReferenceClientRect: null});\n      isInternalUpdate = false;\n    }\n\n    function onMouseMove(event: MouseEvent): void {\n      // If the instance is interactive, avoid updating the position unless it's\n      // over the reference element\n      const isCursorOverReference = event.target\n        ? reference.contains(event.target as Node)\n        : true;\n      const {followCursor} = instance.props;\n      const {clientX, clientY} = event;\n\n      const rect = reference.getBoundingClientRect();\n      const relativeX = clientX - rect.left;\n      const relativeY = clientY - rect.top;\n\n      if (isCursorOverReference || !instance.props.interactive) {\n        instance.setProps({\n          // @ts-ignore - unneeded DOMRect properties\n          getReferenceClientRect() {\n            const rect = reference.getBoundingClientRect();\n\n            let x = clientX;\n            let y = clientY;\n\n            if (followCursor === 'initial') {\n              x = rect.left + relativeX;\n              y = rect.top + relativeY;\n            }\n\n            const top = followCursor === 'horizontal' ? rect.top : y;\n            const right = followCursor === 'vertical' ? rect.right : x;\n            const bottom = followCursor === 'horizontal' ? rect.bottom : y;\n            const left = followCursor === 'vertical' ? rect.left : x;\n\n            return {\n              width: right - left,\n              height: bottom - top,\n              top,\n              right,\n              bottom,\n              left,\n            };\n          },\n        });\n      }\n    }\n\n    function create(): void {\n      if (instance.props.followCursor) {\n        activeInstances.push({instance, doc});\n        addMouseCoordsListener(doc);\n      }\n    }\n\n    function destroy(): void {\n      activeInstances = activeInstances.filter(\n        (data) => data.instance !== instance\n      );\n\n      if (activeInstances.filter((data) => data.doc === doc).length === 0) {\n        removeMouseCoordsListener(doc);\n      }\n    }\n\n    return {\n      onCreate: create,\n      onDestroy: destroy,\n      onBeforeUpdate(): void {\n        prevProps = instance.props;\n      },\n      onAfterUpdate(_, {followCursor}): void {\n        if (isInternalUpdate) {\n          return;\n        }\n\n        if (\n          followCursor !== undefined &&\n          prevProps.followCursor !== followCursor\n        ) {\n          destroy();\n\n          if (followCursor) {\n            create();\n\n            if (\n              instance.state.isMounted &&\n              !wasFocusEvent &&\n              !getIsInitialBehavior()\n            ) {\n              addListener();\n            }\n          } else {\n            removeListener();\n            unsetGetReferenceClientRect();\n          }\n        }\n      },\n      onMount(): void {\n        if (instance.props.followCursor && !wasFocusEvent) {\n          if (isUnmounted) {\n            onMouseMove(mouseCoords as MouseEvent);\n            isUnmounted = false;\n          }\n\n          if (!getIsInitialBehavior()) {\n            addListener();\n          }\n        }\n      },\n      onTrigger(_, event): void {\n        if (isMouseEvent(event)) {\n          mouseCoords = {clientX: event.clientX, clientY: event.clientY};\n        }\n        wasFocusEvent = event.type === 'focus';\n      },\n      onHidden(): void {\n        if (instance.props.followCursor) {\n          unsetGetReferenceClientRect();\n          removeListener();\n          isUnmounted = true;\n        }\n      },\n    };\n  },\n};\n\nexport default followCursor;\n","import tippy from '../src';\nimport {render} from '../src/template';\n\ntippy.setDefaultProps({render});\n\nexport {default, hideAll} from '../src';\nexport {default as createSingleton} from '../src/addons/createSingleton';\nexport {default as delegate} from '../src/addons/delegate';\nexport {default as animateFill} from '../src/plugins/animateFill';\nexport {default as followCursor} from '../src/plugins/followCursor';\nexport {default as inlinePositioning} from '../src/plugins/inlinePositioning';\nexport {default as sticky} from '../src/plugins/sticky';\nexport {ROUND_ARROW as roundArrow} from '../src/constants';\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Modifier from 'ember-modifier';\nimport type { ArgsFor } from 'ember-modifier';\n\nimport { assert } from '@ember/debug';\nimport { registerDestructor } from '@ember/destroyable';\nimport { guidFor } from '@ember/object/internals';\n\nimport tippy, { followCursor } from 'tippy.js';\nimport type {\n  HideAll as TippyHideAll,\n  Instance as TippyInstance,\n  Props as TippyProps,\n} from 'tippy.js';\n\nimport type Owner from '@ember/owner';\n\nexport interface HdsTooltipModifierSignature {\n  Args: {\n    Positional: [string];\n    Named: {\n      options?: Partial<TippyProps>;\n    };\n  };\n  Element: HTMLElement;\n}\n\nfunction cleanup(instance: HdsTooltipModifier): void {\n  const { _interval, _needsTabIndex, _tooltip, _containerElement } = instance;\n  if (_needsTabIndex) {\n    _tooltip?.reference?.removeAttribute('tabindex');\n  }\n  if (_containerElement) {\n    _containerElement.remove();\n  }\n  clearInterval(_interval);\n  _tooltip?.destroy();\n}\n\n/**\n *\n * `Tooltip` implements a modifier that uses Tippy.js to display a tooltip.\n *\n * Sample usage:\n * ```\n * <div {{hds-tooltip 'Text' options=(hash )}}>Hover me!</div>\n * ```\n *\n * @see https://atomiks.github.io/tippyjs\n * @class TooltipModifier\n *\n */\nexport default class HdsTooltipModifier extends Modifier<HdsTooltipModifierSignature> {\n  private _didSetup = false;\n  private _containerId: string = 'container-' + guidFor(this);\n  _interval: number | undefined = undefined;\n  _needsTabIndex = false;\n  _tooltip: TippyInstance | undefined = undefined;\n  _containerElement?: HTMLElement;\n\n  constructor(owner: Owner, args: ArgsFor<HdsTooltipModifierSignature>) {\n    super(owner, args);\n    registerDestructor(this, cleanup);\n  }\n\n  hideOnEsc = {\n    name: 'hideOnEsc',\n    defaultValue: true,\n    fn({ hide }: { hide: TippyHideAll }) {\n      function onKeyDown(event: KeyboardEvent): void {\n        if (event.key === 'Escape') {\n          hide();\n        }\n      }\n\n      return {\n        onShow() {\n          document.addEventListener('keydown', onKeyDown);\n        },\n        onHide() {\n          document.removeEventListener('keydown', onKeyDown);\n        },\n      };\n    },\n  };\n\n  modify(\n    element: HdsTooltipModifierSignature['Element'],\n    positional: HdsTooltipModifierSignature['Args']['Positional'],\n    named: HdsTooltipModifierSignature['Args']['Named']\n  ): void {\n    assert('Tooltip must have an element', element);\n\n    if (!this._didSetup) {\n      this.#setup(element, positional, named);\n      this._didSetup = true;\n    }\n\n    this.#update(element, positional, named);\n  }\n\n  #setup(\n    element: HdsTooltipModifierSignature['Element'],\n    positional: HdsTooltipModifierSignature['Args']['Positional'],\n    named: HdsTooltipModifierSignature['Args']['Named']\n  ): void {\n    this.#createPopoverContainer(element);\n    const tooltipProps = this.#getTooltipProps(element, positional, named);\n    this._tooltip = tippy(element, tooltipProps);\n  }\n\n  #update(\n    element: HdsTooltipModifierSignature['Element'],\n    positional: HdsTooltipModifierSignature['Args']['Positional'],\n    named: HdsTooltipModifierSignature['Args']['Named']\n  ): void {\n    const tooltipProps = this.#getTooltipProps(element, positional, named);\n    this._tooltip?.setProps(tooltipProps);\n  }\n\n  #createPopoverContainer(\n    element: HdsTooltipModifierSignature['Element']\n  ): void {\n    const containerElement = document.createElement('div');\n    containerElement.setAttribute('id', this._containerId);\n    containerElement.classList.add('hds-tooltip-container');\n    containerElement.style.setProperty('position', 'absolute');\n    // Note: If the popoverContent div extends outside the viewport it triggers overflow when the popover is open.\n    // This is visible for users whose system settings have scrollbars set to always show.\n    containerElement.style.setProperty(\n      'width',\n      'var(--token-tooltip-max-width)'\n    );\n    element.setAttribute('aria-controls', this._containerId);\n    element.setAttribute('aria-describedby', this._containerId);\n    element.after(containerElement);\n    this._containerElement = containerElement;\n  }\n\n  #getTooltipProps(\n    element: HdsTooltipModifierSignature['Element'],\n    positional: HdsTooltipModifierSignature['Args']['Positional'],\n    named: HdsTooltipModifierSignature['Args']['Named']\n  ): Partial<TippyProps> {\n    const { options } = named;\n    let [content] = positional;\n\n    let $anchor: HTMLElement | null = element; // Ensure $anchor can be null\n\n    if (typeof options?.triggerTarget === 'string') {\n      const $el = $anchor;\n      if (options.triggerTarget === 'parentNode') {\n        if ($anchor.parentNode instanceof HTMLElement) {\n          // Type guard\n          $anchor = $anchor.parentNode;\n        }\n      } else {\n        const queryResult: HTMLElement | null = $anchor.querySelector(\n          options.triggerTarget\n        );\n        if (queryResult) {\n          $anchor = queryResult;\n        }\n      }\n      if ($anchor instanceof HTMLElement) {\n        // Ensure $anchor is an HTMLElement before cloning\n        const clonedElement = $anchor.cloneNode(true) as HTMLElement; // Explicitly cast cloned node to HTMLElement\n        content = clonedElement.outerHTML; // Now safely access outerHTML\n      }\n      $el?.remove(); // Use optional chaining in case $el is null\n      options.triggerTarget = null;\n    }\n\n    // The {{hds-tooltip}} will just use the HTML content.\n    if (typeof content === 'undefined' && $anchor instanceof HTMLElement) {\n      // Ensure $anchor is an HTMLElement before accessing innerHTML\n      content = $anchor.innerHTML;\n      $anchor.innerHTML = '';\n    }\n\n    if (options?.trigger === 'manual') {\n      // If we are manually triggering, a out delay means only show for the\n      // amount of time specified by the delay.\n      const delay = options.delay || [];\n\n      if (Array.isArray(delay) && delay.length) {\n        if (typeof delay[1] !== 'undefined') {\n          options.onShown = (tooltip) => {\n            clearInterval(this._interval);\n            this._interval = setTimeout(() => {\n              tooltip.hide();\n            }, delay[1] ?? 0);\n          };\n        }\n      }\n    }\n\n    const $trigger = $anchor;\n\n    if (!$trigger.hasAttribute('tabindex')) {\n      this._needsTabIndex = true;\n      $trigger.setAttribute('tabindex', '0');\n    }\n\n    /*  Typescript does not like the previous approach of adding an undefined value\n     **  to the array and then filtering it out.\n     */\n    const plugins =\n      options?.followCursor !== undefined\n        ? [this.hideOnEsc, followCursor]\n        : [this.hideOnEsc];\n\n    return {\n      theme: 'hds',\n      triggerTarget: $trigger,\n      arrow: `\n        <svg class=\"hds-tooltip-pointer\" width=\"16\" height=\"7\" viewBox=\"0 0 16 7\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M0 7H16L9.11989 0.444571C8.49776 -0.148191 7.50224 -0.148191 6.88011 0.444572L0 7Z\" />\n        </svg>`,\n      // keeps tooltip itself open on hover:\n      interactive: true,\n      appendTo: this._containerElement,\n      // fix accessibility features that get messed up with setting interactive: true\n      aria: {\n        expanded: false,\n      },\n      content: () => content,\n      plugins,\n      ...options,\n    };\n  }\n}\n","import type { SerializedSession, Session, SessionContext, SessionStatus } from './types-hoist';\nimport { dropUndefinedKeys, timestampInSeconds, uuid4 } from './utils-hoist';\n\n/**\n * Creates a new `Session` object by setting certain default parameters. If optional @param context\n * is passed, the passed properties are applied to the session object.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns a new `Session` object\n */\nexport function makeSession(context?: Omit<SessionContext, 'started' | 'status'>): Session {\n  // Both timestamp and started are in seconds since the UNIX epoch.\n  const startingTime = timestampInSeconds();\n\n  const session: Session = {\n    sid: uuid4(),\n    init: true,\n    timestamp: startingTime,\n    started: startingTime,\n    duration: 0,\n    status: 'ok',\n    errors: 0,\n    ignoreDuration: false,\n    toJSON: () => sessionToJSON(session),\n  };\n\n  if (context) {\n    updateSession(session, context);\n  }\n\n  return session;\n}\n\n/**\n * Updates a session object with the properties passed in the context.\n *\n * Note that this function mutates the passed object and returns void.\n * (Had to do this instead of returning a new and updated session because closing and sending a session\n * makes an update to the session after it was passed to the sending logic.\n * @see Client.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\n// eslint-disable-next-line complexity\nexport function updateSession(session: Session, context: SessionContext = {}): void {\n  if (context.user) {\n    if (!session.ipAddress && context.user.ip_address) {\n      session.ipAddress = context.user.ip_address;\n    }\n\n    if (!session.did && !context.did) {\n      session.did = context.user.id || context.user.email || context.user.username;\n    }\n  }\n\n  session.timestamp = context.timestamp || timestampInSeconds();\n\n  if (context.abnormal_mechanism) {\n    session.abnormal_mechanism = context.abnormal_mechanism;\n  }\n\n  if (context.ignoreDuration) {\n    session.ignoreDuration = context.ignoreDuration;\n  }\n  if (context.sid) {\n    // Good enough uuid validation. — Kamil\n    session.sid = context.sid.length === 32 ? context.sid : uuid4();\n  }\n  if (context.init !== undefined) {\n    session.init = context.init;\n  }\n  if (!session.did && context.did) {\n    session.did = `${context.did}`;\n  }\n  if (typeof context.started === 'number') {\n    session.started = context.started;\n  }\n  if (session.ignoreDuration) {\n    session.duration = undefined;\n  } else if (typeof context.duration === 'number') {\n    session.duration = context.duration;\n  } else {\n    const duration = session.timestamp - session.started;\n    session.duration = duration >= 0 ? duration : 0;\n  }\n  if (context.release) {\n    session.release = context.release;\n  }\n  if (context.environment) {\n    session.environment = context.environment;\n  }\n  if (!session.ipAddress && context.ipAddress) {\n    session.ipAddress = context.ipAddress;\n  }\n  if (!session.userAgent && context.userAgent) {\n    session.userAgent = context.userAgent;\n  }\n  if (typeof context.errors === 'number') {\n    session.errors = context.errors;\n  }\n  if (context.status) {\n    session.status = context.status;\n  }\n}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n *               this function will keep the previously set status, unless it was `'ok'` in which case\n *               it is changed to `'exited'`.\n */\nexport function closeSession(session: Session, status?: Exclude<SessionStatus, 'ok'>): void {\n  let context = {};\n  if (status) {\n    context = { status };\n  } else if (session.status === 'ok') {\n    context = { status: 'exited' };\n  }\n\n  updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session: Session): SerializedSession {\n  return dropUndefinedKeys({\n    sid: `${session.sid}`,\n    init: session.init,\n    // Make sure that sec is converted to ms for date constructor\n    started: new Date(session.started * 1000).toISOString(),\n    timestamp: new Date(session.timestamp * 1000).toISOString(),\n    status: session.status,\n    errors: session.errors,\n    did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n    duration: session.duration,\n    abnormal_mechanism: session.abnormal_mechanism,\n    attrs: {\n      release: session.release,\n      environment: session.environment,\n      ip_address: session.ipAddress,\n      user_agent: session.userAgent,\n    },\n  });\n}\n","import type { DynamicSamplingContext, PropagationContext, TraceparentData } from '../types-hoist';\nimport { parseSampleRate } from '../utils/parseSampleRate';\n\nimport { baggageHeaderToDynamicSamplingContext } from './baggage';\nimport { generateSpanId, generateTraceId } from './propagationContext';\n\n// eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor -- RegExp is used for readability here\nexport const TRACEPARENT_REGEXP = new RegExp(\n  '^[ \\\\t]*' + // whitespace\n    '([0-9a-f]{32})?' + // trace_id\n    '-?([0-9a-f]{16})?' + // span_id\n    '-?([01])?' + // sampled\n    '[ \\\\t]*$', // whitespace\n);\n\n/**\n * Extract transaction context data from a `sentry-trace` header.\n *\n * @param traceparent Traceparent string\n *\n * @returns Object containing data from the header, or undefined if traceparent string is malformed\n */\nexport function extractTraceparentData(traceparent?: string): TraceparentData | undefined {\n  if (!traceparent) {\n    return undefined;\n  }\n\n  const matches = traceparent.match(TRACEPARENT_REGEXP);\n  if (!matches) {\n    return undefined;\n  }\n\n  let parentSampled: boolean | undefined;\n  if (matches[3] === '1') {\n    parentSampled = true;\n  } else if (matches[3] === '0') {\n    parentSampled = false;\n  }\n\n  return {\n    traceId: matches[1],\n    parentSampled,\n    parentSpanId: matches[2],\n  };\n}\n\n/**\n * Create a propagation context from incoming headers or\n * creates a minimal new one if the headers are undefined.\n */\nexport function propagationContextFromHeaders(\n  sentryTrace: string | undefined,\n  baggage: string | number | boolean | string[] | null | undefined,\n): PropagationContext {\n  const traceparentData = extractTraceparentData(sentryTrace);\n  const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(baggage);\n\n  if (!traceparentData?.traceId) {\n    return {\n      traceId: generateTraceId(),\n      sampleRand: Math.random(),\n    };\n  }\n\n  const sampleRand = getSampleRandFromTraceparentAndDsc(traceparentData, dynamicSamplingContext);\n\n  // The sample_rand on the DSC needs to be generated based on traceparent + baggage.\n  if (dynamicSamplingContext) {\n    dynamicSamplingContext.sample_rand = sampleRand.toString();\n  }\n\n  const { traceId, parentSpanId, parentSampled } = traceparentData;\n\n  return {\n    traceId,\n    parentSpanId,\n    sampled: parentSampled,\n    dsc: dynamicSamplingContext || {}, // If we have traceparent data but no DSC it means we are not head of trace and we must freeze it\n    sampleRand,\n  };\n}\n\n/**\n * Create sentry-trace header from span context values.\n */\nexport function generateSentryTraceHeader(\n  traceId: string | undefined = generateTraceId(),\n  spanId: string | undefined = generateSpanId(),\n  sampled?: boolean,\n): string {\n  let sampledString = '';\n  if (sampled !== undefined) {\n    sampledString = sampled ? '-1' : '-0';\n  }\n  return `${traceId}-${spanId}${sampledString}`;\n}\n\n/**\n * Given any combination of an incoming trace, generate a sample rand based on its defined semantics.\n *\n * Read more: https://develop.sentry.dev/sdk/telemetry/traces/#propagated-random-value\n */\nfunction getSampleRandFromTraceparentAndDsc(\n  traceparentData: TraceparentData | undefined,\n  dsc: Partial<DynamicSamplingContext> | undefined,\n): number {\n  // When there is an incoming sample rand use it.\n  const parsedSampleRand = parseSampleRate(dsc?.sample_rand);\n  if (parsedSampleRand !== undefined) {\n    return parsedSampleRand;\n  }\n\n  // Otherwise, if there is an incoming sampling decision + sample rate, generate a sample rand that would lead to the same sampling decision.\n  const parsedSampleRate = parseSampleRate(dsc?.sample_rate);\n  if (parsedSampleRate && traceparentData?.parentSampled !== undefined) {\n    return traceparentData.parentSampled\n      ? // Returns a sample rand with positive sampling decision [0, sampleRate)\n        Math.random() * parsedSampleRate\n      : // Returns a sample rand with negative sampling decision [sampleRate, 1)\n        parsedSampleRate + Math.random() * (1 - parsedSampleRate);\n  } else {\n    // If nothing applies, return a random sample rand.\n    return Math.random();\n  }\n}\n","import type {\n  SentrySpanArguments,\n  Span,\n  SpanAttributeValue,\n  SpanAttributes,\n  SpanContextData,\n  SpanStatus,\n  SpanTimeInput,\n} from '../types-hoist';\nimport { generateSpanId, generateTraceId } from '../utils-hoist/propagationContext';\nimport { TRACE_FLAG_NONE } from '../utils/spanUtils';\n\n/**\n * A Sentry Span that is non-recording, meaning it will not be sent to Sentry.\n */\nexport class SentryNonRecordingSpan implements Span {\n  private _traceId: string;\n  private _spanId: string;\n\n  public constructor(spanContext: SentrySpanArguments = {}) {\n    this._traceId = spanContext.traceId || generateTraceId();\n    this._spanId = spanContext.spanId || generateSpanId();\n  }\n\n  /** @inheritdoc */\n  public spanContext(): SpanContextData {\n    return {\n      spanId: this._spanId,\n      traceId: this._traceId,\n      traceFlags: TRACE_FLAG_NONE,\n    };\n  }\n\n  /** @inheritdoc */\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  public end(_timestamp?: SpanTimeInput): void {}\n\n  /** @inheritdoc */\n  public setAttribute(_key: string, _value: SpanAttributeValue | undefined): this {\n    return this;\n  }\n\n  /** @inheritdoc */\n  public setAttributes(_values: SpanAttributes): this {\n    return this;\n  }\n\n  /** @inheritdoc */\n  public setStatus(_status: SpanStatus): this {\n    return this;\n  }\n\n  /** @inheritdoc */\n  public updateName(_name: string): this {\n    return this;\n  }\n\n  /** @inheritdoc */\n  public isRecording(): boolean {\n    return false;\n  }\n\n  /** @inheritdoc */\n  public addEvent(\n    _name: string,\n    _attributesOrStartTime?: SpanAttributes | SpanTimeInput,\n    _startTime?: SpanTimeInput,\n  ): this {\n    return this;\n  }\n\n  /** @inheritDoc */\n  public addLink(_link: unknown): this {\n    return this;\n  }\n\n  /** @inheritDoc */\n  public addLinks(_links: unknown[]): this {\n    return this;\n  }\n\n  /**\n   * This should generally not be used,\n   * but we need it for being compliant with the OTEL Span interface.\n   *\n   * @hidden\n   * @internal\n   */\n  public recordException(_exception: unknown, _time?: number | undefined): void {\n    // noop\n  }\n}\n","/* eslint-disable max-lines */\n\nimport type { AsyncContextStrategy } from '../asyncContext/types';\nimport { getMainCarrier } from '../carrier';\nimport type {\n  ClientOptions,\n  DynamicSamplingContext,\n  SentrySpanArguments,\n  Span,\n  SpanTimeInput,\n  StartSpanOptions,\n} from '../types-hoist';\n\nimport { getClient, getCurrentScope, getIsolationScope, withScope } from '../currentScopes';\n\nimport { getAsyncContextStrategy } from '../asyncContext';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Scope } from '../scope';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '../semanticAttributes';\nimport { logger } from '../utils-hoist/logger';\nimport { generateTraceId } from '../utils-hoist/propagationContext';\nimport { propagationContextFromHeaders } from '../utils-hoist/tracing';\nimport { handleCallbackErrors } from '../utils/handleCallbackErrors';\nimport { hasSpansEnabled } from '../utils/hasSpansEnabled';\nimport { parseSampleRate } from '../utils/parseSampleRate';\nimport { _getSpanForScope, _setSpanForScope } from '../utils/spanOnScope';\nimport { addChildSpanToSpan, getRootSpan, spanIsSampled, spanTimeInputToSeconds, spanToJSON } from '../utils/spanUtils';\nimport { freezeDscOnSpan, getDynamicSamplingContextFromSpan } from './dynamicSamplingContext';\nimport { logSpanStart } from './logSpans';\nimport { sampleSpan } from './sampling';\nimport { SentryNonRecordingSpan } from './sentryNonRecordingSpan';\nimport { SentrySpan } from './sentrySpan';\nimport { SPAN_STATUS_ERROR } from './spanstatus';\nimport { setCapturedScopesOnSpan } from './utils';\n\nconst SUPPRESS_TRACING_KEY = '__SENTRY_SUPPRESS_TRACING__';\n\n/**\n * Wraps a function with a transaction/span and finishes the span after the function is done.\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * If you want to create a span that is not set as active, use {@link startInactiveSpan}.\n *\n * You'll always get a span passed to the callback,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nexport function startSpan<T>(options: StartSpanOptions, callback: (span: Span) => T): T {\n  const acs = getAcs();\n  if (acs.startSpan) {\n    return acs.startSpan(options, callback);\n  }\n\n  const spanArguments = parseSentrySpanArguments(options);\n  const { forceTransaction, parentSpan: customParentSpan, scope: customScope } = options;\n\n  // We still need to fork a potentially passed scope, as we set the active span on it\n  // and we need to ensure that it is cleaned up properly once the span ends.\n  const customForkedScope = customScope?.clone();\n\n  return withScope(customForkedScope, () => {\n    // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n    const wrapper = getActiveSpanWrapper<T>(customParentSpan);\n\n    return wrapper(() => {\n      const scope = getCurrentScope();\n      const parentSpan = getParentSpan(scope);\n\n      const shouldSkipSpan = options.onlyIfParent && !parentSpan;\n      const activeSpan = shouldSkipSpan\n        ? new SentryNonRecordingSpan()\n        : createChildOrRootSpan({\n            parentSpan,\n            spanArguments,\n            forceTransaction,\n            scope,\n          });\n\n      _setSpanForScope(scope, activeSpan);\n\n      return handleCallbackErrors(\n        () => callback(activeSpan),\n        () => {\n          // Only update the span status if it hasn't been changed yet, and the span is not yet finished\n          const { status } = spanToJSON(activeSpan);\n          if (activeSpan.isRecording() && (!status || status === 'ok')) {\n            activeSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n          }\n        },\n        () => {\n          activeSpan.end();\n        },\n      );\n    });\n  });\n}\n\n/**\n * Similar to `Sentry.startSpan`. Wraps a function with a transaction/span, but does not finish the span\n * after the function is done automatically. Use `span.end()` to end the span.\n *\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * You'll always get a span passed to the callback,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nexport function startSpanManual<T>(options: StartSpanOptions, callback: (span: Span, finish: () => void) => T): T {\n  const acs = getAcs();\n  if (acs.startSpanManual) {\n    return acs.startSpanManual(options, callback);\n  }\n\n  const spanArguments = parseSentrySpanArguments(options);\n  const { forceTransaction, parentSpan: customParentSpan, scope: customScope } = options;\n\n  const customForkedScope = customScope?.clone();\n\n  return withScope(customForkedScope, () => {\n    // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n    const wrapper = getActiveSpanWrapper<T>(customParentSpan);\n\n    return wrapper(() => {\n      const scope = getCurrentScope();\n      const parentSpan = getParentSpan(scope);\n\n      const shouldSkipSpan = options.onlyIfParent && !parentSpan;\n      const activeSpan = shouldSkipSpan\n        ? new SentryNonRecordingSpan()\n        : createChildOrRootSpan({\n            parentSpan,\n            spanArguments,\n            forceTransaction,\n            scope,\n          });\n\n      _setSpanForScope(scope, activeSpan);\n\n      return handleCallbackErrors(\n        // We pass the `finish` function to the callback, so the user can finish the span manually\n        // this is mainly here for historic purposes because previously, we instructed users to call\n        // `finish` instead of `span.end()` to also clean up the scope. Nowadays, calling `span.end()`\n        // or `finish` has the same effect and we simply leave it here to avoid breaking user code.\n        () => callback(activeSpan, () => activeSpan.end()),\n        () => {\n          // Only update the span status if it hasn't been changed yet, and the span is not yet finished\n          const { status } = spanToJSON(activeSpan);\n          if (activeSpan.isRecording() && (!status || status === 'ok')) {\n            activeSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n          }\n        },\n      );\n    });\n  });\n}\n\n/**\n * Creates a span. This span is not set as active, so will not get automatic instrumentation spans\n * as children or be able to be accessed via `Sentry.getActiveSpan()`.\n *\n * If you want to create a span that is set as active, use {@link startSpan}.\n *\n * This function will always return a span,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nexport function startInactiveSpan(options: StartSpanOptions): Span {\n  const acs = getAcs();\n  if (acs.startInactiveSpan) {\n    return acs.startInactiveSpan(options);\n  }\n\n  const spanArguments = parseSentrySpanArguments(options);\n  const { forceTransaction, parentSpan: customParentSpan } = options;\n\n  // If `options.scope` is defined, we use this as as a wrapper,\n  // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n  const wrapper = options.scope\n    ? (callback: () => Span) => withScope(options.scope, callback)\n    : customParentSpan !== undefined\n      ? (callback: () => Span) => withActiveSpan(customParentSpan, callback)\n      : (callback: () => Span) => callback();\n\n  return wrapper(() => {\n    const scope = getCurrentScope();\n    const parentSpan = getParentSpan(scope);\n\n    const shouldSkipSpan = options.onlyIfParent && !parentSpan;\n\n    if (shouldSkipSpan) {\n      return new SentryNonRecordingSpan();\n    }\n\n    return createChildOrRootSpan({\n      parentSpan,\n      spanArguments,\n      forceTransaction,\n      scope,\n    });\n  });\n}\n\n/**\n * Continue a trace from `sentry-trace` and `baggage` values.\n * These values can be obtained from incoming request headers, or in the browser from `<meta name=\"sentry-trace\">`\n * and `<meta name=\"baggage\">` HTML tags.\n *\n * Spans started with `startSpan`, `startSpanManual` and `startInactiveSpan`, within the callback will automatically\n * be attached to the incoming trace.\n */\nexport const continueTrace = <V>(\n  options: {\n    sentryTrace: Parameters<typeof propagationContextFromHeaders>[0];\n    baggage: Parameters<typeof propagationContextFromHeaders>[1];\n  },\n  callback: () => V,\n): V => {\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  if (acs.continueTrace) {\n    return acs.continueTrace(options, callback);\n  }\n\n  const { sentryTrace, baggage } = options;\n\n  return withScope(scope => {\n    const propagationContext = propagationContextFromHeaders(sentryTrace, baggage);\n    scope.setPropagationContext(propagationContext);\n    return callback();\n  });\n};\n\n/**\n * Forks the current scope and sets the provided span as active span in the context of the provided callback. Can be\n * passed `null` to start an entirely new span tree.\n *\n * @param span Spans started in the context of the provided callback will be children of this span. If `null` is passed,\n * spans started within the callback will not be attached to a parent span.\n * @param callback Execution context in which the provided span will be active. Is passed the newly forked scope.\n * @returns the value returned from the provided callback function.\n */\nexport function withActiveSpan<T>(span: Span | null, callback: (scope: Scope) => T): T {\n  const acs = getAcs();\n  if (acs.withActiveSpan) {\n    return acs.withActiveSpan(span, callback);\n  }\n\n  return withScope(scope => {\n    _setSpanForScope(scope, span || undefined);\n    return callback(scope);\n  });\n}\n\n/** Suppress tracing in the given callback, ensuring no spans are generated inside of it. */\nexport function suppressTracing<T>(callback: () => T): T {\n  const acs = getAcs();\n\n  if (acs.suppressTracing) {\n    return acs.suppressTracing(callback);\n  }\n\n  return withScope(scope => {\n    scope.setSDKProcessingMetadata({ [SUPPRESS_TRACING_KEY]: true });\n    return callback();\n  });\n}\n\n/**\n * Starts a new trace for the duration of the provided callback. Spans started within the\n * callback will be part of the new trace instead of a potentially previously started trace.\n *\n * Important: Only use this function if you want to override the default trace lifetime and\n * propagation mechanism of the SDK for the duration and scope of the provided callback.\n * The newly created trace will also be the root of a new distributed trace, for example if\n * you make http requests within the callback.\n * This function might be useful if the operation you want to instrument should not be part\n * of a potentially ongoing trace.\n *\n * Default behavior:\n * - Server-side: A new trace is started for each incoming request.\n * - Browser: A new trace is started for each page our route. Navigating to a new route\n *            or page will automatically create a new trace.\n */\nexport function startNewTrace<T>(callback: () => T): T {\n  return withScope(scope => {\n    scope.setPropagationContext({\n      traceId: generateTraceId(),\n      sampleRand: Math.random(),\n    });\n    DEBUG_BUILD && logger.info(`Starting a new trace with id ${scope.getPropagationContext().traceId}`);\n    return withActiveSpan(null, callback);\n  });\n}\n\nfunction createChildOrRootSpan({\n  parentSpan,\n  spanArguments,\n  forceTransaction,\n  scope,\n}: {\n  parentSpan: SentrySpan | undefined;\n  spanArguments: SentrySpanArguments;\n  forceTransaction?: boolean;\n  scope: Scope;\n}): Span {\n  if (!hasSpansEnabled()) {\n    const span = new SentryNonRecordingSpan();\n\n    // If this is a root span, we ensure to freeze a DSC\n    // So we can have at least partial data here\n    if (forceTransaction || !parentSpan) {\n      const dsc = {\n        sampled: 'false',\n        sample_rate: '0',\n        transaction: spanArguments.name,\n        ...getDynamicSamplingContextFromSpan(span),\n      } satisfies Partial<DynamicSamplingContext>;\n      freezeDscOnSpan(span, dsc);\n    }\n\n    return span;\n  }\n\n  const isolationScope = getIsolationScope();\n\n  let span: Span;\n  if (parentSpan && !forceTransaction) {\n    span = _startChildSpan(parentSpan, scope, spanArguments);\n    addChildSpanToSpan(parentSpan, span);\n  } else if (parentSpan) {\n    // If we forced a transaction but have a parent span, make sure to continue from the parent span, not the scope\n    const dsc = getDynamicSamplingContextFromSpan(parentSpan);\n    const { traceId, spanId: parentSpanId } = parentSpan.spanContext();\n    const parentSampled = spanIsSampled(parentSpan);\n\n    span = _startRootSpan(\n      {\n        traceId,\n        parentSpanId,\n        ...spanArguments,\n      },\n      scope,\n      parentSampled,\n    );\n\n    freezeDscOnSpan(span, dsc);\n  } else {\n    const {\n      traceId,\n      dsc,\n      parentSpanId,\n      sampled: parentSampled,\n    } = {\n      ...isolationScope.getPropagationContext(),\n      ...scope.getPropagationContext(),\n    };\n\n    span = _startRootSpan(\n      {\n        traceId,\n        parentSpanId,\n        ...spanArguments,\n      },\n      scope,\n      parentSampled,\n    );\n\n    if (dsc) {\n      freezeDscOnSpan(span, dsc);\n    }\n  }\n\n  logSpanStart(span);\n\n  setCapturedScopesOnSpan(span, scope, isolationScope);\n\n  return span;\n}\n\n/**\n * This converts StartSpanOptions to SentrySpanArguments.\n * For the most part (for now) we accept the same options,\n * but some of them need to be transformed.\n */\nfunction parseSentrySpanArguments(options: StartSpanOptions): SentrySpanArguments {\n  const exp = options.experimental || {};\n  const initialCtx: SentrySpanArguments = {\n    isStandalone: exp.standalone,\n    ...options,\n  };\n\n  if (options.startTime) {\n    const ctx: SentrySpanArguments & { startTime?: SpanTimeInput } = { ...initialCtx };\n    ctx.startTimestamp = spanTimeInputToSeconds(options.startTime);\n    delete ctx.startTime;\n    return ctx;\n  }\n\n  return initialCtx;\n}\n\nfunction getAcs(): AsyncContextStrategy {\n  const carrier = getMainCarrier();\n  return getAsyncContextStrategy(carrier);\n}\n\nfunction _startRootSpan(spanArguments: SentrySpanArguments, scope: Scope, parentSampled?: boolean): SentrySpan {\n  const client = getClient();\n  const options: Partial<ClientOptions> = client?.getOptions() || {};\n\n  const { name = '', attributes } = spanArguments;\n  const currentPropagationContext = scope.getPropagationContext();\n  const [sampled, sampleRate, localSampleRateWasApplied] = scope.getScopeData().sdkProcessingMetadata[\n    SUPPRESS_TRACING_KEY\n  ]\n    ? [false]\n    : sampleSpan(\n        options,\n        {\n          name,\n          parentSampled,\n          attributes,\n          parentSampleRate: parseSampleRate(currentPropagationContext.dsc?.sample_rate),\n        },\n        currentPropagationContext.sampleRand,\n      );\n\n  const rootSpan = new SentrySpan({\n    ...spanArguments,\n    attributes: {\n      [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom',\n      [SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]:\n        sampleRate !== undefined && localSampleRateWasApplied ? sampleRate : undefined,\n      ...spanArguments.attributes,\n    },\n    sampled,\n  });\n\n  if (!sampled && client) {\n    DEBUG_BUILD && logger.log('[Tracing] Discarding root span because its trace was not chosen to be sampled.');\n    client.recordDroppedEvent('sample_rate', 'transaction');\n  }\n\n  if (client) {\n    client.emit('spanStart', rootSpan);\n  }\n\n  return rootSpan;\n}\n\n/**\n * Creates a new `Span` while setting the current `Span.id` as `parentSpanId`.\n * This inherits the sampling decision from the parent span.\n */\nfunction _startChildSpan(parentSpan: Span, scope: Scope, spanArguments: SentrySpanArguments): Span {\n  const { spanId, traceId } = parentSpan.spanContext();\n  const sampled = scope.getScopeData().sdkProcessingMetadata[SUPPRESS_TRACING_KEY] ? false : spanIsSampled(parentSpan);\n\n  const childSpan = sampled\n    ? new SentrySpan({\n        ...spanArguments,\n        parentSpanId: spanId,\n        traceId,\n        sampled,\n      })\n    : new SentryNonRecordingSpan({ traceId });\n\n  addChildSpanToSpan(parentSpan, childSpan);\n\n  const client = getClient();\n  if (client) {\n    client.emit('spanStart', childSpan);\n    // If it has an endTimestamp, it's already ended\n    if (spanArguments.endTimestamp) {\n      client.emit('spanEnd', childSpan);\n    }\n  }\n\n  return childSpan;\n}\n\nfunction getParentSpan(scope: Scope): SentrySpan | undefined {\n  const span = _getSpanForScope(scope) as SentrySpan | undefined;\n\n  if (!span) {\n    return undefined;\n  }\n\n  const client = getClient();\n  const options: Partial<ClientOptions> = client ? client.getOptions() : {};\n  if (options.parentSpanIsAlwaysRootSpan) {\n    return getRootSpan(span) as SentrySpan;\n  }\n\n  return span;\n}\n\nfunction getActiveSpanWrapper<T>(parentSpan: Span | undefined | null): (callback: () => T) => T {\n  return parentSpan !== undefined\n    ? (callback: () => T) => {\n        return withActiveSpan(parentSpan, callback);\n      }\n    : (callback: () => T) => callback();\n}\n","import { getClient, getCurrentScope, getIsolationScope, withIsolationScope } from './currentScopes';\nimport { DEBUG_BUILD } from './debug-build';\nimport type { CaptureContext } from './scope';\nimport { closeSession, makeSession, updateSession } from './session';\nimport type {\n  CheckIn,\n  Event,\n  EventHint,\n  EventProcessor,\n  Extra,\n  Extras,\n  FinishedCheckIn,\n  MonitorConfig,\n  Primitive,\n  Session,\n  SessionContext,\n  SeverityLevel,\n  User,\n} from './types-hoist';\nimport { isThenable } from './utils-hoist/is';\nimport { logger } from './utils-hoist/logger';\nimport { uuid4 } from './utils-hoist/misc';\nimport { timestampInSeconds } from './utils-hoist/time';\nimport { GLOBAL_OBJ } from './utils-hoist/worldwide';\nimport type { ExclusiveEventHintOrCaptureContext } from './utils/prepareEvent';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent';\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nexport function captureException(exception: unknown, hint?: ExclusiveEventHintOrCaptureContext): string {\n  return getCurrentScope().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\n * @param captureContext Define the level of the message or pass in additional data to attach to the message.\n * @returns the id of the captured message.\n */\nexport function captureMessage(message: string, captureContext?: CaptureContext | SeverityLevel): string {\n  // This is necessary to provide explicit scopes upgrade, without changing the original\n  // arity of the `captureMessage(message, level)` method.\n  const level = typeof captureContext === 'string' ? captureContext : undefined;\n  const context = typeof captureContext !== 'string' ? { captureContext } : undefined;\n  return getCurrentScope().captureMessage(message, level, context);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event The event to send to Sentry.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\nexport function captureEvent(event: Event, hint?: EventHint): string {\n  return getCurrentScope().captureEvent(event, hint);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\nexport function setContext(name: string, context: { [key: string]: unknown } | null): void {\n  getIsolationScope().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nexport function setExtras(extras: Extras): void {\n  getIsolationScope().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\nexport function setExtra(key: string, extra: Extra): void {\n  getIsolationScope().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nexport function setTags(tags: { [key: string]: Primitive }): void {\n  getIsolationScope().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\nexport function setTag(key: string, value: Primitive): void {\n  getIsolationScope().setTag(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nexport function setUser(user: User | null): void {\n  getIsolationScope().setUser(user);\n}\n\n/**\n * The last error event id of the isolation scope.\n *\n * Warning: This function really returns the last recorded error event id on the current\n * isolation scope. If you call this function after handling a certain error and another error\n * is captured in between, the last one is returned instead of the one you might expect.\n * Also, ids of events that were never sent to Sentry (for example because\n * they were dropped in `beforeSend`) could be returned.\n *\n * @returns The last event id of the isolation scope.\n */\nexport function lastEventId(): string | undefined {\n  return getIsolationScope().lastEventId();\n}\n\n/**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nexport function captureCheckIn(checkIn: CheckIn, upsertMonitorConfig?: MonitorConfig): string {\n  const scope = getCurrentScope();\n  const client = getClient();\n  if (!client) {\n    DEBUG_BUILD && logger.warn('Cannot capture check-in. No client defined.');\n  } else if (!client.captureCheckIn) {\n    DEBUG_BUILD && logger.warn('Cannot capture check-in. Client does not support sending check-ins.');\n  } else {\n    return client.captureCheckIn(checkIn, upsertMonitorConfig, scope);\n  }\n\n  return uuid4();\n}\n\n/**\n * Wraps a callback with a cron monitor check in. The check in will be sent to Sentry when the callback finishes.\n *\n * @param monitorSlug The distinct slug of the monitor.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nexport function withMonitor<T>(\n  monitorSlug: CheckIn['monitorSlug'],\n  callback: () => T,\n  upsertMonitorConfig?: MonitorConfig,\n): T {\n  const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n  const now = timestampInSeconds();\n\n  function finishCheckIn(status: FinishedCheckIn['status']): void {\n    captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now });\n  }\n\n  return withIsolationScope(() => {\n    let maybePromiseResult: T;\n    try {\n      maybePromiseResult = callback();\n    } catch (e) {\n      finishCheckIn('error');\n      throw e;\n    }\n\n    if (isThenable(maybePromiseResult)) {\n      Promise.resolve(maybePromiseResult).then(\n        () => {\n          finishCheckIn('ok');\n        },\n        e => {\n          finishCheckIn('error');\n          throw e;\n        },\n      );\n    } else {\n      finishCheckIn('ok');\n    }\n\n    return maybePromiseResult;\n  });\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function flush(timeout?: number): Promise<boolean> {\n  const client = getClient();\n  if (client) {\n    return client.flush(timeout);\n  }\n  DEBUG_BUILD && logger.warn('Cannot flush events. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function close(timeout?: number): Promise<boolean> {\n  const client = getClient();\n  if (client) {\n    return client.close(timeout);\n  }\n  DEBUG_BUILD && logger.warn('Cannot flush events and disable SDK. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * Returns true if Sentry has been properly initialized.\n */\nexport function isInitialized(): boolean {\n  return !!getClient();\n}\n\n/** If the SDK is initialized & enabled. */\nexport function isEnabled(): boolean {\n  const client = getClient();\n  return client?.getOptions().enabled !== false && !!client?.getTransport();\n}\n\n/**\n * Add an event processor.\n * This will be added to the current isolation scope, ensuring any event that is processed in the current execution\n * context will have the processor applied.\n */\nexport function addEventProcessor(callback: EventProcessor): void {\n  getIsolationScope().addEventProcessor(callback);\n}\n\n/**\n * Start a session on the current isolation scope.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns the new active session\n */\nexport function startSession(context?: SessionContext): Session {\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n\n  // Will fetch userAgent if called from browser sdk\n  const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n  const session = makeSession({\n    user: currentScope.getUser() || isolationScope.getUser(),\n    ...(userAgent && { userAgent }),\n    ...context,\n  });\n\n  // End existing session if there's one\n  const currentSession = isolationScope.getSession();\n  if (currentSession?.status === 'ok') {\n    updateSession(currentSession, { status: 'exited' });\n  }\n\n  endSession();\n\n  // Afterwards we set the new session on the scope\n  isolationScope.setSession(session);\n\n  return session;\n}\n\n/**\n * End the session on the current isolation scope.\n */\nexport function endSession(): void {\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n\n  const session = currentScope.getSession() || isolationScope.getSession();\n  if (session) {\n    closeSession(session);\n  }\n  _sendSessionUpdate();\n\n  // the session is over; take it off of the scope\n  isolationScope.setSession();\n}\n\n/**\n * Sends the current Session on the scope\n */\nfunction _sendSessionUpdate(): void {\n  const isolationScope = getIsolationScope();\n  const client = getClient();\n  const session = isolationScope.getSession();\n  if (session && client) {\n    client.captureSession(session);\n  }\n}\n\n/**\n * Sends the current session on the scope to Sentry\n *\n * @param end If set the session will be marked as exited and removed from the scope.\n *            Defaults to `false`.\n */\nexport function captureSession(end: boolean = false): void {\n  // both send the update and pull the session from the scope\n  if (end) {\n    endSession();\n    return;\n  }\n\n  // only send the update\n  _sendSessionUpdate();\n}\n","import type { ConsoleLevel } from '../types-hoist';\n\n/** An error emitted by Sentry SDKs and related utilities. */\nexport class SentryError extends Error {\n  public logLevel: ConsoleLevel;\n\n  public constructor(\n    public message: string,\n    logLevel: ConsoleLevel = 'warn',\n  ) {\n    super(message);\n\n    this.logLevel = logLevel;\n  }\n}\n","import type {\n  Event,\n  EventHint,\n  Exception,\n  ParameterizedString,\n  SeverityLevel,\n  StackFrame,\n  StackParser,\n} from '@sentry/core';\nimport {\n  addExceptionMechanism,\n  addExceptionTypeValue,\n  extractExceptionKeysForMessage,\n  getClient,\n  isDOMError,\n  isDOMException,\n  isError,\n  isErrorEvent,\n  isEvent,\n  isParameterizedString,\n  isPlainObject,\n  normalizeToSize,\n  resolvedSyncPromise,\n} from '@sentry/core';\n\ntype Prototype = { constructor: (...args: unknown[]) => unknown };\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nexport function exceptionFromError(stackParser: StackParser, ex: Error): Exception {\n  // Get the frames first since Opera can lose the stack if we touch anything else first\n  const frames = parseStackFrames(stackParser, ex);\n\n  const exception: Exception = {\n    type: extractType(ex),\n    value: extractMessage(ex),\n  };\n\n  if (frames.length) {\n    exception.stacktrace = { frames };\n  }\n\n  if (exception.type === undefined && exception.value === '') {\n    exception.value = 'Unrecoverable error caught';\n  }\n\n  return exception;\n}\n\nfunction eventFromPlainObject(\n  stackParser: StackParser,\n  exception: Record<string, unknown>,\n  syntheticException?: Error,\n  isUnhandledRejection?: boolean,\n): Event {\n  const client = getClient();\n  const normalizeDepth = client?.getOptions().normalizeDepth;\n\n  // If we can, we extract an exception from the object properties\n  const errorFromProp = getErrorPropertyFromObject(exception);\n\n  const extra = {\n    __serialized__: normalizeToSize(exception, normalizeDepth),\n  };\n\n  if (errorFromProp) {\n    return {\n      exception: {\n        values: [exceptionFromError(stackParser, errorFromProp)],\n      },\n      extra,\n    };\n  }\n\n  const event = {\n    exception: {\n      values: [\n        {\n          type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n          value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }),\n        } as Exception,\n      ],\n    },\n    extra,\n  } satisfies Event;\n\n  if (syntheticException) {\n    const frames = parseStackFrames(stackParser, syntheticException);\n    if (frames.length) {\n      // event.exception.values[0] has been set above\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      event.exception.values[0]!.stacktrace = { frames };\n    }\n  }\n\n  return event;\n}\n\nfunction eventFromError(stackParser: StackParser, ex: Error): Event {\n  return {\n    exception: {\n      values: [exceptionFromError(stackParser, ex)],\n    },\n  };\n}\n\n/** Parses stack frames from an error */\nfunction parseStackFrames(\n  stackParser: StackParser,\n  ex: Error & { framesToPop?: number; stacktrace?: string },\n): StackFrame[] {\n  // Access and store the stacktrace property before doing ANYTHING\n  // else to it because Opera is not very good at providing it\n  // reliably in other circumstances.\n  const stacktrace = ex.stacktrace || ex.stack || '';\n\n  const skipLines = getSkipFirstStackStringLines(ex);\n  const framesToPop = getPopFirstTopFrames(ex);\n\n  try {\n    return stackParser(stacktrace, skipLines, framesToPop);\n  } catch (e) {\n    // no-empty\n  }\n\n  return [];\n}\n\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\n\n/**\n * Certain known React errors contain links that would be falsely\n * parsed as frames. This function check for these errors and\n * returns number of the stack string lines to skip.\n */\nfunction getSkipFirstStackStringLines(ex: Error): number {\n  if (ex && reactMinifiedRegexp.test(ex.message)) {\n    return 1;\n  }\n\n  return 0;\n}\n\n/**\n * If error has `framesToPop` property, it means that the\n * creator tells us the first x frames will be useless\n * and should be discarded. Typically error from wrapper function\n * which don't point to the actual location in the developer's code.\n *\n * Example: https://github.com/zertosh/invariant/blob/master/invariant.js#L46\n */\nfunction getPopFirstTopFrames(ex: Error & { framesToPop?: unknown }): number {\n  if (typeof ex.framesToPop === 'number') {\n    return ex.framesToPop;\n  }\n\n  return 0;\n}\n\n// https://developer.mozilla.org/en-US/docs/WebAssembly/JavaScript_interface/Exception\n// @ts-expect-error - WebAssembly.Exception is a valid class\nfunction isWebAssemblyException(exception: unknown): exception is WebAssembly.Exception {\n  // Check for support\n  // @ts-expect-error - WebAssembly.Exception is a valid class\n  if (typeof WebAssembly !== 'undefined' && typeof WebAssembly.Exception !== 'undefined') {\n    // @ts-expect-error - WebAssembly.Exception is a valid class\n    return exception instanceof WebAssembly.Exception;\n  } else {\n    return false;\n  }\n}\n\n/**\n * Extracts from errors what we use as the exception `type` in error events.\n *\n * Usually, this is the `name` property on Error objects but WASM errors need to be treated differently.\n */\nexport function extractType(ex: Error & { message: { error?: Error } }): string | undefined {\n  const name = ex?.name;\n\n  // The name for WebAssembly.Exception Errors needs to be extracted differently.\n  // Context: https://github.com/getsentry/sentry-javascript/issues/13787\n  if (!name && isWebAssemblyException(ex)) {\n    // Emscripten sets array[type, message] to the \"message\" property on the WebAssembly.Exception object\n    const hasTypeInMessage = ex.message && Array.isArray(ex.message) && ex.message.length == 2;\n    return hasTypeInMessage ? ex.message[0] : 'WebAssembly.Exception';\n  }\n\n  return name;\n}\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nexport function extractMessage(ex: Error & { message: { error?: Error } }): string {\n  const message = ex?.message;\n\n  if (isWebAssemblyException(ex)) {\n    // For Node 18, Emscripten sets array[type, message] to the \"message\" property on the WebAssembly.Exception object\n    if (Array.isArray(ex.message) && ex.message.length == 2) {\n      return ex.message[1];\n    }\n    return 'wasm exception';\n  }\n\n  if (!message) {\n    return 'No error message';\n  }\n\n  if (message.error && typeof message.error.message === 'string') {\n    return message.error.message;\n  }\n\n  return message;\n}\n\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nexport function eventFromException(\n  stackParser: StackParser,\n  exception: unknown,\n  hint?: EventHint,\n  attachStacktrace?: boolean,\n): PromiseLike<Event> {\n  const syntheticException = hint?.syntheticException || undefined;\n  const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n  addExceptionMechanism(event); // defaults to { type: 'generic', handled: true }\n  event.level = 'error';\n  if (hint?.event_id) {\n    event.event_id = hint.event_id;\n  }\n  return resolvedSyncPromise(event);\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(\n  stackParser: StackParser,\n  message: ParameterizedString,\n  level: SeverityLevel = 'info',\n  hint?: EventHint,\n  attachStacktrace?: boolean,\n): PromiseLike<Event> {\n  const syntheticException = hint?.syntheticException || undefined;\n  const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n  event.level = level;\n  if (hint?.event_id) {\n    event.event_id = hint.event_id;\n  }\n  return resolvedSyncPromise(event);\n}\n\n/**\n * @hidden\n */\nexport function eventFromUnknownInput(\n  stackParser: StackParser,\n  exception: unknown,\n  syntheticException?: Error,\n  attachStacktrace?: boolean,\n  isUnhandledRejection?: boolean,\n): Event {\n  let event: Event;\n\n  if (isErrorEvent(exception as ErrorEvent) && (exception as ErrorEvent).error) {\n    // If it is an ErrorEvent with `error` property, extract it to get actual Error\n    const errorEvent = exception as ErrorEvent;\n    return eventFromError(stackParser, errorEvent.error as Error);\n  }\n\n  // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name\n  // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be\n  // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.\n  //\n  // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n  // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n  // https://webidl.spec.whatwg.org/#es-DOMException-specialness\n  if (isDOMError(exception) || isDOMException(exception as DOMException)) {\n    const domException = exception as DOMException;\n\n    if ('stack' in (exception as Error)) {\n      event = eventFromError(stackParser, exception as Error);\n    } else {\n      const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n      const message = domException.message ? `${name}: ${domException.message}` : name;\n      event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n      addExceptionTypeValue(event, message);\n    }\n    if ('code' in domException) {\n      // eslint-disable-next-line deprecation/deprecation\n      event.tags = { ...event.tags, 'DOMException.code': `${domException.code}` };\n    }\n\n    return event;\n  }\n  if (isError(exception)) {\n    // we have a real Error object, do nothing\n    return eventFromError(stackParser, exception);\n  }\n  if (isPlainObject(exception) || isEvent(exception)) {\n    // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize\n    // it manually. This will allow us to group events based on top-level keys which is much better than creating a new\n    // group on any key/value change.\n    const objectException = exception as Record<string, unknown>;\n    event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n    addExceptionMechanism(event, {\n      synthetic: true,\n    });\n    return event;\n  }\n\n  // If none of previous checks were valid, then it means that it's not:\n  // - an instance of DOMError\n  // - an instance of DOMException\n  // - an instance of Event\n  // - an instance of Error\n  // - a valid ErrorEvent (one with an error property)\n  // - a plain Object\n  //\n  // So bail out and capture it as a simple message:\n  event = eventFromString(stackParser, exception as string, syntheticException, attachStacktrace);\n  addExceptionTypeValue(event, `${exception}`, undefined);\n  addExceptionMechanism(event, {\n    synthetic: true,\n  });\n\n  return event;\n}\n\nfunction eventFromString(\n  stackParser: StackParser,\n  message: ParameterizedString,\n  syntheticException?: Error,\n  attachStacktrace?: boolean,\n): Event {\n  const event: Event = {};\n\n  if (attachStacktrace && syntheticException) {\n    const frames = parseStackFrames(stackParser, syntheticException);\n    if (frames.length) {\n      event.exception = {\n        values: [{ value: message, stacktrace: { frames } }],\n      };\n    }\n    addExceptionMechanism(event, { synthetic: true });\n  }\n\n  if (isParameterizedString(message)) {\n    const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n    event.logentry = {\n      message: __sentry_template_string__,\n      params: __sentry_template_values__,\n    };\n    return event;\n  }\n\n  event.message = message;\n  return event;\n}\n\nfunction getNonErrorObjectExceptionValue(\n  exception: Record<string, unknown>,\n  { isUnhandledRejection }: { isUnhandledRejection?: boolean },\n): string {\n  const keys = extractExceptionKeysForMessage(exception);\n  const captureType = isUnhandledRejection ? 'promise rejection' : 'exception';\n\n  // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n  // We still want to try to get a decent message for these cases\n  if (isErrorEvent(exception)) {\n    return `Event \\`ErrorEvent\\` captured as ${captureType} with message \\`${exception.message}\\``;\n  }\n\n  if (isEvent(exception)) {\n    const className = getObjectClassName(exception);\n    return `Event \\`${className}\\` (type=${exception.type}) captured as ${captureType}`;\n  }\n\n  return `Object captured as ${captureType} with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj: unknown): string | undefined | void {\n  try {\n    const prototype: Prototype | null = Object.getPrototypeOf(obj);\n    return prototype ? prototype.constructor.name : undefined;\n  } catch (e) {\n    // ignore errors here\n  }\n}\n\n/** If a plain object has a property that is an `Error`, return this error. */\nfunction getErrorPropertyFromObject(obj: Record<string, unknown>): Error | undefined {\n  for (const prop in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n      const value = obj[prop];\n      if (value instanceof Error) {\n        return value;\n      }\n    }\n  }\n\n  return undefined;\n}\n","import { getFunctionName, logger } from '@sentry/core';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { onCLS } from './web-vitals/getCLS';\nimport { onFID } from './web-vitals/getFID';\nimport { onINP } from './web-vitals/getINP';\nimport { onLCP } from './web-vitals/getLCP';\nimport { observe } from './web-vitals/lib/observe';\nimport { onTTFB } from './web-vitals/onTTFB';\n\ntype InstrumentHandlerTypePerformanceObserver =\n  | 'longtask'\n  | 'event'\n  | 'navigation'\n  | 'paint'\n  | 'resource'\n  | 'first-input';\n\ntype InstrumentHandlerTypeMetric = 'cls' | 'lcp' | 'fid' | 'ttfb' | 'inp';\n\n// We provide this here manually instead of relying on a global, as this is not available in non-browser environements\n// And we do not want to expose such types\ninterface PerformanceEntry {\n  readonly duration: number;\n  readonly entryType: string;\n  readonly name: string;\n  readonly startTime: number;\n  toJSON(): Record<string, unknown>;\n}\ninterface PerformanceEventTiming extends PerformanceEntry {\n  processingStart: number;\n  processingEnd: number;\n  duration: number;\n  cancelable?: boolean;\n  target?: unknown | null;\n  interactionId?: number;\n}\n\ninterface PerformanceScriptTiming extends PerformanceEntry {\n  sourceURL: string;\n  sourceFunctionName: string;\n  sourceCharPosition: number;\n  invoker: string;\n  invokerType: string;\n}\nexport interface PerformanceLongAnimationFrameTiming extends PerformanceEntry {\n  scripts: PerformanceScriptTiming[];\n}\n\ninterface Metric {\n  /**\n   * The name of the metric (in acronym form).\n   */\n  name: 'CLS' | 'FCP' | 'FID' | 'INP' | 'LCP' | 'TTFB';\n\n  /**\n   * The current value of the metric.\n   */\n  value: number;\n\n  /**\n   * The rating as to whether the metric value is within the \"good\",\n   * \"needs improvement\", or \"poor\" thresholds of the metric.\n   */\n  rating: 'good' | 'needs-improvement' | 'poor';\n\n  /**\n   * The delta between the current value and the last-reported value.\n   * On the first report, `delta` and `value` will always be the same.\n   */\n  delta: number;\n\n  /**\n   * A unique ID representing this particular metric instance. This ID can\n   * be used by an analytics tool to dedupe multiple values sent for the same\n   * metric instance, or to group multiple deltas together and calculate a\n   * total. It can also be used to differentiate multiple different metric\n   * instances sent from the same page, which can happen if the page is\n   * restored from the back/forward cache (in that case new metrics object\n   * get created).\n   */\n  id: string;\n\n  /**\n   * Any performance entries relevant to the metric value calculation.\n   * The array may also be empty if the metric value was not based on any\n   * entries (e.g. a CLS value of 0 given no layout shifts).\n   */\n  entries: PerformanceEntry[];\n\n  /**\n   * The type of navigation\n   *\n   * Navigation Timing API (or `undefined` if the browser doesn't\n   * support that API). For pages that are restored from the bfcache, this\n   * value will be 'back-forward-cache'.\n   */\n  navigationType: 'navigate' | 'reload' | 'back-forward' | 'back-forward-cache' | 'prerender' | 'restore';\n}\n\ntype InstrumentHandlerType = InstrumentHandlerTypeMetric | InstrumentHandlerTypePerformanceObserver;\n\ntype StopListening = undefined | void | (() => void);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype InstrumentHandlerCallback = (data: any) => void;\n\ntype CleanupHandlerCallback = () => void;\n\nconst handlers: { [key in InstrumentHandlerType]?: InstrumentHandlerCallback[] } = {};\nconst instrumented: { [key in InstrumentHandlerType]?: boolean } = {};\n\nlet _previousCls: Metric | undefined;\nlet _previousFid: Metric | undefined;\nlet _previousLcp: Metric | undefined;\nlet _previousTtfb: Metric | undefined;\nlet _previousInp: Metric | undefined;\n\n/**\n * Add a callback that will be triggered when a CLS metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for CLS when the cleanup callback is called.\n * This will lead to the CLS being finalized and frozen.\n */\nexport function addClsInstrumentationHandler(\n  callback: (data: { metric: Metric }) => void,\n  stopOnCallback = false,\n): CleanupHandlerCallback {\n  return addMetricObserver('cls', callback, instrumentCls, _previousCls, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a LCP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for LCP when the cleanup callback is called.\n * This will lead to the LCP being finalized and frozen.\n */\nexport function addLcpInstrumentationHandler(\n  callback: (data: { metric: Metric }) => void,\n  stopOnCallback = false,\n): CleanupHandlerCallback {\n  return addMetricObserver('lcp', callback, instrumentLcp, _previousLcp, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addFidInstrumentationHandler(callback: (data: { metric: Metric }) => void): CleanupHandlerCallback {\n  return addMetricObserver('fid', callback, instrumentFid, _previousFid);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n */\nexport function addTtfbInstrumentationHandler(callback: (data: { metric: Metric }) => void): CleanupHandlerCallback {\n  return addMetricObserver('ttfb', callback, instrumentTtfb, _previousTtfb);\n}\n\n/**\n * Add a callback that will be triggered when a INP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addInpInstrumentationHandler(\n  callback: (data: { metric: Omit<Metric, 'entries'> & { entries: PerformanceEventTiming[] } }) => void,\n): CleanupHandlerCallback {\n  return addMetricObserver('inp', callback, instrumentInp, _previousInp);\n}\n\nexport function addPerformanceInstrumentationHandler(\n  type: 'event',\n  callback: (data: { entries: ((PerformanceEntry & { target?: unknown | null }) | PerformanceEventTiming)[] }) => void,\n): CleanupHandlerCallback;\nexport function addPerformanceInstrumentationHandler(\n  type: InstrumentHandlerTypePerformanceObserver,\n  callback: (data: { entries: PerformanceEntry[] }) => void,\n): CleanupHandlerCallback;\n\n/**\n * Add a callback that will be triggered when a performance observer is triggered,\n * and receives the entries of the observer.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addPerformanceInstrumentationHandler(\n  type: InstrumentHandlerTypePerformanceObserver,\n  callback: (data: { entries: PerformanceEntry[] }) => void,\n): CleanupHandlerCallback {\n  addHandler(type, callback);\n\n  if (!instrumented[type]) {\n    instrumentPerformanceObserver(type);\n    instrumented[type] = true;\n  }\n\n  return getCleanupCallback(type, callback);\n}\n\n/** Trigger all handlers of a given type. */\nfunction triggerHandlers(type: InstrumentHandlerType, data: unknown): void {\n  const typeHandlers = handlers[type];\n\n  if (!typeHandlers?.length) {\n    return;\n  }\n\n  for (const handler of typeHandlers) {\n    try {\n      handler(data);\n    } catch (e) {\n      DEBUG_BUILD &&\n        logger.error(\n          `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n          e,\n        );\n    }\n  }\n}\n\nfunction instrumentCls(): StopListening {\n  return onCLS(\n    metric => {\n      triggerHandlers('cls', {\n        metric,\n      });\n      _previousCls = metric;\n    },\n    // We want the callback to be called whenever the CLS value updates.\n    // By default, the callback is only called when the tab goes to the background.\n    { reportAllChanges: true },\n  );\n}\n\nfunction instrumentFid(): void {\n  return onFID(metric => {\n    triggerHandlers('fid', {\n      metric,\n    });\n    _previousFid = metric;\n  });\n}\n\nfunction instrumentLcp(): StopListening {\n  return onLCP(\n    metric => {\n      triggerHandlers('lcp', {\n        metric,\n      });\n      _previousLcp = metric;\n    },\n    // We want the callback to be called whenever the LCP value updates.\n    // By default, the callback is only called when the tab goes to the background.\n    { reportAllChanges: true },\n  );\n}\n\nfunction instrumentTtfb(): StopListening {\n  return onTTFB(metric => {\n    triggerHandlers('ttfb', {\n      metric,\n    });\n    _previousTtfb = metric;\n  });\n}\n\nfunction instrumentInp(): void {\n  return onINP(metric => {\n    triggerHandlers('inp', {\n      metric,\n    });\n    _previousInp = metric;\n  });\n}\n\nfunction addMetricObserver(\n  type: InstrumentHandlerTypeMetric,\n  callback: InstrumentHandlerCallback,\n  instrumentFn: () => StopListening,\n  previousValue: Metric | undefined,\n  stopOnCallback = false,\n): CleanupHandlerCallback {\n  addHandler(type, callback);\n\n  let stopListening: StopListening | undefined;\n\n  if (!instrumented[type]) {\n    stopListening = instrumentFn();\n    instrumented[type] = true;\n  }\n\n  if (previousValue) {\n    callback({ metric: previousValue });\n  }\n\n  return getCleanupCallback(type, callback, stopOnCallback ? stopListening : undefined);\n}\n\nfunction instrumentPerformanceObserver(type: InstrumentHandlerTypePerformanceObserver): void {\n  const options: PerformanceObserverInit = {};\n\n  // Special per-type options we want to use\n  if (type === 'event') {\n    options.durationThreshold = 0;\n  }\n\n  observe(\n    type,\n    entries => {\n      triggerHandlers(type, { entries });\n    },\n    options,\n  );\n}\n\nfunction addHandler(type: InstrumentHandlerType, handler: InstrumentHandlerCallback): void {\n  handlers[type] = handlers[type] || [];\n  (handlers[type] as InstrumentHandlerCallback[]).push(handler);\n}\n\n// Get a callback which can be called to remove the instrumentation handler\nfunction getCleanupCallback(\n  type: InstrumentHandlerType,\n  callback: InstrumentHandlerCallback,\n  stopListening: StopListening,\n): CleanupHandlerCallback {\n  return () => {\n    if (stopListening) {\n      stopListening();\n    }\n\n    const typeHandlers = handlers[type];\n\n    if (!typeHandlers) {\n      return;\n    }\n\n    const index = typeHandlers.indexOf(callback);\n    if (index !== -1) {\n      typeHandlers.splice(index, 1);\n    }\n  };\n}\n\n/**\n * Check if a PerformanceEntry is a PerformanceEventTiming by checking for the `duration` property.\n */\nexport function isPerformanceEventTiming(entry: PerformanceEntry): entry is PerformanceEventTiming {\n  return 'duration' in entry;\n}\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://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,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../../types';\n\n// sentry-specific change:\n// add optional param to not check for responseStart (see comment below)\nexport const getNavigationEntry = (checkResponseStart = true): PerformanceNavigationTiming | void => {\n  const navigationEntry = WINDOW.performance?.getEntriesByType?.('navigation')[0];\n  // Check to ensure the `responseStart` property is present and valid.\n  // In some cases no value is reported by the browser (for\n  // privacy/security reasons), and in other cases (bugs) the value is\n  // negative or is larger than the current page time. Ignore these cases:\n  // https://github.com/GoogleChrome/web-vitals/issues/137\n  // https://github.com/GoogleChrome/web-vitals/issues/162\n  // https://github.com/GoogleChrome/web-vitals/issues/275\n  if (\n    // sentry-specific change:\n    // We don't want to check for responseStart for our own use of `getNavigationEntry`\n    !checkResponseStart ||\n    (navigationEntry && navigationEntry.responseStart > 0 && navigationEntry.responseStart < performance.now())\n  ) {\n    return navigationEntry;\n  }\n};\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://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,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const runOnce = (cb: () => void) => {\n  let called = false;\n  return () => {\n    if (!called) {\n      cb();\n      called = true;\n    }\n  };\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://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,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../../types';\n\nlet firstHiddenTime = -1;\n\nconst initHiddenTime = () => {\n  // If the document is hidden when this code runs, assume it was always\n  // hidden and the page was loaded in the background, with the one exception\n  // that visibility state is always 'hidden' during prerendering, so we have\n  // to ignore that case until prerendering finishes (see: `prerenderingchange`\n  // event logic below).\n  return WINDOW.document!.visibilityState === 'hidden' && !WINDOW.document!.prerendering ? 0 : Infinity;\n};\n\nconst onVisibilityUpdate = (event: Event) => {\n  // If the document is 'hidden' and no previous hidden timestamp has been\n  // set, update it based on the current event data.\n  if (WINDOW.document!.visibilityState === 'hidden' && firstHiddenTime > -1) {\n    // If the event is a 'visibilitychange' event, it means the page was\n    // visible prior to this change, so the event timestamp is the first\n    // hidden time.\n    // However, if the event is not a 'visibilitychange' event, then it must\n    // be a 'prerenderingchange' event, and the fact that the document is\n    // still 'hidden' from the above check means the tab was activated\n    // in a background state and so has always been hidden.\n    firstHiddenTime = event.type === 'visibilitychange' ? event.timeStamp : 0;\n\n    // Remove all listeners now that a `firstHiddenTime` value has been set.\n    removeChangeListeners();\n  }\n};\n\nconst addChangeListeners = () => {\n  addEventListener('visibilitychange', onVisibilityUpdate, true);\n  // IMPORTANT: when a page is prerendering, its `visibilityState` is\n  // 'hidden', so in order to account for cases where this module checks for\n  // visibility during prerendering, an additional check after prerendering\n  // completes is also required.\n  addEventListener('prerenderingchange', onVisibilityUpdate, true);\n};\n\nconst removeChangeListeners = () => {\n  removeEventListener('visibilitychange', onVisibilityUpdate, true);\n  removeEventListener('prerenderingchange', onVisibilityUpdate, true);\n};\n\nexport const getVisibilityWatcher = () => {\n  if (WINDOW.document && firstHiddenTime < 0) {\n    // If the document is hidden when this code runs, assume it was hidden\n    // since navigation start. This isn't a perfect heuristic, but it's the\n    // best we can do until an API is available to support querying past\n    // visibilityState.\n    firstHiddenTime = initHiddenTime();\n    addChangeListeners();\n  }\n  return {\n    get firstHiddenTime() {\n      return firstHiddenTime;\n    },\n  };\n};\n","import type { Integration, SentrySpan, Span, SpanAttributes, SpanTimeInput, StartSpanOptions } from '@sentry/core';\nimport { getClient, getCurrentScope, spanToJSON, startInactiveSpan, withActiveSpan } from '@sentry/core';\nimport { WINDOW } from '../types';\n\n/**\n * Checks if a given value is a valid measurement value.\n */\nexport function isMeasurementValue(value: unknown): value is number {\n  return typeof value === 'number' && isFinite(value);\n}\n\n/**\n * Helper function to start child on transactions. This function will make sure that the transaction will\n * use the start timestamp of the created child span if it is earlier than the transactions actual\n * start timestamp.\n */\nexport function startAndEndSpan(\n  parentSpan: Span,\n  startTimeInSeconds: number,\n  endTime: SpanTimeInput,\n  { ...ctx }: StartSpanOptions,\n): Span | undefined {\n  const parentStartTime = spanToJSON(parentSpan).start_timestamp;\n  if (parentStartTime && parentStartTime > startTimeInSeconds) {\n    // We can only do this for SentrySpans...\n    if (typeof (parentSpan as Partial<SentrySpan>).updateStartTime === 'function') {\n      (parentSpan as SentrySpan).updateStartTime(startTimeInSeconds);\n    }\n  }\n\n  // The return value only exists for tests\n  return withActiveSpan(parentSpan, () => {\n    const span = startInactiveSpan({\n      startTime: startTimeInSeconds,\n      ...ctx,\n    });\n\n    if (span) {\n      span.end(endTime);\n    }\n\n    return span;\n  });\n}\n\ninterface StandaloneWebVitalSpanOptions {\n  name: string;\n  transaction?: string;\n  attributes: SpanAttributes;\n  startTime: number;\n}\n\n/**\n * Starts an inactive, standalone span used to send web vital values to Sentry.\n * DO NOT use this for arbitrary spans, as these spans require special handling\n * during ingestion to extract metrics.\n *\n * This function adds a bunch of attributes and data to the span that's shared\n * by all web vital standalone spans. However, you need to take care of adding\n * the actual web vital value as an event to the span. Also, you need to assign\n * a transaction name and some other values that are specific to the web vital.\n *\n * Ultimately, you also need to take care of ending the span to send it off.\n *\n * @param options\n *\n * @returns an inactive, standalone and NOT YET ended span\n */\nexport function startStandaloneWebVitalSpan(options: StandaloneWebVitalSpanOptions): Span | undefined {\n  const client = getClient();\n  if (!client) {\n    return;\n  }\n\n  const { name, transaction, attributes: passedAttributes, startTime } = options;\n\n  const { release, environment, sendDefaultPii } = client.getOptions();\n  // We need to get the replay, user, and activeTransaction from the current scope\n  // so that we can associate replay id, profile id, and a user display to the span\n  const replay = client.getIntegrationByName<Integration & { getReplayId: () => string }>('Replay');\n  const replayId = replay?.getReplayId();\n\n  const scope = getCurrentScope();\n\n  const user = scope.getUser();\n  const userDisplay = user !== undefined ? user.email || user.id || user.ip_address : undefined;\n\n  let profileId: string | undefined;\n  try {\n    // @ts-expect-error skip optional chaining to save bundle size with try catch\n    profileId = scope.getScopeData().contexts.profile.profile_id;\n  } catch {\n    // do nothing\n  }\n\n  const attributes: SpanAttributes = {\n    release,\n    environment,\n\n    user: userDisplay || undefined,\n    profile_id: profileId || undefined,\n    replay_id: replayId || undefined,\n\n    transaction,\n\n    // Web vital score calculation relies on the user agent to account for different\n    // browsers setting different thresholds for what is considered a good/meh/bad value.\n    // For example: Chrome vs. Chrome Mobile\n    'user_agent.original': WINDOW.navigator?.userAgent,\n\n    // This tells Sentry to infer the IP address from the request\n    'client.address': sendDefaultPii ? '{{auto}}' : undefined,\n\n    ...passedAttributes,\n  };\n\n  return startInactiveSpan({\n    name,\n    attributes,\n    startTime,\n    experimental: {\n      standalone: true,\n    },\n  });\n}\n\n/** Get the browser performance API. */\nexport function getBrowserPerformanceAPI(): Performance | undefined {\n  // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n  return WINDOW.addEventListener && WINDOW.performance;\n}\n\n/**\n * Converts from milliseconds to seconds\n * @param time time in ms\n */\nexport function msToSec(time: number): number {\n  return time / 1000;\n}\n\n/**\n * Converts ALPN protocol ids to name and version.\n *\n * (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids)\n * @param nextHopProtocol PerformanceResourceTiming.nextHopProtocol\n */\nexport function extractNetworkProtocol(nextHopProtocol: string): { name: string; version: string } {\n  let name = 'unknown';\n  let version = 'unknown';\n  let _name = '';\n  for (const char of nextHopProtocol) {\n    // http/1.1 etc.\n    if (char === '/') {\n      [name, version] = nextHopProtocol.split('/') as [string, string];\n      break;\n    }\n    // h2, h3 etc.\n    if (!isNaN(Number(char))) {\n      name = _name === 'h' ? 'http' : _name;\n      version = nextHopProtocol.split(_name)[1] as string;\n      break;\n    }\n    _name += char;\n  }\n  if (_name === nextHopProtocol) {\n    // webrtc, ftp, etc.\n    name = _name;\n  }\n  return { name, version };\n}\n","var baseIsArguments = require('./_baseIsArguments'),\n    isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var listCacheClear = require('./_listCacheClear'),\n    listCacheDelete = require('./_listCacheDelete'),\n    listCacheGet = require('./_listCacheGet'),\n    listCacheHas = require('./_listCacheHas'),\n    listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = assocIndexOf;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nmodule.exports = getMapData;\n","var castPath = require('./_castPath'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = castPath(path, object);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = identity;\n","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignValue;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeysIn = require('./_baseKeysIn'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","'use strict'\n\nlet Node = require('./node')\n\nclass Comment extends Node {\n  constructor(defaults) {\n    super(defaults)\n    this.type = 'comment'\n  }\n}\n\nmodule.exports = Comment\nComment.default = Comment\n","'use strict'\n\nlet CssSyntaxError = require('./css-syntax-error')\nlet Stringifier = require('./stringifier')\nlet stringify = require('./stringify')\nlet { isClean, my } = require('./symbols')\n\nfunction cloneNode(obj, parent) {\n  let cloned = new obj.constructor()\n  // An explicit stack instead of recursive calls to survive deeply\n  // nested trees. Each entry is [source, its clone, clone's parent].\n  let stack = [[obj, cloned, parent]]\n\n  while (stack.length > 0) {\n    let [source, target, targetParent] = stack.pop()\n    for (let i in source) {\n      if (!Object.prototype.hasOwnProperty.call(source, i)) {\n        /* c8 ignore next 2 */\n        continue\n      }\n      if (i === 'proxyCache') continue\n      let value = source[i]\n      let type = typeof value\n\n      if (i === 'parent' && type === 'object') {\n        if (targetParent) target[i] = targetParent\n      } else if (i === 'source') {\n        target[i] = value\n      } else if (Array.isArray(value)) {\n        let children = []\n        target[i] = children\n        for (let j of value) {\n          let childClone = new j.constructor()\n          children.push(childClone)\n          stack.push([j, childClone, target])\n        }\n      } else {\n        if (type === 'object' && value !== null) {\n          let valueClone = new value.constructor()\n          stack.push([value, valueClone, undefined])\n          value = valueClone\n        }\n        target[i] = value\n      }\n    }\n  }\n\n  return cloned\n}\n\nfunction sourceOffset(inputCSS, position) {\n  // Not all custom syntaxes support `offset` in `source.start` and `source.end`\n  if (position && typeof position.offset !== 'undefined') {\n    return position.offset\n  }\n\n  let column = 1\n  let line = 1\n  let offset = 0\n\n  for (let i = 0; i < inputCSS.length; i++) {\n    if (line === position.line && column === position.column) {\n      offset = i\n      break\n    }\n\n    if (inputCSS[i] === '\\n') {\n      column = 1\n      line += 1\n    } else {\n      column += 1\n    }\n  }\n\n  return offset\n}\n\nclass Node {\n  get proxyOf() {\n    return this\n  }\n\n  constructor(defaults = {}) {\n    this.raws = {}\n    this[isClean] = false\n    this[my] = true\n\n    for (let name of Object.keys(defaults)) {\n      if (name === '__proto__') continue\n      if (name === 'nodes') {\n        this.nodes = []\n        for (let node of defaults[name]) {\n          // Clone only nodes that already belong to another tree, so passing a\n          // freshly created (parent-less) node adopts that instance instead of\n          // a copy and keeps the caller's reference usable. See #1987.\n          if (typeof node.clone === 'function' && node.parent) {\n            this.append(node.clone())\n          } else {\n            this.append(node)\n          }\n        }\n      } else {\n        this[name] = defaults[name]\n      }\n    }\n  }\n\n  addToError(error) {\n    error.postcssNode = this\n    if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n      let s = this.source\n      error.stack = error.stack.replace(\n        /\\n\\s{4}at /,\n        `$&${s.input.from}:${s.start.line}:${s.start.column}$&`\n      )\n    }\n    return error\n  }\n\n  after(add) {\n    this.parent.insertAfter(this, add)\n    return this\n  }\n\n  assign(overrides = {}) {\n    for (let name in overrides) {\n      this[name] = overrides[name]\n    }\n    return this\n  }\n\n  before(add) {\n    this.parent.insertBefore(this, add)\n    return this\n  }\n\n  cleanRaws(keepBetween) {\n    delete this.raws.before\n    delete this.raws.after\n    if (!keepBetween) delete this.raws.between\n  }\n\n  clone(overrides = {}) {\n    let cloned = cloneNode(this)\n    for (let name in overrides) {\n      cloned[name] = overrides[name]\n    }\n    return cloned\n  }\n\n  cloneAfter(overrides = {}) {\n    let cloned = this.clone(overrides)\n    this.parent.insertAfter(this, cloned)\n    return cloned\n  }\n\n  cloneBefore(overrides = {}) {\n    let cloned = this.clone(overrides)\n    this.parent.insertBefore(this, cloned)\n    return cloned\n  }\n\n  error(message, opts = {}) {\n    if (this.source) {\n      let { end, start } = this.rangeBy(opts)\n      return this.source.input.error(\n        message,\n        { column: start.column, line: start.line },\n        { column: end.column, line: end.line },\n        opts\n      )\n    }\n    return new CssSyntaxError(message)\n  }\n\n  getProxyProcessor() {\n    return {\n      get(node, prop) {\n        if (prop === 'proxyOf') {\n          return node\n        } else if (prop === 'root') {\n          return () => node.root().toProxy()\n        } else {\n          return node[prop]\n        }\n      },\n\n      set(node, prop, value) {\n        if (node[prop] === value) return true\n        node[prop] = value\n        if (\n          prop === 'prop' ||\n          prop === 'value' ||\n          prop === 'name' ||\n          prop === 'params' ||\n          prop === 'important' ||\n          /* c8 ignore next */\n          prop === 'text'\n        ) {\n          node.markDirty()\n        }\n        return true\n      }\n    }\n  }\n\n  /* c8 ignore next 3 */\n  markClean() {\n    this[isClean] = true\n  }\n\n  markDirty() {\n    if (this[isClean]) {\n      this[isClean] = false\n      let next = this\n      while ((next = next.parent)) {\n        next[isClean] = false\n      }\n    }\n  }\n\n  next() {\n    if (!this.parent) return undefined\n    let index = this.parent.index(this)\n    return this.parent.nodes[index + 1]\n  }\n\n  positionBy(opts = {}) {\n    let inputString =\n      'document' in this.source.input\n        ? this.source.input.document\n        : this.source.input.css\n    let pos = {\n      column: this.source.start.column,\n      line: this.source.start.line,\n      offset: sourceOffset(inputString, this.source.start)\n    }\n    if (opts.index) {\n      pos = this.positionInside(opts.index)\n    } else if (opts.word) {\n      let stringRepresentation = inputString.slice(\n        sourceOffset(inputString, this.source.start),\n        sourceOffset(inputString, this.source.end)\n      )\n      let index = stringRepresentation.indexOf(opts.word)\n      if (index !== -1) pos = this.positionInside(index)\n    }\n    return pos\n  }\n\n  positionInside(index) {\n    let column = this.source.start.column\n    let line = this.source.start.line\n    let inputString =\n      'document' in this.source.input\n        ? this.source.input.document\n        : this.source.input.css\n    let offset = sourceOffset(inputString, this.source.start)\n    let end = offset + index\n\n    for (let i = offset; i < end; i++) {\n      if (inputString[i] === '\\n') {\n        column = 1\n        line += 1\n      } else {\n        column += 1\n      }\n    }\n\n    return { column, line, offset: end }\n  }\n\n  prev() {\n    if (!this.parent) return undefined\n    let index = this.parent.index(this)\n    return this.parent.nodes[index - 1]\n  }\n\n  rangeBy(opts = {}) {\n    let inputString =\n      'document' in this.source.input\n        ? this.source.input.document\n        : this.source.input.css\n    let start = {\n      column: this.source.start.column,\n      line: this.source.start.line,\n      offset: sourceOffset(inputString, this.source.start)\n    }\n    let end = this.source.end\n      ? {\n          column: this.source.end.column + 1,\n          line: this.source.end.line,\n          offset:\n            typeof this.source.end.offset === 'number'\n              ? // `source.end.offset` is exclusive, so we don't need to add 1\n                this.source.end.offset\n              : // Since line/column in this.source.end is inclusive,\n                // the `sourceOffset(... , this.source.end)` returns an inclusive offset.\n                // So, we add 1 to convert it to exclusive.\n                sourceOffset(inputString, this.source.end) + 1\n        }\n      : {\n          column: start.column + 1,\n          line: start.line,\n          offset: start.offset + 1\n        }\n\n    if (opts.word) {\n      let stringRepresentation = inputString.slice(\n        sourceOffset(inputString, this.source.start),\n        sourceOffset(inputString, this.source.end)\n      )\n      let index = stringRepresentation.indexOf(opts.word)\n      if (index !== -1) {\n        start = this.positionInside(index)\n        end = this.positionInside(index + opts.word.length)\n      }\n    } else {\n      if (opts.start) {\n        start = {\n          column: opts.start.column,\n          line: opts.start.line,\n          offset: sourceOffset(inputString, opts.start)\n        }\n      } else if (typeof opts.index === 'number') {\n        start = this.positionInside(opts.index)\n      }\n\n      if (opts.end) {\n        end = {\n          column: opts.end.column,\n          line: opts.end.line,\n          offset: sourceOffset(inputString, opts.end)\n        }\n      } else if (typeof opts.endIndex === 'number') {\n        end = this.positionInside(opts.endIndex)\n      } else if (typeof opts.index === 'number') {\n        end = this.positionInside(opts.index + 1)\n      }\n    }\n\n    if (\n      end.line < start.line ||\n      (end.line === start.line && end.column <= start.column)\n    ) {\n      end = {\n        column: start.column + 1,\n        line: start.line,\n        offset: start.offset + 1\n      }\n    }\n\n    return { end, start }\n  }\n\n  raw(prop, defaultType) {\n    let str = new Stringifier()\n    return str.raw(this, prop, defaultType)\n  }\n\n  remove() {\n    if (this.parent) {\n      this.parent.removeChild(this)\n    }\n    this.parent = undefined\n    return this\n  }\n\n  replaceWith(...nodes) {\n    if (this.parent) {\n      let bookmark = this\n      let foundSelf = false\n      for (let node of nodes) {\n        if (node === this) {\n          foundSelf = true\n        } else if (foundSelf) {\n          this.parent.insertAfter(bookmark, node)\n          bookmark = node\n        } else {\n          this.parent.insertBefore(bookmark, node)\n        }\n      }\n\n      if (!foundSelf) {\n        this.remove()\n      }\n    }\n\n    return this\n  }\n\n  root() {\n    let result = this\n    while (result.parent && result.parent.type !== 'document') {\n      result = result.parent\n    }\n    return result\n  }\n\n  toJSON(_, inputs) {\n    let emitInputs = inputs == null\n    inputs = inputs || new Map()\n\n    // A worklist instead of recursive `toJSON()` calls to survive deeply\n    // nested trees. Each entry converts one node and writes the result\n    // into the already converted parent by [holder, key].\n    let holderOfRoot = []\n    let queue = [[this, holderOfRoot, 0]]\n\n    for (let step = 0; step < queue.length; step++) {\n      let [node, holder, key] = queue[step]\n      let fixed = {}\n      holder[key] = fixed\n\n      for (let name in node) {\n        if (!Object.prototype.hasOwnProperty.call(node, name)) {\n          /* c8 ignore next 2 */\n          continue\n        }\n        if (name === 'parent' || name === 'proxyCache') continue\n        let value = node[name]\n\n        if (Array.isArray(value)) {\n          let fixedArray = []\n          fixed[name] = fixedArray\n          for (let i = 0; i < value.length; i++) {\n            let item = value[i]\n            if (typeof item === 'object' && item.toJSON) {\n              if (item.toJSON === Node.prototype.toJSON) {\n                queue.push([item, fixedArray, i])\n              } else {\n                fixedArray[i] = item.toJSON(null, inputs)\n              }\n            } else {\n              fixedArray[i] = item\n            }\n          }\n        } else if (typeof value === 'object' && value.toJSON) {\n          if (value.toJSON === Node.prototype.toJSON) {\n            queue.push([value, fixed, name])\n          } else {\n            fixed[name] = value.toJSON(null, inputs)\n          }\n        } else if (name === 'source') {\n          if (value == null) continue\n          let inputId = inputs.get(value.input)\n          if (inputId == null) {\n            inputId = inputs.size\n            inputs.set(value.input, inputId)\n          }\n          fixed[name] = {\n            end: value.end,\n            inputId,\n            start: value.start\n          }\n        } else {\n          fixed[name] = value\n        }\n      }\n    }\n\n    let fixed = holderOfRoot[0]\n    if (emitInputs) {\n      fixed.inputs = [...inputs.keys()].map(input => input.toJSON())\n    }\n\n    return fixed\n  }\n\n  toProxy() {\n    if (!this.proxyCache) {\n      this.proxyCache = new Proxy(this, this.getProxyProcessor())\n    }\n    return this.proxyCache\n  }\n\n  toString(stringifier = stringify) {\n    if (stringifier.stringify) stringifier = stringifier.stringify\n    let result = ''\n    stringifier(this, i => {\n      result += i\n    })\n    return result\n  }\n\n  warn(result, text, opts = {}) {\n    let data = { node: this }\n    for (let i in opts) data[i] = opts[i]\n    return result.warn(text, data)\n  }\n}\n\nmodule.exports = Node\nNode.default = Node\n","'use strict'\n\nlet Stringifier = require('./stringifier')\n\nfunction stringify(node, builder) {\n  let str = new Stringifier(builder)\n  str.stringify(node)\n}\n\nmodule.exports = stringify\nstringify.default = stringify\n","'use strict'\n\nlet Node = require('./node')\n\nclass Declaration extends Node {\n  get variable() {\n    return this.prop.startsWith('--') || this.prop[0] === '$'\n  }\n\n  constructor(defaults) {\n    if (\n      defaults &&\n      typeof defaults.value !== 'undefined' &&\n      typeof defaults.value !== 'string'\n    ) {\n      defaults = { ...defaults, value: String(defaults.value) }\n    }\n    super(defaults)\n    this.type = 'decl'\n  }\n}\n\nmodule.exports = Declaration\nDeclaration.default = Declaration\n","'use strict'\n\nlet { nanoid } = require('nanoid/non-secure')\nlet { isAbsolute, resolve } = require('path')\nlet { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')\nlet { fileURLToPath, pathToFileURL } = require('url')\n\nlet CssSyntaxError = require('./css-syntax-error')\nlet PreviousMap = require('./previous-map')\nlet terminalHighlight = require('./terminal-highlight')\n\nlet lineToIndexCache = Symbol('lineToIndexCache')\n\nlet sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator)\nlet pathAvailable = Boolean(resolve && isAbsolute)\n\nfunction getLineToIndex(input) {\n  if (input[lineToIndexCache]) return input[lineToIndexCache]\n  let lines = input.css.split('\\n')\n  let lineToIndex = new Array(lines.length)\n  let prevIndex = 0\n\n  for (let i = 0, l = lines.length; i < l; i++) {\n    lineToIndex[i] = prevIndex\n    prevIndex += lines[i].length + 1\n  }\n\n  input[lineToIndexCache] = lineToIndex\n  return lineToIndex\n}\n\nclass Input {\n  get from() {\n    return this.file || this.id\n  }\n\n  constructor(css, opts = {}) {\n    if (\n      css === null ||\n      typeof css === 'undefined' ||\n      (typeof css === 'object' && !css.toString)\n    ) {\n      throw new Error(`PostCSS received ${css} instead of CSS string`)\n    }\n\n    this.css = css.toString()\n\n    if (this.css[0] === '\\uFEFF' || this.css[0] === '\\uFFFE') {\n      this.hasBOM = true\n      this.css = this.css.slice(1)\n    } else {\n      this.hasBOM = false\n    }\n\n    this.document = this.css\n    if (opts.document) this.document = opts.document.toString()\n\n    if (opts.from) {\n      if (\n        !pathAvailable ||\n        /^\\w+:\\/\\//.test(opts.from) ||\n        isAbsolute(opts.from)\n      ) {\n        this.file = opts.from\n      } else {\n        this.file = resolve(opts.from)\n      }\n    }\n\n    if (pathAvailable && sourceMapAvailable) {\n      let map = new PreviousMap(this.css, opts)\n      if (map.text) {\n        this.map = map\n        let file = map.consumer().file\n        if (!this.file && file) this.file = this.mapResolve(file)\n      }\n    }\n\n    if (!this.file) {\n      this.id = '<input css ' + nanoid(6) + '>'\n    }\n    if (this.map) this.map.file = this.from\n  }\n\n  error(message, line, column, opts = {}) {\n    let endColumn, endLine, endOffset, offset, result\n\n    if (line && typeof line === 'object') {\n      let start = line\n      let end = column\n      if (typeof start.offset === 'number') {\n        offset = start.offset\n        let pos = this.fromOffset(offset)\n        line = pos.line\n        column = pos.col\n      } else {\n        line = start.line\n        column = start.column\n        offset = this.fromLineAndColumn(line, column)\n      }\n      if (typeof end.offset === 'number') {\n        endOffset = end.offset\n        let pos = this.fromOffset(endOffset)\n        endLine = pos.line\n        endColumn = pos.col\n      } else {\n        endLine = end.line\n        endColumn = end.column\n        endOffset = this.fromLineAndColumn(end.line, end.column)\n      }\n    } else if (!column) {\n      offset = line\n      let pos = this.fromOffset(offset)\n      line = pos.line\n      column = pos.col\n    } else {\n      offset = this.fromLineAndColumn(line, column)\n    }\n\n    let origin = this.origin(line, column, endLine, endColumn)\n    if (origin) {\n      result = new CssSyntaxError(\n        message,\n        origin.endLine === undefined\n          ? origin.line\n          : { column: origin.column, line: origin.line },\n        origin.endLine === undefined\n          ? origin.column\n          : { column: origin.endColumn, line: origin.endLine },\n        origin.source,\n        origin.file,\n        opts.plugin\n      )\n    } else {\n      result = new CssSyntaxError(\n        message,\n        endLine === undefined ? line : { column, line },\n        endLine === undefined ? column : { column: endColumn, line: endLine },\n        this.css,\n        this.file,\n        opts.plugin\n      )\n    }\n\n    result.input = {\n      column,\n      endColumn,\n      endLine,\n      endOffset,\n      line,\n      offset,\n      source: this.css\n    }\n    if (this.file) {\n      if (pathToFileURL) {\n        result.input.url = pathToFileURL(this.file).toString()\n      }\n      result.input.file = this.file\n    }\n\n    return result\n  }\n\n  fromLineAndColumn(line, column) {\n    let lineToIndex = getLineToIndex(this)\n    let index = lineToIndex[line - 1]\n    return index + column - 1\n  }\n\n  fromOffset(offset) {\n    let lineToIndex = getLineToIndex(this)\n    let lastLine = lineToIndex[lineToIndex.length - 1]\n\n    let min = 0\n    if (offset >= lastLine) {\n      min = lineToIndex.length - 1\n    } else {\n      let max = lineToIndex.length - 2\n      let mid\n      while (min < max) {\n        mid = min + ((max - min) >> 1)\n        if (offset < lineToIndex[mid]) {\n          max = mid - 1\n        } else if (offset >= lineToIndex[mid + 1]) {\n          min = mid + 1\n        } else {\n          min = mid\n          break\n        }\n      }\n    }\n    return {\n      col: offset - lineToIndex[min] + 1,\n      line: min + 1\n    }\n  }\n\n  mapResolve(file) {\n    if (/^\\w+:\\/\\//.test(file)) {\n      return file\n    }\n    return resolve(this.map.consumer().sourceRoot || this.map.root || '.', file)\n  }\n\n  origin(line, column, endLine, endColumn) {\n    if (!this.map) return false\n    let consumer = this.map.consumer()\n\n    let from = consumer.originalPositionFor({ column: column - 1, line })\n    if (!from.source) return false\n\n    let to\n    if (typeof endLine === 'number') {\n      let toPosition = consumer.originalPositionFor({\n        column: endColumn - 1,\n        line: endLine\n      })\n      // The source map may not have a mapping that covers the end position\n      // (`originalPositionFor()` then returns `null` for `line`/`column`\n      // instead of omitting them). Treat that the same as not requesting\n      // an end position at all, so `endLine`/`endColumn` stay a consistent\n      // `undefined` pair instead of a mix of `null` and a bogus number.\n      if (toPosition.source) to = toPosition\n    }\n\n    let fromUrl\n\n    if (isAbsolute(from.source)) {\n      fromUrl = pathToFileURL(from.source)\n    } else {\n      fromUrl = new URL(\n        from.source,\n        this.map.consumer().sourceRoot || pathToFileURL(this.map.mapFile)\n      )\n    }\n\n    let result = {\n      column: from.column + 1,\n      endColumn: to && to.column + 1,\n      endLine: to && to.line,\n      line: from.line,\n      url: fromUrl.toString()\n    }\n\n    if (fromUrl.protocol === 'file:') {\n      if (fileURLToPath) {\n        result.file = fileURLToPath(fromUrl)\n      } else {\n        /* c8 ignore next 2 */\n        throw new Error(`file: protocol is not available in this PostCSS build`)\n      }\n    }\n\n    let source = consumer.sourceContentFor(from.source)\n    if (source) result.source = source\n\n    return result\n  }\n\n  toJSON() {\n    let json = {}\n    for (let name of ['hasBOM', 'css', 'file', 'id']) {\n      if (this[name] != null) {\n        json[name] = this[name]\n      }\n    }\n    if (this.map) {\n      json.map = { ...this.map }\n      if (json.map.consumerCache) {\n        json.map.consumerCache = undefined\n      }\n    }\n    return json\n  }\n}\n\nmodule.exports = Input\nInput.default = Input\n\nif (terminalHighlight && terminalHighlight.registerInput) {\n  terminalHighlight.registerInput(Input)\n}\n","'use strict'\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n  'major',\n  'premajor',\n  'minor',\n  'preminor',\n  'patch',\n  'prepatch',\n  'prerelease',\n]\n\nmodule.exports = {\n  MAX_LENGTH,\n  MAX_SAFE_COMPONENT_LENGTH,\n  MAX_SAFE_BUILD_LENGTH,\n  MAX_SAFE_INTEGER,\n  RELEASE_TYPES,\n  SEMVER_SPEC_VERSION,\n  FLAG_INCLUDE_PRERELEASE: 0b001,\n  FLAG_LOOSE: 0b010,\n}\n","'use strict'\n\nconst debug = (\n  typeof process === 'object' &&\n  process.env &&\n  process.env.NODE_DEBUG &&\n  /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n  : () => {}\n\nmodule.exports = debug\n","'use strict'\n\nconst compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","'use strict'\n\nconst ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n  static get ANY () {\n    return ANY\n  }\n\n  constructor (comp, options) {\n    options = parseOptions(options)\n\n    if (comp instanceof Comparator) {\n      if (comp.loose === !!options.loose) {\n        return comp\n      } else {\n        comp = comp.value\n      }\n    }\n\n    comp = comp.trim().split(/\\s+/).join(' ')\n    debug('comparator', comp, options)\n    this.options = options\n    this.loose = !!options.loose\n    this.parse(comp)\n\n    if (this.semver === ANY) {\n      this.value = ''\n    } else {\n      this.value = this.operator + this.semver.version\n    }\n\n    debug('comp', this)\n  }\n\n  parse (comp) {\n    const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n    const m = comp.match(r)\n\n    if (!m) {\n      throw new TypeError(`Invalid comparator: ${comp}`)\n    }\n\n    this.operator = m[1] !== undefined ? m[1] : ''\n    if (this.operator === '=') {\n      this.operator = ''\n    }\n\n    // if it literally is just '>' or '' then allow anything.\n    if (!m[2]) {\n      this.semver = ANY\n    } else {\n      this.semver = new SemVer(m[2], this.options.loose)\n    }\n  }\n\n  toString () {\n    return this.value\n  }\n\n  test (version) {\n    debug('Comparator.test', version, this.options.loose)\n\n    if (this.semver === ANY || version === ANY) {\n      return true\n    }\n\n    if (typeof version === 'string') {\n      try {\n        version = new SemVer(version, this.options)\n      } catch (er) {\n        return false\n      }\n    }\n\n    return cmp(version, this.operator, this.semver, this.options)\n  }\n\n  intersects (comp, options) {\n    if (!(comp instanceof Comparator)) {\n      throw new TypeError('a Comparator is required')\n    }\n\n    if (this.operator === '') {\n      if (this.value === '') {\n        return true\n      }\n      return new Range(comp.value, options).test(this.value)\n    } else if (comp.operator === '') {\n      if (comp.value === '') {\n        return true\n      }\n      return new Range(this.value, options).test(comp.semver)\n    }\n\n    options = parseOptions(options)\n\n    // Special cases where nothing can possibly be lower\n    if (options.includePrerelease &&\n      (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n      return false\n    }\n    if (!options.includePrerelease &&\n      (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n      return false\n    }\n\n    // Same direction increasing (> or >=)\n    if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n      return true\n    }\n    // Same direction decreasing (< or <=)\n    if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // same SemVer and both sides are inclusive (<= or >=)\n    if (\n      (this.semver.version === comp.semver.version) &&\n      this.operator.includes('=') && comp.operator.includes('=')) {\n      return true\n    }\n    // opposite directions less than\n    if (cmp(this.semver, '<', comp.semver, options) &&\n      this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n      return true\n    }\n    // opposite directions greater than\n    if (cmp(this.semver, '>', comp.semver, options) &&\n      this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n      return true\n    }\n    return false\n  }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","export const TASK_CANCELATION_NAME = 'TaskCancelation';\n\n/**\n * Returns true if the object passed to it is a TaskCancelation error.\n * If you call `someTask.perform().catch(...)` or otherwise treat\n * a {@linkcode TaskInstance} like a promise, you may need to\n * handle the cancelation of a TaskInstance differently from\n * other kinds of errors it might throw, and you can use this\n * convenience function to distinguish cancelation from errors.\n *\n * ```js\n * click() {\n *   this.myTask.perform().catch(e => {\n *     if (!didCancel(e)) { throw e; }\n *   });\n * }\n * ```\n *\n * @param {object} error the caught error, which might be a TaskCancelation\n * @returns {boolean}\n */\nexport function didCancel(e) {\n  return e && e.name === TASK_CANCELATION_NAME;\n}\n\nexport const CANCEL_KIND_EXPLICIT = 'explicit';\nexport const CANCEL_KIND_YIELDABLE_CANCEL = 'yielded';\nexport const CANCEL_KIND_LIFESPAN_END = 'lifespan_end';\nexport const CANCEL_KIND_PARENT_CANCEL = 'parent_cancel';\n\nexport class CancelRequest {\n  constructor(kind, reason) {\n    this.kind = kind;\n    this.reason = reason;\n    this.promise = new Promise((resolve) => {\n      this.finalize = resolve;\n    });\n  }\n}\n","export default function esCompat(m) {\n  return m?.__esModule ? m : { default: m, ...m };\n}\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { HdsInteractiveSignature } from '../interactive/index.gts';\n\ntype HdsIntlLike = {\n  t(key: string, options: { default: string; [key: string]: unknown }): string;\n};\n\nexport enum HdsPaginationDirectionValues {\n  Next = 'next',\n  Prev = 'prev',\n}\n\nexport type HdsPaginationDirections = `${HdsPaginationDirectionValues}`;\n\nexport type HdsPaginationPage = HdsPaginationDirections | number;\n\n// Aria labels for nav arrow buttons\nexport const HDS_PAGINATION_DIRECTION_ARIA_LABEL_KEYS = {\n  [HdsPaginationDirectionValues.Prev]:\n    'hds.components.pagination.nav.arrow.aria-label.direction.prev',\n  [HdsPaginationDirectionValues.Next]:\n    'hds.components.pagination.nav.arrow.aria-label.direction.next',\n} as const;\n\nexport function getHdsPaginationDirectionAriaLabel(\n  direction: HdsPaginationDirections,\n  intl: HdsIntlLike\n): string {\n  const key =\n    HDS_PAGINATION_DIRECTION_ARIA_LABEL_KEYS[\n      direction as HdsPaginationDirectionValues\n    ];\n  const defaults = {\n    [HdsPaginationDirectionValues.Prev]: 'Previous page',\n    [HdsPaginationDirectionValues.Next]: 'Next page',\n  } as const;\n\n  return intl.t(key, {\n    default: defaults[direction as HdsPaginationDirectionValues],\n  });\n}\n\n// Display \"label\" text for nav arrow buttons\nexport const HDS_PAGINATION_DIRECTION_LABEL_KEYS = {\n  [HdsPaginationDirectionValues.Prev]:\n    'hds.components.pagination.nav.arrow.label.direction.prev',\n  [HdsPaginationDirectionValues.Next]:\n    'hds.components.pagination.nav.arrow.label.direction.next',\n} as const;\n\nexport function getHdsPaginationDirectionLabel(\n  direction: HdsPaginationDirections,\n  intl: HdsIntlLike\n): string {\n  const key =\n    HDS_PAGINATION_DIRECTION_LABEL_KEYS[\n      direction as HdsPaginationDirectionValues\n    ];\n  const defaults = {\n    [HdsPaginationDirectionValues.Prev]: 'Previous',\n    [HdsPaginationDirectionValues.Next]: 'Next',\n  } as const;\n\n  return intl.t(key, {\n    default: defaults[direction as HdsPaginationDirectionValues],\n  });\n}\n\nexport type HdsPaginationElliptizedPageArrayItem = string | number;\n\nexport type HdsPaginationElliptizedPageArray =\n  HdsPaginationElliptizedPageArrayItem[];\n\nexport type HdsPaginationRoutingProps = Pick<\n  HdsInteractiveSignature['Args'],\n  'route' | 'model' | 'models' | 'replace'\n>;\n","exports.L = { bit: 1 }\nexports.M = { bit: 0 }\nexports.Q = { bit: 3 }\nexports.H = { bit: 2 }\n\nfunction fromString (string) {\n  if (typeof string !== 'string') {\n    throw new Error('Param is not a string')\n  }\n\n  const lcStr = string.toLowerCase()\n\n  switch (lcStr) {\n    case 'l':\n    case 'low':\n      return exports.L\n\n    case 'm':\n    case 'medium':\n      return exports.M\n\n    case 'q':\n    case 'quartile':\n      return exports.Q\n\n    case 'h':\n    case 'high':\n      return exports.H\n\n    default:\n      throw new Error('Unknown EC Level: ' + string)\n  }\n}\n\nexports.isValid = function isValid (level) {\n  return level && typeof level.bit !== 'undefined' &&\n    level.bit >= 0 && level.bit < 4\n}\n\nexports.from = function from (value, defaultValue) {\n  if (exports.isValid(value)) {\n    return value\n  }\n\n  try {\n    return fromString(value)\n  } catch (e) {\n    return defaultValue\n  }\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nexport interface HdsButtonSetSignature {\n  Blocks: { default: [] };\n  Element: HTMLDivElement;\n}\nconst HdsButtonSet: TemplateOnlyComponent<HdsButtonSetSignature> = <template>\n  <div class=\"hds-button-set\" ...attributes>\n    {{yield}}\n  </div>\n</template>;\n\nexport default HdsButtonSet;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert, deprecate } from '@ember/debug';\nimport { guidFor } from '@ember/object/internals';\nimport { tracked } from '@glimmer/tracking';\nimport { eq } from 'ember-truth-helpers';\nimport { hash } from '@ember/helper';\nimport { on } from '@ember/modifier';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\n\nimport type { WithBoundArgs } from '@glint/template';\nimport type Owner from '@ember/owner';\n\nimport { HdsAlertColorValues, HdsAlertTypeValues } from './types.ts';\nimport HdsDismissButton from '../dismiss-button/index.gts';\nimport HdsIcon from '../icon/index.gts';\nimport HdsAlertTitle from './title.gts';\nimport HdsAlertDescription from './description.gts';\nimport HdsButton from '../button/index.gts';\nimport HdsLinkStandalone from '../link/standalone.gts';\nimport HdsYield from '../yield/index.gts';\n\nimport type { HdsAlertColors, HdsAlertTypes } from './types.ts';\nimport type { HdsIconSignature } from '../icon/index.gts';\n\nclass HdsAlertGenericDeprecated extends Component<{ Blocks: { default: [] } }> {\n  constructor(owner: Owner, args: Record<string, never>) {\n    super(owner, args);\n    deprecate(\n      'The \"Generic\" contextual component yielded by \"Hds::Alert\" is deprecated. Use \"GenericContent\" or \"GenericFooter\" instead.',\n      false,\n      {\n        id: 'hds.alert.use-generic-above-or-generic-below',\n        until: '7.0.0',\n        for: '@hashicorp/design-system-components',\n        since: { available: '6.2.1' },\n      }\n    );\n  }\n  <template>\n    {{! template-lint-disable no-yield-only }}\n    {{yield}}\n  </template>\n}\n\nexport const TYPES: HdsAlertTypes[] = Object.values(HdsAlertTypeValues);\nexport const DEFAULT_COLOR: HdsAlertColors = HdsAlertColorValues.Neutral;\nexport const COLORS: HdsAlertColors[] = Object.values(HdsAlertColorValues);\n\nexport const MAPPING_COLORS_TO_ICONS = {\n  [HdsAlertColorValues.Neutral]: 'info',\n  [HdsAlertColorValues.Highlight]: 'info',\n  [HdsAlertColorValues.Success]: 'check-circle',\n  [HdsAlertColorValues.Warning]: 'alert-triangle',\n  [HdsAlertColorValues.Critical]: 'alert-diamond',\n} as const;\n\nconst CONTENT_ELEMENT_SELECTOR = '.hds-alert__content';\nconst TITLE_ELEMENT_SELECTOR = '.hds-alert__title';\nconst DESCRIPTION_ELEMENT_SELECTOR = '.hds-alert__description';\n\nexport interface HdsAlertSignature {\n  Args: {\n    type: HdsAlertTypes;\n    color?: HdsAlertColors;\n    icon?: HdsIconSignature['Args']['name'] | false;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    onDismiss?: (event: MouseEvent, ...args: any[]) => void;\n  };\n  Blocks: {\n    default: [\n      {\n        Title?: typeof HdsAlertTitle;\n        Description?: typeof HdsAlertDescription;\n        /**\n         * @deprecated Use \"GenericContent\" or \"GenericFooter\" instead.\n         */\n        Generic?: typeof HdsAlertGenericDeprecated;\n        GenericContent?: typeof HdsYield;\n        GenericFooter?: typeof HdsYield;\n        LinkStandalone?: WithBoundArgs<typeof HdsLinkStandalone, 'size'>;\n        Button?: WithBoundArgs<typeof HdsButton, 'size'>;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsAlert extends Component<HdsAlertSignature> {\n  @tracked private _role?: string;\n  @tracked private _ariaLabelledBy?: string;\n\n  constructor(owner: Owner, args: HdsAlertSignature['Args']) {\n    super(owner, args);\n\n    assert(\n      `@type for \"Hds::Alert\" must be one of the following: ${TYPES.join(\n        ', '\n      )}; received: ${this.args.type}`,\n      TYPES.includes(this.args.type)\n    );\n  }\n\n  get color(): HdsAlertColors {\n    const { color = DEFAULT_COLOR } = this.args;\n\n    assert(\n      `@color for \"Hds::Alert\" must be one of the following: ${COLORS.join(\n        ', '\n      )}; received: ${color}`,\n      COLORS.includes(color)\n    );\n\n    return color;\n  }\n\n  get icon(): HdsIconSignature['Args']['name'] | false {\n    const { icon } = this.args;\n\n    // If `icon` isn't passed, use the pre-defined one from `color`\n    if (icon === undefined) {\n      if (this.args.type === 'compact') {\n        // for the \"compact\" type by default we use filled icons\n        return `${MAPPING_COLORS_TO_ICONS[this.color]}-fill`;\n      } else {\n        // for all the other types by default we use outlined icons\n        return MAPPING_COLORS_TO_ICONS[this.color];\n      }\n      // If `icon` is set explicitly to false, user doesn't want any icon in the alert\n    } else if (icon === false) {\n      assert(\n        `@icon for \"Hds::Alert\" with @type \"compact\" is required`,\n        this.args.type !== 'compact'\n      );\n\n      return false;\n    } else {\n      // If a name for `icon` is passed, set HdsIcon to that name\n      return icon;\n    }\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  get onDismiss(): ((event: MouseEvent, ...args: any[]) => void) | false {\n    const { onDismiss } = this.args;\n\n    if (typeof onDismiss === 'function') {\n      return onDismiss;\n    } else {\n      return false;\n    }\n  }\n\n  get iconSize(): HdsIconSignature['Args']['size'] {\n    if (this.args.type === 'compact') {\n      return '16';\n    } else {\n      return '24';\n    }\n  }\n\n  get classNames(): string {\n    const classes = ['hds-alert'];\n\n    // Add a class based on the @type argument\n    classes.push(`hds-alert--type-${this.args.type}`);\n\n    // Add a class based on the @color argument\n    classes.push(`hds-alert--color-${this.color}`);\n\n    return classes.join(' ');\n  }\n\n  didInsert = (element: HTMLDivElement): void => {\n    const actions = element.querySelectorAll(\n      `${CONTENT_ELEMENT_SELECTOR} button, ${CONTENT_ELEMENT_SELECTOR} a`\n    );\n\n    // an Alert which actually alerts users (has role=\"alert\" & aria-live=\"polite\") as opposed to an informational or promo \"alert\"\n    const isSemanticAlert: boolean =\n      this.color === 'warning' ||\n      this.color === 'critical' ||\n      this.color === 'success';\n\n    if (isSemanticAlert && actions.length) {\n      this._role = 'alertdialog';\n    } else if (isSemanticAlert) {\n      this._role = 'alert';\n    }\n\n    // `alertdialog` must have an accessible name so we use either the\n    // title or the description as label for the alert\n    const label =\n      element.querySelector(TITLE_ELEMENT_SELECTOR) ||\n      element.querySelector(DESCRIPTION_ELEMENT_SELECTOR);\n    if (label) {\n      const labelId = label.getAttribute('id') || guidFor(element);\n      label.setAttribute('id', labelId);\n      this._ariaLabelledBy = labelId;\n    }\n  };\n\n  <template>\n    <div\n      class={{this.classNames}}\n      role={{this._role}}\n      aria-live={{if this._role \"polite\"}}\n      aria-labelledby={{this._ariaLabelledBy}}\n      {{didInsert this.didInsert}}\n      ...attributes\n    >\n      {{#if this.icon}}\n        <div class=\"hds-alert__icon\">\n          <HdsIcon\n            @name={{this.icon}}\n            @size={{this.iconSize}}\n            @stretched={{true}}\n          />\n        </div>\n      {{/if}}\n\n      <div class=\"hds-alert__content\">\n        <div\n          class=\"hds-alert__text\n            {{if\n              (eq @type 'compact')\n              'hds-typography-body-100'\n              'hds-typography-body-200'\n            }}\"\n        >\n          {{yield (hash Title=HdsAlertTitle)}}\n          {{yield (hash Description=HdsAlertDescription)}}\n        </div>\n\n        {{yield (hash GenericContent=HdsYield)}}\n\n        <div class=\"hds-alert__actions\">\n          {{yield\n            (hash\n              Button=(component HdsButton size=\"small\")\n              LinkStandalone=(component HdsLinkStandalone size=\"small\")\n            )\n          }}\n        </div>\n\n        {{yield (hash Generic=HdsAlertGenericDeprecated)}}\n        {{yield (hash GenericFooter=HdsYield)}}\n      </div>\n\n      {{#if this.onDismiss}}\n        <HdsDismissButton\n          class=\"hds-alert__dismiss\"\n          {{on \"click\" this.onDismiss}}\n        />\n      {{/if}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { schedule } from '@ember/runloop';\nimport { guidFor } from '@ember/object/internals';\nimport { hash } from '@ember/helper';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didUpdate from '@ember/render-modifiers/modifiers/did-update';\n\nexport interface HdsDisclosurePrimitiveSignature {\n  Args: {\n    isOpen?: boolean;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    onClose?: (...args: any[]) => void;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    onClickToggle?: (...args: any[]) => void;\n  };\n  Blocks: {\n    toggle: [\n      {\n        contentId: string;\n        isOpen: boolean;\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        onClickToggle: (...args: any[]) => void;\n      },\n    ];\n    content: [\n      {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        close: (...args: any[]) => void;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsDisclosurePrimitive extends Component<HdsDisclosurePrimitiveSignature> {\n  @tracked private _isOpen = false;\n  @tracked private _isControlled = this.args.isOpen !== undefined;\n  private _contentId = 'content-' + guidFor(this);\n\n  get isOpen(): boolean {\n    if (this._isControlled) {\n      // if the state is controlled from outside, the argument overrides the internal state\n      return this.args.isOpen ?? this._isOpen;\n    } else {\n      // if the state changes internally, the internal state overrides the argument\n      return this._isOpen;\n    }\n  }\n\n  set isOpen(value) {\n    this._isOpen = value || false;\n  }\n\n  onClickToggle = (): void => {\n    this.isOpen = !this.isOpen;\n    this._isControlled = false;\n    // we call the \"onClickToggle\" callback if it exists and it's a function\n    if (\n      this.args.onClickToggle &&\n      typeof this.args.onClickToggle === 'function'\n    ) {\n      this.args.onClickToggle(this.isOpen);\n    }\n  };\n\n  onStateChange = () => {\n    if (this.args.isOpen !== undefined) {\n      this.isOpen = this.args.isOpen;\n    }\n    this._isControlled = true;\n  };\n\n  close = (): void => {\n    // we schedule this afterRender to avoid an error in tests caused by updating `isOpen` multiple times in the same computation\n    // eslint-disable-next-line ember/no-runloop\n    schedule('afterRender', (): void => {\n      this.isOpen = false;\n      // we call the \"onClose\" callback if it exists (and is a function)\n      if (this.args.onClose && typeof this.args.onClose === 'function') {\n        this.args.onClose();\n      }\n    });\n  };\n\n  <template>\n    <div\n      class=\"hds-disclosure-primitive\"\n      {{didUpdate this.onStateChange @isOpen}}\n      ...attributes\n    >\n      <div class=\"hds-disclosure-primitive__toggle\">\n        {{yield\n          (hash\n            onClickToggle=this.onClickToggle\n            isOpen=this.isOpen\n            contentId=this._contentId\n          )\n          to=\"toggle\"\n        }}\n      </div>\n      <div class=\"hds-disclosure-primitive__content\" id={{this._contentId}}>\n        {{#if this.isOpen}}\n          {{yield (hash close=this.close) to=\"content\"}}\n        {{/if}}\n      </div>\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { service } from '@ember/service';\nimport { isArray } from '@ember/array';\nimport { modifier } from 'ember-modifier';\nimport { guidFor } from '@ember/object/internals';\nimport { hash } from '@ember/helper';\nimport { on } from '@ember/modifier';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport { NUMERICAL_SELECTORS_TEXT } from './filter-group/numerical.gts';\nimport { DATE_SELECTORS_TEXT } from './filter-group/date.gts';\nimport hdsT from '../../../helpers/hds-t.ts';\nimport HdsYield from '../yield/index.gts';\nimport HdsFilterBarActionsDropdown from './actions-dropdown.gts';\nimport HdsFilterBarFiltersDropdown from './filters-dropdown.gts';\nimport HdsLayoutFlex from '../layout/flex/index.gts';\nimport HdsFormTextInputBase from '../form/text-input/base.gts';\nimport HdsButton from '../button/index.gts';\nimport HdsSeparator from '../separator/index.gts';\nimport HdsTextBody from '../text/body.gts';\nimport HdsFilterBarAppliedFilters from './applied-filters.gts';\n\nimport type HdsIntlService from '../../../services/hds-intl.ts';\nimport type {\n  HdsFilterBarFilters,\n  HdsFilterBarFilter,\n  HdsFilterBarFilterType,\n  HdsFilterBarData,\n  HdsFilterBarGenericFilterData,\n} from './types.ts';\n\nexport interface HdsFilterBarSignature {\n  Args: {\n    filters: HdsFilterBarFilters;\n    isLiveFilter?: boolean;\n    hasSearch?: boolean;\n    searchPlaceholder?: string;\n    searchAriaLabel?: string;\n    onFilter?: (filters: HdsFilterBarFilters) => void;\n  };\n  Blocks: {\n    default?: [\n      {\n        FiltersDropdown?: WithBoundArgs<\n          typeof HdsFilterBarFiltersDropdown,\n          'filters' | 'isLiveFilter' | 'onFilter'\n        >;\n        ActionsDropdown?: WithBoundArgs<\n          typeof HdsFilterBarActionsDropdown,\n          never\n        >;\n        ActionsGeneric?: typeof HdsYield;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsFilterBar extends Component<HdsFilterBarSignature> {\n  @service hdsIntl!: HdsIntlService;\n\n  @tracked _isExpanded: boolean = this.hasActiveFilters;\n\n  private _dropdownToggleElement!: HTMLDivElement;\n  private _appliedFiltersButtonId = 'applied-filters-button-' + guidFor(this);\n  private _appliedFiltersContentId = 'applied-filters-content-' + guidFor(this);\n\n  private _setUpFilterBar = modifier((element: HTMLDivElement) => {\n    this._dropdownToggleElement = element.querySelector(\n      '.hds-filter-bar__filters-dropdown .hds-dropdown-toggle-button'\n    ) as HTMLDivElement;\n\n    // Align the expanded state with the presence of active filters\n    this._isExpanded = this.hasActiveFilters;\n  });\n\n  get searchValue(): string {\n    const { filters } = this.args;\n    if (filters['search']) {\n      return this._getFilterValueText(filters['search']);\n    }\n    return '';\n  }\n\n  get searchPlaceholder(): string {\n    return (\n      this.args.searchPlaceholder ||\n      this.hdsIntl.t('hds.components.filter-bar.search.placeholder', {\n        default: 'Search',\n      })\n    );\n  }\n\n  get searchAriaLabel(): string {\n    return (\n      this.args.searchAriaLabel ||\n      this.hdsIntl.t('hds.components.filter-bar.search.aria-label', {\n        default: 'Search',\n      })\n    );\n  }\n\n  get hasActiveFilters(): boolean {\n    return Object.keys(this.args.filters).length > 0;\n  }\n\n  onFilter = (filters: HdsFilterBarFilters): void => {\n    const { onFilter } = this.args;\n    if (onFilter && typeof onFilter === 'function') {\n      onFilter(filters);\n\n      if (Object.keys(filters).length > 0) {\n        this._isExpanded = true;\n      } else {\n        this._isExpanded = false;\n      }\n    }\n  };\n\n  clearFilters = (): void => {\n    const { onFilter } = this.args;\n    if (onFilter && typeof onFilter === 'function') {\n      onFilter({});\n      this._isExpanded = false;\n    }\n    this._dropdownToggleElement?.focus();\n  };\n\n  onSearch = (event: Event): void => {\n    const { filters } = this.args;\n    const input = event.target as HTMLInputElement;\n    const value = input?.value;\n\n    const newFilters = this._copyFilters(filters);\n\n    if (value.length > 0) {\n      newFilters['search'] = {\n        type: 'search',\n        text: 'Search',\n        data: { value },\n      };\n    } else {\n      delete newFilters['search'];\n    }\n\n    this.onFilter({ ...newFilters });\n  };\n\n  toggleExpand = (): void => {\n    this._isExpanded = !this._isExpanded;\n  };\n\n  private _copyFilters = (\n    filters: HdsFilterBarFilters\n  ): HdsFilterBarFilters => {\n    const newFilters = {} as HdsFilterBarFilters;\n\n    // Note: Due to the filters being an Ember object, structuredClone cannot be used here.\n    Object.keys(filters).forEach((k) => {\n      newFilters[k] = JSON.parse(\n        JSON.stringify(filters[k])\n      ) as HdsFilterBarFilter;\n    });\n\n    return newFilters;\n  };\n\n  private _onFilterDismiss = (key: string, filterValue?: unknown): void => {\n    const { filters } = this.args;\n    if (filters && filters[key]) {\n      const keyFilter: HdsFilterBarFilter = filters[key];\n      const newFilters = this._copyFilters(filters);\n\n      if (\n        (keyFilter.type === 'multi-select' && isArray(keyFilter.data)) ||\n        (keyFilter.type === 'generic' && isArray(keyFilter.data))\n      ) {\n        const newKeyfilter = keyFilter.data?.filter(\n          (item) => item.value !== filterValue\n        );\n        if (newKeyfilter.length === 0) {\n          delete newFilters[key];\n        } else {\n          newFilters[key] = {\n            type: keyFilter.type,\n            text: keyFilter.text,\n            data: newKeyfilter,\n          };\n        }\n      } else {\n        delete newFilters[key];\n      }\n\n      this.onFilter({ ...newFilters });\n    }\n    this._dropdownToggleElement?.focus();\n  };\n\n  private _filterData = (\n    data: HdsFilterBarData\n  ): HdsFilterBarGenericFilterData => {\n    const result = {\n      value: '',\n    } as HdsFilterBarGenericFilterData;\n    if ('value' in data) {\n      result.value = data.value;\n    }\n    if ('label' in data) {\n      result.label = data.label;\n    }\n    return result;\n  };\n\n  private _getFilterValueText = (filter: HdsFilterBarFilter): string => {\n    const result = this._filterData(filter.data);\n    const resultLabel = result?.label as string;\n    const resultValue = result?.value as string;\n    return resultLabel ?? resultValue;\n  };\n\n  private _getFilterKeyText = (\n    key: string,\n    data: HdsFilterBarFilter\n  ): string => {\n    if (data.text) {\n      return data.text;\n    } else {\n      return key;\n    }\n  };\n\n  private _getNumericalFilterValueText = (\n    filter: HdsFilterBarFilter\n  ): string => {\n    const data = filter.data;\n\n    if (filter.type === 'numerical' && 'selector' in data && 'value' in data) {\n      const selector = data.selector as keyof typeof NUMERICAL_SELECTORS_TEXT;\n      if (\n        selector === 'between' &&\n        typeof data.value === 'object' &&\n        data.value !== null\n      ) {\n        const separatorText = this.hdsIntl.t(\n          'hds.components.filter-bar.tag.numerical-filter.separator',\n          {\n            default: 'and',\n          }\n        );\n        return `${NUMERICAL_SELECTORS_TEXT[selector]} ${data.value.start} ${separatorText} ${data.value.end}`;\n      } else if (typeof data.value !== 'object') {\n        return `${NUMERICAL_SELECTORS_TEXT[selector]} ${data.value}`;\n      }\n      return '';\n    } else {\n      return '';\n    }\n  };\n\n  private _getDateFilterValueText = (filter: HdsFilterBarFilter): string => {\n    const data = filter.data;\n\n    if (\n      (filter.type === 'date' ||\n        filter.type === 'datetime' ||\n        filter.type === 'time') &&\n      'selector' in data &&\n      'value' in data\n    ) {\n      const selector = data.selector as keyof typeof DATE_SELECTORS_TEXT;\n      if (\n        selector === 'between' &&\n        typeof data.value === 'object' &&\n        data.value !== null\n      ) {\n        const separatorText = this.hdsIntl.t(\n          'hds.components.filter-bar.tag.date-filter.separator',\n          {\n            default: 'and',\n          }\n        );\n        const startDateText = this._formatDateFilterText(\n          data.value.start as string,\n          filter.type\n        );\n        const endDateText = this._formatDateFilterText(\n          data.value.end as string,\n          filter.type\n        );\n        return `${DATE_SELECTORS_TEXT[selector]} ${startDateText} ${separatorText} ${endDateText}`;\n      } else if (data.value !== null && typeof data.value !== 'object') {\n        const dateText = this._formatDateFilterText(\n          data.value as string,\n          filter.type\n        );\n        return `${DATE_SELECTORS_TEXT[selector]} ${dateText}`;\n      }\n      return '';\n    } else {\n      return '';\n    }\n  };\n\n  private _formatDateFilterText = (\n    dateString: string,\n    filterType: HdsFilterBarFilterType\n  ): string => {\n    let date;\n    if (filterType === 'time') {\n      date = new Date(`1970-01-01T${dateString}`);\n    } else {\n      date = new Date(dateString);\n    }\n\n    let options = {};\n    if (filterType === 'date') {\n      options = { dateStyle: 'short' };\n    } else if (filterType === 'time') {\n      options = { timeStyle: 'short' };\n    } else {\n      options = { dateStyle: 'short', timeStyle: 'short' };\n    }\n\n    const newDate = new Intl.DateTimeFormat(undefined, options);\n    return newDate.format(date);\n  };\n\n  private _getGenericFilterValueText = (filter: HdsFilterBarFilter): string => {\n    if ('dismissTagText' in filter) {\n      return filter.dismissTagText ?? '';\n    } else {\n      return '';\n    }\n  };\n\n  private _getMultiSelectFilterData = (\n    data: HdsFilterBarData\n  ): { value: unknown; label?: string }[] => {\n    if (isArray(data)) {\n      return data.map((item) => this._filterData(item));\n    }\n    return [];\n  };\n\n  <template>\n    <div class=\"hds-filter-bar\" ...attributes {{this._setUpFilterBar}}>\n      {{#if @isLiveFilter}}\n        <span class=\"sr-only\">{{hdsT\n            \"hds.components.filter-bar.live-filtering\"\n            default=\"Filters will be applied automatically as selections are made\"\n          }}</span>\n      {{/if}}\n      <HdsLayoutFlex\n        @align=\"center\"\n        @wrap={{true}}\n        @gap=\"8\"\n        class=\"hds-filter-bar__actions\"\n      >\n        <div class=\"hds-filter-bar__actions__left\">\n          <HdsButton\n            @text={{hdsT\n              \"hds.components.filter-bar.applied-filters.toggle-button\"\n              default=\"View applied filters\"\n            }}\n            @color=\"secondary\"\n            @size=\"small\"\n            @icon={{if this._isExpanded \"unfold-close\" \"unfold-open\"}}\n            @isIconOnly={{true}}\n            id={{this._appliedFiltersButtonId}}\n            aria-controls={{this._appliedFiltersContentId}}\n            aria-expanded={{if this._isExpanded \"true\" \"false\"}}\n            class=\"hds-filter-bar__applied-filters-toggle-button\"\n            {{on \"click\" this.toggleExpand}}\n          />\n          {{yield\n            (hash\n              FiltersDropdown=(component\n                HdsFilterBarFiltersDropdown\n                filters=@filters\n                isLiveFilter=@isLiveFilter\n                onFilter=this.onFilter\n              )\n            )\n          }}\n          {{#if @hasSearch}}\n            <HdsFormTextInputBase\n              @type=\"search\"\n              @value={{this.searchValue}}\n              class=\"hds-filter-bar__search\"\n              placeholder={{this.searchPlaceholder}}\n              aria-label={{this.searchAriaLabel}}\n              name=\"search\"\n              {{on \"change\" this.onSearch}}\n            />\n          {{/if}}\n        </div>\n        {{yield (hash ActionsGeneric=HdsYield)}}\n        {{yield (hash ActionsDropdown=HdsFilterBarActionsDropdown)}}\n      </HdsLayoutFlex>\n      <div\n        class=\"hds-filter-bar__applied-filters-list\"\n        id={{this._appliedFiltersContentId}}\n      >\n        {{#if this._isExpanded}}\n          <HdsSeparator @spacing=\"0\" />\n          <div class=\"hds-filter-bar__applied-filters-list__content\">\n            {{#if this.hasActiveFilters}}\n              <HdsFilterBarAppliedFilters\n                @filters={{@filters}}\n                @onFilterDismiss={{this._onFilterDismiss}}\n              />\n              <HdsButton\n                class=\"hds-filter-bar__clear-button\"\n                @text={{hdsT\n                  \"hds.components.filter-bar.applied-filters.clear-filters\"\n                  default=\"Clear all filters\"\n                }}\n                @color=\"tertiary\"\n                @icon=\"x\"\n                @size=\"small\"\n                {{on \"click\" this.clearFilters}}\n              />\n            {{else}}\n              <HdsTextBody @size={{100}} @color=\"faint\">\n                {{hdsT\n                  \"hds.components.filter-bar.applied-filters.no-filters-applied\"\n                  default=\"No filters applied\"\n                }}\n              </HdsTextBody>\n            {{/if}}\n          </div>\n        {{/if}}\n      </div>\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport { hash } from '@ember/helper';\n\nimport HdsYield from '../../yield/index.gts';\nimport HdsFormField from '../field/index.gts';\nimport HdsFormSelectBase from './base.gts';\n\nimport type { HdsFormFieldSignature } from '../field/index.gts';\nimport type { HdsFormSelectBaseSignature } from './base.gts';\n\nexport interface HdsFormSelectFieldSignature {\n  Args: Omit<HdsFormFieldSignature['Args'], 'contextualClass' | 'layout'> &\n    HdsFormSelectBaseSignature['Args'];\n  Blocks: {\n    default: [\n      {\n        Label?: HdsFormFieldSignature['Blocks']['default'][0]['Label'];\n        HelperText?: HdsFormFieldSignature['Blocks']['default'][0]['HelperText'];\n        Error?: HdsFormFieldSignature['Blocks']['default'][0]['Error'];\n        Options?: typeof HdsYield;\n      },\n    ];\n  };\n  Element: HdsFormSelectBaseSignature['Element'];\n}\n\nconst HdsFormSelectField: TemplateOnlyComponent<HdsFormSelectFieldSignature> =\n  <template>\n    <HdsFormField\n      @layout=\"vertical\"\n      @extraAriaDescribedBy={{@extraAriaDescribedBy}}\n      @isRequired={{@isRequired}}\n      @isOptional={{@isOptional}}\n      @id={{@id}}\n      as |F|\n    >\n      {{! Notice: the order of the elements is not relevant here, because is controlled at \"HdsFormField\" component level }}\n      {{yield (hash Label=F.Label HelperText=F.HelperText Error=F.Error)}}\n      <F.Control>\n        <HdsFormSelectBase\n          @isInvalid={{@isInvalid}}\n          @width={{@width}}\n          required={{@isRequired}}\n          ...attributes\n          id={{F.id}}\n          aria-describedby={{F.ariaDescribedBy}}\n          as |S|\n        >\n          {{yield (hash Options=S.Options)}}\n        </HdsFormSelectBase>\n      </F.Control>\n    </HdsFormField>\n  </template>;\n\nexport default HdsFormSelectField;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\n\nimport HdsBadge from '../../badge/index.gts';\nimport hdsT from '../../../../helpers/hds-t.ts';\n\nimport type { HdsTextBodySignature } from '../../text/body.gts';\nimport type { HdsBadgeSignature } from '../../badge/index.gts';\n\nexport interface HdsFormIndicatorSignature {\n  Args: {\n    isOptional?: boolean;\n    isRequired?: boolean;\n  };\n  Element: HdsTextBodySignature['Element'] | HdsBadgeSignature['Element'];\n}\n\nexport default class HdsFormIndicator extends Component<HdsFormIndicatorSignature> {\n  get classNames(): string {\n    const classes = ['hds-form-indicator'];\n\n    if (this.args.isOptional) {\n      // add specific class for \"optional\" indicator\n      classes.push('hds-form-indicator--optional');\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    {{#if @isOptional}}\n      <span class={{this.classNames}}>\n        ({{hdsT\n          \"hds.components.form.common.optional_field_indicator\"\n          default=\"Optional\"\n        }})\n      </span>\n    {{/if}}\n    {{#if @isRequired}}\n      &nbsp;<HdsBadge\n        aria-hidden=\"true\"\n        class={{this.classNames}}\n        @size=\"small\"\n        @color=\"neutral\"\n        @text={{hdsT\n          \"hds.components.form.common.required_field_indicator\"\n          default=\"Required\"\n        }}\n      />\n    {{/if}}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { modifier, type PositionalArgs } from 'ember-modifier';\nimport { on } from '@ember/modifier';\nimport { gt } from 'ember-truth-helpers';\n\nimport hdsT from '../../../../helpers/hds-t.ts';\nimport HdsTextBody from '../../text/body.gts';\nimport HdsIcon from '../../icon/index.gts';\n\nexport interface HdsFilterBarTabsTabModifierSignature {\n  Args: {\n    insertCallbackFunction?: (element: HTMLButtonElement) => void;\n    destroyCallbackFunction?: (element: HTMLButtonElement) => void;\n  };\n  Element: HTMLButtonElement;\n}\n\nexport interface HdsFilterBarTabsTabSignature {\n  Args: {\n    selectedTabIndex?: number;\n    tabIds?: string[];\n    panelIds?: string[];\n    numFilters?: number;\n    didInsertNode?: (element: HTMLElement, tabId: string) => void;\n    willDestroyNode?: (element: HTMLButtonElement) => void;\n    onClick?: (event: MouseEvent, nodeIndex: number) => void;\n    onKeydown?: (event: KeyboardEvent, nodeIndex: number) => void;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLLIElement;\n}\n\nexport default class HdsFilterBarTabsTab extends Component<HdsFilterBarTabsTabSignature> {\n  private _tabId = 'tab-' + guidFor(this);\n\n  private _setUpTab = modifier(\n    (\n      element: HTMLButtonElement,\n      positional: PositionalArgs<HdsFilterBarTabsTabModifierSignature>,\n      named: HdsFilterBarTabsTabModifierSignature['Args']\n    ) => {\n      if (typeof named.insertCallbackFunction === 'function') {\n        named.insertCallbackFunction(element);\n      }\n\n      return () => {\n        if (typeof named.destroyCallbackFunction === 'function') {\n          named.destroyCallbackFunction(element);\n        }\n      };\n    }\n  );\n\n  get nodeIndex(): number | undefined {\n    return this.args.tabIds?.indexOf(this._tabId);\n  }\n\n  get coupledPanelId(): string | undefined {\n    return this.nodeIndex !== undefined\n      ? this.args.panelIds?.[this.nodeIndex]\n      : undefined;\n  }\n\n  get isSelected(): boolean {\n    return (\n      this.nodeIndex !== undefined &&\n      this.nodeIndex === this.args.selectedTabIndex\n    );\n  }\n\n  didInsertNode = (element: HTMLButtonElement): void => {\n    const { didInsertNode } = this.args;\n\n    if (typeof didInsertNode === 'function') {\n      didInsertNode(element, this._tabId);\n    }\n  };\n\n  willDestroyNode = (element: HTMLButtonElement): void => {\n    const { willDestroyNode } = this.args;\n\n    if (typeof willDestroyNode === 'function') {\n      willDestroyNode(element);\n    }\n  };\n\n  onClick = (event: MouseEvent): void => {\n    const { onClick } = this.args;\n\n    if (this.nodeIndex !== undefined && typeof onClick === 'function') {\n      onClick(event, this.nodeIndex);\n    }\n  };\n\n  onKeydown = (event: KeyboardEvent): void => {\n    const { onKeydown } = this.args;\n\n    if (this.nodeIndex !== undefined && typeof onKeydown === 'function') {\n      onKeydown(event, this.nodeIndex);\n    }\n  };\n\n  get classNames(): string {\n    const classes = ['hds-filter-bar__tabs__tab'];\n\n    if (this.isSelected) {\n      classes.push(`hds-filter-bar__tabs__tab--is-selected`);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    {{! template-lint-disable require-context-role no-invalid-role }}\n    {{! template-lint-disable require-presentational-children }}\n    <li class={{this.classNames}} ...attributes role=\"presentation\">\n      <button\n        class=\"hds-filter-bar__tabs__tab__button\"\n        id={{this._tabId}}\n        type=\"button\"\n        role=\"tab\"\n        aria-controls={{this.coupledPanelId}}\n        aria-selected={{if this.isSelected \"true\" \"false\"}}\n        tabindex={{unless this.isSelected \"-1\"}}\n        {{on \"click\" this.onClick}}\n        {{on \"keydown\" this.onKeydown}}\n        {{this._setUpTab\n          insertCallbackFunction=this.didInsertNode\n          destroyCallbackFunction=this.willDestroyNode\n        }}\n      >\n        <HdsTextBody\n          @size=\"200\"\n          @weight=\"medium\"\n          class=\"hds-filter-bar__tabs__tab__text\"\n        >{{yield}}</HdsTextBody>\n        {{#if (gt @numFilters 0)}}\n          <span class=\"sr-only\">{{hdsT\n              \"hds.components.filter-bar.tabs.tab.filters-applied\"\n              default=\"Filters applied\"\n            }}</span>\n          <HdsTextBody\n            @size=\"200\"\n            @color=\"primary\"\n            class=\"hds-filter-bar__tabs__tab__filter-count\"\n          >\n            {{@numFilters}}\n          </HdsTextBody>\n        {{/if}}\n        <HdsIcon\n          @name=\"chevron-right\"\n          @color=\"primary\"\n          class=\"hds-filter-bar__tabs__tab__icon\"\n        />\n      </button>\n    </li>\n    {{! template-lint-enable require-presentational-children }}\n    {{! template-lint-enable require-context-role no-invalid-role }}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { modifier, type PositionalArgs } from 'ember-modifier';\nimport { not } from 'ember-truth-helpers';\n\nexport interface HdsFilterBarTabsPanelModifierSignature {\n  Args: {\n    insertCallbackFunction?: (element: HTMLElement) => void;\n    destroyCallbackFunction?: (element: HTMLElement) => void;\n  };\n  Element: HTMLElement;\n}\n\nexport interface HdsFilterBarTabsPanelSignature {\n  Args: {\n    selectedTabIndex?: number;\n    tabIds?: string[];\n    panelIds?: string[];\n    didInsertNode?: (element: HTMLElement, panelId: string) => void;\n    willDestroyNode?: (element: HTMLElement) => void;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLElement;\n}\n\nexport default class HdsFilterBarTabsPanel extends Component<HdsFilterBarTabsPanelSignature> {\n  private _panelId = 'panel-' + guidFor(this);\n\n  private _setUpPanel = modifier(\n    (\n      element: HTMLElement,\n      positional: PositionalArgs<HdsFilterBarTabsPanelModifierSignature>,\n      named: HdsFilterBarTabsPanelModifierSignature['Args']\n    ) => {\n      if (typeof named.insertCallbackFunction === 'function') {\n        named.insertCallbackFunction(element);\n      }\n\n      return () => {\n        if (typeof named.destroyCallbackFunction === 'function') {\n          named.destroyCallbackFunction(element);\n        }\n      };\n    }\n  );\n\n  get nodeIndex(): number | undefined {\n    return this.args.panelIds?.indexOf(this._panelId);\n  }\n\n  get coupledTabId(): string | undefined {\n    return this.nodeIndex !== undefined\n      ? this.args.tabIds?.[this.nodeIndex]\n      : undefined;\n  }\n\n  get isVisible(): boolean {\n    return this.nodeIndex === this.args.selectedTabIndex;\n  }\n\n  didInsertNode = (element: HTMLElement): void => {\n    const { didInsertNode } = this.args;\n\n    if (typeof didInsertNode === 'function') {\n      didInsertNode(element, this._panelId);\n    }\n  };\n\n  willDestroyNode = (element: HTMLElement): void => {\n    const { willDestroyNode } = this.args;\n\n    if (typeof willDestroyNode === 'function') {\n      willDestroyNode(element);\n    }\n  };\n\n  <template>\n    <section\n      class=\"hds-filter-bar__tabs__panel\"\n      ...attributes\n      role=\"tabpanel\"\n      id={{this._panelId}}\n      hidden={{not this.isVisible}}\n      aria-labelledby={{this.coupledTabId}}\n      {{this._setUpPanel\n        insertCallbackFunction=this.didInsertNode\n        destroyCallbackFunction=this.willDestroyNode\n      }}\n    >\n      {{#if this.isVisible}}\n        {{yield}}\n      {{/if}}\n    </section>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\n\nimport { HdsSeparatorSpacingValues } from './types.ts';\nimport type { HdsSeparatorSpacing } from './types.ts';\n\nexport const DEFAULT_SPACING = HdsSeparatorSpacingValues.TwentyFour;\nexport const SPACING: HdsSeparatorSpacing[] = Object.values(\n  HdsSeparatorSpacingValues\n);\n\nexport interface HdsSeparatorSignature {\n  Args: {\n    spacing?: HdsSeparatorSpacing;\n  };\n  Element: HTMLElement;\n}\n\nexport default class HdsSeparator extends Component<HdsSeparatorSignature> {\n  get spacing(): HdsSeparatorSpacing {\n    const { spacing = DEFAULT_SPACING } = this.args;\n\n    assert(\n      `@spacing for \"Hds::Separator\" must be one of the following: ${SPACING.join(\n        ', '\n      )}; received: ${spacing}`,\n      SPACING.includes(spacing)\n    );\n\n    return spacing;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-separator'];\n\n    // add a class based on the @spacing argument\n    classes.push(`hds-separator--spacing-${this.spacing}`);\n\n    return classes.join(' ');\n  }\n\n  <template><hr class={{this.classNames}} ...attributes /></template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\n\nimport type { Props as TippyProps } from 'tippy.js';\n\nimport hdsTooltip from '../../../modifiers/hds-tooltip.ts';\nimport { HdsTooltipPlacementValues } from './types.ts';\nimport type { HdsTooltipPlacements } from './types.ts';\n\nexport const PLACEMENTS: HdsTooltipPlacements[] = Object.values(\n  HdsTooltipPlacementValues\n);\n\nexport interface HdsTooltipSignature {\n  Args: {\n    extraTippyOptions?: Partial<Omit<TippyProps, 'placement' | 'offset'>>;\n    isInline?: boolean;\n    offset?: [number, number];\n    placement?: HdsTooltipPlacements;\n    text: string;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLButtonElement;\n}\n\nexport default class HdsTooltip extends Component<HdsTooltipSignature> {\n  get text(): string {\n    const { text } = this.args;\n\n    assert(\n      '@text for \"Hds::TooltipButton\" must have a valid value',\n      text !== undefined\n    );\n\n    return text;\n  }\n\n  get options(): Partial<TippyProps> {\n    const { placement = HdsTooltipPlacementValues.Top, extraTippyOptions } =\n      this.args;\n\n    assert(\n      '@placement for \"Hds::TooltipButton\" must have a valid value',\n      placement == undefined || PLACEMENTS.includes(placement)\n    );\n\n    return {\n      ...(extraTippyOptions ? extraTippyOptions : {}),\n      placement: placement,\n      // takes array of 2 numbers (skidding, distance): array(0, 10)\n      offset: this.args.offset ? this.args.offset : [0, 10],\n    };\n  }\n\n  get isInline(): boolean {\n    const { isInline = true } = this.args;\n    return isInline;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-tooltip-button'];\n\n    // add a class based on the @isInline argument\n    if (this.isInline) {\n      classes.push('hds-tooltip-button--is-inline');\n    } else {\n      classes.push('hds-tooltip-button--is-block');\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <button\n      type=\"button\"\n      class={{this.classNames}}\n      {{hdsTooltip this.text options=this.options}}\n      ...attributes\n    >{{~yield~}}</button>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { hash } from '@ember/helper';\n\nimport { HdsApplicationStateAlignValues } from './types.ts';\nimport HdsApplicationStateMedia from './media.gts';\nimport HdsApplicationStateHeader from './header.gts';\nimport HdsApplicationStateBody from './body.gts';\nimport HdsApplicationStateFooter from './footer.gts';\n\nimport type { HdsApplicationStateAligns } from './types.ts';\n\nexport const ALIGNS: HdsApplicationStateAligns[] = Object.values(\n  HdsApplicationStateAlignValues\n);\nexport interface HdsApplicationStateSignature {\n  Args: {\n    align?: HdsApplicationStateAligns;\n    isAutoCentered?: boolean;\n  };\n  Blocks: {\n    default: [\n      {\n        Media?: typeof HdsApplicationStateMedia;\n        Header?: typeof HdsApplicationStateHeader;\n        Body?: typeof HdsApplicationStateBody;\n        Footer?: typeof HdsApplicationStateFooter;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsApplicationState extends Component<HdsApplicationStateSignature> {\n  get isAutoCentered(): boolean {\n    return this.args.isAutoCentered ?? true;\n  }\n\n  get align(): HdsApplicationStateAligns {\n    const validAlignValues: HdsApplicationStateAligns[] = Object.values(\n      HdsApplicationStateAlignValues\n    );\n\n    assert(\n      `@align for \"Hds::ApplicationState\" must be one of the following: ${validAlignValues.join(\n        ', '\n      )}; received: ${this.args.align}`,\n      this.args.align == null || validAlignValues.includes(this.args.align)\n    );\n\n    return this.args.align ?? HdsApplicationStateAlignValues.Left;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-application-state'];\n\n    // add a class based on the @align argument\n    classes.push(`hds-application-state--align-${this.align}`);\n\n    if (this.isAutoCentered) {\n      classes.push('hds-application-state--is-auto-centered');\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <div class={{this.classNames}} ...attributes>\n      {{yield\n        (hash\n          Media=HdsApplicationStateMedia\n          Header=HdsApplicationStateHeader\n          Body=HdsApplicationStateBody\n          Footer=HdsApplicationStateFooter\n        )\n      }}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { eq } from 'ember-truth-helpers';\n\nimport type Owner from '@ember/owner';\n\nimport {\n  HdsLinkIconPositionValues,\n  HdsLinkColorValues,\n  HdsLinkStandaloneSizeValues,\n} from './types.ts';\nimport HdsInteractive from '../interactive/index.gts';\nimport HdsIcon from '../icon/index.gts';\n\nimport type { HdsInteractiveSignature } from '../interactive/index.gts';\nimport type {\n  HdsLinkColors,\n  HdsLinkIconPositions,\n  HdsLinkStandaloneSizes,\n} from './types.ts';\nimport type { HdsIconSignature } from '../icon/index.gts';\n\nexport interface HdsLinkStandaloneSignature {\n  Args: HdsInteractiveSignature['Args'] & {\n    size?: HdsLinkStandaloneSizes;\n    color?: HdsLinkColors;\n    text: string;\n    icon: HdsIconSignature['Args']['name'];\n    iconPosition?: HdsLinkIconPositions;\n  };\n  Element: HdsInteractiveSignature['Element'];\n}\n\nexport const DEFAULT_ICON_POSITION = HdsLinkIconPositionValues.Leading;\nexport const DEFAULT_COLOR = HdsLinkColorValues.Primary;\nexport const DEFAULT_SIZE = HdsLinkStandaloneSizeValues.Medium;\nexport const ICON_POSITIONS: HdsLinkIconPositions[] = Object.values(\n  HdsLinkIconPositionValues\n);\nexport const COLORS: HdsLinkColors[] = Object.values(HdsLinkColorValues);\nexport const SIZES: HdsLinkStandaloneSizes[] = Object.values(\n  HdsLinkStandaloneSizeValues\n);\n\nexport default class HdsLinkStandalone extends Component<HdsLinkStandaloneSignature> {\n  constructor(owner: Owner, args: HdsLinkStandaloneSignature['Args']) {\n    super(owner, args);\n    if (!(this.args.href || this.args.route)) {\n      assert('@href or @route must be defined for <Hds::Link::Standalone>');\n    }\n  }\n\n  get text(): string {\n    const { text } = this.args;\n\n    assert(\n      '@text for \"Hds::Link::Standalone\" must have a valid value',\n      text !== undefined\n    );\n\n    return text;\n  }\n\n  get color(): HdsLinkColors {\n    const { color = DEFAULT_COLOR } = this.args;\n\n    assert(\n      `@color for \"Hds::Link::Standalone\" must be one of the following: ${COLORS.join(\n        ', '\n      )}; received: ${color}`,\n      COLORS.includes(color)\n    );\n\n    return color;\n  }\n\n  get icon(): HdsIconSignature['Args']['name'] {\n    const { icon } = this.args;\n\n    assert(\n      '@icon for \"Hds::Link::Standalone\" must have a valid value',\n      icon !== undefined\n    );\n\n    return icon;\n  }\n\n  get iconPosition(): HdsLinkIconPositions {\n    const { iconPosition = DEFAULT_ICON_POSITION } = this.args;\n\n    assert(\n      `@iconPosition for \"Hds::Link::Standalone\" must be one of the following: ${ICON_POSITIONS.join(\n        ', '\n      )}; received: ${iconPosition}`,\n      ICON_POSITIONS.includes(iconPosition)\n    );\n\n    return iconPosition;\n  }\n\n  get size(): HdsLinkStandaloneSizes {\n    const { size = DEFAULT_SIZE } = this.args;\n\n    assert(\n      `@size for \"Hds::Link::Standalone\" must be one of the following: ${SIZES.join(\n        ', '\n      )}; received: ${size}`,\n      SIZES.includes(size)\n    );\n\n    return size;\n  }\n\n  get iconSize(): HdsIconSignature['Args']['size'] {\n    if (this.args.size === 'large') {\n      return '24';\n    } else {\n      return '16';\n    }\n  }\n\n  get classNames(): string {\n    const classes = ['hds-link-standalone'];\n\n    // add a class based on the @size argument\n    classes.push(`hds-link-standalone--size-${this.size}`);\n\n    // add a class based on the @color argument\n    classes.push(`hds-link-standalone--color-${this.color}`);\n\n    // add a class based on the @iconPosition argument\n    classes.push(`hds-link-standalone--icon-position-${this.iconPosition}`);\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <HdsInteractive\n      class={{this.classNames}}\n      @current-when={{@current-when}}\n      @models={{@models}}\n      @model={{@model}}\n      @query={{@query}}\n      @replace={{@replace}}\n      @route={{@route}}\n      @isRouteExternal={{@isRouteExternal}}\n      @href={{@href}}\n      @isHrefExternal={{@isHrefExternal}}\n      ...attributes\n    >\n      {{#if (eq this.iconPosition \"leading\")}}\n        <span class=\"hds-link-standalone__icon\">\n          <HdsIcon\n            @name={{this.icon}}\n            @size={{this.iconSize}}\n            @stretched={{true}}\n          />\n        </span>\n        <span class=\"hds-link-standalone__text\">\n          {{this.text}}\n        </span>\n      {{else}}\n        <span class=\"hds-link-standalone__text\">\n          {{this.text}}\n        </span>\n        <span class=\"hds-link-standalone__icon\">\n          <HdsIcon\n            @name={{this.icon}}\n            @size={{this.iconSize}}\n            @stretched={{true}}\n          />\n        </span>\n      {{/if}}\n    </HdsInteractive>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { modifier } from 'ember-modifier';\nimport { hash } from '@ember/helper';\n\nimport { guidFor } from '@ember/object/internals';\n\nimport { handleKey, findFirstEnabled } from './navigation.ts';\n\nimport type Owner from '@ember/owner';\nimport type { ModifierLike } from '@glint/template';\nimport type {\n  HdsCompositeOrientations,\n  HdsCompositeNavigationConfig,\n  HdsCompositeNavigationSnapshot,\n  HdsCompositeItem,\n  HdsCompositeGroup,\n} from './types.ts';\n\nfunction getElementId(element: HTMLElement, prefix: string): string {\n  if (element.id !== '') {\n    return element.id;\n  }\n\n  return `${prefix}-${guidFor(element)}`;\n}\n\nfunction sortByDOMPosition<T extends { element: HTMLElement }>(\n  items: T[]\n): T[] {\n  const indexedItems = items.map((item, index) => ({ item, index }));\n\n  return indexedItems\n    .slice()\n    .sort((leftEntry, rightEntry) => {\n      const { item: left, index: leftIndex } = leftEntry;\n      const { item: right, index: rightIndex } = rightEntry;\n\n      if (!left.element.isConnected && right.element.isConnected) {\n        return 1;\n      }\n\n      if (left.element.isConnected && !right.element.isConnected) {\n        return -1;\n      }\n\n      const position = left.element.compareDocumentPosition(right.element);\n\n      if ((position & Node.DOCUMENT_POSITION_FOLLOWING) !== 0) {\n        return -1;\n      }\n\n      if ((position & Node.DOCUMENT_POSITION_PRECEDING) !== 0) {\n        return 1;\n      }\n\n      // keep sort stable when DOM position cannot be resolved\n      return leftIndex - rightIndex;\n    })\n    .map((entry) => entry.item);\n}\n\nfunction findGroupId(\n  element: HTMLElement,\n  groups: { id: string; element: HTMLElement }[]\n): string | undefined {\n  for (const group of groups) {\n    if (group.element.contains(element)) {\n      return group.id;\n    }\n  }\n\n  return undefined;\n}\n\ninterface HdsCompositeCompositeModifierSignature {\n  Element: HTMLElement;\n}\n\ninterface HdsCompositeItemModifierSignature {\n  Element: HTMLElement;\n  Args: {\n    Named: {\n      disabled?: boolean;\n    };\n  };\n}\n\ninterface HdsCompositeGroupModifierSignature {\n  Element: HTMLElement;\n}\n\nexport interface HdsCompositeSignature {\n  Args: {\n    orientation?: HdsCompositeOrientations;\n    loop?: boolean | HdsCompositeOrientations;\n    wrap?: boolean | HdsCompositeOrientations;\n    defaultCurrentId?: string | null;\n  };\n  Blocks: {\n    default: [\n      {\n        composite: ModifierLike<HdsCompositeCompositeModifierSignature>;\n        item: ModifierLike<HdsCompositeItemModifierSignature>;\n        group: ModifierLike<HdsCompositeGroupModifierSignature>;\n      },\n    ];\n  };\n}\n\nexport default class Composite extends Component<HdsCompositeSignature> {\n  // not tracked because registration happens inside modifier installation\n  private _items: HdsCompositeItem[] = [];\n  private _groups: HdsCompositeGroup[] = [];\n\n  // undefined = uninitialized (auto-select first enabled on registration)\n  // null = explicitly no active item (container gets tabindex=\"0\")\n  // string = active item id\n  private _currentId: string | null | undefined = undefined;\n\n  private _compositeElement: HTMLElement | null = null;\n  private _preserveTabIndex = false;\n\n  constructor(owner: Owner, args: HdsCompositeSignature['Args']) {\n    super(owner, args);\n\n    if (args.defaultCurrentId !== undefined) {\n      this._currentId = args.defaultCurrentId;\n    }\n  }\n\n  private get _resolvedCurrentId(): string | null | undefined {\n    // explicitly null (no active item)\n    if (this._currentId === null) {\n      return null;\n    }\n\n    const requestedItem = this._items.find(\n      (item) => item.id === this._currentId\n    );\n\n    if (requestedItem !== undefined && requestedItem.disabled === false) {\n      return this._currentId;\n    }\n\n    return this._firstEnabledItem !== undefined\n      ? this._firstEnabledItem.id\n      : undefined;\n  }\n\n  private get _currentItem(): HdsCompositeItem | undefined {\n    const activeId = this._resolvedCurrentId;\n\n    if (activeId === null || activeId === undefined) {\n      return undefined;\n    }\n\n    return this._items.find((item) => item.id === activeId);\n  }\n\n  private get _firstEnabledItem(): HdsCompositeItem | undefined {\n    return findFirstEnabled(this._items);\n  }\n\n  private get _currentIndex(): number {\n    const activeId = this._resolvedCurrentId;\n\n    if (activeId === null || activeId === undefined) {\n      return -1;\n    }\n\n    return this._items.findIndex((item) => item.id === activeId);\n  }\n\n  private get _config(): HdsCompositeNavigationConfig {\n    return {\n      orientation: this.args.orientation,\n      loop: this.args.loop ?? false,\n      wrap: this.args.wrap ?? false,\n    };\n  }\n\n  private get _navigationSnapshot(): HdsCompositeNavigationSnapshot {\n    return {\n      items: this._items,\n      groups: this._groups,\n      currentItem: this._currentItem,\n      currentIndex: this._currentIndex,\n    };\n  }\n\n  private _resortRegisteredElements(): void {\n    this._groups = sortByDOMPosition(this._groups);\n    this._items = sortByDOMPosition(this._items);\n    this._reassociateGroups();\n  }\n\n  private _registerItem(newItem: HdsCompositeItem): void {\n    newItem.groupId = findGroupId(newItem.element, this._groups);\n\n    this._items = sortByDOMPosition([\n      ...this._items.filter((item) => item.id !== newItem.id),\n      newItem,\n    ]);\n\n    this._syncAllElements();\n  }\n\n  private _unregisterItem(id: string): void {\n    const wasCurrent = this._resolvedCurrentId === id;\n    this._items = this._items.filter((item) => item.id !== id);\n\n    if (wasCurrent) {\n      // reset to \"auto\" so newly rendered first items can become active\n      this._currentId = undefined;\n      this._syncAllElements();\n\n      return;\n    }\n\n    this._syncAllElements();\n  }\n\n  private _registerGroup(newGroup: HdsCompositeGroup): void {\n    this._groups = sortByDOMPosition([\n      ...this._groups.filter((group) => group.id !== newGroup.id),\n      newGroup,\n    ]);\n\n    this._reassociateGroups();\n  }\n\n  private _unregisterGroup(id: string): void {\n    this._groups = this._groups.filter((group) => group.id !== id);\n    this._reassociateGroups();\n\n    const currentExists = this._items.some(\n      (item) => item.id === this._resolvedCurrentId\n    );\n\n    if (!currentExists && this._firstEnabledItem) {\n      // reset to \"auto\" so group reordering/mount order can settle first\n      this._currentId = undefined;\n      this._syncAllElements();\n    }\n  }\n\n  private _reassociateGroups(): void {\n    for (const item of this._items) {\n      item.groupId = findGroupId(item.element, this._groups);\n    }\n  }\n\n  private _moveTo(id: string): void {\n    if (this._currentId === id) {\n      return;\n    }\n\n    const previousItem = this._currentItem;\n\n    this._currentId = id;\n\n    const nextItem = this._currentItem;\n\n    if (previousItem !== undefined) {\n      this._syncItemElement(previousItem);\n    }\n\n    if (nextItem !== undefined) {\n      this._syncItemElement(nextItem);\n    }\n\n    this._syncCompositeElement();\n  }\n\n  private _syncAllElements(): void {\n    for (const item of this._items) {\n      this._syncItemElement(item);\n    }\n\n    this._syncCompositeElement();\n  }\n\n  private _syncItemElement(item: HdsCompositeItem): void {\n    const element = item.element;\n    const isCurrent = item.id === this._resolvedCurrentId;\n\n    if (item.disabled === true) {\n      element.setAttribute('aria-disabled', 'true');\n      element.setAttribute('disabled', '');\n      element.setAttribute('tabindex', '-1');\n    } else {\n      element.removeAttribute('aria-disabled');\n      element.removeAttribute('disabled');\n      element.setAttribute('tabindex', isCurrent === true ? '0' : '-1');\n    }\n\n    if (isCurrent === true) {\n      element.setAttribute('data-active-item', '');\n    } else {\n      element.removeAttribute('data-active-item');\n    }\n\n    element.setAttribute('tabindex', isCurrent === true ? '0' : '-1');\n  }\n\n  private _syncCompositeElement(): void {\n    const element = this._compositeElement;\n\n    if (element === null || this._preserveTabIndex === true) {\n      return;\n    }\n\n    const activeId = this._resolvedCurrentId;\n\n    if (activeId === null || activeId === undefined) {\n      element.setAttribute('tabindex', '0');\n    } else {\n      element.removeAttribute('tabindex');\n    }\n  }\n\n  compositeModifier = modifier<HdsCompositeCompositeModifierSignature>(\n    (element: HTMLElement) => {\n      this._compositeElement = element;\n      this._preserveTabIndex = element.hasAttribute('tabindex');\n\n      this._syncCompositeElement();\n\n      const onKeyDown = (event: KeyboardEvent): void => {\n        const managedKeys = [\n          'ArrowUp',\n          'ArrowDown',\n          'ArrowLeft',\n          'ArrowRight',\n          'Home',\n          'End',\n          'PageUp',\n          'PageDown',\n        ];\n\n        if (managedKeys.includes(event.key)) {\n          event.preventDefault();\n        }\n\n        this._resortRegisteredElements();\n\n        const target = handleKey(event, this._navigationSnapshot, this._config);\n\n        if (target === undefined) {\n          return;\n        }\n\n        this._moveTo(target.id);\n\n        target.element.focus();\n      };\n\n      element.addEventListener('keydown', onKeyDown);\n\n      return () => {\n        element.removeEventListener('keydown', onKeyDown);\n\n        if (this._compositeElement === element) {\n          this._compositeElement = null;\n        }\n      };\n    }\n  );\n\n  itemModifier = modifier<HdsCompositeItemModifierSignature>(\n    (element: HTMLElement, _positional: unknown[], named) => {\n      const disabled = named.disabled ?? false;\n      const id = getElementId(element, 'composite-item');\n\n      element.id = id;\n\n      this._registerItem({ id, element, disabled });\n\n      const onFocus = (): void => {\n        const item = this._items.find((registered) => registered.id === id);\n\n        if (item === undefined || item.disabled === true) {\n          return;\n        }\n\n        this._moveTo(id);\n      };\n\n      element.addEventListener('focus', onFocus);\n\n      return () => {\n        element.removeEventListener('focus', onFocus);\n\n        this._unregisterItem(id);\n      };\n    }\n  );\n\n  groupModifier = modifier<HdsCompositeGroupModifierSignature>(\n    (element: HTMLElement) => {\n      const id = getElementId(element, 'composite-group');\n\n      element.id = id;\n\n      this._registerGroup({ id, element });\n\n      return () => {\n        this._unregisterGroup(id);\n      };\n    }\n  );\n\n  <template>\n    {{yield\n      (hash\n        composite=this.compositeModifier\n        item=this.itemModifier\n        group=this.groupModifier\n      )\n    }}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { action } from '@ember/object';\nimport { on } from '@ember/modifier';\n\nimport {\n  HdsAdvancedTableThExpandIconValues,\n  type HdsAdvancedTableExpandState,\n} from './types.ts';\nimport HdsIcon from '../icon/index.gts';\nimport hdsT from '../../../helpers/hds-t.ts';\n\nimport type { HdsAdvancedTableThSortExpandIcons } from './types.ts';\n\nexport interface HdsAdvancedTableThButtonExpandSignature {\n  Args: {\n    labelId?: string;\n    isExpanded?: HdsAdvancedTableExpandState;\n    onToggle?: () => void;\n    isExpandAll?: boolean;\n  };\n  Element: HTMLButtonElement;\n}\n\nexport default class HdsAdvancedTableThButtonExpand extends Component<HdsAdvancedTableThButtonExpandSignature> {\n  // Generates a unique ID for the (hidden) \"label prefix\" <span> element\n  private _prefixLabelId = 'prefix-' + guidFor(this);\n\n  get isExpanded(): HdsAdvancedTableExpandState {\n    const { isExpanded = false } = this.args;\n\n    return isExpanded;\n  }\n\n  get icon(): HdsAdvancedTableThSortExpandIcons {\n    if (this.isExpanded === true) {\n      return this.args.isExpandAll\n        ? HdsAdvancedTableThExpandIconValues.UnfoldClose\n        : HdsAdvancedTableThExpandIconValues.ChevronUp;\n    } else {\n      return this.args.isExpandAll\n        ? HdsAdvancedTableThExpandIconValues.UnfoldOpen\n        : HdsAdvancedTableThExpandIconValues.ChevronDown;\n    }\n  }\n\n  @action onClick() {\n    this.args.onToggle?.();\n  }\n\n  get classNames(): string {\n    const classes = [\n      'hds-advanced-table__th-button',\n      'hds-advanced-table__th-button--expand',\n    ];\n\n    // add a class based on the isExpanded state\n    if (this.args.isExpanded === true) {\n      classes.push(`hds-advanced-table__th-button--is-expanded`);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    {{! template-lint-disable no-unsupported-role-attributes }}\n    {{! ember template lint doesnt support ARIA 1.3 yet, including aria-description - https://github.com/A11yance/aria-query/pull/557 }}\n    <button\n      type=\"button\"\n      class={{this.classNames}}\n      {{on \"click\" this.onClick}}\n      aria-labelledby=\"{{this._prefixLabelId}} {{@labelId}}\"\n      aria-expanded=\"{{this.isExpanded}}\"\n      aria-description={{hdsT\n        \"hds.components.advanced-table.th-button-expand.aria-description\"\n        default=\"Toggle the visibility of the related rows.\"\n      }}\n      ...attributes\n    >\n      {{! template-lint-enable no-unsupported-role-attributes}}\n      <span\n        id={{this._prefixLabelId}}\n        class=\"hds-advanced-table__th-button-aria-label-hidden-segment\"\n      >\n        {{hdsT \"hds.components.common.toggle\" default=\"Toggle\"}}\n      </span>\n      <HdsIcon @name={{this.icon}} />\n    </button>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { guidFor } from '@ember/object/internals';\nimport { hash } from '@ember/helper';\n\nimport HdsIcon from '../icon/index.gts';\nimport hdsTooltip from '../../../modifiers/hds-tooltip.ts';\nimport hdsT from '../../../helpers/hds-t.ts';\n\nexport interface HdsAdvancedTableThButtonTooltipSignature {\n  Args: {\n    labelId?: string;\n    tooltip: string;\n  };\n  Element: HTMLButtonElement;\n}\n\nexport default class HdsAdvancedTableThButtonTooltip extends Component<HdsAdvancedTableThButtonTooltipSignature> {\n  // Generates a unique ID for the (hidden) \"label prefix\" <span> element\n  private _prefixLabelId = guidFor(this);\n\n  get tooltip(): string {\n    assert(\n      `@tooltip for \"HdsAdvancedTableThButtonTooltip\" must be a string`,\n      typeof this.args.tooltip === 'string'\n    );\n    return this.args.tooltip;\n  }\n\n  get classNames(): string {\n    const classes = [\n      'hds-advanced-table__th-button',\n      'hds-advanced-table__th-button--tooltip',\n    ];\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <button\n      type=\"button\"\n      class={{this.classNames}}\n      {{hdsTooltip this.tooltip options=(hash placement=\"bottom\")}}\n      aria-labelledby=\"{{this._prefixLabelId}} {{@labelId}}\"\n      ...attributes\n    >\n      <span\n        id={{this._prefixLabelId}}\n        class=\"hds-advanced-table__th-button-aria-label-hidden-segment\"\n      >\n        {{hdsT\n          \"hds.components.common.tooltip-prefix\"\n          default=\"More information for\"\n        }}\n      </span>\n      <HdsIcon @name=\"info\" />\n    </button>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { focusable, type FocusableElement } from 'tabbable';\nimport style from 'ember-style-modifier';\nimport hdsAdvancedTableCell from '../../../modifiers/hds-advanced-table-cell.ts';\n// @ts-expect-error: missing types https://github.com/josemarluedke/ember-focus-trap/issues/86\nimport focusTrap from 'ember-focus-trap/modifiers/focus-trap';\nimport { hash } from '@ember/helper';\n\nimport type { HdsAdvancedTableHorizontalAlignment } from './types.ts';\nimport { HdsAdvancedTableHorizontalAlignmentValues } from './types.ts';\nimport hdsScrollIntoViewOnFocus from '../../../modifiers/hds-scroll-into-view-on-focus.ts';\nimport { onFocusTrapDeactivate } from '../../../modifiers/hds-advanced-table-cell/dom-management.ts';\n\nimport type { HdsCompositeSignature } from '../composite/index.gts';\n\nexport const ALIGNMENTS: HdsAdvancedTableHorizontalAlignment[] = Object.values(\n  HdsAdvancedTableHorizontalAlignmentValues\n);\nexport const DEFAULT_ALIGN = HdsAdvancedTableHorizontalAlignmentValues.Left;\n\nexport interface HdsAdvancedTableTdSignature {\n  Args: {\n    align?: HdsAdvancedTableHorizontalAlignment;\n    rowspan?: number;\n    colspan?: number;\n    compositeItem?: HdsCompositeSignature['Blocks']['default'][0]['item'];\n    isCompositeItemDisabled?: boolean;\n  };\n  Blocks: {\n    default?: [];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsAdvancedTableTd extends Component<HdsAdvancedTableTdSignature> {\n  @tracked private _shouldTrapFocus = false;\n  private _element!: HTMLDivElement;\n\n  // rowspan and colspan have to return 'auto' if not defined because otherwise the style modifier sets grid-area: undefined on the cell, which breaks the grid styles\n  get rowspan(): string {\n    if (this.args.rowspan) {\n      return `span ${this.args.rowspan}`;\n    }\n    return 'auto';\n  }\n\n  get colspan(): string | undefined {\n    if (this.args.colspan) {\n      return `span ${this.args.colspan}`;\n    }\n    return 'auto';\n  }\n\n  get align(): HdsAdvancedTableHorizontalAlignment {\n    const { align = DEFAULT_ALIGN } = this.args;\n\n    assert(\n      `@align for \"Hds::AdvancedTable::Td\" must be one of the following: ${ALIGNMENTS.join(\n        ', '\n      )}; received: ${align}`,\n      ALIGNMENTS.includes(align)\n    );\n    return align;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-advanced-table__td'];\n\n    // add a class based on the @align argument\n    if (this.align) {\n      classes.push(`hds-advanced-table__td--align-${this.align}`);\n    }\n\n    return classes.join(' ');\n  }\n\n  @action onFocusTrapDeactivate(): void {\n    this._shouldTrapFocus = false;\n    onFocusTrapDeactivate(this._element);\n  }\n\n  @action enableFocusTrap(): void {\n    this._shouldTrapFocus = true;\n  }\n\n  @action getInitialFocus(): FocusableElement | undefined {\n    const cellFocusableElements = focusable(this._element);\n    return cellFocusableElements[0];\n  }\n\n  @action setElement(element: HTMLDivElement): void {\n    this._element = element;\n  }\n\n  <template>\n    <div\n      class={{this.classNames}}\n      role=\"gridcell\"\n      aria-rowspan={{@rowspan}}\n      aria-colspan={{@colspan}}\n      {{style grid-row=this.rowspan grid-column=this.colspan}}\n      {{hdsAdvancedTableCell\n        handleEnableFocusTrap=this.enableFocusTrap\n        shouldTrapFocus=this._shouldTrapFocus\n        setCellElement=this.setElement\n      }}\n      {{focusTrap\n        isActive=this._shouldTrapFocus\n        focusTrapOptions=(hash\n          onDeactivate=this.onFocusTrapDeactivate\n          initialFocus=this.getInitialFocus\n          clickOutsideDeactivates=true\n        )\n      }}\n      {{@compositeItem disabled=@isCompositeItemDisabled}}\n      {{hdsScrollIntoViewOnFocus options=(hash block=\"center\" inline=\"center\")}}\n      ...attributes\n    >\n      {{yield}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\n\nimport HdsIcon from '../icon/index.gts';\n\nimport type HdsIntlService from '../../../services/hds-intl.ts';\n\nexport interface HdsDismissButtonSignature {\n  Args: {\n    ariaLabel?: string;\n  };\n  Element: HTMLButtonElement;\n}\n\nexport default class HdsDismissButton extends Component<HdsDismissButtonSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  get ariaLabel(): string {\n    return (\n      this.args.ariaLabel ??\n      this.hdsIntl.t('hds.components.dismiss-button.aria-label', {\n        default: 'Dismiss',\n      })\n    );\n  }\n\n  <template>\n    <button\n      class=\"hds-dismiss-button\"\n      type=\"button\"\n      aria-label={{this.ariaLabel}}\n      ...attributes\n    >\n      <HdsIcon @name=\"x\" @size=\"16\" />\n    </button>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsDialogPrimitiveBodySignature {\n  Args: {\n    contextualClass?: string;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLDivElement;\n}\n\nconst HdsDialogPrimitiveBody: TemplateOnlyComponent<HdsDialogPrimitiveBodySignature> =\n  <template>\n    <div\n      class=\"hds-dialog-primitive__body {{@contextualClass}}\"\n      tabindex=\"0\"\n      ...attributes\n    >\n      {{yield}}\n    </div>\n  </template>;\n\nexport default HdsDialogPrimitiveBody;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { hash } from '@ember/helper';\n\nexport interface HdsDialogPrimitiveFooterSignature {\n  Args: {\n    contextualClass?: string;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    onDismiss?: (event: MouseEvent, ...args: any[]) => void;\n  };\n  Blocks: {\n    default: [\n      {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        close: (event: MouseEvent, ...args: any[]) => void;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nconst NOOP = (): void => {};\n\nexport default class HdsDialogPrimitiveFooter extends Component<HdsDialogPrimitiveFooterSignature> {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  get onDismiss(): (event: MouseEvent, ...args: any[]) => void {\n    const { onDismiss } = this.args;\n\n    // notice: this is to make sure the function is always defined when consumers add `{{on 'click' F.close}}` to a button in the DialogFooter.\n    // in reality it's always used inside the main components as a yielded component, so the onDismiss handler is always defined\n    if (typeof onDismiss === 'function') {\n      return onDismiss;\n    } else {\n      return NOOP;\n    }\n  }\n\n  <template>\n    <div\n      class=\"hds-dialog-primitive__footer {{@contextualClass}}\"\n      ...attributes\n    >\n      {{yield (hash close=this.onDismiss)}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { concat } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport { element } from 'ember-element-helper';\n\nimport { HdsDialogPrimitiveHeaderTitleTagValues } from './types.ts';\nimport HdsIcon from '../icon/index.gts';\nimport HdsTextBody from '../text/body.gts';\nimport HdsTextDisplay from '../text/display.gts';\nimport HdsDismissButton from '../dismiss-button/index.gts';\n\nimport type { HdsIconSignature } from '../icon/index.gts';\nimport type { HdsDialogPrimitiveHeaderTitleTags } from './types.ts';\n\nexport interface HdsDialogPrimitiveHeaderSignature {\n  Args: {\n    contextualClassPrefix?: string;\n    id?: string;\n    icon?: HdsIconSignature['Args']['name'];\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    onDismiss?: (event: MouseEvent, ...args: any[]) => void;\n    titleTag?: HdsDialogPrimitiveHeaderTitleTags;\n    tagline?: string;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLDivElement;\n}\n\nconst NOOP = (): void => {};\n\nexport default class HdsDialogPrimitiveHeader extends Component<HdsDialogPrimitiveHeaderSignature> {\n  get titleTag(): HdsDialogPrimitiveHeaderTitleTags {\n    return this.args.titleTag ?? HdsDialogPrimitiveHeaderTitleTagValues.Div;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  get onDismiss(): (event: MouseEvent, ...args: any[]) => void {\n    const { onDismiss } = this.args;\n\n    // notice: this is a guard used in case the button is used as standalone element (eg. in the showcase)\n    // in reality it's always used inside the main components as a yielded component, so the onDismiss handler is always defined\n    if (typeof onDismiss === 'function') {\n      return onDismiss;\n    } else {\n      return NOOP;\n    }\n  }\n\n  <template>\n    <div\n      class=\"hds-dialog-primitive__header\n        {{if\n          @contextualClassPrefix\n          (concat @contextualClassPrefix '__header')\n        }}\"\n      ...attributes\n    >\n      {{#if @icon}}\n        <HdsIcon\n          class=\"hds-dialog-primitive__icon\n            {{if\n              @contextualClassPrefix\n              (concat @contextualClassPrefix '__icon')\n            }}\"\n          @name={{@icon}}\n          @size=\"24\"\n        />\n      {{/if}}\n\n      {{#let (element this.titleTag) as |Tag|}}<Tag\n          class=\"hds-dialog-primitive__title\n            {{if\n              @contextualClassPrefix\n              (concat @contextualClassPrefix '__title')\n            }}\"\n          id={{@id}}\n        >\n          {{#if @tagline}}\n            <HdsTextBody\n              class=\"hds-dialog-primitive__tagline\n                {{if\n                  @contextualClassPrefix\n                  (concat @contextualClassPrefix '__tagline')\n                }}\"\n              @tag=\"div\"\n              @size=\"100\"\n            >\n              {{@tagline}}\n            </HdsTextBody>\n          {{/if}}\n\n          <HdsTextDisplay @tag=\"div\" @size=\"300\" @weight=\"semibold\">\n            {{yield}}\n          </HdsTextDisplay>\n        </Tag>\n      {{/let}}\n\n      <HdsDismissButton\n        class=\"hds-dialog-primitive__dismiss\n          {{if\n            @contextualClassPrefix\n            (concat @contextualClassPrefix '__dismiss')\n          }}\"\n        {{on \"click\" this.onDismiss}}\n      />\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsDialogPrimitiveOverlaySignature {\n  Args: {\n    contextualClass?: string;\n  };\n  Element: HTMLDivElement;\n}\n\nconst HdsDialogPrimitiveOverlay: TemplateOnlyComponent<HdsDialogPrimitiveOverlaySignature> =\n  <template>\n    <div class=\"hds-dialog-primitive__overlay {{@contextualClass}}\"></div>\n  </template>;\n\nexport default HdsDialogPrimitiveOverlay;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsDialogPrimitiveWrapperSignature {\n  Blocks: {\n    header?: [];\n    body?: [];\n    footer?: [];\n  };\n  Element: HTMLDialogElement;\n}\n\nconst HdsDialogPrimitiveWrapper: TemplateOnlyComponent<HdsDialogPrimitiveWrapperSignature> =\n  <template>\n    <dialog class=\"hds-dialog-primitive__wrapper\" ...attributes>\n      <div class=\"hds-dialog-primitive__wrapper-header\">\n        {{yield to=\"header\"}}\n      </div>\n      <div class=\"hds-dialog-primitive__wrapper-body\">\n        {{yield to=\"body\"}}\n      </div>\n      <div class=\"hds-dialog-primitive__wrapper-footer\">\n        {{yield to=\"footer\"}}\n      </div>\n    </dialog>\n  </template>;\n\nexport default HdsDialogPrimitiveWrapper;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport { hash } from '@ember/helper';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport HdsFormHeaderTitle from '../header/title.gts';\nimport HdsFormHeaderDescription from '../header/description.gts';\n\nexport interface HdsFormSectionHeaderSignature {\n  Blocks: {\n    default: [\n      {\n        Title?: WithBoundArgs<typeof HdsFormHeaderTitle, 'size'>;\n        Description?: typeof HdsFormHeaderDescription;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\nconst HdsFormSectionHeader: TemplateOnlyComponent<HdsFormSectionHeaderSignature> =\n  <template>\n    <div class=\"hds-form__section-header\" ...attributes>\n      {{yield\n        (hash\n          Title=(component HdsFormHeaderTitle size=\"300\")\n          Description=HdsFormHeaderDescription\n        )\n      }}\n    </div>\n  </template>;\n\nexport default HdsFormSectionHeader;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport { hash } from '@ember/helper';\n\nimport HdsFormSectionMultiFieldGroupItem from './item.gts';\n\nexport interface HdsFormSectionMultiFieldGroupSignature {\n  Blocks: {\n    default: [\n      {\n        Item?: typeof HdsFormSectionMultiFieldGroupItem;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nconst HdsFormSectionMultiFieldGroup: TemplateOnlyComponent<HdsFormSectionMultiFieldGroupSignature> =\n  <template>\n    <div class=\"hds-form__section-multi-field-group\" ...attributes>{{yield\n        (hash Item=HdsFormSectionMultiFieldGroupItem)\n      }}</div>\n  </template>;\n\nexport default HdsFormSectionMultiFieldGroup;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\n\nimport HdsFormIndicator from '../indicator/index.gts';\n\nimport type { HdsFormIndicatorSignature } from '../indicator/index.gts';\n\nexport interface HdsFormLegendSignature {\n  Args: {\n    contextualClass?: string;\n    isOptional?: HdsFormIndicatorSignature['Args']['isOptional'];\n    isRequired?: HdsFormIndicatorSignature['Args']['isRequired'];\n    id?: string;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLLegendElement;\n}\n\nexport default class HdsFormLegend extends Component<HdsFormLegendSignature> {\n  get classNames(): string {\n    const classes = ['hds-form-legend'];\n\n    // add a class based on the @contextualClass argument\n    // notice: this will *not* be documented for public use\n    // the reason for this is that the contextual component declarations don't pass attributes to the component\n    if (this.args.contextualClass) {\n      classes.push(this.args.contextualClass);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <legend class={{this.classNames}} id={{@id}} ...attributes>\n      {{yield}}\n      <HdsFormIndicator\n        @isRequired={{@isRequired}}\n        @isOptional={{@isOptional}}\n      />\n    </legend>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nimport HdsIcon from '../../icon/index.gts';\n\nexport interface HdsFormVisibilityToggleSignature {\n  Args: {\n    ariaLabel?: string;\n    ariaMessageText?: string;\n    isVisible?: boolean;\n  };\n  Element: HTMLButtonElement;\n}\n\nconst HdsFormVisibilityToggle: TemplateOnlyComponent<HdsFormVisibilityToggleSignature> =\n  <template>\n    <button\n      class=\"hds-form-visibility-toggle\"\n      type=\"button\"\n      aria-label={{@ariaLabel}}\n      ...attributes\n    >\n      <HdsIcon @name={{if @isVisible \"eye\" \"eye-off\"}} @size=\"16\" />\n      <span class=\"sr-only\" aria-live=\"polite\">{{@ariaMessageText}}</span>\n    </button>\n  </template>;\n\nexport default HdsFormVisibilityToggle;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsFormFileInputBaseSignature {\n  Args: {\n    id?: string;\n    ariaDescribedBy?: string;\n  };\n  Element: HTMLInputElement;\n}\n\nconst HdsFormFileInputBase: TemplateOnlyComponent<HdsFormFileInputBaseSignature> =\n  <template>\n    <input\n      class=\"hds-form-file-input hds-typography-body-200\"\n      id={{@id}}\n      aria-describedby={{@ariaDescribedBy}}\n      ...attributes\n      type=\"file\"\n    />\n  </template>;\n\nexport default HdsFormFileInputBase;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { service } from '@ember/service';\nimport { modifier } from 'ember-modifier';\nimport { on } from '@ember/modifier';\nimport style from 'ember-style-modifier';\n\nimport { getElementId } from '../../../../utils/hds-get-element-id.ts';\nimport HdsCopyButton from '../../copy/button/index.gts';\nimport HdsFormTextInputBase from '../text-input/base.gts';\nimport HdsFormTextareaBase from '../textarea/base.gts';\nimport HdsFormVisibilityToggle from '../visibility-toggle/index.gts';\n\nimport type { HdsCopyButtonSignature } from '../../copy/button/index.gts';\nimport type { HdsFormVisibilityToggleSignature } from '../visibility-toggle/index.gts';\nimport type { HdsFormTextInputBaseSignature } from '../text-input/base.gts';\nimport type { HdsFormTextareaBaseSignature } from '../textarea/base.gts';\nimport type HdsIntlService from '../../../../services/hds-intl.ts';\n\nexport interface HdsFormMaskedInputBaseSignature {\n  Args: {\n    copyButtonText?: HdsCopyButtonSignature['Args']['text'];\n    hasCopyButton?: boolean;\n    isContentMasked?: boolean;\n    isInvalid?: boolean;\n    isMultiline?: boolean;\n    id?: string;\n    value?: string;\n    visibilityToggleAriaLabel?: HdsFormVisibilityToggleSignature['Args']['ariaLabel'];\n    visibilityToggleAriaMessageText?: HdsFormVisibilityToggleSignature['Args']['ariaMessageText'];\n    width?: string;\n    height?: string;\n    ariaDescribedBy?: string;\n  };\n  Element:\n    | HdsFormTextareaBaseSignature['Element']\n    | HdsFormTextInputBaseSignature['Element'];\n}\n\nexport default class HdsFormMaskedInputBase extends Component<HdsFormMaskedInputBaseSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  @tracked _isContentMasked = true;\n  @tracked private _isControlled = this.args.isContentMasked !== undefined;\n\n  get isContentMasked(): boolean {\n    if (this._isControlled) {\n      // if the state is controlled from outside, the argument overrides the internal state\n      return this.args.isContentMasked ?? this._isContentMasked;\n    } else {\n      // if the state changes internally, the internal state overrides the argument\n      return this._isContentMasked;\n    }\n  }\n\n  set isContentMasked(value) {\n    this._isContentMasked = value || false;\n  }\n\n  onClickToggleMasking = (): void => {\n    this.isContentMasked = !this.isContentMasked;\n    this._isControlled = false;\n  };\n\n  private _manageState = modifier(() => {\n    if (this.args.isContentMasked !== undefined) {\n      this.isContentMasked = this.args.isContentMasked;\n    }\n    this._isControlled = true;\n\n    return () => {};\n  });\n\n  get id(): string {\n    return getElementId(this);\n  }\n\n  get visibilityToggleAriaLabel(): string {\n    if (this.args.visibilityToggleAriaLabel) {\n      return this.args.visibilityToggleAriaLabel;\n    } else if (this.isContentMasked) {\n      return this.hdsIntl.t(\n        'hds.components.form.masked-input.base.show-masked-content',\n        {\n          default: 'Show masked content',\n        }\n      );\n    } else {\n      return this.hdsIntl.t(\n        'hds.components.form.masked-input.base.hide-masked-content',\n        {\n          default: 'Hide masked content',\n        }\n      );\n    }\n  }\n\n  get visibilityToggleAriaMessageText(): string {\n    if (this.args.visibilityToggleAriaMessageText) {\n      return this.args.visibilityToggleAriaMessageText;\n    } else if (this.isContentMasked) {\n      return this.hdsIntl.t(\n        'hds.components.form.masked-input.base.input-content-is-hidden',\n        {\n          default: 'Input content is hidden',\n        }\n      );\n    } else {\n      return this.hdsIntl.t(\n        'hds.components.form.masked-input.base.input-content-is-visible',\n        {\n          default: 'Input content is visible',\n        }\n      );\n    }\n  }\n\n  get copyButtonText(): string {\n    if (this.args.copyButtonText) {\n      return this.args.copyButtonText;\n    } else {\n      return this.hdsIntl.t(\n        'hds.components.form.masked-input.base.copy-masked-content',\n        {\n          default: 'Copy masked content',\n        }\n      );\n    }\n  }\n\n  get classNames(): string {\n    const classes = ['hds-form-masked-input'];\n\n    if (this.isContentMasked) {\n      classes.push(`hds-form-masked-input--is-masked`);\n    } else {\n      classes.push(`hds-form-masked-input--is-not-masked`);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <div class={{this.classNames}} {{style width=@width}} {{this._manageState}}>\n      {{#if @isMultiline}}\n        <HdsFormTextareaBase\n          class=\"hds-form-masked-input__control\"\n          @value={{@value}}\n          @isInvalid={{@isInvalid}}\n          @height={{@height}}\n          id={{this.id}}\n          aria-describedby={{@ariaDescribedBy}}\n          ...attributes\n        />\n      {{else}}\n        <HdsFormTextInputBase\n          class=\"hds-form-masked-input__control\"\n          @value={{@value}}\n          @isInvalid={{@isInvalid}}\n          id={{this.id}}\n          aria-describedby={{@ariaDescribedBy}}\n          ...attributes\n        />\n      {{/if}}\n      <HdsFormVisibilityToggle\n        @isVisible={{this.isContentMasked}}\n        @ariaLabel={{this.visibilityToggleAriaLabel}}\n        @ariaMessageText={{this.visibilityToggleAriaMessageText}}\n        aria-controls={{this.id}}\n        class=\"hds-form-masked-input__toggle-button\"\n        {{on \"click\" this.onClickToggleMasking}}\n      />\n      {{#if @hasCopyButton}}\n        <HdsCopyButton\n          class=\"hds-form-masked-input__copy-button\"\n          @text={{this.copyButtonText}}\n          @isIconOnly={{true}}\n          @targetToCopy=\"#{{this.id}}\"\n        />\n      {{/if}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport { on } from '@ember/modifier';\nimport { notEq, or } from 'ember-truth-helpers';\n\nimport hdsT from '../../../../helpers/hds-t.ts';\nimport HdsTextBody from '../../text/body.gts';\nimport HdsButton from '../../button/index.gts';\n\nexport interface HdsFormSuperSelectAfterOptionsSignature {\n  Args: {\n    clearSelected: () => void;\n    content?: string;\n    resultCountMessage?: string;\n    selectedCount?: string;\n    showAll: () => void;\n    showNoSelectedMessage?: boolean;\n    showOnlySelected?: boolean;\n    showSelected: () => void;\n  };\n}\n\nconst HdsFormSuperSelectAfterOptions: TemplateOnlyComponent<HdsFormSuperSelectAfterOptionsSignature> =\n  <template>\n    {{#if @showNoSelectedMessage}}\n      <HdsTextBody\n        @tag=\"div\"\n        @size=\"200\"\n        class=\"hds-form-super-select__no-options-selected hds-foreground-strong\"\n      >\n        {{hdsT\n          \"hds.components.form.super-select.after-options.no-options-selected\"\n          default=\"No options selected\"\n        }}\n      </HdsTextBody>\n    {{/if}}\n    <div class=\"hds-form-super-select__after-options\">\n      {{#if @content}}\n        <HdsTextBody @tag=\"div\" @size=\"100\" class=\"hds-foreground-strong\">\n          {{@content}}\n        </HdsTextBody>\n      {{else}}\n        {{#if (or @showAll @showSelected @clearSelected)}}\n          {{#if @showOnlySelected}}\n            <HdsButton\n              @text={{hdsT\n                \"hds.components.form.super-select.after-options.show-all\"\n                default=\"Show all\"\n              }}\n              @size=\"small\"\n              @color=\"secondary\"\n              {{on \"click\" @showAll}}\n            />\n          {{else}}\n            <HdsButton\n              @text={{hdsT\n                \"hds.components.form.super-select.after-options.show-selected\"\n                default=\"Show selected\"\n              }}\n              @size=\"small\"\n              @color=\"secondary\"\n              {{on \"click\" @showSelected}}\n            />\n          {{/if}}\n          {{#if (notEq @selectedCount \"0\")}}\n            <HdsButton\n              @text={{hdsT\n                \"hds.components.form.super-select.after-options.clear-selected\"\n                default=\"Clear selected\"\n              }}\n              @size=\"small\"\n              @color=\"secondary\"\n              {{on \"click\" @clearSelected}}\n            />\n          {{/if}}\n        {{/if}}\n        <HdsTextBody\n          @tag=\"div\"\n          @size=\"100\"\n          class=\"hds-form-super-select__result-count hds-foreground-strong\"\n        >\n          {{@resultCountMessage}}\n        </HdsTextBody>\n      {{/if}}\n    </div>\n  </template>;\n\nexport default HdsFormSuperSelectAfterOptions;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\n\nimport HdsTextBody from '../../text/body.gts';\n\nexport interface HdsFormSuperSelectOptionGroupSignature {\n  Args: {\n    group: {\n      groupName?: string;\n    };\n  };\n  Blocks: {\n    default: [];\n  };\n}\n\nexport default class HdsFormSuperSelectOptionGroup extends Component<HdsFormSuperSelectOptionGroupSignature> {\n  private _groupTitleId = 'group-title-' + guidFor(this);\n\n  <template>\n    <li\n      class=\"hds-form-super-select__option-group\"\n      role=\"group\"\n      aria-labelledby={{this._groupTitleId}}\n    >\n      <HdsTextBody\n        @tag=\"div\"\n        @size=\"100\"\n        @weight=\"semibold\"\n        class=\"hds-form-super-select__option-group-title\"\n        id={{this._groupTitleId}}\n      >\n        {{@group.groupName}}\n      </HdsTextBody>\n      {{yield}}\n    </li>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { on } from '@ember/modifier';\nimport { service } from '@ember/service';\nimport { modifier } from 'ember-modifier';\n\nimport type HdsIntlService from '../../../../services/hds-intl';\n\nimport {\n  HdsPaginationDirectionValues,\n  getHdsPaginationDirectionAriaLabel,\n  getHdsPaginationDirectionLabel,\n} from '../types.ts';\nimport HdsInteractive from '../../interactive/index.gts';\nimport HdsIcon from '../../icon/index.gts';\nimport HdsTextBody from '../../text/body.gts';\n\nimport type { HdsIconSignature } from '../../icon/index.ts';\nimport type { HdsInteractiveSignature } from '../../interactive/index.gts';\nimport type { HdsPaginationDirections } from '../types.ts';\n\ninterface HdsPaginationControlArrowContent {\n  label: string;\n  icon: HdsIconSignature['Args']['name'];\n  ariaLabel: string;\n}\n\ninterface HdsPaginationControlArrowArgs {\n  direction: HdsPaginationDirections;\n  disabled?: boolean;\n  showLabel?: boolean;\n  onClick?: (direction: HdsPaginationDirections) => void;\n  isFocused?: boolean;\n  onFocusHandled?: () => void;\n}\n\nexport interface HdsPaginationControlArrowSignature {\n  Args: HdsPaginationControlArrowArgs & HdsInteractiveSignature['Args'];\n  Element: HdsInteractiveSignature['Element'];\n}\n\nexport const DIRECTIONS: HdsPaginationDirections[] = [\n  HdsPaginationDirectionValues.Prev,\n  HdsPaginationDirectionValues.Next,\n];\n\nexport default class HdsPaginationControlArrow extends Component<HdsPaginationControlArrowSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  focusWhen = modifier<{\n    Args: {\n      Positional: [boolean | undefined, (() => void) | undefined];\n    };\n    Element: HTMLElement;\n  }>((element, [isFocused, onFocusHandled]) => {\n    if (isFocused) {\n      element.focus();\n\n      if (typeof onFocusHandled === 'function') {\n        const onFocusHandledFrame = requestAnimationFrame(() => {\n          onFocusHandled();\n        });\n\n        return () => {\n          cancelAnimationFrame(onFocusHandledFrame);\n        };\n      }\n    }\n  });\n\n  get content(): HdsPaginationControlArrowContent {\n    const { direction } = this.args;\n\n    assert(\n      `@direction for \"Pagination::Nav::Arrow\" must be one of the following: ${DIRECTIONS.join(\n        ', '\n      )}; received: ${direction}`,\n      DIRECTIONS.includes(direction)\n    );\n\n    const hdsPaginationNavArrowContentDirectionMap: Record<\n      HdsPaginationDirections,\n      HdsPaginationControlArrowContent\n    > = {\n      [HdsPaginationDirectionValues.Prev]: {\n        label: getHdsPaginationDirectionLabel(\n          HdsPaginationDirectionValues.Prev,\n          this.hdsIntl\n        ),\n        icon: 'chevron-left',\n        ariaLabel: getHdsPaginationDirectionAriaLabel(\n          HdsPaginationDirectionValues.Prev,\n          this.hdsIntl\n        ),\n      },\n      [HdsPaginationDirectionValues.Next]: {\n        label: getHdsPaginationDirectionLabel(\n          HdsPaginationDirectionValues.Next,\n          this.hdsIntl\n        ),\n        icon: 'chevron-right',\n        ariaLabel: getHdsPaginationDirectionAriaLabel(\n          HdsPaginationDirectionValues.Next,\n          this.hdsIntl\n        ),\n      },\n    };\n\n    return hdsPaginationNavArrowContentDirectionMap[direction];\n  }\n\n  get showLabel(): boolean {\n    const { showLabel = true } = this.args;\n\n    return showLabel;\n  }\n\n  get classNames(): string {\n    const classes = [\n      'hds-pagination-nav__control',\n      'hds-pagination-nav__arrow',\n      `hds-pagination-nav__arrow--direction-${this.args.direction}`,\n    ];\n\n    return classes.join(' ');\n  }\n\n  onClick = (): void => {\n    const { onClick } = this.args;\n\n    if (typeof onClick === 'function') {\n      onClick(this.args.direction);\n    }\n  };\n\n  <template>\n    {{#if @disabled}}\n      <HdsInteractive\n        class={{this.classNames}}\n        aria-label={{this.content.ariaLabel}}\n        disabled={{true}}\n        ...attributes\n      >\n        <HdsIcon @name={{this.content.icon}} />\n        {{#if this.showLabel}}\n          <HdsTextBody\n            class=\"hds-pagination-nav__arrow-label\"\n            @tag=\"span\"\n            @size=\"100\"\n            @weight=\"medium\"\n            aria-hidden=\"true\"\n          >\n            {{this.content.label}}\n          </HdsTextBody>\n        {{/if}}\n      </HdsInteractive>\n    {{else}}\n      <HdsInteractive\n        class={{this.classNames}}\n        @route={{@route}}\n        @query={{@query}}\n        @model={{@model}}\n        @models={{@models}}\n        @replace={{@replace}}\n        {{on \"click\" this.onClick}}\n        {{this.focusWhen @isFocused @onFocusHandled}}\n        aria-label={{this.content.ariaLabel}}\n        ...attributes\n      >\n        <HdsIcon @name={{this.content.icon}} />\n        {{#if this.showLabel}}\n          <HdsTextBody\n            class=\"hds-pagination-nav__arrow-label\"\n            @tag=\"span\"\n            @size=\"100\"\n            @weight=\"medium\"\n            aria-hidden=\"true\"\n          >\n            {{this.content.label}}\n          </HdsTextBody>\n        {{/if}}\n      </HdsInteractive>\n    {{/if}}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { guidFor } from '@ember/object/internals';\nimport { on } from '@ember/modifier';\nimport { eq } from 'ember-truth-helpers';\n\nimport HdsFormSelectBase from '../../form/select/base.gts';\n\nimport type { HdsFormSelectBaseSignature } from '../../form/select/base.gts';\n\nexport interface HdsPaginationSizeSelectorSignature {\n  Args: {\n    pageSizes: number[];\n    label?: string;\n    selectedSize?: number;\n    onChange?: (size: number) => void;\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsPaginationSizeSelector extends Component<HdsPaginationSizeSelectorSignature> {\n  private _sizeSelectorId = 'pagination-size-selector-' + guidFor(this);\n\n  get pageSizes(): number[] {\n    const { pageSizes } = this.args;\n\n    assert(\n      '@pageSizes for \"Pagination::SizeSelector\" must be defined',\n      pageSizes !== undefined\n    );\n\n    return pageSizes;\n  }\n\n  get selectedSize(): number | undefined {\n    const { selectedSize } = this.args;\n\n    assert(\n      `@selectedSize for \"Pagination::SizeSelector\" must one of the @pageSizes provided (${this.pageSizes.join(\n        ','\n      )}), received ${selectedSize}`,\n      selectedSize === undefined || this.pageSizes.includes(selectedSize)\n    );\n\n    return selectedSize;\n  }\n\n  get label(): string {\n    const { label = 'Items per page' } = this.args;\n\n    return label;\n  }\n\n  onChange = (e: Event): void => {\n    const { onChange } = this.args;\n\n    const target = e.target as HdsFormSelectBaseSignature['Element'];\n\n    if (typeof onChange === 'function') {\n      onChange(parseInt(target.value));\n    }\n  };\n\n  <template>\n    <div class=\"hds-pagination-size-selector\" ...attributes>\n      <label\n        class=\"hds-typography-body-100 hds-font-weight-medium\"\n        for={{this._sizeSelectorId}}\n      >{{this.label}}</label>\n      <HdsFormSelectBase\n        id={{this._sizeSelectorId}}\n        {{on \"change\" this.onChange}}\n        as |S|\n      >\n        <S.Options>\n          {{#each this.pageSizes as |size|}}\n            <option\n              value={{size}}\n              selected={{if (eq size this.selectedSize) true null}}\n            >{{size}}</option>\n          {{/each}}\n        </S.Options>\n      </HdsFormSelectBase>\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { eq } from 'ember-truth-helpers';\n\nimport { HdsStepperStatusesValues } from '../types.ts';\nimport HdsIcon from '../../icon/index.gts';\nimport HdsTextBody from '../../text/body.gts';\n\nimport type { HdsStepperStatuses } from '../types.ts';\n\nexport const DEFAULT_STATUS = HdsStepperStatusesValues.Incomplete;\nexport const STATUSES: HdsStepperStatuses[] = Object.values(\n  HdsStepperStatusesValues\n);\n\nexport interface HdsStepperStepIndicatorSignature {\n  Args: {\n    status?: HdsStepperStatuses;\n    isInteractive?: boolean;\n    text?: string;\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsStepperStepIndicator extends Component<HdsStepperStepIndicatorSignature> {\n  get status(): HdsStepperStatuses {\n    const { status = DEFAULT_STATUS } = this.args;\n\n    assert(\n      `@status for \"Hds::Stepper::Step::Indicator\" must be one of the following: ${STATUSES.join(\n        ', '\n      )}; received: ${status}`,\n      STATUSES.includes(status)\n    );\n\n    return status;\n  }\n\n  get isInteractive(): boolean {\n    return this.args.isInteractive || false;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-stepper-indicator-step'];\n\n    // Based on the @status arg\n    classes.push(`hds-stepper-indicator-step--status-${this.status}`);\n\n    if (this.isInteractive) {\n      classes.push(`hds-stepper-indicator-step--is-interactive`);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <div class={{this.classNames}} ...attributes>\n      <div class=\"hds-stepper-indicator-step__svg-hexagon\">\n        <svg\n          width=\"24\"\n          height=\"24\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n          aria-hidden=\"true\"\n        >\n          <path\n            d=\"m3.664 6.264 6.99-4.42a2.5 2.5 0 0 1 2.67-.002l7.01 4.422A2.5 2.5 0 0 1 21.5 8.38v7.242a2.5 2.5 0 0 1-1.166 2.115l-7.01 4.422a2.5 2.5 0 0 1-2.67-.002l-6.99-4.42A2.5 2.5 0 0 1 2.5 15.623V8.377a2.5 2.5 0 0 1 1.164-2.113Z\"\n            stroke-width=\"1\"\n          ></path>\n        </svg>\n      </div>\n      <div class=\"hds-stepper-indicator-step__status\">\n        {{#if (eq @status \"processing\")}}\n          <HdsIcon\n            class=\"hds-stepper-indicator-step__icon\"\n            @name=\"loading\"\n            @size=\"16\"\n          />\n        {{else if (eq @status \"complete\")}}\n          <HdsIcon\n            class=\"hds-stepper-indicator-step__icon\"\n            @name=\"check\"\n            @size=\"16\"\n          />\n        {{else}}\n          <HdsTextBody\n            class=\"hds-stepper-indicator-step__text\"\n            @tag=\"span\"\n            @size=\"100\"\n            @weight=\"medium\"\n          >{{@text}}</HdsTextBody>\n        {{/if}}\n      </div>\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { guidFor } from '@ember/object/internals';\nimport { on } from '@ember/modifier';\n\nimport {\n  HdsTableThSortOrderIconValues,\n  HdsTableThSortOrderValues,\n} from './types.ts';\nimport HdsIcon from '../icon/index.gts';\nimport hdsT from '../../../helpers/hds-t.ts';\n\nimport type {\n  HdsTableThSortOrder,\n  HdsTableThSortOrderIcons,\n  HdsTableThSortOrderLabels,\n} from './types.ts';\nimport type HdsIntlService from '../../../services/hds-intl.ts';\n\nexport interface HdsTableThButtonSortSignature {\n  Args: {\n    labelId?: string;\n    onClick?: () => void;\n    sortOrder?: HdsTableThSortOrder;\n  };\n  Element: HTMLButtonElement;\n}\n\nconst NOOP = () => {};\n\nexport default class HdsTableThButtonSort extends Component<HdsTableThButtonSortSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  // Generates a unique ID for the (hidden) \"label prefix/suffix\" <span> elements\n  private _prefixLabelId = 'prefix-' + guidFor(this);\n  private _suffixLabelId = 'suffix-' + guidFor(this);\n\n  get icon(): HdsTableThSortOrderIcons {\n    switch (this.args.sortOrder) {\n      case HdsTableThSortOrderValues.Asc:\n        return HdsTableThSortOrderIconValues.ArrowUp;\n      case HdsTableThSortOrderValues.Desc:\n        return HdsTableThSortOrderIconValues.ArrowDown;\n      default:\n        return HdsTableThSortOrderIconValues.SwapVertical;\n    }\n  }\n\n  // Determines the label (suffix) to use in the `aria-labelledby` attribute of the button,\n  // used to indicate what will happen if the user clicks on the button\n  get sortOrderLabel(): HdsTableThSortOrderLabels {\n    const { sortOrder } = this.args;\n\n    const translatedLabel =\n      sortOrder === HdsTableThSortOrderValues.Asc\n        ? this.hdsIntl.t('hds.components.common.descending', {\n            default: 'descending',\n          })\n        : this.hdsIntl.t('hds.components.common.ascending', {\n            default: 'ascending',\n          });\n\n    return translatedLabel as HdsTableThSortOrderLabels;\n  }\n\n  get onClick(): () => void {\n    const { onClick } = this.args;\n\n    if (typeof onClick === 'function') {\n      return onClick;\n    } else {\n      return NOOP;\n    }\n  }\n\n  get classNames(): string {\n    const classes = ['hds-table__th-button', 'hds-table__th-button--sort'];\n\n    // add a class based on the @sortOrder argument\n    if (\n      this.args.sortOrder === HdsTableThSortOrderValues.Asc ||\n      this.args.sortOrder === HdsTableThSortOrderValues.Desc\n    ) {\n      classes.push(`hds-table__th-button--is-sorted`);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <button\n      type=\"button\"\n      class={{this.classNames}}\n      {{on \"click\" this.onClick}}\n      aria-labelledby=\"{{this._prefixLabelId}} {{@labelId}} {{this._suffixLabelId}}\"\n      ...attributes\n    >\n      <span\n        id={{this._prefixLabelId}}\n        class=\"hds-table__th-button-aria-label-hidden-segment\"\n      >\n        {{hdsT \"hds.components.common.sort-by\" default=\"Sort by\"}}\n      </span>\n      <span\n        id={{this._suffixLabelId}}\n        class=\"hds-table__th-button-aria-label-hidden-segment\"\n      >\n        {{this.sortOrderLabel}}\n      </span>\n      <HdsIcon @name={{this.icon}} />\n    </button>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { assert } from '@ember/debug';\nimport { or } from 'ember-truth-helpers';\nimport style from 'ember-style-modifier';\n\nimport { HdsTableHorizontalAlignmentValues } from './types.ts';\nimport HdsTableThButtonTooltip from './th-button-tooltip.gts';\n\nimport type { HdsTableHorizontalAlignment, HdsTableScope } from './types.ts';\n\nexport const ALIGNMENTS: HdsTableHorizontalAlignment[] = Object.values(\n  HdsTableHorizontalAlignmentValues\n);\nexport const DEFAULT_ALIGN = HdsTableHorizontalAlignmentValues.Left;\n\nexport interface HdsTableThSignature {\n  Args: {\n    align?: HdsTableHorizontalAlignment;\n    isVisuallyHidden?: boolean;\n    scope?: HdsTableScope;\n    tooltip?: string;\n    width?: string;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLTableCellElement;\n}\n\nexport default class HdsTableTh extends Component<HdsTableThSignature> {\n  private _labelId = guidFor(this);\n\n  get align(): HdsTableHorizontalAlignment {\n    const { align = DEFAULT_ALIGN } = this.args;\n\n    assert(\n      `@align for \"Hds::Table::Th\" must be one of the following: ${ALIGNMENTS.join(\n        ', '\n      )}; received: ${align}`,\n      ALIGNMENTS.includes(align)\n    );\n    return align;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-table__th'];\n\n    // add a class based on the @align argument\n    if (this.align) {\n      classes.push(`hds-table__th--align-${this.align}`);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <th\n      class={{this.classNames}}\n      {{style width=@width minWidth=@width}}\n      ...attributes\n      scope={{(or @scope \"col\")}}\n    >\n      {{#if @isVisuallyHidden}}\n        <span class=\"sr-only\">{{yield}}</span>\n      {{else}}\n        {{#if @tooltip}}\n          <div class=\"hds-table__th-content\">\n            <span\n              id={{this._labelId}}\n              class=\"hds-typography-body-200 hds-font-weight-semibold\"\n            >{{yield}}</span>\n            <HdsTableThButtonTooltip\n              @tooltip={{@tooltip}}\n              @labelId={{this._labelId}}\n            />\n          </div>\n        {{else}}\n          <span\n            class=\"hds-typography-body-200 hds-font-weight-semibold\"\n          >{{yield}}</span>\n        {{/if}}\n      {{/if}}\n    </th>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { guidFor } from '@ember/object/internals';\n\nimport HdsIcon from '../icon/index.gts';\nimport hdsTooltip from '../../../modifiers/hds-tooltip.ts';\nimport hdsT from '../../../helpers/hds-t.ts';\n\nexport interface HdsTableThButtonTooltipSignature {\n  Args: {\n    labelId?: string;\n    tooltip: string;\n  };\n  Element: HTMLButtonElement;\n}\n\nexport default class HdsTableThButtonTooltip extends Component<HdsTableThButtonTooltipSignature> {\n  // Generates a unique ID for the (hidden) \"label prefix\" <span> element\n  private _prefixLabelId = guidFor(this);\n\n  get tooltip(): string {\n    assert(\n      `@tooltip for \"HdsTableThButtonTooltip\" must be a string`,\n      typeof this.args.tooltip === 'string'\n    );\n    return this.args.tooltip;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-table__th-button', 'hds-table__th-button--tooltip'];\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <button\n      type=\"button\"\n      class={{this.classNames}}\n      {{hdsTooltip this.tooltip}}\n      aria-labelledby=\"{{this._prefixLabelId}} {{@labelId}}\"\n      ...attributes\n    >\n      <span\n        id={{this._prefixLabelId}}\n        class=\"hds-table__th-button-aria-label-hidden-segment\"\n      >\n        {{hdsT\n          \"hds.components.common.tooltip-prefix\"\n          default=\"More information for\"\n        }}\n      </span>\n      <HdsIcon @name=\"info\" />\n    </button>\n  </template>\n}\n","/*global navigator*/\n'use strict';\n\nconst {\n  REGEX_BACKSLASH,\n  REGEX_REMOVE_BACKSLASH,\n  REGEX_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.isWindows = () => {\n  if (typeof navigator !== 'undefined' && navigator.platform) {\n    const platform = navigator.platform.toLowerCase();\n    return platform === 'win32' || platform === 'windows';\n  }\n\n  if (typeof process !== 'undefined' && process.platform) {\n    return process.platform === 'win32';\n  }\n\n  return false;\n};\n\nexports.removeBackslashes = str => {\n  return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n    return match === '\\\\' ? '' : match;\n  });\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n  const idx = input.lastIndexOf(char, lastIdx);\n  if (idx === -1) return input;\n  if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n  return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n  let output = input;\n  if (output.startsWith('./')) {\n    output = output.slice(2);\n    state.prefix = './';\n  }\n  return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n  const prepend = options.contains ? '' : '^';\n  const append = options.contains ? '' : '$';\n\n  let output = `${prepend}(?:${input})${append}`;\n  if (state.negated === true) {\n    output = `(?:^(?!${output}).*$)`;\n  }\n  return output;\n};\n\nexports.basename = (path, { windows } = {}) => {\n  const segs = path.split(windows ? /[\\\\/]/ : '/');\n  const last = segs[segs.length - 1];\n\n  if (last === '') {\n    return segs[segs.length - 2];\n  }\n\n  return last;\n};\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsAccordionTypeValues {\n  Card = 'card',\n  Flush = 'flush',\n}\nexport type HdsAccordionTypes = `${HdsAccordionTypeValues}`;\n\nexport enum HdsAccordionSizeValues {\n  Small = 'small',\n  Medium = 'medium',\n  Large = 'large',\n}\nexport type HdsAccordionSizes = `${HdsAccordionSizeValues}`;\n\nexport enum HdsAccordionForceStateValues {\n  Open = 'open',\n  Close = 'close',\n}\nexport type HdsAccordionForceStates = `${HdsAccordionForceStateValues}`;\n\nexport enum HdsAccordionItemTitleTagValues {\n  Div = 'div',\n  H1 = 'h1',\n  H2 = 'h2',\n  H3 = 'h3',\n  H4 = 'h4',\n  H5 = 'h5',\n  H6 = 'h6',\n}\n\nexport type HdsAccordionItemTitleTags = `${HdsAccordionItemTitleTagValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { tracked } from '@glimmer/tracking';\nimport { scheduleOnce } from '@ember/runloop';\nimport type Component from '@glimmer/component';\nimport type { HdsFormFieldSignature } from '../components/hds/form/field/index.gts';\nimport type { HdsFormFieldsetSignature } from '../components/hds/form/fieldset/index.gts';\nimport type { HdsFormKeyValueInputsFieldSignature } from '../components/hds/form/key-value-inputs/field.gts';\nimport type { HdsFormKeyValueInputsSignature } from '../components/hds/form/key-value-inputs/index.gts';\n\ntype ElementSet = Set<HTMLElement>;\n\nclass AriaDescriptorMap {\n  private _elements = new WeakMap<AriaDescribedByComponent, ElementSet>();\n\n  register(obj: AriaDescribedByComponent, element: HTMLElement): void {\n    const elements = this.findOrCreateElementSet(obj);\n    elements.add(element);\n  }\n\n  unregister(obj: AriaDescribedByComponent, element: HTMLElement): void {\n    const elements = this.findOrCreateElementSet(obj);\n    elements.delete(element);\n  }\n\n  entries(obj: AriaDescribedByComponent): HTMLElement[] {\n    const elements = this.findOrCreateElementSet(obj);\n    return Array.from(elements.values());\n  }\n\n  private findOrCreateElementSet(obj: AriaDescribedByComponent): ElementSet {\n    if (this._elements.has(obj)) {\n      return this._elements.get(obj) as ElementSet;\n    }\n\n    const elements: ElementSet = new Set();\n    this._elements.set(obj, elements);\n    return elements;\n  }\n}\n\nconst ariaDescriptorMap = new AriaDescriptorMap();\n\ntype AriaDescribedByArgs =\n  | HdsFormFieldSignature\n  | HdsFormFieldsetSignature\n  | HdsFormKeyValueInputsFieldSignature\n  | HdsFormKeyValueInputsSignature;\n\nexport interface AriaDescribedByComponent\n  extends Component<AriaDescribedByArgs> {\n  __ARIA_DESCRIPTION_IDS__?: string[];\n  ariaDescribedBy?: string;\n}\n\n// essentially a type that says we return a subclass of the given type T\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ClassOf<T> = new (owner: unknown, ...args: any[]) => T;\n\nexport function ariaDescribedBy(\n  BaseComponent: ClassOf<AriaDescribedByComponent>\n): ClassOf<AriaDescribedByComponent> {\n  class EnhancedComponent extends BaseComponent {\n    @tracked __ARIA_DESCRIPTION_IDS__: string[] = [];\n\n    get ariaDescribedBy(): string {\n      let descriptors = this.__ARIA_DESCRIPTION_IDS__;\n\n      if (this.args.extraAriaDescribedBy) {\n        descriptors = descriptors.concat(this.args.extraAriaDescribedBy);\n      }\n\n      return descriptors.join(' ');\n    }\n  }\n  return EnhancedComponent;\n}\n\nfunction synchronizeDescriptors(component: AriaDescribedByComponent): void {\n  if (component.isDestroying || component.isDestroyed) return;\n  const descriptors = ariaDescriptorMap.entries(component);\n  component.__ARIA_DESCRIPTION_IDS__ = descriptors.map(\n    (element): string => element.id\n  );\n}\n\nexport function registerAriaDescriptionElement(\n  component: AriaDescribedByComponent,\n  element: HTMLElement\n): void {\n  ariaDescriptorMap.register(component, element);\n  // eslint-disable-next-line ember/no-runloop\n  scheduleOnce('afterRender', component, synchronizeDescriptors, component);\n}\n\nexport function unregisterAriaDescriptionElement(\n  component: AriaDescribedByComponent,\n  element: HTMLElement\n): void {\n  ariaDescriptorMap.unregister(component, element);\n  // eslint-disable-next-line ember/no-runloop\n  scheduleOnce('afterRender', component, synchronizeDescriptors, component);\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { modifier } from 'ember-modifier';\nimport { TrackedMap } from 'tracked-built-ins';\nimport { hash } from '@ember/helper';\nimport { isPixelSize, measureColumnWidth, pixelToNumber } from '../utils.ts';\n\nimport type {\n  HdsAdvancedTableNormalizedColumn,\n  HdsAdvancedTablePixelString,\n} from '../types.ts';\nimport type { ModifierLike } from '@glint/template';\n\nexport const DEFAULT_WIDTH = '1fr'; // default to '1fr' to allow flexible width\nexport const DEFAULT_MIN_WIDTH = '150px';\nexport const SUBPIXEL_TOLERANCE = 0.5;\n\ntype HdsAdvancedTableColumnWidth = HdsAdvancedTableNormalizedColumn['width'];\n\nexport interface HdsAdvancedTableSyncWidthValuesSignature {\n  Element: HTMLDivElement;\n}\n\ninterface HdsAdvancedTableColumnManagerWidthSignature {\n  Args: {\n    columnOrder: string[];\n    columns: HdsAdvancedTableNormalizedColumn[];\n    orderedColumns: HdsAdvancedTableNormalizedColumn[];\n    thElements: TrackedMap<string, HTMLDivElement>;\n    isSelectable?: boolean;\n    getColumnByKey: (\n      key: string\n    ) => HdsAdvancedTableNormalizedColumn | undefined;\n  };\n  Blocks: {\n    default: [\n      {\n        gridTemplateColumns: string;\n        syncWidthValues: ModifierLike<HdsAdvancedTableSyncWidthValuesSignature>;\n        beginColumnResize: () => void;\n        resizeColumnByDelta: (\n          columnKey: HdsAdvancedTableNormalizedColumn['key'],\n          deltaPx: number\n        ) => number;\n        commitColumnWidths: () => void;\n        getAppliedWidth: (\n          columnKey: HdsAdvancedTableNormalizedColumn['key']\n        ) => HdsAdvancedTableNormalizedColumn['width'];\n        getRenderedWidth: (\n          columnKey: HdsAdvancedTableNormalizedColumn['key']\n        ) => HdsAdvancedTablePixelString | undefined;\n        getSiblingColumnKeys: (\n          columnKey: HdsAdvancedTableNormalizedColumn['key'] | null\n        ) => {\n          previous?: HdsAdvancedTableNormalizedColumn['key'];\n          next?: HdsAdvancedTableNormalizedColumn['key'];\n        };\n        resetTransientColumnWidths: () => void;\n        restoreColumnWidth: (\n          columnKey: HdsAdvancedTableNormalizedColumn['key']\n        ) => void;\n      },\n    ];\n  };\n}\n\nexport default class HdsAdvancedTableColumnManagerWidth extends Component<HdsAdvancedTableColumnManagerWidthSignature> {\n  private _columnWidths = new TrackedMap<string, HdsAdvancedTableColumnWidth>();\n  private _originalColumnWidths = new TrackedMap<\n    string,\n    HdsAdvancedTableColumnWidth\n  >();\n  private _transientColumnWidths = new TrackedMap<\n    string,\n    HdsAdvancedTablePixelString\n  >();\n  private _resizeStartWidths = new TrackedMap<string, number>();\n\n  syncWidthValues = modifier<HdsAdvancedTableSyncWidthValuesSignature>(() => {\n    const { columns } = this.args;\n\n    for (const column of columns) {\n      this._columnWidths.set(column.key, column.width ?? DEFAULT_WIDTH);\n      this._originalColumnWidths.set(column.key, column.width ?? DEFAULT_WIDTH);\n    }\n  });\n\n  get gridTemplateColumns(): string {\n    const { isSelectable, orderedColumns } = this.args;\n\n    let style = isSelectable ? 'min-content ' : '';\n\n    for (const col of orderedColumns) {\n      style += ` ${this.getAppliedWidth(col.key)}`;\n    }\n\n    return style;\n  }\n\n  getAppliedWidth = (\n    columnKey: HdsAdvancedTableNormalizedColumn['key']\n  ): HdsAdvancedTableNormalizedColumn['width'] => {\n    const width = this._columnWidths.get(columnKey);\n    const transientWidth = this._transientColumnWidths.get(columnKey);\n\n    return (\n      transientWidth ??\n      width ??\n      `${this.args.thElements.get(columnKey)?.offsetWidth ?? 0}px`\n    );\n  };\n\n  getSiblingColumnKeys = (\n    columnKey: HdsAdvancedTableNormalizedColumn['key'] | null\n  ): {\n    previous?: HdsAdvancedTableNormalizedColumn['key'];\n    next?: HdsAdvancedTableNormalizedColumn['key'];\n  } => {\n    if (columnKey === null) {\n      return {};\n    }\n\n    const columnIndex = this.args.columnOrder.indexOf(columnKey);\n\n    if (columnIndex === -1) {\n      return {};\n    }\n\n    return {\n      previous:\n        columnIndex === 0 ? undefined : this.args.columnOrder[columnIndex - 1],\n      next:\n        columnIndex === this.args.columnOrder.length - 1\n          ? undefined\n          : this.args.columnOrder[columnIndex + 1],\n    };\n  };\n\n  private _getPxWidth(key: string): number {\n    const width = this._columnWidths.get(key);\n\n    if (width !== undefined && isPixelSize(width)) {\n      return pixelToNumber(width as `${number}px`);\n    } else {\n      return this.args.thElements.get(key)?.offsetWidth ?? 0;\n    }\n  }\n\n  private _colMinPx(\n    column: HdsAdvancedTableNormalizedColumn | undefined\n  ): number {\n    const minWidth = column?.minWidth ?? DEFAULT_MIN_WIDTH;\n\n    return isPixelSize(minWidth) ? pixelToNumber(minWidth) : 0;\n  }\n\n  private _colMaxPx(\n    column: HdsAdvancedTableNormalizedColumn | undefined\n  ): number {\n    const maxWidth = column?.maxWidth;\n\n    return maxWidth !== undefined && isPixelSize(maxWidth)\n      ? pixelToNumber(maxWidth)\n      : Infinity;\n  }\n\n  beginColumnResize = (): void => {\n    this._resizeStartWidths.clear();\n\n    for (const key of this.args.columnOrder) {\n      const pixelWidth = this._getPxWidth(key);\n\n      this._resizeStartWidths.set(key, pixelWidth);\n      this._transientColumnWidths.set(key, `${pixelWidth}px`);\n    }\n  };\n\n  private _distributeWidthChange(keys: string[], amount: number): void {\n    let remaining = amount;\n\n    for (const key of keys) {\n      const start = this._resizeStartWidths.get(key) ?? 0;\n      const column = this.args.getColumnByKey(key);\n      let applied = 0;\n\n      if (remaining > 0) {\n        applied = Math.min(\n          remaining,\n          Math.max(0, this._colMaxPx(column) - start)\n        );\n      } else if (remaining < 0) {\n        applied = -Math.min(\n          -remaining,\n          Math.max(0, start - this._colMinPx(column))\n        );\n      }\n\n      this._transientColumnWidths.set(key, `${start + applied}px`);\n      remaining -= applied;\n    }\n  }\n\n  private _distributableCapacity(keys: string[], grow: boolean): number {\n    return keys.reduce((sum, key) => {\n      const start = this._resizeStartWidths.get(key) ?? 0;\n      const column = this.args.getColumnByKey(key);\n\n      return (\n        sum +\n        (grow\n          ? Math.max(0, this._colMaxPx(column) - start)\n          : Math.max(0, start - this._colMinPx(column)))\n      );\n    }, 0);\n  }\n\n  resizeColumnByDelta = (\n    columnKey: HdsAdvancedTableNormalizedColumn['key'],\n    deltaPx: number\n  ): number => {\n    const order = this.args.columnOrder;\n    const index = order.indexOf(columnKey);\n\n    if (index === -1) {\n      return 0;\n    }\n\n    const draggedKeys = [columnKey];\n    // nearest-to-boundary first, so the cascade grows outward\n    const rightKeys = order.slice(index + 1);\n\n    let actualDelta: number;\n\n    if (deltaPx > 0) {\n      const capacity = Math.min(\n        this._distributableCapacity(draggedKeys, true),\n        this._distributableCapacity(rightKeys, false)\n      );\n\n      actualDelta = Math.max(0, Math.min(deltaPx, capacity));\n    } else if (deltaPx < 0) {\n      const capacity = Math.min(\n        this._distributableCapacity(draggedKeys, false),\n        this._distributableCapacity(rightKeys, true)\n      );\n\n      actualDelta = Math.min(0, -Math.min(-deltaPx, capacity));\n    } else {\n      actualDelta = 0;\n    }\n\n    this._distributeWidthChange(draggedKeys, actualDelta);\n    this._distributeWidthChange(rightKeys, -actualDelta);\n\n    return actualDelta;\n  };\n\n  commitColumnWidths = (): void => {\n    const entries = this.args.columns.map((column) => {\n      const startPixelWidth = this._resizeStartWidths.get(column.key);\n      const transientWidth = this._transientColumnWidths.get(column.key);\n      const pixelWidth =\n        transientWidth !== undefined\n          ? pixelToNumber(transientWidth)\n          : this._getPxWidth(column.key);\n\n      return {\n        key: column.key,\n        pixelWidth,\n        startPixelWidth: startPixelWidth ?? pixelWidth,\n        frMultiplier: this._parseFrMultiplier(\n          this._columnWidths.get(column.key) ?? DEFAULT_WIDTH\n        ),\n        hasMoved:\n          startPixelWidth !== undefined &&\n          Math.abs(pixelWidth - startPixelWidth) > SUBPIXEL_TOLERANCE,\n      };\n    });\n\n    const pxPerFrUnit = this._resolvePxPerFrUnit(entries);\n\n    for (const entry of entries) {\n      if (!entry.hasMoved) {\n        continue;\n      }\n\n      if (entry.frMultiplier !== undefined && pxPerFrUnit > 0) {\n        const weight = Math.max(\n          0,\n          entry.frMultiplier +\n            (entry.pixelWidth - entry.startPixelWidth) / pxPerFrUnit\n        );\n\n        this._columnWidths.set(\n          entry.key,\n          `${Math.round(weight * 1e6) / 1e6}fr`\n        );\n      } else {\n        this._columnWidths.set(entry.key, `${Math.round(entry.pixelWidth)}px`);\n      }\n    }\n  };\n\n  private _resolvePxPerFrUnit(\n    entries: {\n      startPixelWidth: number;\n      frMultiplier: number | undefined;\n    }[]\n  ): number {\n    const flexible = entries.filter(\n      (entry) => entry.frMultiplier !== undefined && entry.frMultiplier > 0\n    );\n\n    const totalWeight = flexible.reduce(\n      (sum, entry) => sum + (entry.frMultiplier ?? 0),\n      0\n    );\n    const totalPixels = flexible.reduce(\n      (sum, entry) => sum + entry.startPixelWidth,\n      0\n    );\n\n    return totalWeight > 0 ? totalPixels / totalWeight : 0;\n  }\n\n  resetTransientColumnWidths = (): void => {\n    this._transientColumnWidths.clear();\n  };\n\n  restoreColumnWidth = (\n    columnKey: HdsAdvancedTableNormalizedColumn['key']\n  ): void => {\n    const originalWidth =\n      this._originalColumnWidths.get(columnKey) ?? DEFAULT_WIDTH;\n\n    this._transientColumnWidths.delete(columnKey);\n    this._columnWidths.set(columnKey, originalWidth);\n  };\n\n  getRenderedWidth = (\n    columnKey: HdsAdvancedTableNormalizedColumn['key']\n  ): HdsAdvancedTablePixelString | undefined => {\n    return measureColumnWidth(this.args.thElements.get(columnKey));\n  };\n\n  private _parseFrMultiplier(value: string): number | undefined {\n    const match = /^(-?\\d+(?:\\.\\d+)?)fr$/.exec(value);\n\n    return match ? Number(match[1]) : undefined;\n  }\n\n  <template>\n    {{yield\n      (hash\n        gridTemplateColumns=this.gridTemplateColumns\n        syncWidthValues=this.syncWidthValues\n        beginColumnResize=this.beginColumnResize\n        resizeColumnByDelta=this.resizeColumnByDelta\n        commitColumnWidths=this.commitColumnWidths\n        getAppliedWidth=this.getAppliedWidth\n        getSiblingColumnKeys=this.getSiblingColumnKeys\n        getRenderedWidth=this.getRenderedWidth\n        restoreColumnWidth=this.restoreColumnWidth\n        resetTransientColumnWidths=this.resetTransientColumnWidths\n      )\n    }}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { modifier } from 'ember-modifier';\n\nexport interface HdsScrollIntoViewOnFocusModifierSignature {\n  Args: {\n    Named: {\n      options?: ScrollIntoViewOptions;\n    };\n  };\n  Element: HTMLElement;\n}\n\nconst DEFAULT_OPTIONS: ScrollIntoViewOptions = {\n  block: 'nearest',\n  inline: 'nearest',\n};\n\nconst hdsScrollIntoViewOnFocus =\n  modifier<HdsScrollIntoViewOnFocusModifierSignature>(\n    (element, _positional, named) => {\n      const scrollOptions = named.options ?? DEFAULT_OPTIONS;\n\n      const onFocus = (): void => {\n        // only scroll for keyboard-driven focus\n        if (element.matches(':focus-visible') === false) {\n          return;\n        }\n\n        element.scrollIntoView(scrollOptions);\n      };\n\n      element.addEventListener('focus', onFocus);\n\n      return () => {\n        element.removeEventListener('focus', onFocus);\n      };\n    }\n  );\n\nexport default hdsScrollIntoViewOnFocus;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Modifier from 'ember-modifier';\nimport { updateTabbableChildren } from './hds-advanced-table-cell/dom-management.ts';\nimport { registerDestructor } from '@ember/destroyable';\nimport { focusable } from 'tabbable';\n\nimport type Owner from '@ember/owner';\nimport type { ArgsFor, PositionalArgs } from 'ember-modifier';\n\nexport interface HdsAdvancedTableCellModifierSignature {\n  Args: {\n    Named: {\n      shouldTrapFocus: boolean;\n      handleEnableFocusTrap: () => void;\n      setCellElement?: (el: HTMLDivElement) => void;\n    };\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsAdvancedTableCellModifier extends Modifier<HdsAdvancedTableCellModifierSignature> {\n  // have a copy of shouldTrapFocus internally so the correct value is used when update tabbable children\n  private _shouldTrapFocus = false;\n  private _didSetup = false;\n  private _element: HTMLDivElement | undefined = undefined;\n  private _observer: MutationObserver | undefined = undefined;\n  private _keydownHandler!: (event: KeyboardEvent) => void;\n\n  constructor(\n    owner: Owner,\n    args: ArgsFor<HdsAdvancedTableCellModifierSignature>\n  ) {\n    super(owner, args);\n\n    registerDestructor(this, () => {\n      this._observer?.disconnect();\n      this._element?.removeEventListener('keydown', this._keydownHandler);\n      this._element = undefined;\n    });\n  }\n\n  modify(\n    element: HdsAdvancedTableCellModifierSignature['Element'],\n    positional: PositionalArgs<HdsAdvancedTableCellModifierSignature>,\n    named: HdsAdvancedTableCellModifierSignature['Args']['Named']\n  ): void {\n    this._shouldTrapFocus = named.shouldTrapFocus;\n\n    if (!this._didSetup) {\n      this.#setupObserver(element, positional, named);\n\n      if (typeof named.setCellElement === 'function') {\n        named.setCellElement(element);\n      }\n\n      this._didSetup = true;\n      this._element = element;\n    }\n  }\n\n  #setupObserver(\n    element: HdsAdvancedTableCellModifierSignature['Element'],\n    _positional: PositionalArgs<HdsAdvancedTableCellModifierSignature>,\n    named: HdsAdvancedTableCellModifierSignature['Args']['Named']\n  ): void {\n    const { handleEnableFocusTrap } = named;\n\n    updateTabbableChildren(element);\n\n    this._keydownHandler = (event: KeyboardEvent) => {\n      if (event.key === 'Enter') {\n        const cellFocusableChildren = focusable(element);\n\n        if (cellFocusableChildren.length > 0) {\n          for (let i = 0; i < cellFocusableChildren.length; i++) {\n            const child = cellFocusableChildren[i];\n\n            if (child?.hasAttribute('data-advanced-table-child-focusable')) {\n              child.setAttribute('tabindex', '0');\n            }\n          }\n\n          element.setAttribute('tabindex', '-1');\n\n          handleEnableFocusTrap();\n        }\n      }\n    };\n\n    element.addEventListener('keydown', this._keydownHandler);\n\n    this._observer = new MutationObserver(() => {\n      updateTabbableChildren(element, this._shouldTrapFocus);\n    });\n\n    this._observer.observe(element, {\n      childList: true,\n      subtree: true,\n    });\n  }\n}\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { DateTime } from 'luxon';\nimport { helper } from '@ember/component/helper';\n\n/*\n * This helper can be used to format a date with the provided options. The result of this helper is a date string.\n *\n * Example:\n *\n * ```hbs\n * {{hds-format-date @date @display.options.displayFormat}}\n * ```\n */\n\nexport function hdsFormatDate([date, options]: [\n  date: Date | undefined,\n  options: {\n    month: Intl.DateTimeFormatOptions['month'];\n    day: Intl.DateTimeFormatOptions['day'];\n    year?: Intl.DateTimeFormatOptions['year'];\n    hour?: Intl.DateTimeFormatOptions['hour'];\n    minute?: Intl.DateTimeFormatOptions['minute'];\n    second?: Intl.DateTimeFormatOptions['second'];\n  },\n]): string {\n  if (!date) {\n    return '';\n  }\n\n  return DateTime.fromJSDate(date)\n    .setLocale(navigator.language)\n    .toLocaleString(options);\n}\n\nconst hdsFormatDateHelper = helper(hdsFormatDate);\nexport default hdsFormatDateHelper;\n","// This is a magic string replaced by rollup\ndeclare const __SENTRY_SDK_VERSION__: string;\n\nexport const SDK_VERSION = typeof __SENTRY_SDK_VERSION__ === 'string' ? __SENTRY_SDK_VERSION__ : '0.0.0-unknown.0';\n","/**\n * Shallow merge two objects.\n * Does not mutate the passed in objects.\n * Undefined/empty values in the merge object will overwrite existing values.\n *\n * By default, this merges 2 levels deep.\n */\nexport function merge<T>(initialObj: T, mergeObj: T, levels = 2): T {\n  // If the merge value is not an object, or we have no merge levels left,\n  // we just set the value to the merge value\n  if (!mergeObj || typeof mergeObj !== 'object' || levels <= 0) {\n    return mergeObj;\n  }\n\n  // If the merge object is an empty object, and the initial object is not undefined, we return the initial object\n  if (initialObj && Object.keys(mergeObj).length === 0) {\n    return initialObj;\n  }\n\n  // Clone object\n  const output = { ...initialObj };\n\n  // Merge values into output, resursively\n  for (const key in mergeObj) {\n    if (Object.prototype.hasOwnProperty.call(mergeObj, key)) {\n      output[key] = merge(output[key], mergeObj[key], levels - 1);\n    }\n  }\n\n  return output;\n}\n","import { DEBUG_BUILD } from '../debug-build';\nimport type { Span } from '../types-hoist';\nimport { logger } from '../utils-hoist/logger';\nimport { getRootSpan, spanIsSampled, spanToJSON } from '../utils/spanUtils';\n\n/**\n * Print a log message for a started span.\n */\nexport function logSpanStart(span: Span): void {\n  if (!DEBUG_BUILD) return;\n\n  const { description = '< unknown name >', op = '< unknown op >', parent_span_id: parentSpanId } = spanToJSON(span);\n  const { spanId } = span.spanContext();\n\n  const sampled = spanIsSampled(span);\n  const rootSpan = getRootSpan(span);\n  const isRootSpan = rootSpan === span;\n\n  const header = `[Tracing] Starting ${sampled ? 'sampled' : 'unsampled'} ${isRootSpan ? 'root ' : ''}span`;\n\n  const infoParts: string[] = [`op: ${op}`, `name: ${description}`, `ID: ${spanId}`];\n\n  if (parentSpanId) {\n    infoParts.push(`parent ID: ${parentSpanId}`);\n  }\n\n  if (!isRootSpan) {\n    const { op, description } = spanToJSON(rootSpan);\n    infoParts.push(`root ID: ${rootSpan.spanContext().spanId}`);\n    if (op) {\n      infoParts.push(`root op: ${op}`);\n    }\n    if (description) {\n      infoParts.push(`root description: ${description}`);\n    }\n  }\n\n  logger.log(`${header}\n  ${infoParts.join('\\n  ')}`);\n}\n\n/**\n * Print a log message for an ended span.\n */\nexport function logSpanEnd(span: Span): void {\n  if (!DEBUG_BUILD) return;\n\n  const { description = '< unknown name >', op = '< unknown op >' } = spanToJSON(span);\n  const { spanId } = span.spanContext();\n  const rootSpan = getRootSpan(span);\n  const isRootSpan = rootSpan === span;\n\n  const msg = `[Tracing] Finishing \"${op}\" ${isRootSpan ? 'root ' : ''}span \"${description}\" with ID ${spanId}`;\n  logger.log(msg);\n}\n","import type { Client } from './client';\nimport { getDynamicSamplingContextFromSpan } from './tracing/dynamicSamplingContext';\nimport type { SentrySpan } from './tracing/sentrySpan';\nimport type {\n  DsnComponents,\n  DynamicSamplingContext,\n  Event,\n  EventEnvelope,\n  EventItem,\n  LegacyCSPReport,\n  RawSecurityEnvelope,\n  RawSecurityItem,\n  SdkInfo,\n  SdkMetadata,\n  Session,\n  SessionAggregates,\n  SessionEnvelope,\n  SessionItem,\n  SpanEnvelope,\n  SpanItem,\n} from './types-hoist';\nimport { dsnToString } from './utils-hoist/dsn';\nimport {\n  createEnvelope,\n  createEventEnvelopeHeaders,\n  createSpanEnvelopeItem,\n  getSdkMetadataForEnvelopeHeader,\n} from './utils-hoist/envelope';\nimport { uuid4 } from './utils-hoist/misc';\nimport { showSpanDropWarning, spanToJSON } from './utils/spanUtils';\n\n/**\n * Apply SdkInfo (name, version, packages, integrations) to the corresponding event key.\n * Merge with existing data if any.\n **/\nfunction enhanceEventWithSdkInfo(event: Event, sdkInfo?: SdkInfo): Event {\n  if (!sdkInfo) {\n    return event;\n  }\n  event.sdk = event.sdk || {};\n  event.sdk.name = event.sdk.name || sdkInfo.name;\n  event.sdk.version = event.sdk.version || sdkInfo.version;\n  event.sdk.integrations = [...(event.sdk.integrations || []), ...(sdkInfo.integrations || [])];\n  event.sdk.packages = [...(event.sdk.packages || []), ...(sdkInfo.packages || [])];\n  return event;\n}\n\n/** Creates an envelope from a Session */\nexport function createSessionEnvelope(\n  session: Session | SessionAggregates,\n  dsn?: DsnComponents,\n  metadata?: SdkMetadata,\n  tunnel?: string,\n): SessionEnvelope {\n  const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n  const envelopeHeaders = {\n    sent_at: new Date().toISOString(),\n    ...(sdkInfo && { sdk: sdkInfo }),\n    ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n  };\n\n  const envelopeItem: SessionItem =\n    'aggregates' in session ? [{ type: 'sessions' }, session] : [{ type: 'session' }, session.toJSON()];\n\n  return createEnvelope<SessionEnvelope>(envelopeHeaders, [envelopeItem]);\n}\n\n/**\n * Create an Envelope from an event.\n */\nexport function createEventEnvelope(\n  event: Event,\n  dsn?: DsnComponents,\n  metadata?: SdkMetadata,\n  tunnel?: string,\n): EventEnvelope {\n  const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n\n  /*\n    Note: Due to TS, event.type may be `replay_event`, theoretically.\n    In practice, we never call `createEventEnvelope` with `replay_event` type,\n    and we'd have to adjust a looot of types to make this work properly.\n    We want to avoid casting this around, as that could lead to bugs (e.g. when we add another type)\n    So the safe choice is to really guard against the replay_event type here.\n  */\n  const eventType = event.type && event.type !== 'replay_event' ? event.type : 'event';\n\n  enhanceEventWithSdkInfo(event, metadata?.sdk);\n\n  const envelopeHeaders = createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn);\n\n  // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n  // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n  // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n  // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n  delete event.sdkProcessingMetadata;\n\n  const eventItem: EventItem = [{ type: eventType }, event];\n  return createEnvelope<EventEnvelope>(envelopeHeaders, [eventItem]);\n}\n\n/**\n * Create envelope from Span item.\n *\n * Takes an optional client and runs spans through `beforeSendSpan` if available.\n */\nexport function createSpanEnvelope(spans: [SentrySpan, ...SentrySpan[]], client?: Client): SpanEnvelope {\n  function dscHasRequiredProps(dsc: Partial<DynamicSamplingContext>): dsc is DynamicSamplingContext {\n    return !!dsc.trace_id && !!dsc.public_key;\n  }\n\n  // For the moment we'll obtain the DSC from the first span in the array\n  // This might need to be changed if we permit sending multiple spans from\n  // different segments in one envelope\n  const dsc = getDynamicSamplingContextFromSpan(spans[0]);\n\n  const dsn = client?.getDsn();\n  const tunnel = client?.getOptions().tunnel;\n\n  const headers: SpanEnvelope[0] = {\n    sent_at: new Date().toISOString(),\n    ...(dscHasRequiredProps(dsc) && { trace: dsc }),\n    ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n  };\n\n  const beforeSendSpan = client?.getOptions().beforeSendSpan;\n  const convertToSpanJSON = beforeSendSpan\n    ? (span: SentrySpan) => {\n        const spanJson = spanToJSON(span);\n        const processedSpan = beforeSendSpan(spanJson);\n\n        if (!processedSpan) {\n          showSpanDropWarning();\n          return spanJson;\n        }\n\n        return processedSpan;\n      }\n    : spanToJSON;\n\n  const items: SpanItem[] = [];\n  for (const span of spans) {\n    const spanJson = convertToSpanJSON(span);\n    if (spanJson) {\n      items.push(createSpanEnvelopeItem(spanJson));\n    }\n  }\n\n  return createEnvelope<SpanEnvelope>(headers, items);\n}\n\n/**\n * Create an Envelope from a CSP report.\n */\nexport function createRawSecurityEnvelope(\n  report: LegacyCSPReport,\n  dsn: DsnComponents,\n  tunnel?: string,\n  release?: string,\n  environment?: string,\n): RawSecurityEnvelope {\n  const envelopeHeaders = {\n    event_id: uuid4(),\n    ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n  };\n\n  const eventItem: RawSecurityItem = [\n    { type: 'raw_security', sentry_release: release, sentry_environment: environment },\n    report,\n  ];\n\n  return createEnvelope<RawSecurityEnvelope>(envelopeHeaders, [eventItem]);\n}\n","import type { Client } from '../client';\nimport { DEFAULT_ENVIRONMENT } from '../constants';\nimport { getGlobalScope } from '../currentScopes';\nimport { notifyEventProcessors } from '../eventProcessors';\nimport type { CaptureContext, ScopeContext } from '../scope';\nimport { Scope } from '../scope';\nimport type { ClientOptions, Event, EventHint, StackParser } from '../types-hoist';\nimport { getFilenameToDebugIdMap } from '../utils-hoist/debug-ids';\nimport { addExceptionMechanism, uuid4 } from '../utils-hoist/misc';\nimport { normalize } from '../utils-hoist/normalize';\nimport { truncate } from '../utils-hoist/string';\nimport { dateTimestampInSeconds } from '../utils-hoist/time';\nimport { applyScopeDataToEvent, mergeScopeData } from './applyScopeDataToEvent';\n\n/**\n * This type makes sure that we get either a CaptureContext, OR an EventHint.\n * It does not allow mixing them, which could lead to unexpected outcomes, e.g. this is disallowed:\n * { user: { id: '123' }, mechanism: { handled: false } }\n */\nexport type ExclusiveEventHintOrCaptureContext =\n  | (CaptureContext & Partial<{ [key in keyof EventHint]: never }>)\n  | (EventHint & Partial<{ [key in keyof ScopeContext]: never }>);\n\n/**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n * @hidden\n */\nexport function prepareEvent(\n  options: ClientOptions,\n  event: Event,\n  hint: EventHint,\n  scope?: Scope,\n  client?: Client,\n  isolationScope?: Scope,\n): PromiseLike<Event | null> {\n  const { normalizeDepth = 3, normalizeMaxBreadth = 1_000 } = options;\n  const prepared: Event = {\n    ...event,\n    event_id: event.event_id || hint.event_id || uuid4(),\n    timestamp: event.timestamp || dateTimestampInSeconds(),\n  };\n  const integrations = hint.integrations || options.integrations.map(i => i.name);\n\n  applyClientOptions(prepared, options);\n  applyIntegrationsMetadata(prepared, integrations);\n\n  if (client) {\n    client.emit('applyFrameMetadata', event);\n  }\n\n  // Only put debug IDs onto frames for error events.\n  if (event.type === undefined) {\n    applyDebugIds(prepared, options.stackParser);\n  }\n\n  // If we have scope given to us, use it as the base for further modifications.\n  // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n  const finalScope = getFinalScope(scope, hint.captureContext);\n\n  if (hint.mechanism) {\n    addExceptionMechanism(prepared, hint.mechanism);\n  }\n\n  const clientEventProcessors = client ? client.getEventProcessors() : [];\n\n  // This should be the last thing called, since we want that\n  // {@link Scope.addEventProcessor} gets the finished prepared event.\n  // Merge scope data together\n  const data = getGlobalScope().getScopeData();\n\n  if (isolationScope) {\n    const isolationData = isolationScope.getScopeData();\n    mergeScopeData(data, isolationData);\n  }\n\n  if (finalScope) {\n    const finalScopeData = finalScope.getScopeData();\n    mergeScopeData(data, finalScopeData);\n  }\n\n  const attachments = [...(hint.attachments || []), ...data.attachments];\n  if (attachments.length) {\n    hint.attachments = attachments;\n  }\n\n  applyScopeDataToEvent(prepared, data);\n\n  const eventProcessors = [\n    ...clientEventProcessors,\n    // Run scope event processors _after_ all other processors\n    ...data.eventProcessors,\n  ];\n\n  const result = notifyEventProcessors(eventProcessors, prepared, hint);\n\n  return result.then(evt => {\n    if (evt) {\n      // We apply the debug_meta field only after all event processors have ran, so that if any event processors modified\n      // file names (e.g.the RewriteFrames integration) the filename -> debug ID relationship isn't destroyed.\n      // This should not cause any PII issues, since we're only moving data that is already on the event and not adding\n      // any new data\n      applyDebugMeta(evt);\n    }\n\n    if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n      return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n    }\n    return evt;\n  });\n}\n\n/**\n * Enhances event using the client configuration.\n * It takes care of all \"static\" values like environment, release and `dist`,\n * as well as truncating overly long values.\n *\n * Only exported for tests.\n *\n * @param event event instance to be enhanced\n */\nexport function applyClientOptions(event: Event, options: ClientOptions): void {\n  const { environment, release, dist, maxValueLength = 250 } = options;\n\n  // empty strings do not make sense for environment, release, and dist\n  // so we handle them the same as if they were not provided\n  event.environment = event.environment || environment || DEFAULT_ENVIRONMENT;\n\n  if (!event.release && release) {\n    event.release = release;\n  }\n\n  if (!event.dist && dist) {\n    event.dist = dist;\n  }\n\n  if (event.message) {\n    event.message = truncate(event.message, maxValueLength);\n  }\n\n  const exception = event.exception?.values?.[0];\n  if (exception?.value) {\n    exception.value = truncate(exception.value, maxValueLength);\n  }\n\n  const request = event.request;\n  if (request?.url) {\n    request.url = truncate(request.url, maxValueLength);\n  }\n}\n\n/**\n * Puts debug IDs into the stack frames of an error event.\n */\nexport function applyDebugIds(event: Event, stackParser: StackParser): void {\n  // Build a map of filename -> debug_id\n  const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser);\n\n  event.exception?.values?.forEach(exception => {\n    exception.stacktrace?.frames?.forEach(frame => {\n      if (frame.filename) {\n        frame.debug_id = filenameDebugIdMap[frame.filename];\n      }\n    });\n  });\n}\n\n/**\n * Moves debug IDs from the stack frames of an error event into the debug_meta field.\n */\nexport function applyDebugMeta(event: Event): void {\n  // Extract debug IDs and filenames from the stack frames on the event.\n  const filenameDebugIdMap: Record<string, string> = {};\n  event.exception?.values?.forEach(exception => {\n    exception.stacktrace?.frames?.forEach(frame => {\n      if (frame.debug_id) {\n        if (frame.abs_path) {\n          filenameDebugIdMap[frame.abs_path] = frame.debug_id;\n        } else if (frame.filename) {\n          filenameDebugIdMap[frame.filename] = frame.debug_id;\n        }\n        delete frame.debug_id;\n      }\n    });\n  });\n\n  if (Object.keys(filenameDebugIdMap).length === 0) {\n    return;\n  }\n\n  // Fill debug_meta information\n  event.debug_meta = event.debug_meta || {};\n  event.debug_meta.images = event.debug_meta.images || [];\n  const images = event.debug_meta.images;\n  Object.entries(filenameDebugIdMap).forEach(([filename, debug_id]) => {\n    images.push({\n      type: 'sourcemap',\n      code_file: filename,\n      debug_id,\n    });\n  });\n}\n\n/**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\nfunction applyIntegrationsMetadata(event: Event, integrationNames: string[]): void {\n  if (integrationNames.length > 0) {\n    event.sdk = event.sdk || {};\n    event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationNames];\n  }\n}\n\n/**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\nfunction normalizeEvent(event: Event | null, depth: number, maxBreadth: number): Event | null {\n  if (!event) {\n    return null;\n  }\n\n  const normalized: Event = {\n    ...event,\n    ...(event.breadcrumbs && {\n      breadcrumbs: event.breadcrumbs.map(b => ({\n        ...b,\n        ...(b.data && {\n          data: normalize(b.data, depth, maxBreadth),\n        }),\n      })),\n    }),\n    ...(event.user && {\n      user: normalize(event.user, depth, maxBreadth),\n    }),\n    ...(event.contexts && {\n      contexts: normalize(event.contexts, depth, maxBreadth),\n    }),\n    ...(event.extra && {\n      extra: normalize(event.extra, depth, maxBreadth),\n    }),\n  };\n\n  // event.contexts.trace stores information about a Transaction. Similarly,\n  // event.spans[] stores information about child Spans. Given that a\n  // Transaction is conceptually a Span, normalization should apply to both\n  // Transactions and Spans consistently.\n  // For now the decision is to skip normalization of Transactions and Spans,\n  // so this block overwrites the normalized event to add back the original\n  // Transaction information prior to normalization.\n  if (event.contexts?.trace && normalized.contexts) {\n    normalized.contexts.trace = event.contexts.trace;\n\n    // event.contexts.trace.data may contain circular/dangerous data so we need to normalize it\n    if (event.contexts.trace.data) {\n      normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n    }\n  }\n\n  // event.spans[].data may contain circular/dangerous data so we need to normalize it\n  if (event.spans) {\n    normalized.spans = event.spans.map(span => {\n      return {\n        ...span,\n        ...(span.data && {\n          data: normalize(span.data, depth, maxBreadth),\n        }),\n      };\n    });\n  }\n\n  // event.contexts.flags (FeatureFlagContext) stores context for our feature\n  // flag integrations. It has a greater nesting depth than our other typed\n  // Contexts, so we re-normalize with a fixed depth of 3 here. We do not want\n  // to skip this in case of conflicting, user-provided context.\n  if (event.contexts?.flags && normalized.contexts) {\n    normalized.contexts.flags = normalize(event.contexts.flags, 3, maxBreadth);\n  }\n\n  return normalized;\n}\n\nfunction getFinalScope(scope: Scope | undefined, captureContext: CaptureContext | undefined): Scope | undefined {\n  if (!captureContext) {\n    return scope;\n  }\n\n  const finalScope = scope ? scope.clone() : new Scope();\n  finalScope.update(captureContext);\n  return finalScope;\n}\n\n/**\n * Parse either an `EventHint` directly, or convert a `CaptureContext` to an `EventHint`.\n * This is used to allow to update method signatures that used to accept a `CaptureContext` but should now accept an `EventHint`.\n */\nexport function parseEventHintOrCaptureContext(\n  hint: ExclusiveEventHintOrCaptureContext | undefined,\n): EventHint | undefined {\n  if (!hint) {\n    return undefined;\n  }\n\n  // If you pass a Scope or `() => Scope` as CaptureContext, we just return this as captureContext\n  if (hintIsScopeOrFunction(hint)) {\n    return { captureContext: hint };\n  }\n\n  if (hintIsScopeContext(hint)) {\n    return {\n      captureContext: hint,\n    };\n  }\n\n  return hint;\n}\n\nfunction hintIsScopeOrFunction(hint: CaptureContext | EventHint): hint is Scope | ((scope: Scope) => Scope) {\n  return hint instanceof Scope || typeof hint === 'function';\n}\n\ntype ScopeContextProperty = keyof ScopeContext;\nconst captureContextKeys: readonly ScopeContextProperty[] = [\n  'user',\n  'level',\n  'extra',\n  'contexts',\n  'tags',\n  'fingerprint',\n  'propagationContext',\n] as const;\n\nfunction hintIsScopeContext(hint: Partial<ScopeContext> | EventHint): hint is Partial<ScopeContext> {\n  return Object.keys(hint).some(key => captureContextKeys.includes(key as ScopeContextProperty));\n}\n","import type { ReportDialogOptions } from './report-dialog';\nimport type { DsnComponents, DsnLike, SdkInfo } from './types-hoist';\nimport { dsnToString, makeDsn } from './utils-hoist/dsn';\n\nconst SENTRY_API_VERSION = '7';\n\n/** Returns the prefix to construct Sentry ingestion API endpoints. */\nfunction getBaseApiEndpoint(dsn: DsnComponents): string {\n  const protocol = dsn.protocol ? `${dsn.protocol}:` : '';\n  const port = dsn.port ? `:${dsn.port}` : '';\n  return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : ''}/api/`;\n}\n\n/** Returns the ingest API endpoint for target. */\nfunction _getIngestEndpoint(dsn: DsnComponents): string {\n  return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`;\n}\n\n/** Returns a URL-encoded string with auth config suitable for a query string. */\nfunction _encodedAuth(dsn: DsnComponents, sdkInfo: SdkInfo | undefined): string {\n  const params: Record<string, string> = {\n    sentry_version: SENTRY_API_VERSION,\n  };\n\n  if (dsn.publicKey) {\n    // We send only the minimum set of required information. See\n    // https://github.com/getsentry/sentry-javascript/issues/2572.\n    params.sentry_key = dsn.publicKey;\n  }\n\n  if (sdkInfo) {\n    params.sentry_client = `${sdkInfo.name}/${sdkInfo.version}`;\n  }\n\n  return new URLSearchParams(params).toString();\n}\n\n/**\n * Returns the envelope endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\nexport function getEnvelopeEndpointWithUrlEncodedAuth(dsn: DsnComponents, tunnel?: string, sdkInfo?: SdkInfo): string {\n  return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\n\n/** Returns the url to the report dialog endpoint. */\nexport function getReportDialogEndpoint(dsnLike: DsnLike, dialogOptions: ReportDialogOptions): string {\n  const dsn = makeDsn(dsnLike);\n  if (!dsn) {\n    return '';\n  }\n\n  const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n\n  let encodedOptions = `dsn=${dsnToString(dsn)}`;\n  for (const key in dialogOptions) {\n    if (key === 'dsn') {\n      continue;\n    }\n\n    if (key === 'onClose') {\n      continue;\n    }\n\n    if (key === 'user') {\n      const user = dialogOptions.user;\n      if (!user) {\n        continue;\n      }\n      if (user.name) {\n        encodedOptions += `&name=${encodeURIComponent(user.name)}`;\n      }\n      if (user.email) {\n        encodedOptions += `&email=${encodeURIComponent(user.email)}`;\n      }\n    } else {\n      encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key] as string)}`;\n    }\n  }\n\n  return `${endpoint}?${encodedOptions}`;\n}\n","import type { Client } from '../client';\nimport type {\n  Event,\n  EventHint,\n  Exception,\n  Extras,\n  Mechanism,\n  ParameterizedString,\n  SeverityLevel,\n  StackFrame,\n  StackParser,\n} from '../types-hoist';\nimport { isError, isErrorEvent, isParameterizedString, isPlainObject } from './is';\nimport { addExceptionMechanism, addExceptionTypeValue } from './misc';\nimport { normalizeToSize } from './normalize';\nimport { extractExceptionKeysForMessage } from './object';\n\n/**\n * Extracts stack frames from the error.stack string\n */\nexport function parseStackFrames(stackParser: StackParser, error: Error): StackFrame[] {\n  return stackParser(error.stack || '', 1);\n}\n\n/**\n * Extracts stack frames from the error and builds a Sentry Exception\n */\nexport function exceptionFromError(stackParser: StackParser, error: Error): Exception {\n  const exception: Exception = {\n    type: error.name || error.constructor.name,\n    value: error.message,\n  };\n\n  const frames = parseStackFrames(stackParser, error);\n  if (frames.length) {\n    exception.stacktrace = { frames };\n  }\n\n  return exception;\n}\n\n/** If a plain object has a property that is an `Error`, return this error. */\nfunction getErrorPropertyFromObject(obj: Record<string, unknown>): Error | undefined {\n  for (const prop in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n      const value = obj[prop];\n      if (value instanceof Error) {\n        return value;\n      }\n    }\n  }\n\n  return undefined;\n}\n\nfunction getMessageForObject(exception: Record<string, unknown>): string {\n  if ('name' in exception && typeof exception.name === 'string') {\n    let message = `'${exception.name}' captured as exception`;\n\n    if ('message' in exception && typeof exception.message === 'string') {\n      message += ` with message '${exception.message}'`;\n    }\n\n    return message;\n  } else if ('message' in exception && typeof exception.message === 'string') {\n    return exception.message;\n  }\n\n  const keys = extractExceptionKeysForMessage(exception);\n\n  // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n  // We still want to try to get a decent message for these cases\n  if (isErrorEvent(exception)) {\n    return `Event \\`ErrorEvent\\` captured as exception with message \\`${exception.message}\\``;\n  }\n\n  const className = getObjectClassName(exception);\n\n  return `${\n    className && className !== 'Object' ? `'${className}'` : 'Object'\n  } captured as exception with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj: unknown): string | undefined | void {\n  try {\n    const prototype: unknown | null = Object.getPrototypeOf(obj);\n    return prototype ? prototype.constructor.name : undefined;\n  } catch (e) {\n    // ignore errors here\n  }\n}\n\nfunction getException(\n  client: Client,\n  mechanism: Mechanism,\n  exception: unknown,\n  hint?: EventHint,\n): [Error, Extras | undefined] {\n  if (isError(exception)) {\n    return [exception, undefined];\n  }\n\n  // Mutate this!\n  mechanism.synthetic = true;\n\n  if (isPlainObject(exception)) {\n    const normalizeDepth = client?.getOptions().normalizeDepth;\n    const extras = { ['__serialized__']: normalizeToSize(exception as Record<string, unknown>, normalizeDepth) };\n\n    const errorFromProp = getErrorPropertyFromObject(exception);\n    if (errorFromProp) {\n      return [errorFromProp, extras];\n    }\n\n    const message = getMessageForObject(exception);\n    const ex = hint?.syntheticException || new Error(message);\n    ex.message = message;\n\n    return [ex, extras];\n  }\n\n  // This handles when someone does: `throw \"something awesome\";`\n  // We use synthesized Error here so we can extract a (rough) stack trace.\n  const ex = hint?.syntheticException || new Error(exception as string);\n  ex.message = `${exception}`;\n\n  return [ex, undefined];\n}\n\n/**\n * Builds and Event from a Exception\n * @hidden\n */\nexport function eventFromUnknownInput(\n  client: Client,\n  stackParser: StackParser,\n  exception: unknown,\n  hint?: EventHint,\n): Event {\n  const providedMechanism: Mechanism | undefined = hint?.data && (hint.data as { mechanism: Mechanism }).mechanism;\n  const mechanism: Mechanism = providedMechanism || {\n    handled: true,\n    type: 'generic',\n  };\n\n  const [ex, extras] = getException(client, mechanism, exception, hint);\n\n  const event: Event = {\n    exception: {\n      values: [exceptionFromError(stackParser, ex)],\n    },\n  };\n\n  if (extras) {\n    event.extra = extras;\n  }\n\n  addExceptionTypeValue(event, undefined, undefined);\n  addExceptionMechanism(event, mechanism);\n\n  return {\n    ...event,\n    event_id: hint?.event_id,\n  };\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(\n  stackParser: StackParser,\n  message: ParameterizedString,\n  level: SeverityLevel = 'info',\n  hint?: EventHint,\n  attachStacktrace?: boolean,\n): Event {\n  const event: Event = {\n    event_id: hint?.event_id,\n    level,\n  };\n\n  if (attachStacktrace && hint?.syntheticException) {\n    const frames = parseStackFrames(stackParser, hint.syntheticException);\n    if (frames.length) {\n      event.exception = {\n        values: [\n          {\n            value: message,\n            stacktrace: { frames },\n          },\n        ],\n      };\n      addExceptionMechanism(event, { synthetic: true });\n    }\n  }\n\n  if (isParameterizedString(message)) {\n    const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n    event.logentry = {\n      message: __sentry_template_string__,\n      params: __sentry_template_values__,\n    };\n    return event;\n  }\n\n  event.message = message;\n  return event;\n}\n","import type { DataCategory, TransportMakeRequestResponse } from '../types-hoist';\n\n// Intentionally keeping the key broad, as we don't know for sure what rate limit headers get returned from backend\nexport type RateLimits = Record<string, number>;\n\nexport const DEFAULT_RETRY_AFTER = 60 * 1000; // 60 seconds\n\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param header string representation of 'Retry-After' header\n * @param now current unix timestamp\n *\n */\nexport function parseRetryAfterHeader(header: string, now: number = Date.now()): number {\n  const headerDelay = parseInt(`${header}`, 10);\n  if (!isNaN(headerDelay)) {\n    return headerDelay * 1000;\n  }\n\n  const headerDate = Date.parse(`${header}`);\n  if (!isNaN(headerDate)) {\n    return headerDate - now;\n  }\n\n  return DEFAULT_RETRY_AFTER;\n}\n\n/**\n * Gets the time that the given category is disabled until for rate limiting.\n * In case no category-specific limit is set but a general rate limit across all categories is active,\n * that time is returned.\n *\n * @return the time in ms that the category is disabled until or 0 if there's no active rate limit.\n */\nexport function disabledUntil(limits: RateLimits, dataCategory: DataCategory): number {\n  return limits[dataCategory] || limits.all || 0;\n}\n\n/**\n * Checks if a category is rate limited\n */\nexport function isRateLimited(limits: RateLimits, dataCategory: DataCategory, now: number = Date.now()): boolean {\n  return disabledUntil(limits, dataCategory) > now;\n}\n\n/**\n * Update ratelimits from incoming headers.\n *\n * @return the updated RateLimits object.\n */\nexport function updateRateLimits(\n  limits: RateLimits,\n  { statusCode, headers }: TransportMakeRequestResponse,\n  now: number = Date.now(),\n): RateLimits {\n  const updatedRateLimits: RateLimits = {\n    ...limits,\n  };\n\n  // \"The name is case-insensitive.\"\n  // https://developer.mozilla.org/en-US/docs/Web/API/Headers/get\n  const rateLimitHeader = headers?.['x-sentry-rate-limits'];\n  const retryAfterHeader = headers?.['retry-after'];\n\n  if (rateLimitHeader) {\n    /**\n     * rate limit headers are of the form\n     *     <header>,<header>,..\n     * where each <header> is of the form\n     *     <retry_after>: <categories>: <scope>: <reason_code>: <namespaces>\n     * where\n     *     <retry_after> is a delay in seconds\n     *     <categories> is the event type(s) (error, transaction, etc) being rate limited and is of the form\n     *         <category>;<category>;...\n     *     <scope> is what's being limited (org, project, or key) - ignored by SDK\n     *     <reason_code> is an arbitrary string like \"org_quota\" - ignored by SDK\n     *     <namespaces> Semicolon-separated list of metric namespace identifiers. Defines which namespace(s) will be affected.\n     *         Only present if rate limit applies to the metric_bucket data category.\n     */\n    for (const limit of rateLimitHeader.trim().split(',')) {\n      const [retryAfter, categories, , , namespaces] = limit.split(':', 5) as [string, ...string[]];\n      const headerDelay = parseInt(retryAfter, 10);\n      const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1000; // 60sec default\n      if (!categories) {\n        updatedRateLimits.all = now + delay;\n      } else {\n        for (const category of categories.split(';')) {\n          if (category === 'metric_bucket') {\n            // namespaces will be present when category === 'metric_bucket'\n            if (!namespaces || namespaces.split(';').includes('custom')) {\n              updatedRateLimits[category] = now + delay;\n            }\n          } else {\n            updatedRateLimits[category] = now + delay;\n          }\n        }\n      }\n    }\n  } else if (retryAfterHeader) {\n    updatedRateLimits.all = now + parseRetryAfterHeader(retryAfterHeader, now);\n  } else if (statusCode === 429) {\n    updatedRateLimits.all = now + 60 * 1000;\n  }\n\n  return updatedRateLimits;\n}\n","import { getAsyncContextStrategy } from '../asyncContext';\nimport { getMainCarrier } from '../carrier';\nimport { getClient, getCurrentScope } from '../currentScopes';\nimport { isEnabled } from '../exports';\nimport type { Scope } from '../scope';\nimport { getDynamicSamplingContextFromScope, getDynamicSamplingContextFromSpan } from '../tracing';\nimport type { SerializedTraceData, Span } from '../types-hoist';\nimport { dynamicSamplingContextToSentryBaggageHeader } from '../utils-hoist/baggage';\nimport { logger } from '../utils-hoist/logger';\nimport { TRACEPARENT_REGEXP, generateSentryTraceHeader } from '../utils-hoist/tracing';\nimport { getActiveSpan, spanToTraceHeader } from './spanUtils';\n\n/**\n * Extracts trace propagation data from the current span or from the client's scope (via transaction or propagation\n * context) and serializes it to `sentry-trace` and `baggage` values to strings. These values can be used to propagate\n * a trace via our tracing Http headers or Html `<meta>` tags.\n *\n * This function also applies some validation to the generated sentry-trace and baggage values to ensure that\n * only valid strings are returned.\n *\n * @returns an object with the tracing data values. The object keys are the name of the tracing key to be used as header\n * or meta tag name.\n */\nexport function getTraceData(options: { span?: Span } = {}): SerializedTraceData {\n  const client = getClient();\n  if (!isEnabled() || !client) {\n    return {};\n  }\n\n  const carrier = getMainCarrier();\n  const acs = getAsyncContextStrategy(carrier);\n  if (acs.getTraceData) {\n    return acs.getTraceData(options);\n  }\n\n  const scope = getCurrentScope();\n  const span = options.span || getActiveSpan();\n  const sentryTrace = span ? spanToTraceHeader(span) : scopeToTraceHeader(scope);\n  const dsc = span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromScope(client, scope);\n  const baggage = dynamicSamplingContextToSentryBaggageHeader(dsc);\n\n  const isValidSentryTraceHeader = TRACEPARENT_REGEXP.test(sentryTrace);\n  if (!isValidSentryTraceHeader) {\n    logger.warn('Invalid sentry-trace data. Cannot generate trace data');\n    return {};\n  }\n\n  return {\n    'sentry-trace': sentryTrace,\n    baggage,\n  };\n}\n\n/**\n * Get a sentry-trace header value for the given scope.\n */\nfunction scopeToTraceHeader(scope: Scope): string {\n  const { traceId, sampled, propagationSpanId } = scope.getPropagationContext();\n  return generateSentryTraceHeader(traceId, propagationSpanId, sampled);\n}\n","import { clearCachedImplementation, getNativeImplementation } from '@sentry-internal/browser-utils';\nimport type { Transport, TransportMakeRequestResponse, TransportRequest } from '@sentry/core';\nimport { createTransport, rejectedSyncPromise } from '@sentry/core';\nimport type { WINDOW } from '../helpers';\nimport type { BrowserTransportOptions } from './types';\n\n/**\n * Creates a Transport that uses the Fetch API to send events to Sentry.\n */\nexport function makeFetchTransport(\n  options: BrowserTransportOptions,\n  nativeFetch: typeof WINDOW.fetch | undefined = getNativeImplementation('fetch'),\n): Transport {\n  let pendingBodySize = 0;\n  let pendingCount = 0;\n\n  function makeRequest(request: TransportRequest): PromiseLike<TransportMakeRequestResponse> {\n    const requestSize = request.body.length;\n    pendingBodySize += requestSize;\n    pendingCount++;\n\n    const requestOptions: RequestInit = {\n      body: request.body,\n      method: 'POST',\n      referrerPolicy: 'strict-origin',\n      headers: options.headers,\n      // Outgoing requests are usually cancelled when navigating to a different page, causing a \"TypeError: Failed to\n      // fetch\" error and sending a \"network_error\" client-outcome - in Chrome, the request status shows \"(cancelled)\".\n      // The `keepalive` flag keeps outgoing requests alive, even when switching pages. We want this since we're\n      // frequently sending events right before the user is switching pages (eg. when finishing navigation transactions).\n      // Gotchas:\n      // - `keepalive` isn't supported by Firefox\n      // - As per spec (https://fetch.spec.whatwg.org/#http-network-or-cache-fetch):\n      //   If the sum of contentLength and inflightKeepaliveBytes is greater than 64 kibibytes, then return a network error.\n      //   We will therefore only activate the flag when we're below that limit.\n      // There is also a limit of requests that can be open at the same time, so we also limit this to 15\n      // See https://github.com/getsentry/sentry-javascript/pull/7553 for details\n      keepalive: pendingBodySize <= 60_000 && pendingCount < 15,\n      ...options.fetchOptions,\n    };\n\n    if (!nativeFetch) {\n      clearCachedImplementation('fetch');\n      return rejectedSyncPromise('No fetch implementation available');\n    }\n\n    try {\n      // TODO: This may need a `suppressTracing` call in the future when we switch the browser SDK to OTEL\n      return nativeFetch(options.url, requestOptions).then(response => {\n        pendingBodySize -= requestSize;\n        pendingCount--;\n        return {\n          statusCode: response.status,\n          headers: {\n            'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),\n            'retry-after': response.headers.get('Retry-After'),\n          },\n        };\n      });\n    } catch (e) {\n      clearCachedImplementation('fetch');\n      pendingBodySize -= requestSize;\n      pendingCount--;\n      return rejectedSyncPromise(e);\n    }\n  }\n\n  return createTransport(options, makeRequest);\n}\n","import { GLOBAL_OBJ } from '@sentry/core';\n\n// exporting a separate copy of `WINDOW` rather than exporting the one from `@sentry/browser`\n// prevents the browser package from being bundled in the CDN bundle, and avoids a\n// circular dependency between the browser and feedback packages\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\nexport const DOCUMENT = WINDOW.document;\nexport const NAVIGATOR = WINDOW.navigator;\n\nexport const TRIGGER_LABEL = 'Report a Bug';\nexport const CANCEL_BUTTON_LABEL = 'Cancel';\nexport const SUBMIT_BUTTON_LABEL = 'Send Bug Report';\nexport const CONFIRM_BUTTON_LABEL = 'Confirm';\nexport const FORM_TITLE = 'Report a Bug';\nexport const EMAIL_PLACEHOLDER = 'your.email@example.org';\nexport const EMAIL_LABEL = 'Email';\nexport const MESSAGE_PLACEHOLDER = \"What's the bug? What did you expect?\";\nexport const MESSAGE_LABEL = 'Description';\nexport const NAME_PLACEHOLDER = 'Your Name';\nexport const NAME_LABEL = 'Name';\nexport const SUCCESS_MESSAGE_TEXT = 'Thank you for your report!';\nexport const IS_REQUIRED_LABEL = '(required)';\nexport const ADD_SCREENSHOT_LABEL = 'Add a screenshot';\nexport const REMOVE_SCREENSHOT_LABEL = 'Remove screenshot';\n\nexport const FEEDBACK_WIDGET_SOURCE = 'widget';\nexport const FEEDBACK_API_SOURCE = 'api';\n\nexport const SUCCESS_MESSAGE_TIMEOUT = 5000;\n","import type { Event, EventHint, SendFeedback, SendFeedbackParams, TransportMakeRequestResponse } from '@sentry/core';\nimport { captureFeedback, getClient, getCurrentScope, getLocationHref } from '@sentry/core';\nimport { FEEDBACK_API_SOURCE } from '../constants';\n\n/**\n * Public API to send a Feedback item to Sentry\n */\nexport const sendFeedback: SendFeedback = (\n  params: SendFeedbackParams,\n  hint: EventHint & { includeReplay?: boolean } = { includeReplay: true },\n): Promise<string> => {\n  if (!params.message) {\n    throw new Error('Unable to submit feedback with empty message');\n  }\n\n  // We want to wait for the feedback to be sent (or not)\n  const client = getClient();\n\n  if (!client) {\n    throw new Error('No client setup, cannot send feedback.');\n  }\n\n  if (params.tags && Object.keys(params.tags).length) {\n    getCurrentScope().setTags(params.tags);\n  }\n  const eventId = captureFeedback(\n    {\n      source: FEEDBACK_API_SOURCE,\n      url: getLocationHref(),\n      ...params,\n    },\n    hint,\n  );\n\n  // We want to wait for the feedback to be sent (or not)\n  return new Promise<string>((resolve, reject) => {\n    // After 5s, we want to clear anyhow\n    const timeout = setTimeout(() => reject('Unable to determine if Feedback was correctly sent.'), 5_000);\n\n    const cleanup = client.on('afterSendEvent', (event: Event, response: TransportMakeRequestResponse) => {\n      if (event.event_id !== eventId) {\n        return;\n      }\n\n      clearTimeout(timeout);\n      cleanup();\n\n      // Require valid status codes, otherwise can assume feedback was not sent successfully\n      if (\n        response &&\n        typeof response.statusCode === 'number' &&\n        response.statusCode >= 200 &&\n        response.statusCode < 300\n      ) {\n        return resolve(eventId);\n      }\n\n      if (response && typeof response.statusCode === 'number' && response.statusCode === 0) {\n        return reject(\n          'Unable to send Feedback. This is because of network issues, or because you are using an ad-blocker.',\n        );\n      }\n\n      if (response && typeof response.statusCode === 'number' && response.statusCode === 403) {\n        return reject(\n          'Unable to send Feedback. This could be because this domain is not in your list of allowed domains.',\n        );\n      }\n\n      return reject(\n        'Unable to send Feedback. This could be because of network issues, or because you are using an ad-blocker',\n      );\n    });\n  });\n};\n\n/*\n * For reference, the fully built event looks something like this:\n * {\n *     \"type\": \"feedback\",\n *     \"event_id\": \"d2132d31b39445f1938d7e21b6bf0ec4\",\n *     \"timestamp\": 1597977777.6189718,\n *     \"dist\": \"1.12\",\n *     \"platform\": \"javascript\",\n *     \"environment\": \"production\",\n *     \"release\": 42,\n *     \"tags\": {\"transaction\": \"/organizations/:orgId/performance/:eventSlug/\"},\n *     \"sdk\": {\"name\": \"name\", \"version\": \"version\"},\n *     \"user\": {\n *         \"id\": \"123\",\n *         \"username\": \"user\",\n *         \"email\": \"user@site.com\",\n *         \"ip_address\": \"192.168.11.12\",\n *     },\n *     \"request\": {\n *         \"url\": None,\n *         \"headers\": {\n *             \"user-Agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15\"\n *         },\n *     },\n *     \"contexts\": {\n *         \"feedback\": {\n *             \"message\": \"test message\",\n *             \"contact_email\": \"test@example.com\",\n *             \"type\": \"feedback\",\n *         },\n *         \"trace\": {\n *             \"trace_id\": \"4C79F60C11214EB38604F4AE0781BFB2\",\n *             \"span_id\": \"FA90FDEAD5F74052\",\n *             \"type\": \"trace\",\n *         },\n *         \"replay\": {\n *             \"replay_id\": \"e2d42047b1c5431c8cba85ee2a8ab25d\",\n *         },\n *     },\n *   }\n */\n","declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n","import type { FeedbackFormData, FeedbackInternalOptions } from '@sentry/core';\nimport type { OptionalFeedbackConfiguration } from '../core/types';\n\n/**\n * Quick and dirty deep merge for the Feedback integration options\n */\nexport function mergeOptions(\n  defaultOptions: FeedbackInternalOptions,\n  optionOverrides: OptionalFeedbackConfiguration,\n): FeedbackInternalOptions {\n  return {\n    ...defaultOptions,\n    ...optionOverrides,\n    tags: {\n      ...defaultOptions.tags,\n      ...optionOverrides.tags,\n    },\n    onFormOpen: () => {\n      optionOverrides.onFormOpen?.();\n      defaultOptions.onFormOpen?.();\n    },\n    onFormClose: () => {\n      optionOverrides.onFormClose?.();\n      defaultOptions.onFormClose?.();\n    },\n    onSubmitSuccess: (data: FeedbackFormData) => {\n      optionOverrides.onSubmitSuccess?.(data);\n      defaultOptions.onSubmitSuccess?.(data);\n    },\n    onSubmitError: (error: Error) => {\n      optionOverrides.onSubmitError?.(error);\n      defaultOptions.onSubmitError?.(error);\n    },\n    onFormSubmitted: () => {\n      optionOverrides.onFormSubmitted?.();\n      defaultOptions.onFormSubmitted?.();\n    },\n    themeDark: {\n      ...defaultOptions.themeDark,\n      ...optionOverrides.themeDark,\n    },\n    themeLight: {\n      ...defaultOptions.themeLight,\n      ...optionOverrides.themeLight,\n    },\n  };\n}\n","/**\n * Helper function to set a dict of attributes on element (w/ specified namespace)\n */\nexport function setAttributesNS<T extends SVGElement>(el: T, attributes: Record<string, string>): T {\n  Object.entries(attributes).forEach(([key, val]) => {\n    el.setAttributeNS(null, key, val);\n  });\n  return el;\n}\n","import type { FeedbackInternalOptions } from '@sentry/core';\nimport { DOCUMENT } from '../constants';\n\nconst PURPLE = 'rgba(88, 74, 192, 1)';\n\ninterface InternalTheme extends NonNullable<FeedbackInternalOptions['themeLight']> {\n  border: string;\n  interactiveFilter: string;\n}\n\nconst DEFAULT_LIGHT: InternalTheme = {\n  foreground: '#2b2233',\n  background: '#ffffff',\n  accentForeground: 'white',\n  accentBackground: PURPLE,\n  successColor: '#268d75',\n  errorColor: '#df3338',\n  border: '1.5px solid rgba(41, 35, 47, 0.13)',\n  boxShadow: '0px 4px 24px 0px rgba(43, 34, 51, 0.12)',\n  outline: '1px auto var(--accent-background)',\n  interactiveFilter: 'brightness(95%)',\n};\nconst DEFAULT_DARK: InternalTheme = {\n  foreground: '#ebe6ef',\n  background: '#29232f',\n  accentForeground: 'white',\n  accentBackground: PURPLE,\n  successColor: '#2da98c',\n  errorColor: '#f55459',\n  border: '1.5px solid rgba(235, 230, 239, 0.15)',\n  boxShadow: '0px 4px 24px 0px rgba(43, 34, 51, 0.12)',\n  outline: '1px auto var(--accent-background)',\n  interactiveFilter: 'brightness(150%)',\n};\n\nfunction getThemedCssVariables(theme: InternalTheme): string {\n  return `\n  --foreground: ${theme.foreground};\n  --background: ${theme.background};\n  --accent-foreground: ${theme.accentForeground};\n  --accent-background: ${theme.accentBackground};\n  --success-color: ${theme.successColor};\n  --error-color: ${theme.errorColor};\n  --border: ${theme.border};\n  --box-shadow: ${theme.boxShadow};\n  --outline: ${theme.outline};\n  --interactive-filter: ${theme.interactiveFilter};\n  `;\n}\n\n/**\n * Creates <style> element for widget actor (button that opens the dialog)\n */\nexport function createMainStyles({\n  colorScheme,\n  themeDark,\n  themeLight,\n  styleNonce,\n}: FeedbackInternalOptions): HTMLStyleElement {\n  const style = DOCUMENT.createElement('style');\n  style.textContent = `\n:host {\n  --font-family: system-ui, 'Helvetica Neue', Arial, sans-serif;\n  --font-size: 14px;\n  --z-index: 100000;\n\n  --page-margin: 16px;\n  --inset: auto 0 0 auto;\n  --actor-inset: var(--inset);\n\n  font-family: var(--font-family);\n  font-size: var(--font-size);\n\n  ${colorScheme !== 'system' ? 'color-scheme: only light;' : ''}\n\n  ${getThemedCssVariables(\n    colorScheme === 'dark' ? { ...DEFAULT_DARK, ...themeDark } : { ...DEFAULT_LIGHT, ...themeLight },\n  )}\n}\n\n${\n  colorScheme === 'system'\n    ? `\n@media (prefers-color-scheme: dark) {\n  :host {\n    ${getThemedCssVariables({ ...DEFAULT_DARK, ...themeDark })}\n  }\n}`\n    : ''\n}\n}\n`;\n\n  if (styleNonce) {\n    style.setAttribute('nonce', styleNonce);\n  }\n\n  return style;\n}\n","var n,l,u,t,i,o,r,f,e,c={},s=[],a=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,h=Array.isArray;function v(n,l){for(var u in l)n[u]=l[u];return n}function p(n){var l=n.parentNode;l&&l.removeChild(n)}function y(l,u,t){var i,o,r,f={};for(r in u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return d(l,f,i,o,null)}function d(n,t,i,o,r){var f={type:n,props:t,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==r?++u:r,__i:-1,__u:0};return null==r&&null!=l.vnode&&l.vnode(f),f}function _(){return{current:null}}function g(n){return n.children}function b(n,l){this.props=n,this.context=l}function m(n,l){if(null==l)return n.__?m(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?m(n):null}function w(n,u,t){var i,o=n.__v,r=o.__e,f=n.__P;if(f)return(i=v({},o)).__v=o.__v+1,l.vnode&&l.vnode(i),M(f,i,o,n.__n,void 0!==f.ownerSVGElement,32&o.__u?[r]:null,u,null==r?m(o):r,!!(32&o.__u),t),i.__.__k[i.__i]=i,i.__d=void 0,i.__e!=r&&k(i),i}function k(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return k(n)}}function x(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!C.__r++||o!==l.debounceRendering)&&((o=l.debounceRendering)||r)(C)}function C(){var n,u,t,o=[],r=[];for(i.sort(f);n=i.shift();)n.__d&&(t=i.length,u=w(n,o,r)||u,0===t||i.length>t?(j(o,u,r),r.length=o.length=0,u=void 0,i.sort(f)):u&&l.__c&&l.__c(u,s));u&&j(o,u,r),C.__r=0}function P(n,l,u,t,i,o,r,f,e,a,h){var v,p,y,d,_,g=t&&t.__k||s,b=l.length;for(u.__d=e,S(u,l,g),e=u.__d,v=0;v<b;v++)null!=(y=u.__k[v])&&\"boolean\"!=typeof y&&\"function\"!=typeof y&&(p=-1===y.__i?c:g[y.__i]||c,y.__i=v,M(n,y,p,i,o,r,f,e,a,h),d=y.__e,y.ref&&p.ref!=y.ref&&(p.ref&&N(p.ref,null,y),h.push(y.ref,y.__c||d,y)),null==_&&null!=d&&(_=d),65536&y.__u||p.__k===y.__k?e=$(y,e,n):\"function\"==typeof y.type&&void 0!==y.__d?e=y.__d:d&&(e=d.nextSibling),y.__d=void 0,y.__u&=-196609);u.__d=e,u.__e=_}function S(n,l,u){var t,i,o,r,f,e=l.length,c=u.length,s=c,a=0;for(n.__k=[],t=0;t<e;t++)null!=(i=n.__k[t]=null==(i=l[t])||\"boolean\"==typeof i||\"function\"==typeof i?null:\"string\"==typeof i||\"number\"==typeof i||\"bigint\"==typeof i||i.constructor==String?d(null,i,null,null,i):h(i)?d(g,{children:i},null,null,null):void 0===i.constructor&&i.__b>0?d(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):i)?(i.__=n,i.__b=n.__b+1,f=I(i,u,r=t+a,s),i.__i=f,o=null,-1!==f&&(s--,(o=u[f])&&(o.__u|=131072)),null==o||null===o.__v?(-1==f&&a--,\"function\"!=typeof i.type&&(i.__u|=65536)):f!==r&&(f===r+1?a++:f>r?s>e-r?a+=f-r:a--:a=f<r&&f==r-1?f-r:0,f!==t+a&&(i.__u|=65536))):(o=u[t])&&null==o.key&&o.__e&&(o.__e==n.__d&&(n.__d=m(o)),O(o,o,!1),u[t]=null,s--);if(s)for(t=0;t<c;t++)null!=(o=u[t])&&0==(131072&o.__u)&&(o.__e==n.__d&&(n.__d=m(o)),O(o,o))}function $(n,l,u){var t,i;if(\"function\"==typeof n.type){for(t=n.__k,i=0;t&&i<t.length;i++)t[i]&&(t[i].__=n,l=$(t[i],l,u));return l}n.__e!=l&&(u.insertBefore(n.__e,l||null),l=n.__e);do{l=l&&l.nextSibling}while(null!=l&&8===l.nodeType);return l}function H(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(h(n)?n.some(function(n){H(n,l)}):l.push(n)),l}function I(n,l,u,t){var i=n.key,o=n.type,r=u-1,f=u+1,e=l[u];if(null===e||e&&i==e.key&&o===e.type)return u;if(t>(null!=e&&0==(131072&e.__u)?1:0))for(;r>=0||f<l.length;){if(r>=0){if((e=l[r])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return r;r--}if(f<l.length){if((e=l[f])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return f;f++}}return-1}function T(n,l,u){\"-\"===l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||a.test(l)?u:u+\"px\"}function A(n,l,u,t,i){var o;n:if(\"style\"===l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||T(n.style,l,\"\");if(u)for(l in u)t&&u[l]===t[l]||T(n.style,l,u[l])}else if(\"o\"===l[0]&&\"n\"===l[1])o=l!==(l=l.replace(/(PointerCapture)$|Capture$/i,\"$1\")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?t?u.u=t.u:(u.u=Date.now(),n.addEventListener(l,o?L:D,o)):n.removeEventListener(l,o?L:D,o);else{if(i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!==l&&\"height\"!==l&&\"href\"!==l&&\"list\"!==l&&\"form\"!==l&&\"tabIndex\"!==l&&\"download\"!==l&&\"rowSpan\"!==l&&\"colSpan\"!==l&&\"role\"!==l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&\"-\"!==l[4]?n.removeAttribute(l):n.setAttribute(l,u))}}function D(n){if(this.l){var u=this.l[n.type+!1];if(n.t){if(n.t<=u.u)return}else n.t=Date.now();return u(l.event?l.event(n):n)}}function L(n){if(this.l)return this.l[n.type+!0](l.event?l.event(n):n)}function M(n,u,t,i,o,r,f,e,c,s){var a,p,y,d,_,m,w,k,x,C,S,$,H,I,T,A=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),r=[e=u.__e=t.__e]),(a=l.__b)&&a(u);n:if(\"function\"==typeof A)try{if(k=u.props,x=(a=A.contextType)&&i[a.__c],C=a?x?x.props.value:a.__:i,t.__c?w=(p=u.__c=t.__c).__=p.__E:(\"prototype\"in A&&A.prototype.render?u.__c=p=new A(k,C):(u.__c=p=new b(k,C),p.constructor=A,p.render=q),x&&x.sub(p),p.props=k,p.state||(p.state={}),p.context=C,p.__n=i,y=p.__d=!0,p.__h=[],p._sb=[]),null==p.__s&&(p.__s=p.state),null!=A.getDerivedStateFromProps&&(p.__s==p.state&&(p.__s=v({},p.__s)),v(p.__s,A.getDerivedStateFromProps(k,p.__s))),d=p.props,_=p.state,p.__v=u,y)null==A.getDerivedStateFromProps&&null!=p.componentWillMount&&p.componentWillMount(),null!=p.componentDidMount&&p.__h.push(p.componentDidMount);else{if(null==A.getDerivedStateFromProps&&k!==d&&null!=p.componentWillReceiveProps&&p.componentWillReceiveProps(k,C),!p.__e&&(null!=p.shouldComponentUpdate&&!1===p.shouldComponentUpdate(k,p.__s,C)||u.__v===t.__v)){for(u.__v!==t.__v&&(p.props=k,p.state=p.__s,p.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.forEach(function(n){n&&(n.__=u)}),S=0;S<p._sb.length;S++)p.__h.push(p._sb[S]);p._sb=[],p.__h.length&&f.push(p);break n}null!=p.componentWillUpdate&&p.componentWillUpdate(k,p.__s,C),null!=p.componentDidUpdate&&p.__h.push(function(){p.componentDidUpdate(d,_,m)})}if(p.context=C,p.props=k,p.__P=n,p.__e=!1,$=l.__r,H=0,\"prototype\"in A&&A.prototype.render){for(p.state=p.__s,p.__d=!1,$&&$(u),a=p.render(p.props,p.state,p.context),I=0;I<p._sb.length;I++)p.__h.push(p._sb[I]);p._sb=[]}else do{p.__d=!1,$&&$(u),a=p.render(p.props,p.state,p.context),p.state=p.__s}while(p.__d&&++H<25);p.state=p.__s,null!=p.getChildContext&&(i=v(v({},i),p.getChildContext())),y||null==p.getSnapshotBeforeUpdate||(m=p.getSnapshotBeforeUpdate(d,_)),P(n,h(T=null!=a&&a.type===g&&null==a.key?a.props.children:a)?T:[T],u,t,i,o,r,f,e,c,s),p.base=u.__e,u.__u&=-161,p.__h.length&&f.push(p),w&&(p.__E=p.__=null)}catch(n){u.__v=null,c||null!=r?(u.__e=e,u.__u|=c?160:32,r[r.indexOf(e)]=null):(u.__e=t.__e,u.__k=t.__k),l.__e(n,u,t)}else null==r&&u.__v===t.__v?(u.__k=t.__k,u.__e=t.__e):u.__e=z(t.__e,u,t,i,o,r,f,c,s);(a=l.diffed)&&a(u)}function j(n,u,t){for(var i=0;i<t.length;i++)N(t[i],t[++i],t[++i]);l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function z(l,u,t,i,o,r,f,e,s){var a,v,y,d,_,g,b,w=t.props,k=u.props,x=u.type;if(\"svg\"===x&&(o=!0),null!=r)for(a=0;a<r.length;a++)if((_=r[a])&&\"setAttribute\"in _==!!x&&(x?_.localName===x:3===_.nodeType)){l=_,r[a]=null;break}if(null==l){if(null===x)return document.createTextNode(k);l=o?document.createElementNS(\"http://www.w3.org/2000/svg\",x):document.createElement(x,k.is&&k),r=null,e=!1}if(null===x)w===k||e&&l.data===k||(l.data=k);else{if(r=r&&n.call(l.childNodes),w=t.props||c,!e&&null!=r)for(w={},a=0;a<l.attributes.length;a++)w[(_=l.attributes[a]).name]=_.value;for(a in w)_=w[a],\"children\"==a||(\"dangerouslySetInnerHTML\"==a?y=_:\"key\"===a||a in k||A(l,a,null,_,o));for(a in k)_=k[a],\"children\"==a?d=_:\"dangerouslySetInnerHTML\"==a?v=_:\"value\"==a?g=_:\"checked\"==a?b=_:\"key\"===a||e&&\"function\"!=typeof _||w[a]===_||A(l,a,_,w[a],o);if(v)e||y&&(v.__html===y.__html||v.__html===l.innerHTML)||(l.innerHTML=v.__html),u.__k=[];else if(y&&(l.innerHTML=\"\"),P(l,h(d)?d:[d],u,t,i,o&&\"foreignObject\"!==x,r,f,r?r[0]:t.__k&&m(t,0),e,s),null!=r)for(a=r.length;a--;)null!=r[a]&&p(r[a]);e||(a=\"value\",void 0!==g&&(g!==l[a]||\"progress\"===x&&!g||\"option\"===x&&g!==w[a])&&A(l,a,g,w[a],!1),a=\"checked\",void 0!==b&&b!==l[a]&&A(l,a,b,w[a],!1))}return l}function N(n,u,t){try{\"function\"==typeof n?n(u):n.current=u}catch(n){l.__e(n,t)}}function O(n,u,t){var i,o;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!==n.__e||N(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=null,n.__c=void 0}if(i=n.__k)for(o=0;o<i.length;o++)i[o]&&O(i[o],u,t||\"function\"!=typeof n.type);t||null==n.__e||p(n.__e),n.__=n.__e=n.__d=void 0}function q(n,l,u){return this.constructor(n,u)}function B(u,t,i){var o,r,f,e;l.__&&l.__(u,t),r=(o=\"function\"==typeof i)?null:i&&i.__k||t.__k,f=[],e=[],M(t,u=(!o&&i||t).__k=y(g,null,[u]),r||c,c,void 0!==t.ownerSVGElement,!o&&i?[i]:r?null:t.firstChild?n.call(t.childNodes):null,f,!o&&i?i:r?r.__e:t.firstChild,o,e),u.__d=void 0,j(f,u,e)}function E(n,l){B(n,l,E)}function F(l,u,t){var i,o,r,f,e=v({},l.props);for(r in l.type&&l.type.defaultProps&&(f=l.type.defaultProps),u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:e[r]=void 0===u[r]&&void 0!==f?f[r]:u[r];return arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),d(l.type,e,i||l.key,o||l.ref,null)}function G(n,l){var u={__c:l=\"__cC\"+e++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,t;return this.getChildContext||(u=[],(t={})[l]=this,this.getChildContext=function(){return t},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(function(n){n.__e=!0,x(n)})},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=s.slice,l={__e:function(n,l,u,t){for(var i,o,r;l=l.__;)if((i=l.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(n)),r=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),r=i.__d),r)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&null==n.constructor},b.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=v({},this.state),\"function\"==typeof n&&(n=n(v({},u),this.props)),n&&v(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),x(this))},b.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),x(this))},b.prototype.render=g,i=[],r=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,f=function(n,l){return n.__v.__b-l.__v.__b},C.__r=0,e=0;export{b as Component,g as Fragment,F as cloneElement,G as createContext,y as createElement,_ as createRef,y as h,E as hydrate,t as isValidElement,l as options,B as render,H as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=[],e=n,a=e.__b,v=e.__r,l=e.diffed,m=e.__c,s=e.unmount,d=e.__;function h(n,t){e.__h&&e.__h(r,n,o||t),o=0;var u=r.__H||(r.__H={__:[],__h:[]});return n>=u.__.length&&u.__.push({__V:c}),u.__[n]}function p(n){return o=1,y(D,n)}function y(n,u,i){var o=h(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):D(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.u)){var f=function(n,t,r){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(n){return!!n.__c});if(u.every(function(n){return!n.__N}))return!c||c.call(this,n,t,r);var i=!1;return u.forEach(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),!(!i&&o.__c.props===n)&&(!c||c.call(this,n,t,r))};r.u=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u}e&&e.call(this,n,t,r)},r.shouldComponentUpdate=f}return o.__N||o.__}function _(n,u){var i=h(t++,3);!e.__s&&C(i.__H,u)&&(i.__=n,i.i=u,r.__H.__h.push(i))}function A(n,u){var i=h(t++,4);!e.__s&&C(i.__H,u)&&(i.__=n,i.i=u,r.__h.push(i))}function F(n){return o=5,q(function(){return{current:n}},[])}function T(n,t,r){o=6,A(function(){return\"function\"==typeof n?(n(t()),function(){return n(null)}):n?(n.current=t(),function(){return n.current=null}):void 0},null==r?r:r.concat(n))}function q(n,r){var u=h(t++,7);return C(u.__H,r)?(u.__V=n(),u.i=r,u.__h=n,u.__V):u.__}function x(n,t){return o=8,q(function(){return n},t)}function P(n){var u=r.context[n.__c],i=h(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function V(n,t){e.useDebugValue&&e.useDebugValue(t?t(n):n)}function b(n){var u=h(t++,10),i=p();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function g(){var n=h(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++}return n.__}function j(){for(var n;n=f.shift();)if(n.__P&&n.__H)try{n.__H.__h.forEach(z),n.__H.__h.forEach(B),n.__H.__h=[]}catch(t){n.__H.__h=[],e.__e(t,n.__v)}}e.__b=function(n){r=null,a&&a(n)},e.__=function(n,t){t.__k&&t.__k.__m&&(n.__m=t.__k.__m),d&&d(n,t)},e.__r=function(n){v&&v(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.__V=c,n.__N=n.i=void 0})):(i.__h.forEach(z),i.__h.forEach(B),i.__h=[],t=0)),u=r},e.diffed=function(n){l&&l(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===e.requestAnimationFrame||((i=e.requestAnimationFrame)||w)(j)),t.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.__V!==c&&(n.__=n.__V),n.i=void 0,n.__V=c})),u=r=null},e.__c=function(n,t){t.some(function(n){try{n.__h.forEach(z),n.__h=n.__h.filter(function(n){return!n.__||B(n)})}catch(r){t.some(function(n){n.__h&&(n.__h=[])}),t=[],e.__e(r,n.__v)}}),m&&m(n,t)},e.unmount=function(n){s&&s(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{z(n)}catch(n){t=n}}),r.__H=void 0,t&&e.__e(t,r.__v))};var k=\"function\"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,100);k&&(t=requestAnimationFrame(r))}function z(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function B(n){var t=r;n.__c=n.__(),r=t}function C(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function D(n,t){return\"function\"==typeof t?t(n):t}export{x as useCallback,P as useContext,V as useDebugValue,_ as useEffect,b as useErrorBoundary,g as useId,T as useImperativeHandle,A as useLayoutEffect,q as useMemo,y as useReducer,F as useRef,p as useState};\n//# sourceMappingURL=hooks.module.js.map\n","import { DOCUMENT } from '../../constants';\nimport { setAttributesNS } from '../../util/setAttributesNS';\n\nconst XMLNS = 'http://www.w3.org/2000/svg';\n\n/**\n * Sentry Logo\n */\nexport function SentryLogo(): SVGElement {\n  const createElementNS = <K extends keyof SVGElementTagNameMap>(tagName: K): SVGElementTagNameMap[K] =>\n    DOCUMENT.createElementNS(XMLNS, tagName);\n  const svg = setAttributesNS(createElementNS('svg'), {\n    width: '32',\n    height: '30',\n    viewBox: '0 0 72 66',\n    fill: 'inherit',\n  });\n\n  const path = setAttributesNS(createElementNS('path'), {\n    transform: 'translate(11, 11)',\n    d: 'M29,2.26a4.67,4.67,0,0,0-8,0L14.42,13.53A32.21,32.21,0,0,1,32.17,40.19H27.55A27.68,27.68,0,0,0,12.09,17.47L6,28a15.92,15.92,0,0,1,9.23,12.17H4.62A.76.76,0,0,1,4,39.06l2.94-5a10.74,10.74,0,0,0-3.36-1.9l-2.91,5a4.54,4.54,0,0,0,1.69,6.24A4.66,4.66,0,0,0,4.62,44H19.15a19.4,19.4,0,0,0-8-17.31l2.31-4A23.87,23.87,0,0,1,23.76,44H36.07a35.88,35.88,0,0,0-16.41-31.8l4.67-8a.77.77,0,0,1,1.05-.27c.53.29,20.29,34.77,20.66,35.17a.76.76,0,0,1-.68,1.13H40.6q.09,1.91,0,3.81h4.78A4.59,4.59,0,0,0,50,39.43a4.49,4.49,0,0,0-.62-2.28Z',\n  });\n  svg.appendChild(path);\n\n  return svg;\n}\n","import type { FeedbackInternalOptions } from '@sentry/core';\nimport { h } from 'preact'; // eslint-disable-line @typescript-eslint/no-unused-vars\nimport type { VNode } from 'preact';\nimport { useMemo } from 'preact/hooks';\nimport { SentryLogo } from './SentryLogo';\n\nexport interface Props {\n  options: FeedbackInternalOptions;\n}\n\nexport function DialogHeader({ options }: Props): VNode {\n  const logoHtml = useMemo(() => ({ __html: SentryLogo().outerHTML }), []);\n\n  return (\n    <h2 class=\"dialog__header\">\n      <span class=\"dialog__title\">{options.formTitle}</span>\n      {options.showBranding ? (\n        <a\n          class=\"brand-link\"\n          target=\"_blank\"\n          href=\"https://sentry.io/welcome/\"\n          title=\"Powered by Sentry\"\n          rel=\"noopener noreferrer\"\n          dangerouslySetInnerHTML={logoHtml}\n        />\n      ) : null}\n    </h2>\n  );\n}\n","import { logger } from '@sentry/core';\nimport type {\n  FeedbackFormData,\n  FeedbackInternalOptions,\n  FeedbackScreenshotIntegration,\n  SendFeedback,\n} from '@sentry/core';\nimport { h } from 'preact'; // eslint-disable-line @typescript-eslint/no-unused-vars\nimport type { JSX, VNode } from 'preact';\nimport { useCallback, useState } from 'preact/hooks';\nimport { FEEDBACK_WIDGET_SOURCE } from '../../constants';\nimport { DEBUG_BUILD } from '../../util/debug-build';\nimport { getMissingFields } from '../../util/validate';\n\nexport interface Props extends Pick<FeedbackInternalOptions, 'showEmail' | 'showName'> {\n  options: FeedbackInternalOptions;\n  defaultEmail: string;\n  defaultName: string;\n  onFormClose: () => void;\n  onSubmit: SendFeedback;\n  onSubmitSuccess: (data: FeedbackFormData) => void;\n  onSubmitError: (error: Error) => void;\n  screenshotInput: ReturnType<FeedbackScreenshotIntegration['createInput']> | undefined;\n}\n\nfunction retrieveStringValue(formData: FormData, key: string): string {\n  const value = formData.get(key);\n  if (typeof value === 'string') {\n    return value.trim();\n  }\n  return '';\n}\n\nexport function Form({\n  options,\n  defaultEmail,\n  defaultName,\n\n  onFormClose,\n  onSubmit,\n  onSubmitSuccess,\n  onSubmitError,\n  showEmail,\n  showName,\n  screenshotInput,\n}: Props): VNode {\n  const {\n    tags,\n    addScreenshotButtonLabel,\n    removeScreenshotButtonLabel,\n    cancelButtonLabel,\n    emailLabel,\n    emailPlaceholder,\n    isEmailRequired,\n    isNameRequired,\n    messageLabel,\n    messagePlaceholder,\n    nameLabel,\n    namePlaceholder,\n    submitButtonLabel,\n    isRequiredLabel,\n  } = options;\n  const [isSubmitting, setIsSubmitting] = useState<boolean>(false);\n  // TODO: set a ref on the form, and whenever an input changes call processForm() and setError()\n  const [error, setError] = useState<null | string>(null);\n\n  const [showScreenshotInput, setShowScreenshotInput] = useState(false);\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const ScreenshotInputComponent: any = screenshotInput?.input;\n\n  const [screenshotError, setScreenshotError] = useState<null | Error>(null);\n  const onScreenshotError = useCallback((error: Error) => {\n    setScreenshotError(error);\n    setShowScreenshotInput(false);\n  }, []);\n\n  const hasAllRequiredFields = useCallback(\n    (data: FeedbackFormData) => {\n      const missingFields = getMissingFields(data, {\n        emailLabel,\n        isEmailRequired,\n        isNameRequired,\n        messageLabel,\n        nameLabel,\n      });\n\n      if (missingFields.length > 0) {\n        setError(`Please enter in the following required fields: ${missingFields.join(', ')}`);\n      } else {\n        setError(null);\n      }\n\n      return missingFields.length === 0;\n    },\n    [emailLabel, isEmailRequired, isNameRequired, messageLabel, nameLabel],\n  );\n\n  const handleSubmit = useCallback(\n    async (e: JSX.TargetedSubmitEvent<HTMLFormElement>) => {\n      setIsSubmitting(true);\n      try {\n        e.preventDefault();\n        if (!(e.target instanceof HTMLFormElement)) {\n          return;\n        }\n        const formData = new FormData(e.target);\n        const attachment = await (screenshotInput && showScreenshotInput ? screenshotInput.value() : undefined);\n\n        const data: FeedbackFormData = {\n          name: retrieveStringValue(formData, 'name'),\n          email: retrieveStringValue(formData, 'email'),\n          message: retrieveStringValue(formData, 'message'),\n          attachments: attachment ? [attachment] : undefined,\n        };\n\n        if (!hasAllRequiredFields(data)) {\n          return;\n        }\n\n        try {\n          await onSubmit(\n            {\n              name: data.name,\n              email: data.email,\n              message: data.message,\n              source: FEEDBACK_WIDGET_SOURCE,\n              tags,\n            },\n            { attachments: data.attachments },\n          );\n          onSubmitSuccess(data);\n        } catch (error) {\n          DEBUG_BUILD && logger.error(error);\n          setError(error as string);\n          onSubmitError(error as Error);\n        }\n      } finally {\n        setIsSubmitting(false);\n      }\n    },\n    [screenshotInput && showScreenshotInput, onSubmitSuccess, onSubmitError],\n  );\n\n  return (\n    <form class=\"form\" onSubmit={handleSubmit}>\n      {ScreenshotInputComponent && showScreenshotInput ? (\n        <ScreenshotInputComponent onError={onScreenshotError} />\n      ) : null}\n\n      <fieldset class=\"form__right\" data-sentry-feedback={true} disabled={isSubmitting}>\n        <div class=\"form__top\">\n          {error ? <div class=\"form__error-container\">{error}</div> : null}\n\n          {showName ? (\n            <label for=\"name\" class=\"form__label\">\n              <LabelText label={nameLabel} isRequiredLabel={isRequiredLabel} isRequired={isNameRequired} />\n              <input\n                class=\"form__input\"\n                defaultValue={defaultName}\n                id=\"name\"\n                name=\"name\"\n                placeholder={namePlaceholder}\n                required={isNameRequired}\n                type=\"text\"\n              />\n            </label>\n          ) : (\n            <input aria-hidden value={defaultName} name=\"name\" type=\"hidden\" />\n          )}\n\n          {showEmail ? (\n            <label for=\"email\" class=\"form__label\">\n              <LabelText label={emailLabel} isRequiredLabel={isRequiredLabel} isRequired={isEmailRequired} />\n              <input\n                class=\"form__input\"\n                defaultValue={defaultEmail}\n                id=\"email\"\n                name=\"email\"\n                placeholder={emailPlaceholder}\n                required={isEmailRequired}\n                type=\"email\"\n              ></input>\n            </label>\n          ) : (\n            <input aria-hidden value={defaultEmail} name=\"email\" type=\"hidden\" />\n          )}\n\n          <label for=\"message\" class=\"form__label\">\n            <LabelText label={messageLabel} isRequiredLabel={isRequiredLabel} isRequired />\n            <textarea\n              autoFocus\n              class=\"form__input form__input--textarea\"\n              id=\"message\"\n              name=\"message\"\n              placeholder={messagePlaceholder}\n              required={true}\n              rows={5}\n            />\n          </label>\n\n          {ScreenshotInputComponent ? (\n            <label for=\"screenshot\" class=\"form__label\">\n              <button\n                class=\"btn btn--default\"\n                disabled={isSubmitting}\n                type=\"button\"\n                onClick={() => {\n                  setScreenshotError(null);\n                  setShowScreenshotInput(prev => !prev);\n                }}\n              >\n                {showScreenshotInput ? removeScreenshotButtonLabel : addScreenshotButtonLabel}\n              </button>\n              {screenshotError ? <div class=\"form__error-container\">{screenshotError.message}</div> : null}\n            </label>\n          ) : null}\n        </div>\n        <div class=\"btn-group\">\n          <button class=\"btn btn--primary\" disabled={isSubmitting} type=\"submit\">\n            {submitButtonLabel}\n          </button>\n          <button class=\"btn btn--default\" disabled={isSubmitting} type=\"button\" onClick={onFormClose}>\n            {cancelButtonLabel}\n          </button>\n        </div>\n      </fieldset>\n    </form>\n  );\n}\n\nfunction LabelText({\n  label,\n  isRequired,\n  isRequiredLabel,\n}: {\n  label: string;\n  isRequired: boolean;\n  isRequiredLabel: string;\n}): VNode {\n  return (\n    <span class=\"form__label__text\">\n      {label}\n      {isRequired && <span class=\"form__label__text--required\">{isRequiredLabel}</span>}\n    </span>\n  );\n}\n","import type { FeedbackFormData, FeedbackInternalOptions } from '@sentry/core';\n\nexport type Props = Pick<\n  FeedbackInternalOptions,\n  'emailLabel' | 'isEmailRequired' | 'isNameRequired' | 'messageLabel' | 'nameLabel'\n>;\n\n/**\n * Validate that a given feedback submission has the required fields\n */\nexport function getMissingFields(feedback: FeedbackFormData, props: Props): string[] {\n  const emptyFields = [];\n  if (props.isNameRequired && !feedback.name) {\n    emptyFields.push(props.nameLabel);\n  }\n  if (props.isEmailRequired && !feedback.email) {\n    emptyFields.push(props.emailLabel);\n  }\n  if (!feedback.message) {\n    emptyFields.push(props.messageLabel);\n  }\n\n  return emptyFields;\n}\n","import { WINDOW } from '../../constants';\nimport { setAttributesNS } from '../../util/setAttributesNS';\n\nconst WIDTH = 16;\nconst HEIGHT = 17;\nconst XMLNS = 'http://www.w3.org/2000/svg';\n\n/**\n * Success Icon (checkmark)\n */\nexport function SuccessIcon(): SVGElement {\n  const createElementNS = <K extends keyof SVGElementTagNameMap>(tagName: K): SVGElementTagNameMap[K] =>\n    WINDOW.document.createElementNS(XMLNS, tagName);\n  const svg = setAttributesNS(createElementNS('svg'), {\n    width: `${WIDTH}`,\n    height: `${HEIGHT}`,\n    viewBox: `0 0 ${WIDTH} ${HEIGHT}`,\n    fill: 'inherit',\n  });\n\n  const g = setAttributesNS(createElementNS('g'), {\n    clipPath: 'url(#clip0_57_156)',\n  });\n\n  const path2 = setAttributesNS(createElementNS('path'), {\n    ['fill-rule']: 'evenodd',\n    ['clip-rule']: 'evenodd',\n    d: 'M3.55544 15.1518C4.87103 16.0308 6.41775 16.5 8 16.5C10.1217 16.5 12.1566 15.6571 13.6569 14.1569C15.1571 12.6566 16 10.6217 16 8.5C16 6.91775 15.5308 5.37103 14.6518 4.05544C13.7727 2.73985 12.5233 1.71447 11.0615 1.10897C9.59966 0.503466 7.99113 0.34504 6.43928 0.653721C4.88743 0.962403 3.46197 1.72433 2.34315 2.84315C1.22433 3.96197 0.462403 5.38743 0.153721 6.93928C-0.15496 8.49113 0.00346625 10.0997 0.608967 11.5615C1.21447 13.0233 2.23985 14.2727 3.55544 15.1518ZM4.40546 3.1204C5.46945 2.40946 6.72036 2.03 8 2.03C9.71595 2.03 11.3616 2.71166 12.575 3.92502C13.7883 5.13838 14.47 6.78405 14.47 8.5C14.47 9.77965 14.0905 11.0306 13.3796 12.0945C12.6687 13.1585 11.6582 13.9878 10.476 14.4775C9.29373 14.9672 7.99283 15.0953 6.73777 14.8457C5.48271 14.596 4.32987 13.9798 3.42502 13.075C2.52018 12.1701 1.90397 11.0173 1.65432 9.76224C1.40468 8.50718 1.5328 7.20628 2.0225 6.02404C2.5122 4.8418 3.34148 3.83133 4.40546 3.1204Z',\n  });\n  const path = setAttributesNS(createElementNS('path'), {\n    d: 'M6.68775 12.4297C6.78586 12.4745 6.89218 12.4984 7 12.5C7.11275 12.4955 7.22315 12.4664 7.32337 12.4145C7.4236 12.3627 7.51121 12.2894 7.58 12.2L12 5.63999C12.0848 5.47724 12.1071 5.28902 12.0625 5.11098C12.0178 4.93294 11.9095 4.77744 11.7579 4.67392C11.6064 4.57041 11.4221 4.52608 11.24 4.54931C11.0579 4.57254 10.8907 4.66173 10.77 4.79999L6.88 10.57L5.13 8.56999C5.06508 8.49566 4.98613 8.43488 4.89768 8.39111C4.80922 8.34735 4.713 8.32148 4.61453 8.31498C4.51605 8.30847 4.41727 8.32147 4.32382 8.35322C4.23038 8.38497 4.14413 8.43484 4.07 8.49999C3.92511 8.63217 3.83692 8.81523 3.82387 9.01092C3.81083 9.2066 3.87393 9.39976 4 9.54999L6.43 12.24C6.50187 12.3204 6.58964 12.385 6.68775 12.4297Z',\n  });\n\n  svg.appendChild(g).append(path, path2);\n\n  const speakerDefs = createElementNS('defs');\n  const speakerClipPathDef = setAttributesNS(createElementNS('clipPath'), {\n    id: 'clip0_57_156',\n  });\n\n  const speakerRect = setAttributesNS(createElementNS('rect'), {\n    width: `${WIDTH}`,\n    height: `${WIDTH}`,\n    fill: 'white',\n    transform: 'translate(0 0.5)',\n  });\n\n  speakerClipPathDef.appendChild(speakerRect);\n  speakerDefs.appendChild(speakerClipPathDef);\n\n  svg.appendChild(speakerDefs).appendChild(speakerClipPathDef).appendChild(speakerRect);\n\n  return svg;\n}\n","import type { FeedbackFormData, FeedbackInternalOptions } from '@sentry/core';\nimport { Fragment, h } from 'preact'; // eslint-disable-line @typescript-eslint/no-unused-vars\nimport type { VNode } from 'preact';\nimport { useCallback, useMemo, useState } from 'preact/hooks';\n\nimport { SUCCESS_MESSAGE_TIMEOUT } from '../../constants';\nimport { DialogHeader } from './DialogHeader';\nimport type { Props as HeaderProps } from './DialogHeader';\nimport type { Props as FormProps } from './Form';\nimport { Form } from './Form';\nimport { SuccessIcon } from './SuccessIcon';\n\ninterface Props extends HeaderProps, FormProps {\n  onFormSubmitted: () => void;\n  open: boolean;\n  options: FeedbackInternalOptions;\n}\n\nexport function Dialog({ open, onFormSubmitted, ...props }: Props): VNode {\n  const options = props.options;\n  const successIconHtml = useMemo(() => ({ __html: SuccessIcon().outerHTML }), []);\n\n  const [timeoutId, setTimeoutId] = useState<NodeJS.Timeout | null>(null);\n\n  const handleOnSuccessClick = useCallback(() => {\n    if (timeoutId) {\n      clearTimeout(timeoutId);\n      setTimeoutId(null);\n    }\n    onFormSubmitted();\n  }, [timeoutId]);\n\n  const onSubmitSuccess = useCallback(\n    (data: FeedbackFormData) => {\n      props.onSubmitSuccess(data);\n      setTimeoutId(\n        setTimeout(() => {\n          onFormSubmitted();\n          setTimeoutId(null);\n        }, SUCCESS_MESSAGE_TIMEOUT),\n      );\n    },\n    [onFormSubmitted],\n  );\n\n  return (\n    <Fragment>\n      {timeoutId ? (\n        <div class=\"success__position\" onClick={handleOnSuccessClick}>\n          <div class=\"success__content\">\n            {options.successMessageText}\n            <span class=\"success__icon\" dangerouslySetInnerHTML={successIconHtml} />\n          </div>\n        </div>\n      ) : (\n        <dialog class=\"dialog\" onClick={options.onFormClose} open={open}>\n          <div class=\"dialog__position\">\n            <div\n              class=\"dialog__content\"\n              onClick={e => {\n                // Stop event propagation so clicks on content modal do not propagate to dialog (which will close dialog)\n                e.stopPropagation();\n              }}\n            >\n              <DialogHeader options={options} />\n              <Form {...props} onSubmitSuccess={onSubmitSuccess} />\n            </div>\n          </div>\n        </dialog>\n      )}\n    </Fragment>\n  );\n}\n","import type { FeedbackInternalOptions } from '@sentry/core';\nimport type { VNode, h as hType } from 'preact';\nimport type * as Hooks from 'preact/hooks';\nimport { DOCUMENT, WINDOW } from '../../constants';\nimport CropCornerFactory from './CropCorner';\n\nconst CROP_BUTTON_SIZE = 30;\nconst CROP_BUTTON_BORDER = 3;\nconst CROP_BUTTON_OFFSET = CROP_BUTTON_SIZE + CROP_BUTTON_BORDER;\nconst DPI = WINDOW.devicePixelRatio;\n\ninterface Box {\n  startX: number;\n  startY: number;\n  endX: number;\n  endY: number;\n}\n\ninterface Rect {\n  x: number;\n  y: number;\n  height: number;\n  width: number;\n}\n\nconst constructRect = (box: Box): Rect => ({\n  x: Math.min(box.startX, box.endX),\n  y: Math.min(box.startY, box.endY),\n  width: Math.abs(box.startX - box.endX),\n  height: Math.abs(box.startY - box.endY),\n});\n\nconst getContainedSize = (img: HTMLCanvasElement): Rect => {\n  const imgClientHeight = img.clientHeight;\n  const imgClientWidth = img.clientWidth;\n  const ratio = img.width / img.height;\n  let width = imgClientHeight * ratio;\n  let height = imgClientHeight;\n  if (width > imgClientWidth) {\n    width = imgClientWidth;\n    height = imgClientWidth / ratio;\n  }\n  const x = (imgClientWidth - width) / 2;\n  const y = (imgClientHeight - height) / 2;\n  return { x: x, y: y, width: width, height: height };\n};\n\ninterface FactoryParams {\n  h: typeof hType;\n  hooks: typeof Hooks;\n  options: FeedbackInternalOptions;\n}\n\nexport default function CropFactory({\n  h,\n  hooks,\n  options,\n}: FactoryParams): (props: {\n  action: 'crop' | 'annotate' | '';\n  imageBuffer: HTMLCanvasElement;\n  croppingRef: Hooks.Ref<HTMLCanvasElement>;\n  cropContainerRef: Hooks.Ref<HTMLDivElement>;\n  croppingRect: Box;\n  setCroppingRect: Hooks.StateUpdater<Box>;\n  resize: () => void;\n}) => VNode {\n  const CropCorner = CropCornerFactory({ h });\n  return function Crop({\n    action,\n    imageBuffer,\n    croppingRef,\n    cropContainerRef,\n    croppingRect,\n    setCroppingRect,\n    resize,\n  }: {\n    action: 'crop' | 'annotate' | '';\n    imageBuffer: HTMLCanvasElement;\n    croppingRef: Hooks.Ref<HTMLCanvasElement>;\n    cropContainerRef: Hooks.Ref<HTMLDivElement>;\n    croppingRect: Box;\n    setCroppingRect: Hooks.StateUpdater<Box>;\n    resize: () => void;\n  }): VNode {\n    const initialPositionRef = hooks.useRef({ initialX: 0, initialY: 0 });\n\n    const [isResizing, setIsResizing] = hooks.useState(false);\n    const [confirmCrop, setConfirmCrop] = hooks.useState(false);\n\n    hooks.useEffect(() => {\n      const cropper = croppingRef.current;\n      if (!cropper) {\n        return;\n      }\n\n      const ctx = cropper.getContext('2d');\n      if (!ctx) {\n        return;\n      }\n\n      const imageDimensions = getContainedSize(imageBuffer);\n      const croppingBox = constructRect(croppingRect);\n      ctx.clearRect(0, 0, imageDimensions.width, imageDimensions.height);\n\n      if (action !== 'crop') {\n        return;\n      }\n\n      // draw gray overlay around the selection\n      ctx.fillStyle = 'rgba(0, 0, 0, 0.5)';\n      ctx.fillRect(0, 0, imageDimensions.width, imageDimensions.height);\n      ctx.clearRect(croppingBox.x, croppingBox.y, croppingBox.width, croppingBox.height);\n\n      // draw selection border\n      ctx.strokeStyle = '#ffffff';\n      ctx.lineWidth = 3;\n      ctx.strokeRect(croppingBox.x + 1, croppingBox.y + 1, croppingBox.width - 2, croppingBox.height - 2);\n      ctx.strokeStyle = '#000000';\n      ctx.lineWidth = 1;\n      ctx.strokeRect(croppingBox.x + 3, croppingBox.y + 3, croppingBox.width - 6, croppingBox.height - 6);\n    }, [croppingRect, action]);\n\n    // Resizing logic\n    const makeHandleMouseMove = hooks.useCallback((corner: string) => {\n      return (e: MouseEvent) => {\n        if (!croppingRef.current) {\n          return;\n        }\n\n        const cropCanvas = croppingRef.current;\n        const cropBoundingRect = cropCanvas.getBoundingClientRect();\n        const mouseX = e.clientX - cropBoundingRect.x;\n        const mouseY = e.clientY - cropBoundingRect.y;\n\n        switch (corner) {\n          case 'top-left':\n            setCroppingRect(prev => ({\n              ...prev,\n              startX: Math.min(Math.max(0, mouseX), prev.endX - CROP_BUTTON_OFFSET),\n              startY: Math.min(Math.max(0, mouseY), prev.endY - CROP_BUTTON_OFFSET),\n            }));\n            break;\n          case 'top-right':\n            setCroppingRect(prev => ({\n              ...prev,\n              endX: Math.max(Math.min(mouseX, cropCanvas.width / DPI), prev.startX + CROP_BUTTON_OFFSET),\n              startY: Math.min(Math.max(0, mouseY), prev.endY - CROP_BUTTON_OFFSET),\n            }));\n            break;\n          case 'bottom-left':\n            setCroppingRect(prev => ({\n              ...prev,\n              startX: Math.min(Math.max(0, mouseX), prev.endX - CROP_BUTTON_OFFSET),\n              endY: Math.max(Math.min(mouseY, cropCanvas.height / DPI), prev.startY + CROP_BUTTON_OFFSET),\n            }));\n            break;\n          case 'bottom-right':\n            setCroppingRect(prev => ({\n              ...prev,\n              endX: Math.max(Math.min(mouseX, cropCanvas.width / DPI), prev.startX + CROP_BUTTON_OFFSET),\n              endY: Math.max(Math.min(mouseY, cropCanvas.height / DPI), prev.startY + CROP_BUTTON_OFFSET),\n            }));\n            break;\n        }\n      };\n    }, []);\n\n    // Dragging logic\n    const onDragStart = (e: MouseEvent): void => {\n      if (isResizing) {\n        return;\n      }\n\n      initialPositionRef.current = { initialX: e.clientX, initialY: e.clientY };\n\n      const handleMouseMove = (moveEvent: MouseEvent): void => {\n        const cropCanvas = croppingRef.current;\n        if (!cropCanvas) {\n          return;\n        }\n\n        const deltaX = moveEvent.clientX - initialPositionRef.current.initialX;\n        const deltaY = moveEvent.clientY - initialPositionRef.current.initialY;\n\n        setCroppingRect(prev => {\n          const newStartX = Math.max(\n            0,\n            Math.min(prev.startX + deltaX, cropCanvas.width / DPI - (prev.endX - prev.startX)),\n          );\n          const newStartY = Math.max(\n            0,\n            Math.min(prev.startY + deltaY, cropCanvas.height / DPI - (prev.endY - prev.startY)),\n          );\n\n          const newEndX = newStartX + (prev.endX - prev.startX);\n          const newEndY = newStartY + (prev.endY - prev.startY);\n\n          initialPositionRef.current.initialX = moveEvent.clientX;\n          initialPositionRef.current.initialY = moveEvent.clientY;\n\n          return { startX: newStartX, startY: newStartY, endX: newEndX, endY: newEndY };\n        });\n      };\n\n      const handleMouseUp = (): void => {\n        DOCUMENT.removeEventListener('mousemove', handleMouseMove);\n        DOCUMENT.removeEventListener('mouseup', handleMouseUp);\n      };\n\n      DOCUMENT.addEventListener('mousemove', handleMouseMove);\n      DOCUMENT.addEventListener('mouseup', handleMouseUp);\n    };\n\n    const onGrabButton = (e: Event, corner: string): void => {\n      setIsResizing(true);\n      const handleMouseMove = makeHandleMouseMove(corner);\n      const handleMouseUp = (): void => {\n        DOCUMENT.removeEventListener('mousemove', handleMouseMove);\n        DOCUMENT.removeEventListener('mouseup', handleMouseUp);\n        setConfirmCrop(true);\n        setIsResizing(false);\n      };\n\n      DOCUMENT.addEventListener('mouseup', handleMouseUp);\n      DOCUMENT.addEventListener('mousemove', handleMouseMove);\n    };\n\n    function applyCrop(): void {\n      const cutoutCanvas = DOCUMENT.createElement('canvas');\n      const imageBox = getContainedSize(imageBuffer);\n      const croppingBox = constructRect(croppingRect);\n      cutoutCanvas.width = croppingBox.width * DPI;\n      cutoutCanvas.height = croppingBox.height * DPI;\n\n      const cutoutCtx = cutoutCanvas.getContext('2d');\n      if (cutoutCtx && imageBuffer) {\n        cutoutCtx.drawImage(\n          imageBuffer,\n          (croppingBox.x / imageBox.width) * imageBuffer.width,\n          (croppingBox.y / imageBox.height) * imageBuffer.height,\n          (croppingBox.width / imageBox.width) * imageBuffer.width,\n          (croppingBox.height / imageBox.height) * imageBuffer.height,\n          0,\n          0,\n          cutoutCanvas.width,\n          cutoutCanvas.height,\n        );\n      }\n\n      const ctx = imageBuffer.getContext('2d');\n      if (ctx) {\n        ctx.clearRect(0, 0, imageBuffer.width, imageBuffer.height);\n        imageBuffer.width = cutoutCanvas.width;\n        imageBuffer.height = cutoutCanvas.height;\n        imageBuffer.style.width = `${croppingBox.width}px`;\n        imageBuffer.style.height = `${croppingBox.height}px`;\n        ctx.drawImage(cutoutCanvas, 0, 0);\n\n        resize();\n      }\n    }\n\n    return (\n      <div\n        class={`editor__crop-container ${action === 'crop' ? '' : 'editor__crop-container--inactive'}\n              ${confirmCrop ? 'editor__crop-container--move' : ''}`}\n        ref={cropContainerRef}\n      >\n        <canvas onMouseDown={onDragStart} ref={croppingRef}></canvas>\n        {action === 'crop' && (\n          <div>\n            <CropCorner\n              left={croppingRect.startX - CROP_BUTTON_BORDER}\n              top={croppingRect.startY - CROP_BUTTON_BORDER}\n              onGrabButton={onGrabButton}\n              corner=\"top-left\"\n            />\n            <CropCorner\n              left={croppingRect.endX - CROP_BUTTON_SIZE + CROP_BUTTON_BORDER}\n              top={croppingRect.startY - CROP_BUTTON_BORDER}\n              onGrabButton={onGrabButton}\n              corner=\"top-right\"\n            />\n            <CropCorner\n              left={croppingRect.startX - CROP_BUTTON_BORDER}\n              top={croppingRect.endY - CROP_BUTTON_SIZE + CROP_BUTTON_BORDER}\n              onGrabButton={onGrabButton}\n              corner=\"bottom-left\"\n            />\n            <CropCorner\n              left={croppingRect.endX - CROP_BUTTON_SIZE + CROP_BUTTON_BORDER}\n              top={croppingRect.endY - CROP_BUTTON_SIZE + CROP_BUTTON_BORDER}\n              onGrabButton={onGrabButton}\n              corner=\"bottom-right\"\n            />\n          </div>\n        )}\n        {action === 'crop' && (\n          <div\n            style={{\n              left: Math.max(0, croppingRect.endX - 191),\n              top: Math.max(0, croppingRect.endY + 8),\n            }}\n            class={`editor__crop-btn-group ${confirmCrop ? 'editor__crop-btn-group--active' : ''}`}\n          >\n            <button\n              onClick={e => {\n                e.preventDefault();\n                if (croppingRef.current) {\n                  setCroppingRect({\n                    startX: 0,\n                    startY: 0,\n                    endX: croppingRef.current.width / DPI,\n                    endY: croppingRef.current.height / DPI,\n                  });\n                }\n                setConfirmCrop(false);\n              }}\n              class=\"btn btn--default\"\n            >\n              {options.cancelButtonLabel}\n            </button>\n            <button\n              onClick={e => {\n                e.preventDefault();\n                applyCrop();\n                setConfirmCrop(false);\n              }}\n              class=\"btn btn--primary\"\n            >\n              {options.confirmButtonLabel}\n            </button>\n          </div>\n        )}\n      </div>\n    );\n  };\n}\n","import { DOCUMENT } from '../../constants';\n\n/**\n * Creates <style> element for widget dialog\n */\nexport function createScreenshotInputStyles(styleNonce?: string): HTMLStyleElement {\n  const style = DOCUMENT.createElement('style');\n\n  const surface200 = '#1A141F';\n  const gray100 = '#302735';\n\n  style.textContent = `\n.editor {\n  display: flex;\n  flex-grow: 1;\n  flex-direction: column;\n}\n.editor__image-container {\n  padding: 10px;\n  padding-top: 65px;\n  padding-bottom: 65px;\n  position: relative;\n  height: 100%;\n  border-radius: var(--menu-border-radius, 6px);\n\n  background-color: ${surface200};\n  background-image: repeating-linear-gradient(\n      -145deg,\n      transparent,\n      transparent 8px,\n      ${surface200} 8px,\n      ${surface200} 11px\n    ),\n    repeating-linear-gradient(\n      -45deg,\n      transparent,\n      transparent 15px,\n      ${gray100} 15px,\n      ${gray100} 16px\n    );\n}\n\n.editor__annotation {\n  z-index: 1;\n}\n.editor__annotation--active {\n  z-index: 2;\n}\n\n.editor__canvas-container {\n  width: 100%;\n  height: 100%;\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n.editor__canvas-container canvas {\n  object-fit: contain;\n  position: absolute;\n}\n\n.editor__crop-container {\n  custor: auto;\n  position: absolute;\n  z-index: 2;\n}\n.editor__crop-container--inactive {\n  z-index: 1;\n}\n.editor__crop-container--move {\n  cursor: move;\n}\n\n.editor__crop-btn-group {\n  padding: 8px;\n  gap: 8px;\n  border-radius: var(--menu-border-radius, 6px);\n  background: var(--button-background, var(--background));\n  width: 175px;\n  position: absolute;\n  display: none;\n}\n.editor__crop-btn-group--active {\n  display: flex;\n}\n\n.editor__crop-corner {\n  width: 30px;\n  height: 30px;\n  position: absolute;\n  background: none;\n  border: 3px solid #ffffff;\n}\n\n.editor__crop-corner--top-left {\n  cursor: nwse-resize;\n  border-right: none;\n  border-bottom: none;\n}\n.editor__crop-corner--top-right {\n  cursor: nesw-resize;\n  border-left: none;\n  border-bottom: none;\n}\n.editor__crop-corner--bottom-left {\n  cursor: nesw-resize;\n  border-right: none;\n  border-top: none;\n}\n.editor__crop-corner--bottom-right {\n  cursor: nwse-resize;\n  border-left: none;\n  border-top: none;\n}\n.editor__tool-container {\n  padding-top: 8px;\n  display: flex;\n  justify-content: space-between;\n}\n.editor__tool-bar {\n  display: flex;\n  gap: 8px;\n}\n.editor__tool {\n  display: flex;\n  padding: 8px 12px;\n  justify-content: center;\n  align-items: center;\n  border: var(--button-border, var(--border));\n  border-radius: var(--button-border-radius, 6px);\n  background: var(--button-background, var(--background));\n  color: var(--button-foreground, var(--foreground));\n}\n\n.editor__tool--active {\n  background: var(--button-primary-background, var(--accent-background));\n  color: var(--button-primary-foreground, var(--accent-foreground));\n}\n`;\n\n  if (styleNonce) {\n    style.setAttribute('nonce', styleNonce);\n  }\n\n  return style;\n}\n","import type { FeedbackInternalOptions, FeedbackModalIntegration } from '@sentry/core';\nimport type { ComponentType, VNode, h as hType } from 'preact';\nimport { h } from 'preact'; // eslint-disable-line @typescript-eslint/no-unused-vars\nimport type * as Hooks from 'preact/hooks';\nimport { WINDOW } from '../../constants';\nimport AnnotationsFactory from './Annotations';\nimport CropFactory from './Crop';\nimport { createScreenshotInputStyles } from './ScreenshotInput.css';\nimport ToolbarFactory from './Toolbar';\nimport { useTakeScreenshotFactory } from './useTakeScreenshot';\n\nconst DPI = WINDOW.devicePixelRatio;\n\ninterface FactoryParams {\n  h: typeof hType;\n  hooks: typeof Hooks;\n  imageBuffer: HTMLCanvasElement;\n  dialog: ReturnType<FeedbackModalIntegration['createDialog']>;\n  options: FeedbackInternalOptions;\n}\n\ninterface Props {\n  onError: (error: Error) => void;\n}\n\ninterface Box {\n  startX: number;\n  startY: number;\n  endX: number;\n  endY: number;\n}\n\ninterface Rect {\n  x: number;\n  y: number;\n  height: number;\n  width: number;\n}\n\nconst getContainedSize = (img: HTMLCanvasElement): Rect => {\n  const imgClientHeight = img.clientHeight;\n  const imgClientWidth = img.clientWidth;\n  const ratio = img.width / img.height;\n  let width = imgClientHeight * ratio;\n  let height = imgClientHeight;\n  if (width > imgClientWidth) {\n    width = imgClientWidth;\n    height = imgClientWidth / ratio;\n  }\n  const x = (imgClientWidth - width) / 2;\n  const y = (imgClientHeight - height) / 2;\n  return { x: x, y: y, width: width, height: height };\n};\n\nexport function ScreenshotEditorFactory({\n  h,\n  hooks,\n  imageBuffer,\n  dialog,\n  options,\n}: FactoryParams): ComponentType<Props> {\n  const useTakeScreenshot = useTakeScreenshotFactory({ hooks });\n  const Toolbar = ToolbarFactory({ h });\n  const Annotations = AnnotationsFactory({ h });\n  const Crop = CropFactory({ h, hooks, options });\n\n  return function ScreenshotEditor({ onError }: Props): VNode {\n    const styles = hooks.useMemo(() => ({ __html: createScreenshotInputStyles(options.styleNonce).innerText }), []);\n\n    const canvasContainerRef = hooks.useRef<HTMLDivElement>(null);\n    const cropContainerRef = hooks.useRef<HTMLDivElement>(null);\n    const annotatingRef = hooks.useRef<HTMLCanvasElement>(null);\n    const croppingRef = hooks.useRef<HTMLCanvasElement>(null);\n    const [action, setAction] = hooks.useState<'annotate' | 'crop' | ''>('crop');\n    const [croppingRect, setCroppingRect] = hooks.useState<Box>({\n      startX: 0,\n      startY: 0,\n      endX: 0,\n      endY: 0,\n    });\n\n    hooks.useEffect(() => {\n      WINDOW.addEventListener('resize', resize);\n\n      return () => {\n        WINDOW.removeEventListener('resize', resize);\n      };\n    }, []);\n\n    function resizeCanvas(canvasRef: Hooks.Ref<HTMLCanvasElement>, imageDimensions: Rect): void {\n      const canvas = canvasRef.current;\n      if (!canvas) {\n        return;\n      }\n\n      canvas.width = imageDimensions.width * DPI;\n      canvas.height = imageDimensions.height * DPI;\n      canvas.style.width = `${imageDimensions.width}px`;\n      canvas.style.height = `${imageDimensions.height}px`;\n      const ctx = canvas.getContext('2d');\n      if (ctx) {\n        ctx.scale(DPI, DPI);\n      }\n    }\n\n    function resize(): void {\n      const imageDimensions = getContainedSize(imageBuffer);\n\n      resizeCanvas(croppingRef, imageDimensions);\n      resizeCanvas(annotatingRef, imageDimensions);\n\n      const cropContainer = cropContainerRef.current;\n      if (cropContainer) {\n        cropContainer.style.width = `${imageDimensions.width}px`;\n        cropContainer.style.height = `${imageDimensions.height}px`;\n      }\n\n      setCroppingRect({ startX: 0, startY: 0, endX: imageDimensions.width, endY: imageDimensions.height });\n    }\n\n    useTakeScreenshot({\n      onBeforeScreenshot: hooks.useCallback(() => {\n        (dialog.el as HTMLElement).style.display = 'none';\n      }, []),\n      onScreenshot: hooks.useCallback(\n        (imageSource: HTMLVideoElement) => {\n          const context = imageBuffer.getContext('2d');\n          if (!context) {\n            throw new Error('Could not get canvas context');\n          }\n          imageBuffer.width = imageSource.videoWidth;\n          imageBuffer.height = imageSource.videoHeight;\n          imageBuffer.style.width = '100%';\n          imageBuffer.style.height = '100%';\n          context.drawImage(imageSource, 0, 0);\n        },\n        [imageBuffer],\n      ),\n      onAfterScreenshot: hooks.useCallback(() => {\n        (dialog.el as HTMLElement).style.display = 'block';\n        const container = canvasContainerRef.current;\n        container?.appendChild(imageBuffer);\n        resize();\n      }, []),\n      onError: hooks.useCallback(error => {\n        (dialog.el as HTMLElement).style.display = 'block';\n        onError(error);\n      }, []),\n    });\n\n    return (\n      <div class=\"editor\">\n        <style nonce={options.styleNonce} dangerouslySetInnerHTML={styles} />\n        <div class=\"editor__image-container\">\n          <div class=\"editor__canvas-container\" ref={canvasContainerRef}>\n            <Crop\n              action={action}\n              imageBuffer={imageBuffer}\n              croppingRef={croppingRef}\n              cropContainerRef={cropContainerRef}\n              croppingRect={croppingRect}\n              setCroppingRect={setCroppingRect}\n              resize={resize}\n            />\n            <Annotations action={action} imageBuffer={imageBuffer} annotatingRef={annotatingRef} />\n          </div>\n        </div>\n        {options._experiments.annotations && <Toolbar action={action} setAction={setAction} />}\n      </div>\n    );\n  };\n}\n","import type * as Hooks from 'preact/hooks';\nimport { DOCUMENT, NAVIGATOR, WINDOW } from '../../constants';\n\ninterface FactoryParams {\n  hooks: typeof Hooks;\n}\n\ninterface Props {\n  onBeforeScreenshot: () => void;\n  onScreenshot: (imageSource: HTMLVideoElement) => void;\n  onAfterScreenshot: () => void;\n  onError: (error: Error) => void;\n}\n\ntype UseTakeScreenshot = ({ onBeforeScreenshot, onScreenshot, onAfterScreenshot, onError }: Props) => void;\n\nexport function useTakeScreenshotFactory({ hooks }: FactoryParams): UseTakeScreenshot {\n  return function useTakeScreenshot({ onBeforeScreenshot, onScreenshot, onAfterScreenshot, onError }: Props) {\n    hooks.useEffect(() => {\n      const takeScreenshot = async (): Promise<void> => {\n        onBeforeScreenshot();\n        const stream = await NAVIGATOR.mediaDevices.getDisplayMedia({\n          video: {\n            width: WINDOW.innerWidth * WINDOW.devicePixelRatio,\n            height: WINDOW.innerHeight * WINDOW.devicePixelRatio,\n          },\n          audio: false,\n          // @ts-expect-error experimental flags: https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia#prefercurrenttab\n          monitorTypeSurfaces: 'exclude',\n          preferCurrentTab: true,\n          selfBrowserSurface: 'include',\n          surfaceSwitching: 'exclude',\n        });\n\n        const video = DOCUMENT.createElement('video');\n        await new Promise<void>((resolve, reject) => {\n          video.srcObject = stream;\n          video.onloadedmetadata = () => {\n            onScreenshot(video);\n            stream.getTracks().forEach(track => track.stop());\n            resolve();\n          };\n          video.play().catch(reject);\n        });\n        onAfterScreenshot();\n      };\n\n      takeScreenshot().catch(onError);\n    }, []);\n  };\n}\n","import type { VNode, h as hType } from 'preact';\nimport type * as Hooks from 'preact/hooks';\nimport CropIconFactory from './CropIcon';\nimport PenIconFactory from './PenIcon';\n\ninterface FactoryParams {\n  h: typeof hType;\n}\n\nexport default function ToolbarFactory({ h }: FactoryParams) {\n  return function Toolbar({\n    action,\n    setAction,\n  }: {\n    action: 'crop' | 'annotate' | '';\n    setAction: Hooks.StateUpdater<'crop' | 'annotate' | ''>;\n  }): VNode {\n    const PenIcon = PenIconFactory({ h });\n    const CropIcon = CropIconFactory({ h });\n\n    return (\n      <div class=\"editor__tool-container\">\n        <div />\n        <div class=\"editor__tool-bar\">\n          <button\n            type=\"button\"\n            class={`editor__tool ${action === 'crop' ? 'editor__tool--active' : ''}`}\n            onClick={() => {\n              if (action === 'crop') {\n                setAction('');\n              } else {\n                setAction('crop');\n              }\n            }}\n          >\n            <CropIcon />\n          </button>\n          <button\n            type=\"button\"\n            class={`editor__tool ${action === 'annotate' ? 'editor__tool--active' : ''}`}\n            onClick={() => {\n              if (action === 'annotate') {\n                setAction('');\n              } else {\n                setAction('annotate');\n              }\n            }}\n          >\n            <PenIcon />\n          </button>\n        </div>\n        <div />\n      </div>\n    );\n  };\n}\n","import type { VNode, h as hType } from 'preact';\n\ninterface FactoryParams {\n  h: typeof hType;\n}\n\nexport default function PenIconFactory({\n  h, // eslint-disable-line @typescript-eslint/no-unused-vars\n}: FactoryParams) {\n  return function PenIcon(): VNode {\n    return (\n      <svg width=\"20\" height=\"20\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path\n          d=\"M8.5 12L12 8.5L14 11L11 14L8.5 12Z\"\n          stroke=\"currentColor\"\n          strokeWidth=\"1.5\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        />\n        <path\n          d=\"M12 8.5L11 3.5L2 2L3.5 11L8.5 12L12 8.5Z\"\n          stroke=\"currentColor\"\n          strokeWidth=\"1.5\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        />\n        <path d=\"M2 2L7.5 7.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n      </svg>\n    );\n  };\n}\n","import type { VNode, h as hType } from 'preact';\n\ninterface FactoryParams {\n  h: typeof hType;\n}\n\nexport default function CropIconFactory({\n  h, // eslint-disable-line @typescript-eslint/no-unused-vars\n}: FactoryParams) {\n  return function CropIcon(): VNode {\n    return (\n      <svg width=\"20\" height=\"20\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path\n          d=\"M15.25 12.5H12.5M12.5 12.5H4.50001C3.94773 12.5 3.50001 12.0523 3.50001 11.5V3.50002M12.5 12.5L12.5 4.50002C12.5 3.94773 12.0523 3.50002 11.5 3.50002H3.50001M12.5 12.5L12.5 15.25M3.50001 3.50002V0.750031M3.50001 3.50002H0.75\"\n          stroke=\"currentColor\"\n          strokeWidth=\"1.5\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        />\n      </svg>\n    );\n  };\n}\n","import type { VNode, h as hType } from 'preact';\nimport type * as Hooks from 'preact/hooks';\nimport { DOCUMENT } from '../../constants';\n\ninterface FactoryParams {\n  h: typeof hType;\n}\n\nexport default function AnnotationsFactory({\n  h, // eslint-disable-line @typescript-eslint/no-unused-vars\n}: FactoryParams) {\n  return function Annotations({\n    action,\n    imageBuffer,\n    annotatingRef,\n  }: {\n    action: 'crop' | 'annotate' | '';\n    imageBuffer: HTMLCanvasElement;\n    annotatingRef: Hooks.Ref<HTMLCanvasElement>;\n  }): VNode {\n    const onAnnotateStart = (): void => {\n      if (action !== 'annotate') {\n        return;\n      }\n\n      const handleMouseMove = (moveEvent: MouseEvent): void => {\n        const annotateCanvas = annotatingRef.current;\n        if (annotateCanvas) {\n          const rect = annotateCanvas.getBoundingClientRect();\n          const x = moveEvent.clientX - rect.x;\n          const y = moveEvent.clientY - rect.y;\n\n          const ctx = annotateCanvas.getContext('2d');\n          if (ctx) {\n            ctx.lineTo(x, y);\n            ctx.stroke();\n            ctx.beginPath();\n            ctx.moveTo(x, y);\n          }\n        }\n      };\n\n      const handleMouseUp = (): void => {\n        const ctx = annotatingRef.current?.getContext('2d');\n        if (ctx) {\n          ctx.beginPath();\n        }\n\n        // Add your apply annotation logic here\n        applyAnnotation();\n\n        DOCUMENT.removeEventListener('mousemove', handleMouseMove);\n        DOCUMENT.removeEventListener('mouseup', handleMouseUp);\n      };\n\n      DOCUMENT.addEventListener('mousemove', handleMouseMove);\n      DOCUMENT.addEventListener('mouseup', handleMouseUp);\n    };\n\n    const applyAnnotation = (): void => {\n      // Logic to apply the annotation\n      const imageCtx = imageBuffer.getContext('2d');\n      const annotateCanvas = annotatingRef.current;\n      if (imageCtx && annotateCanvas) {\n        imageCtx.drawImage(\n          annotateCanvas,\n          0,\n          0,\n          annotateCanvas.width,\n          annotateCanvas.height,\n          0,\n          0,\n          imageBuffer.width,\n          imageBuffer.height,\n        );\n\n        const annotateCtx = annotateCanvas.getContext('2d');\n        if (annotateCtx) {\n          annotateCtx.clearRect(0, 0, annotateCanvas.width, annotateCanvas.height);\n        }\n      }\n    };\n    return (\n      <canvas\n        class={`editor__annotation ${action === 'annotate' ? 'editor__annotation--active' : ''}`}\n        onMouseDown={onAnnotateStart}\n        ref={annotatingRef}\n      ></canvas>\n    );\n  };\n}\n","import type { VNode, h as hType } from 'preact';\n\ninterface FactoryParams {\n  h: typeof hType;\n}\n\nexport default function CropCornerFactory({\n  h, // eslint-disable-line @typescript-eslint/no-unused-vars\n}: FactoryParams) {\n  return function CropCorner({\n    top,\n    left,\n    corner,\n    onGrabButton,\n  }: {\n    top: number;\n    left: number;\n    corner: string;\n    onGrabButton: (e: Event, corner: string) => void;\n  }): VNode {\n    return (\n      <button\n        class={`editor__crop-corner editor__crop-corner--${corner} `}\n        style={{\n          top: top,\n          left: left,\n        }}\n        onMouseDown={e => {\n          e.preventDefault();\n          onGrabButton(e, corner);\n        }}\n        onClick={e => {\n          e.preventDefault();\n        }}\n      ></button>\n    );\n  };\n}\n","import type {\n  FeedbackInternalOptions,\n  FeedbackModalIntegration,\n  FeedbackScreenshotIntegration,\n  Integration,\n  IntegrationFn,\n} from '@sentry/core';\nimport { addIntegration, isBrowser, logger } from '@sentry/core';\nimport {\n  ADD_SCREENSHOT_LABEL,\n  CANCEL_BUTTON_LABEL,\n  CONFIRM_BUTTON_LABEL,\n  DOCUMENT,\n  EMAIL_LABEL,\n  EMAIL_PLACEHOLDER,\n  FORM_TITLE,\n  IS_REQUIRED_LABEL,\n  MESSAGE_LABEL,\n  MESSAGE_PLACEHOLDER,\n  NAME_LABEL,\n  NAME_PLACEHOLDER,\n  REMOVE_SCREENSHOT_LABEL,\n  SUBMIT_BUTTON_LABEL,\n  SUCCESS_MESSAGE_TEXT,\n  TRIGGER_LABEL,\n} from '../constants';\nimport { DEBUG_BUILD } from '../util/debug-build';\nimport { isScreenshotSupported } from '../util/isScreenshotSupported';\nimport { mergeOptions } from '../util/mergeOptions';\nimport type { ActorComponent } from './components/Actor';\nimport { Actor } from './components/Actor';\nimport { createMainStyles } from './createMainStyles';\nimport { sendFeedback } from './sendFeedback';\nimport type { OptionalFeedbackConfiguration, OverrideFeedbackConfiguration } from './types';\n\ntype Unsubscribe = () => void;\n\n/**\n * Allow users to capture user feedback and send it to Sentry.\n */\n\ntype BuilderOptions =\n  | {\n      lazyLoadIntegration?: never;\n      getModalIntegration: () => IntegrationFn;\n      getScreenshotIntegration: () => IntegrationFn;\n    }\n  | {\n      // The type here should be `keyof typeof LazyLoadableIntegrations`, but that'll cause a cicrular\n      // dependency with @sentry/core\n      lazyLoadIntegration: (\n        name: 'feedbackModalIntegration' | 'feedbackScreenshotIntegration',\n        scriptNonce?: string,\n      ) => Promise<IntegrationFn>;\n      getModalIntegration?: never;\n      getScreenshotIntegration?: never;\n    };\n\nexport const buildFeedbackIntegration = ({\n  lazyLoadIntegration,\n  getModalIntegration,\n  getScreenshotIntegration,\n}: BuilderOptions): IntegrationFn<\n  Integration & {\n    attachTo(el: Element | string, optionOverrides?: OverrideFeedbackConfiguration): Unsubscribe;\n    createForm(\n      optionOverrides?: OverrideFeedbackConfiguration,\n    ): Promise<ReturnType<FeedbackModalIntegration['createDialog']>>;\n    createWidget(optionOverrides?: OverrideFeedbackConfiguration): ActorComponent;\n    remove(): void;\n  }\n> => {\n  const feedbackIntegration = (({\n    // FeedbackGeneralConfiguration\n    id = 'sentry-feedback',\n    autoInject = true,\n    showBranding = true,\n    isEmailRequired = false,\n    isNameRequired = false,\n    showEmail = true,\n    showName = true,\n    enableScreenshot = true,\n    useSentryUser = {\n      email: 'email',\n      name: 'username',\n    },\n    _experiments = {},\n    tags,\n    styleNonce,\n    scriptNonce,\n\n    // FeedbackThemeConfiguration\n    colorScheme = 'system',\n    themeLight = {},\n    themeDark = {},\n\n    // FeedbackTextConfiguration\n    addScreenshotButtonLabel = ADD_SCREENSHOT_LABEL,\n    cancelButtonLabel = CANCEL_BUTTON_LABEL,\n    confirmButtonLabel = CONFIRM_BUTTON_LABEL,\n    emailLabel = EMAIL_LABEL,\n    emailPlaceholder = EMAIL_PLACEHOLDER,\n    formTitle = FORM_TITLE,\n    isRequiredLabel = IS_REQUIRED_LABEL,\n    messageLabel = MESSAGE_LABEL,\n    messagePlaceholder = MESSAGE_PLACEHOLDER,\n    nameLabel = NAME_LABEL,\n    namePlaceholder = NAME_PLACEHOLDER,\n    removeScreenshotButtonLabel = REMOVE_SCREENSHOT_LABEL,\n    submitButtonLabel = SUBMIT_BUTTON_LABEL,\n    successMessageText = SUCCESS_MESSAGE_TEXT,\n    triggerLabel = TRIGGER_LABEL,\n    triggerAriaLabel = '',\n\n    // FeedbackCallbacks\n    onFormOpen,\n    onFormClose,\n    onSubmitSuccess,\n    onSubmitError,\n    onFormSubmitted,\n  }: OptionalFeedbackConfiguration = {}) => {\n    const _options = {\n      id,\n      autoInject,\n      showBranding,\n      isEmailRequired,\n      isNameRequired,\n      showEmail,\n      showName,\n      enableScreenshot,\n      useSentryUser,\n      tags,\n      styleNonce,\n      scriptNonce,\n\n      colorScheme,\n      themeDark,\n      themeLight,\n\n      triggerLabel,\n      triggerAriaLabel,\n      cancelButtonLabel,\n      submitButtonLabel,\n      confirmButtonLabel,\n      formTitle,\n      emailLabel,\n      emailPlaceholder,\n      messageLabel,\n      messagePlaceholder,\n      nameLabel,\n      namePlaceholder,\n      successMessageText,\n      isRequiredLabel,\n      addScreenshotButtonLabel,\n      removeScreenshotButtonLabel,\n\n      onFormClose,\n      onFormOpen,\n      onSubmitError,\n      onSubmitSuccess,\n      onFormSubmitted,\n\n      _experiments,\n    };\n\n    let _shadow: ShadowRoot | null = null;\n    let _subscriptions: Unsubscribe[] = [];\n\n    /**\n     * Get the shadow root where we will append css\n     */\n    const _createShadow = (options: FeedbackInternalOptions): ShadowRoot => {\n      if (!_shadow) {\n        const host = DOCUMENT.createElement('div');\n        host.id = String(options.id);\n        DOCUMENT.body.appendChild(host);\n\n        _shadow = host.attachShadow({ mode: 'open' });\n        _shadow.appendChild(createMainStyles(options));\n      }\n      return _shadow as ShadowRoot;\n    };\n\n    const _loadAndRenderDialog = async (\n      options: FeedbackInternalOptions,\n    ): Promise<ReturnType<FeedbackModalIntegration['createDialog']>> => {\n      const screenshotRequired = options.enableScreenshot && isScreenshotSupported();\n\n      let modalIntegration: FeedbackModalIntegration;\n      let screenshotIntegration: FeedbackScreenshotIntegration | undefined;\n\n      try {\n        const modalIntegrationFn = getModalIntegration\n          ? getModalIntegration()\n          : await lazyLoadIntegration('feedbackModalIntegration', scriptNonce);\n        modalIntegration = modalIntegrationFn() as FeedbackModalIntegration;\n        addIntegration(modalIntegration);\n      } catch {\n        DEBUG_BUILD &&\n          logger.error(\n            '[Feedback] Error when trying to load feedback integrations. Try using `feedbackSyncIntegration` in your `Sentry.init`.',\n          );\n        throw new Error('[Feedback] Missing feedback modal integration!');\n      }\n\n      try {\n        const screenshotIntegrationFn = screenshotRequired\n          ? getScreenshotIntegration\n            ? getScreenshotIntegration()\n            : await lazyLoadIntegration('feedbackScreenshotIntegration', scriptNonce)\n          : undefined;\n\n        if (screenshotIntegrationFn) {\n          screenshotIntegration = screenshotIntegrationFn() as FeedbackScreenshotIntegration;\n          addIntegration(screenshotIntegration);\n        }\n      } catch {\n        DEBUG_BUILD &&\n          logger.error('[Feedback] Missing feedback screenshot integration. Proceeding without screenshots.');\n      }\n\n      const dialog = modalIntegration.createDialog({\n        options: {\n          ...options,\n          onFormClose: () => {\n            dialog?.close();\n            options.onFormClose?.();\n          },\n          onFormSubmitted: () => {\n            dialog?.close();\n            options.onFormSubmitted?.();\n          },\n        },\n        screenshotIntegration,\n        sendFeedback,\n        shadow: _createShadow(options),\n      });\n\n      return dialog;\n    };\n\n    const _attachTo = (el: Element | string, optionOverrides: OverrideFeedbackConfiguration = {}): Unsubscribe => {\n      const mergedOptions = mergeOptions(_options, optionOverrides);\n\n      const targetEl =\n        typeof el === 'string' ? DOCUMENT.querySelector(el) : typeof el.addEventListener === 'function' ? el : null;\n\n      if (!targetEl) {\n        DEBUG_BUILD && logger.error('[Feedback] Unable to attach to target element');\n        throw new Error('Unable to attach to target element');\n      }\n\n      let dialog: ReturnType<FeedbackModalIntegration['createDialog']> | null = null;\n      const handleClick = async (): Promise<void> => {\n        if (!dialog) {\n          dialog = await _loadAndRenderDialog({\n            ...mergedOptions,\n            onFormSubmitted: () => {\n              dialog?.removeFromDom();\n              mergedOptions.onFormSubmitted?.();\n            },\n          });\n        }\n        dialog.appendToDom();\n        dialog.open();\n      };\n      targetEl.addEventListener('click', handleClick);\n      const unsubscribe = (): void => {\n        _subscriptions = _subscriptions.filter(sub => sub !== unsubscribe);\n        dialog?.removeFromDom();\n        dialog = null;\n        targetEl.removeEventListener('click', handleClick);\n      };\n      _subscriptions.push(unsubscribe);\n      return unsubscribe;\n    };\n\n    const _createActor = (optionOverrides: OverrideFeedbackConfiguration = {}): ActorComponent => {\n      const mergedOptions = mergeOptions(_options, optionOverrides);\n      const shadow = _createShadow(mergedOptions);\n      const actor = Actor({\n        triggerLabel: mergedOptions.triggerLabel,\n        triggerAriaLabel: mergedOptions.triggerAriaLabel,\n        shadow,\n        styleNonce,\n      });\n      _attachTo(actor.el, {\n        ...mergedOptions,\n        onFormOpen() {\n          actor.hide();\n        },\n        onFormClose() {\n          actor.show();\n        },\n        onFormSubmitted() {\n          actor.show();\n        },\n      });\n      return actor;\n    };\n\n    return {\n      name: 'Feedback',\n      setupOnce() {\n        if (!isBrowser() || !_options.autoInject) {\n          return;\n        }\n\n        if (DOCUMENT.readyState === 'loading') {\n          DOCUMENT.addEventListener('DOMContentLoaded', () => _createActor().appendToDom());\n        } else {\n          _createActor().appendToDom();\n        }\n      },\n\n      /**\n       * Adds click listener to the element to open a feedback dialog\n       *\n       * The returned function can be used to remove the click listener\n       */\n      attachTo: _attachTo,\n\n      /**\n       * Creates a new widget which is composed of a Button which triggers a Dialog.\n       * Accepts partial options to override any options passed to constructor.\n       */\n      createWidget(optionOverrides: OverrideFeedbackConfiguration = {}): ActorComponent {\n        const actor = _createActor(mergeOptions(_options, optionOverrides));\n        actor.appendToDom();\n        return actor;\n      },\n\n      /**\n       * Creates a new Form which you can\n       * Accepts partial options to override any options passed to constructor.\n       */\n      async createForm(\n        optionOverrides: OverrideFeedbackConfiguration = {},\n      ): Promise<ReturnType<FeedbackModalIntegration['createDialog']>> {\n        return _loadAndRenderDialog(mergeOptions(_options, optionOverrides));\n      },\n\n      /**\n       * Removes the Feedback integration (including host, shadow DOM, and all widgets)\n       */\n      remove(): void {\n        if (_shadow) {\n          _shadow.parentElement?.remove();\n          _shadow = null;\n        }\n        // Remove any lingering subscriptions\n        _subscriptions.forEach(sub => sub());\n        _subscriptions = [];\n      },\n    };\n  }) satisfies IntegrationFn;\n\n  return feedbackIntegration;\n};\n","import { NAVIGATOR } from '../constants';\n\n/**\n * Mobile browsers do not support `mediaDevices.getDisplayMedia` even though they have the api implemented\n * Instead they return things like `NotAllowedError` when called.\n *\n * It's simpler for us to browser sniff first, and avoid loading the integration if we can.\n *\n * https://stackoverflow.com/a/58879212\n * https://stackoverflow.com/a/3540295\n *\n * `mediaDevices.getDisplayMedia` is also only supported in secure contexts, and return a `mediaDevices is not supported` error, so we should also avoid loading the integration if we can.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia\n */\nexport function isScreenshotSupported(): boolean {\n  if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(NAVIGATOR.userAgent)) {\n    return false;\n  }\n  /**\n   * User agent on iPads show as Macintosh, so we need extra checks\n   *\n   * https://forums.developer.apple.com/forums/thread/119186\n   * https://stackoverflow.com/questions/60482650/how-to-detect-ipad-useragent-on-safari-browser\n   */\n  if (/Macintosh/i.test(NAVIGATOR.userAgent) && NAVIGATOR.maxTouchPoints && NAVIGATOR.maxTouchPoints > 1) {\n    return false;\n  }\n  if (!isSecureContext) {\n    return false;\n  }\n  return true;\n}\n","import { DOCUMENT, TRIGGER_LABEL } from '../../constants';\nimport { createActorStyles } from './Actor.css';\nimport { FeedbackIcon } from './FeedbackIcon';\n\nexport interface ActorProps {\n  triggerLabel: string;\n  triggerAriaLabel: string;\n  shadow: ShadowRoot;\n  styleNonce?: string;\n}\n\nexport interface ActorComponent {\n  el: HTMLElement;\n\n  appendToDom: () => void;\n\n  removeFromDom: () => void;\n\n  show: () => void;\n\n  hide: () => void;\n}\n\n/**\n * The sentry-provided button to open the feedback modal\n */\nexport function Actor({ triggerLabel, triggerAriaLabel, shadow, styleNonce }: ActorProps): ActorComponent {\n  const el = DOCUMENT.createElement('button');\n  el.type = 'button';\n  el.className = 'widget__actor';\n  el.ariaHidden = 'false';\n  el.ariaLabel = triggerAriaLabel || triggerLabel || TRIGGER_LABEL;\n  el.appendChild(FeedbackIcon());\n  if (triggerLabel) {\n    const label = DOCUMENT.createElement('span');\n    label.appendChild(DOCUMENT.createTextNode(triggerLabel));\n    el.appendChild(label);\n  }\n\n  const style = createActorStyles(styleNonce);\n\n  return {\n    el,\n    appendToDom(): void {\n      shadow.appendChild(style);\n      shadow.appendChild(el);\n    },\n    removeFromDom(): void {\n      shadow.removeChild(el);\n      shadow.removeChild(style);\n    },\n    show(): void {\n      el.ariaHidden = 'false';\n    },\n    hide(): void {\n      el.ariaHidden = 'true';\n    },\n  };\n}\n","import { WINDOW } from '../../constants';\nimport { setAttributesNS } from '../../util/setAttributesNS';\n\nconst SIZE = 20;\nconst XMLNS = 'http://www.w3.org/2000/svg';\n\n/**\n * Feedback Icon\n */\nexport function FeedbackIcon(): SVGElement {\n  const createElementNS = <K extends keyof SVGElementTagNameMap>(tagName: K): SVGElementTagNameMap[K] =>\n    WINDOW.document.createElementNS(XMLNS, tagName);\n  const svg = setAttributesNS(createElementNS('svg'), {\n    width: `${SIZE}`,\n    height: `${SIZE}`,\n    viewBox: `0 0 ${SIZE} ${SIZE}`,\n    fill: 'var(--actor-color, var(--foreground))',\n  });\n\n  const g = setAttributesNS(createElementNS('g'), {\n    clipPath: 'url(#clip0_57_80)',\n  });\n\n  const path = setAttributesNS(createElementNS('path'), {\n    ['fill-rule']: 'evenodd',\n    ['clip-rule']: 'evenodd',\n    d: 'M15.6622 15H12.3997C12.2129 14.9959 12.031 14.9396 11.8747 14.8375L8.04965 12.2H7.49956V19.1C7.4875 19.3348 7.3888 19.5568 7.22256 19.723C7.05632 19.8892 6.83435 19.9879 6.59956 20H2.04956C1.80193 19.9968 1.56535 19.8969 1.39023 19.7218C1.21511 19.5467 1.1153 19.3101 1.11206 19.0625V12.2H0.949652C0.824431 12.2017 0.700142 12.1783 0.584123 12.1311C0.468104 12.084 0.362708 12.014 0.274155 11.9255C0.185602 11.8369 0.115689 11.7315 0.0685419 11.6155C0.0213952 11.4995 -0.00202913 11.3752 -0.00034808 11.25V3.75C-0.00900498 3.62067 0.0092504 3.49095 0.0532651 3.36904C0.0972798 3.24712 0.166097 3.13566 0.255372 3.04168C0.344646 2.94771 0.452437 2.87327 0.571937 2.82307C0.691437 2.77286 0.82005 2.74798 0.949652 2.75H8.04965L11.8747 0.1625C12.031 0.0603649 12.2129 0.00407221 12.3997 0H15.6622C15.9098 0.00323746 16.1464 0.103049 16.3215 0.278167C16.4966 0.453286 16.5964 0.689866 16.5997 0.9375V3.25269C17.3969 3.42959 18.1345 3.83026 18.7211 4.41679C19.5322 5.22788 19.9878 6.32796 19.9878 7.47502C19.9878 8.62209 19.5322 9.72217 18.7211 10.5333C18.1345 11.1198 17.3969 11.5205 16.5997 11.6974V14.0125C16.6047 14.1393 16.5842 14.2659 16.5395 14.3847C16.4948 14.5035 16.4268 14.6121 16.3394 14.7042C16.252 14.7962 16.147 14.8698 16.0307 14.9206C15.9144 14.9714 15.7891 14.9984 15.6622 15ZM1.89695 10.325H1.88715V4.625H8.33715C8.52423 4.62301 8.70666 4.56654 8.86215 4.4625L12.6872 1.875H14.7247V13.125H12.6872L8.86215 10.4875C8.70666 10.3835 8.52423 10.327 8.33715 10.325H2.20217C2.15205 10.3167 2.10102 10.3125 2.04956 10.3125C1.9981 10.3125 1.94708 10.3167 1.89695 10.325ZM2.98706 12.2V18.1625H5.66206V12.2H2.98706ZM16.5997 9.93612V5.01393C16.6536 5.02355 16.7072 5.03495 16.7605 5.04814C17.1202 5.13709 17.4556 5.30487 17.7425 5.53934C18.0293 5.77381 18.2605 6.06912 18.4192 6.40389C18.578 6.73866 18.6603 7.10452 18.6603 7.47502C18.6603 7.84552 18.578 8.21139 18.4192 8.54616C18.2605 8.88093 18.0293 9.17624 17.7425 9.41071C17.4556 9.64518 17.1202 9.81296 16.7605 9.90191C16.7072 9.91509 16.6536 9.9265 16.5997 9.93612Z',\n  });\n  svg.appendChild(g).appendChild(path);\n\n  const speakerDefs = createElementNS('defs');\n  const speakerClipPathDef = setAttributesNS(createElementNS('clipPath'), {\n    id: 'clip0_57_80',\n  });\n\n  const speakerRect = setAttributesNS(createElementNS('rect'), {\n    width: `${SIZE}`,\n    height: `${SIZE}`,\n    fill: 'white',\n  });\n\n  speakerClipPathDef.appendChild(speakerRect);\n  speakerDefs.appendChild(speakerClipPathDef);\n\n  svg.appendChild(speakerDefs).appendChild(speakerClipPathDef).appendChild(speakerRect);\n\n  return svg;\n}\n","import { DOCUMENT } from '../../constants';\n\n/**\n * Creates <style> element for widget actor (button that opens the dialog)\n */\nexport function createActorStyles(styleNonce?: string): HTMLStyleElement {\n  const style = DOCUMENT.createElement('style');\n  style.textContent = `\n.widget__actor {\n  position: fixed;\n  z-index: var(--z-index);\n  margin: var(--page-margin);\n  inset: var(--actor-inset);\n\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 16px;\n\n  font-family: inherit;\n  font-size: var(--font-size);\n  font-weight: 600;\n  line-height: 1.14em;\n  text-decoration: none;\n\n  background: var(--actor-background, var(--background));\n  border-radius: var(--actor-border-radius, 1.7em/50%);\n  border: var(--actor-border, var(--border));\n  box-shadow: var(--actor-box-shadow, var(--box-shadow));\n  color: var(--actor-color, var(--foreground));\n  fill: var(--actor-color, var(--foreground));\n  cursor: pointer;\n  opacity: 1;\n  transition: transform 0.2s ease-in-out;\n  transform: translate(0, 0) scale(1);\n}\n.widget__actor[aria-hidden=\"true\"] {\n  opacity: 0;\n  pointer-events: none;\n  visibility: hidden;\n  transform: translate(0, 16px) scale(0.98);\n}\n\n.widget__actor:hover {\n  background: var(--actor-hover-background, var(--background));\n  filter: var(--interactive-filter);\n}\n\n.widget__actor svg {\n  width: 1.14em;\n  height: 1.14em;\n}\n\n@media (max-width: 600px) {\n  .widget__actor span {\n    display: none;\n  }\n}\n`;\n\n  if (styleNonce) {\n    style.setAttribute('nonce', styleNonce);\n  }\n\n  return style;\n}\n","import { getClient, getCurrentScope, getGlobalScope, getIsolationScope } from '@sentry/core';\nimport type { FeedbackFormData, FeedbackModalIntegration, IntegrationFn, User } from '@sentry/core';\nimport { h, render } from 'preact';\nimport * as hooks from 'preact/hooks';\nimport { DOCUMENT } from '../constants';\nimport { Dialog } from './components/Dialog';\nimport { createDialogStyles } from './components/Dialog.css';\n\nfunction getUser(): User | undefined {\n  const currentUser = getCurrentScope().getUser();\n  const isolationUser = getIsolationScope().getUser();\n  const globalUser = getGlobalScope().getUser();\n  if (currentUser && Object.keys(currentUser).length) {\n    return currentUser;\n  }\n  if (isolationUser && Object.keys(isolationUser).length) {\n    return isolationUser;\n  }\n  return globalUser;\n}\n\nexport const feedbackModalIntegration = ((): FeedbackModalIntegration => {\n  return {\n    name: 'FeedbackModal',\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    setupOnce() {},\n    createDialog: ({ options, screenshotIntegration, sendFeedback, shadow }) => {\n      const shadowRoot = shadow as unknown as ShadowRoot;\n      const userKey = options.useSentryUser;\n      const user = getUser();\n\n      const el = DOCUMENT.createElement('div');\n      const style = createDialogStyles(options.styleNonce);\n\n      let originalOverflow = '';\n      const dialog: ReturnType<FeedbackModalIntegration['createDialog']> = {\n        get el() {\n          return el;\n        },\n        appendToDom(): void {\n          if (!shadowRoot.contains(style) && !shadowRoot.contains(el)) {\n            shadowRoot.appendChild(style);\n            shadowRoot.appendChild(el);\n          }\n        },\n        removeFromDom(): void {\n          shadowRoot.removeChild(el);\n          shadowRoot.removeChild(style);\n          DOCUMENT.body.style.overflow = originalOverflow;\n        },\n        open() {\n          renderContent(true);\n          options.onFormOpen?.();\n          getClient()?.emit('openFeedbackWidget');\n          originalOverflow = DOCUMENT.body.style.overflow;\n          DOCUMENT.body.style.overflow = 'hidden';\n        },\n        close() {\n          renderContent(false);\n          DOCUMENT.body.style.overflow = originalOverflow;\n        },\n      };\n\n      const screenshotInput = screenshotIntegration?.createInput({ h, hooks, dialog, options });\n\n      const renderContent = (open: boolean): void => {\n        render(\n          <Dialog\n            options={options}\n            screenshotInput={screenshotInput}\n            showName={options.showName || options.isNameRequired}\n            showEmail={options.showEmail || options.isEmailRequired}\n            defaultName={(userKey && user && user[userKey.name]) || ''}\n            defaultEmail={(userKey && user && user[userKey.email]) || ''}\n            onFormClose={() => {\n              renderContent(false);\n              options.onFormClose?.();\n            }}\n            onSubmit={sendFeedback}\n            onSubmitSuccess={(data: FeedbackFormData) => {\n              renderContent(false);\n              options.onSubmitSuccess?.(data);\n            }}\n            onSubmitError={(error: Error) => {\n              options.onSubmitError?.(error);\n            }}\n            onFormSubmitted={() => {\n              options.onFormSubmitted?.();\n            }}\n            open={open}\n          />,\n          el,\n        );\n      };\n\n      return dialog;\n    },\n  };\n}) satisfies IntegrationFn;\n","import { DOCUMENT } from '../../constants';\n\nconst DIALOG = `\n.dialog {\n  position: fixed;\n  z-index: var(--z-index);\n  margin: 0;\n  inset: 0;\n\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 0;\n  height: 100vh;\n  width: 100vw;\n\n  color: var(--dialog-color, var(--foreground));\n  fill: var(--dialog-color, var(--foreground));\n  line-height: 1.75em;\n\n  background-color: rgba(0, 0, 0, 0.05);\n  border: none;\n  inset: 0;\n  opacity: 1;\n  transition: opacity 0.2s ease-in-out;\n}\n\n.dialog__position {\n  position: fixed;\n  z-index: var(--z-index);\n  inset: var(--dialog-inset);\n  padding: var(--page-margin);\n  display: flex;\n  max-height: calc(100vh - (2 * var(--page-margin)));\n}\n@media (max-width: 600px) {\n  .dialog__position {\n    inset: var(--page-margin);\n    padding: 0;\n  }\n}\n\n.dialog__position:has(.editor) {\n  inset: var(--page-margin);\n  padding: 0;\n}\n\n.dialog:not([open]) {\n  opacity: 0;\n  pointer-events: none;\n  visibility: hidden;\n}\n.dialog:not([open]) .dialog__content {\n  transform: translate(0, -16px) scale(0.98);\n}\n\n.dialog__content {\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n  padding: var(--dialog-padding, 24px);\n  max-width: 100%;\n  width: 100%;\n  max-height: 100%;\n  overflow: auto;\n\n  background: var(--dialog-background, var(--background));\n  border-radius: var(--dialog-border-radius, 20px);\n  border: var(--dialog-border, var(--border));\n  box-shadow: var(--dialog-box-shadow, var(--box-shadow));\n  transform: translate(0, 0) scale(1);\n  transition: transform 0.2s ease-in-out;\n}\n\n`;\n\nconst DIALOG_HEADER = `\n.dialog__header {\n  display: flex;\n  gap: 4px;\n  justify-content: space-between;\n  font-weight: var(--dialog-header-weight, 600);\n  margin: 0;\n}\n.dialog__title {\n  align-self: center;\n  width: var(--form-width, 272px);\n}\n\n@media (max-width: 600px) {\n  .dialog__title {\n    width: auto;\n  }\n}\n\n.dialog__position:has(.editor) .dialog__title {\n  width: auto;\n}\n\n\n.brand-link {\n  display: inline-flex;\n}\n.brand-link:focus-visible {\n  outline: var(--outline);\n}\n`;\n\nconst FORM = `\n.form {\n  display: flex;\n  overflow: auto;\n  flex-direction: row;\n  gap: 16px;\n  flex: 1 0;\n}\n\n.form fieldset {\n  border: none;\n  margin: 0;\n  padding: 0;\n}\n\n.form__right {\n  flex: 0 0 auto;\n  display: flex;\n  overflow: auto;\n  flex-direction: column;\n  justify-content: space-between;\n  gap: 20px;\n  width: var(--form-width, 100%);\n}\n\n.dialog__position:has(.editor) .form__right {\n  width: var(--form-width, 272px);\n}\n\n.form__top {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n\n.form__error-container {\n  color: var(--error-color);\n  fill: var(--error-color);\n}\n\n.form__label {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n  margin: 0px;\n}\n\n.form__label__text {\n  display: flex;\n  gap: 4px;\n  align-items: center;\n}\n\n.form__label__text--required {\n  font-size: 0.85em;\n}\n\n.form__input {\n  font-family: inherit;\n  line-height: inherit;\n  background: transparent;\n  box-sizing: border-box;\n  border: var(--input-border, var(--border));\n  border-radius: var(--input-border-radius, 6px);\n  color: var(--input-color, inherit);\n  fill: var(--input-color, inherit);\n  font-size: var(--input-font-size, inherit);\n  font-weight: var(--input-font-weight, 500);\n  padding: 6px 12px;\n}\n\n.form__input::placeholder {\n  opacity: 0.65;\n  color: var(--input-placeholder-color, inherit);\n  filter: var(--interactive-filter);\n}\n\n.form__input:focus-visible {\n  outline: var(--input-focus-outline, var(--outline));\n}\n\n.form__input--textarea {\n  font-family: inherit;\n  resize: vertical;\n}\n\n.error {\n  color: var(--error-color);\n  fill: var(--error-color);\n}\n`;\n\nconst BUTTON = `\n.btn-group {\n  display: grid;\n  gap: 8px;\n}\n\n.btn {\n  line-height: inherit;\n  border: var(--button-border, var(--border));\n  border-radius: var(--button-border-radius, 6px);\n  cursor: pointer;\n  font-family: inherit;\n  font-size: var(--button-font-size, inherit);\n  font-weight: var(--button-font-weight, 600);\n  padding: var(--button-padding, 6px 16px);\n}\n.btn[disabled] {\n  opacity: 0.6;\n  pointer-events: none;\n}\n\n.btn--primary {\n  color: var(--button-primary-color, var(--accent-foreground));\n  fill: var(--button-primary-color, var(--accent-foreground));\n  background: var(--button-primary-background, var(--accent-background));\n  border: var(--button-primary-border, var(--border));\n  border-radius: var(--button-primary-border-radius, 6px);\n  font-weight: var(--button-primary-font-weight, 500);\n}\n.btn--primary:hover {\n  color: var(--button-primary-hover-color, var(--accent-foreground));\n  fill: var(--button-primary-hover-color, var(--accent-foreground));\n  background: var(--button-primary-hover-background, var(--accent-background));\n  filter: var(--interactive-filter);\n}\n.btn--primary:focus-visible {\n  background: var(--button-primary-hover-background, var(--accent-background));\n  filter: var(--interactive-filter);\n  outline: var(--button-primary-focus-outline, var(--outline));\n}\n\n.btn--default {\n  color: var(--button-color, var(--foreground));\n  fill: var(--button-color, var(--foreground));\n  background: var(--button-background, var(--background));\n  border: var(--button-border, var(--border));\n  border-radius: var(--button-border-radius, 6px);\n  font-weight: var(--button-font-weight, 500);\n}\n.btn--default:hover {\n  color: var(--button-color, var(--foreground));\n  fill: var(--button-color, var(--foreground));\n  background: var(--button-hover-background, var(--background));\n  filter: var(--interactive-filter);\n}\n.btn--default:focus-visible {\n  background: var(--button-hover-background, var(--background));\n  filter: var(--interactive-filter);\n  outline: var(--button-focus-outline, var(--outline));\n}\n`;\n\nconst SUCCESS = `\n.success__position {\n  position: fixed;\n  inset: var(--dialog-inset);\n  padding: var(--page-margin);\n  z-index: var(--z-index);\n}\n.success__content {\n  background: var(--success-background, var(--background));\n  border: var(--success-border, var(--border));\n  border-radius: var(--success-border-radius, 1.7em/50%);\n  box-shadow: var(--success-box-shadow, var(--box-shadow));\n  font-weight: var(--success-font-weight, 600);\n  color: var(--success-color);\n  fill: var(--success-color);\n  padding: 12px 24px;\n  line-height: 1.75em;\n\n  display: grid;\n  align-items: center;\n  grid-auto-flow: column;\n  gap: 6px;\n  cursor: default;\n}\n\n.success__icon {\n  display: flex;\n}\n`;\n\n/**\n * Creates <style> element for widget dialog\n */\nexport function createDialogStyles(styleNonce?: string): HTMLStyleElement {\n  const style = DOCUMENT.createElement('style');\n\n  style.textContent = `\n:host {\n  --dialog-inset: var(--inset);\n}\n\n${DIALOG}\n${DIALOG_HEADER}\n${FORM}\n${BUTTON}\n${SUCCESS}\n`;\n\n  if (styleNonce) {\n    style.setAttribute('nonce', styleNonce);\n  }\n\n  return style;\n}\n","import type { FeedbackScreenshotIntegration, IntegrationFn } from '@sentry/core';\nimport type { Attachment } from '@sentry/core';\nimport type { h as hType } from 'preact';\nimport type * as Hooks from 'preact/hooks';\nimport { DOCUMENT } from '../constants';\nimport { ScreenshotEditorFactory } from './components/ScreenshotEditor';\n\nexport const feedbackScreenshotIntegration = ((): FeedbackScreenshotIntegration => {\n  return {\n    name: 'FeedbackScreenshot',\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    setupOnce() {},\n    createInput: ({ h, hooks, dialog, options }) => {\n      const imageBuffer = DOCUMENT.createElement('canvas');\n\n      return {\n        input: ScreenshotEditorFactory({\n          h: h as typeof hType,\n          hooks: hooks as typeof Hooks,\n          imageBuffer,\n          dialog,\n          options,\n        }) as any, // eslint-disable-line @typescript-eslint/no-explicit-any\n\n        value: async () => {\n          const blob = await new Promise<Parameters<BlobCallback>[0]>(resolve => {\n            imageBuffer.toBlob(resolve, 'image/png');\n          });\n          if (blob) {\n            const data = new Uint8Array(await blob.arrayBuffer());\n            const attachment: Attachment = {\n              data,\n              filename: 'screenshot.png',\n              contentType: 'application/png',\n              // attachmentType?: string;\n            };\n            return attachment;\n          }\n          return undefined;\n        },\n      };\n    },\n  };\n}) satisfies IntegrationFn;\n","import { getClient } from '@sentry/core';\nimport type { buildFeedbackIntegration } from './integration';\n\ntype FeedbackIntegration = ReturnType<typeof buildFeedbackIntegration>;\n\n/**\n * This is a small utility to get a type-safe instance of the Feedback integration.\n */\nexport function getFeedback(): ReturnType<FeedbackIntegration> | undefined {\n  const client = getClient();\n  return client?.getIntegrationByName<ReturnType<FeedbackIntegration>>('Feedback');\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport type { ArgsWrapper, Thunk } from './types';\n\nexport const DEFAULT_THUNK = () => [];\n\nexport function normalizeThunk(thunk?: Thunk): ArgsWrapper {\n  if (!thunk) {\n    return { named: {}, positional: [] };\n  }\n\n  let args = thunk();\n\n  if (Array.isArray(args)) {\n    return { named: {}, positional: args };\n  }\n\n  if (!args) {\n    return { named: {}, positional: [] };\n  }\n\n  /**\n   * Hopefully people aren't using args named \"named\"\n   */\n  if ('positional' in args || 'named' in args) {\n    return args;\n  }\n\n  return { named: args as Record<string, unknown>, positional: [] };\n}\n","// @ts-ignore\nimport { getValue } from '@glimmer/tracking/primitives/cache';\nimport { setOwner } from '@ember/application';\nimport { assert } from '@ember/debug';\n// @ts-ignore\nimport { invokeHelper } from '@ember/helper';\nimport { dependencySatisfies, importSync, macroCondition } from '@embroider/macros';\n\nimport { DEFAULT_THUNK, normalizeThunk } from '../utils';\n\nimport type { AsThunk, Cache, Constructor, Named, Positional, Thunk } from '[core-types]';\nimport type Owner from '@ember/owner';\nimport type { HelperLike } from '@glint/template';\n// this lint thinks this type import is used by decorator metadata...\n// babel doesn't use decorator metadata\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport type { Invoke } from '@glint/template/-private/integration';\n\nconst TYPE = 'class-based';\n\nif (macroCondition(dependencySatisfies('ember-resources', '>= 7.0.0'))) {\n  // These types don't matter to consumers\n  const { registerUsable } = importSync('ember-resources') as any;\n\n  (registerUsable as any)(TYPE, (context: any, config: any) => {\n    let { definition, thunk } = config;\n\n    return invokeHelper(context, definition, () => normalizeThunk(thunk));\n  });\n}\n\n/**\n * @private utility type\n *\n * Returns the Thunk-cased args for a given Class/InstanceType of Resource\n */\nexport type ArgsFrom<Klass extends Resource<any>> = Klass extends Resource<infer Args>\n  ? Args\n  : never;\n\n/**\n * https://gist.github.com/dfreeman/e4728f2f48737b44efb99fa45e2d22ef#typing-the-return-value-implicitly\n *\n * This is a Glint helper to help HelperLike determine what the ReturnType is.\n */\ntype ResourceHelperLike<T, R> = InstanceType<\n  HelperLike<{\n    Args: {\n      Named: Named<T>;\n      Positional: Positional<T>;\n    };\n    Return: R;\n  }>\n>;\n\ndeclare const __ResourceArgs__: unique symbol;\n\n/**\n * The 'Resource' base class has only one lifecycle hook, `modify`, which is called during\n * instantiation of the resource as well as on every update of any of any consumed args.\n *\n * Typically, a `Resource` will be used to build higher-level APIs that you'd then use in your apps.\n * For example, maybe you want to build a reactive-wrapper around a non-reactive wrapper, XState\n * which requires that the \"State machine interpreter\"\n * is stopped when you are discarding the parent context (such as a component).\n *\n * _When would you reach for the class-based `Resource` instead of the function-based `resource`?_\n *\n *  - the capabilities of the function-based resource and class-based resource are almost identical.\n *    the main difference is that function-based resources may represent a single a value\n *    (which could, itself, be a class instance, or object with properties),\n *    class-based-resources expose the whole class instance to the consumer.\n *\n *  - function-based resources, however, are much easier to work with and understand, and have\n *    better intellisense capabilities.\n *\n *\n * An example\n * ```js\n * import { Resource } from 'ember-modify-based-class-resource';\n * import { createMachine, interpret } from 'xstate';\n *\n * const machine = createMachine(); // ... see XState docs for this function this ...\n *\n * class MyResource extends Resource {\n *   @tracked customState;\n *\n *   constructor(owner) {\n *     super(owner);\n *\n *     registerDestructor(this, () => this.interpreter.stop());\n *   }\n *\n *   modify(positional, named) {\n *     if (!this.interpreter) {\n *       // Initial Setup\n *       this.interpreter = interpret(machine).onTransition(state => this.customState = state);\n *     } else {\n *       // Subsequent Updates\n *       this.interpreter.send('SOME_EVENT', { positional, named });\n *     }\n *   }\n * }\n * ```\n *\n * Once defined, there are two ways to use `MyResource`\n *  - in a template\n *  - in JavaScript\n *\n * In the template, the Resource can be imported (or re-exported from the helpers directory)\n *\n * When imported (using [RFC 779](https://github.com/emberjs/rfcs/pull/779)),\n * ```jsx gjs\n * import { MyResource } from './somewhere';\n *\n * <template>\n *   {{#let (MyResource) as |myResource|}}\n *     {{log myResource.customState}}\n *   {{/let}}\n * </template>\n *\n * ```\n *\n * When using in javascript, you'll need the `from` utility\n * ```ts\n * import { MyResource } from './somewhere';\n *\n * class ContainingClass {\n *   state = MyResource.from(this, () => [...])\n * }\n * ```\n * However, when authoring a Resource, it's useful to co-locate an export of a helper function:\n * ```js\n * export function myResource(destroyable, options) {\n *   return MyResource.from(destroyable, () => ({\n *     foo: () => options.foo,\n *     bar: () => options.bar,\n *   }))\n * }\n * ```\n *\n * This way, consumers only need one import.\n *\n * If your resource may be used with other resources in the same file,\n * class-based resources also work with use, which gives the benefit of\n * omitting the `this` parameter to `from`.\n *\n * ```js\n * import { use } from 'ember-resources';\n * import { MyResource } from './somewhere';\n * import { SomeRequest } from './somewhere-else';\n * import { WebSocket } from './connection';\n *\n * class ContainingClass {\n *   @use state = MyResource.from(() => [...])\n *   @use request = SomeRequest.from(() => [...])\n *   @use socket = WebSocket.from(() => [...])\n * }\n * ```\n *\n */\nexport class Resource<Args = unknown> {\n  /**\n   * @private (secret)\n   *\n   * Because classes are kind of like interfaces,\n   * we need \"something\" to help TS know what a Resource is.\n   *\n   * This isn't a real API, but does help with type inference\n   * with the ArgsFrom utility above\n   */\n  public declare [__ResourceArgs__]: Args;\n\n  /**\n   * @private (secret)\n   *\n   * This is a lie, but a useful one for Glint, because\n   * Glint's \"HelperLike\" matches on this \"Invoke\" property.\n   *\n   * Faking the interface of `HelperLike` is the only way we can get Glint to treat\n   *  class-based resources as helpers in templates.\n   *\n   * If subclassing was not needed, we could just \"merge the interface\" with Resource\n   * and HelperLike, but merged interfaces are not retained in subclasses.\n   *\n   * Without this, the static method, from, would have a type error.\n   */\n  declare [Invoke]: ResourceHelperLike<Args, this>[typeof Invoke];\n\n  /**\n   * For use in the body of a class.\n   *\n   * `from` is what allows resources to be used in JS, they hide the reactivity APIs\n   * from the consumer so that the surface API is smaller.\n   *\n   * ```js\n   * import { use } from 'ember-resources';\n   * import { Resource } from 'ember-modify-based-class-resource';\n   *\n   * class SomeResource extends Resource {}\n   *\n   * class MyClass {\n   *   @use data = SomeResource.from(() => [ ... ]);\n   * }\n   * ```\n   */\n  static from<SomeResource extends Resource<any>>(\n    this: Constructor<SomeResource>,\n    thunk: AsThunk<ArgsFrom<SomeResource>>,\n  ): SomeResource;\n\n  /**\n   * For use in the body of a class.\n   *\n   * `from` is what allows resources to be used in JS, they hide the reactivity APIs\n   * from the consumer so that the surface API is smaller.\n   * Though it _may_ be more convenient to not wrap your resource abstraction in a helper function.\n   *\n   * ```js\n   * import { Resource } from 'ember-modify-based-class-resource';\n   *\n   * class SomeResource extends Resource {}\n   *\n   * class MyClass {\n   *   data = SomeResource.from(this, () => [ ... ]);\n   * }\n   * ```\n   *\n   * However, if you have argument defaults or need to change the shape of arguments\n   * depending on what ergonomics you want your users to have, a wrapper function\n   * may be better.\n   *\n   * ```js\n   * export function someResource(context, { foo, bar }) {\n   *   return SomeResource.from(context, () =>  ... );\n   * }\n   * ```\n   *  usage:\n   * ```js\n   * import { someResource } from 'your-library';\n   *\n   * class SomeResource extends Resource {}\n   *\n   * class MyClass {\n   *   @tracked foo;\n   *   @tracked bar;\n   *\n   *   data = someResource(this, {\n   *     foo: () => this.foo,\n   *     bar: () => this.bar\n   *   });\n   * }\n   * ```\n   */\n  static from<SomeResource extends Resource<any>>(\n    this: Constructor<SomeResource>,\n    context: unknown,\n    thunk: AsThunk<ArgsFrom<SomeResource>>,\n  ): SomeResource;\n\n  static from<SomeResource extends Resource<any>>(\n    this: Constructor<SomeResource>,\n    contextOrThunk: unknown | AsThunk<ArgsFrom<SomeResource>>,\n    thunkOrUndefined?: undefined | AsThunk<ArgsFrom<SomeResource>>,\n  ): SomeResource {\n    /**\n     * This first branch is for\n     *\n     * ```js\n     * class Foo {\n     *   @use foo = SomeResource.from(() => [ ... ])\n     * }\n     * ```\n     *\n     * and in order to support this, we need to defer the passed\n     * thunk until when the decorator is accessed.\n     *\n     * The decorator mostly does what `resourceOf` is doing below, but\n     * a little more simply, because we don't have to deal with a Proxy.\n     *\n     */\n    if (typeof contextOrThunk === 'function') {\n      /**\n       * We have to lie here because TypeScript doesn't allow decorators\n       * to alter the type of a property.\n       *\n       * This is private API that the `@use` decorator understands,\n       * but is not supported for use by any other conusmer.\n       */\n      return {\n        thunk: contextOrThunk,\n        definition: this,\n        type: TYPE,\n        __INTERNAL__: true,\n      } as unknown as SomeResource;\n    }\n\n    /**\n     * This usage is for decorator-less usage\n     *\n     * ```js\n     * class Foo {\n     *   foo = SomeResource.from(this, () => [ ... ])\n     * }\n     * ```\n     *\n     * The only tradeoff is that a `this` needs to be passed.\n     *\n     */\n    return resourceOf(contextOrThunk, this, thunkOrUndefined);\n  }\n\n  // owner must be | unknown as to not\n  // break existing code\n  constructor(owner: Owner | unknown) {\n    setOwner(this, owner as Owner);\n  }\n\n  /**\n   * this lifecycle hook is called whenever arguments to the resource change.\n   * This can be useful for calling functions, comparing previous values, etc.\n   *\n   * the two arguments, `positional`, and `named` will always be present, and\n   * can be assigned to properties on the class to use derived-from-args patterns.\n   * For example,\n   * ```js\n   * export class MyResource extends Resource {\n   *   modify(positional, named) {\n   *     this.positional = positional;\n   *     this.named = named;\n   *   }\n   *\n   *   get foo() {\n   *     return this.named.foo;\n   *   }\n   * }\n   * ```\n   * both the `positional` and `named` properties don't need to be tracked, because the\n   * objects they are set to are tracked internally -- and between `modify` calls,\n   * they are actually the same object. So in this example, after the first time `modify`\n   * is called, any subsequent calls to `modify` will be no-ops.\n   *\n   * This strategy is good for fine-grained reactivity in your resource because it allows\n   * your args to be individually consumed as needed. In the above example, accessing `foo`\n   * will entangle with the named arg, foo, so when that named arg changes, updates to your UI\n   * accessing MyResource's foo getter will also update, accordingly.\n   *\n   */\n  modify?(positional: Positional<Args>, named: Named<Args>): void;\n}\n\nfunction resourceOf<SomeResource extends Resource<unknown>>(\n  context: unknown,\n  klass: Constructor<SomeResource>,\n  thunk?: Thunk,\n): SomeResource {\n  assert(\n    `Expected second argument, klass, to be a Resource. ` +\n      `Instead, received some ${typeof klass}, ${klass.name}`,\n    klass.prototype instanceof Resource,\n  );\n\n  let cache: Cache<SomeResource>;\n\n  /*\n   * Having an object that we use invokeHelper + getValue on\n   * is how we convert the \"native class\" in to a reactive utility\n   * (along with the following proxy for accessing anything on this 'value')\n   *\n   */\n  let target = {\n    get value(): SomeResource {\n      if (!cache) {\n        cache = invokeHelper(context, klass, () => normalizeThunk(thunk || DEFAULT_THUNK));\n      }\n\n      return getValue<SomeResource>(cache);\n    },\n  };\n\n  /**\n   * This proxy takes everything called on or accessed on \"target\"\n   * and forwards it along to target.value (where the actual resource instance is)\n   *\n   * It's important to only access .value within these proxy-handler methods so that\n   * consumers \"reactively entangle with\" the Resource.\n   */\n  return new Proxy(target, {\n    get(target, key): unknown {\n      const instance = target.value as unknown as object;\n      const value = Reflect.get(instance, key, instance);\n\n      return typeof value === 'function' ? value.bind(instance) : value;\n    },\n\n    ownKeys(target): (string | symbol)[] {\n      const instance = target.value as unknown as object;\n\n      return Reflect.ownKeys(instance);\n    },\n\n    getOwnPropertyDescriptor(target, key): PropertyDescriptor | undefined {\n      const instance = target.value as unknown as object;\n\n      return Reflect.getOwnPropertyDescriptor(instance, key);\n    },\n  }) as never as SomeResource;\n}\n","export default function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}","// @ts-ignore\nimport { createCache, getValue } from '@glimmer/tracking/primitives/cache';\nimport { associateDestroyableChild } from '@ember/destroyable';\n// @ts-ignore\nimport { capabilities as helperCapabilities, setHelperManager } from '@ember/helper';\n\nimport { Resource } from './resource';\n\nimport type { ArgsWrapper } from '[core-types]';\nimport type Owner from '@ember/owner';\n\nclass ResourceManager {\n  capabilities = helperCapabilities('3.23', {\n    hasValue: true,\n    hasDestroyable: true,\n  });\n\n  constructor(protected owner: Owner) {}\n\n  createHelper(Class: typeof Resource, args: ArgsWrapper) {\n    let owner = this.owner;\n\n    let instance: Resource<ArgsWrapper>;\n\n    let cache: Cache = createCache(() => {\n      if (instance === undefined) {\n        instance = new Class(owner);\n\n        associateDestroyableChild(cache, instance);\n      }\n\n      if (instance.modify) {\n        instance.modify(args.positional, args.named);\n      }\n\n      return instance;\n    });\n\n    return cache;\n  }\n\n  getValue(cache: Cache) {\n    let instance = getValue(cache);\n\n    return instance;\n  }\n\n  getDestroyable(cache: Cache) {\n    return cache;\n  }\n}\n\nsetHelperManager((owner: Owner) => new ResourceManager(owner), Resource);\n","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n  key = toPropertyKey(key);\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n  var key = toPrimitive(arg, \"string\");\n  return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n  if (_typeof(input) !== \"object\" || input === null) return input;\n  var prim = input[Symbol.toPrimitive];\n  if (prim !== undefined) {\n    var res = prim.call(input, hint || \"default\");\n    if (_typeof(res) !== \"object\") return res;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (hint === \"string\" ? String : Number)(input);\n}","import { tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { isDestroyed, isDestroying } from '@ember/destroyable';\nimport { action } from '@ember/object';\nimport * as emberService from '@ember/service';\n\nconst service = emberService.service ?? emberService.inject;\n\nimport { waitFor, waitForPromise } from '@ember/test-waiters';\n\nimport { Resource } from 'ember-modify-based-class-resource';\n\nimport type Store from '@ember-data/store';\n\nexport type FindRecordOptions = Parameters<Store['findRecord']>[2];\n\nexport class Request<Args> extends Resource<Args> {\n  @service declare store: Store;\n\n  @tracked error: Error | undefined;\n  @tracked isLoading = false;\n  @tracked hasRan = false;\n\n  /**\n   * Args saved, untracked, for retrying\n   */\n  declare positional: unknown[];\n  declare named: object;\n\n  modify(positional?: unknown[], named?: object) {\n    this.positional = positional || [];\n    this.named = named || {};\n\n    /**\n     * We need to consume all arguments here so that we correctly respond to updates to\n     * dirtied source data.\n     *\n     * e.g.: when an id changes that is passed to findRecord, we re-fetch.\n     */\n    this.__REQUEST_FUNCTION__([...(positional as unknown[])], {\n      ...named,\n    });\n  }\n\n  async __WRAPPED_FUNCTION__(_positional: unknown[], _named: object) {\n    throw new Error('Not Implemented');\n  }\n\n  get isSuccess() {\n    return !this.error;\n  }\n\n  get isError() {\n    return Boolean(this.error);\n  }\n\n  get records(): unknown | undefined {\n    return assert(\n      `The resource for ${this.constructor.name} does not have a records property. ` +\n        `You might be looking for .record instead.`,\n    );\n  }\n\n  get record(): unknown | undefined {\n    return assert(\n      `The resource for ${this.constructor.name} does not have a record property. ` +\n        `You might be looking for .records instead.`,\n    );\n  }\n\n  @action\n  async retry() {\n    return waitForPromise(this.__WRAPPED_FUNCTION__(this.positional, this.named));\n  }\n\n  @action\n  @waitFor\n  async __REQUEST_FUNCTION__(_positional: unknown[], _named: object) {\n    /**\n     * Args are already consumed, but let's delay doing anything\n     * until we can get out of a tracking frame.\n     */\n    await Promise.resolve();\n\n    if (isDestroyed(this) || isDestroying(this)) return;\n\n    this.error = undefined;\n    this.isLoading = true;\n\n    try {\n      await this.retry();\n    } catch (e) {\n      if (isDestroyed(this) || isDestroying(this)) return;\n\n      if (e instanceof Error) {\n        this.error = e;\n      } else {\n        // How likely is this to happen?\n        throw e;\n      }\n    }\n\n    if (isDestroyed(this) || isDestroying(this)) {\n      return;\n    }\n\n    this.isLoading = false;\n    this.hasRan = true;\n  }\n}\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nmodule.exports = baseAssignValue;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nmodule.exports = baseUnary;\n","var ListCache = require('./_ListCache'),\n    stackClear = require('./_stackClear'),\n    stackDelete = require('./_stackDelete'),\n    stackGet = require('./_stackGet'),\n    stackHas = require('./_stackHas'),\n    stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var mapCacheClear = require('./_mapCacheClear'),\n    mapCacheDelete = require('./_mapCacheDelete'),\n    mapCacheGet = require('./_mapCacheGet'),\n    mapCacheHas = require('./_mapCacheHas'),\n    mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\nmodule.exports = setToArray;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nmodule.exports = arrayPush;\n","var arrayFilter = require('./_arrayFilter'),\n    stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nmodule.exports = getSymbols;\n","var isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nmodule.exports = arrayMap;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","'use strict';\n\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\nconst DEFAULT_MAX_EXTGLOB_RECURSION = 0;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\nconst SEP = '/';\n\nconst POSIX_CHARS = {\n  DOT_LITERAL,\n  PLUS_LITERAL,\n  QMARK_LITERAL,\n  SLASH_LITERAL,\n  ONE_CHAR,\n  QMARK,\n  END_ANCHOR,\n  DOTS_SLASH,\n  NO_DOT,\n  NO_DOTS,\n  NO_DOT_SLASH,\n  NO_DOTS_SLASH,\n  QMARK_NO_DOT,\n  STAR,\n  START_ANCHOR,\n  SEP\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n  ...POSIX_CHARS,\n\n  SLASH_LITERAL: `[${WIN_SLASH}]`,\n  QMARK: WIN_NO_SLASH,\n  STAR: `${WIN_NO_SLASH}*?`,\n  DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n  NO_DOT: `(?!${DOT_LITERAL})`,\n  NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n  NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n  START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n  END_ANCHOR: `(?:[${WIN_SLASH}]|$)`,\n  SEP: '\\\\'\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n  __proto__: null,\n  alnum: 'a-zA-Z0-9',\n  alpha: 'a-zA-Z',\n  ascii: '\\\\x00-\\\\x7F',\n  blank: ' \\\\t',\n  cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n  digit: '0-9',\n  graph: '\\\\x21-\\\\x7E',\n  lower: 'a-z',\n  print: '\\\\x20-\\\\x7E ',\n  punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n  space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n  upper: 'A-Z',\n  word: 'A-Za-z0-9_',\n  xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n  DEFAULT_MAX_EXTGLOB_RECURSION,\n  MAX_LENGTH: 1024 * 64,\n  POSIX_REGEX_SOURCE,\n\n  // regular expressions\n  REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n  REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n  REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n  REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n  REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n  REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n  // Replace globs with equivalent patterns to reduce parsing time.\n  REPLACEMENTS: {\n    __proto__: null,\n    '***': '*',\n    '**/**': '**',\n    '**/**/**': '**'\n  },\n\n  // Digits\n  CHAR_0: 48, /* 0 */\n  CHAR_9: 57, /* 9 */\n\n  // Alphabet chars.\n  CHAR_UPPERCASE_A: 65, /* A */\n  CHAR_LOWERCASE_A: 97, /* a */\n  CHAR_UPPERCASE_Z: 90, /* Z */\n  CHAR_LOWERCASE_Z: 122, /* z */\n\n  CHAR_LEFT_PARENTHESES: 40, /* ( */\n  CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n  CHAR_ASTERISK: 42, /* * */\n\n  // Non-alphabetic chars.\n  CHAR_AMPERSAND: 38, /* & */\n  CHAR_AT: 64, /* @ */\n  CHAR_BACKWARD_SLASH: 92, /* \\ */\n  CHAR_CARRIAGE_RETURN: 13, /* \\r */\n  CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n  CHAR_COLON: 58, /* : */\n  CHAR_COMMA: 44, /* , */\n  CHAR_DOT: 46, /* . */\n  CHAR_DOUBLE_QUOTE: 34, /* \" */\n  CHAR_EQUAL: 61, /* = */\n  CHAR_EXCLAMATION_MARK: 33, /* ! */\n  CHAR_FORM_FEED: 12, /* \\f */\n  CHAR_FORWARD_SLASH: 47, /* / */\n  CHAR_GRAVE_ACCENT: 96, /* ` */\n  CHAR_HASH: 35, /* # */\n  CHAR_HYPHEN_MINUS: 45, /* - */\n  CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n  CHAR_LEFT_CURLY_BRACE: 123, /* { */\n  CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n  CHAR_LINE_FEED: 10, /* \\n */\n  CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n  CHAR_PERCENT: 37, /* % */\n  CHAR_PLUS: 43, /* + */\n  CHAR_QUESTION_MARK: 63, /* ? */\n  CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n  CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n  CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n  CHAR_SEMICOLON: 59, /* ; */\n  CHAR_SINGLE_QUOTE: 39, /* ' */\n  CHAR_SPACE: 32, /*   */\n  CHAR_TAB: 9, /* \\t */\n  CHAR_UNDERSCORE: 95, /* _ */\n  CHAR_VERTICAL_LINE: 124, /* | */\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n  /**\n   * Create EXTGLOB_CHARS\n   */\n\n  extglobChars(chars) {\n    return {\n      '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n      '?': { type: 'qmark', open: '(?:', close: ')?' },\n      '+': { type: 'plus', open: '(?:', close: ')+' },\n      '*': { type: 'star', open: '(?:', close: ')*' },\n      '@': { type: 'at', open: '(?:', close: ')' }\n    };\n  },\n\n  /**\n   * Create GLOB_CHARS\n   */\n\n  globChars(win32) {\n    return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n  }\n};\n","'use strict'\n\nlet Container = require('./container')\n\nclass AtRule extends Container {\n  constructor(defaults) {\n    super(defaults)\n    this.type = 'atrule'\n  }\n\n  append(...children) {\n    if (!this.proxyOf.nodes) this.nodes = []\n    return super.append(...children)\n  }\n\n  prepend(...children) {\n    if (!this.proxyOf.nodes) this.nodes = []\n    return super.prepend(...children)\n  }\n}\n\nmodule.exports = AtRule\nAtRule.default = AtRule\n\nContainer.registerAtRule(AtRule)\n","'use strict'\n\nlet pico = require('picocolors')\n\nlet terminalHighlight = require('./terminal-highlight')\n\nclass CssSyntaxError extends Error {\n  constructor(message, line, column, source, file, plugin) {\n    super(message)\n    this.name = 'CssSyntaxError'\n    this.reason = message\n\n    if (file) {\n      this.file = file\n    }\n    if (source) {\n      this.source = source\n    }\n    if (plugin) {\n      this.plugin = plugin\n    }\n    if (typeof line !== 'undefined' && typeof column !== 'undefined') {\n      if (typeof line === 'number') {\n        this.line = line\n        this.column = column\n      } else {\n        this.line = line.line\n        this.column = line.column\n        this.endLine = column.line\n        this.endColumn = column.column\n      }\n    }\n\n    this.setMessage()\n\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, CssSyntaxError)\n    }\n  }\n\n  setMessage() {\n    this.message = this.plugin ? this.plugin + ': ' : ''\n    this.message += this.file ? this.file : '<css input>'\n    if (typeof this.line !== 'undefined') {\n      this.message += ':' + this.line + ':' + this.column\n    }\n    this.message += ': ' + this.reason\n  }\n\n  showSourceCode(color) {\n    if (!this.source) return ''\n\n    let css = this.source\n    if (color == null) color = pico.isColorSupported\n\n    let aside = text => text\n    let mark = text => text\n    let highlight = text => text\n    if (color) {\n      let { bold, gray, red } = pico.createColors(true)\n      mark = text => bold(red(text))\n      aside = text => gray(text)\n      if (terminalHighlight) {\n        highlight = text => terminalHighlight(text)\n      }\n    }\n\n    let lines = css.split(/\\r?\\n/)\n    let start = Math.max(this.line - 3, 0)\n    let end = Math.min(this.line + 2, lines.length)\n    let maxWidth = String(end).length\n\n    return lines\n      .slice(start, end)\n      .map((line, index) => {\n        let number = start + 1 + index\n        let gutter = ' ' + (' ' + number).slice(-maxWidth) + ' | '\n        if (number === this.line) {\n          if (line.length > 160) {\n            let padding = 20\n            let subLineStart = Math.max(0, this.column - padding)\n            let subLineEnd = Math.max(\n              this.column + padding,\n              this.endColumn + padding\n            )\n            let subLine = line.slice(subLineStart, subLineEnd)\n\n            let spacing =\n              aside(gutter.replace(/\\d/g, ' ')) +\n              line\n                .slice(0, Math.min(this.column - 1, padding - 1))\n                .replace(/[^\\t]/g, ' ')\n\n            return (\n              mark('>') +\n              aside(gutter) +\n              highlight(subLine) +\n              '\\n ' +\n              spacing +\n              mark('^')\n            )\n          }\n\n          let spacing =\n            aside(gutter.replace(/\\d/g, ' ')) +\n            line.slice(0, this.column - 1).replace(/[^\\t]/g, ' ')\n\n          return (\n            mark('>') +\n            aside(gutter) +\n            highlight(line) +\n            '\\n ' +\n            spacing +\n            mark('^')\n          )\n        }\n\n        return ' ' + aside(gutter) + highlight(line)\n      })\n      .join('\\n')\n  }\n\n  toString() {\n    let code = this.showSourceCode()\n    if (code) {\n      code = '\\n\\n' + code + '\\n'\n    }\n    return this.name + ': ' + this.message + code\n  }\n}\n\nmodule.exports = CssSyntaxError\nCssSyntaxError.default = CssSyntaxError\n","'use strict'\n\nmodule.exports.isClean = Symbol('isClean')\n\nmodule.exports.my = Symbol('my')\n","'use strict'\n\nlet Container = require('./container')\n\nlet LazyResult, Processor\n\nclass Document extends Container {\n  constructor(defaults) {\n    // type needs to be passed to super, otherwise child roots won't be normalized correctly\n    super({ type: 'document', ...defaults })\n\n    if (!this.nodes) {\n      this.nodes = []\n    }\n  }\n\n  toResult(opts = {}) {\n    let lazy = new LazyResult(new Processor(), this, opts)\n\n    return lazy.stringify()\n  }\n}\n\nDocument.registerLazyResult = dependant => {\n  LazyResult = dependant\n}\n\nDocument.registerProcessor = dependant => {\n  Processor = dependant\n}\n\nmodule.exports = Document\nDocument.default = Document\n","'use strict'\n\nlet Container = require('./container')\nlet list = require('./list')\n\nclass Rule extends Container {\n  get selectors() {\n    return list.comma(this.selector)\n  }\n\n  set selectors(values) {\n    let match = this.selector ? this.selector.match(/,\\s*/) : null\n    let sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen')\n    this.selector = values.join(sep)\n  }\n\n  constructor(defaults) {\n    super(defaults)\n    this.type = 'rule'\n    if (!this.nodes) this.nodes = []\n  }\n}\n\nmodule.exports = Rule\nRule.default = Rule\n\nContainer.registerRule(Rule)\n","'use strict'\n\nlet Container = require('./container')\nlet Input = require('./input')\nlet Parser = require('./parser')\n\nfunction parse(css, opts) {\n  let input = new Input(css, opts)\n  let parser = new Parser(input)\n  try {\n    parser.parse()\n  } catch (e) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (e.name === 'CssSyntaxError' && opts && opts.from) {\n        if (/\\.scss$/i.test(opts.from)) {\n          e.message +=\n            '\\nYou tried to parse SCSS with ' +\n            'the standard CSS parser; ' +\n            'try again with the postcss-scss parser'\n        } else if (/\\.sass/i.test(opts.from)) {\n          e.message +=\n            '\\nYou tried to parse Sass with ' +\n            'the standard CSS parser; ' +\n            'try again with the postcss-sass parser'\n        } else if (/\\.less$/i.test(opts.from)) {\n          e.message +=\n            '\\nYou tried to parse Less with ' +\n            'the standard CSS parser; ' +\n            'try again with the postcss-less parser'\n        }\n      }\n    }\n    throw e\n  }\n\n  return parser.root\n}\n\nmodule.exports = parse\nparse.default = parse\n\nContainer.registerParse(parse)\n","'use strict'\n\nlet Warning = require('./warning')\n\nclass Result {\n  get content() {\n    return this.css\n  }\n\n  constructor(processor, root, opts) {\n    this.processor = processor\n    this.messages = []\n    this.root = root\n    this.opts = opts\n    this.css = ''\n    this.map = undefined\n  }\n\n  toString() {\n    return this.css\n  }\n\n  warn(text, opts = {}) {\n    if (!opts.plugin) {\n      if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n        opts.plugin = this.lastPlugin.postcssPlugin\n      }\n    }\n\n    let warning = new Warning(text, opts)\n    this.messages.push(warning)\n\n    return warning\n  }\n\n  warnings() {\n    return this.messages.filter(i => i.type === 'warning')\n  }\n}\n\nmodule.exports = Result\nResult.default = Result\n","'use strict'\n\n// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n  if (!options) {\n    return emptyOpts\n  }\n\n  if (typeof options !== 'object') {\n    return looseOption\n  }\n\n  return options\n}\nmodule.exports = parseOptions\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n  const versionA = new SemVer(a, loose)\n  const versionB = new SemVer(b, loose)\n  return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","'use strict'\n\nconst compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","'use strict'\n\nconst compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","'use strict'\n\nconst compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n  version = new SemVer(version, options)\n  range = new Range(range, options)\n\n  let gtfn, ltefn, ltfn, comp, ecomp\n  switch (hilo) {\n    case '>':\n      gtfn = gt\n      ltefn = lte\n      ltfn = lt\n      comp = '>'\n      ecomp = '>='\n      break\n    case '<':\n      gtfn = lt\n      ltefn = gte\n      ltfn = gt\n      comp = '<'\n      ecomp = '<='\n      break\n    default:\n      throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n  }\n\n  // If it satisfies the range it is not outside\n  if (satisfies(version, range, options)) {\n    return false\n  }\n\n  // From now on, variable terms are as if we're in \"gtr\" mode.\n  // but note that everything is flipped for the \"ltr\" function.\n\n  for (let i = 0; i < range.set.length; ++i) {\n    const comparators = range.set[i]\n\n    let high = null\n    let low = null\n\n    comparators.forEach((comparator) => {\n      if (comparator.semver === ANY) {\n        comparator = new Comparator('>=0.0.0')\n      }\n      high = high || comparator\n      low = low || comparator\n      if (gtfn(comparator.semver, high.semver, options)) {\n        high = comparator\n      } else if (ltfn(comparator.semver, low.semver, options)) {\n        low = comparator\n      }\n    })\n\n    // If the edge version comparator has a operator then our version\n    // isn't outside it\n    if (high.operator === comp || high.operator === ecomp) {\n      return false\n    }\n\n    // If the lowest version comparator has an operator and our version\n    // is less than it then it isn't higher than the range\n    if ((!low.operator || low.operator === comp) &&\n        ltefn(version, low.semver)) {\n      return false\n    } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n      return false\n    }\n  }\n  return true\n}\n\nmodule.exports = outside\n","export var base = {\n  8: \"Backspace\",\n  9: \"Tab\",\n  10: \"Enter\",\n  12: \"NumLock\",\n  13: \"Enter\",\n  16: \"Shift\",\n  17: \"Control\",\n  18: \"Alt\",\n  20: \"CapsLock\",\n  27: \"Escape\",\n  32: \" \",\n  33: \"PageUp\",\n  34: \"PageDown\",\n  35: \"End\",\n  36: \"Home\",\n  37: \"ArrowLeft\",\n  38: \"ArrowUp\",\n  39: \"ArrowRight\",\n  40: \"ArrowDown\",\n  44: \"PrintScreen\",\n  45: \"Insert\",\n  46: \"Delete\",\n  59: \";\",\n  61: \"=\",\n  91: \"Meta\",\n  92: \"Meta\",\n  106: \"*\",\n  107: \"+\",\n  108: \",\",\n  109: \"-\",\n  110: \".\",\n  111: \"/\",\n  144: \"NumLock\",\n  145: \"ScrollLock\",\n  160: \"Shift\",\n  161: \"Shift\",\n  162: \"Control\",\n  163: \"Control\",\n  164: \"Alt\",\n  165: \"Alt\",\n  173: \"-\",\n  186: \";\",\n  187: \"=\",\n  188: \",\",\n  189: \"-\",\n  190: \".\",\n  191: \"/\",\n  192: \"`\",\n  219: \"[\",\n  220: \"\\\\\",\n  221: \"]\",\n  222: \"'\"\n}\n\nexport var shift = {\n  48: \")\",\n  49: \"!\",\n  50: \"@\",\n  51: \"#\",\n  52: \"$\",\n  53: \"%\",\n  54: \"^\",\n  55: \"&\",\n  56: \"*\",\n  57: \"(\",\n  59: \":\",\n  61: \"+\",\n  173: \"_\",\n  186: \":\",\n  187: \"+\",\n  188: \"<\",\n  189: \"_\",\n  190: \">\",\n  191: \"?\",\n  192: \"~\",\n  219: \"{\",\n  220: \"|\",\n  221: \"}\",\n  222: \"\\\"\"\n}\n\nvar mac = typeof navigator != \"undefined\" && /Mac/.test(navigator.platform)\nvar ie = typeof navigator != \"undefined\" && /MSIE \\d|Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent)\n\n// Fill in the digit keys\nfor (var i = 0; i < 10; i++) base[48 + i] = base[96 + i] = String(i)\n\n// The function keys\nfor (var i = 1; i <= 24; i++) base[i + 111] = \"F\" + i\n\n// And the alphabetic keys\nfor (var i = 65; i <= 90; i++) {\n  base[i] = String.fromCharCode(i + 32)\n  shift[i] = String.fromCharCode(i)\n}\n\n// For each code that doesn't have a shift-equivalent, copy the base name\nfor (var code in base) if (!shift.hasOwnProperty(code)) shift[code] = base[code]\n\nexport function keyName(event) {\n  // On macOS, keys held with Shift and Cmd don't reflect the effect of Shift in `.key`.\n  // On IE, shift effect is never included in `.key`.\n  var ignoreKey = mac && event.metaKey && event.shiftKey && !event.ctrlKey && !event.altKey ||\n      ie && event.shiftKey && event.key && event.key.length == 1 ||\n      event.key == \"Unidentified\"\n  var name = (!ignoreKey && event.key) ||\n    (event.shiftKey ? shift : base)[event.keyCode] ||\n    event.key || \"Unidentified\"\n  // Edge sometimes produces wrong names (Issue #3)\n  if (name == \"Esc\") name = \"Escape\"\n  if (name == \"Del\") name = \"Delete\"\n  // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8860571/\n  if (name == \"Left\") name = \"ArrowLeft\"\n  if (name == \"Up\") name = \"ArrowUp\"\n  if (name == \"Right\") name = \"ArrowRight\"\n  if (name == \"Down\") name = \"ArrowDown\"\n  return name\n}\n","import { RangeSet, MapMode, RangeValue, findClusterBreak, EditorSelection, Facet, StateEffect, ChangeSet, Text, findColumn, CharCategory, EditorState, Annotation, Transaction, Prec, codePointAt, codePointSize, combineConfig, StateField, RangeSetBuilder, countColumn } from '@codemirror/state';\nimport { StyleModule } from 'style-mod';\nimport { keyName, base, shift } from 'w3c-keyname';\nimport elt from 'crelt';\n\nlet nav = typeof navigator != \"undefined\" ? navigator : { userAgent: \"\", vendor: \"\", platform: \"\" };\nlet doc = typeof document != \"undefined\" ? document : { documentElement: { style: {} } };\nconst ie_edge = /*@__PURE__*//Edge\\/(\\d+)/.exec(nav.userAgent);\nconst ie_upto10 = /*@__PURE__*//MSIE \\d/.test(nav.userAgent);\nconst ie_11up = /*@__PURE__*//Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(nav.userAgent);\nconst ie = !!(ie_upto10 || ie_11up || ie_edge);\nconst gecko = !ie && /*@__PURE__*//gecko\\/(\\d+)/i.test(nav.userAgent);\nconst chrome = !ie && /*@__PURE__*//Chrome\\/(\\d+)/.exec(nav.userAgent);\nconst webkit = \"webkitFontSmoothing\" in doc.documentElement.style;\nconst safari = !ie && /*@__PURE__*//Apple Computer/.test(nav.vendor);\nconst ios = safari && (/*@__PURE__*//Mobile\\/\\w+/.test(nav.userAgent) || nav.maxTouchPoints > 2);\nvar browser = {\n    mac: ios || /*@__PURE__*//Mac/.test(nav.platform),\n    windows: /*@__PURE__*//Win/.test(nav.platform),\n    linux: /*@__PURE__*//Linux|X11/.test(nav.platform),\n    ie,\n    ie_version: ie_upto10 ? doc.documentMode || 6 : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0,\n    gecko,\n    gecko_version: gecko ? +(/*@__PURE__*//Firefox\\/(\\d+)/.exec(nav.userAgent) || [0, 0])[1] : 0,\n    chrome: !!chrome,\n    chrome_version: chrome ? +chrome[1] : 0,\n    ios,\n    android: /*@__PURE__*//Android\\b/.test(nav.userAgent),\n    webkit,\n    webkit_version: webkit ? +(/*@__PURE__*//\\bAppleWebKit\\/(\\d+)/.exec(nav.userAgent) || [0, 0])[1] : 0,\n    safari,\n    safari_version: safari ? +(/*@__PURE__*//\\bVersion\\/(\\d+(\\.\\d+)?)/.exec(nav.userAgent) || [0, 0])[1] : 0,\n    tabSize: doc.documentElement.style.tabSize != null ? \"tab-size\" : \"-moz-tab-size\"\n};\n\nfunction combineAttrs(source, target) {\n    for (let name in source) {\n        if (name == \"class\" && target.class)\n            target.class += \" \" + source.class;\n        else if (name == \"style\" && target.style)\n            target.style += \";\" + source.style;\n        else\n            target[name] = source[name];\n    }\n    return target;\n}\nconst noAttrs = /*@__PURE__*/Object.create(null);\nfunction attrsEq(a, b, ignore) {\n    if (a == b)\n        return true;\n    if (!a)\n        a = noAttrs;\n    if (!b)\n        b = noAttrs;\n    let keysA = Object.keys(a), keysB = Object.keys(b);\n    if (keysA.length - (ignore && keysA.indexOf(ignore) > -1 ? 1 : 0) !=\n        keysB.length - (ignore && keysB.indexOf(ignore) > -1 ? 1 : 0))\n        return false;\n    for (let key of keysA) {\n        if (key != ignore && (keysB.indexOf(key) == -1 || a[key] !== b[key]))\n            return false;\n    }\n    return true;\n}\nfunction setAttrs(dom, attrs) {\n    for (let i = dom.attributes.length - 1; i >= 0; i--) {\n        let name = dom.attributes[i].name;\n        if (attrs[name] == null)\n            dom.removeAttribute(name);\n    }\n    for (let name in attrs) {\n        let value = attrs[name];\n        if (name == \"style\")\n            dom.style.cssText = value;\n        else if (dom.getAttribute(name) != value)\n            dom.setAttribute(name, value);\n    }\n}\nfunction updateAttrs(dom, prev, attrs) {\n    let changed = false;\n    if (prev)\n        for (let name in prev)\n            if (!(attrs && name in attrs)) {\n                changed = true;\n                if (name == \"style\")\n                    dom.style.cssText = \"\";\n                else\n                    dom.removeAttribute(name);\n            }\n    if (attrs)\n        for (let name in attrs)\n            if (!(prev && prev[name] == attrs[name])) {\n                changed = true;\n                if (name == \"style\")\n                    dom.style.cssText = attrs[name];\n                else\n                    dom.setAttribute(name, attrs[name]);\n            }\n    return changed;\n}\nfunction getAttrs(dom) {\n    let attrs = Object.create(null);\n    for (let i = 0; i < dom.attributes.length; i++) {\n        let attr = dom.attributes[i];\n        attrs[attr.name] = attr.value;\n    }\n    return attrs;\n}\n\n/**\nWidgets added to the content are described by subclasses of this\nclass. Using a description object like that makes it possible to\ndelay creating of the DOM structure for a widget until it is\nneeded, and to avoid redrawing widgets even if the decorations\nthat define them are recreated.\n*/\nclass WidgetType {\n    /**\n    Compare this instance to another instance of the same type.\n    (TypeScript can't express this, but only instances of the same\n    specific class will be passed to this method.) This is used to\n    avoid redrawing widgets when they are replaced by a new\n    decoration of the same type. The default implementation just\n    returns `false`, which will cause new instances of the widget to\n    always be redrawn.\n    */\n    eq(widget) { return false; }\n    /**\n    Update a DOM element created by a widget of the same type (but\n    different, non-`eq` content) to reflect this widget. May return\n    true to indicate that it could update, false to indicate it\n    couldn't (in which case the widget will be redrawn). The default\n    implementation just returns false.\n    */\n    updateDOM(dom, view, from) { return false; }\n    /**\n    @internal\n    */\n    compare(other) {\n        return this == other || this.constructor == other.constructor && this.eq(other);\n    }\n    /**\n    The estimated height this widget will have, to be used when\n    estimating the height of content that hasn't been drawn. May\n    return -1 to indicate you don't know. The default implementation\n    returns -1.\n    */\n    get estimatedHeight() { return -1; }\n    /**\n    For inline widgets that are displayed inline (as opposed to\n    `inline-block`) and introduce line breaks (through `<br>` tags\n    or textual newlines), this must indicate the amount of line\n    breaks they introduce. Defaults to 0.\n    */\n    get lineBreaks() { return 0; }\n    /**\n    Can be used to configure which kinds of events inside the widget\n    should be ignored by the editor. The default is to ignore all\n    events.\n    */\n    ignoreEvent(event) { return true; }\n    /**\n    Override the way screen coordinates for positions at/in the\n    widget are found. `pos` will be the offset into the widget, and\n    `side` the side of the position that is being queried—less than\n    zero for before, greater than zero for after, and zero for\n    directly at that position.\n    */\n    coordsAt(dom, pos, side) { return null; }\n    /**\n    @internal\n    */\n    get isHidden() { return false; }\n    /**\n    @internal\n    */\n    get editable() { return false; }\n    /**\n    This is called when the an instance of the widget is removed\n    from the editor view.\n    */\n    destroy(dom) { }\n}\n/**\nThe different types of blocks that can occur in an editor view.\n*/\nvar BlockType = /*@__PURE__*/(function (BlockType) {\n    /**\n    A line of text.\n    */\n    BlockType[BlockType[\"Text\"] = 0] = \"Text\";\n    /**\n    A block widget associated with the position after it.\n    */\n    BlockType[BlockType[\"WidgetBefore\"] = 1] = \"WidgetBefore\";\n    /**\n    A block widget associated with the position before it.\n    */\n    BlockType[BlockType[\"WidgetAfter\"] = 2] = \"WidgetAfter\";\n    /**\n    A block widget [replacing](https://codemirror.net/6/docs/ref/#view.Decoration^replace) a range of content.\n    */\n    BlockType[BlockType[\"WidgetRange\"] = 3] = \"WidgetRange\";\nreturn BlockType})(BlockType || (BlockType = {}));\n/**\nA decoration provides information on how to draw or style a piece\nof content. You'll usually use it wrapped in a\n[`Range`](https://codemirror.net/6/docs/ref/#state.Range), which adds a start and end position.\n@nonabstract\n*/\nclass Decoration extends RangeValue {\n    constructor(\n    /**\n    @internal\n    */\n    startSide, \n    /**\n    @internal\n    */\n    endSide, \n    /**\n    @internal\n    */\n    widget, \n    /**\n    The config object used to create this decoration. You can\n    include additional properties in there to store metadata about\n    your decoration.\n    */\n    spec) {\n        super();\n        this.startSide = startSide;\n        this.endSide = endSide;\n        this.widget = widget;\n        this.spec = spec;\n    }\n    /**\n    @internal\n    */\n    get heightRelevant() { return false; }\n    /**\n    Create a mark decoration, which influences the styling of the\n    content in its range. Nested mark decorations will cause nested\n    DOM elements to be created. Nesting order is determined by\n    precedence of the [facet](https://codemirror.net/6/docs/ref/#view.EditorView^decorations), with\n    the higher-precedence decorations creating the inner DOM nodes.\n    Such elements are split on line boundaries and on the boundaries\n    of lower-precedence decorations.\n    */\n    static mark(spec) {\n        return new MarkDecoration(spec);\n    }\n    /**\n    Create a widget decoration, which displays a DOM element at the\n    given position.\n    */\n    static widget(spec) {\n        let side = Math.max(-10000, Math.min(10000, spec.side || 0)), block = !!spec.block;\n        side += (block && !spec.inlineOrder)\n            ? (side > 0 ? 300000000 /* Side.BlockAfter */ : -400000000 /* Side.BlockBefore */)\n            : (side > 0 ? 100000000 /* Side.InlineAfter */ : -100000000 /* Side.InlineBefore */);\n        return new PointDecoration(spec, side, side, block, spec.widget || null, false);\n    }\n    /**\n    Create a replace decoration which replaces the given range with\n    a widget, or simply hides it.\n    */\n    static replace(spec) {\n        let block = !!spec.block, startSide, endSide;\n        if (spec.isBlockGap) {\n            startSide = -500000000 /* Side.GapStart */;\n            endSide = 400000000 /* Side.GapEnd */;\n        }\n        else {\n            let { start, end } = getInclusive(spec, block);\n            startSide = (start ? (block ? -300000000 /* Side.BlockIncStart */ : -1 /* Side.InlineIncStart */) : 500000000 /* Side.NonIncStart */) - 1;\n            endSide = (end ? (block ? 200000000 /* Side.BlockIncEnd */ : 1 /* Side.InlineIncEnd */) : -600000000 /* Side.NonIncEnd */) + 1;\n        }\n        return new PointDecoration(spec, startSide, endSide, block, spec.widget || null, true);\n    }\n    /**\n    Create a line decoration, which can add DOM attributes to the\n    line starting at the given position.\n    */\n    static line(spec) {\n        return new LineDecoration(spec);\n    }\n    /**\n    Build a [`DecorationSet`](https://codemirror.net/6/docs/ref/#view.DecorationSet) from the given\n    decorated range or ranges. If the ranges aren't already sorted,\n    pass `true` for `sort` to make the library sort them for you.\n    */\n    static set(of, sort = false) {\n        return RangeSet.of(of, sort);\n    }\n    /**\n    @internal\n    */\n    hasHeight() { return this.widget ? this.widget.estimatedHeight > -1 : false; }\n}\n/**\nThe empty set of decorations.\n*/\nDecoration.none = RangeSet.empty;\nclass MarkDecoration extends Decoration {\n    constructor(spec) {\n        let { start, end } = getInclusive(spec);\n        super(start ? -1 /* Side.InlineIncStart */ : 500000000 /* Side.NonIncStart */, end ? 1 /* Side.InlineIncEnd */ : -600000000 /* Side.NonIncEnd */, null, spec);\n        this.tagName = spec.tagName || \"span\";\n        this.attrs = spec.class && spec.attributes ? combineAttrs(spec.attributes, { class: spec.class })\n            : spec.class ? { class: spec.class } : spec.attributes || noAttrs;\n    }\n    eq(other) {\n        return this == other || other instanceof MarkDecoration && this.tagName == other.tagName && attrsEq(this.attrs, other.attrs);\n    }\n    range(from, to = from) {\n        if (from >= to)\n            throw new RangeError(\"Mark decorations may not be empty\");\n        return super.range(from, to);\n    }\n}\nMarkDecoration.prototype.point = false;\nclass LineDecoration extends Decoration {\n    constructor(spec) {\n        super(-200000000 /* Side.Line */, -200000000 /* Side.Line */, null, spec);\n    }\n    eq(other) {\n        return other instanceof LineDecoration &&\n            this.spec.class == other.spec.class &&\n            attrsEq(this.spec.attributes, other.spec.attributes);\n    }\n    range(from, to = from) {\n        if (to != from)\n            throw new RangeError(\"Line decoration ranges must be zero-length\");\n        return super.range(from, to);\n    }\n}\nLineDecoration.prototype.mapMode = MapMode.TrackBefore;\nLineDecoration.prototype.point = true;\nclass PointDecoration extends Decoration {\n    constructor(spec, startSide, endSide, block, widget, isReplace) {\n        super(startSide, endSide, widget, spec);\n        this.block = block;\n        this.isReplace = isReplace;\n        this.mapMode = !block ? MapMode.TrackDel : startSide <= 0 ? MapMode.TrackBefore : MapMode.TrackAfter;\n    }\n    // Only relevant when this.block == true\n    get type() {\n        return this.startSide != this.endSide ? BlockType.WidgetRange\n            : this.startSide <= 0 ? BlockType.WidgetBefore : BlockType.WidgetAfter;\n    }\n    get heightRelevant() {\n        return this.block || !!this.widget && (this.widget.estimatedHeight >= 5 || this.widget.lineBreaks > 0);\n    }\n    eq(other) {\n        return other instanceof PointDecoration &&\n            widgetsEq(this.widget, other.widget) &&\n            this.block == other.block &&\n            this.startSide == other.startSide && this.endSide == other.endSide;\n    }\n    range(from, to = from) {\n        if (this.isReplace && (from > to || (from == to && this.startSide > 0 && this.endSide <= 0)))\n            throw new RangeError(\"Invalid range for replacement decoration\");\n        if (!this.isReplace && to != from)\n            throw new RangeError(\"Widget decorations can only have zero-length ranges\");\n        return super.range(from, to);\n    }\n}\nPointDecoration.prototype.point = true;\nfunction getInclusive(spec, block = false) {\n    let { inclusiveStart: start, inclusiveEnd: end } = spec;\n    if (start == null)\n        start = spec.inclusive;\n    if (end == null)\n        end = spec.inclusive;\n    return { start: start !== null && start !== void 0 ? start : block, end: end !== null && end !== void 0 ? end : block };\n}\nfunction widgetsEq(a, b) {\n    return a == b || !!(a && b && a.compare(b));\n}\nfunction addRange(from, to, ranges, margin = 0) {\n    let last = ranges.length - 1;\n    if (last >= 0 && ranges[last] + margin >= from)\n        ranges[last] = Math.max(ranges[last], to);\n    else\n        ranges.push(from, to);\n}\n/**\nA block wrapper defines a DOM node that wraps lines or other block\nwrappers at the top of the document. It affects any line or block\nwidget that starts inside its range, including blocks starting\ndirectly at `from` but not including `to`.\n*/\nclass BlockWrapper extends RangeValue {\n    constructor(\n    /**\n    @internal\n    */\n    tagName, \n    /**\n    @internal\n    */\n    attributes, \n    /**\n    @internal\n    */\n    rank) {\n        super();\n        this.tagName = tagName;\n        this.attributes = attributes;\n        this.rank = rank;\n    }\n    eq(other) {\n        return other == this ||\n            other instanceof BlockWrapper && this.tagName == other.tagName && attrsEq(this.attributes, other.attributes);\n    }\n    /**\n    Create a block wrapper object with the given tag name and\n    attributes.\n    */\n    static create(spec) {\n        return new BlockWrapper(spec.tagName, spec.attributes || noAttrs, spec.rank == null ? 50 : Math.max(0, Math.min(spec.rank, 100)));\n    }\n    /**\n    Create a range set from the given block wrapper ranges.\n    */\n    static set(of, sort = false) {\n        return RangeSet.of(of, sort);\n    }\n}\nBlockWrapper.prototype.startSide = BlockWrapper.prototype.endSide = -1;\n\nfunction getSelection(root) {\n    let target;\n    // Browsers differ on whether shadow roots have a getSelection\n    // method. If it exists, use that, otherwise, call it on the\n    // document.\n    if (root.nodeType == 11) { // Shadow root\n        target = root.getSelection ? root : root.ownerDocument;\n    }\n    else {\n        target = root;\n    }\n    return target.getSelection();\n}\nfunction contains(dom, node) {\n    return node ? dom == node || dom.contains(node.nodeType != 1 ? node.parentNode : node) : false;\n}\nfunction hasSelection(dom, selection) {\n    if (!selection.anchorNode)\n        return false;\n    try {\n        // Firefox will raise 'permission denied' errors when accessing\n        // properties of `sel.anchorNode` when it's in a generated CSS\n        // element.\n        return contains(dom, selection.anchorNode);\n    }\n    catch (_) {\n        return false;\n    }\n}\nfunction clientRectsFor(dom) {\n    if (dom.nodeType == 3)\n        return textRange(dom, 0, dom.nodeValue.length).getClientRects();\n    else if (dom.nodeType == 1)\n        return dom.getClientRects();\n    else\n        return [];\n}\n// Scans forward and backward through DOM positions equivalent to the\n// given one to see if the two are in the same place (i.e. after a\n// text node vs at the end of that text node)\nfunction isEquivalentPosition(node, off, targetNode, targetOff) {\n    return targetNode ? (scanFor(node, off, targetNode, targetOff, -1) ||\n        scanFor(node, off, targetNode, targetOff, 1)) : false;\n}\nfunction domIndex(node) {\n    for (var index = 0;; index++) {\n        node = node.previousSibling;\n        if (!node)\n            return index;\n    }\n}\nfunction isBlockElement(node) {\n    return node.nodeType == 1 && /^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\\d|SECTION|PRE)$/.test(node.nodeName);\n}\nfunction scanFor(node, off, targetNode, targetOff, dir) {\n    for (;;) {\n        if (node == targetNode && off == targetOff)\n            return true;\n        if (off == (dir < 0 ? 0 : maxOffset(node))) {\n            if (node.nodeName == \"DIV\")\n                return false;\n            let parent = node.parentNode;\n            if (!parent || parent.nodeType != 1)\n                return false;\n            off = domIndex(node) + (dir < 0 ? 0 : 1);\n            node = parent;\n        }\n        else if (node.nodeType == 1) {\n            node = node.childNodes[off + (dir < 0 ? -1 : 0)];\n            if (node.nodeType == 1 && node.contentEditable == \"false\")\n                return false;\n            off = dir < 0 ? maxOffset(node) : 0;\n        }\n        else {\n            return false;\n        }\n    }\n}\nfunction maxOffset(node) {\n    return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\nfunction flattenRect(rect, toLeft) {\n    let { left, right } = rect;\n    if (left == right)\n        return rect;\n    let x = toLeft ? left : right;\n    return { left: x, right: x, top: rect.top, bottom: rect.bottom };\n}\nfunction windowRect(win) {\n    let vp = win.visualViewport;\n    if (vp)\n        return {\n            left: 0, right: vp.width,\n            top: 0, bottom: vp.height\n        };\n    return { left: 0, right: win.innerWidth,\n        top: 0, bottom: win.innerHeight };\n}\nfunction getScale(elt, rect) {\n    let scaleX = rect.width / elt.offsetWidth;\n    let scaleY = rect.height / elt.offsetHeight;\n    if (scaleX > 0.995 && scaleX < 1.005 || !isFinite(scaleX) || Math.abs(rect.width - elt.offsetWidth) < 1)\n        scaleX = 1;\n    if (scaleY > 0.995 && scaleY < 1.005 || !isFinite(scaleY) || Math.abs(rect.height - elt.offsetHeight) < 1)\n        scaleY = 1;\n    return { scaleX, scaleY };\n}\nfunction scrollRectIntoView(dom, rect, side, x, y, xMargin, yMargin, ltr) {\n    let doc = dom.ownerDocument, win = doc.defaultView || window;\n    for (let cur = dom, stop = false; cur && !stop;) {\n        if (cur.nodeType == 1) { // Element\n            let bounding, top = cur == doc.body;\n            let scaleX = 1, scaleY = 1;\n            if (top) {\n                bounding = windowRect(win);\n            }\n            else {\n                if (/^(fixed|sticky)$/.test(getComputedStyle(cur).position))\n                    stop = true;\n                if (cur.scrollHeight <= cur.clientHeight && cur.scrollWidth <= cur.clientWidth) {\n                    cur = cur.assignedSlot || cur.parentNode;\n                    continue;\n                }\n                let rect = cur.getBoundingClientRect();\n                ({ scaleX, scaleY } = getScale(cur, rect));\n                // Make sure scrollbar width isn't included in the rectangle\n                bounding = { left: rect.left, right: rect.left + cur.clientWidth * scaleX,\n                    top: rect.top, bottom: rect.top + cur.clientHeight * scaleY };\n            }\n            let moveX = 0, moveY = 0;\n            if (y == \"nearest\") {\n                if (rect.top < bounding.top + yMargin) {\n                    moveY = rect.top - (bounding.top + yMargin);\n                    if (side > 0 && rect.bottom > bounding.bottom + moveY)\n                        moveY = rect.bottom - bounding.bottom + yMargin;\n                }\n                else if (rect.bottom > bounding.bottom - yMargin) {\n                    moveY = rect.bottom - bounding.bottom + yMargin;\n                    if (side < 0 && (rect.top - moveY) < bounding.top)\n                        moveY = rect.top - (bounding.top + yMargin);\n                }\n            }\n            else {\n                let rectHeight = rect.bottom - rect.top, boundingHeight = bounding.bottom - bounding.top;\n                let targetTop = y == \"center\" && rectHeight <= boundingHeight ? rect.top + rectHeight / 2 - boundingHeight / 2 :\n                    y == \"start\" || y == \"center\" && side < 0 ? rect.top - yMargin :\n                        rect.bottom - boundingHeight + yMargin;\n                moveY = targetTop - bounding.top;\n            }\n            if (x == \"nearest\") {\n                if (rect.left < bounding.left + xMargin) {\n                    moveX = rect.left - (bounding.left + xMargin);\n                    if (side > 0 && rect.right > bounding.right + moveX)\n                        moveX = rect.right - bounding.right + xMargin;\n                }\n                else if (rect.right > bounding.right - xMargin) {\n                    moveX = rect.right - bounding.right + xMargin;\n                    if (side < 0 && rect.left < bounding.left + moveX)\n                        moveX = rect.left - (bounding.left + xMargin);\n                }\n            }\n            else {\n                let targetLeft = x == \"center\" ? rect.left + (rect.right - rect.left) / 2 - (bounding.right - bounding.left) / 2 :\n                    (x == \"start\") == ltr ? rect.left - xMargin :\n                        rect.right - (bounding.right - bounding.left) + xMargin;\n                moveX = targetLeft - bounding.left;\n            }\n            if (moveX || moveY) {\n                if (top) {\n                    win.scrollBy(moveX, moveY);\n                }\n                else {\n                    let movedX = 0, movedY = 0;\n                    if (moveY) {\n                        let start = cur.scrollTop;\n                        cur.scrollTop += moveY / scaleY;\n                        movedY = (cur.scrollTop - start) * scaleY;\n                    }\n                    if (moveX) {\n                        let start = cur.scrollLeft;\n                        cur.scrollLeft += moveX / scaleX;\n                        movedX = (cur.scrollLeft - start) * scaleX;\n                    }\n                    rect = { left: rect.left - movedX, top: rect.top - movedY,\n                        right: rect.right - movedX, bottom: rect.bottom - movedY };\n                    if (movedX && Math.abs(movedX - moveX) < 1)\n                        x = \"nearest\";\n                    if (movedY && Math.abs(movedY - moveY) < 1)\n                        y = \"nearest\";\n                }\n            }\n            if (top)\n                break;\n            if (rect.top < bounding.top || rect.bottom > bounding.bottom ||\n                rect.left < bounding.left || rect.right > bounding.right)\n                rect = { left: Math.max(rect.left, bounding.left), right: Math.min(rect.right, bounding.right),\n                    top: Math.max(rect.top, bounding.top), bottom: Math.min(rect.bottom, bounding.bottom) };\n            cur = cur.assignedSlot || cur.parentNode;\n        }\n        else if (cur.nodeType == 11) { // A shadow root\n            cur = cur.host;\n        }\n        else {\n            break;\n        }\n    }\n}\nfunction scrollableParents(dom, getX = true) {\n    let doc = dom.ownerDocument, x = null, y = null;\n    for (let cur = dom.parentNode; cur;) {\n        if (cur == doc.body || ((!getX || x) && y)) {\n            break;\n        }\n        else if (cur.nodeType == 1) {\n            if (!y && cur.scrollHeight > cur.clientHeight)\n                y = cur;\n            if (getX && !x && cur.scrollWidth > cur.clientWidth)\n                x = cur;\n            cur = cur.assignedSlot || cur.parentNode;\n        }\n        else if (cur.nodeType == 11) {\n            cur = cur.host;\n        }\n        else {\n            break;\n        }\n    }\n    return { x, y };\n}\nclass DOMSelectionState {\n    constructor() {\n        this.anchorNode = null;\n        this.anchorOffset = 0;\n        this.focusNode = null;\n        this.focusOffset = 0;\n    }\n    eq(domSel) {\n        return this.anchorNode == domSel.anchorNode && this.anchorOffset == domSel.anchorOffset &&\n            this.focusNode == domSel.focusNode && this.focusOffset == domSel.focusOffset;\n    }\n    setRange(range) {\n        let { anchorNode, focusNode } = range;\n        // Clip offsets to node size to avoid crashes when Safari reports bogus offsets (#1152)\n        this.set(anchorNode, Math.min(range.anchorOffset, anchorNode ? maxOffset(anchorNode) : 0), focusNode, Math.min(range.focusOffset, focusNode ? maxOffset(focusNode) : 0));\n    }\n    set(anchorNode, anchorOffset, focusNode, focusOffset) {\n        this.anchorNode = anchorNode;\n        this.anchorOffset = anchorOffset;\n        this.focusNode = focusNode;\n        this.focusOffset = focusOffset;\n    }\n}\nfunction getScrollStack(target) {\n    let stack = [];\n    for (let cur = target; cur; cur = cur.nodeType == 11 ? cur.host : cur.parentNode) {\n        if (cur.nodeType == 1)\n            stack.push({ node: cur, left: cur.scrollLeft, top: cur.scrollTop });\n    }\n    return stack;\n}\nfunction restoreScrollStack(stack, vert = true) {\n    for (let { node, left, top } of stack) {\n        if (vert && node.scrollTop != top)\n            node.scrollTop = top;\n        if (node.scrollLeft != left)\n            node.scrollLeft = left;\n    }\n}\nlet preventScrollSupported = null;\n// Safari 26 breaks preventScroll support\nif (browser.safari && browser.safari_version >= 26)\n    preventScrollSupported = false;\n// Feature-detects support for .focus({preventScroll: true}), and uses\n// a fallback kludge when not supported.\nfunction focusPreventScroll(dom) {\n    if (dom.setActive)\n        return dom.setActive(); // in IE\n    if (preventScrollSupported)\n        return dom.focus(preventScrollSupported);\n    let stack = getScrollStack(dom);\n    dom.focus(preventScrollSupported == null ? {\n        get preventScroll() {\n            preventScrollSupported = { preventScroll: true };\n            return true;\n        }\n    } : undefined);\n    if (!preventScrollSupported) {\n        preventScrollSupported = false;\n        restoreScrollStack(stack);\n    }\n}\nlet scratchRange;\nfunction textRange(node, from, to = from) {\n    let range = scratchRange || (scratchRange = document.createRange());\n    range.setEnd(node, to);\n    range.setStart(node, from);\n    return range;\n}\nfunction dispatchKey(elt, name, code, mods) {\n    let options = { key: name, code: name, keyCode: code, which: code, cancelable: true };\n    if (mods)\n        ({ altKey: options.altKey, ctrlKey: options.ctrlKey, shiftKey: options.shiftKey, metaKey: options.metaKey } = mods);\n    let down = new KeyboardEvent(\"keydown\", options);\n    down.synthetic = true;\n    elt.dispatchEvent(down);\n    let up = new KeyboardEvent(\"keyup\", options);\n    up.synthetic = true;\n    elt.dispatchEvent(up);\n    return down.defaultPrevented || up.defaultPrevented;\n}\nfunction getRoot(node) {\n    while (node) {\n        if (node && (node.nodeType == 9 || node.nodeType == 11 && node.host))\n            return node;\n        node = node.assignedSlot || node.parentNode;\n    }\n    return null;\n}\nfunction atElementStart(doc, selection) {\n    let node = selection.focusNode, offset = selection.focusOffset;\n    if (!node || selection.anchorNode != node || selection.anchorOffset != offset)\n        return false;\n    // Safari can report bogus offsets (#1152)\n    offset = Math.min(offset, maxOffset(node));\n    for (;;) {\n        if (offset) {\n            if (node.nodeType != 1)\n                return false;\n            let prev = node.childNodes[offset - 1];\n            if (prev.contentEditable == \"false\")\n                offset--;\n            else {\n                node = prev;\n                offset = maxOffset(node);\n            }\n        }\n        else if (node == doc) {\n            return true;\n        }\n        else {\n            offset = domIndex(node);\n            node = node.parentNode;\n        }\n    }\n}\nfunction isScrolledToBottom(elt) {\n    if (elt instanceof Window)\n        return elt.pageYOffset > Math.max(0, elt.document.documentElement.scrollHeight - elt.innerHeight - 4);\n    return elt.scrollTop > Math.max(1, elt.scrollHeight - elt.clientHeight - 4);\n}\nfunction textNodeBefore(startNode, startOffset) {\n    for (let node = startNode, offset = startOffset;;) {\n        if (node.nodeType == 3 && offset > 0) {\n            return { node: node, offset: offset };\n        }\n        else if (node.nodeType == 1 && offset > 0) {\n            if (node.contentEditable == \"false\")\n                return null;\n            node = node.childNodes[offset - 1];\n            offset = maxOffset(node);\n        }\n        else if (node.parentNode && !isBlockElement(node)) {\n            offset = domIndex(node);\n            node = node.parentNode;\n        }\n        else {\n            return null;\n        }\n    }\n}\nfunction textNodeAfter(startNode, startOffset) {\n    for (let node = startNode, offset = startOffset;;) {\n        if (node.nodeType == 3 && offset < node.nodeValue.length) {\n            return { node: node, offset: offset };\n        }\n        else if (node.nodeType == 1 && offset < node.childNodes.length) {\n            if (node.contentEditable == \"false\")\n                return null;\n            node = node.childNodes[offset];\n            offset = 0;\n        }\n        else if (node.parentNode && !isBlockElement(node)) {\n            offset = domIndex(node) + 1;\n            node = node.parentNode;\n        }\n        else {\n            return null;\n        }\n    }\n}\nclass DOMPos {\n    constructor(node, offset, precise = true) {\n        this.node = node;\n        this.offset = offset;\n        this.precise = precise;\n    }\n    static before(dom, precise) { return new DOMPos(dom.parentNode, domIndex(dom), precise); }\n    static after(dom, precise) { return new DOMPos(dom.parentNode, domIndex(dom) + 1, precise); }\n}\n\n/**\nUsed to indicate [text direction](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection).\n*/\nvar Direction = /*@__PURE__*/(function (Direction) {\n    // (These are chosen to match the base levels, in bidi algorithm\n    // terms, of spans in that direction.)\n    /**\n    Left-to-right.\n    */\n    Direction[Direction[\"LTR\"] = 0] = \"LTR\";\n    /**\n    Right-to-left.\n    */\n    Direction[Direction[\"RTL\"] = 1] = \"RTL\";\nreturn Direction})(Direction || (Direction = {}));\nconst LTR = Direction.LTR, RTL = Direction.RTL;\n// Decode a string with each type encoded as log2(type)\nfunction dec(str) {\n    let result = [];\n    for (let i = 0; i < str.length; i++)\n        result.push(1 << +str[i]);\n    return result;\n}\n// Character types for codepoints 0 to 0xf8\nconst LowTypes = /*@__PURE__*/dec(\"88888888888888888888888888888888888666888888787833333333337888888000000000000000000000000008888880000000000000000000000000088888888888888888888888888888888888887866668888088888663380888308888800000000000000000000000800000000000000000000000000000008\");\n// Character types for codepoints 0x600 to 0x6f9\nconst ArabicTypes = /*@__PURE__*/dec(\"4444448826627288999999999992222222222222222222222222222222222222222222222229999999999999999999994444444444644222822222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222999999949999999229989999223333333333\");\nconst Brackets = /*@__PURE__*/Object.create(null), BracketStack = [];\n// There's a lot more in\n// https://www.unicode.org/Public/UCD/latest/ucd/BidiBrackets.txt,\n// which are left out to keep code size down.\nfor (let p of [\"()\", \"[]\", \"{}\"]) {\n    let l = /*@__PURE__*/p.charCodeAt(0), r = /*@__PURE__*/p.charCodeAt(1);\n    Brackets[l] = r;\n    Brackets[r] = -l;\n}\nfunction charType(ch) {\n    return ch <= 0xf7 ? LowTypes[ch] :\n        0x590 <= ch && ch <= 0x5f4 ? 2 /* T.R */ :\n            0x600 <= ch && ch <= 0x6f9 ? ArabicTypes[ch - 0x600] :\n                0x6ee <= ch && ch <= 0x8ac ? 4 /* T.AL */ :\n                    0x2000 <= ch && ch <= 0x200c ? 256 /* T.NI */ :\n                        0xfb50 <= ch && ch <= 0xfdff ? 4 /* T.AL */ : 1 /* T.L */;\n}\nconst BidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\ufb50-\\ufdff]/;\n/**\nRepresents a contiguous range of text that has a single direction\n(as in left-to-right or right-to-left).\n*/\nclass BidiSpan {\n    /**\n    The direction of this span.\n    */\n    get dir() { return this.level % 2 ? RTL : LTR; }\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The start of the span (relative to the start of the line).\n    */\n    from, \n    /**\n    The end of the span.\n    */\n    to, \n    /**\n    The [\"bidi\n    level\"](https://unicode.org/reports/tr9/#Basic_Display_Algorithm)\n    of the span (in this context, 0 means\n    left-to-right, 1 means right-to-left, 2 means left-to-right\n    number inside right-to-left text).\n    */\n    level) {\n        this.from = from;\n        this.to = to;\n        this.level = level;\n    }\n    /**\n    @internal\n    */\n    side(end, dir) { return (this.dir == dir) == end ? this.to : this.from; }\n    /**\n    @internal\n    */\n    forward(forward, dir) { return forward == (this.dir == dir); }\n    /**\n    @internal\n    */\n    static find(order, index, level, assoc) {\n        let maybe = -1;\n        for (let i = 0; i < order.length; i++) {\n            let span = order[i];\n            if (span.from <= index && span.to >= index) {\n                if (span.level == level)\n                    return i;\n                // When multiple spans match, if assoc != 0, take the one that\n                // covers that side, otherwise take the one with the minimum\n                // level.\n                if (maybe < 0 || (assoc != 0 ? (assoc < 0 ? span.from < index : span.to > index) : order[maybe].level > span.level))\n                    maybe = i;\n            }\n        }\n        if (maybe < 0)\n            throw new RangeError(\"Index out of range\");\n        return maybe;\n    }\n}\nfunction isolatesEq(a, b) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++) {\n        let iA = a[i], iB = b[i];\n        if (iA.from != iB.from || iA.to != iB.to || iA.direction != iB.direction || !isolatesEq(iA.inner, iB.inner))\n            return false;\n    }\n    return true;\n}\n// Reused array of character types\nconst types = [];\n// Fill in the character types (in `types`) from `from` to `to` and\n// apply W normalization rules.\nfunction computeCharTypes(line, rFrom, rTo, isolates, outerType) {\n    for (let iI = 0; iI <= isolates.length; iI++) {\n        let from = iI ? isolates[iI - 1].to : rFrom, to = iI < isolates.length ? isolates[iI].from : rTo;\n        let prevType = iI ? 256 /* T.NI */ : outerType;\n        // W1. Examine each non-spacing mark (NSM) in the level run, and\n        // change the type of the NSM to the type of the previous\n        // character. If the NSM is at the start of the level run, it will\n        // get the type of sor.\n        // W2. Search backwards from each instance of a European number\n        // until the first strong type (R, L, AL, or sor) is found. If an\n        // AL is found, change the type of the European number to Arabic\n        // number.\n        // W3. Change all ALs to R.\n        // (Left after this: L, R, EN, AN, ET, CS, NI)\n        for (let i = from, prev = prevType, prevStrong = prevType; i < to; i++) {\n            let type = charType(line.charCodeAt(i));\n            if (type == 512 /* T.NSM */)\n                type = prev;\n            else if (type == 8 /* T.EN */ && prevStrong == 4 /* T.AL */)\n                type = 16 /* T.AN */;\n            types[i] = type == 4 /* T.AL */ ? 2 /* T.R */ : type;\n            if (type & 7 /* T.Strong */)\n                prevStrong = type;\n            prev = type;\n        }\n        // W5. A sequence of European terminators adjacent to European\n        // numbers changes to all European numbers.\n        // W6. Otherwise, separators and terminators change to Other\n        // Neutral.\n        // W7. Search backwards from each instance of a European number\n        // until the first strong type (R, L, or sor) is found. If an L is\n        // found, then change the type of the European number to L.\n        // (Left after this: L, R, EN+AN, NI)\n        for (let i = from, prev = prevType, prevStrong = prevType; i < to; i++) {\n            let type = types[i];\n            if (type == 128 /* T.CS */) {\n                if (i < to - 1 && prev == types[i + 1] && (prev & 24 /* T.Num */))\n                    type = types[i] = prev;\n                else\n                    types[i] = 256 /* T.NI */;\n            }\n            else if (type == 64 /* T.ET */) {\n                let end = i + 1;\n                while (end < to && types[end] == 64 /* T.ET */)\n                    end++;\n                let replace = (i && prev == 8 /* T.EN */) || (end < rTo && types[end] == 8 /* T.EN */) ? (prevStrong == 1 /* T.L */ ? 1 /* T.L */ : 8 /* T.EN */) : 256 /* T.NI */;\n                for (let j = i; j < end; j++)\n                    types[j] = replace;\n                i = end - 1;\n            }\n            else if (type == 8 /* T.EN */ && prevStrong == 1 /* T.L */) {\n                types[i] = 1 /* T.L */;\n            }\n            prev = type;\n            if (type & 7 /* T.Strong */)\n                prevStrong = type;\n        }\n    }\n}\n// Process brackets throughout a run sequence.\nfunction processBracketPairs(line, rFrom, rTo, isolates, outerType) {\n    let oppositeType = outerType == 1 /* T.L */ ? 2 /* T.R */ : 1 /* T.L */;\n    for (let iI = 0, sI = 0, context = 0; iI <= isolates.length; iI++) {\n        let from = iI ? isolates[iI - 1].to : rFrom, to = iI < isolates.length ? isolates[iI].from : rTo;\n        // N0. Process bracket pairs in an isolating run sequence\n        // sequentially in the logical order of the text positions of the\n        // opening paired brackets using the logic given below. Within this\n        // scope, bidirectional types EN and AN are treated as R.\n        for (let i = from, ch, br, type; i < to; i++) {\n            // Keeps [startIndex, type, strongSeen] triples for each open\n            // bracket on BracketStack.\n            if (br = Brackets[ch = line.charCodeAt(i)]) {\n                if (br < 0) { // Closing bracket\n                    for (let sJ = sI - 3; sJ >= 0; sJ -= 3) {\n                        if (BracketStack[sJ + 1] == -br) {\n                            let flags = BracketStack[sJ + 2];\n                            let type = (flags & 2 /* Bracketed.EmbedInside */) ? outerType :\n                                !(flags & 4 /* Bracketed.OppositeInside */) ? 0 :\n                                    (flags & 1 /* Bracketed.OppositeBefore */) ? oppositeType : outerType;\n                            if (type)\n                                types[i] = types[BracketStack[sJ]] = type;\n                            sI = sJ;\n                            break;\n                        }\n                    }\n                }\n                else if (BracketStack.length == 189 /* Bracketed.MaxDepth */) {\n                    break;\n                }\n                else {\n                    BracketStack[sI++] = i;\n                    BracketStack[sI++] = ch;\n                    BracketStack[sI++] = context;\n                }\n            }\n            else if ((type = types[i]) == 2 /* T.R */ || type == 1 /* T.L */) {\n                let embed = type == outerType;\n                context = embed ? 0 : 1 /* Bracketed.OppositeBefore */;\n                for (let sJ = sI - 3; sJ >= 0; sJ -= 3) {\n                    let cur = BracketStack[sJ + 2];\n                    if (cur & 2 /* Bracketed.EmbedInside */)\n                        break;\n                    if (embed) {\n                        BracketStack[sJ + 2] |= 2 /* Bracketed.EmbedInside */;\n                    }\n                    else {\n                        if (cur & 4 /* Bracketed.OppositeInside */)\n                            break;\n                        BracketStack[sJ + 2] |= 4 /* Bracketed.OppositeInside */;\n                    }\n                }\n            }\n        }\n    }\n}\nfunction processNeutrals(rFrom, rTo, isolates, outerType) {\n    for (let iI = 0, prev = outerType; iI <= isolates.length; iI++) {\n        let from = iI ? isolates[iI - 1].to : rFrom, to = iI < isolates.length ? isolates[iI].from : rTo;\n        // N1. A sequence of neutrals takes the direction of the\n        // surrounding strong text if the text on both sides has the same\n        // direction. European and Arabic numbers act as if they were R in\n        // terms of their influence on neutrals. Start-of-level-run (sor)\n        // and end-of-level-run (eor) are used at level run boundaries.\n        // N2. Any remaining neutrals take the embedding direction.\n        // (Left after this: L, R, EN+AN)\n        for (let i = from; i < to;) {\n            let type = types[i];\n            if (type == 256 /* T.NI */) {\n                let end = i + 1;\n                for (;;) {\n                    if (end == to) {\n                        if (iI == isolates.length)\n                            break;\n                        end = isolates[iI++].to;\n                        to = iI < isolates.length ? isolates[iI].from : rTo;\n                    }\n                    else if (types[end] == 256 /* T.NI */) {\n                        end++;\n                    }\n                    else {\n                        break;\n                    }\n                }\n                let beforeL = prev == 1 /* T.L */;\n                let afterL = (end < rTo ? types[end] : outerType) == 1 /* T.L */;\n                let replace = beforeL == afterL ? (beforeL ? 1 /* T.L */ : 2 /* T.R */) : outerType;\n                for (let j = end, jI = iI, fromJ = jI ? isolates[jI - 1].to : rFrom; j > i;) {\n                    if (j == fromJ) {\n                        j = isolates[--jI].from;\n                        fromJ = jI ? isolates[jI - 1].to : rFrom;\n                    }\n                    types[--j] = replace;\n                }\n                i = end;\n            }\n            else {\n                prev = type;\n                i++;\n            }\n        }\n    }\n}\n// Find the contiguous ranges of character types in a given range, and\n// emit spans for them. Flip the order of the spans as appropriate\n// based on the level, and call through to compute the spans for\n// isolates at the proper point.\nfunction emitSpans(line, from, to, level, baseLevel, isolates, order) {\n    let ourType = level % 2 ? 2 /* T.R */ : 1 /* T.L */;\n    if ((level % 2) == (baseLevel % 2)) { // Same dir as base direction, don't flip\n        for (let iCh = from, iI = 0; iCh < to;) {\n            // Scan a section of characters in direction ourType, unless\n            // there's another type of char right after iCh, in which case\n            // we scan a section of other characters (which, if ourType ==\n            // T.L, may contain both T.R and T.AN chars).\n            let sameDir = true, isNum = false;\n            if (iI == isolates.length || iCh < isolates[iI].from) {\n                let next = types[iCh];\n                if (next != ourType) {\n                    sameDir = false;\n                    isNum = next == 16 /* T.AN */;\n                }\n            }\n            // Holds an array of isolates to pass to a recursive call if we\n            // must recurse (to distinguish T.AN inside an RTL section in\n            // LTR text), null if we can emit directly\n            let recurse = !sameDir && ourType == 1 /* T.L */ ? [] : null;\n            let localLevel = sameDir ? level : level + 1;\n            let iScan = iCh;\n            run: for (;;) {\n                if (iI < isolates.length && iScan == isolates[iI].from) {\n                    if (isNum)\n                        break run;\n                    let iso = isolates[iI];\n                    // Scan ahead to verify that there is another char in this dir after the isolate(s)\n                    if (!sameDir)\n                        for (let upto = iso.to, jI = iI + 1;;) {\n                            if (upto == to)\n                                break run;\n                            if (jI < isolates.length && isolates[jI].from == upto)\n                                upto = isolates[jI++].to;\n                            else if (types[upto] == ourType)\n                                break run;\n                            else\n                                break;\n                        }\n                    iI++;\n                    if (recurse) {\n                        recurse.push(iso);\n                    }\n                    else {\n                        if (iso.from > iCh)\n                            order.push(new BidiSpan(iCh, iso.from, localLevel));\n                        let dirSwap = (iso.direction == LTR) != !(localLevel % 2);\n                        computeSectionOrder(line, dirSwap ? level + 1 : level, baseLevel, iso.inner, iso.from, iso.to, order);\n                        iCh = iso.to;\n                    }\n                    iScan = iso.to;\n                }\n                else if (iScan == to || (sameDir ? types[iScan] != ourType : types[iScan] == ourType)) {\n                    break;\n                }\n                else {\n                    iScan++;\n                }\n            }\n            if (recurse)\n                emitSpans(line, iCh, iScan, level + 1, baseLevel, recurse, order);\n            else if (iCh < iScan)\n                order.push(new BidiSpan(iCh, iScan, localLevel));\n            iCh = iScan;\n        }\n    }\n    else {\n        // Iterate in reverse to flip the span order. Same code again, but\n        // going from the back of the section to the front\n        for (let iCh = to, iI = isolates.length; iCh > from;) {\n            let sameDir = true, isNum = false;\n            if (!iI || iCh > isolates[iI - 1].to) {\n                let next = types[iCh - 1];\n                if (next != ourType) {\n                    sameDir = false;\n                    isNum = next == 16 /* T.AN */;\n                }\n            }\n            let recurse = !sameDir && ourType == 1 /* T.L */ ? [] : null;\n            let localLevel = sameDir ? level : level + 1;\n            let iScan = iCh;\n            run: for (;;) {\n                if (iI && iScan == isolates[iI - 1].to) {\n                    if (isNum)\n                        break run;\n                    let iso = isolates[--iI];\n                    // Scan ahead to verify that there is another char in this dir after the isolate(s)\n                    if (!sameDir)\n                        for (let upto = iso.from, jI = iI;;) {\n                            if (upto == from)\n                                break run;\n                            if (jI && isolates[jI - 1].to == upto)\n                                upto = isolates[--jI].from;\n                            else if (types[upto - 1] == ourType)\n                                break run;\n                            else\n                                break;\n                        }\n                    if (recurse) {\n                        recurse.push(iso);\n                    }\n                    else {\n                        if (iso.to < iCh)\n                            order.push(new BidiSpan(iso.to, iCh, localLevel));\n                        let dirSwap = (iso.direction == LTR) != !(localLevel % 2);\n                        computeSectionOrder(line, dirSwap ? level + 1 : level, baseLevel, iso.inner, iso.from, iso.to, order);\n                        iCh = iso.from;\n                    }\n                    iScan = iso.from;\n                }\n                else if (iScan == from || (sameDir ? types[iScan - 1] != ourType : types[iScan - 1] == ourType)) {\n                    break;\n                }\n                else {\n                    iScan--;\n                }\n            }\n            if (recurse)\n                emitSpans(line, iScan, iCh, level + 1, baseLevel, recurse, order);\n            else if (iScan < iCh)\n                order.push(new BidiSpan(iScan, iCh, localLevel));\n            iCh = iScan;\n        }\n    }\n}\nfunction computeSectionOrder(line, level, baseLevel, isolates, from, to, order) {\n    let outerType = (level % 2 ? 2 /* T.R */ : 1 /* T.L */);\n    computeCharTypes(line, from, to, isolates, outerType);\n    processBracketPairs(line, from, to, isolates, outerType);\n    processNeutrals(from, to, isolates, outerType);\n    emitSpans(line, from, to, level, baseLevel, isolates, order);\n}\nfunction computeOrder(line, direction, isolates) {\n    if (!line)\n        return [new BidiSpan(0, 0, direction == RTL ? 1 : 0)];\n    if (direction == LTR && !isolates.length && !BidiRE.test(line))\n        return trivialOrder(line.length);\n    if (isolates.length)\n        while (line.length > types.length)\n            types[types.length] = 256 /* T.NI */; // Make sure types array has no gaps\n    let order = [], level = direction == LTR ? 0 : 1;\n    computeSectionOrder(line, level, level, isolates, 0, line.length, order);\n    return order;\n}\nfunction trivialOrder(length) {\n    return [new BidiSpan(0, length, 0)];\n}\nlet movedOver = \"\";\n// This implementation moves strictly visually, without concern for a\n// traversal visiting every logical position in the string. It will\n// still do so for simple input, but situations like multiple isolates\n// with the same level next to each other, or text going against the\n// main dir at the end of the line, will make some positions\n// unreachable with this motion. Each visible cursor position will\n// correspond to the lower-level bidi span that touches it.\n//\n// The alternative would be to solve an order globally for a given\n// line, making sure that it includes every position, but that would\n// require associating non-canonical (higher bidi span level)\n// positions with a given visual position, which is likely to confuse\n// people. (And would generally be a lot more complicated.)\nfunction moveVisually(line, order, dir, start, forward) {\n    var _a;\n    let startIndex = start.head - line.from;\n    let spanI = BidiSpan.find(order, startIndex, (_a = start.bidiLevel) !== null && _a !== void 0 ? _a : -1, start.assoc);\n    let span = order[spanI], spanEnd = span.side(forward, dir);\n    // End of span\n    if (startIndex == spanEnd) {\n        let nextI = spanI += forward ? 1 : -1;\n        if (nextI < 0 || nextI >= order.length)\n            return null;\n        span = order[spanI = nextI];\n        startIndex = span.side(!forward, dir);\n        spanEnd = span.side(forward, dir);\n    }\n    let nextIndex = findClusterBreak(line.text, startIndex, span.forward(forward, dir));\n    if (nextIndex < span.from || nextIndex > span.to)\n        nextIndex = spanEnd;\n    movedOver = line.text.slice(Math.min(startIndex, nextIndex), Math.max(startIndex, nextIndex));\n    let nextSpan = spanI == (forward ? order.length - 1 : 0) ? null : order[spanI + (forward ? 1 : -1)];\n    if (nextSpan && nextIndex == spanEnd && nextSpan.level + (forward ? 0 : 1) < span.level)\n        return EditorSelection.cursor(nextSpan.side(!forward, dir) + line.from, nextSpan.forward(forward, dir) ? 1 : -1, nextSpan.level);\n    return EditorSelection.cursor(nextIndex + line.from, span.forward(forward, dir) ? -1 : 1, span.level);\n}\nfunction autoDirection(text, from, to) {\n    for (let i = from; i < to; i++) {\n        let type = charType(text.charCodeAt(i));\n        if (type == 1 /* T.L */)\n            return LTR;\n        if (type == 2 /* T.R */ || type == 4 /* T.AL */)\n            return RTL;\n    }\n    return LTR;\n}\n\nconst clickAddsSelectionRange = /*@__PURE__*/Facet.define();\nconst dragMovesSelection$1 = /*@__PURE__*/Facet.define();\nconst mouseSelectionStyle = /*@__PURE__*/Facet.define();\nconst exceptionSink = /*@__PURE__*/Facet.define();\nconst updateListener = /*@__PURE__*/Facet.define();\nconst inputHandler = /*@__PURE__*/Facet.define();\nconst focusChangeEffect = /*@__PURE__*/Facet.define();\nconst clipboardInputFilter = /*@__PURE__*/Facet.define();\nconst clipboardOutputFilter = /*@__PURE__*/Facet.define();\nconst perLineTextDirection = /*@__PURE__*/Facet.define({\n    combine: values => values.some(x => x)\n});\nconst nativeSelectionHidden = /*@__PURE__*/Facet.define({\n    combine: values => values.some(x => x)\n});\nconst scrollHandler = /*@__PURE__*/Facet.define();\nclass ScrollTarget {\n    constructor(range, y, x, yMargin, xMargin, \n    // This data structure is abused to also store precise scroll\n    // snapshots, instead of a `scrollIntoView` request. When this\n    // flag is `true`, `range` points at a position in the reference\n    // line, `yMargin` holds the difference between the top of that\n    // line and the top of the editor, and `xMargin` holds the\n    // editor's `scrollLeft`.\n    isSnapshot = false) {\n        this.range = range;\n        this.y = y;\n        this.x = x;\n        this.yMargin = yMargin;\n        this.xMargin = xMargin;\n        this.isSnapshot = isSnapshot;\n    }\n    map(changes) {\n        return changes.empty ? this :\n            new ScrollTarget(this.range.map(changes), this.y, this.x, this.yMargin, this.xMargin, this.isSnapshot);\n    }\n    clip(state) {\n        return this.range.to <= state.doc.length ? this :\n            new ScrollTarget(EditorSelection.cursor(state.doc.length), this.y, this.x, this.yMargin, this.xMargin, this.isSnapshot);\n    }\n}\nconst scrollIntoView = /*@__PURE__*/StateEffect.define({ map: (t, ch) => t.map(ch) });\nconst setEditContextFormatting = /*@__PURE__*/StateEffect.define();\n/**\nLog or report an unhandled exception in client code. Should\nprobably only be used by extension code that allows client code to\nprovide functions, and calls those functions in a context where an\nexception can't be propagated to calling code in a reasonable way\n(for example when in an event handler).\n\nEither calls a handler registered with\n[`EditorView.exceptionSink`](https://codemirror.net/6/docs/ref/#view.EditorView^exceptionSink),\n`window.onerror`, if defined, or `console.error` (in which case\nit'll pass `context`, when given, as first argument).\n*/\nfunction logException(state, exception, context) {\n    let handler = state.facet(exceptionSink);\n    if (handler.length)\n        handler[0](exception);\n    else if (window.onerror && window.onerror(String(exception), context, undefined, undefined, exception)) ;\n    else if (context)\n        console.error(context + \":\", exception);\n    else\n        console.error(exception);\n}\nconst editable = /*@__PURE__*/Facet.define({ combine: values => values.length ? values[0] : true });\nlet nextPluginID = 0;\nconst viewPlugin = /*@__PURE__*/Facet.define({\n    combine(plugins) {\n        return plugins.filter((p, i) => {\n            for (let j = 0; j < i; j++)\n                if (plugins[j].plugin == p.plugin)\n                    return false;\n            return true;\n        });\n    }\n});\n/**\nView plugins associate stateful values with a view. They can\ninfluence the way the content is drawn, and are notified of things\nthat happen in the view. They optionally take an argument, in\nwhich case you need to call [`of`](https://codemirror.net/6/docs/ref/#view.ViewPlugin.of) to create\nan extension for the plugin. When the argument type is undefined,\nyou can use the plugin instance as an extension directly.\n*/\nclass ViewPlugin {\n    constructor(\n    /**\n    @internal\n    */\n    id, \n    /**\n    @internal\n    */\n    create, \n    /**\n    @internal\n    */\n    domEventHandlers, \n    /**\n    @internal\n    */\n    domEventObservers, buildExtensions) {\n        this.id = id;\n        this.create = create;\n        this.domEventHandlers = domEventHandlers;\n        this.domEventObservers = domEventObservers;\n        this.baseExtensions = buildExtensions(this);\n        this.extension = this.baseExtensions.concat(viewPlugin.of({ plugin: this, arg: undefined }));\n    }\n    /**\n    Create an extension for this plugin with the given argument.\n    */\n    of(arg) {\n        return this.baseExtensions.concat(viewPlugin.of({ plugin: this, arg }));\n    }\n    /**\n    Define a plugin from a constructor function that creates the\n    plugin's value, given an editor view.\n    */\n    static define(create, spec) {\n        const { eventHandlers, eventObservers, provide, decorations: deco } = spec || {};\n        return new ViewPlugin(nextPluginID++, create, eventHandlers, eventObservers, plugin => {\n            let ext = [];\n            if (deco)\n                ext.push(decorations.of(view => {\n                    let pluginInst = view.plugin(plugin);\n                    return pluginInst ? deco(pluginInst) : Decoration.none;\n                }));\n            if (provide)\n                ext.push(provide(plugin));\n            return ext;\n        });\n    }\n    /**\n    Create a plugin for a class whose constructor takes a single\n    editor view as argument.\n    */\n    static fromClass(cls, spec) {\n        return ViewPlugin.define((view, arg) => new cls(view, arg), spec);\n    }\n}\nclass PluginInstance {\n    constructor(spec) {\n        this.spec = spec;\n        // When starting an update, all plugins have this field set to the\n        // update object, indicating they need to be updated. When finished\n        // updating, it is set to `null`. Retrieving a plugin that needs to\n        // be updated with `view.plugin` forces an eager update.\n        this.mustUpdate = null;\n        // This is null when the plugin is initially created, but\n        // initialized on the first update.\n        this.value = null;\n    }\n    get plugin() { return this.spec && this.spec.plugin; }\n    update(view) {\n        if (!this.value) {\n            if (this.spec) {\n                try {\n                    this.value = this.spec.plugin.create(view, this.spec.arg);\n                }\n                catch (e) {\n                    logException(view.state, e, \"CodeMirror plugin crashed\");\n                    this.deactivate();\n                }\n            }\n        }\n        else if (this.mustUpdate) {\n            let update = this.mustUpdate;\n            this.mustUpdate = null;\n            if (this.value.update) {\n                try {\n                    this.value.update(update);\n                }\n                catch (e) {\n                    logException(update.state, e, \"CodeMirror plugin crashed\");\n                    if (this.value.destroy)\n                        try {\n                            this.value.destroy();\n                        }\n                        catch (_) { }\n                    this.deactivate();\n                }\n            }\n        }\n        return this;\n    }\n    destroy(view) {\n        var _a;\n        if ((_a = this.value) === null || _a === void 0 ? void 0 : _a.destroy) {\n            try {\n                this.value.destroy();\n            }\n            catch (e) {\n                logException(view.state, e, \"CodeMirror plugin crashed\");\n            }\n        }\n    }\n    deactivate() {\n        this.spec = this.value = null;\n    }\n}\nconst editorAttributes = /*@__PURE__*/Facet.define();\nconst contentAttributes = /*@__PURE__*/Facet.define();\n// Provide decorations\nconst decorations = /*@__PURE__*/Facet.define();\nconst blockWrappers = /*@__PURE__*/Facet.define();\nconst outerDecorations = /*@__PURE__*/Facet.define();\nconst atomicRanges = /*@__PURE__*/Facet.define();\nconst bidiIsolatedRanges = /*@__PURE__*/Facet.define();\nfunction getIsolatedRanges(view, line) {\n    let isolates = view.state.facet(bidiIsolatedRanges);\n    if (!isolates.length)\n        return isolates;\n    let sets = isolates.map(i => i instanceof Function ? i(view) : i);\n    let result = [];\n    RangeSet.spans(sets, line.from, line.to, {\n        point() { },\n        span(fromDoc, toDoc, active, open) {\n            let from = fromDoc - line.from, to = toDoc - line.from;\n            let level = result;\n            for (let i = active.length - 1; i >= 0; i--, open--) {\n                let direction = active[i].spec.bidiIsolate, update;\n                if (direction == null)\n                    direction = autoDirection(line.text, from, to);\n                if (open > 0 && level.length &&\n                    (update = level[level.length - 1]).to == from && update.direction == direction) {\n                    update.to = to;\n                    level = update.inner;\n                }\n                else {\n                    let add = { from, to, direction, inner: [] };\n                    level.push(add);\n                    level = add.inner;\n                }\n            }\n        }\n    });\n    return result;\n}\nconst scrollMargins = /*@__PURE__*/Facet.define();\nfunction getScrollMargins(view) {\n    let left = 0, right = 0, top = 0, bottom = 0;\n    for (let source of view.state.facet(scrollMargins)) {\n        let m = source(view);\n        if (m) {\n            if (m.left != null)\n                left = Math.max(left, m.left);\n            if (m.right != null)\n                right = Math.max(right, m.right);\n            if (m.top != null)\n                top = Math.max(top, m.top);\n            if (m.bottom != null)\n                bottom = Math.max(bottom, m.bottom);\n        }\n    }\n    return { left, right, top, bottom };\n}\nconst styleModule = /*@__PURE__*/Facet.define();\nclass ChangedRange {\n    constructor(fromA, toA, fromB, toB) {\n        this.fromA = fromA;\n        this.toA = toA;\n        this.fromB = fromB;\n        this.toB = toB;\n    }\n    join(other) {\n        return new ChangedRange(Math.min(this.fromA, other.fromA), Math.max(this.toA, other.toA), Math.min(this.fromB, other.fromB), Math.max(this.toB, other.toB));\n    }\n    addToSet(set) {\n        let i = set.length, me = this;\n        for (; i > 0; i--) {\n            let range = set[i - 1];\n            if (range.fromA > me.toA)\n                continue;\n            if (range.toA < me.fromA)\n                break;\n            me = me.join(range);\n            set.splice(i - 1, 1);\n        }\n        set.splice(i, 0, me);\n        return set;\n    }\n    // Extend a set to cover all the content in `ranges`, which is a\n    // flat array with each pair of numbers representing fromB/toB\n    // positions. These pairs are generated in unchanged ranges, so the\n    // offset between doc A and doc B is the same for their start and\n    // end points.\n    static extendWithRanges(diff, ranges) {\n        if (ranges.length == 0)\n            return diff;\n        let result = [];\n        for (let dI = 0, rI = 0, off = 0;;) {\n            let nextD = dI < diff.length ? diff[dI].fromB : 1e9;\n            let nextR = rI < ranges.length ? ranges[rI] : 1e9;\n            let fromB = Math.min(nextD, nextR);\n            if (fromB == 1e9)\n                break;\n            let fromA = fromB + off, toB = fromB, toA = fromA;\n            for (;;) {\n                if (rI < ranges.length && ranges[rI] <= toB) {\n                    let end = ranges[rI + 1];\n                    rI += 2;\n                    toB = Math.max(toB, end);\n                    for (let i = dI; i < diff.length && diff[i].fromB <= toB; i++)\n                        off = diff[i].toA - diff[i].toB;\n                    toA = Math.max(toA, end + off);\n                }\n                else if (dI < diff.length && diff[dI].fromB <= toB) {\n                    let next = diff[dI++];\n                    toB = Math.max(toB, next.toB);\n                    toA = Math.max(toA, next.toA);\n                    off = next.toA - next.toB;\n                }\n                else {\n                    break;\n                }\n            }\n            result.push(new ChangedRange(fromA, toA, fromB, toB));\n        }\n        return result;\n    }\n}\n/**\nView [plugins](https://codemirror.net/6/docs/ref/#view.ViewPlugin) are given instances of this\nclass, which describe what happened, whenever the view is updated.\n*/\nclass ViewUpdate {\n    constructor(\n    /**\n    The editor view that the update is associated with.\n    */\n    view, \n    /**\n    The new editor state.\n    */\n    state, \n    /**\n    The transactions involved in the update. May be empty.\n    */\n    transactions) {\n        this.view = view;\n        this.state = state;\n        this.transactions = transactions;\n        /**\n        @internal\n        */\n        this.flags = 0;\n        this.startState = view.state;\n        this.changes = ChangeSet.empty(this.startState.doc.length);\n        for (let tr of transactions)\n            this.changes = this.changes.compose(tr.changes);\n        let changedRanges = [];\n        this.changes.iterChangedRanges((fromA, toA, fromB, toB) => changedRanges.push(new ChangedRange(fromA, toA, fromB, toB)));\n        this.changedRanges = changedRanges;\n    }\n    /**\n    @internal\n    */\n    static create(view, state, transactions) {\n        return new ViewUpdate(view, state, transactions);\n    }\n    /**\n    Tells you whether the [viewport](https://codemirror.net/6/docs/ref/#view.EditorView.viewport) or\n    [visible ranges](https://codemirror.net/6/docs/ref/#view.EditorView.visibleRanges) changed in this\n    update.\n    */\n    get viewportChanged() {\n        return (this.flags & 4 /* UpdateFlag.Viewport */) > 0;\n    }\n    /**\n    Returns true when\n    [`viewportChanged`](https://codemirror.net/6/docs/ref/#view.ViewUpdate.viewportChanged) is true\n    and the viewport change is not just the result of mapping it in\n    response to document changes.\n    */\n    get viewportMoved() {\n        return (this.flags & 8 /* UpdateFlag.ViewportMoved */) > 0;\n    }\n    /**\n    Indicates whether the height of a block element in the editor\n    changed in this update.\n    */\n    get heightChanged() {\n        return (this.flags & 2 /* UpdateFlag.Height */) > 0;\n    }\n    /**\n    Returns true when the document was modified or the size of the\n    editor, or elements within the editor, changed.\n    */\n    get geometryChanged() {\n        return this.docChanged || (this.flags & (16 /* UpdateFlag.Geometry */ | 2 /* UpdateFlag.Height */)) > 0;\n    }\n    /**\n    True when this update indicates a focus change.\n    */\n    get focusChanged() {\n        return (this.flags & 1 /* UpdateFlag.Focus */) > 0;\n    }\n    /**\n    Whether the document changed in this update.\n    */\n    get docChanged() {\n        return !this.changes.empty;\n    }\n    /**\n    Whether the selection was explicitly set in this update.\n    */\n    get selectionSet() {\n        return this.transactions.some(tr => tr.selection);\n    }\n    /**\n    @internal\n    */\n    get empty() { return this.flags == 0 && this.transactions.length == 0; }\n}\n\nconst noChildren = [];\nclass Tile {\n    constructor(dom, length, flags = 0) {\n        this.dom = dom;\n        this.length = length;\n        this.flags = flags;\n        this.parent = null;\n        dom.cmTile = this;\n    }\n    get breakAfter() { return (this.flags & 1 /* TileFlag.BreakAfter */); }\n    get children() { return noChildren; }\n    isWidget() { return false; }\n    get isHidden() { return false; }\n    isComposite() { return false; }\n    isLine() { return false; }\n    isText() { return false; }\n    isBlock() { return false; }\n    get domAttrs() { return null; }\n    sync(track) {\n        this.flags |= 2 /* TileFlag.Synced */;\n        if (this.flags & 4 /* TileFlag.AttrsDirty */) {\n            this.flags &= ~4 /* TileFlag.AttrsDirty */;\n            let attrs = this.domAttrs;\n            if (attrs)\n                setAttrs(this.dom, attrs);\n        }\n    }\n    toString() {\n        return this.constructor.name + (this.children.length ? `(${this.children})` : \"\") + (this.breakAfter ? \"#\" : \"\");\n    }\n    destroy() { this.parent = null; }\n    setDOM(dom) {\n        this.dom = dom;\n        dom.cmTile = this;\n    }\n    get posAtStart() {\n        return this.parent ? this.parent.posBefore(this) : 0;\n    }\n    get posAtEnd() {\n        return this.posAtStart + this.length;\n    }\n    posBefore(tile, start = this.posAtStart) {\n        let pos = start;\n        for (let child of this.children) {\n            if (child == tile)\n                return pos;\n            pos += child.length + child.breakAfter;\n        }\n        throw new RangeError(\"Invalid child in posBefore\");\n    }\n    posAfter(tile) {\n        return this.posBefore(tile) + tile.length;\n    }\n    covers(side) { return true; }\n    coordsIn(pos, side, rtl) { return null; }\n    domPosFor(off, side) {\n        let index = domIndex(this.dom);\n        let after = this.length ? off > 0 : side > 0;\n        return new DOMPos(this.parent.dom, index + (after ? 1 : 0), off == 0 || off == this.length);\n    }\n    markDirty(attrs) {\n        this.flags &= ~2 /* TileFlag.Synced */;\n        if (attrs)\n            this.flags |= 4 /* TileFlag.AttrsDirty */;\n        if (this.parent && (this.parent.flags & 2 /* TileFlag.Synced */))\n            this.parent.markDirty(false);\n    }\n    get overrideDOMText() { return null; }\n    get root() {\n        for (let t = this; t; t = t.parent)\n            if (t instanceof DocTile)\n                return t;\n        return null;\n    }\n    static get(dom) {\n        return dom.cmTile;\n    }\n}\nclass CompositeTile extends Tile {\n    constructor(dom) {\n        super(dom, 0);\n        this._children = [];\n    }\n    isComposite() { return true; }\n    get children() { return this._children; }\n    get lastChild() { return this.children.length ? this.children[this.children.length - 1] : null; }\n    append(child) {\n        this.children.push(child);\n        child.parent = this;\n    }\n    sync(track) {\n        if (this.flags & 2 /* TileFlag.Synced */)\n            return;\n        super.sync(track);\n        let parent = this.dom, prev = null, next;\n        let tracking = (track === null || track === void 0 ? void 0 : track.node) == parent ? track : null;\n        let length = 0;\n        for (let child of this.children) {\n            child.sync(track);\n            length += child.length + child.breakAfter;\n            next = prev ? prev.nextSibling : parent.firstChild;\n            if (tracking && next != child.dom)\n                tracking.written = true;\n            if (child.dom.parentNode == parent) {\n                while (next && next != child.dom)\n                    next = rm$1(next);\n            }\n            else {\n                parent.insertBefore(child.dom, next);\n            }\n            prev = child.dom;\n        }\n        next = prev ? prev.nextSibling : parent.firstChild;\n        if (tracking && next)\n            tracking.written = true;\n        while (next)\n            next = rm$1(next);\n        this.length = length;\n    }\n}\n// Remove a DOM node and return its next sibling.\nfunction rm$1(dom) {\n    let next = dom.nextSibling;\n    dom.parentNode.removeChild(dom);\n    return next;\n}\n// The top-level tile. Its dom property equals view.contentDOM.\nclass DocTile extends CompositeTile {\n    constructor(view, dom) {\n        super(dom);\n        this.view = view;\n    }\n    owns(tile) {\n        for (; tile; tile = tile.parent)\n            if (tile == this)\n                return true;\n        return false;\n    }\n    isBlock() { return true; }\n    nearest(dom) {\n        for (;;) {\n            if (!dom)\n                return null;\n            let tile = Tile.get(dom);\n            if (tile && this.owns(tile))\n                return tile;\n            dom = dom.parentNode;\n        }\n    }\n    blockTiles(f) {\n        for (let stack = [], cur = this, i = 0, pos = 0;;) {\n            if (i == cur.children.length) {\n                if (!stack.length)\n                    return;\n                cur = cur.parent;\n                if (cur.breakAfter)\n                    pos++;\n                i = stack.pop();\n            }\n            else {\n                let next = cur.children[i++];\n                if (next instanceof BlockWrapperTile) {\n                    stack.push(i);\n                    cur = next;\n                    i = 0;\n                }\n                else {\n                    let end = pos + next.length;\n                    let result = f(next, pos);\n                    if (result !== undefined)\n                        return result;\n                    pos = end + next.breakAfter;\n                }\n            }\n        }\n    }\n    // Find the block at the given position. If side < -1, make sure to\n    // stay before block widgets at that position, if side > 1, after\n    // such widgets (used for selection drawing, which needs to be able\n    // to get coordinates for positions that aren't valid cursor positions).\n    resolveBlock(pos, side) {\n        let before, beforeOff = -1, after, afterOff = -1;\n        this.blockTiles((tile, off) => {\n            let end = off + tile.length;\n            if (pos >= off && pos <= end) {\n                if (tile.isWidget() && side >= -1 && side <= 1) {\n                    if (tile.flags & 32 /* TileFlag.After */)\n                        return true;\n                    if (tile.flags & 16 /* TileFlag.Before */)\n                        before = undefined;\n                }\n                if ((off < pos || pos == end && (side < -1 ? tile.length : tile.covers(1))) &&\n                    (!before || !tile.isWidget() && before.isWidget())) {\n                    before = tile;\n                    beforeOff = pos - off;\n                }\n                if ((end > pos || pos == off && (side > 1 ? tile.length : tile.covers(-1))) &&\n                    (!after || !tile.isWidget() && after.isWidget())) {\n                    after = tile;\n                    afterOff = pos - off;\n                }\n            }\n        });\n        if (!before && !after)\n            throw new Error(\"No tile at position \" + pos);\n        return before && side < 0 || !after ? { tile: before, offset: beforeOff } : { tile: after, offset: afterOff };\n    }\n}\nclass BlockWrapperTile extends CompositeTile {\n    constructor(dom, wrapper) {\n        super(dom);\n        this.wrapper = wrapper;\n    }\n    isBlock() { return true; }\n    covers(side) {\n        if (!this.children.length)\n            return false;\n        return side < 0 ? this.children[0].covers(-1) : this.lastChild.covers(1);\n    }\n    get domAttrs() { return this.wrapper.attributes; }\n    static of(wrapper, dom) {\n        let tile = new BlockWrapperTile(dom || document.createElement(wrapper.tagName), wrapper);\n        if (!dom)\n            tile.flags |= 4 /* TileFlag.AttrsDirty */;\n        return tile;\n    }\n}\nclass LineTile extends CompositeTile {\n    constructor(dom, attrs) {\n        super(dom);\n        this.attrs = attrs;\n    }\n    isLine() { return true; }\n    static start(attrs, dom, keepAttrs) {\n        let line = new LineTile(dom || document.createElement(\"div\"), attrs);\n        if (!dom || !keepAttrs)\n            line.flags |= 4 /* TileFlag.AttrsDirty */;\n        return line;\n    }\n    get domAttrs() { return this.attrs; }\n    // Find the tile associated with a given position in this line.\n    // Side -2/2 is handled specially, in that it allows the position\n    // returned to be before (-2) or after (2) widgets that would always\n    // be after/before a cursor position.\n    resolveInline(pos, side, forCoords) {\n        let before = null, beforeOff = -1, after = null, afterOff = -1;\n        function scan(tile, pos) {\n            for (let i = 0, off = 0; i < tile.children.length && off <= pos; i++) {\n                let child = tile.children[i], end = off + child.length;\n                if (end >= pos) {\n                    if (child.isComposite()) {\n                        scan(child, pos - off);\n                    }\n                    else if ((!after || after.isHidden && (side > 0 && !(after.flags & 32 /* TileFlag.After */) || forCoords && onSameLine(after, child))) &&\n                        (end > pos || (child.flags & 32 /* TileFlag.After */) && side <= 1)) {\n                        after = child;\n                        afterOff = pos - off;\n                    }\n                    else if (off < pos || (child.flags & 16 /* TileFlag.Before */) && !child.isHidden && side >= -1) {\n                        before = child;\n                        beforeOff = pos - off;\n                    }\n                }\n                off = end;\n            }\n        }\n        scan(this, pos);\n        let target = ((side < 0 ? before : after) || before || after);\n        return target ? { tile: target, offset: target == before ? beforeOff : afterOff } : null;\n    }\n    coordsIn(pos, side, rtl) {\n        let found = this.resolveInline(pos, side, true);\n        if (!found)\n            return fallbackRect(this);\n        return found.tile.coordsIn(Math.max(0, found.offset), side, rtl);\n    }\n    domIn(pos, side) {\n        let found = this.resolveInline(pos, side);\n        if (found) {\n            let { tile, offset } = found;\n            if (this.dom.contains(tile.dom)) {\n                if (tile.isText())\n                    return new DOMPos(tile.dom, Math.min(tile.dom.nodeValue.length, offset));\n                return tile.domPosFor(offset, tile.flags & 16 /* TileFlag.Before */ ? 1 : tile.flags & 32 /* TileFlag.After */ ? -1 : side);\n            }\n            let parent = found.tile.parent, saw = false;\n            for (let ch of parent.children) {\n                if (saw)\n                    return new DOMPos(ch.dom, 0);\n                if (ch == found.tile) {\n                    saw = true;\n                }\n            }\n        }\n        return new DOMPos(this.dom, 0);\n    }\n}\nfunction fallbackRect(tile) {\n    let last = tile.dom.lastChild;\n    if (!last)\n        return tile.dom.getBoundingClientRect();\n    let rects = clientRectsFor(last);\n    return rects[rects.length - 1] || null;\n}\nfunction onSameLine(a, b) {\n    let posA = a.coordsIn(0, 1), posB = b.coordsIn(0, 1);\n    return posA && posB && posB.top < posA.bottom;\n}\nclass MarkTile extends CompositeTile {\n    constructor(dom, mark) {\n        super(dom);\n        this.mark = mark;\n    }\n    get domAttrs() { return this.mark.attrs; }\n    static of(mark, dom) {\n        let tile = new MarkTile(dom || document.createElement(mark.tagName), mark);\n        if (!dom)\n            tile.flags |= 4 /* TileFlag.AttrsDirty */;\n        return tile;\n    }\n}\nclass TextTile extends Tile {\n    constructor(dom, text) {\n        super(dom, text.length);\n        this.text = text;\n    }\n    sync(track) {\n        if (this.flags & 2 /* TileFlag.Synced */)\n            return;\n        super.sync(track);\n        if (this.dom.nodeValue != this.text) {\n            if (track && track.node == this.dom)\n                track.written = true;\n            this.dom.nodeValue = this.text;\n        }\n    }\n    isText() { return true; }\n    toString() { return JSON.stringify(this.text); }\n    coordsIn(pos, side, rtl) {\n        let length = this.dom.nodeValue.length;\n        if (pos > length)\n            pos = length;\n        let from = pos, to = pos, flatten = 0;\n        if (pos == 0 && side < 0 || pos == length && side >= 0) {\n            if (!(browser.chrome || browser.gecko)) { // These browsers reliably return valid rectangles for empty ranges\n                if (pos) {\n                    from--;\n                    flatten = 1;\n                }\n                else if (to < length) {\n                    to++;\n                    flatten = -1;\n                }\n            }\n        }\n        else {\n            if (side < 0)\n                from--;\n            else if (to < length)\n                to++;\n        }\n        let rects = textRange(this.dom, from, to).getClientRects();\n        if (!rects.length)\n            return null;\n        let rect = rects[(flatten ? flatten < 0 : side >= 0) ? 0 : rects.length - 1];\n        if (browser.safari && !flatten && rect.width == 0)\n            rect = Array.prototype.find.call(rects, r => r.width) || rect;\n        return rtl == null ? rect : flattenRect(rect, (flatten ? flatten > 0 : side < 0) == rtl);\n    }\n    static of(text, dom) {\n        let tile = new TextTile(dom || document.createTextNode(text), text);\n        if (!dom)\n            tile.flags |= 2 /* TileFlag.Synced */;\n        return tile;\n    }\n}\nclass WidgetTile extends Tile {\n    constructor(dom, length, widget, flags) {\n        super(dom, length, flags);\n        this.widget = widget;\n    }\n    isWidget() { return true; }\n    get isHidden() { return this.widget.isHidden; }\n    covers(side) {\n        if (this.flags & 48 /* TileFlag.PointWidget */)\n            return false;\n        return (this.flags & (side < 0 ? 64 /* TileFlag.IncStart */ : 128 /* TileFlag.IncEnd */)) > 0;\n    }\n    coordsIn(pos, side) { return this.coordsInWidget(pos, side, false); }\n    coordsInWidget(pos, side, block) {\n        let custom = this.widget.coordsAt(this.dom, pos, side);\n        if (custom)\n            return custom;\n        if (block) {\n            return flattenRect(this.dom.getBoundingClientRect(), this.length ? pos == 0 : side <= 0);\n        }\n        else {\n            let rects = this.dom.getClientRects(), rect = null;\n            if (!rects.length)\n                return null;\n            let fromBack = (this.flags & 16 /* TileFlag.Before */) ? true : (this.flags & 32 /* TileFlag.After */) ? false : pos > 0;\n            for (let i = fromBack ? rects.length - 1 : 0;; i += (fromBack ? -1 : 1)) {\n                rect = rects[i];\n                if (pos > 0 ? i == 0 : i == rects.length - 1 || rect.top < rect.bottom)\n                    break;\n            }\n            return flattenRect(rect, !fromBack);\n        }\n    }\n    get overrideDOMText() {\n        if (!this.length)\n            return Text.empty;\n        let { root } = this;\n        if (!root)\n            return Text.empty;\n        let start = this.posAtStart;\n        return root.view.state.doc.slice(start, start + this.length);\n    }\n    destroy() {\n        super.destroy();\n        this.widget.destroy(this.dom);\n    }\n    static of(widget, view, length, flags, dom) {\n        if (!dom) {\n            dom = widget.toDOM(view);\n            if (!widget.editable)\n                dom.contentEditable = \"false\";\n        }\n        return new WidgetTile(dom, length, widget, flags);\n    }\n}\n// These are drawn around uneditable widgets to avoid a number of\n// browser bugs that show up when the cursor is directly next to\n// uneditable inline content.\nclass WidgetBufferTile extends Tile {\n    constructor(flags) {\n        let img = document.createElement(\"img\");\n        img.className = \"cm-widgetBuffer\";\n        img.setAttribute(\"aria-hidden\", \"true\");\n        super(img, 0, flags);\n    }\n    get isHidden() { return true; }\n    get overrideDOMText() { return Text.empty; }\n    coordsIn(pos, side, rtl) {\n        let rect = this.dom.getBoundingClientRect();\n        return rtl == null ? rect : flattenRect(rect, (side > 0) == rtl);\n    }\n}\n// Represents a position in the tile tree.\nclass TilePointer {\n    constructor(top) {\n        this.index = 0;\n        this.beforeBreak = false;\n        this.parents = [];\n        this.tile = top;\n    }\n    // Advance by the given distance. If side is -1, stop leaving or\n    // entering tiles, or skipping zero-length tiles, once the distance\n    // has been traversed. When side is 1, leave, enter, or skip\n    // everything at the end position.\n    advance(dist, side, walker) {\n        let { tile, index, beforeBreak, parents } = this;\n        while (dist || side > 0) {\n            if (!tile.isComposite()) {\n                let len = tile.length;\n                if (index < len && dist) {\n                    let take = Math.min(dist, len - index);\n                    if (walker)\n                        walker.skip(tile, index, index + take);\n                    dist -= take;\n                    index += take;\n                }\n                if (index == len) {\n                    beforeBreak = !!tile.breakAfter;\n                    ({ tile, index } = parents.pop());\n                    index++;\n                }\n                else if (!dist) {\n                    break;\n                }\n            }\n            else if (beforeBreak) {\n                if (!dist)\n                    break;\n                if (walker)\n                    walker.break();\n                dist--;\n                beforeBreak = false;\n            }\n            else if (index == tile.children.length) {\n                if (!dist && !parents.length)\n                    break;\n                if (walker)\n                    walker.leave(tile);\n                beforeBreak = !!tile.breakAfter;\n                ({ tile, index } = parents.pop());\n                index++;\n            }\n            else {\n                let next = tile.children[index], brk = next.breakAfter;\n                if ((side > 0 ? next.length <= dist : next.length < dist) &&\n                    (!walker || walker.skip(next, 0, next.length) !== false || !next.isComposite)) {\n                    beforeBreak = !!brk;\n                    index++;\n                    dist -= next.length;\n                }\n                else {\n                    parents.push({ tile, index });\n                    tile = next;\n                    index = 0;\n                    if (walker && next.isComposite())\n                        walker.enter(next);\n                }\n            }\n        }\n        this.tile = tile;\n        this.index = index;\n        this.beforeBreak = beforeBreak;\n        return this;\n    }\n    get root() { return (this.parents.length ? this.parents[0].tile : this.tile); }\n}\n\n// Used to track open block wrappers\nclass OpenWrapper {\n    constructor(from, to, wrapper, rank) {\n        this.from = from;\n        this.to = to;\n        this.wrapper = wrapper;\n        this.rank = rank;\n    }\n}\n// This class builds up a new document tile using input from either\n// iteration over the old tree or iteration over the document +\n// decorations. The add* methods emit elements into the tile\n// structure. To avoid awkward synchronization issues, marks and block\n// wrappers are treated as belonging to to their content, rather than\n// opened/closed independently.\n//\n// All composite tiles that are touched by changes are rebuilt,\n// reusing as much of the old tree (either whole nodes or just DOM\n// elements) as possible. The new tree is built without the Synced\n// flag, and then synced (during which DOM parent/child relations are\n// fixed up, text nodes filled in, and attributes added) in a second\n// phase.\nclass TileBuilder {\n    constructor(cache, root, blockWrappers) {\n        this.cache = cache;\n        this.root = root;\n        this.blockWrappers = blockWrappers;\n        this.curLine = null;\n        this.lastBlock = null;\n        this.afterWidget = null;\n        this.pos = 0;\n        this.wrappers = [];\n        this.wrapperPos = 0;\n    }\n    addText(text, marks, openStart, tile) {\n        var _a;\n        this.flushBuffer();\n        let parent = this.ensureMarks(marks, openStart);\n        let prev = parent.lastChild;\n        if (prev && prev.isText() && !(prev.flags & 8 /* TileFlag.Composition */) && prev.length + text.length < 512 /* C.Chunk */) {\n            this.cache.reused.set(prev, 2 /* Reused.DOM */);\n            let tile = parent.children[parent.children.length - 1] = new TextTile(prev.dom, prev.text + text);\n            tile.parent = parent;\n        }\n        else {\n            parent.append(tile || TextTile.of(text, (_a = this.cache.find(TextTile)) === null || _a === void 0 ? void 0 : _a.dom));\n        }\n        this.pos += text.length;\n        this.afterWidget = null;\n    }\n    addComposition(composition, context) {\n        let line = this.curLine;\n        if (line.dom != context.line.dom) {\n            line.setDOM(this.cache.reused.has(context.line) ? freeNode(context.line.dom) : context.line.dom);\n            this.cache.reused.set(context.line, 2 /* Reused.DOM */);\n        }\n        let head = line;\n        for (let i = context.marks.length - 1; i >= 0; i--) {\n            let mark = context.marks[i];\n            let last = head.lastChild;\n            if (last instanceof MarkTile && last.mark.eq(mark.mark)) {\n                if (last.dom != mark.dom)\n                    last.setDOM(freeNode(mark.dom));\n                head = last;\n            }\n            else {\n                if (this.cache.reused.get(mark)) {\n                    let tile = Tile.get(mark.dom);\n                    if (tile)\n                        tile.setDOM(freeNode(mark.dom));\n                }\n                let nw = MarkTile.of(mark.mark, mark.dom);\n                head.append(nw);\n                head = nw;\n            }\n            this.cache.reused.set(mark, 2 /* Reused.DOM */);\n        }\n        let oldTile = Tile.get(composition.text);\n        if (oldTile)\n            this.cache.reused.set(oldTile, 2 /* Reused.DOM */);\n        let text = new TextTile(composition.text, composition.text.nodeValue);\n        text.flags |= 8 /* TileFlag.Composition */;\n        this.pos = composition.range.toB;\n        head.append(text);\n    }\n    addInlineWidget(widget, marks, openStart) {\n        // Adjacent same-side-facing non-replacing widgets don't need buffers between them\n        let noSpace = this.afterWidget && (widget.flags & 48 /* TileFlag.PointWidget */) &&\n            (this.afterWidget.flags & 48 /* TileFlag.PointWidget */) == (widget.flags & 48 /* TileFlag.PointWidget */);\n        if (!noSpace)\n            this.flushBuffer();\n        let parent = this.ensureMarks(marks, openStart);\n        if (!noSpace && !(widget.flags & 16 /* TileFlag.Before */))\n            parent.append(this.getBuffer(1));\n        parent.append(widget);\n        this.pos += widget.length;\n        this.afterWidget = widget;\n    }\n    addMark(tile, marks, openStart) {\n        this.flushBuffer();\n        let parent = this.ensureMarks(marks, openStart);\n        parent.append(tile);\n        this.pos += tile.length;\n        this.afterWidget = null;\n    }\n    addBlockWidget(widget) {\n        this.getBlockPos().append(widget);\n        this.pos += widget.length;\n        this.lastBlock = widget;\n        this.endLine();\n    }\n    continueWidget(length) {\n        let widget = this.afterWidget || this.lastBlock;\n        widget.length += length;\n        this.pos += length;\n    }\n    addLineStart(attrs, dom) {\n        var _a;\n        if (!attrs)\n            attrs = lineBaseAttrs;\n        let tile = LineTile.start(attrs, dom || ((_a = this.cache.find(LineTile)) === null || _a === void 0 ? void 0 : _a.dom), !!dom);\n        this.getBlockPos().append(this.lastBlock = this.curLine = tile);\n    }\n    addLine(tile) {\n        this.getBlockPos().append(tile);\n        this.pos += tile.length;\n        this.lastBlock = tile;\n        this.endLine();\n    }\n    addBreak() {\n        this.lastBlock.flags |= 1 /* TileFlag.BreakAfter */;\n        this.endLine();\n        this.pos++;\n    }\n    addLineStartIfNotCovered(attrs) {\n        if (!this.blockPosCovered())\n            this.addLineStart(attrs);\n    }\n    ensureLine(attrs) {\n        if (!this.curLine)\n            this.addLineStart(attrs);\n    }\n    ensureMarks(marks, openStart) {\n        var _a;\n        let parent = this.curLine;\n        for (let i = marks.length - 1; i >= 0; i--) {\n            let mark = marks[i], last;\n            if (openStart > 0 && (last = parent.lastChild) && last instanceof MarkTile && last.mark.eq(mark)) {\n                parent = last;\n                openStart--;\n            }\n            else {\n                let tile = MarkTile.of(mark, (_a = this.cache.find(MarkTile, m => m.mark.eq(mark))) === null || _a === void 0 ? void 0 : _a.dom);\n                parent.append(tile);\n                parent = tile;\n                openStart = 0;\n            }\n        }\n        return parent;\n    }\n    endLine() {\n        if (this.curLine) {\n            this.flushBuffer();\n            let last = this.curLine.lastChild;\n            if (!last || !hasContent(this.curLine, false) ||\n                last.dom.nodeName != \"BR\" && last.isWidget() && !(browser.ios && hasContent(this.curLine, true)))\n                this.curLine.append(this.cache.findWidget(BreakWidget, 0, 32 /* TileFlag.After */) ||\n                    new WidgetTile(BreakWidget.toDOM(), 0, BreakWidget, 32 /* TileFlag.After */));\n            this.curLine = this.afterWidget = null;\n        }\n    }\n    updateBlockWrappers() {\n        if (this.wrapperPos > this.pos + 10000 /* C.WrapperReset */) {\n            this.blockWrappers.goto(this.pos);\n            this.wrappers.length = 0;\n        }\n        for (let i = this.wrappers.length - 1; i >= 0; i--)\n            if (this.wrappers[i].to < this.pos)\n                this.wrappers.splice(i, 1);\n        for (let cur = this.blockWrappers; cur.value && cur.from <= this.pos; cur.next())\n            if (cur.to >= this.pos) {\n                let rank = (cur.rank * 102) + cur.value.rank;\n                let wrap = new OpenWrapper(cur.from, cur.to, cur.value, rank), i = this.wrappers.length;\n                while (i > 0 && (this.wrappers[i - 1].rank - wrap.rank || this.wrappers[i - 1].to - wrap.to) < 0)\n                    i--;\n                this.wrappers.splice(i, 0, wrap);\n            }\n        this.wrapperPos = this.pos;\n    }\n    getBlockPos() {\n        var _a;\n        this.updateBlockWrappers();\n        let parent = this.root;\n        for (let wrap of this.wrappers) {\n            let last = parent.lastChild;\n            if (wrap.from < this.pos && last instanceof BlockWrapperTile && last.wrapper.eq(wrap.wrapper)) {\n                parent = last;\n            }\n            else {\n                let tile = BlockWrapperTile.of(wrap.wrapper, (_a = this.cache.find(BlockWrapperTile, t => t.wrapper.eq(wrap.wrapper))) === null || _a === void 0 ? void 0 : _a.dom);\n                parent.append(tile);\n                parent = tile;\n            }\n        }\n        return parent;\n    }\n    blockPosCovered() {\n        let last = this.lastBlock;\n        return last != null && !last.breakAfter && (!last.isWidget() || (last.flags & (32 /* TileFlag.After */ | 128 /* TileFlag.IncEnd */)) > 0);\n    }\n    getBuffer(side) {\n        let flags = 2 /* TileFlag.Synced */ | (side < 0 ? 16 /* TileFlag.Before */ : 32 /* TileFlag.After */);\n        let found = this.cache.find(WidgetBufferTile, undefined, 1 /* Reused.Full */);\n        if (found)\n            found.flags = flags;\n        return found || new WidgetBufferTile(flags);\n    }\n    flushBuffer() {\n        if (this.afterWidget && !(this.afterWidget.flags & 32 /* TileFlag.After */)) {\n            this.afterWidget.parent.append(this.getBuffer(-1));\n            this.afterWidget = null;\n        }\n    }\n}\n// Helps getting efficient access to the document text.\nclass TextStream {\n    constructor(doc) {\n        this.skipCount = 0;\n        this.text = \"\";\n        this.textOff = 0;\n        this.cursor = doc.iter();\n    }\n    skip(len) {\n        // Advance the iterator past the replaced content\n        if (this.textOff + len <= this.text.length) {\n            this.textOff += len;\n        }\n        else {\n            this.skipCount += len - (this.text.length - this.textOff);\n            this.text = \"\";\n            this.textOff = 0;\n        }\n    }\n    next(maxLen) {\n        if (this.textOff == this.text.length) {\n            let { value, lineBreak, done } = this.cursor.next(this.skipCount);\n            this.skipCount = 0;\n            if (done)\n                throw new Error(\"Ran out of text content when drawing inline views\");\n            this.text = value;\n            let len = this.textOff = Math.min(maxLen, value.length);\n            return lineBreak ? null : value.slice(0, len);\n        }\n        let end = Math.min(this.text.length, this.textOff + maxLen);\n        let chars = this.text.slice(this.textOff, end);\n        this.textOff = end;\n        return chars;\n    }\n}\n// Assign the tile classes bucket numbers for caching.\nconst buckets = [WidgetTile, LineTile, TextTile, MarkTile, WidgetBufferTile, BlockWrapperTile, DocTile];\nfor (let i = 0; i < buckets.length; i++)\n    buckets[i].bucket = i;\n// Leaf tiles and line tiles may be reused in their entirety. All\n// others will get new tiles allocated, using the old DOM when\n// possible.\nclass TileCache {\n    constructor(view) {\n        this.view = view;\n        // Buckets are circular buffers, using `index` as the current\n        // position.\n        this.buckets = buckets.map(() => []);\n        this.index = buckets.map(() => 0);\n        this.reused = new Map;\n    }\n    // Put a tile in the cache.\n    add(tile) {\n        let i = tile.constructor.bucket, bucket = this.buckets[i];\n        if (bucket.length < 6 /* C.Bucket */)\n            bucket.push(tile);\n        else\n            bucket[this.index[i] = (this.index[i] + 1) % 6 /* C.Bucket */] = tile;\n    }\n    find(cls, test, type = 2 /* Reused.DOM */) {\n        let i = cls.bucket;\n        let bucket = this.buckets[i], off = this.index[i];\n        for (let j = 0; j < bucket.length; j++) {\n            // Look at the most oldest items first (first-in, first-out)\n            let index = (j + off) % bucket.length, tile = bucket[index];\n            if ((!test || test(tile)) && !this.reused.has(tile)) {\n                bucket.splice(index, 1);\n                if (index < off)\n                    this.index[i]--;\n                this.reused.set(tile, type);\n                return tile;\n            }\n        }\n        return null;\n    }\n    findWidget(widget, length, flags) {\n        let widgets = this.buckets[0];\n        if (widgets.length)\n            for (let i = 0, pass = 0;; i++) {\n                if (i == widgets.length) {\n                    if (pass)\n                        return null;\n                    pass = 1;\n                    i = 0;\n                }\n                let tile = widgets[i];\n                if (!this.reused.has(tile) &&\n                    (pass == 0 ? tile.widget.compare(widget)\n                        : tile.widget.constructor == widget.constructor && widget.updateDOM(tile.dom, this.view, tile.widget))) {\n                    widgets.splice(i, 1);\n                    if (i < this.index[0])\n                        this.index[0]--;\n                    if (tile.widget == widget && tile.length == length && (tile.flags & (496 /* TileFlag.Widget */ | 1 /* TileFlag.BreakAfter */)) == flags) {\n                        this.reused.set(tile, 1 /* Reused.Full */);\n                        return tile;\n                    }\n                    else {\n                        this.reused.set(tile, 2 /* Reused.DOM */);\n                        return new WidgetTile(tile.dom, length, widget, (tile.flags & ~(496 /* TileFlag.Widget */ | 1 /* TileFlag.BreakAfter */)) | flags);\n                    }\n                }\n            }\n    }\n    reuse(tile) {\n        this.reused.set(tile, 1 /* Reused.Full */);\n        return tile;\n    }\n    maybeReuse(tile, type = 2 /* Reused.DOM */) {\n        if (this.reused.has(tile))\n            return undefined;\n        this.reused.set(tile, type);\n        return tile.dom;\n    }\n    clear() {\n        for (let i = 0; i < this.buckets.length; i++)\n            this.buckets[i].length = this.index[i] = 0;\n    }\n}\n// This class organizes a pass over the document, guided by the array\n// of replaced ranges. For ranges that haven't changed, it iterates\n// the old tree and copies its content into the new document. For\n// changed ranges, it runs a decoration iterator to guide generation\n// of content.\nclass TileUpdate {\n    constructor(view, old, blockWrappers, decorations, disallowBlockEffectsFor) {\n        this.view = view;\n        this.decorations = decorations;\n        this.disallowBlockEffectsFor = disallowBlockEffectsFor;\n        this.openWidget = false;\n        this.openMarks = 0;\n        this.cache = new TileCache(view);\n        this.text = new TextStream(view.state.doc);\n        this.builder = new TileBuilder(this.cache, new DocTile(view, view.contentDOM), RangeSet.iter(blockWrappers));\n        this.cache.reused.set(old, 2 /* Reused.DOM */);\n        this.old = new TilePointer(old);\n        this.reuseWalker = {\n            skip: (tile, from, to) => {\n                this.cache.add(tile);\n                if (tile.isComposite())\n                    return false;\n            },\n            enter: tile => this.cache.add(tile),\n            leave: () => { },\n            break: () => { }\n        };\n    }\n    run(changes, composition) {\n        let compositionContext = composition && this.getCompositionContext(composition.text);\n        for (let posA = 0, posB = 0, i = 0;;) {\n            let next = i < changes.length ? changes[i++] : null;\n            let skipA = next ? next.fromA : this.old.root.length;\n            if (skipA > posA) {\n                let len = skipA - posA;\n                this.preserve(len, !i, !next);\n                posA = skipA;\n                posB += len;\n            }\n            if (!next)\n                break;\n            // Compositions need to be handled specially, forcing the\n            // focused text node and its parent nodes to remain stable at\n            // that point in the document.\n            if (composition && next.fromA <= composition.range.fromA && next.toA >= composition.range.toA) {\n                this.forward(next.fromA, composition.range.fromA, composition.range.fromA < composition.range.toA ? 1 : -1);\n                this.emit(posB, composition.range.fromB);\n                this.builder.flushBuffer();\n                this.cache.clear(); // Must not reuse DOM across composition\n                this.builder.addComposition(composition, compositionContext);\n                this.text.skip(composition.range.toB - composition.range.fromB);\n                this.forward(composition.range.fromA, next.toA);\n                this.emit(composition.range.toB, next.toB);\n            }\n            else {\n                this.forward(next.fromA, next.toA);\n                this.emit(posB, next.toB);\n            }\n            posB = next.toB;\n            posA = next.toA;\n        }\n        if (this.builder.curLine)\n            this.builder.endLine();\n        return this.builder.root;\n    }\n    preserve(length, incStart, incEnd) {\n        let activeMarks = getMarks(this.old), openMarks = this.openMarks;\n        this.old.advance(length, incEnd ? 1 : -1, {\n            skip: (tile, from, to) => {\n                if (tile.isWidget()) {\n                    if (this.openWidget) {\n                        this.builder.continueWidget(to - from);\n                    }\n                    else {\n                        let widget = to > 0 || from < tile.length\n                            ? WidgetTile.of(tile.widget, this.view, to - from, tile.flags & 496 /* TileFlag.Widget */, this.cache.maybeReuse(tile))\n                            : this.cache.reuse(tile);\n                        if (widget.flags & 256 /* TileFlag.Block */) {\n                            widget.flags &= ~1 /* TileFlag.BreakAfter */;\n                            this.builder.addBlockWidget(widget);\n                        }\n                        else {\n                            this.builder.ensureLine(null);\n                            this.builder.addInlineWidget(widget, activeMarks, openMarks);\n                            openMarks = activeMarks.length;\n                        }\n                    }\n                }\n                else if (tile.isText()) {\n                    this.builder.ensureLine(null);\n                    if (!from && to == tile.length && !this.cache.reused.has(tile)) {\n                        this.builder.addText(tile.text, activeMarks, openMarks, this.cache.reuse(tile));\n                    }\n                    else {\n                        this.cache.add(tile);\n                        this.builder.addText(tile.text.slice(from, to), activeMarks, openMarks);\n                    }\n                    openMarks = activeMarks.length;\n                }\n                else if (tile.isLine()) {\n                    tile.flags &= ~1 /* TileFlag.BreakAfter */;\n                    this.cache.reused.set(tile, 1 /* Reused.Full */);\n                    this.builder.addLine(tile);\n                }\n                else if (tile instanceof WidgetBufferTile) {\n                    this.cache.add(tile);\n                }\n                else if (tile instanceof MarkTile) {\n                    this.builder.ensureLine(null);\n                    this.builder.addMark(tile, activeMarks, openMarks);\n                    this.cache.reused.set(tile, 1 /* Reused.Full */);\n                    openMarks = activeMarks.length;\n                }\n                else {\n                    return false;\n                }\n                this.openWidget = false;\n            },\n            enter: (tile) => {\n                if (tile.isLine()) {\n                    this.builder.addLineStart(tile.attrs, this.cache.maybeReuse(tile));\n                }\n                else {\n                    this.cache.add(tile);\n                    if (tile instanceof MarkTile)\n                        activeMarks.unshift(tile.mark);\n                }\n                this.openWidget = false;\n            },\n            leave: (tile) => {\n                if (tile.isLine()) {\n                    if (activeMarks.length)\n                        activeMarks.length = openMarks = 0;\n                }\n                else if (tile instanceof MarkTile) {\n                    activeMarks.shift();\n                    openMarks = Math.min(openMarks, activeMarks.length);\n                }\n            },\n            break: () => {\n                this.builder.addBreak();\n                this.openWidget = false;\n            },\n        });\n        this.text.skip(length);\n    }\n    emit(from, to) {\n        let pendingLineAttrs = null;\n        let b = this.builder, markCount = -1;\n        let openEnd = RangeSet.spans(this.decorations, from, to, {\n            point: (from, to, deco, active, openStart, index) => {\n                if (deco instanceof PointDecoration) {\n                    if (this.disallowBlockEffectsFor[index]) {\n                        if (deco.block)\n                            throw new RangeError(\"Block decorations may not be specified via plugins\");\n                        if (to > this.view.state.doc.lineAt(from).to)\n                            throw new RangeError(\"Decorations that replace line breaks may not be specified via plugins\");\n                    }\n                    markCount = active.length;\n                    if (openStart > active.length) {\n                        b.continueWidget(to - from);\n                    }\n                    else {\n                        let widget = deco.widget || (deco.block ? NullWidget.block : NullWidget.inline);\n                        let flags = widgetFlags(deco);\n                        let tile = this.cache.findWidget(widget, to - from, flags) || WidgetTile.of(widget, this.view, to - from, flags);\n                        if (deco.block) {\n                            if (deco.startSide > 0)\n                                b.addLineStartIfNotCovered(pendingLineAttrs);\n                            b.addBlockWidget(tile);\n                        }\n                        else {\n                            b.ensureLine(pendingLineAttrs);\n                            b.addInlineWidget(tile, active, openStart);\n                        }\n                    }\n                    pendingLineAttrs = null;\n                }\n                else {\n                    pendingLineAttrs = addLineDeco(pendingLineAttrs, deco);\n                }\n                if (to > from)\n                    this.text.skip(to - from);\n            },\n            span: (from, to, active, openStart) => {\n                for (let pos = from; pos < to;) {\n                    let chars = this.text.next(Math.min(512 /* C.Chunk */, to - pos));\n                    if (chars == null) { // Line break\n                        b.addLineStartIfNotCovered(pendingLineAttrs);\n                        b.addBreak();\n                        pos++;\n                    }\n                    else {\n                        b.ensureLine(pendingLineAttrs);\n                        b.addText(chars, active, pos == from ? openStart : active.length);\n                        pos += chars.length;\n                    }\n                    pendingLineAttrs = null;\n                }\n                markCount = active.length;\n            }\n        });\n        if (markCount > -1)\n            this.openWidget = openEnd > markCount;\n        if (!this.openWidget)\n            b.addLineStartIfNotCovered(pendingLineAttrs);\n        this.openMarks = openEnd;\n    }\n    forward(from, to, side = 1) {\n        if (to - from <= 10) {\n            this.old.advance(to - from, side, this.reuseWalker);\n        }\n        else {\n            this.old.advance(5, -1, this.reuseWalker);\n            this.old.advance(to - from - 10, -1);\n            this.old.advance(5, side, this.reuseWalker);\n        }\n    }\n    getCompositionContext(text) {\n        let marks = [], line = null;\n        for (let parent = text.parentNode;; parent = parent.parentNode) {\n            let tile = Tile.get(parent);\n            if (parent == this.view.contentDOM)\n                break;\n            if (tile instanceof MarkTile)\n                marks.push(tile);\n            else if (tile === null || tile === void 0 ? void 0 : tile.isLine())\n                line = tile;\n            else if (tile instanceof BlockWrapperTile) ; // Ignore\n            else if (parent.nodeName == \"DIV\" && !line && parent != this.view.contentDOM)\n                line = new LineTile(parent, lineBaseAttrs);\n            else if (!line)\n                marks.push(MarkTile.of(new MarkDecoration({ tagName: parent.nodeName.toLowerCase(), attributes: getAttrs(parent) }), parent));\n        }\n        return { line: line, marks };\n    }\n}\nfunction hasContent(tile, requireText) {\n    let scan = (tile) => {\n        for (let ch of tile.children)\n            if ((requireText ? ch.isText() : ch.length) || scan(ch))\n                return true;\n        return false;\n    };\n    return scan(tile);\n}\nfunction widgetFlags(deco) {\n    let flags = deco.isReplace ? (deco.startSide < 0 ? 64 /* TileFlag.IncStart */ : 0) | (deco.endSide > 0 ? 128 /* TileFlag.IncEnd */ : 0)\n        : (deco.startSide > 0 ? 32 /* TileFlag.After */ : 16 /* TileFlag.Before */);\n    if (deco.block)\n        flags |= 256 /* TileFlag.Block */;\n    return flags;\n}\nconst lineBaseAttrs = { class: \"cm-line\" };\nfunction addLineDeco(value, deco) {\n    let attrs = deco.spec.attributes, cls = deco.spec.class;\n    if (!attrs && !cls)\n        return value;\n    if (!value)\n        value = { class: \"cm-line\" };\n    if (attrs)\n        combineAttrs(attrs, value);\n    if (cls)\n        value.class += \" \" + cls;\n    return value;\n}\nfunction getMarks(ptr) {\n    let found = [];\n    for (let i = ptr.parents.length; i > 1; i--) {\n        let tile = i == ptr.parents.length ? ptr.tile : ptr.parents[i].tile;\n        if (tile instanceof MarkTile)\n            found.push(tile.mark);\n    }\n    return found;\n}\nfunction freeNode(node) {\n    let tile = Tile.get(node);\n    if (tile)\n        tile.setDOM(node.cloneNode());\n    return node;\n}\nclass NullWidget extends WidgetType {\n    constructor(tag) {\n        super();\n        this.tag = tag;\n    }\n    eq(other) { return other.tag == this.tag; }\n    toDOM() { return document.createElement(this.tag); }\n    updateDOM(elt) { return elt.nodeName.toLowerCase() == this.tag; }\n    get isHidden() { return true; }\n}\nNullWidget.inline = /*@__PURE__*/new NullWidget(\"span\");\nNullWidget.block = /*@__PURE__*/new NullWidget(\"div\");\nconst BreakWidget = /*@__PURE__*/new class extends WidgetType {\n    toDOM() { return document.createElement(\"br\"); }\n    get isHidden() { return true; }\n    get editable() { return true; }\n};\n\nclass DocView {\n    constructor(view) {\n        this.view = view;\n        this.decorations = [];\n        this.blockWrappers = [];\n        this.dynamicDecorationMap = [false];\n        this.domChanged = null;\n        this.hasComposition = null;\n        this.editContextFormatting = Decoration.none;\n        this.lastCompositionAfterCursor = false;\n        // Track a minimum width for the editor. When measuring sizes in\n        // measureVisibleLineHeights, this is updated to point at the width\n        // of a given element and its extent in the document. When a change\n        // happens in that range, these are reset. That way, once we've seen\n        // a line/element of a given length, we keep the editor wide enough\n        // to fit at least that element, until it is changed, at which point\n        // we forget it again.\n        this.minWidth = 0;\n        this.minWidthFrom = 0;\n        this.minWidthTo = 0;\n        // Track whether the DOM selection was set in a lossy way, so that\n        // we don't mess it up when reading it back it\n        this.impreciseAnchor = null;\n        this.impreciseHead = null;\n        this.forceSelection = false;\n        // Used by the resize observer to ignore resizes that we caused\n        // ourselves\n        this.lastUpdate = Date.now();\n        this.updateDeco();\n        this.tile = new DocTile(view, view.contentDOM);\n        this.updateInner([new ChangedRange(0, 0, 0, view.state.doc.length)], null);\n    }\n    // Update the document view to a given state.\n    update(update) {\n        var _a;\n        let changedRanges = update.changedRanges;\n        if (this.minWidth > 0 && changedRanges.length) {\n            if (!changedRanges.every(({ fromA, toA }) => toA < this.minWidthFrom || fromA > this.minWidthTo)) {\n                this.minWidth = this.minWidthFrom = this.minWidthTo = 0;\n            }\n            else {\n                this.minWidthFrom = update.changes.mapPos(this.minWidthFrom, 1);\n                this.minWidthTo = update.changes.mapPos(this.minWidthTo, 1);\n            }\n        }\n        this.updateEditContextFormatting(update);\n        let readCompositionAt = -1;\n        if (this.view.inputState.composing >= 0 && !this.view.observer.editContext) {\n            if ((_a = this.domChanged) === null || _a === void 0 ? void 0 : _a.newSel)\n                readCompositionAt = this.domChanged.newSel.head;\n            else if (!touchesComposition(update.changes, this.hasComposition) && !update.selectionSet)\n                readCompositionAt = update.state.selection.main.head;\n        }\n        let composition = readCompositionAt > -1 ? findCompositionRange(this.view, update.changes, readCompositionAt) : null;\n        this.domChanged = null;\n        if (this.hasComposition) {\n            let { from, to } = this.hasComposition;\n            changedRanges = new ChangedRange(from, to, update.changes.mapPos(from, -1), update.changes.mapPos(to, 1))\n                .addToSet(changedRanges.slice());\n        }\n        this.hasComposition = composition ? { from: composition.range.fromB, to: composition.range.toB } : null;\n        // When the DOM nodes around the selection are moved to another\n        // parent, Chrome sometimes reports a different selection through\n        // getSelection than the one that it actually shows to the user.\n        // This forces a selection update when lines are joined to work\n        // around that. Issue #54\n        if ((browser.ie || browser.chrome) && !composition && update &&\n            update.state.doc.lines != update.startState.doc.lines)\n            this.forceSelection = true;\n        let prevDeco = this.decorations, prevWrappers = this.blockWrappers;\n        this.updateDeco();\n        let decoDiff = findChangedDeco(prevDeco, this.decorations, update.changes);\n        if (decoDiff.length)\n            changedRanges = ChangedRange.extendWithRanges(changedRanges, decoDiff);\n        let blockDiff = findChangedWrappers(prevWrappers, this.blockWrappers, update.changes);\n        if (blockDiff.length)\n            changedRanges = ChangedRange.extendWithRanges(changedRanges, blockDiff);\n        if (composition && !changedRanges.some(r => r.fromA <= composition.range.fromA && r.toA >= composition.range.toA))\n            changedRanges = composition.range.addToSet(changedRanges.slice());\n        if ((this.tile.flags & 2 /* TileFlag.Synced */) && changedRanges.length == 0) {\n            return false;\n        }\n        else {\n            this.updateInner(changedRanges, composition);\n            if (update.transactions.length)\n                this.lastUpdate = Date.now();\n            return true;\n        }\n    }\n    // Used by update and the constructor do perform the actual DOM\n    // update\n    updateInner(changes, composition) {\n        this.view.viewState.mustMeasureContent = true;\n        let { observer } = this.view;\n        observer.ignore(() => {\n            if (composition || changes.length) {\n                let oldTile = this.tile;\n                let builder = new TileUpdate(this.view, oldTile, this.blockWrappers, this.decorations, this.dynamicDecorationMap);\n                if (composition && Tile.get(composition.text))\n                    builder.cache.reused.set(Tile.get(composition.text), 2 /* Reused.DOM */);\n                this.tile = builder.run(changes, composition);\n                destroyDropped(oldTile, builder.cache.reused);\n            }\n            // Lock the height during redrawing, since Chrome sometimes\n            // messes with the scroll position during DOM mutation (though\n            // no relayout is triggered and I cannot imagine how it can\n            // recompute the scroll position without a layout)\n            this.tile.dom.style.height = this.view.viewState.contentHeight / this.view.scaleY + \"px\";\n            this.tile.dom.style.flexBasis = this.minWidth ? this.minWidth + \"px\" : \"\";\n            // Chrome will sometimes, when DOM mutations occur directly\n            // around the selection, get confused and report a different\n            // selection from the one it displays (issue #218). This tries\n            // to detect that situation.\n            let track = browser.chrome || browser.ios ? { node: observer.selectionRange.focusNode, written: false } : undefined;\n            this.tile.sync(track);\n            if (track && (track.written || observer.selectionRange.focusNode != track.node || !this.tile.dom.contains(track.node)))\n                this.forceSelection = true;\n            this.tile.dom.style.height = \"\";\n        });\n        let gaps = [];\n        if (this.view.viewport.from || this.view.viewport.to < this.view.state.doc.length)\n            for (let child of this.tile.children)\n                if (child.isWidget() && child.widget instanceof BlockGapWidget)\n                    gaps.push(child.dom);\n        observer.updateGaps(gaps);\n    }\n    updateEditContextFormatting(update) {\n        this.editContextFormatting = this.editContextFormatting.map(update.changes);\n        for (let tr of update.transactions)\n            for (let effect of tr.effects)\n                if (effect.is(setEditContextFormatting)) {\n                    this.editContextFormatting = effect.value;\n                }\n    }\n    // Sync the DOM selection to this.state.selection\n    updateSelection(mustRead = false, fromPointer = false) {\n        if (mustRead || !this.view.observer.selectionRange.focusNode)\n            this.view.observer.readSelectionRange();\n        let { dom } = this.tile;\n        let activeElt = this.view.root.activeElement, focused = activeElt == dom;\n        let selectionNotFocus = !focused && !(this.view.state.facet(editable) || dom.tabIndex > -1) &&\n            hasSelection(dom, this.view.observer.selectionRange) && !(activeElt && dom.contains(activeElt));\n        if (!(focused || fromPointer || selectionNotFocus))\n            return;\n        let force = this.forceSelection;\n        this.forceSelection = false;\n        let main = this.view.state.selection.main, anchor, head;\n        if (main.empty) {\n            head = anchor = this.inlineDOMNearPos(main.anchor, main.assoc || 1);\n        }\n        else {\n            head = this.inlineDOMNearPos(main.head, main.head == main.from ? 1 : -1);\n            anchor = this.inlineDOMNearPos(main.anchor, main.anchor == main.from ? 1 : -1);\n        }\n        // Always reset on Firefox when next to an uneditable node to\n        // avoid invisible cursor bugs (#111)\n        if (browser.gecko && main.empty && !this.hasComposition && betweenUneditable(anchor)) {\n            let dummy = document.createTextNode(\"\");\n            this.view.observer.ignore(() => anchor.node.insertBefore(dummy, anchor.node.childNodes[anchor.offset] || null));\n            anchor = head = new DOMPos(dummy, 0);\n            force = true;\n        }\n        let domSel = this.view.observer.selectionRange;\n        // If the selection is already here, or in an equivalent position, don't touch it\n        if (force || !domSel.focusNode || (!isEquivalentPosition(anchor.node, anchor.offset, domSel.anchorNode, domSel.anchorOffset) ||\n            !isEquivalentPosition(head.node, head.offset, domSel.focusNode, domSel.focusOffset)) && !this.suppressWidgetCursorChange(domSel, main)) {\n            this.view.observer.ignore(() => {\n                // Chrome Android will hide the virtual keyboard when tapping\n                // inside an uneditable node, and not bring it back when we\n                // move the cursor to its proper position. This tries to\n                // restore the keyboard by cycling focus.\n                if (browser.android && browser.chrome && dom.contains(domSel.focusNode) &&\n                    inUneditable(domSel.focusNode, dom)) {\n                    dom.blur();\n                    dom.focus({ preventScroll: true });\n                }\n                let rawSel = getSelection(this.view.root);\n                if (!rawSel) ;\n                else if (main.empty) {\n                    // Work around https://bugzilla.mozilla.org/show_bug.cgi?id=1612076\n                    if (browser.gecko) {\n                        let nextTo = nextToUneditable(anchor.node, anchor.offset);\n                        if (nextTo && nextTo != (1 /* NextTo.Before */ | 2 /* NextTo.After */)) {\n                            let text = (nextTo == 1 /* NextTo.Before */ ? textNodeBefore : textNodeAfter)(anchor.node, anchor.offset);\n                            if (text)\n                                anchor = new DOMPos(text.node, text.offset);\n                        }\n                    }\n                    rawSel.collapse(anchor.node, anchor.offset);\n                    if (main.bidiLevel != null && rawSel.caretBidiLevel !== undefined)\n                        rawSel.caretBidiLevel = main.bidiLevel;\n                }\n                else if (rawSel.extend) {\n                    // Selection.extend can be used to create an 'inverted' selection\n                    // (one where the focus is before the anchor), but not all\n                    // browsers support it yet.\n                    rawSel.collapse(anchor.node, anchor.offset);\n                    // Safari will ignore the call above when the editor is\n                    // hidden, and then raise an error on the call to extend\n                    // (#940).\n                    try {\n                        rawSel.extend(head.node, head.offset);\n                    }\n                    catch (_) { }\n                }\n                else {\n                    // Primitive (IE) way\n                    let range = document.createRange();\n                    if (main.anchor > main.head)\n                        [anchor, head] = [head, anchor];\n                    range.setEnd(head.node, head.offset);\n                    range.setStart(anchor.node, anchor.offset);\n                    rawSel.removeAllRanges();\n                    rawSel.addRange(range);\n                }\n                if (selectionNotFocus && this.view.root.activeElement == dom) {\n                    dom.blur();\n                    if (activeElt)\n                        activeElt.focus();\n                }\n            });\n            this.view.observer.setSelectionRange(anchor, head);\n        }\n        this.impreciseAnchor = anchor.precise ? null : new DOMPos(domSel.anchorNode, domSel.anchorOffset);\n        this.impreciseHead = head.precise ? null : new DOMPos(domSel.focusNode, domSel.focusOffset);\n    }\n    // If a zero-length widget is inserted next to the cursor during\n    // composition, avoid moving it across it and disrupting the\n    // composition.\n    suppressWidgetCursorChange(sel, cursor) {\n        return this.hasComposition && cursor.empty &&\n            isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset) &&\n            this.posFromDOM(sel.focusNode, sel.focusOffset) == cursor.head;\n    }\n    enforceCursorAssoc() {\n        if (this.hasComposition)\n            return;\n        let { view } = this, cursor = view.state.selection.main;\n        let sel = getSelection(view.root);\n        let { anchorNode, anchorOffset } = view.observer.selectionRange;\n        if (!sel || !cursor.empty || !cursor.assoc || !sel.modify)\n            return;\n        let line = this.lineAt(cursor.head, cursor.assoc);\n        if (!line)\n            return;\n        let lineStart = line.posAtStart;\n        if (cursor.head == lineStart || cursor.head == lineStart + line.length)\n            return;\n        let before = this.coordsAt(cursor.head, -1), after = this.coordsAt(cursor.head, 1);\n        if (!before || !after || before.bottom > after.top)\n            return;\n        let dom = this.domAtPos(cursor.head + cursor.assoc, cursor.assoc);\n        sel.collapse(dom.node, dom.offset);\n        sel.modify(\"move\", cursor.assoc < 0 ? \"forward\" : \"backward\", \"lineboundary\");\n        // This can go wrong in corner cases like single-character lines,\n        // so check and reset if necessary.\n        view.observer.readSelectionRange();\n        let newRange = view.observer.selectionRange;\n        if (view.docView.posFromDOM(newRange.anchorNode, newRange.anchorOffset) != cursor.from)\n            sel.collapse(anchorNode, anchorOffset);\n    }\n    posFromDOM(node, offset) {\n        let tile = this.tile.nearest(node);\n        if (!tile)\n            return this.tile.dom.compareDocumentPosition(node) & 2 /* PRECEDING */ ? 0 : this.view.state.doc.length;\n        let start = tile.posAtStart;\n        if (tile.isComposite()) {\n            let after;\n            if (node == tile.dom) {\n                after = tile.dom.childNodes[offset];\n            }\n            else {\n                let bias = maxOffset(node) == 0 ? 0 : offset == 0 ? -1 : 1;\n                for (;;) {\n                    let parent = node.parentNode;\n                    if (parent == tile.dom)\n                        break;\n                    if (bias == 0 && parent.firstChild != parent.lastChild) {\n                        if (node == parent.firstChild)\n                            bias = -1;\n                        else\n                            bias = 1;\n                    }\n                    node = parent;\n                }\n                if (bias < 0)\n                    after = node;\n                else\n                    after = node.nextSibling;\n            }\n            if (after == tile.dom.firstChild)\n                return start;\n            while (after && !Tile.get(after))\n                after = after.nextSibling;\n            if (!after)\n                return start + tile.length;\n            for (let i = 0, pos = start;; i++) {\n                let child = tile.children[i];\n                if (child.dom == after)\n                    return pos;\n                pos += child.length + child.breakAfter;\n            }\n        }\n        else if (tile.isText()) {\n            return node == tile.dom ? start + offset : start + (offset ? tile.length : 0);\n        }\n        else {\n            return start;\n        }\n    }\n    domAtPos(pos, side) {\n        let { tile, offset } = this.tile.resolveBlock(pos, side);\n        if (tile.isWidget())\n            return tile.domPosFor(offset, side);\n        return tile.domIn(offset, side);\n    }\n    inlineDOMNearPos(pos, side) {\n        let before, beforeOff = -1, beforeBad = false;\n        let after, afterOff = -1, afterBad = false;\n        this.tile.blockTiles((tile, off) => {\n            if (tile.isWidget()) {\n                if ((tile.flags & 32 /* TileFlag.After */) && off >= pos)\n                    return true;\n                if (tile.flags & 16 /* TileFlag.Before */)\n                    beforeBad = true;\n            }\n            else {\n                let end = off + tile.length;\n                if (off <= pos) {\n                    before = tile;\n                    beforeOff = pos - off;\n                    beforeBad = end < pos;\n                }\n                if (end >= pos && !after) {\n                    after = tile;\n                    afterOff = pos - off;\n                    afterBad = off > pos;\n                }\n                if (off > pos && after)\n                    return true;\n            }\n        });\n        if (!before && !after)\n            return this.domAtPos(pos, side);\n        if (beforeBad && after)\n            before = null;\n        else if (afterBad && before)\n            after = null;\n        return before && side < 0 || !after ? before.domIn(beforeOff, side) : after.domIn(afterOff, side);\n    }\n    // Get the coord of the element at the given side of the given\n    // position. If rtl is given, flatten it using that text direction.\n    coordsAt(pos, side, rtl) {\n        let { tile, offset } = this.tile.resolveBlock(pos, side);\n        if (tile.isWidget()) {\n            if (tile.widget instanceof BlockGapWidget)\n                return null;\n            return tile.coordsInWidget(offset, side, true);\n        }\n        return tile.coordsIn(offset, side, rtl);\n    }\n    lineAt(pos, side) {\n        let { tile } = this.tile.resolveBlock(pos, side);\n        return tile.isLine() ? tile : null;\n    }\n    coordsForChar(pos) {\n        let { tile, offset } = this.tile.resolveBlock(pos, 1);\n        if (!tile.isLine())\n            return null;\n        function scan(tile, offset) {\n            if (tile.isComposite()) {\n                for (let ch of tile.children) {\n                    if (ch.length >= offset) {\n                        let found = scan(ch, offset);\n                        if (found)\n                            return found;\n                    }\n                    offset -= ch.length;\n                    if (offset < 0)\n                        break;\n                }\n            }\n            else if (tile.isText() && offset < tile.length) {\n                let end = findClusterBreak(tile.text, offset);\n                if (end == offset)\n                    return null;\n                let rects = textRange(tile.dom, offset, end).getClientRects();\n                for (let i = 0; i < rects.length; i++) {\n                    let rect = rects[i];\n                    if (i == rects.length - 1 || rect.top < rect.bottom && rect.left < rect.right)\n                        return rect;\n                }\n            }\n            return null;\n        }\n        return scan(tile, offset);\n    }\n    measureVisibleLineHeights(viewport) {\n        let result = [], { from, to } = viewport;\n        let contentWidth = this.view.contentDOM.clientWidth;\n        let isWider = contentWidth > Math.max(this.view.scrollDOM.clientWidth, this.minWidth) + 1;\n        let widest = -1, ltr = this.view.textDirection == Direction.LTR;\n        let spaceAbove = 0;\n        let scan = (tile, pos, measureBounds) => {\n            for (let i = 0; i < tile.children.length; i++) {\n                if (pos > to)\n                    break;\n                let child = tile.children[i], end = pos + child.length;\n                let childRect = child.dom.getBoundingClientRect(), { height } = childRect;\n                if (measureBounds && !i)\n                    spaceAbove += childRect.top - measureBounds.top;\n                if (child instanceof BlockWrapperTile) {\n                    if (end > from)\n                        scan(child, pos, childRect);\n                }\n                else if (pos >= from) {\n                    if (spaceAbove > 0)\n                        result.push(-spaceAbove);\n                    result.push(height + spaceAbove);\n                    spaceAbove = 0;\n                    if (isWider) {\n                        let last = child.dom.lastChild;\n                        let rects = last ? clientRectsFor(last) : [];\n                        if (rects.length) {\n                            let rect = rects[rects.length - 1];\n                            let width = ltr ? rect.right - childRect.left : childRect.right - rect.left;\n                            if (width > widest) {\n                                widest = width;\n                                this.minWidth = contentWidth;\n                                this.minWidthFrom = pos;\n                                this.minWidthTo = end;\n                            }\n                        }\n                    }\n                }\n                if (measureBounds && i == tile.children.length - 1)\n                    spaceAbove += measureBounds.bottom - childRect.bottom;\n                pos = end + child.breakAfter;\n            }\n        };\n        scan(this.tile, 0, null);\n        return result;\n    }\n    textDirectionAt(pos) {\n        let { tile } = this.tile.resolveBlock(pos, 1);\n        return getComputedStyle(tile.dom).direction == \"rtl\" ? Direction.RTL : Direction.LTR;\n    }\n    measureTextSize() {\n        let lineMeasure = this.tile.blockTiles(tile => {\n            if (tile.isLine() && tile.children.length && tile.length <= 20) {\n                let totalWidth = 0, textHeight;\n                for (let child of tile.children) {\n                    if (!child.isText() || /[^ -~]/.test(child.text))\n                        return undefined;\n                    let rects = clientRectsFor(child.dom);\n                    if (rects.length != 1)\n                        return undefined;\n                    totalWidth += rects[0].width;\n                    textHeight = rects[0].height;\n                }\n                if (totalWidth)\n                    return {\n                        lineHeight: tile.dom.getBoundingClientRect().height,\n                        charWidth: totalWidth / tile.length,\n                        textHeight\n                    };\n            }\n        });\n        if (lineMeasure)\n            return lineMeasure;\n        // If no workable line exists, force a layout of a measurable element\n        let dummy = document.createElement(\"div\"), lineHeight, charWidth, textHeight;\n        dummy.className = \"cm-line\";\n        dummy.style.width = \"99999px\";\n        dummy.style.position = \"absolute\";\n        dummy.textContent = \"abc def ghi jkl mno pqr stu\";\n        this.view.observer.ignore(() => {\n            this.tile.dom.appendChild(dummy);\n            let rect = clientRectsFor(dummy.firstChild)[0];\n            lineHeight = dummy.getBoundingClientRect().height;\n            charWidth = rect && rect.width ? rect.width / 27 : 7;\n            textHeight = rect && rect.height ? rect.height : lineHeight;\n            dummy.remove();\n        });\n        return { lineHeight, charWidth, textHeight };\n    }\n    computeBlockGapDeco() {\n        let deco = [], vs = this.view.viewState;\n        for (let pos = 0, i = 0;; i++) {\n            let next = i == vs.viewports.length ? null : vs.viewports[i];\n            let end = next ? next.from - 1 : this.view.state.doc.length;\n            if (end > pos) {\n                let height = (vs.lineBlockAt(end).bottom - vs.lineBlockAt(pos).top) / this.view.scaleY;\n                deco.push(Decoration.replace({\n                    widget: new BlockGapWidget(height),\n                    block: true,\n                    inclusive: true,\n                    isBlockGap: true,\n                }).range(pos, end));\n            }\n            if (!next)\n                break;\n            pos = next.to + 1;\n        }\n        return Decoration.set(deco);\n    }\n    updateDeco() {\n        let i = 1;\n        let allDeco = this.view.state.facet(decorations).map(d => {\n            let dynamic = this.dynamicDecorationMap[i++] = typeof d == \"function\";\n            return dynamic ? d(this.view) : d;\n        });\n        let dynamicOuter = false, outerDeco = this.view.state.facet(outerDecorations).map((d, i) => {\n            let dynamic = typeof d == \"function\";\n            if (dynamic)\n                dynamicOuter = true;\n            return dynamic ? d(this.view) : d;\n        });\n        if (outerDeco.length) {\n            this.dynamicDecorationMap[i++] = dynamicOuter;\n            allDeco.push(RangeSet.join(outerDeco));\n        }\n        this.decorations = [\n            this.editContextFormatting,\n            ...allDeco,\n            this.computeBlockGapDeco(),\n            this.view.viewState.lineGapDeco\n        ];\n        while (i < this.decorations.length)\n            this.dynamicDecorationMap[i++] = false;\n        this.blockWrappers = this.view.state.facet(blockWrappers).map(v => typeof v == \"function\" ? v(this.view) : v);\n    }\n    scrollIntoView(target) {\n        if (target.isSnapshot) {\n            let ref = this.view.viewState.lineBlockAt(target.range.head);\n            this.view.scrollDOM.scrollTop = ref.top - target.yMargin;\n            this.view.scrollDOM.scrollLeft = target.xMargin;\n            return;\n        }\n        for (let handler of this.view.state.facet(scrollHandler)) {\n            try {\n                if (handler(this.view, target.range, target))\n                    return true;\n            }\n            catch (e) {\n                logException(this.view.state, e, \"scroll handler\");\n            }\n        }\n        let { range } = target;\n        let rect = this.coordsAt(range.head, range.assoc || (range.head > range.anchor ? -1 : 1)), other;\n        if (!rect)\n            return;\n        if (!range.empty && (other = this.coordsAt(range.anchor, range.anchor > range.head ? -1 : 1)))\n            rect = { left: Math.min(rect.left, other.left), top: Math.min(rect.top, other.top),\n                right: Math.max(rect.right, other.right), bottom: Math.max(rect.bottom, other.bottom) };\n        let margins = getScrollMargins(this.view);\n        let targetRect = {\n            left: rect.left - margins.left, top: rect.top - margins.top,\n            right: rect.right + margins.right, bottom: rect.bottom + margins.bottom\n        };\n        let { offsetWidth, offsetHeight } = this.view.scrollDOM;\n        scrollRectIntoView(this.view.scrollDOM, targetRect, range.head < range.anchor ? -1 : 1, target.x, target.y, Math.max(Math.min(target.xMargin, offsetWidth), -offsetWidth), Math.max(Math.min(target.yMargin, offsetHeight), -offsetHeight), this.view.textDirection == Direction.LTR);\n        // On mobile browsers, the visual viewport may be smaller than the\n        // actual reported viewport, causing scrollRectIntoView to fail to\n        // scroll properly. Unfortunately, this visual viewport cannot be\n        // updated directly, and scrollIntoView is the only way a script\n        // can affect it. So this tries to kludge around the problem by\n        // calling scrollIntoView on the scroll target's line.\n        if (window.visualViewport && window.innerHeight - window.visualViewport.height > 1 &&\n            (rect.top > window.visualViewport.offsetTop + window.visualViewport.height ||\n                rect.bottom < window.visualViewport.offsetTop)) {\n            let line = this.view.docView.lineAt(range.head, 1);\n            if (line) {\n                let stack = getScrollStack(line.dom);\n                line.dom.scrollIntoView({ block: \"nearest\" });\n                restoreScrollStack(stack, false);\n            }\n        }\n    }\n    lineHasWidget(pos) {\n        let scan = (child) => child.isWidget() || child.children.some(scan);\n        return scan(this.tile.resolveBlock(pos, 1).tile);\n    }\n    destroy() {\n        destroyDropped(this.tile);\n    }\n}\nfunction destroyDropped(tile, reused) {\n    let r = reused === null || reused === void 0 ? void 0 : reused.get(tile);\n    if (r != 1 /* Reused.Full */) {\n        if (r == null)\n            tile.destroy();\n        for (let ch of tile.children)\n            destroyDropped(ch, reused);\n    }\n}\nfunction betweenUneditable(pos) {\n    return pos.node.nodeType == 1 && pos.node.firstChild &&\n        (pos.offset == 0 || pos.node.childNodes[pos.offset - 1].contentEditable == \"false\") &&\n        (pos.offset == pos.node.childNodes.length || pos.node.childNodes[pos.offset].contentEditable == \"false\");\n}\nfunction findCompositionNode(view, headPos) {\n    let sel = view.observer.selectionRange;\n    if (!sel.focusNode)\n        return null;\n    let textBefore = textNodeBefore(sel.focusNode, sel.focusOffset);\n    let textAfter = textNodeAfter(sel.focusNode, sel.focusOffset);\n    let textNode = textBefore || textAfter;\n    if (textAfter && textBefore && textAfter.node != textBefore.node) {\n        let tileAfter = Tile.get(textAfter.node);\n        if (!tileAfter || tileAfter.isText() && tileAfter.text != textAfter.node.nodeValue) {\n            textNode = textAfter;\n        }\n        else if (view.docView.lastCompositionAfterCursor) {\n            let tileBefore = Tile.get(textBefore.node);\n            if (!(!tileBefore || tileBefore.isText() && tileBefore.text != textBefore.node.nodeValue))\n                textNode = textAfter;\n        }\n    }\n    view.docView.lastCompositionAfterCursor = textNode != textBefore;\n    if (!textNode)\n        return null;\n    let from = headPos - textNode.offset;\n    return { from, to: from + textNode.node.nodeValue.length, node: textNode.node };\n}\nfunction findCompositionRange(view, changes, headPos) {\n    let found = findCompositionNode(view, headPos);\n    if (!found)\n        return null;\n    let { node: textNode, from, to } = found, text = textNode.nodeValue;\n    // Don't try to preserve multi-line compositions\n    if (/[\\n\\r]/.test(text))\n        return null;\n    if (view.state.doc.sliceString(found.from, found.to) != text)\n        return null;\n    let inv = changes.invertedDesc;\n    return { range: new ChangedRange(inv.mapPos(from), inv.mapPos(to), from, to), text: textNode };\n}\nfunction nextToUneditable(node, offset) {\n    if (node.nodeType != 1)\n        return 0;\n    return (offset && node.childNodes[offset - 1].contentEditable == \"false\" ? 1 /* NextTo.Before */ : 0) |\n        (offset < node.childNodes.length && node.childNodes[offset].contentEditable == \"false\" ? 2 /* NextTo.After */ : 0);\n}\nlet DecorationComparator$1 = class DecorationComparator {\n    constructor() {\n        this.changes = [];\n    }\n    compareRange(from, to) { addRange(from, to, this.changes); }\n    comparePoint(from, to) { addRange(from, to, this.changes); }\n    boundChange(pos) { addRange(pos, pos, this.changes); }\n};\nfunction findChangedDeco(a, b, diff) {\n    let comp = new DecorationComparator$1;\n    RangeSet.compare(a, b, diff, comp);\n    return comp.changes;\n}\nclass WrapperComparator {\n    constructor() {\n        this.changes = [];\n    }\n    compareRange(from, to) { addRange(from, to, this.changes); }\n    comparePoint() { }\n    boundChange(pos) { addRange(pos, pos, this.changes); }\n}\nfunction findChangedWrappers(a, b, diff) {\n    let comp = new WrapperComparator;\n    RangeSet.compare(a, b, diff, comp);\n    return comp.changes;\n}\nfunction inUneditable(node, inside) {\n    for (let cur = node; cur && cur != inside; cur = cur.assignedSlot || cur.parentNode) {\n        if (cur.nodeType == 1 && cur.contentEditable == 'false') {\n            return true;\n        }\n    }\n    return false;\n}\nfunction touchesComposition(changes, composition) {\n    let touched = false;\n    if (composition)\n        changes.iterChangedRanges((from, to) => {\n            if (from < composition.to && to > composition.from)\n                touched = true;\n        });\n    return touched;\n}\nclass BlockGapWidget extends WidgetType {\n    constructor(height) {\n        super();\n        this.height = height;\n    }\n    toDOM() {\n        let elt = document.createElement(\"div\");\n        elt.className = \"cm-gap\";\n        this.updateDOM(elt);\n        return elt;\n    }\n    eq(other) { return other.height == this.height; }\n    updateDOM(elt) {\n        elt.style.height = this.height + \"px\";\n        return true;\n    }\n    get editable() { return true; }\n    get estimatedHeight() { return this.height; }\n    ignoreEvent() { return false; }\n}\n\nfunction groupAt(state, pos, bias = 1) {\n    let categorize = state.charCategorizer(pos);\n    let line = state.doc.lineAt(pos), linePos = pos - line.from;\n    if (line.length == 0)\n        return EditorSelection.cursor(pos);\n    if (linePos == 0)\n        bias = 1;\n    else if (linePos == line.length)\n        bias = -1;\n    let from = linePos, to = linePos;\n    if (bias < 0)\n        from = findClusterBreak(line.text, linePos, false);\n    else\n        to = findClusterBreak(line.text, linePos);\n    let cat = categorize(line.text.slice(from, to));\n    while (from > 0) {\n        let prev = findClusterBreak(line.text, from, false);\n        if (categorize(line.text.slice(prev, from)) != cat)\n            break;\n        from = prev;\n    }\n    while (to < line.length) {\n        let next = findClusterBreak(line.text, to);\n        if (categorize(line.text.slice(to, next)) != cat)\n            break;\n        to = next;\n    }\n    return EditorSelection.undirectionalRange(from + line.from, to + line.from);\n}\nfunction posAtCoordsImprecise(view, contentRect, block, x, y) {\n    let into = Math.round((x - contentRect.left) * view.defaultCharacterWidth);\n    if (view.lineWrapping && block.height > view.defaultLineHeight * 1.5) {\n        let textHeight = view.viewState.heightOracle.textHeight;\n        let line = Math.floor((y - block.top - (view.defaultLineHeight - textHeight) * 0.5) / textHeight);\n        into += line * view.viewState.heightOracle.lineLength;\n    }\n    let content = view.state.sliceDoc(block.from, block.to);\n    return block.from + findColumn(content, into, view.state.tabSize);\n}\nfunction blockAt(view, pos, side) {\n    let line = view.lineBlockAt(pos);\n    if (Array.isArray(line.type)) {\n        let best;\n        for (let l of line.type) {\n            if (l.from > pos)\n                break;\n            if (l.to < pos)\n                continue;\n            if (l.from < pos && l.to > pos)\n                return l;\n            if (!best || (l.type == BlockType.Text && (best.type != l.type || (side < 0 ? l.from < pos : l.to > pos))))\n                best = l;\n        }\n        return best || line;\n    }\n    return line;\n}\nfunction moveToLineBoundary(view, start, forward, includeWrap) {\n    let line = blockAt(view, start.head, start.assoc || -1);\n    let coords = !includeWrap || line.type != BlockType.Text || !(view.lineWrapping || line.widgetLineBreaks) ? null\n        : view.coordsAtPos(start.assoc < 0 && start.head > line.from ? start.head - 1 : start.head);\n    if (coords) {\n        let editorRect = view.dom.getBoundingClientRect();\n        let direction = view.textDirectionAt(line.from);\n        let pos = view.posAtCoords({ x: forward == (direction == Direction.LTR) ? editorRect.right - 1 : editorRect.left + 1,\n            y: (coords.top + coords.bottom) / 2 });\n        if (pos != null)\n            return EditorSelection.cursor(pos, forward ? -1 : 1);\n    }\n    return EditorSelection.cursor(forward ? line.to : line.from, forward ? -1 : 1);\n}\nfunction moveByChar(view, start, forward, by) {\n    let line = view.state.doc.lineAt(start.head), spans = view.bidiSpans(line);\n    let direction = view.textDirectionAt(line.from);\n    for (let cur = start, check = null;;) {\n        let next = moveVisually(line, spans, direction, cur, forward), char = movedOver;\n        if (!next) {\n            if (line.number == (forward ? view.state.doc.lines : 1))\n                return cur;\n            char = \"\\n\";\n            line = view.state.doc.line(line.number + (forward ? 1 : -1));\n            spans = view.bidiSpans(line);\n            next = view.visualLineSide(line, !forward);\n        }\n        if (!check) {\n            if (!by)\n                return next;\n            check = by(char);\n        }\n        else if (!check(char)) {\n            return cur;\n        }\n        cur = next;\n    }\n}\nfunction byGroup(view, pos, start) {\n    let categorize = view.state.charCategorizer(pos);\n    let cat = categorize(start);\n    return (next) => {\n        let nextCat = categorize(next);\n        if (cat == CharCategory.Space)\n            cat = nextCat;\n        return cat == nextCat;\n    };\n}\nfunction moveVertically(view, start, forward, distance) {\n    let startPos = start.head, dir = forward ? 1 : -1;\n    if (startPos == (forward ? view.state.doc.length : 0))\n        return EditorSelection.cursor(startPos, start.assoc);\n    let goal = start.goalColumn, startY;\n    let rect = view.contentDOM.getBoundingClientRect();\n    let startCoords = view.coordsAtPos(startPos, start.assoc || ((start.empty ? forward : start.head == start.from) ? 1 : -1));\n    let docTop = view.documentTop;\n    if (startCoords) {\n        if (goal == null)\n            goal = startCoords.left - rect.left;\n        startY = dir < 0 ? startCoords.top : startCoords.bottom;\n    }\n    else {\n        let line = view.viewState.lineBlockAt(startPos);\n        if (goal == null)\n            goal = Math.min(rect.right - rect.left, view.defaultCharacterWidth * (startPos - line.from));\n        startY = (dir < 0 ? line.top : line.bottom) + docTop;\n    }\n    let resolvedGoal = rect.left + goal;\n    let halfText = view.viewState.heightOracle.textHeight >> 1, dist = distance !== null && distance !== void 0 ? distance : halfText;\n    for (let scan = 0;; scan += halfText) {\n        let y = startY + (dist + scan) * dir;\n        let pos = posAtCoords(view, { x: resolvedGoal, y }, false, dir);\n        if (forward ? y > rect.bottom : y < rect.top)\n            return EditorSelection.cursor(pos.pos, pos.assoc);\n        let posCoords = view.coordsAtPos(pos.pos, pos.assoc), mid = posCoords ? (posCoords.top + posCoords.bottom) / 2 : 0;\n        if (!posCoords || (forward ? mid > startY : mid < startY))\n            return EditorSelection.cursor(pos.pos, pos.assoc, undefined, goal);\n    }\n}\nfunction skipAtomicRanges(atoms, pos, bias) {\n    for (;;) {\n        let moved = 0;\n        for (let set of atoms) {\n            set.between(pos - 1, pos + 1, (from, to, value) => {\n                if (pos > from && pos < to) {\n                    let side = moved || bias || (pos - from < to - pos ? -1 : 1);\n                    pos = side < 0 ? from : to;\n                    moved = side;\n                }\n            });\n        }\n        if (!moved)\n            return pos;\n    }\n}\nfunction skipAtomsForSelection(atoms, sel) {\n    let ranges = null;\n    for (let i = 0; i < sel.ranges.length; i++) {\n        let range = sel.ranges[i], updated = null;\n        if (range.empty) {\n            let pos = skipAtomicRanges(atoms, range.from, 0);\n            if (pos != range.from)\n                updated = EditorSelection.cursor(pos, -1);\n        }\n        else {\n            let from = skipAtomicRanges(atoms, range.from, -1);\n            let to = skipAtomicRanges(atoms, range.to, 1);\n            if (from != range.from || to != range.to) {\n                if (range.undirectional)\n                    updated = EditorSelection.undirectionalRange(range.from, range.to);\n                else\n                    updated = EditorSelection.range(range.from == range.anchor ? from : to, range.from == range.head ? from : to);\n            }\n        }\n        if (updated) {\n            if (!ranges)\n                ranges = sel.ranges.slice();\n            ranges[i] = updated;\n        }\n    }\n    return ranges ? EditorSelection.create(ranges, sel.mainIndex) : sel;\n}\nfunction skipAtoms(view, oldPos, pos) {\n    let newPos = skipAtomicRanges(view.state.facet(atomicRanges).map(f => f(view)), pos.from, oldPos.head > pos.from ? -1 : 1);\n    return newPos == pos.from ? pos : EditorSelection.cursor(newPos, newPos < pos.from ? 1 : -1);\n}\nclass PosAssoc {\n    constructor(pos, assoc) {\n        this.pos = pos;\n        this.assoc = assoc;\n    }\n}\nfunction posAtCoords(view, coords, precise, scanY) {\n    let content = view.contentDOM.getBoundingClientRect(), docTop = content.top + view.viewState.paddingTop;\n    let { x, y } = coords, yOffset = y - docTop, block;\n    // First find the block at the given Y position, if any. If scanY is\n    // given (used for vertical cursor motion), try to skip widgets and\n    // line padding.\n    for (;;) {\n        if (yOffset < 0)\n            return new PosAssoc(0, 1);\n        if (yOffset > view.viewState.docHeight)\n            return new PosAssoc(view.state.doc.length, -1);\n        block = view.elementAtHeight(yOffset);\n        if (scanY == null)\n            break;\n        if (block.type == BlockType.Text) {\n            if (scanY < 0 ? block.to < view.viewport.from : block.from > view.viewport.to)\n                break;\n            // Check whether we aren't landing on the top/bottom padding of the line\n            let rect = view.docView.coordsAt(scanY < 0 ? block.from : block.to, scanY > 0 ? -1 : 1);\n            if (rect && (scanY < 0 ? rect.top <= yOffset + docTop : rect.bottom >= yOffset + docTop))\n                break;\n        }\n        let halfLine = view.viewState.heightOracle.textHeight / 2;\n        yOffset = scanY > 0 ? block.bottom + halfLine : block.top - halfLine;\n    }\n    // If outside the viewport, return null if precise==true, an\n    // estimate otherwise.\n    if (view.viewport.from >= block.to || view.viewport.to <= block.from) {\n        if (precise)\n            return null;\n        if (block.type == BlockType.Text) {\n            let pos = posAtCoordsImprecise(view, content, block, x, y);\n            return new PosAssoc(pos, pos == block.from ? 1 : -1);\n        }\n    }\n    if (block.type != BlockType.Text)\n        return yOffset < (block.top + block.bottom) / 2 ? new PosAssoc(block.from, 1) : new PosAssoc(block.to, -1);\n    // Here we know we're in a line, so run the logic for inline layout\n    let line = view.docView.lineAt(block.from, 2);\n    if (!line || line.length != block.length)\n        line = view.docView.lineAt(block.from, -2);\n    return new InlineCoordsScan(view, x, y, view.textDirectionAt(block.from)).scanTile(line, block.from);\n}\nclass InlineCoordsScan {\n    constructor(view, x, y, baseDir) {\n        this.view = view;\n        this.x = x;\n        this.y = y;\n        this.baseDir = baseDir;\n        // Cached bidi info\n        this.line = null;\n        this.spans = null;\n    }\n    bidiSpansAt(pos) {\n        if (!this.line || this.line.from > pos || this.line.to < pos) {\n            this.line = this.view.state.doc.lineAt(pos);\n            this.spans = this.view.bidiSpans(this.line);\n        }\n        return this;\n    }\n    baseDirAt(pos, side) {\n        let { line, spans } = this.bidiSpansAt(pos);\n        let level = spans[BidiSpan.find(spans, pos - line.from, -1, side)].level;\n        return level == this.baseDir;\n    }\n    dirAt(pos, side) {\n        let { line, spans } = this.bidiSpansAt(pos);\n        return spans[BidiSpan.find(spans, pos - line.from, -1, side)].dir;\n    }\n    // Used to short-circuit bidi tests for content with a uniform direction\n    bidiIn(from, to) {\n        let { spans, line } = this.bidiSpansAt(from);\n        return spans.length > 1 || spans.length && (spans[0].level != this.baseDir || spans[0].to + line.from < to);\n    }\n    // Scan through the rectangles for the content of a tile with inline\n    // content, looking for one that overlaps the queried position\n    // vertically and is closest horizontally. The caller is responsible\n    // for dividing its content into N pieces, and pass an array with\n    // N+1 positions (including the position after the last piece). For\n    // a text tile, these will be character clusters, for a composite\n    // tile, these will be child tiles.\n    scan(positions, getRects, recursed = false) {\n        let lo = 0, hi = positions.length - 1, seen = new Set();\n        let bidi = this.bidiIn(positions[0], positions[hi]);\n        let above, below;\n        let closestI = -1, closestDx = 1e9, closestRect;\n        // Because, when the content is bidirectional, a regular binary\n        // search is hard to perform (the content order does not\n        // correspond to visual order), this loop does something between a\n        // regular binary search and a full scan, depending on what it can\n        // get away with. The outer hi/lo bounds are only adjusted for\n        // elements that are part of the base order.\n        //\n        // To make sure all elements inside those bounds are visited,\n        // eventually, we keep a set of seen indices, and if the midpoint\n        // has already been handled, we start in a random index within the\n        // current bounds and scan forward until we find an index that\n        // hasn't been seen yet.\n        search: while (lo < hi) {\n            let dist = hi - lo, mid = (lo + hi) >> 1;\n            adjust: if (seen.has(mid)) {\n                for (let i = 1; i < dist; i++) {\n                    let scan = mid + i;\n                    if (scan >= hi)\n                        scan -= dist;\n                    if (!seen.has(scan)) {\n                        mid = scan;\n                        break adjust;\n                    }\n                }\n                break search; // No index found, we're done\n            }\n            seen.add(mid);\n            let rects = getRects(mid), side = 0;\n            if (rects)\n                for (let i = 0; i < rects.length; i++) {\n                    let rect = rects[i];\n                    // Ignore empty rectangles when there are other rectangles\n                    if (rect.width == 0 && rects.length > 1)\n                        continue;\n                    if (rect.bottom < this.y) {\n                        if (!above || above.bottom < rect.bottom)\n                            above = rect;\n                        side = 1;\n                    }\n                    else if (rect.top > this.y) {\n                        if (!below || below.top > rect.top)\n                            below = rect;\n                        side = -1;\n                    }\n                    else {\n                        let off = rect.left > this.x ? this.x - rect.left : rect.right < this.x ? this.x - rect.right : 0;\n                        let dx = Math.abs(off);\n                        if (dx < closestDx) {\n                            closestI = mid;\n                            closestDx = dx;\n                            closestRect = rect;\n                        }\n                        if (off)\n                            side = (off < 0) == (this.baseDir == Direction.LTR) ? -1 : 1;\n                    }\n                }\n            // Narrow binary search when it is safe to do so\n            if (side == -1 && (!bidi || this.baseDirAt(positions[mid], 1)))\n                hi = mid;\n            else if (side == 1 && (!bidi || this.baseDirAt(positions[mid + 1], -1)))\n                lo = mid + 1;\n        }\n        // If no element with y overlap is found, find the nearest element\n        // on the y axis, move this.y into it, and retry the scan.\n        if (!closestRect) {\n            if (!below && !above)\n                return { i: positions[0], after: false };\n            let side = above && (!below || (this.y - above.bottom < below.top - this.y)) ? above : below;\n            this.y = (side.top + side.bottom) / 2;\n            return this.scan(positions, getRects, true);\n        }\n        // Handle the case where closest matched a higher element on the\n        // same line as an element below/above the coords\n        if (closestDx && !recursed) {\n            let { top, bottom } = closestRect;\n            if (above && above.bottom > (top + top + bottom) / 3) {\n                this.y = above.bottom - 1;\n                return this.scan(positions, getRects, true);\n            }\n            if (below && below.top < (top + bottom + bottom) / 3) {\n                this.y = below.top + 1;\n                return this.scan(positions, getRects, true);\n            }\n        }\n        let ltr = (bidi ? this.dirAt(positions[closestI], 1) : this.baseDir) == Direction.LTR;\n        return {\n            i: closestI,\n            // Test whether x is closes to the start or end of this element\n            after: (this.x > (closestRect.left + closestRect.right) / 2) == ltr\n        };\n    }\n    scanText(tile, offset) {\n        let positions = [];\n        for (let i = 0; i < tile.length; i = findClusterBreak(tile.text, i))\n            positions.push(offset + i);\n        positions.push(offset + tile.length);\n        let scan = this.scan(positions, i => {\n            let off = positions[i] - offset, end = positions[i + 1] - offset;\n            return textRange(tile.dom, off, end).getClientRects();\n        });\n        return scan.after ? new PosAssoc(positions[scan.i + 1], -1) : new PosAssoc(positions[scan.i], 1);\n    }\n    scanTile(tile, offset) {\n        if (!tile.length)\n            return new PosAssoc(offset, 1);\n        if (tile.children.length == 1) { // Short-circuit single-child tiles\n            let child = tile.children[0];\n            if (child.isText())\n                return this.scanText(child, offset);\n            else if (child.isComposite())\n                return this.scanTile(child, offset);\n        }\n        let positions = [offset];\n        for (let i = 0, pos = offset; i < tile.children.length; i++)\n            positions.push(pos += tile.children[i].length);\n        let scan = this.scan(positions, i => {\n            let child = tile.children[i];\n            if (child.flags & 48 /* TileFlag.PointWidget */)\n                return null;\n            return (child.dom.nodeType == 1 ? child.dom : textRange(child.dom, 0, child.length)).getClientRects();\n        });\n        let child = tile.children[scan.i], pos = positions[scan.i];\n        if (child.isText())\n            return this.scanText(child, pos);\n        if (child.isComposite())\n            return this.scanTile(child, pos);\n        return scan.after ? new PosAssoc(positions[scan.i + 1], -1) : new PosAssoc(pos, 1);\n    }\n}\n\nconst LineBreakPlaceholder = \"\\uffff\";\nclass DOMReader {\n    constructor(points, view) {\n        this.points = points;\n        this.view = view;\n        this.text = \"\";\n        this.lineSeparator = view.state.facet(EditorState.lineSeparator);\n    }\n    append(text) {\n        this.text += text;\n    }\n    lineBreak() {\n        this.text += LineBreakPlaceholder;\n    }\n    readRange(start, end) {\n        if (!start)\n            return this;\n        let parent = start.parentNode;\n        for (let cur = start;;) {\n            this.findPointBefore(parent, cur);\n            let oldLen = this.text.length;\n            this.readNode(cur);\n            let tile = Tile.get(cur), next = cur.nextSibling;\n            if (next == end) {\n                if ((tile === null || tile === void 0 ? void 0 : tile.breakAfter) && !next && parent != this.view.contentDOM)\n                    this.lineBreak();\n                break;\n            }\n            let nextTile = Tile.get(next);\n            if ((tile && nextTile ? tile.breakAfter :\n                (tile ? tile.breakAfter : isBlockElement(cur)) ||\n                    (isBlockElement(next) && (cur.nodeName != \"BR\" || (tile === null || tile === void 0 ? void 0 : tile.isWidget())) && this.text.length > oldLen)) &&\n                !isEmptyToEnd(next, end))\n                this.lineBreak();\n            cur = next;\n        }\n        this.findPointBefore(parent, end);\n        return this;\n    }\n    readTextNode(node) {\n        let text = node.nodeValue;\n        for (let point of this.points)\n            if (point.node == node)\n                point.pos = this.text.length + Math.min(point.offset, text.length);\n        for (let off = 0, re = this.lineSeparator ? null : /\\r\\n?|\\n/g;;) {\n            let nextBreak = -1, breakSize = 1, m;\n            if (this.lineSeparator) {\n                nextBreak = text.indexOf(this.lineSeparator, off);\n                breakSize = this.lineSeparator.length;\n            }\n            else if (m = re.exec(text)) {\n                nextBreak = m.index;\n                breakSize = m[0].length;\n            }\n            this.append(text.slice(off, nextBreak < 0 ? text.length : nextBreak));\n            if (nextBreak < 0)\n                break;\n            this.lineBreak();\n            if (breakSize > 1)\n                for (let point of this.points)\n                    if (point.node == node && point.pos > this.text.length)\n                        point.pos -= breakSize - 1;\n            off = nextBreak + breakSize;\n        }\n    }\n    readNode(node) {\n        let tile = Tile.get(node);\n        let fromView = tile && tile.overrideDOMText;\n        if (fromView != null) {\n            this.findPointInside(node, fromView.length);\n            for (let i = fromView.iter(); !i.next().done;) {\n                if (i.lineBreak)\n                    this.lineBreak();\n                else\n                    this.append(i.value);\n            }\n        }\n        else if (node.nodeType == 3) {\n            this.readTextNode(node);\n        }\n        else if (node.nodeName == \"BR\") {\n            if (node.nextSibling)\n                this.lineBreak();\n        }\n        else if (node.nodeType == 1) {\n            this.readRange(node.firstChild, null);\n        }\n    }\n    findPointBefore(node, next) {\n        for (let point of this.points)\n            if (point.node == node && node.childNodes[point.offset] == next)\n                point.pos = this.text.length;\n    }\n    findPointInside(node, length) {\n        for (let point of this.points)\n            if (node.nodeType == 3 ? point.node == node : node.contains(point.node))\n                point.pos = this.text.length + (isAtEnd(node, point.node, point.offset) ? length : 0);\n    }\n}\nfunction isAtEnd(parent, node, offset) {\n    for (;;) {\n        if (!node || offset < maxOffset(node))\n            return false;\n        if (node == parent)\n            return true;\n        offset = domIndex(node) + 1;\n        node = node.parentNode;\n    }\n}\nfunction isEmptyToEnd(node, end) {\n    let widgets;\n    for (;; node = node.nextSibling) {\n        if (node == end || !node)\n            break;\n        let view = Tile.get(node);\n        if (!(view === null || view === void 0 ? void 0 : view.isWidget()))\n            return false;\n        if (view)\n            (widgets || (widgets = [])).push(view);\n    }\n    if (widgets)\n        for (let w of widgets) {\n            let override = w.overrideDOMText;\n            if (override === null || override === void 0 ? void 0 : override.length)\n                return false;\n        }\n    return true;\n}\nclass DOMPoint {\n    constructor(node, offset) {\n        this.node = node;\n        this.offset = offset;\n        this.pos = -1;\n    }\n}\n\nclass DOMChange {\n    constructor(view, start, end, typeOver) {\n        this.typeOver = typeOver;\n        this.bounds = null;\n        this.text = \"\";\n        this.domChanged = start > -1;\n        let { impreciseHead: iHead, impreciseAnchor: iAnchor } = view.docView, curSel = view.state.selection;\n        if (view.state.readOnly && start > -1) {\n            // Ignore changes when the editor is read-only\n            this.newSel = null;\n        }\n        else if (start > -1 && (this.bounds = domBoundsAround(view.docView.tile, start, end, 0))) {\n            let selPoints = iHead || iAnchor ? [] : selectionPoints(view);\n            let reader = new DOMReader(selPoints, view);\n            reader.readRange(this.bounds.startDOM, this.bounds.endDOM);\n            this.text = reader.text;\n            this.newSel = selectionFromPoints(selPoints, this.bounds.from);\n        }\n        else {\n            let domSel = view.observer.selectionRange;\n            let head = iHead && iHead.node == domSel.focusNode && iHead.offset == domSel.focusOffset ||\n                !contains(view.contentDOM, domSel.focusNode)\n                ? curSel.main.head\n                : view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset);\n            let anchor = iAnchor && iAnchor.node == domSel.anchorNode && iAnchor.offset == domSel.anchorOffset ||\n                !contains(view.contentDOM, domSel.anchorNode)\n                ? curSel.main.anchor\n                : view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset);\n            // iOS will refuse to select the block gaps when doing\n            // select-all.\n            // Chrome will put the selection *inside* them, confusing\n            // posFromDOM\n            let vp = view.viewport;\n            if ((browser.ios || browser.chrome) && head != anchor &&\n                Math.min(head, anchor) <= curSel.main.from && Math.max(head, anchor) >= curSel.main.to &&\n                (vp.from > 0 || vp.to < view.state.doc.length)) {\n                let from = Math.min(head, anchor), to = Math.max(head, anchor);\n                let offFrom = vp.from - from, offTo = vp.to - to;\n                if ((offFrom == 0 || offFrom == 1 || from == 0) && (offTo == 0 || offTo == -1 || to == view.state.doc.length)) {\n                    head = 0;\n                    anchor = view.state.doc.length;\n                }\n            }\n            if (view.inputState.composing > -1 && curSel.ranges.length > 1) {\n                this.newSel = curSel.replaceRange(EditorSelection.range(anchor, head));\n            }\n            else if (view.lineWrapping && anchor == head && !(curSel.main.empty && curSel.main.head == head) &&\n                view.inputState.lastTouchTime > Date.now() - 100) {\n                // If this is a cursor selection change in a line-wrapping\n                // editor that may have been a touch, use the last touch\n                // position to assign a side to the cursor.\n                let before = view.coordsAtPos(head, -1), assoc = 0;\n                if (before)\n                    assoc = view.inputState.lastTouchY <= before.bottom ? -1 : 1;\n                this.newSel = EditorSelection.create([EditorSelection.cursor(head, assoc)]);\n            }\n            else {\n                this.newSel = EditorSelection.single(anchor, head);\n            }\n        }\n    }\n}\nfunction domBoundsAround(tile, from, to, offset) {\n    if (tile.isComposite()) {\n        let fromI = -1, fromStart = -1, toI = -1, toEnd = -1;\n        for (let i = 0, pos = offset, prevEnd = offset; i < tile.children.length; i++) {\n            let child = tile.children[i], end = pos + child.length;\n            if (pos < from && end > to)\n                return domBoundsAround(child, from, to, pos);\n            if (end >= from && fromI == -1) {\n                fromI = i;\n                fromStart = pos;\n            }\n            if (pos > to && child.dom.parentNode == tile.dom) {\n                toI = i;\n                toEnd = prevEnd;\n                break;\n            }\n            prevEnd = end;\n            pos = end + child.breakAfter;\n        }\n        return { from: fromStart, to: toEnd < 0 ? offset + tile.length : toEnd,\n            startDOM: (fromI ? tile.children[fromI - 1].dom.nextSibling : null) || tile.dom.firstChild,\n            endDOM: toI < tile.children.length && toI >= 0 ? tile.children[toI].dom : null };\n    }\n    else if (tile.isText()) {\n        return { from: offset, to: offset + tile.length, startDOM: tile.dom, endDOM: tile.dom.nextSibling };\n    }\n    else {\n        return null;\n    }\n}\nfunction applyDOMChange(view, domChange) {\n    let change;\n    let { newSel } = domChange, { state } = view, sel = state.selection.main;\n    let lastKey = view.inputState.lastKeyTime > Date.now() - 100 ? view.inputState.lastKeyCode : -1;\n    if (domChange.bounds) {\n        let { from, to } = domChange.bounds;\n        let preferredPos = sel.from, preferredSide = null;\n        // Prefer anchoring to end when Backspace is pressed (or, on\n        // Android, when something was deleted)\n        if (lastKey === 8 || browser.android && domChange.text.length < to - from) {\n            preferredPos = sel.to;\n            preferredSide = \"end\";\n        }\n        let cmp = state.doc.sliceString(from, to, LineBreakPlaceholder), selEnd, diff;\n        if (!sel.empty && sel.from >= from && sel.to <= to && (domChange.typeOver || cmp != domChange.text) &&\n            cmp.slice(0, sel.from - from) == domChange.text.slice(0, sel.from - from) &&\n            cmp.slice(sel.to - from) == domChange.text.slice(selEnd = domChange.text.length - (cmp.length - (sel.to - from)))) {\n            // This looks like a selection replacement\n            change = { from: sel.from, to: sel.to,\n                insert: Text.of(domChange.text.slice(sel.from - from, selEnd).split(LineBreakPlaceholder)) };\n        }\n        else if (diff = findDiff(cmp, domChange.text, preferredPos - from, preferredSide)) {\n            // Chrome inserts two newlines when pressing shift-enter at the\n            // end of a line. DomChange drops one of those.\n            if (browser.chrome && lastKey == 13 &&\n                diff.toB == diff.from + 2 && domChange.text.slice(diff.from, diff.toB) == LineBreakPlaceholder + LineBreakPlaceholder)\n                diff.toB--;\n            change = { from: from + diff.from, to: from + diff.toA,\n                insert: Text.of(domChange.text.slice(diff.from, diff.toB).split(LineBreakPlaceholder)) };\n        }\n    }\n    else if (newSel && (!view.hasFocus && state.facet(editable) || sameSelPos(newSel, sel))) {\n        newSel = null;\n    }\n    if (!change && !newSel)\n        return false;\n    if ((browser.mac || browser.android) && change && change.from == change.to && change.from == sel.head - 1 &&\n        /^\\. ?$/.test(change.insert.toString()) && view.contentDOM.getAttribute(\"autocorrect\") == \"off\") {\n        // Detect insert-period-on-double-space Mac and Android behavior,\n        // and transform it into a regular space insert.\n        if (newSel && change.insert.length == 2)\n            newSel = EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);\n        change = { from: change.from, to: change.to, insert: Text.of([change.insert.toString().replace(\".\", \" \")]) };\n    }\n    else if (state.doc.lineAt(sel.from).to < sel.to && view.docView.lineHasWidget(sel.to) &&\n        view.inputState.insertingTextAt > Date.now() - 50) {\n        // For a cross-line insertion, Chrome and Safari will crudely take\n        // the text of the line after the selection, flattening any\n        // widgets, and move it into the joined line. This tries to detect\n        // such a situation, and replaces the change with a selection\n        // replace of the text provided by the beforeinput event.\n        change = {\n            from: sel.from, to: sel.to,\n            insert: state.toText(view.inputState.insertingText)\n        };\n    }\n    else if (browser.chrome && change && change.from == change.to && change.from == sel.head &&\n        change.insert.toString() == \"\\n \" && view.lineWrapping) {\n        // In Chrome, if you insert a space at the start of a wrapped\n        // line, it will actually insert a newline and a space, causing a\n        // bogus new line to be created in CodeMirror (#968)\n        if (newSel)\n            newSel = EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);\n        change = { from: sel.from, to: sel.to, insert: Text.of([\" \"]) };\n    }\n    if (change) {\n        return applyDOMChangeInner(view, change, newSel, lastKey);\n    }\n    else if (newSel && !sameSelPos(newSel, sel)) {\n        let scrollIntoView = false, userEvent = \"select\";\n        if (view.inputState.lastSelectionTime > Date.now() - 50) {\n            if (view.inputState.lastSelectionOrigin == \"select\")\n                scrollIntoView = true;\n            userEvent = view.inputState.lastSelectionOrigin;\n            if (userEvent == \"select.pointer\")\n                newSel = skipAtomsForSelection(state.facet(atomicRanges).map(f => f(view)), newSel);\n        }\n        view.dispatch({ selection: newSel, scrollIntoView, userEvent });\n        return true;\n    }\n    else {\n        return false;\n    }\n}\nfunction applyDOMChangeInner(view, change, newSel, lastKey = -1) {\n    if (browser.ios && view.inputState.flushIOSKey(change))\n        return true;\n    let sel = view.state.selection.main;\n    // Android browsers don't fire reasonable key events for enter,\n    // backspace, or delete. So this detects changes that look like\n    // they're caused by those keys, and reinterprets them as key\n    // events. (Some of these keys are also handled by beforeinput\n    // events and the pendingAndroidKey mechanism, but that's not\n    // reliable in all situations.)\n    if (browser.android &&\n        ((change.to == sel.to &&\n            // GBoard will sometimes remove a space it just inserted\n            // after a completion when you press enter\n            (change.from == sel.from || change.from == sel.from - 1 && view.state.sliceDoc(change.from, sel.from) == \" \") &&\n            change.insert.length == 1 && change.insert.lines == 2 &&\n            dispatchKey(view.contentDOM, \"Enter\", 13)) ||\n            ((change.from == sel.from - 1 && change.to == sel.to && change.insert.length == 0 ||\n                lastKey == 8 && change.insert.length < change.to - change.from && change.to > sel.head) &&\n                dispatchKey(view.contentDOM, \"Backspace\", 8)) ||\n            (change.from == sel.from && change.to == sel.to + 1 && change.insert.length == 0 &&\n                dispatchKey(view.contentDOM, \"Delete\", 46))))\n        return true;\n    let text = change.insert.toString();\n    if (view.inputState.composing >= 0)\n        view.inputState.composing++;\n    let defaultTr;\n    let defaultInsert = () => defaultTr || (defaultTr = applyDefaultInsert(view, change, newSel));\n    if (!view.state.facet(inputHandler).some(h => h(view, change.from, change.to, text, defaultInsert)))\n        view.dispatch(defaultInsert());\n    return true;\n}\nfunction applyDefaultInsert(view, change, newSel) {\n    let tr, startState = view.state, sel = startState.selection.main, inAtomic = -1;\n    if (change.from == change.to && change.from < sel.from || change.from > sel.to) {\n        let side = change.from < sel.from ? -1 : 1, pos = side < 0 ? sel.from : sel.to;\n        let moved = skipAtomicRanges(startState.facet(atomicRanges).map(f => f(view)), pos, side);\n        if (change.from == moved)\n            inAtomic = moved;\n    }\n    if (inAtomic > -1) {\n        tr = {\n            changes: change,\n            selection: EditorSelection.cursor(change.from + change.insert.length, -1)\n        };\n    }\n    else if (change.from >= sel.from && change.to <= sel.to && change.to - change.from >= (sel.to - sel.from) / 3 &&\n        (!newSel || newSel.main.empty && newSel.main.from == change.from + change.insert.length) &&\n        view.inputState.composing < 0) {\n        let before = sel.from < change.from ? startState.sliceDoc(sel.from, change.from) : \"\";\n        let after = sel.to > change.to ? startState.sliceDoc(change.to, sel.to) : \"\";\n        tr = startState.replaceSelection(view.state.toText(before + change.insert.sliceString(0, undefined, view.state.lineBreak) + after));\n    }\n    else {\n        let changes = startState.changes(change);\n        let mainSel = newSel && newSel.main.to <= changes.newLength ? newSel.main : undefined;\n        // Try to apply a composition change to all cursors\n        if (startState.selection.ranges.length > 1 && (view.inputState.composing >= 0 || view.inputState.compositionPendingChange) &&\n            change.to <= sel.to + 10 && change.to >= sel.to - 10) {\n            let replaced = view.state.sliceDoc(change.from, change.to);\n            let compositionRange, composition = newSel && findCompositionNode(view, newSel.main.head);\n            if (composition) {\n                let dLen = change.insert.length - (change.to - change.from);\n                compositionRange = { from: composition.from, to: composition.to - dLen };\n            }\n            else {\n                compositionRange = view.state.doc.lineAt(sel.head);\n            }\n            let offset = sel.to - change.to;\n            tr = startState.changeByRange(range => {\n                if (range.from == sel.from && range.to == sel.to)\n                    return { changes, range: mainSel || range.map(changes) };\n                let to = range.to - offset, from = to - replaced.length;\n                if (view.state.sliceDoc(from, to) != replaced ||\n                    // Unfortunately, there's no way to make multiple\n                    // changes in the same node work without aborting\n                    // composition, so cursors in the composition range are\n                    // ignored.\n                    to >= compositionRange.from && from <= compositionRange.to)\n                    return { range };\n                let rangeChanges = startState.changes({ from, to, insert: change.insert }), selOff = range.to - sel.to;\n                return {\n                    changes: rangeChanges,\n                    range: !mainSel ? range.map(rangeChanges) :\n                        EditorSelection.range(Math.max(0, mainSel.anchor + selOff), Math.max(0, mainSel.head + selOff))\n                };\n            });\n        }\n        else {\n            tr = {\n                changes,\n                selection: mainSel && startState.selection.replaceRange(mainSel)\n            };\n        }\n    }\n    let userEvent = \"input.type\";\n    if (view.composing ||\n        view.inputState.compositionPendingChange && view.inputState.compositionEndedAt > Date.now() - 50) {\n        view.inputState.compositionPendingChange = false;\n        userEvent += \".compose\";\n        if (view.inputState.compositionFirstChange) {\n            userEvent += \".start\";\n            view.inputState.compositionFirstChange = false;\n        }\n    }\n    return startState.update(tr, { userEvent, scrollIntoView: true });\n}\nfunction findDiff(a, b, preferredPos, preferredSide) {\n    let minLen = Math.min(a.length, b.length);\n    let from = 0;\n    while (from < minLen && a.charCodeAt(from) == b.charCodeAt(from))\n        from++;\n    if (from == minLen && a.length == b.length)\n        return null;\n    let toA = a.length, toB = b.length;\n    while (toA > 0 && toB > 0 && a.charCodeAt(toA - 1) == b.charCodeAt(toB - 1)) {\n        toA--;\n        toB--;\n    }\n    if (preferredSide == \"end\") {\n        let adjust = Math.max(0, from - Math.min(toA, toB));\n        preferredPos -= toA + adjust - from;\n    }\n    if (toA < from && a.length < b.length) {\n        let move = preferredPos <= from && preferredPos >= toA ? from - preferredPos : 0;\n        from -= move;\n        toB = from + (toB - toA);\n        toA = from;\n    }\n    else if (toB < from) {\n        let move = preferredPos <= from && preferredPos >= toB ? from - preferredPos : 0;\n        from -= move;\n        toA = from + (toA - toB);\n        toB = from;\n    }\n    return { from, toA, toB };\n}\nfunction selectionPoints(view) {\n    let result = [];\n    if (view.root.activeElement != view.contentDOM)\n        return result;\n    let { anchorNode, anchorOffset, focusNode, focusOffset } = view.observer.selectionRange;\n    if (anchorNode) {\n        result.push(new DOMPoint(anchorNode, anchorOffset));\n        if (focusNode != anchorNode || focusOffset != anchorOffset)\n            result.push(new DOMPoint(focusNode, focusOffset));\n    }\n    return result;\n}\nfunction selectionFromPoints(points, base) {\n    if (points.length == 0)\n        return null;\n    let anchor = points[0].pos, head = points.length == 2 ? points[1].pos : anchor;\n    return anchor > -1 && head > -1 ? EditorSelection.single(anchor + base, head + base) : null;\n}\nfunction sameSelPos(selection, range) {\n    return range.head == selection.main.head && range.anchor == selection.main.anchor;\n}\n\nclass InputState {\n    setSelectionOrigin(origin) {\n        this.lastSelectionOrigin = origin;\n        this.lastSelectionTime = Date.now();\n    }\n    constructor(view) {\n        this.view = view;\n        this.lastKeyCode = 0;\n        this.lastKeyTime = 0;\n        this.touchActive = false;\n        this.lastTouchTime = 0;\n        this.lastTouchX = 0;\n        this.lastTouchY = 0;\n        this.lastFocusTime = 0;\n        this.lastScrollTop = 0;\n        this.lastScrollLeft = 0;\n        this.lastWheelEvent = 0;\n        // On iOS, some keys need to have their default behavior happen\n        // (after which we retroactively handle them and reset the DOM) to\n        // avoid messing up the virtual keyboard state.\n        this.pendingIOSKey = undefined;\n        // Set to a time stap by scroll events when touch isn't active on\n        // iOS, to work around an issue where Safari will abort the scroll\n        // momentum if we set scrollTop\n        this.lastIOSMomentumScroll = 0;\n        // When enabled (>-1), tab presses are not given to key handlers,\n        // leaving the browser's default behavior. If >0, the mode expires\n        // at that timestamp, and any other keypress clears it.\n        // Esc enables temporary tab focus mode for two seconds when not\n        // otherwise handled.\n        this.tabFocusMode = -1;\n        this.lastSelectionOrigin = null;\n        this.lastSelectionTime = 0;\n        this.lastContextMenu = 0;\n        this.scrollHandlers = [];\n        this.handlers = Object.create(null);\n        // -1 means not in a composition. Otherwise, this counts the number\n        // of changes made during the composition. The count is used to\n        // avoid treating the start state of the composition, before any\n        // changes have been made, as part of the composition.\n        this.composing = -1;\n        // Tracks whether the next change should be marked as starting the\n        // composition (null means no composition, true means next is the\n        // first, false means first has already been marked for this\n        // composition)\n        this.compositionFirstChange = null;\n        // End time of the previous composition\n        this.compositionEndedAt = 0;\n        // Used in a kludge to detect when an Enter keypress should be\n        // considered part of the composition on Safari, which fires events\n        // in the wrong order\n        this.compositionPendingKey = false;\n        // Used to categorize changes as part of a composition, even when\n        // the mutation events fire shortly after the compositionend event\n        this.compositionPendingChange = false;\n        // Set by beforeinput, used in DOM change reader\n        this.insertingText = \"\";\n        this.insertingTextAt = 0;\n        this.mouseSelection = null;\n        // When a drag from the editor is active, this points at the range\n        // being dragged.\n        this.draggedContent = null;\n        this.handleEvent = this.handleEvent.bind(this);\n        this.notifiedFocused = view.hasFocus;\n        // On Safari adding an input event handler somehow prevents an\n        // issue where the composition vanishes when you press enter.\n        if (browser.safari)\n            view.contentDOM.addEventListener(\"input\", () => null);\n        if (browser.gecko)\n            firefoxCopyCutHack(view.contentDOM.ownerDocument);\n    }\n    handleEvent(event) {\n        if (!eventBelongsToEditor(this.view, event) || this.ignoreDuringComposition(event))\n            return;\n        if (event.type == \"keydown\" && this.keydown(event))\n            return;\n        if (this.view.updateState != 0 /* UpdateState.Idle */)\n            Promise.resolve().then(() => this.runHandlers(event.type, event));\n        else\n            this.runHandlers(event.type, event);\n    }\n    runHandlers(type, event) {\n        let handlers = this.handlers[type];\n        if (handlers) {\n            for (let observer of handlers.observers)\n                observer(this.view, event);\n            for (let handler of handlers.handlers) {\n                if (event.defaultPrevented)\n                    break;\n                if (handler(this.view, event)) {\n                    event.preventDefault();\n                    break;\n                }\n            }\n        }\n    }\n    ensureHandlers(plugins) {\n        let handlers = computeHandlers(plugins), prev = this.handlers, dom = this.view.contentDOM;\n        for (let type in handlers)\n            if (type != \"scroll\") {\n                let passive = !handlers[type].handlers.length;\n                let exists = prev[type];\n                if (exists && passive != !exists.handlers.length) {\n                    dom.removeEventListener(type, this.handleEvent);\n                    exists = null;\n                }\n                if (!exists)\n                    dom.addEventListener(type, this.handleEvent, { passive });\n            }\n        for (let type in prev)\n            if (type != \"scroll\" && !handlers[type])\n                dom.removeEventListener(type, this.handleEvent);\n        this.handlers = handlers;\n    }\n    keydown(event) {\n        // Must always run, even if a custom handler handled the event\n        this.lastKeyCode = event.keyCode;\n        this.lastKeyTime = Date.now();\n        if (event.keyCode == 9 && this.tabFocusMode > -1 && (!this.tabFocusMode || Date.now() <= this.tabFocusMode))\n            return true;\n        if (this.tabFocusMode > 0 && event.keyCode != 27 && modifierCodes.indexOf(event.keyCode) < 0)\n            this.tabFocusMode = -1;\n        // Chrome for Android usually doesn't fire proper key events, but\n        // occasionally does, usually surrounded by a bunch of complicated\n        // composition changes. When an enter or backspace key event is\n        // seen, hold off on handling DOM events for a bit, and then\n        // dispatch it.\n        if (browser.android && browser.chrome && !event.synthetic &&\n            (event.keyCode == 13 || event.keyCode == 8)) {\n            this.view.observer.delayAndroidKey(event.key, event.keyCode);\n            return true;\n        }\n        // Preventing the default behavior of Enter on iOS makes the\n        // virtual keyboard get stuck in the wrong (lowercase)\n        // state. So we let it go through, and then, in\n        // applyDOMChange, notify key handlers of it and reset to\n        // the state they produce.\n        if (browser.ios && !event.synthetic && !event.altKey && !event.metaKey &&\n            (PendingKeys.some(key => key.keyCode == event.keyCode) && !event.ctrlKey ||\n                EmacsyPendingKeys.indexOf(event.key) > -1 && event.ctrlKey)) {\n            let mods = { ctrlKey: event.ctrlKey, altKey: event.altKey, metaKey: event.metaKey, shiftKey: event.shiftKey };\n            // On iOS with autocapitalize, drop the shift modifier for these\n            // keys, since it will be set at the start of every sentence.\n            if (mods.shiftKey && browser.ios && !/^(off|none)$/.test(this.view.contentDOM.autocapitalize) &&\n                iosVirtualKeyboardOpen(this.view.win))\n                mods.shiftKey = false;\n            this.pendingIOSKey = { key: event.key, keyCode: event.keyCode, mods };\n            setTimeout(() => this.flushIOSKey(), 250);\n            return true;\n        }\n        if (event.keyCode != 229)\n            this.view.observer.forceFlush();\n        return false;\n    }\n    flushIOSKey(change) {\n        let key = this.pendingIOSKey;\n        if (!key)\n            return false;\n        // This looks like an autocorrection before Enter\n        if (key.key == \"Enter\" && change && change.from < change.to && /^\\S+$/.test(change.insert.toString()))\n            return false;\n        this.pendingIOSKey = undefined;\n        return dispatchKey(this.view.contentDOM, key.key, key.keyCode, key.mods);\n    }\n    ignoreDuringComposition(event) {\n        if (!/^key/.test(event.type) || event.synthetic)\n            return false;\n        if (this.composing > 0)\n            return true;\n        // See https://www.stum.de/2016/06/24/handling-ime-events-in-javascript/.\n        // On some input method editors (IMEs), the Enter key is used to\n        // confirm character selection. On Safari, when Enter is pressed,\n        // compositionend and keydown events are sometimes emitted in the\n        // wrong order. The key event should still be ignored, even when\n        // it happens after the compositionend event.\n        if (browser.safari && !browser.ios && this.compositionPendingKey && Date.now() - this.compositionEndedAt < 100) {\n            this.compositionPendingKey = false;\n            return true;\n        }\n        return false;\n    }\n    startMouseSelection(mouseSelection) {\n        if (this.mouseSelection)\n            this.mouseSelection.destroy();\n        this.mouseSelection = mouseSelection;\n    }\n    update(update) {\n        this.view.observer.update(update);\n        if (this.mouseSelection)\n            this.mouseSelection.update(update);\n        if (this.draggedContent && update.docChanged)\n            this.draggedContent = this.draggedContent.map(update.changes);\n        if (update.transactions.length)\n            this.lastKeyCode = this.lastSelectionTime = 0;\n    }\n    destroy() {\n        if (this.mouseSelection)\n            this.mouseSelection.destroy();\n    }\n}\nfunction iosVirtualKeyboardOpen(win) {\n    if (!win.visualViewport)\n        return false;\n    return win.visualViewport.height * win.visualViewport.scale / win.document.documentElement.clientHeight < 0.85;\n}\nfunction bindHandler(plugin, handler) {\n    return (view, event) => {\n        try {\n            return handler.call(plugin, event, view);\n        }\n        catch (e) {\n            logException(view.state, e);\n        }\n    };\n}\nfunction computeHandlers(plugins) {\n    let result = Object.create(null);\n    function record(type) {\n        return result[type] || (result[type] = { observers: [], handlers: [] });\n    }\n    for (let plugin of plugins) {\n        let spec = plugin.spec, handlers = spec && spec.plugin.domEventHandlers, observers = spec && spec.plugin.domEventObservers;\n        if (handlers)\n            for (let type in handlers) {\n                let f = handlers[type];\n                if (f)\n                    record(type).handlers.push(bindHandler(plugin.value, f));\n            }\n        if (observers)\n            for (let type in observers) {\n                let f = observers[type];\n                if (f)\n                    record(type).observers.push(bindHandler(plugin.value, f));\n            }\n    }\n    for (let type in handlers)\n        record(type).handlers.push(handlers[type]);\n    for (let type in observers)\n        record(type).observers.push(observers[type]);\n    return result;\n}\nconst PendingKeys = [\n    { key: \"Backspace\", keyCode: 8, inputType: \"deleteContentBackward\" },\n    { key: \"Enter\", keyCode: 13, inputType: \"insertParagraph\" },\n    { key: \"Enter\", keyCode: 13, inputType: \"insertLineBreak\" },\n    { key: \"Delete\", keyCode: 46, inputType: \"deleteContentForward\" }\n];\nconst EmacsyPendingKeys = \"dthko\";\n// Key codes for modifier keys\nconst modifierCodes = [16, 17, 18, 20, 91, 92, 224, 225];\nconst dragScrollMargin = 6;\nfunction dragScrollSpeed(dist) {\n    return Math.max(0, dist) * 0.7 + 8;\n}\nfunction dist(a, b) {\n    return Math.max(Math.abs(a.clientX - b.clientX), Math.abs(a.clientY - b.clientY));\n}\nclass MouseSelection {\n    constructor(view, startEvent, style, mustSelect) {\n        this.view = view;\n        this.startEvent = startEvent;\n        this.style = style;\n        this.mustSelect = mustSelect;\n        this.scrollSpeed = { x: 0, y: 0 };\n        this.scrolling = -1;\n        this.lastEvent = startEvent;\n        this.scrollParents = scrollableParents(view.contentDOM);\n        this.atoms = view.state.facet(atomicRanges).map(f => f(view));\n        let doc = view.contentDOM.ownerDocument;\n        doc.addEventListener(\"mousemove\", this.move = this.move.bind(this));\n        doc.addEventListener(\"mouseup\", this.up = this.up.bind(this));\n        this.extend = startEvent.shiftKey;\n        this.multiple = view.state.facet(EditorState.allowMultipleSelections) && addsSelectionRange(view, startEvent);\n        this.dragging = isInPrimarySelection(view, startEvent) && getClickType(startEvent) == 1 ? null : false;\n    }\n    start(event) {\n        // When clicking outside of the selection, immediately apply the\n        // effect of starting the selection\n        if (this.dragging === false)\n            this.select(event);\n    }\n    move(event) {\n        if (event.buttons == 0)\n            return this.destroy();\n        if (this.dragging || this.dragging == null && dist(this.startEvent, event) < 10)\n            return;\n        this.select(this.lastEvent = event);\n        let sx = 0, sy = 0;\n        let left = 0, top = 0, right = this.view.win.innerWidth, bottom = this.view.win.innerHeight;\n        if (this.scrollParents.x)\n            ({ left, right } = this.scrollParents.x.getBoundingClientRect());\n        if (this.scrollParents.y)\n            ({ top, bottom } = this.scrollParents.y.getBoundingClientRect());\n        let margins = getScrollMargins(this.view);\n        if (event.clientX - margins.left <= left + dragScrollMargin)\n            sx = -dragScrollSpeed(left - event.clientX);\n        else if (event.clientX + margins.right >= right - dragScrollMargin)\n            sx = dragScrollSpeed(event.clientX - right);\n        if (event.clientY - margins.top <= top + dragScrollMargin)\n            sy = -dragScrollSpeed(top - event.clientY);\n        else if (event.clientY + margins.bottom >= bottom - dragScrollMargin)\n            sy = dragScrollSpeed(event.clientY - bottom);\n        this.setScrollSpeed(sx, sy);\n    }\n    up(event) {\n        if (this.dragging == null)\n            this.select(this.lastEvent);\n        if (!this.dragging)\n            event.preventDefault();\n        this.destroy();\n    }\n    destroy() {\n        this.setScrollSpeed(0, 0);\n        let doc = this.view.contentDOM.ownerDocument;\n        doc.removeEventListener(\"mousemove\", this.move);\n        doc.removeEventListener(\"mouseup\", this.up);\n        this.view.inputState.mouseSelection = this.view.inputState.draggedContent = null;\n    }\n    setScrollSpeed(sx, sy) {\n        this.scrollSpeed = { x: sx, y: sy };\n        if (sx || sy) {\n            if (this.scrolling < 0)\n                this.scrolling = setInterval(() => this.scroll(), 50);\n        }\n        else if (this.scrolling > -1) {\n            clearInterval(this.scrolling);\n            this.scrolling = -1;\n        }\n    }\n    scroll() {\n        let { x, y } = this.scrollSpeed;\n        if (x && this.scrollParents.x) {\n            this.scrollParents.x.scrollLeft += x;\n            x = 0;\n        }\n        if (y && this.scrollParents.y) {\n            this.scrollParents.y.scrollTop += y;\n            y = 0;\n        }\n        if (x || y)\n            this.view.win.scrollBy(x, y);\n        if (this.dragging === false)\n            this.select(this.lastEvent);\n    }\n    select(event) {\n        let { view } = this, selection = skipAtomsForSelection(this.atoms, this.style.get(event, this.extend, this.multiple));\n        if (this.mustSelect || !selection.eq(view.state.selection, this.dragging === false))\n            this.view.dispatch({\n                selection,\n                userEvent: \"select.pointer\"\n            });\n        this.mustSelect = false;\n    }\n    update(update) {\n        if (update.transactions.some(tr => tr.isUserEvent(\"input.type\")))\n            this.destroy();\n        else if (this.style.update(update))\n            setTimeout(() => this.select(this.lastEvent), 20);\n    }\n}\nfunction addsSelectionRange(view, event) {\n    let facet = view.state.facet(clickAddsSelectionRange);\n    return facet.length ? facet[0](event) : browser.mac ? event.metaKey : event.ctrlKey;\n}\nfunction dragMovesSelection(view, event) {\n    let facet = view.state.facet(dragMovesSelection$1);\n    return facet.length ? facet[0](event) : browser.mac ? !event.altKey : !event.ctrlKey;\n}\nfunction isInPrimarySelection(view, event) {\n    let { main } = view.state.selection;\n    if (main.empty)\n        return false;\n    // On boundary clicks, check whether the coordinates are inside the\n    // selection's client rectangles\n    let sel = getSelection(view.root);\n    if (!sel || sel.rangeCount == 0)\n        return true;\n    let rects = sel.getRangeAt(0).getClientRects();\n    for (let i = 0; i < rects.length; i++) {\n        let rect = rects[i];\n        if (rect.left <= event.clientX && rect.right >= event.clientX &&\n            rect.top <= event.clientY && rect.bottom >= event.clientY)\n            return true;\n    }\n    return false;\n}\nfunction eventBelongsToEditor(view, event) {\n    if (!event.bubbles)\n        return true;\n    if (event.defaultPrevented)\n        return false;\n    for (let node = event.target, tile; node != view.contentDOM; node = node.parentNode)\n        if (!node || node.nodeType == 11 ||\n            ((tile = Tile.get(node)) && tile.isWidget() && !tile.isHidden && tile.widget.ignoreEvent(event)))\n            return false;\n    return true;\n}\nconst handlers = /*@__PURE__*/Object.create(null);\nconst observers = /*@__PURE__*/Object.create(null);\n// This is very crude, but unfortunately both these browsers _pretend_\n// that they have a clipboard API—all the objects and methods are\n// there, they just don't work, and they are hard to test.\nconst brokenClipboardAPI = (browser.ie && browser.ie_version < 15) ||\n    (browser.ios && browser.webkit_version < 604);\nfunction capturePaste(view) {\n    let parent = view.dom.parentNode;\n    if (!parent)\n        return;\n    let target = parent.appendChild(document.createElement(\"textarea\"));\n    target.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n    target.focus();\n    setTimeout(() => {\n        view.focus();\n        target.remove();\n        doPaste(view, target.value);\n    }, 50);\n}\nfunction textFilter(state, facet, text) {\n    for (let filter of state.facet(facet))\n        text = filter(text, state);\n    return text;\n}\nfunction doPaste(view, input) {\n    input = textFilter(view.state, clipboardInputFilter, input);\n    let { state } = view, changes, i = 1, text = state.toText(input);\n    let byLine = text.lines == state.selection.ranges.length;\n    let linewise = lastLinewiseCopy != null && state.selection.ranges.every(r => r.empty) && lastLinewiseCopy == text.toString();\n    if (linewise) {\n        let lastLine = -1;\n        changes = state.changeByRange(range => {\n            let line = state.doc.lineAt(range.from);\n            if (line.from == lastLine)\n                return { range };\n            lastLine = line.from;\n            let insert = state.toText((byLine ? text.line(i++).text : input) + state.lineBreak);\n            return { changes: { from: line.from, insert },\n                range: EditorSelection.cursor(range.from + insert.length) };\n        });\n    }\n    else if (byLine) {\n        changes = state.changeByRange(range => {\n            let line = text.line(i++);\n            return { changes: { from: range.from, to: range.to, insert: line.text },\n                range: EditorSelection.cursor(range.from + line.length) };\n        });\n    }\n    else {\n        changes = state.replaceSelection(text);\n    }\n    view.dispatch(changes, {\n        userEvent: \"input.paste\",\n        scrollIntoView: true\n    });\n}\nobservers.scroll = view => {\n    let iState = view.inputState;\n    iState.lastScrollTop = view.scrollDOM.scrollTop;\n    iState.lastScrollLeft = view.scrollDOM.scrollLeft;\n    if (browser.ios && !iState.touchActive)\n        iState.lastIOSMomentumScroll = Date.now();\n};\nobservers.wheel = observers.mousewheel = view => {\n    view.inputState.lastWheelEvent = Date.now();\n};\nhandlers.keydown = (view, event) => {\n    view.inputState.setSelectionOrigin(\"select\");\n    if (event.keyCode == 27 && view.inputState.tabFocusMode != 0)\n        view.inputState.tabFocusMode = Date.now() + 2000;\n    return false;\n};\nobservers.touchstart = (view, e) => {\n    let iState = view.inputState, touch = e.targetTouches[0];\n    iState.touchActive = true;\n    iState.lastTouchTime = Date.now();\n    if (touch) {\n        iState.lastTouchX = touch.clientX;\n        iState.lastTouchY = touch.clientY;\n    }\n    iState.setSelectionOrigin(\"select.pointer\");\n};\nobservers.touchmove = view => {\n    view.inputState.setSelectionOrigin(\"select.pointer\");\n};\nobservers.touchend = (view, e) => {\n    view.inputState.touchActive = false;\n};\nhandlers.mousedown = (view, event) => {\n    view.observer.flush();\n    if (view.inputState.lastTouchTime > Date.now() - 2000)\n        return false; // Ignore touch interaction\n    let style = null;\n    for (let makeStyle of view.state.facet(mouseSelectionStyle)) {\n        style = makeStyle(view, event);\n        if (style)\n            break;\n    }\n    if (!style && event.button == 0)\n        style = basicMouseSelection(view, event);\n    if (style) {\n        let mustFocus = !view.hasFocus;\n        view.inputState.startMouseSelection(new MouseSelection(view, event, style, mustFocus));\n        if (mustFocus)\n            view.observer.ignore(() => {\n                focusPreventScroll(view.contentDOM);\n                let active = view.root.activeElement;\n                if (active && !active.contains(view.contentDOM))\n                    active.blur();\n            });\n        let mouseSel = view.inputState.mouseSelection;\n        if (mouseSel) {\n            mouseSel.start(event);\n            return mouseSel.dragging === false;\n        }\n    }\n    else {\n        view.inputState.setSelectionOrigin(\"select.pointer\");\n    }\n    return false;\n};\nfunction rangeForClick(view, pos, bias, type) {\n    if (type == 1) { // Single click\n        return EditorSelection.cursor(pos, bias);\n    }\n    else if (type == 2) { // Double click\n        return groupAt(view.state, pos, bias);\n    }\n    else { // Triple click\n        let visual = view.docView.lineAt(pos, bias), line = view.state.doc.lineAt(visual ? visual.posAtEnd : pos);\n        let from = visual ? visual.posAtStart : line.from, to = visual ? visual.posAtEnd : line.to;\n        if (to < view.state.doc.length && to == line.to)\n            to++;\n        return EditorSelection.undirectionalRange(from, to);\n    }\n}\nconst BadMouseDetail = browser.ie && browser.ie_version <= 11;\nlet lastMouseDown = null, lastMouseDownCount = 0, lastMouseDownTime = 0;\nfunction getClickType(event) {\n    if (!BadMouseDetail)\n        return event.detail;\n    let last = lastMouseDown, lastTime = lastMouseDownTime;\n    lastMouseDown = event;\n    lastMouseDownTime = Date.now();\n    return lastMouseDownCount = !last || (lastTime > Date.now() - 400 && Math.abs(last.clientX - event.clientX) < 2 &&\n        Math.abs(last.clientY - event.clientY) < 2) ? (lastMouseDownCount + 1) % 3 : 1;\n}\nfunction basicMouseSelection(view, event) {\n    let start = view.posAndSideAtCoords({ x: event.clientX, y: event.clientY }, false), type = getClickType(event);\n    let startSel = view.state.selection;\n    return {\n        update(update) {\n            if (update.docChanged) {\n                start.pos = update.changes.mapPos(start.pos);\n                startSel = startSel.map(update.changes);\n            }\n        },\n        get(event, extend, multiple) {\n            let cur = view.posAndSideAtCoords({ x: event.clientX, y: event.clientY }, false), removed;\n            let range = rangeForClick(view, cur.pos, cur.assoc, type);\n            if (start.pos != cur.pos && !extend) {\n                let startRange = rangeForClick(view, start.pos, start.assoc, type);\n                let from = Math.min(startRange.from, range.from), to = Math.max(startRange.to, range.to);\n                range = from < range.from ? EditorSelection.range(from, to, range.assoc) : EditorSelection.range(to, from, range.assoc);\n            }\n            if (extend)\n                return startSel.replaceRange(startSel.main.extend(range.from, range.to, range.assoc));\n            else if (multiple && type == 1 && startSel.ranges.length > 1 && (removed = removeRangeAround(startSel, cur.pos)))\n                return removed;\n            else if (multiple)\n                return startSel.addRange(range);\n            else\n                return EditorSelection.create([range]);\n        }\n    };\n}\nfunction removeRangeAround(sel, pos) {\n    for (let i = 0; i < sel.ranges.length; i++) {\n        let { from, to } = sel.ranges[i];\n        if (from <= pos && to >= pos)\n            return EditorSelection.create(sel.ranges.slice(0, i).concat(sel.ranges.slice(i + 1)), sel.mainIndex == i ? 0 : sel.mainIndex - (sel.mainIndex > i ? 1 : 0));\n    }\n    return null;\n}\nhandlers.dragstart = (view, event) => {\n    let { selection: { main: range } } = view.state;\n    if (event.target.draggable) {\n        let tile = view.docView.tile.nearest(event.target);\n        if (tile && tile.isWidget()) {\n            let from = tile.posAtStart, to = from + tile.length;\n            if (from >= range.to || to <= range.from)\n                range = EditorSelection.undirectionalRange(from, to);\n        }\n    }\n    let { inputState } = view;\n    if (inputState.mouseSelection)\n        inputState.mouseSelection.dragging = true;\n    inputState.draggedContent = range;\n    if (event.dataTransfer) {\n        event.dataTransfer.setData(\"Text\", textFilter(view.state, clipboardOutputFilter, view.state.sliceDoc(range.from, range.to)));\n        event.dataTransfer.effectAllowed = \"copyMove\";\n    }\n    return false;\n};\nhandlers.dragend = view => {\n    view.inputState.draggedContent = null;\n    return false;\n};\nfunction dropText(view, event, text, direct) {\n    text = textFilter(view.state, clipboardInputFilter, text);\n    if (!text)\n        return;\n    let dropPos = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);\n    let { draggedContent } = view.inputState;\n    let del = direct && draggedContent && dragMovesSelection(view, event)\n        ? { from: draggedContent.from, to: draggedContent.to } : null;\n    let ins = { from: dropPos, insert: text };\n    let changes = view.state.changes(del ? [del, ins] : ins);\n    view.focus();\n    view.dispatch({\n        changes,\n        selection: { anchor: changes.mapPos(dropPos, -1), head: changes.mapPos(dropPos, 1) },\n        userEvent: del ? \"move.drop\" : \"input.drop\"\n    });\n    view.inputState.draggedContent = null;\n}\nhandlers.drop = (view, event) => {\n    if (!event.dataTransfer)\n        return false;\n    if (view.state.readOnly)\n        return true;\n    let files = event.dataTransfer.files;\n    if (files && files.length) { // For a file drop, read the file's text.\n        let text = Array(files.length), read = 0;\n        let finishFile = () => {\n            if (++read == files.length)\n                dropText(view, event, text.filter(s => s != null).join(view.state.lineBreak), false);\n        };\n        for (let i = 0; i < files.length; i++) {\n            let reader = new FileReader;\n            reader.onerror = finishFile;\n            reader.onload = () => {\n                if (!/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(reader.result))\n                    text[i] = reader.result;\n                finishFile();\n            };\n            reader.readAsText(files[i]);\n        }\n        return true;\n    }\n    else {\n        let text = event.dataTransfer.getData(\"Text\");\n        if (text) {\n            dropText(view, event, text, true);\n            return true;\n        }\n    }\n    return false;\n};\nhandlers.paste = (view, event) => {\n    if (view.state.readOnly)\n        return true;\n    view.observer.flush();\n    let data = brokenClipboardAPI ? null : event.clipboardData;\n    if (data) {\n        doPaste(view, data.getData(\"text/plain\") || data.getData(\"text/uri-list\"));\n        return true;\n    }\n    else {\n        capturePaste(view);\n        return false;\n    }\n};\nfunction captureCopy(view, text) {\n    // The extra wrapper is somehow necessary on IE/Edge to prevent the\n    // content from being mangled when it is put onto the clipboard\n    let parent = view.dom.parentNode;\n    if (!parent)\n        return;\n    let target = parent.appendChild(document.createElement(\"textarea\"));\n    target.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n    target.value = text;\n    target.focus();\n    target.selectionEnd = text.length;\n    target.selectionStart = 0;\n    setTimeout(() => {\n        target.remove();\n        view.focus();\n    }, 50);\n}\nfunction copiedRange(state) {\n    let content = [], ranges = [], linewise = false;\n    for (let range of state.selection.ranges)\n        if (!range.empty) {\n            content.push(state.sliceDoc(range.from, range.to));\n            ranges.push(range);\n        }\n    if (!content.length) {\n        // Nothing selected, do a line-wise copy\n        let upto = -1;\n        for (let { from } of state.selection.ranges) {\n            let line = state.doc.lineAt(from);\n            if (line.number > upto) {\n                content.push(line.text);\n                ranges.push({ from: line.from, to: Math.min(state.doc.length, line.to + 1) });\n            }\n            upto = line.number;\n        }\n        linewise = true;\n    }\n    return { text: textFilter(state, clipboardOutputFilter, content.join(state.lineBreak)), ranges, linewise };\n}\nlet lastLinewiseCopy = null;\nhandlers.copy = handlers.cut = (view, event) => {\n    // If the DOM selection is outside this editor, don't intercept.\n    // This happens when a parent editor (like ProseMirror) selects content that\n    // spans multiple elements including this CodeMirror. The copy event may\n    // bubble through CodeMirror (e.g. when CodeMirror is the first or the last\n    // element in the selection), but we should let the parent handle it.\n    if (!hasSelection(view.contentDOM, view.observer.selectionRange))\n        return false;\n    let { text, ranges, linewise } = copiedRange(view.state);\n    if (!text && !linewise)\n        return false;\n    lastLinewiseCopy = linewise ? text : null;\n    if (event.type == \"cut\" && !view.state.readOnly)\n        view.dispatch({\n            changes: ranges,\n            scrollIntoView: true,\n            userEvent: \"delete.cut\"\n        });\n    let data = brokenClipboardAPI ? null : event.clipboardData;\n    if (data) {\n        data.clearData();\n        data.setData(\"text/plain\", text);\n        return true;\n    }\n    else {\n        captureCopy(view, text);\n        return false;\n    }\n};\nconst isFocusChange = /*@__PURE__*/Annotation.define();\nfunction focusChangeTransaction(state, focus) {\n    let effects = [];\n    for (let getEffect of state.facet(focusChangeEffect)) {\n        let effect = getEffect(state, focus);\n        if (effect)\n            effects.push(effect);\n    }\n    return effects.length ? state.update({ effects, annotations: isFocusChange.of(true) }) : null;\n}\nfunction updateForFocusChange(view) {\n    setTimeout(() => {\n        let focus = view.hasFocus;\n        if (focus != view.inputState.notifiedFocused) {\n            let tr = focusChangeTransaction(view.state, focus);\n            if (tr)\n                view.dispatch(tr);\n            else\n                view.update([]);\n        }\n    }, 10);\n}\nobservers.focus = view => {\n    view.inputState.lastFocusTime = Date.now();\n    // When focusing reset the scroll position, move it back to where it was\n    if (!view.scrollDOM.scrollTop && (view.inputState.lastScrollTop || view.inputState.lastScrollLeft)) {\n        view.scrollDOM.scrollTop = view.inputState.lastScrollTop;\n        view.scrollDOM.scrollLeft = view.inputState.lastScrollLeft;\n    }\n    updateForFocusChange(view);\n};\nobservers.blur = view => {\n    view.observer.clearSelectionRange();\n    updateForFocusChange(view);\n};\nobservers.compositionstart = observers.compositionupdate = view => {\n    if (view.observer.editContext)\n        return; // Composition handled by edit context\n    if (view.inputState.compositionFirstChange == null)\n        view.inputState.compositionFirstChange = true;\n    if (view.inputState.composing < 0) {\n        // FIXME possibly set a timeout to clear it again on Android\n        view.inputState.composing = 0;\n    }\n};\nobservers.compositionend = view => {\n    if (view.observer.editContext)\n        return; // Composition handled by edit context\n    view.inputState.composing = -1;\n    view.inputState.compositionEndedAt = Date.now();\n    view.inputState.compositionPendingKey = true;\n    view.inputState.compositionPendingChange = view.observer.pendingRecords().length > 0;\n    view.inputState.compositionFirstChange = null;\n    if (browser.chrome && browser.android) {\n        // Delay flushing for a bit on Android because it'll often fire a\n        // bunch of contradictory changes in a row at end of composition\n        view.observer.flushSoon();\n    }\n    else if (view.inputState.compositionPendingChange) {\n        // If we found pending records, schedule a flush.\n        Promise.resolve().then(() => view.observer.flush());\n    }\n    else {\n        // Otherwise, make sure that, if no changes come in soon, the\n        // composition view is cleared.\n        setTimeout(() => {\n            if (view.inputState.composing < 0 && view.docView.hasComposition)\n                view.update([]);\n        }, 50);\n    }\n};\nobservers.contextmenu = view => {\n    view.inputState.lastContextMenu = Date.now();\n};\nhandlers.beforeinput = (view, event) => {\n    var _a, _b;\n    if (event.inputType == \"insertText\" || event.inputType == \"insertCompositionText\") {\n        view.inputState.insertingText = event.data;\n        view.inputState.insertingTextAt = Date.now();\n    }\n    // In EditContext mode, we must handle insertReplacementText events\n    // directly, to make spell checking corrections work\n    if (event.inputType == \"insertReplacementText\" && view.observer.editContext) {\n        let text = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.getData(\"text/plain\"), ranges = event.getTargetRanges();\n        if (text && ranges.length) {\n            let r = ranges[0];\n            let from = view.posAtDOM(r.startContainer, r.startOffset), to = view.posAtDOM(r.endContainer, r.endOffset);\n            applyDOMChangeInner(view, { from, to, insert: view.state.toText(text) }, null);\n            return true;\n        }\n    }\n    // Because Chrome Android doesn't fire useful key events, use\n    // beforeinput to detect backspace (and possibly enter and delete,\n    // but those usually don't even seem to fire beforeinput events at\n    // the moment) and fake a key event for it.\n    //\n    // (preventDefault on beforeinput, though supported in the spec,\n    // seems to do nothing at all on Chrome).\n    let pending;\n    if (browser.chrome && browser.android && (pending = PendingKeys.find(key => key.inputType == event.inputType))) {\n        view.observer.delayAndroidKey(pending.key, pending.keyCode);\n        if (pending.key == \"Backspace\" || pending.key == \"Delete\") {\n            let startViewHeight = ((_b = window.visualViewport) === null || _b === void 0 ? void 0 : _b.height) || 0;\n            setTimeout(() => {\n                var _a;\n                // Backspacing near uneditable nodes on Chrome Android sometimes\n                // closes the virtual keyboard. This tries to crudely detect\n                // that and refocus to get it back.\n                if ((((_a = window.visualViewport) === null || _a === void 0 ? void 0 : _a.height) || 0) > startViewHeight + 10 && view.hasFocus) {\n                    view.contentDOM.blur();\n                    view.focus();\n                }\n            }, 100);\n        }\n    }\n    if (browser.ios && event.inputType == \"deleteContentForward\") {\n        // For some reason, DOM changes (and beforeinput) happen _before_\n        // the key event for ctrl-d on iOS when using an external\n        // keyboard.\n        view.observer.flushSoon();\n    }\n    // Safari will occasionally forget to fire compositionend at the end of a dead-key composition\n    if (browser.safari && event.inputType == \"insertText\" && view.inputState.composing >= 0) {\n        setTimeout(() => observers.compositionend(view, event), 20);\n    }\n    return false;\n};\nconst appliedFirefoxHack = /*@__PURE__*/new Set;\n// In Firefox, when cut/copy handlers are added to the document, that\n// somehow avoids a bug where those events aren't fired when the\n// selection is empty. See issue #1082 and\n// https://bugzilla.mozilla.org/show_bug.cgi?id=995961\nfunction firefoxCopyCutHack(doc) {\n    if (!appliedFirefoxHack.has(doc)) {\n        appliedFirefoxHack.add(doc);\n        doc.addEventListener(\"copy\", () => { });\n        doc.addEventListener(\"cut\", () => { });\n    }\n}\n\nconst wrappingWhiteSpace = [\"pre-wrap\", \"normal\", \"pre-line\", \"break-spaces\"];\n// Used to track, during updateHeight, if any actual heights changed\nlet heightChangeFlag = false;\nfunction clearHeightChangeFlag() { heightChangeFlag = false; }\nclass HeightOracle {\n    constructor(lineWrapping) {\n        this.lineWrapping = lineWrapping;\n        this.doc = Text.empty;\n        this.heightSamples = {};\n        this.lineHeight = 14; // The height of an entire line (line-height)\n        this.charWidth = 7;\n        this.textHeight = 14; // The height of the actual font (font-size)\n        this.lineLength = 30;\n    }\n    heightForGap(from, to) {\n        let lines = this.doc.lineAt(to).number - this.doc.lineAt(from).number + 1;\n        if (this.lineWrapping)\n            lines += Math.max(0, Math.ceil(((to - from) - (lines * this.lineLength * 0.5)) / this.lineLength));\n        return this.lineHeight * lines;\n    }\n    heightForLine(length) {\n        if (!this.lineWrapping)\n            return this.lineHeight;\n        let lines = 1 + Math.max(0, Math.ceil((length - this.lineLength) / Math.max(1, this.lineLength - 5)));\n        return lines * this.lineHeight;\n    }\n    setDoc(doc) { this.doc = doc; return this; }\n    mustRefreshForWrapping(whiteSpace) {\n        return (wrappingWhiteSpace.indexOf(whiteSpace) > -1) != this.lineWrapping;\n    }\n    mustRefreshForHeights(lineHeights) {\n        let newHeight = false;\n        for (let i = 0; i < lineHeights.length; i++) {\n            let h = lineHeights[i];\n            if (h < 0) {\n                i++;\n            }\n            else if (!this.heightSamples[Math.floor(h * 10)]) { // Round to .1 pixels\n                newHeight = true;\n                this.heightSamples[Math.floor(h * 10)] = true;\n            }\n        }\n        return newHeight;\n    }\n    refresh(whiteSpace, lineHeight, charWidth, textHeight, lineLength, knownHeights) {\n        let lineWrapping = wrappingWhiteSpace.indexOf(whiteSpace) > -1;\n        let changed = Math.abs(lineHeight - this.lineHeight) > 0.3 || this.lineWrapping != lineWrapping;\n        this.lineWrapping = lineWrapping;\n        this.lineHeight = lineHeight;\n        this.charWidth = charWidth;\n        this.textHeight = textHeight;\n        this.lineLength = lineLength;\n        if (changed) {\n            this.heightSamples = {};\n            for (let i = 0; i < knownHeights.length; i++) {\n                let h = knownHeights[i];\n                if (h < 0)\n                    i++;\n                else\n                    this.heightSamples[Math.floor(h * 10)] = true;\n            }\n        }\n        return changed;\n    }\n}\n// This object is used by `updateHeight` to make DOM measurements\n// arrive at the right nodes. The `heights` array is a sequence of\n// block heights, starting from position `from`.\nclass MeasuredHeights {\n    constructor(from, heights) {\n        this.from = from;\n        this.heights = heights;\n        this.index = 0;\n    }\n    get more() { return this.index < this.heights.length; }\n}\n/**\nRecord used to represent information about a block-level element\nin the editor view.\n*/\nclass BlockInfo {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The start of the element in the document.\n    */\n    from, \n    /**\n    The length of the element.\n    */\n    length, \n    /**\n    The top position of the element (relative to the top of the\n    document).\n    */\n    top, \n    /**\n    Its height.\n    */\n    height, \n    /**\n    @internal Weird packed field that holds an array of children\n    for composite blocks, a decoration for block widgets, and a\n    number indicating the amount of widget-created line breaks for\n    text blocks.\n    */\n    _content) {\n        this.from = from;\n        this.length = length;\n        this.top = top;\n        this.height = height;\n        this._content = _content;\n    }\n    /**\n    The type of element this is. When querying lines, this may be\n    an array of all the blocks that make up the line.\n    */\n    get type() {\n        return typeof this._content == \"number\" ? BlockType.Text :\n            Array.isArray(this._content) ? this._content : this._content.type;\n    }\n    /**\n    The end of the element as a document position.\n    */\n    get to() { return this.from + this.length; }\n    /**\n    The bottom position of the element.\n    */\n    get bottom() { return this.top + this.height; }\n    /**\n    If this is a widget block, this will return the widget\n    associated with it.\n    */\n    get widget() {\n        return this._content instanceof PointDecoration ? this._content.widget : null;\n    }\n    /**\n    If this is a textblock, this holds the number of line breaks\n    that appear in widgets inside the block.\n    */\n    get widgetLineBreaks() {\n        return typeof this._content == \"number\" ? this._content : 0;\n    }\n    /**\n    @internal\n    */\n    join(other) {\n        let content = (Array.isArray(this._content) ? this._content : [this])\n            .concat(Array.isArray(other._content) ? other._content : [other]);\n        return new BlockInfo(this.from, this.length + other.length, this.top, this.height + other.height, content);\n    }\n}\nvar QueryType = /*@__PURE__*/(function (QueryType) {\n    QueryType[QueryType[\"ByPos\"] = 0] = \"ByPos\";\n    QueryType[QueryType[\"ByHeight\"] = 1] = \"ByHeight\";\n    QueryType[QueryType[\"ByPosNoHeight\"] = 2] = \"ByPosNoHeight\";\nreturn QueryType})(QueryType || (QueryType = {}));\nconst Epsilon = 1e-3;\nclass HeightMap {\n    constructor(length, // The number of characters covered\n    height, // Height of this part of the document\n    flags = 2 /* Flag.Outdated */) {\n        this.length = length;\n        this.height = height;\n        this.flags = flags;\n    }\n    get outdated() { return (this.flags & 2 /* Flag.Outdated */) > 0; }\n    set outdated(value) { this.flags = (value ? 2 /* Flag.Outdated */ : 0) | (this.flags & ~2 /* Flag.Outdated */); }\n    setHeight(height) {\n        if (this.height != height) {\n            if (Math.abs(this.height - height) > Epsilon)\n                heightChangeFlag = true;\n            this.height = height;\n        }\n    }\n    // Base case is to replace a leaf node, which simply builds a tree\n    // from the new nodes and returns that (HeightMapBranch and\n    // HeightMapGap override this to actually use from/to)\n    replace(_from, _to, nodes) {\n        return HeightMap.of(nodes);\n    }\n    // Again, these are base cases, and are overridden for branch and gap nodes.\n    decomposeLeft(_to, result) { result.push(this); }\n    decomposeRight(_from, result) { result.push(this); }\n    applyChanges(decorations, oldDoc, oracle, changes) {\n        let me = this, doc = oracle.doc;\n        for (let i = changes.length - 1; i >= 0; i--) {\n            let { fromA, toA, fromB, toB } = changes[i];\n            let start = me.lineAt(fromA, QueryType.ByPosNoHeight, oracle.setDoc(oldDoc), 0, 0);\n            let end = start.to >= toA ? start : me.lineAt(toA, QueryType.ByPosNoHeight, oracle, 0, 0);\n            toB += end.to - toA;\n            toA = end.to;\n            while (i > 0 && start.from <= changes[i - 1].toA) {\n                fromA = changes[i - 1].fromA;\n                fromB = changes[i - 1].fromB;\n                i--;\n                if (fromA < start.from)\n                    start = me.lineAt(fromA, QueryType.ByPosNoHeight, oracle, 0, 0);\n            }\n            fromB += start.from - fromA;\n            fromA = start.from;\n            let nodes = NodeBuilder.build(oracle.setDoc(doc), decorations, fromB, toB);\n            me = replace(me, me.replace(fromA, toA, nodes));\n        }\n        return me.updateHeight(oracle, 0);\n    }\n    static empty() { return new HeightMapText(0, 0, 0); }\n    // nodes uses null values to indicate the position of line breaks.\n    // There are never line breaks at the start or end of the array, or\n    // two line breaks next to each other, and the array isn't allowed\n    // to be empty (same restrictions as return value from the builder).\n    static of(nodes) {\n        if (nodes.length == 1)\n            return nodes[0];\n        let i = 0, j = nodes.length, before = 0, after = 0;\n        for (;;) {\n            if (i == j) {\n                if (before > after * 2) {\n                    let split = nodes[i - 1];\n                    if (split.break)\n                        nodes.splice(--i, 1, split.left, null, split.right);\n                    else\n                        nodes.splice(--i, 1, split.left, split.right);\n                    j += 1 + split.break;\n                    before -= split.size;\n                }\n                else if (after > before * 2) {\n                    let split = nodes[j];\n                    if (split.break)\n                        nodes.splice(j, 1, split.left, null, split.right);\n                    else\n                        nodes.splice(j, 1, split.left, split.right);\n                    j += 2 + split.break;\n                    after -= split.size;\n                }\n                else {\n                    break;\n                }\n            }\n            else if (before < after) {\n                let next = nodes[i++];\n                if (next)\n                    before += next.size;\n            }\n            else {\n                let next = nodes[--j];\n                if (next)\n                    after += next.size;\n            }\n        }\n        let brk = 0;\n        if (nodes[i - 1] == null) {\n            brk = 1;\n            i--;\n        }\n        else if (nodes[i] == null) {\n            brk = 1;\n            j++;\n        }\n        return new HeightMapBranch(HeightMap.of(nodes.slice(0, i)), brk, HeightMap.of(nodes.slice(j)));\n    }\n}\nfunction replace(old, val) {\n    if (old == val)\n        return old;\n    if (old.constructor != val.constructor)\n        heightChangeFlag = true;\n    return val;\n}\nHeightMap.prototype.size = 1;\nconst SpaceDeco = /*@__PURE__*/Decoration.replace({});\nclass HeightMapBlock extends HeightMap {\n    constructor(length, height, deco) {\n        super(length, height);\n        this.deco = deco;\n        this.spaceAbove = 0;\n    }\n    mainBlock(top, offset) {\n        return new BlockInfo(offset, this.length, top + this.spaceAbove, this.height - this.spaceAbove, this.deco || 0);\n    }\n    blockAt(height, _oracle, top, offset) {\n        return this.spaceAbove && height < top + this.spaceAbove ? new BlockInfo(offset, 0, top, this.spaceAbove, SpaceDeco)\n            : this.mainBlock(top, offset);\n    }\n    lineAt(_value, _type, oracle, top, offset) {\n        let main = this.mainBlock(top, offset);\n        return this.spaceAbove ? this.blockAt(0, oracle, top, offset).join(main) : main;\n    }\n    forEachLine(from, to, oracle, top, offset, f) {\n        if (from <= offset + this.length && to >= offset)\n            f(this.lineAt(0, QueryType.ByPos, oracle, top, offset));\n    }\n    setMeasuredHeight(measured) {\n        let next = measured.heights[measured.index++];\n        if (next < 0) {\n            this.spaceAbove = -next;\n            next = measured.heights[measured.index++];\n        }\n        else {\n            this.spaceAbove = 0;\n        }\n        this.setHeight(next);\n    }\n    updateHeight(oracle, offset = 0, _force = false, measured) {\n        if (measured && measured.from <= offset && measured.more)\n            this.setMeasuredHeight(measured);\n        this.outdated = false;\n        return this;\n    }\n    toString() { return `block(${this.length})`; }\n}\nclass HeightMapText extends HeightMapBlock {\n    constructor(length, height, above) {\n        super(length, height, null);\n        this.collapsed = 0; // Amount of collapsed content in the line\n        this.widgetHeight = 0; // Maximum inline widget height\n        this.breaks = 0; // Number of widget-introduced line breaks on the line\n        this.spaceAbove = above;\n    }\n    mainBlock(top, offset) {\n        return new BlockInfo(offset, this.length, top + this.spaceAbove, this.height - this.spaceAbove, this.breaks);\n    }\n    replace(_from, _to, nodes) {\n        let node = nodes[0];\n        if (nodes.length == 1 && (node instanceof HeightMapText || node instanceof HeightMapGap && (node.flags & 4 /* Flag.SingleLine */)) &&\n            Math.abs(this.length - node.length) < 10) {\n            if (node instanceof HeightMapGap)\n                node = new HeightMapText(node.length, this.height, this.spaceAbove);\n            else\n                node.height = this.height;\n            if (!this.outdated)\n                node.outdated = false;\n            return node;\n        }\n        else {\n            return HeightMap.of(nodes);\n        }\n    }\n    updateHeight(oracle, offset = 0, force = false, measured) {\n        if (measured && measured.from <= offset && measured.more) {\n            this.setMeasuredHeight(measured);\n        }\n        else if (force || this.outdated) {\n            this.spaceAbove = 0;\n            this.setHeight(Math.max(this.widgetHeight, oracle.heightForLine(this.length - this.collapsed)) +\n                this.breaks * oracle.lineHeight);\n        }\n        this.outdated = false;\n        return this;\n    }\n    toString() {\n        return `line(${this.length}${this.collapsed ? -this.collapsed : \"\"}${this.widgetHeight ? \":\" + this.widgetHeight : \"\"})`;\n    }\n}\nclass HeightMapGap extends HeightMap {\n    constructor(length) { super(length, 0); }\n    heightMetrics(oracle, offset) {\n        let firstLine = oracle.doc.lineAt(offset).number, lastLine = oracle.doc.lineAt(offset + this.length).number;\n        let lines = lastLine - firstLine + 1;\n        let perLine, perChar = 0;\n        if (oracle.lineWrapping) {\n            let totalPerLine = Math.min(this.height, oracle.lineHeight * lines);\n            perLine = totalPerLine / lines;\n            if (this.length > lines + 1)\n                perChar = (this.height - totalPerLine) / (this.length - lines - 1);\n        }\n        else {\n            perLine = this.height / lines;\n        }\n        return { firstLine, lastLine, perLine, perChar };\n    }\n    blockAt(height, oracle, top, offset) {\n        let { firstLine, lastLine, perLine, perChar } = this.heightMetrics(oracle, offset);\n        if (oracle.lineWrapping) {\n            let guess = offset + (height < oracle.lineHeight ? 0\n                : Math.round(Math.max(0, Math.min(1, (height - top) / this.height)) * this.length));\n            let line = oracle.doc.lineAt(guess), lineHeight = perLine + line.length * perChar;\n            let lineTop = Math.max(top, height - lineHeight / 2);\n            return new BlockInfo(line.from, line.length, lineTop, lineHeight, 0);\n        }\n        else {\n            let line = Math.max(0, Math.min(lastLine - firstLine, Math.floor((height - top) / perLine)));\n            let { from, length } = oracle.doc.line(firstLine + line);\n            return new BlockInfo(from, length, top + perLine * line, perLine, 0);\n        }\n    }\n    lineAt(value, type, oracle, top, offset) {\n        if (type == QueryType.ByHeight)\n            return this.blockAt(value, oracle, top, offset);\n        if (type == QueryType.ByPosNoHeight) {\n            let { from, to } = oracle.doc.lineAt(value);\n            return new BlockInfo(from, to - from, 0, 0, 0);\n        }\n        let { firstLine, perLine, perChar } = this.heightMetrics(oracle, offset);\n        let line = oracle.doc.lineAt(value), lineHeight = perLine + line.length * perChar;\n        let linesAbove = line.number - firstLine;\n        let lineTop = top + perLine * linesAbove + perChar * (line.from - offset - linesAbove);\n        return new BlockInfo(line.from, line.length, Math.max(top, Math.min(lineTop, top + this.height - lineHeight)), lineHeight, 0);\n    }\n    forEachLine(from, to, oracle, top, offset, f) {\n        from = Math.max(from, offset);\n        to = Math.min(to, offset + this.length);\n        let { firstLine, perLine, perChar } = this.heightMetrics(oracle, offset);\n        for (let pos = from, lineTop = top; pos <= to;) {\n            let line = oracle.doc.lineAt(pos);\n            if (pos == from) {\n                let linesAbove = line.number - firstLine;\n                lineTop += perLine * linesAbove + perChar * (from - offset - linesAbove);\n            }\n            let lineHeight = perLine + perChar * line.length;\n            f(new BlockInfo(line.from, line.length, lineTop, lineHeight, 0));\n            lineTop += lineHeight;\n            pos = line.to + 1;\n        }\n    }\n    replace(from, to, nodes) {\n        let after = this.length - to;\n        if (after > 0) {\n            let last = nodes[nodes.length - 1];\n            if (last instanceof HeightMapGap)\n                nodes[nodes.length - 1] = new HeightMapGap(last.length + after);\n            else\n                nodes.push(null, new HeightMapGap(after - 1));\n        }\n        if (from > 0) {\n            let first = nodes[0];\n            if (first instanceof HeightMapGap)\n                nodes[0] = new HeightMapGap(from + first.length);\n            else\n                nodes.unshift(new HeightMapGap(from - 1), null);\n        }\n        return HeightMap.of(nodes);\n    }\n    decomposeLeft(to, result) {\n        result.push(new HeightMapGap(to - 1), null);\n    }\n    decomposeRight(from, result) {\n        result.push(null, new HeightMapGap(this.length - from - 1));\n    }\n    updateHeight(oracle, offset = 0, force = false, measured) {\n        let end = offset + this.length;\n        if (measured && measured.from <= offset + this.length && measured.more) {\n            // Fill in part of this gap with measured lines. We know there\n            // can't be widgets or collapsed ranges in those lines, because\n            // they would already have been added to the heightmap (gaps\n            // only contain plain text).\n            let nodes = [], pos = Math.max(offset, measured.from), singleHeight = -1;\n            if (measured.from > offset)\n                nodes.push(new HeightMapGap(measured.from - offset - 1).updateHeight(oracle, offset));\n            while (pos <= end && measured.more) {\n                let len = oracle.doc.lineAt(pos).length;\n                if (nodes.length)\n                    nodes.push(null);\n                let height = measured.heights[measured.index++], above = 0;\n                if (height < 0) {\n                    above = -height;\n                    height = measured.heights[measured.index++];\n                }\n                if (singleHeight == -1)\n                    singleHeight = height;\n                else if (Math.abs(height - singleHeight) >= Epsilon)\n                    singleHeight = -2;\n                let line = new HeightMapText(len, height, above);\n                line.outdated = false;\n                nodes.push(line);\n                pos += len + 1;\n            }\n            if (pos <= end)\n                nodes.push(null, new HeightMapGap(end - pos).updateHeight(oracle, pos));\n            let result = HeightMap.of(nodes);\n            if (singleHeight < 0 || Math.abs(result.height - this.height) >= Epsilon ||\n                Math.abs(singleHeight - this.heightMetrics(oracle, offset).perLine) >= Epsilon)\n                heightChangeFlag = true;\n            return replace(this, result);\n        }\n        else if (force || this.outdated) {\n            this.setHeight(oracle.heightForGap(offset, offset + this.length));\n            this.outdated = false;\n        }\n        return this;\n    }\n    toString() { return `gap(${this.length})`; }\n}\nclass HeightMapBranch extends HeightMap {\n    constructor(left, brk, right) {\n        super(left.length + brk + right.length, left.height + right.height, brk | (left.outdated || right.outdated ? 2 /* Flag.Outdated */ : 0));\n        this.left = left;\n        this.right = right;\n        this.size = left.size + right.size;\n    }\n    get break() { return this.flags & 1 /* Flag.Break */; }\n    blockAt(height, oracle, top, offset) {\n        let mid = top + this.left.height;\n        return height < mid ? this.left.blockAt(height, oracle, top, offset)\n            : this.right.blockAt(height, oracle, mid, offset + this.left.length + this.break);\n    }\n    lineAt(value, type, oracle, top, offset) {\n        let rightTop = top + this.left.height, rightOffset = offset + this.left.length + this.break;\n        let left = type == QueryType.ByHeight ? value < rightTop : value < rightOffset;\n        let base = left ? this.left.lineAt(value, type, oracle, top, offset)\n            : this.right.lineAt(value, type, oracle, rightTop, rightOffset);\n        if (this.break || (left ? base.to < rightOffset : base.from > rightOffset))\n            return base;\n        let subQuery = type == QueryType.ByPosNoHeight ? QueryType.ByPosNoHeight : QueryType.ByPos;\n        if (left)\n            return base.join(this.right.lineAt(rightOffset, subQuery, oracle, rightTop, rightOffset));\n        else\n            return this.left.lineAt(rightOffset, subQuery, oracle, top, offset).join(base);\n    }\n    forEachLine(from, to, oracle, top, offset, f) {\n        let rightTop = top + this.left.height, rightOffset = offset + this.left.length + this.break;\n        if (this.break) {\n            if (from < rightOffset)\n                this.left.forEachLine(from, to, oracle, top, offset, f);\n            if (to >= rightOffset)\n                this.right.forEachLine(from, to, oracle, rightTop, rightOffset, f);\n        }\n        else {\n            let mid = this.lineAt(rightOffset, QueryType.ByPos, oracle, top, offset);\n            if (from < mid.from)\n                this.left.forEachLine(from, mid.from - 1, oracle, top, offset, f);\n            if (mid.to >= from && mid.from <= to)\n                f(mid);\n            if (to > mid.to)\n                this.right.forEachLine(mid.to + 1, to, oracle, rightTop, rightOffset, f);\n        }\n    }\n    replace(from, to, nodes) {\n        let rightStart = this.left.length + this.break;\n        if (to < rightStart)\n            return this.balanced(this.left.replace(from, to, nodes), this.right);\n        if (from > this.left.length)\n            return this.balanced(this.left, this.right.replace(from - rightStart, to - rightStart, nodes));\n        let result = [];\n        if (from > 0)\n            this.decomposeLeft(from, result);\n        let left = result.length;\n        for (let node of nodes)\n            result.push(node);\n        if (from > 0)\n            mergeGaps(result, left - 1);\n        if (to < this.length) {\n            let right = result.length;\n            this.decomposeRight(to, result);\n            mergeGaps(result, right);\n        }\n        return HeightMap.of(result);\n    }\n    decomposeLeft(to, result) {\n        let left = this.left.length;\n        if (to <= left)\n            return this.left.decomposeLeft(to, result);\n        result.push(this.left);\n        if (this.break) {\n            left++;\n            if (to >= left)\n                result.push(null);\n        }\n        if (to > left)\n            this.right.decomposeLeft(to - left, result);\n    }\n    decomposeRight(from, result) {\n        let left = this.left.length, right = left + this.break;\n        if (from >= right)\n            return this.right.decomposeRight(from - right, result);\n        if (from < left)\n            this.left.decomposeRight(from, result);\n        if (this.break && from < right)\n            result.push(null);\n        result.push(this.right);\n    }\n    balanced(left, right) {\n        if (left.size > 2 * right.size || right.size > 2 * left.size)\n            return HeightMap.of(this.break ? [left, null, right] : [left, right]);\n        this.left = replace(this.left, left);\n        this.right = replace(this.right, right);\n        this.setHeight(left.height + right.height);\n        this.outdated = left.outdated || right.outdated;\n        this.size = left.size + right.size;\n        this.length = left.length + this.break + right.length;\n        return this;\n    }\n    updateHeight(oracle, offset = 0, force = false, measured) {\n        let { left, right } = this, rightStart = offset + left.length + this.break, rebalance = null;\n        if (measured && measured.from <= offset + left.length && measured.more)\n            rebalance = left = left.updateHeight(oracle, offset, force, measured);\n        else\n            left.updateHeight(oracle, offset, force);\n        if (measured && measured.from <= rightStart + right.length && measured.more)\n            rebalance = right = right.updateHeight(oracle, rightStart, force, measured);\n        else\n            right.updateHeight(oracle, rightStart, force);\n        if (rebalance)\n            return this.balanced(left, right);\n        this.height = this.left.height + this.right.height;\n        this.outdated = false;\n        return this;\n    }\n    toString() { return this.left + (this.break ? \" \" : \"-\") + this.right; }\n}\nfunction mergeGaps(nodes, around) {\n    let before, after;\n    if (nodes[around] == null &&\n        (before = nodes[around - 1]) instanceof HeightMapGap &&\n        (after = nodes[around + 1]) instanceof HeightMapGap)\n        nodes.splice(around - 1, 3, new HeightMapGap(before.length + 1 + after.length));\n}\nconst relevantWidgetHeight = 5;\nclass NodeBuilder {\n    constructor(pos, oracle) {\n        this.pos = pos;\n        this.oracle = oracle;\n        this.nodes = [];\n        this.lineStart = -1;\n        this.lineEnd = -1;\n        this.covering = null;\n        this.writtenTo = pos;\n    }\n    get isCovered() {\n        return this.covering && this.nodes[this.nodes.length - 1] == this.covering;\n    }\n    span(_from, to) {\n        if (this.lineStart > -1) {\n            let end = Math.min(to, this.lineEnd), last = this.nodes[this.nodes.length - 1];\n            if (last instanceof HeightMapText)\n                last.length += end - this.pos;\n            else if (end > this.pos || !this.isCovered)\n                this.nodes.push(new HeightMapText(end - this.pos, -1, 0));\n            this.writtenTo = end;\n            if (to > end) {\n                this.nodes.push(null);\n                this.writtenTo++;\n                this.lineStart = -1;\n            }\n        }\n        this.pos = to;\n    }\n    point(from, to, deco) {\n        if (from < to || deco.heightRelevant) {\n            let height = deco.widget ? deco.widget.estimatedHeight : 0;\n            let breaks = deco.widget ? deco.widget.lineBreaks : 0;\n            if (height < 0)\n                height = this.oracle.lineHeight;\n            let len = to - from;\n            if (deco.block) {\n                this.addBlock(new HeightMapBlock(len, height, deco));\n            }\n            else if (len || breaks || height >= relevantWidgetHeight) {\n                this.addLineDeco(height, breaks, len);\n            }\n        }\n        else if (to > from) {\n            this.span(from, to);\n        }\n        if (this.lineEnd > -1 && this.lineEnd < this.pos)\n            this.lineEnd = this.oracle.doc.lineAt(this.pos).to;\n    }\n    enterLine() {\n        if (this.lineStart > -1)\n            return;\n        let { from, to } = this.oracle.doc.lineAt(this.pos);\n        this.lineStart = from;\n        this.lineEnd = to;\n        if (this.writtenTo < from) {\n            if (this.writtenTo < from - 1 || this.nodes[this.nodes.length - 1] == null)\n                this.nodes.push(this.blankContent(this.writtenTo, from - 1));\n            this.nodes.push(null);\n        }\n        if (this.pos > from)\n            this.nodes.push(new HeightMapText(this.pos - from, -1, 0));\n        this.writtenTo = this.pos;\n    }\n    blankContent(from, to) {\n        let gap = new HeightMapGap(to - from);\n        if (this.oracle.doc.lineAt(from).to == to)\n            gap.flags |= 4 /* Flag.SingleLine */;\n        return gap;\n    }\n    ensureLine() {\n        this.enterLine();\n        let last = this.nodes.length ? this.nodes[this.nodes.length - 1] : null;\n        if (last instanceof HeightMapText)\n            return last;\n        let line = new HeightMapText(0, -1, 0);\n        this.nodes.push(line);\n        return line;\n    }\n    addBlock(block) {\n        this.enterLine();\n        let deco = block.deco;\n        if (deco && deco.startSide > 0 && !this.isCovered)\n            this.ensureLine();\n        this.nodes.push(block);\n        this.writtenTo = this.pos = this.pos + block.length;\n        if (deco && deco.endSide > 0)\n            this.covering = block;\n    }\n    addLineDeco(height, breaks, length) {\n        let line = this.ensureLine();\n        line.length += length;\n        line.collapsed += length;\n        line.widgetHeight = Math.max(line.widgetHeight, height);\n        line.breaks += breaks;\n        this.writtenTo = this.pos = this.pos + length;\n    }\n    finish(from) {\n        let last = this.nodes.length == 0 ? null : this.nodes[this.nodes.length - 1];\n        if (this.lineStart > -1 && !(last instanceof HeightMapText) && !this.isCovered)\n            this.nodes.push(new HeightMapText(0, -1, 0));\n        else if (this.writtenTo < this.pos || last == null)\n            this.nodes.push(this.blankContent(this.writtenTo, this.pos));\n        let pos = from;\n        for (let node of this.nodes) {\n            if (node instanceof HeightMapText)\n                node.updateHeight(this.oracle, pos);\n            pos += node ? node.length : 1;\n        }\n        return this.nodes;\n    }\n    // Always called with a region that on both sides either stretches\n    // to a line break or the end of the document.\n    // The returned array uses null to indicate line breaks, but never\n    // starts or ends in a line break, or has multiple line breaks next\n    // to each other.\n    static build(oracle, decorations, from, to) {\n        let builder = new NodeBuilder(from, oracle);\n        RangeSet.spans(decorations, from, to, builder, 0);\n        return builder.finish(from);\n    }\n}\nfunction heightRelevantDecoChanges(a, b, diff) {\n    let comp = new DecorationComparator;\n    RangeSet.compare(a, b, diff, comp, 0);\n    return comp.changes;\n}\nclass DecorationComparator {\n    constructor() {\n        this.changes = [];\n    }\n    compareRange() { }\n    comparePoint(from, to, a, b) {\n        if (from < to || a && a.heightRelevant || b && b.heightRelevant)\n            addRange(from, to, this.changes, 5);\n    }\n}\n\nfunction visiblePixelRange(dom, paddingTop) {\n    let rect = dom.getBoundingClientRect();\n    let doc = dom.ownerDocument, win = doc.defaultView || window;\n    let left = Math.max(0, rect.left), right = Math.min(win.innerWidth, rect.right);\n    let top = Math.max(0, rect.top), bottom = Math.min(win.innerHeight, rect.bottom);\n    for (let parent = dom.parentNode; parent && parent != doc.body;) {\n        if (parent.nodeType == 1) {\n            let elt = parent;\n            let style = window.getComputedStyle(elt);\n            if ((elt.scrollHeight > elt.clientHeight || elt.scrollWidth > elt.clientWidth) &&\n                style.overflow != \"visible\") {\n                let parentRect = elt.getBoundingClientRect();\n                left = Math.max(left, parentRect.left);\n                right = Math.min(right, parentRect.right);\n                top = Math.max(top, parentRect.top);\n                bottom = Math.min(parent == dom.parentNode ? win.innerHeight : bottom, parentRect.bottom);\n            }\n            parent = style.position == \"absolute\" || style.position == \"fixed\" ? elt.offsetParent : elt.parentNode;\n        }\n        else if (parent.nodeType == 11) { // Shadow root\n            parent = parent.host;\n        }\n        else {\n            break;\n        }\n    }\n    return { left: left - rect.left, right: Math.max(left, right) - rect.left,\n        top: top - (rect.top + paddingTop), bottom: Math.max(top, bottom) - (rect.top + paddingTop) };\n}\nfunction inWindow(elt) {\n    let rect = elt.getBoundingClientRect(), win = elt.ownerDocument.defaultView || window;\n    return rect.left < win.innerWidth && rect.right > 0 &&\n        rect.top < win.innerHeight && rect.bottom > 0;\n}\nfunction fullPixelRange(dom, paddingTop) {\n    let rect = dom.getBoundingClientRect();\n    return { left: 0, right: rect.right - rect.left,\n        top: paddingTop, bottom: rect.bottom - (rect.top + paddingTop) };\n}\n// Line gaps are placeholder widgets used to hide pieces of overlong\n// lines within the viewport, as a kludge to keep the editor\n// responsive when a ridiculously long line is loaded into it.\nclass LineGap {\n    constructor(from, to, size, displaySize) {\n        this.from = from;\n        this.to = to;\n        this.size = size;\n        this.displaySize = displaySize;\n    }\n    static same(a, b) {\n        if (a.length != b.length)\n            return false;\n        for (let i = 0; i < a.length; i++) {\n            let gA = a[i], gB = b[i];\n            if (gA.from != gB.from || gA.to != gB.to || gA.size != gB.size)\n                return false;\n        }\n        return true;\n    }\n    draw(viewState, wrapping) {\n        return Decoration.replace({\n            widget: new LineGapWidget(this.displaySize * (wrapping ? viewState.scaleY : viewState.scaleX), wrapping)\n        }).range(this.from, this.to);\n    }\n}\nclass LineGapWidget extends WidgetType {\n    constructor(size, vertical) {\n        super();\n        this.size = size;\n        this.vertical = vertical;\n    }\n    eq(other) { return other.size == this.size && other.vertical == this.vertical; }\n    toDOM() {\n        let elt = document.createElement(\"div\");\n        if (this.vertical) {\n            elt.style.height = this.size + \"px\";\n        }\n        else {\n            elt.style.width = this.size + \"px\";\n            elt.style.height = \"2px\";\n            elt.style.display = \"inline-block\";\n        }\n        return elt;\n    }\n    get estimatedHeight() { return this.vertical ? this.size : -1; }\n}\nclass ViewState {\n    constructor(view, state) {\n        this.view = view;\n        this.state = state;\n        // These are contentDOM-local coordinates\n        this.pixelViewport = { left: 0, right: window.innerWidth, top: 0, bottom: 0 };\n        this.inView = true;\n        this.paddingTop = 0; // Padding above the document, scaled\n        this.paddingBottom = 0; // Padding below the document, scaled\n        this.contentDOMWidth = 0; // contentDOM.getBoundingClientRect().width\n        this.contentDOMHeight = 0; // contentDOM.getBoundingClientRect().height\n        this.editorHeight = 0; // scrollDOM.clientHeight, unscaled\n        this.editorWidth = 0; // scrollDOM.clientWidth, unscaled\n        // The CSS-transformation scale of the editor (transformed size /\n        // concrete size)\n        this.scaleX = 1;\n        this.scaleY = 1;\n        // Last seen vertical offset of the element at the top of the scroll\n        // container, or top of the window if there's no wrapping scroller\n        this.scrollOffset = 0;\n        this.scrolledToBottom = false;\n        // The vertical position (document-relative) to which to anchor the\n        // scroll position. -1 means anchor to the end of the document.\n        this.scrollAnchorPos = 0;\n        // The height at the anchor position. Set by the DOM update phase.\n        // -1 means no height available.\n        this.scrollAnchorHeight = -1;\n        // See VP.MaxDOMHeight\n        this.scaler = IdScaler;\n        this.scrollTarget = null;\n        // Briefly set to true when printing, to disable viewport limiting\n        this.printing = false;\n        // Flag set when editor content was redrawn, so that the next\n        // measure stage knows it must read DOM layout\n        this.mustMeasureContent = true;\n        this.defaultTextDirection = Direction.LTR;\n        this.visibleRanges = [];\n        // Cursor 'assoc' is only significant when the cursor is on a line\n        // wrap point, where it must stick to the character that it is\n        // associated with. Since browsers don't provide a reasonable\n        // interface to set or query this, when a selection is set that\n        // might cause this to be significant, this flag is set. The next\n        // measure phase will check whether the cursor is on a line-wrapping\n        // boundary and, if so, reset it to make sure it is positioned in\n        // the right place.\n        this.mustEnforceCursorAssoc = false;\n        let guessWrapping = state.facet(contentAttributes).some(v => typeof v != \"function\" && v.class == \"cm-lineWrapping\");\n        this.heightOracle = new HeightOracle(guessWrapping);\n        this.stateDeco = staticDeco(state);\n        this.heightMap = HeightMap.empty().applyChanges(this.stateDeco, Text.empty, this.heightOracle.setDoc(state.doc), [new ChangedRange(0, 0, 0, state.doc.length)]);\n        for (let i = 0; i < 2; i++) {\n            this.viewport = this.getViewport(0, null);\n            if (!this.updateForViewport())\n                break;\n        }\n        this.updateViewportLines();\n        this.lineGaps = this.ensureLineGaps([]);\n        this.lineGapDeco = Decoration.set(this.lineGaps.map(gap => gap.draw(this, false)));\n        this.scrollParent = view.scrollDOM;\n        this.computeVisibleRanges();\n    }\n    updateForViewport() {\n        let viewports = [this.viewport], { main } = this.state.selection;\n        for (let i = 0; i <= 1; i++) {\n            let pos = i ? main.head : main.anchor;\n            if (!viewports.some(({ from, to }) => pos >= from && pos <= to)) {\n                let { from, to } = this.lineBlockAt(pos);\n                viewports.push(new Viewport(from, to));\n            }\n        }\n        this.viewports = viewports.sort((a, b) => a.from - b.from);\n        return this.updateScaler();\n    }\n    updateScaler() {\n        let scaler = this.scaler;\n        this.scaler = this.heightMap.height <= 7000000 /* VP.MaxDOMHeight */ ? IdScaler :\n            new BigScaler(this.heightOracle, this.heightMap, this.viewports);\n        return scaler.eq(this.scaler) ? 0 : 2 /* UpdateFlag.Height */;\n    }\n    updateViewportLines() {\n        this.viewportLines = [];\n        this.heightMap.forEachLine(this.viewport.from, this.viewport.to, this.heightOracle.setDoc(this.state.doc), 0, 0, block => {\n            this.viewportLines.push(scaleBlock(block, this.scaler));\n        });\n    }\n    update(update, scrollTarget = null) {\n        this.state = update.state;\n        let prevDeco = this.stateDeco;\n        this.stateDeco = staticDeco(this.state);\n        let contentChanges = update.changedRanges;\n        let heightChanges = ChangedRange.extendWithRanges(contentChanges, heightRelevantDecoChanges(prevDeco, this.stateDeco, update ? update.changes : ChangeSet.empty(this.state.doc.length)));\n        let prevHeight = this.heightMap.height;\n        let scrollAnchor = this.scrolledToBottom ? null : this.scrollAnchorAt(this.scrollOffset);\n        clearHeightChangeFlag();\n        this.heightMap = this.heightMap.applyChanges(this.stateDeco, update.startState.doc, this.heightOracle.setDoc(this.state.doc), heightChanges);\n        if (this.heightMap.height != prevHeight || heightChangeFlag)\n            update.flags |= 2 /* UpdateFlag.Height */;\n        if (scrollAnchor) {\n            this.scrollAnchorPos = update.changes.mapPos(scrollAnchor.from, -1);\n            this.scrollAnchorHeight = scrollAnchor.top;\n        }\n        else {\n            this.scrollAnchorPos = -1;\n            this.scrollAnchorHeight = prevHeight;\n        }\n        let viewport = heightChanges.length ? this.mapViewport(this.viewport, update.changes) : this.viewport;\n        if (scrollTarget && (scrollTarget.range.head < viewport.from || scrollTarget.range.head > viewport.to) ||\n            !this.viewportIsAppropriate(viewport))\n            viewport = this.getViewport(0, scrollTarget);\n        let viewportChange = viewport.from != this.viewport.from || viewport.to != this.viewport.to;\n        this.viewport = viewport;\n        update.flags |= this.updateForViewport();\n        if (viewportChange || !update.changes.empty || (update.flags & 2 /* UpdateFlag.Height */))\n            this.updateViewportLines();\n        if (this.lineGaps.length || this.viewport.to - this.viewport.from > (2000 /* LG.Margin */ << 1))\n            this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps, update.changes)));\n        update.flags |= this.computeVisibleRanges(update.changes);\n        if (scrollTarget)\n            this.scrollTarget = scrollTarget;\n        if (!this.mustEnforceCursorAssoc && (update.selectionSet || update.focusChanged) && update.view.lineWrapping &&\n            update.state.selection.main.empty && update.state.selection.main.assoc &&\n            !update.state.facet(nativeSelectionHidden))\n            this.mustEnforceCursorAssoc = true;\n    }\n    measure() {\n        let { view } = this, dom = view.contentDOM, style = window.getComputedStyle(dom);\n        let oracle = this.heightOracle;\n        let whiteSpace = style.whiteSpace;\n        this.defaultTextDirection = style.direction == \"rtl\" ? Direction.RTL : Direction.LTR;\n        let refresh = this.heightOracle.mustRefreshForWrapping(whiteSpace) || this.mustMeasureContent === \"refresh\";\n        let domRect = dom.getBoundingClientRect();\n        let measureContent = refresh || this.mustMeasureContent || this.contentDOMHeight != domRect.height;\n        this.contentDOMHeight = domRect.height;\n        this.mustMeasureContent = false;\n        let result = 0, bias = 0;\n        if (domRect.width && domRect.height) {\n            let { scaleX, scaleY } = getScale(dom, domRect);\n            if (scaleX > .005 && Math.abs(this.scaleX - scaleX) > .005 ||\n                scaleY > .005 && Math.abs(this.scaleY - scaleY) > .005) {\n                this.scaleX = scaleX;\n                this.scaleY = scaleY;\n                result |= 16 /* UpdateFlag.Geometry */;\n                refresh = measureContent = true;\n            }\n        }\n        // Vertical padding\n        let paddingTop = (parseInt(style.paddingTop) || 0) * this.scaleY;\n        let paddingBottom = (parseInt(style.paddingBottom) || 0) * this.scaleY;\n        if (this.paddingTop != paddingTop || this.paddingBottom != paddingBottom) {\n            this.paddingTop = paddingTop;\n            this.paddingBottom = paddingBottom;\n            result |= 16 /* UpdateFlag.Geometry */ | 2 /* UpdateFlag.Height */;\n        }\n        if (this.editorWidth != view.scrollDOM.clientWidth) {\n            if (oracle.lineWrapping)\n                measureContent = true;\n            this.editorWidth = view.scrollDOM.clientWidth;\n            result |= 16 /* UpdateFlag.Geometry */;\n        }\n        let scrollParent = scrollableParents(this.view.contentDOM, false).y;\n        if (scrollParent != this.scrollParent) {\n            this.scrollParent = scrollParent;\n            this.scrollAnchorHeight = -1;\n            this.scrollOffset = 0;\n        }\n        let scrollOffset = this.getScrollOffset();\n        if (this.scrollOffset != scrollOffset) {\n            this.scrollAnchorHeight = -1;\n            this.scrollOffset = scrollOffset;\n        }\n        this.scrolledToBottom = isScrolledToBottom(this.scrollParent || view.win);\n        // Pixel viewport\n        let pixelViewport = (this.printing ? fullPixelRange : visiblePixelRange)(dom, this.paddingTop);\n        let dTop = pixelViewport.top - this.pixelViewport.top, dBottom = pixelViewport.bottom - this.pixelViewport.bottom;\n        this.pixelViewport = pixelViewport;\n        let inView = this.pixelViewport.bottom > this.pixelViewport.top && this.pixelViewport.right > this.pixelViewport.left;\n        if (inView != this.inView) {\n            this.inView = inView;\n            if (inView)\n                measureContent = true;\n        }\n        if (!this.inView && !this.scrollTarget && !inWindow(view.dom))\n            return 0;\n        let contentWidth = domRect.width;\n        if (this.contentDOMWidth != contentWidth || this.editorHeight != view.scrollDOM.clientHeight) {\n            this.contentDOMWidth = domRect.width;\n            this.editorHeight = view.scrollDOM.clientHeight;\n            result |= 16 /* UpdateFlag.Geometry */;\n        }\n        if (measureContent) {\n            let lineHeights = view.docView.measureVisibleLineHeights(this.viewport);\n            if (oracle.mustRefreshForHeights(lineHeights))\n                refresh = true;\n            if (refresh || oracle.lineWrapping && Math.abs(contentWidth - this.contentDOMWidth) > oracle.charWidth) {\n                let { lineHeight, charWidth, textHeight } = view.docView.measureTextSize();\n                refresh = lineHeight > 0 && oracle.refresh(whiteSpace, lineHeight, charWidth, textHeight, Math.max(5, contentWidth / charWidth), lineHeights);\n                if (refresh) {\n                    view.docView.minWidth = 0;\n                    result |= 16 /* UpdateFlag.Geometry */;\n                }\n            }\n            if (dTop > 0 && dBottom > 0)\n                bias = Math.max(dTop, dBottom);\n            else if (dTop < 0 && dBottom < 0)\n                bias = Math.min(dTop, dBottom);\n            clearHeightChangeFlag();\n            for (let vp of this.viewports) {\n                let heights = vp.from == this.viewport.from ? lineHeights : view.docView.measureVisibleLineHeights(vp);\n                this.heightMap = (refresh ? HeightMap.empty().applyChanges(this.stateDeco, Text.empty, this.heightOracle, [new ChangedRange(0, 0, 0, view.state.doc.length)]) : this.heightMap).updateHeight(oracle, 0, refresh, new MeasuredHeights(vp.from, heights));\n            }\n            if (heightChangeFlag)\n                result |= 2 /* UpdateFlag.Height */;\n        }\n        let viewportChange = !this.viewportIsAppropriate(this.viewport, bias) ||\n            this.scrollTarget && (this.scrollTarget.range.head < this.viewport.from ||\n                this.scrollTarget.range.head > this.viewport.to);\n        if (viewportChange) {\n            if (result & 2 /* UpdateFlag.Height */)\n                result |= this.updateScaler();\n            this.viewport = this.getViewport(bias, this.scrollTarget);\n            result |= this.updateForViewport();\n        }\n        if ((result & 2 /* UpdateFlag.Height */) || viewportChange)\n            this.updateViewportLines();\n        if (this.lineGaps.length || this.viewport.to - this.viewport.from > (2000 /* LG.Margin */ << 1))\n            this.updateLineGaps(this.ensureLineGaps(refresh ? [] : this.lineGaps, view));\n        result |= this.computeVisibleRanges();\n        if (this.mustEnforceCursorAssoc) {\n            this.mustEnforceCursorAssoc = false;\n            // This is done in the read stage, because moving the selection\n            // to a line end is going to trigger a layout anyway, so it\n            // can't be a pure write. It should be rare that it does any\n            // writing.\n            view.docView.enforceCursorAssoc();\n        }\n        return result;\n    }\n    get visibleTop() { return this.scaler.fromDOM(this.pixelViewport.top); }\n    get visibleBottom() { return this.scaler.fromDOM(this.pixelViewport.bottom); }\n    getViewport(bias, scrollTarget) {\n        // This will divide VP.Margin between the top and the\n        // bottom, depending on the bias (the change in viewport position\n        // since the last update). It'll hold a number between 0 and 1\n        let marginTop = 0.5 - Math.max(-0.5, Math.min(0.5, bias / 1000 /* VP.Margin */ / 2));\n        let map = this.heightMap, oracle = this.heightOracle;\n        let { visibleTop, visibleBottom } = this;\n        let viewport = new Viewport(map.lineAt(visibleTop - marginTop * 1000 /* VP.Margin */, QueryType.ByHeight, oracle, 0, 0).from, map.lineAt(visibleBottom + (1 - marginTop) * 1000 /* VP.Margin */, QueryType.ByHeight, oracle, 0, 0).to);\n        // If scrollTarget is given, make sure the viewport includes that position\n        if (scrollTarget) {\n            let { head } = scrollTarget.range;\n            if (head < viewport.from || head > viewport.to) {\n                let viewHeight = Math.min(this.editorHeight, this.pixelViewport.bottom - this.pixelViewport.top);\n                let block = map.lineAt(head, QueryType.ByPos, oracle, 0, 0), topPos;\n                if (scrollTarget.y == \"center\")\n                    topPos = (block.top + block.bottom) / 2 - viewHeight / 2;\n                else if (scrollTarget.y == \"start\" || scrollTarget.y == \"nearest\" && head < viewport.from)\n                    topPos = block.top;\n                else\n                    topPos = block.bottom - viewHeight;\n                viewport = new Viewport(map.lineAt(topPos - 1000 /* VP.Margin */ / 2, QueryType.ByHeight, oracle, 0, 0).from, map.lineAt(topPos + viewHeight + 1000 /* VP.Margin */ / 2, QueryType.ByHeight, oracle, 0, 0).to);\n            }\n        }\n        return viewport;\n    }\n    mapViewport(viewport, changes) {\n        let from = changes.mapPos(viewport.from, -1), to = changes.mapPos(viewport.to, 1);\n        return new Viewport(this.heightMap.lineAt(from, QueryType.ByPos, this.heightOracle, 0, 0).from, this.heightMap.lineAt(to, QueryType.ByPos, this.heightOracle, 0, 0).to);\n    }\n    // Checks if a given viewport covers the visible part of the\n    // document and not too much beyond that.\n    viewportIsAppropriate({ from, to }, bias = 0) {\n        if (!this.inView)\n            return true;\n        let { top } = this.heightMap.lineAt(from, QueryType.ByPos, this.heightOracle, 0, 0);\n        let { bottom } = this.heightMap.lineAt(to, QueryType.ByPos, this.heightOracle, 0, 0);\n        let { visibleTop, visibleBottom } = this;\n        return (from == 0 || top <= visibleTop - Math.max(10 /* VP.MinCoverMargin */, Math.min(-bias, 250 /* VP.MaxCoverMargin */))) &&\n            (to == this.state.doc.length ||\n                bottom >= visibleBottom + Math.max(10 /* VP.MinCoverMargin */, Math.min(bias, 250 /* VP.MaxCoverMargin */))) &&\n            (top > visibleTop - 2 * 1000 /* VP.Margin */ && bottom < visibleBottom + 2 * 1000 /* VP.Margin */);\n    }\n    mapLineGaps(gaps, changes) {\n        if (!gaps.length || changes.empty)\n            return gaps;\n        let mapped = [];\n        for (let gap of gaps)\n            if (!changes.touchesRange(gap.from, gap.to))\n                mapped.push(new LineGap(changes.mapPos(gap.from), changes.mapPos(gap.to), gap.size, gap.displaySize));\n        return mapped;\n    }\n    // Computes positions in the viewport where the start or end of a\n    // line should be hidden, trying to reuse existing line gaps when\n    // appropriate to avoid unneccesary redraws.\n    // Uses crude character-counting for the positioning and sizing,\n    // since actual DOM coordinates aren't always available and\n    // predictable. Relies on generous margins (see LG.Margin) to hide\n    // the artifacts this might produce from the user.\n    ensureLineGaps(current, mayMeasure) {\n        let wrapping = this.heightOracle.lineWrapping;\n        let margin = wrapping ? 10000 /* LG.MarginWrap */ : 2000 /* LG.Margin */, halfMargin = margin >> 1, doubleMargin = margin << 1;\n        // The non-wrapping logic won't work at all in predominantly right-to-left text.\n        if (this.defaultTextDirection != Direction.LTR && !wrapping)\n            return [];\n        let gaps = [];\n        let addGap = (from, to, line, structure) => {\n            if (to - from < halfMargin)\n                return;\n            let sel = this.state.selection.main, avoid = [sel.from];\n            if (!sel.empty)\n                avoid.push(sel.to);\n            for (let pos of avoid) {\n                if (pos > from && pos < to) {\n                    addGap(from, pos - 10 /* LG.SelectionMargin */, line, structure);\n                    addGap(pos + 10 /* LG.SelectionMargin */, to, line, structure);\n                    return;\n                }\n            }\n            let gap = find(current, gap => gap.from >= line.from && gap.to <= line.to &&\n                Math.abs(gap.from - from) < halfMargin && Math.abs(gap.to - to) < halfMargin &&\n                !avoid.some(pos => gap.from < pos && gap.to > pos));\n            if (!gap) {\n                // When scrolling down, snap gap ends to line starts to avoid shifts in wrapping\n                if (to < line.to && mayMeasure && wrapping &&\n                    mayMeasure.visibleRanges.some(r => r.from <= to && r.to >= to)) {\n                    let lineStart = mayMeasure.moveToLineBoundary(EditorSelection.cursor(to), false, true).head;\n                    if (lineStart > from)\n                        to = lineStart;\n                }\n                let size = this.gapSize(line, from, to, structure);\n                let displaySize = wrapping || size < 2000000 /* VP.MaxHorizGap */ ? size : 2000000 /* VP.MaxHorizGap */;\n                gap = new LineGap(from, to, size, displaySize);\n            }\n            gaps.push(gap);\n        };\n        let checkLine = (line) => {\n            if (line.length < doubleMargin || line.type != BlockType.Text)\n                return;\n            let structure = lineStructure(line.from, line.to, this.stateDeco);\n            if (structure.total < doubleMargin)\n                return;\n            let target = this.scrollTarget ? this.scrollTarget.range.head : null;\n            let viewFrom, viewTo;\n            if (wrapping) {\n                let marginHeight = (margin / this.heightOracle.lineLength) * this.heightOracle.lineHeight;\n                let top, bot;\n                if (target != null) {\n                    let targetFrac = findFraction(structure, target);\n                    let spaceFrac = ((this.visibleBottom - this.visibleTop) / 2 + marginHeight) / line.height;\n                    top = targetFrac - spaceFrac;\n                    bot = targetFrac + spaceFrac;\n                }\n                else {\n                    top = (this.visibleTop - line.top - marginHeight) / line.height;\n                    bot = (this.visibleBottom - line.top + marginHeight) / line.height;\n                }\n                viewFrom = findPosition(structure, top);\n                viewTo = findPosition(structure, bot);\n            }\n            else {\n                let totalWidth = structure.total * this.heightOracle.charWidth;\n                let marginWidth = margin * this.heightOracle.charWidth;\n                let horizOffset = 0;\n                if (totalWidth > 2000000 /* VP.MaxHorizGap */)\n                    for (let old of current) {\n                        if (old.from >= line.from && old.from < line.to && old.size != old.displaySize &&\n                            old.from * this.heightOracle.charWidth + horizOffset < this.pixelViewport.left)\n                            horizOffset = old.size - old.displaySize;\n                    }\n                let pxLeft = this.pixelViewport.left + horizOffset, pxRight = this.pixelViewport.right + horizOffset;\n                let left, right;\n                if (target != null) {\n                    let targetFrac = findFraction(structure, target);\n                    let spaceFrac = ((pxRight - pxLeft) / 2 + marginWidth) / totalWidth;\n                    left = targetFrac - spaceFrac;\n                    right = targetFrac + spaceFrac;\n                }\n                else {\n                    left = (pxLeft - marginWidth) / totalWidth;\n                    right = (pxRight + marginWidth) / totalWidth;\n                }\n                viewFrom = findPosition(structure, left);\n                viewTo = findPosition(structure, right);\n            }\n            if (viewFrom > line.from)\n                addGap(line.from, viewFrom, line, structure);\n            if (viewTo < line.to)\n                addGap(viewTo, line.to, line, structure);\n        };\n        for (let line of this.viewportLines) {\n            if (Array.isArray(line.type))\n                line.type.forEach(checkLine);\n            else\n                checkLine(line);\n        }\n        return gaps;\n    }\n    gapSize(line, from, to, structure) {\n        let fraction = findFraction(structure, to) - findFraction(structure, from);\n        if (this.heightOracle.lineWrapping) {\n            return line.height * fraction;\n        }\n        else {\n            return structure.total * this.heightOracle.charWidth * fraction;\n        }\n    }\n    updateLineGaps(gaps) {\n        if (!LineGap.same(gaps, this.lineGaps)) {\n            this.lineGaps = gaps;\n            this.lineGapDeco = Decoration.set(gaps.map(gap => gap.draw(this, this.heightOracle.lineWrapping)));\n        }\n    }\n    computeVisibleRanges(changes) {\n        let deco = this.stateDeco;\n        if (this.lineGaps.length)\n            deco = deco.concat(this.lineGapDeco);\n        let ranges = [];\n        RangeSet.spans(deco, this.viewport.from, this.viewport.to, {\n            span(from, to) { ranges.push({ from, to }); },\n            point() { }\n        }, 20);\n        let changed = 0;\n        if (ranges.length != this.visibleRanges.length) {\n            changed = 8 /* UpdateFlag.ViewportMoved */ | 4 /* UpdateFlag.Viewport */;\n        }\n        else {\n            for (let i = 0; i < ranges.length && !(changed & 8 /* UpdateFlag.ViewportMoved */); i++) {\n                let old = this.visibleRanges[i], nw = ranges[i];\n                if (old.from != nw.from || old.to != nw.to) {\n                    changed |= 4 /* UpdateFlag.Viewport */;\n                    if (!(changes && changes.mapPos(old.from, -1) == nw.from && changes.mapPos(old.to, 1) == nw.to))\n                        changed |= 8 /* UpdateFlag.ViewportMoved */;\n                }\n            }\n        }\n        this.visibleRanges = ranges;\n        return changed;\n    }\n    lineBlockAt(pos) {\n        return (pos >= this.viewport.from && pos <= this.viewport.to &&\n            this.viewportLines.find(b => b.from <= pos && b.to >= pos)) ||\n            scaleBlock(this.heightMap.lineAt(pos, QueryType.ByPos, this.heightOracle, 0, 0), this.scaler);\n    }\n    lineBlockAtHeight(height) {\n        return (height >= this.viewportLines[0].top && height <= this.viewportLines[this.viewportLines.length - 1].bottom &&\n            this.viewportLines.find(l => l.top <= height && l.bottom >= height)) ||\n            scaleBlock(this.heightMap.lineAt(this.scaler.fromDOM(height), QueryType.ByHeight, this.heightOracle, 0, 0), this.scaler);\n    }\n    getScrollOffset() {\n        let base = this.scrollParent == this.view.scrollDOM ? this.scrollParent.scrollTop\n            : (this.scrollParent ? this.scrollParent.getBoundingClientRect().top : 0) - this.view.contentDOM.getBoundingClientRect().top;\n        return base * this.scaleY;\n    }\n    scrollAnchorAt(scrollOffset) {\n        let block = this.lineBlockAtHeight(scrollOffset + 8);\n        return block.from >= this.viewport.from || this.viewportLines[0].top - scrollOffset > 200 ? block : this.viewportLines[0];\n    }\n    elementAtHeight(height) {\n        return scaleBlock(this.heightMap.blockAt(this.scaler.fromDOM(height), this.heightOracle, 0, 0), this.scaler);\n    }\n    get docHeight() {\n        return this.scaler.toDOM(this.heightMap.height);\n    }\n    get contentHeight() {\n        return this.docHeight + this.paddingTop + this.paddingBottom;\n    }\n}\nclass Viewport {\n    constructor(from, to) {\n        this.from = from;\n        this.to = to;\n    }\n}\nfunction lineStructure(from, to, stateDeco) {\n    let ranges = [], pos = from, total = 0;\n    RangeSet.spans(stateDeco, from, to, {\n        span() { },\n        point(from, to) {\n            if (from > pos) {\n                ranges.push({ from: pos, to: from });\n                total += from - pos;\n            }\n            pos = to;\n        }\n    }, 20); // We're only interested in collapsed ranges of a significant size\n    if (pos < to) {\n        ranges.push({ from: pos, to });\n        total += to - pos;\n    }\n    return { total, ranges };\n}\nfunction findPosition({ total, ranges }, ratio) {\n    if (ratio <= 0)\n        return ranges[0].from;\n    if (ratio >= 1)\n        return ranges[ranges.length - 1].to;\n    let dist = Math.floor(total * ratio);\n    for (let i = 0;; i++) {\n        let { from, to } = ranges[i], size = to - from;\n        if (dist <= size)\n            return from + dist;\n        dist -= size;\n    }\n}\nfunction findFraction(structure, pos) {\n    let counted = 0;\n    for (let { from, to } of structure.ranges) {\n        if (pos <= to) {\n            counted += pos - from;\n            break;\n        }\n        counted += to - from;\n    }\n    return counted / structure.total;\n}\nfunction find(array, f) {\n    for (let val of array)\n        if (f(val))\n            return val;\n    return undefined;\n}\n// Don't scale when the document height is within the range of what\n// the DOM can handle.\nconst IdScaler = {\n    toDOM(n) { return n; },\n    fromDOM(n) { return n; },\n    scale: 1,\n    eq(other) { return other == this; }\n};\nfunction staticDeco(state) {\n    let deco = state.facet(decorations).filter(d => typeof d != \"function\");\n    let outer = state.facet(outerDecorations).filter(d => typeof d != \"function\");\n    if (outer.length)\n        deco.push(RangeSet.join(outer));\n    return deco;\n}\n// When the height is too big (> VP.MaxDOMHeight), scale down the\n// regions outside the viewports so that the total height is\n// VP.MaxDOMHeight.\nclass BigScaler {\n    constructor(oracle, heightMap, viewports) {\n        let vpHeight = 0, base = 0, domBase = 0;\n        this.viewports = viewports.map(({ from, to }) => {\n            let top = heightMap.lineAt(from, QueryType.ByPos, oracle, 0, 0).top;\n            let bottom = heightMap.lineAt(to, QueryType.ByPos, oracle, 0, 0).bottom;\n            vpHeight += bottom - top;\n            return { from, to, top, bottom, domTop: 0, domBottom: 0 };\n        });\n        this.scale = (7000000 /* VP.MaxDOMHeight */ - vpHeight) / (heightMap.height - vpHeight);\n        for (let obj of this.viewports) {\n            obj.domTop = domBase + (obj.top - base) * this.scale;\n            domBase = obj.domBottom = obj.domTop + (obj.bottom - obj.top);\n            base = obj.bottom;\n        }\n    }\n    toDOM(n) {\n        for (let i = 0, base = 0, domBase = 0;; i++) {\n            let vp = i < this.viewports.length ? this.viewports[i] : null;\n            if (!vp || n < vp.top)\n                return domBase + (n - base) * this.scale;\n            if (n <= vp.bottom)\n                return vp.domTop + (n - vp.top);\n            base = vp.bottom;\n            domBase = vp.domBottom;\n        }\n    }\n    fromDOM(n) {\n        for (let i = 0, base = 0, domBase = 0;; i++) {\n            let vp = i < this.viewports.length ? this.viewports[i] : null;\n            if (!vp || n < vp.domTop)\n                return base + (n - domBase) / this.scale;\n            if (n <= vp.domBottom)\n                return vp.top + (n - vp.domTop);\n            base = vp.bottom;\n            domBase = vp.domBottom;\n        }\n    }\n    eq(other) {\n        if (!(other instanceof BigScaler))\n            return false;\n        return this.scale == other.scale && this.viewports.length == other.viewports.length &&\n            this.viewports.every((vp, i) => vp.from == other.viewports[i].from && vp.to == other.viewports[i].to);\n    }\n}\nfunction scaleBlock(block, scaler) {\n    if (scaler.scale == 1)\n        return block;\n    let bTop = scaler.toDOM(block.top), bBottom = scaler.toDOM(block.bottom);\n    return new BlockInfo(block.from, block.length, bTop, bBottom - bTop, Array.isArray(block._content) ? block._content.map(b => scaleBlock(b, scaler)) : block._content);\n}\n\nconst theme = /*@__PURE__*/Facet.define({ combine: strs => strs.join(\" \") });\nconst darkTheme = /*@__PURE__*/Facet.define({ combine: values => values.indexOf(true) > -1 });\nconst baseThemeID = /*@__PURE__*/StyleModule.newName(), baseLightID = /*@__PURE__*/StyleModule.newName(), baseDarkID = /*@__PURE__*/StyleModule.newName();\nconst lightDarkIDs = { \"&light\": \".\" + baseLightID, \"&dark\": \".\" + baseDarkID };\nfunction buildTheme(main, spec, scopes) {\n    return new StyleModule(spec, {\n        finish(sel) {\n            return /&/.test(sel) ? sel.replace(/&\\w*/, m => {\n                if (m == \"&\")\n                    return main;\n                if (!scopes || !scopes[m])\n                    throw new RangeError(`Unsupported selector: ${m}`);\n                return scopes[m];\n            }) : main + \" \" + sel;\n        }\n    });\n}\nconst baseTheme$1 = /*@__PURE__*/buildTheme(\".\" + baseThemeID, {\n    \"&\": {\n        position: \"relative !important\",\n        boxSizing: \"border-box\",\n        \"&.cm-focused\": {\n            // Provide a simple default outline to make sure a focused\n            // editor is visually distinct. Can't leave the default behavior\n            // because that will apply to the content element, which is\n            // inside the scrollable container and doesn't include the\n            // gutters. We also can't use an 'auto' outline, since those\n            // are, for some reason, drawn behind the element content, which\n            // will cause things like the active line background to cover\n            // the outline (#297).\n            outline: \"1px dotted #212121\"\n        },\n        display: \"flex !important\",\n        flexDirection: \"column\"\n    },\n    \".cm-scroller\": {\n        display: \"flex !important\",\n        alignItems: \"flex-start !important\",\n        fontFamily: \"monospace\",\n        lineHeight: 1.4,\n        height: \"100%\",\n        overflowX: \"auto\",\n        position: \"relative\",\n        zIndex: 0,\n        overflowAnchor: \"none\",\n    },\n    \".cm-content\": {\n        margin: 0,\n        flexGrow: 2,\n        flexShrink: 0,\n        display: \"block\",\n        whiteSpace: \"pre\",\n        wordWrap: \"normal\", // Issue #456\n        boxSizing: \"border-box\",\n        minHeight: \"100%\",\n        padding: \"4px 0\",\n        outline: \"none\",\n        \"&[contenteditable=true]\": {\n            WebkitUserModify: \"read-write-plaintext-only\",\n        }\n    },\n    \".cm-lineWrapping\": {\n        whiteSpace_fallback: \"pre-wrap\", // For IE\n        whiteSpace: \"break-spaces\",\n        wordBreak: \"break-word\", // For Safari, which doesn't support overflow-wrap: anywhere\n        overflowWrap: \"anywhere\",\n        flexShrink: 1\n    },\n    \"&light .cm-content\": { caretColor: \"black\" },\n    \"&dark .cm-content\": { caretColor: \"white\" },\n    \".cm-line\": {\n        display: \"block\",\n        padding: \"0 2px 0 6px\"\n    },\n    \".cm-layer\": {\n        userSelect: \"none\", // #1708\n        position: \"absolute\",\n        left: 0,\n        top: 0,\n        contain: \"size style\",\n        \"& > *\": {\n            position: \"absolute\"\n        }\n    },\n    \"&light .cm-selectionBackground\": {\n        background: \"#d9d9d9\"\n    },\n    \"&dark .cm-selectionBackground\": {\n        background: \"#222\"\n    },\n    \"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\": {\n        background: \"#d7d4f0\"\n    },\n    \"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\": {\n        background: \"#233\"\n    },\n    \".cm-cursorLayer\": {\n        pointerEvents: \"none\"\n    },\n    \"&.cm-focused > .cm-scroller > .cm-cursorLayer\": {\n        animation: \"steps(1) cm-blink 1.2s infinite\"\n    },\n    // Two animations defined so that we can switch between them to\n    // restart the animation without forcing another style\n    // recomputation.\n    \"@keyframes cm-blink\": { \"0%\": {}, \"50%\": { opacity: 0 }, \"100%\": {} },\n    \"@keyframes cm-blink2\": { \"0%\": {}, \"50%\": { opacity: 0 }, \"100%\": {} },\n    \".cm-cursor, .cm-dropCursor\": {\n        borderLeft: \"1.2px solid black\",\n        marginLeft: \"-0.6px\",\n        pointerEvents: \"none\",\n    },\n    \".cm-cursor\": {\n        display: \"none\"\n    },\n    \"&dark .cm-cursor\": {\n        borderLeftColor: \"#ddd\"\n    },\n    \".cm-selectionHandle\": {\n        backgroundColor: \"currentColor\",\n        width: \"1.5px\"\n    },\n    \".cm-selectionHandle-start::before, .cm-selectionHandle-end::before\": {\n        content: '\"\"',\n        backgroundColor: \"inherit\",\n        borderRadius: \"50%\",\n        width: \"8px\",\n        height: \"8px\",\n        position: \"absolute\",\n        left: \"-3.25px\"\n    },\n    \".cm-selectionHandle-start::before\": { top: \"-8px\" },\n    \".cm-selectionHandle-end::before\": { bottom: \"-8px\" },\n    \".cm-dropCursor\": {\n        position: \"absolute\"\n    },\n    \"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor\": {\n        display: \"block\"\n    },\n    \".cm-iso\": {\n        unicodeBidi: \"isolate\"\n    },\n    \".cm-announced\": {\n        position: \"fixed\",\n        top: \"-10000px\"\n    },\n    \"@media print\": {\n        \".cm-announced\": { display: \"none\" }\n    },\n    \"&light .cm-activeLine\": { backgroundColor: \"#cceeff44\" },\n    \"&dark .cm-activeLine\": { backgroundColor: \"#99eeff33\" },\n    \"&light .cm-specialChar\": { color: \"red\" },\n    \"&dark .cm-specialChar\": { color: \"#f78\" },\n    \".cm-gutters\": {\n        flexShrink: 0,\n        display: \"flex\",\n        height: \"100%\",\n        boxSizing: \"border-box\",\n        zIndex: 200,\n    },\n    \".cm-gutters-before\": { insetInlineStart: 0 },\n    \".cm-gutters-after\": { insetInlineEnd: 0 },\n    \"&light .cm-gutters\": {\n        backgroundColor: \"#f5f5f5\",\n        color: \"#6c6c6c\",\n        border: \"0px solid #ddd\",\n        \"&.cm-gutters-before\": { borderRightWidth: \"1px\" },\n        \"&.cm-gutters-after\": { borderLeftWidth: \"1px\" },\n    },\n    \"&dark .cm-gutters\": {\n        backgroundColor: \"#333338\",\n        color: \"#ccc\"\n    },\n    \".cm-gutter\": {\n        display: \"flex !important\", // Necessary -- prevents margin collapsing\n        flexDirection: \"column\",\n        flexShrink: 0,\n        boxSizing: \"border-box\",\n        minHeight: \"100%\",\n        overflow: \"hidden\"\n    },\n    \".cm-gutterElement\": {\n        boxSizing: \"border-box\"\n    },\n    \".cm-lineNumbers .cm-gutterElement\": {\n        padding: \"0 3px 0 5px\",\n        minWidth: \"20px\",\n        textAlign: \"right\",\n        whiteSpace: \"nowrap\"\n    },\n    \"&light .cm-activeLineGutter\": {\n        backgroundColor: \"#e2f2ff\"\n    },\n    \"&dark .cm-activeLineGutter\": {\n        backgroundColor: \"#222227\"\n    },\n    \".cm-panels\": {\n        boxSizing: \"border-box\",\n        position: \"sticky\",\n        left: 0,\n        right: 0,\n        zIndex: 300\n    },\n    \"&light .cm-panels\": {\n        backgroundColor: \"#f5f5f5\",\n        color: \"black\"\n    },\n    \".cm-panels-top\": { top: \"0\" },\n    \".cm-panels-bottom\": { bottom: \"0\" },\n    \"&light .cm-panels-top\": {\n        borderBottom: \"1px solid #ddd\"\n    },\n    \"&light .cm-panels-bottom\": {\n        borderTop: \"1px solid #ddd\"\n    },\n    \"&dark .cm-panels\": {\n        backgroundColor: \"#333338\",\n        color: \"white\"\n    },\n    \".cm-dialog\": {\n        padding: \"2px 19px 4px 6px\",\n        position: \"relative\",\n        \"& label\": { fontSize: \"80%\" },\n    },\n    \".cm-dialog-close\": {\n        position: \"absolute\",\n        top: \"3px\",\n        right: \"4px\",\n        backgroundColor: \"inherit\",\n        border: \"none\",\n        font: \"inherit\",\n        fontSize: \"14px\",\n        padding: \"0\"\n    },\n    \".cm-tab\": {\n        display: \"inline-block\",\n        overflow: \"hidden\",\n        verticalAlign: \"bottom\"\n    },\n    \".cm-widgetBuffer\": {\n        verticalAlign: \"text-top\",\n        height: \"1em\",\n        width: 0,\n        display: \"inline\"\n    },\n    \".cm-placeholder\": {\n        color: \"#888\",\n        display: \"inline-block\",\n        verticalAlign: \"top\",\n        userSelect: \"none\"\n    },\n    \".cm-highlightSpace\": {\n        backgroundImage: \"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)\",\n        backgroundPosition: \"center\",\n    },\n    \".cm-highlightTab\": {\n        backgroundImage: `url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"20\"><path stroke=\"%23888\" stroke-width=\"1\" fill=\"none\" d=\"M1 10H196L190 5M190 15L196 10M197 4L197 16\"/></svg>')`,\n        backgroundSize: \"auto 100%\",\n        backgroundPosition: \"right 90%\",\n        backgroundRepeat: \"no-repeat\"\n    },\n    \".cm-trailingSpace\": {\n        backgroundColor: \"#ff332255\"\n    },\n    \".cm-button\": {\n        verticalAlign: \"middle\",\n        color: \"inherit\",\n        fontSize: \"70%\",\n        padding: \".2em 1em\",\n        borderRadius: \"1px\"\n    },\n    \"&light .cm-button\": {\n        backgroundImage: \"linear-gradient(#eff1f5, #d9d9df)\",\n        border: \"1px solid #888\",\n        \"&:active\": {\n            backgroundImage: \"linear-gradient(#b4b4b4, #d0d3d6)\"\n        }\n    },\n    \"&dark .cm-button\": {\n        backgroundImage: \"linear-gradient(#393939, #111)\",\n        border: \"1px solid #888\",\n        \"&:active\": {\n            backgroundImage: \"linear-gradient(#111, #333)\"\n        }\n    },\n    \".cm-textfield\": {\n        verticalAlign: \"middle\",\n        color: \"inherit\",\n        fontSize: \"70%\",\n        border: \"1px solid silver\",\n        padding: \".2em .5em\"\n    },\n    \"&light .cm-textfield\": {\n        backgroundColor: \"white\"\n    },\n    \"&dark .cm-textfield\": {\n        border: \"1px solid #555\",\n        backgroundColor: \"inherit\"\n    }\n}, lightDarkIDs);\n\nconst observeOptions = {\n    childList: true,\n    characterData: true,\n    subtree: true,\n    attributes: true,\n    characterDataOldValue: true\n};\n// IE11 has very broken mutation observers, so we also listen to\n// DOMCharacterDataModified there\nconst useCharData = browser.ie && browser.ie_version <= 11;\nclass DOMObserver {\n    constructor(view) {\n        this.view = view;\n        this.active = false;\n        this.editContext = null;\n        // The known selection. Kept in our own object, as opposed to just\n        // directly accessing the selection because:\n        //  - Safari doesn't report the right selection in shadow DOM\n        //  - Reading from the selection forces a DOM layout\n        //  - This way, we can ignore selectionchange events if we have\n        //    already seen the 'new' selection\n        this.selectionRange = new DOMSelectionState;\n        // Set when a selection change is detected, cleared on flush\n        this.selectionChanged = false;\n        this.delayedFlush = -1;\n        this.resizeTimeout = -1;\n        this.queue = [];\n        this.delayedAndroidKey = null;\n        this.flushingAndroidKey = -1;\n        this.lastChange = 0;\n        this.scrollTargets = [];\n        this.intersection = null;\n        this.resizeScroll = null;\n        this.intersecting = false;\n        this.gapIntersection = null;\n        this.gaps = [];\n        this.printQuery = null;\n        // Timeout for scheduling check of the parents that need scroll handlers\n        this.parentCheck = -1;\n        this.dom = view.contentDOM;\n        this.observer = new MutationObserver(mutations => {\n            for (let mut of mutations)\n                this.queue.push(mut);\n            // IE11 will sometimes (on typing over a selection or\n            // backspacing out a single character text node) call the\n            // observer callback before actually updating the DOM.\n            //\n            // Unrelatedly, iOS Safari will, when ending a composition,\n            // sometimes first clear it, deliver the mutations, and then\n            // reinsert the finished text. CodeMirror's handling of the\n            // deletion will prevent the reinsertion from happening,\n            // breaking composition.\n            if ((browser.ie && browser.ie_version <= 11 || browser.ios && view.composing) &&\n                mutations.some(m => m.type == \"childList\" && m.removedNodes.length ||\n                    m.type == \"characterData\" && m.oldValue.length > m.target.nodeValue.length))\n                this.flushSoon();\n            else\n                this.flush();\n        });\n        if (window.EditContext && browser.android && view.constructor.EDIT_CONTEXT !== false &&\n            // Chrome <126 doesn't support inverted selections in edit context (#1392)\n            !(browser.chrome && browser.chrome_version < 126)) {\n            this.editContext = new EditContextManager(view);\n            if (view.state.facet(editable))\n                view.contentDOM.editContext = this.editContext.editContext;\n        }\n        if (useCharData)\n            this.onCharData = (event) => {\n                this.queue.push({ target: event.target,\n                    type: \"characterData\",\n                    oldValue: event.prevValue });\n                this.flushSoon();\n            };\n        this.onSelectionChange = this.onSelectionChange.bind(this);\n        this.onResize = this.onResize.bind(this);\n        this.onPrint = this.onPrint.bind(this);\n        this.onScroll = this.onScroll.bind(this);\n        if (window.matchMedia)\n            this.printQuery = window.matchMedia(\"print\");\n        if (typeof ResizeObserver == \"function\") {\n            this.resizeScroll = new ResizeObserver(() => {\n                var _a;\n                if (((_a = this.view.docView) === null || _a === void 0 ? void 0 : _a.lastUpdate) < Date.now() - 75)\n                    this.onResize();\n            });\n            this.resizeScroll.observe(view.scrollDOM);\n        }\n        this.addWindowListeners(this.win = view.win);\n        this.start();\n        if (typeof IntersectionObserver == \"function\") {\n            this.intersection = new IntersectionObserver(entries => {\n                if (this.parentCheck < 0)\n                    this.parentCheck = setTimeout(this.listenForScroll.bind(this), 1000);\n                if (entries.length > 0 && (entries[entries.length - 1].intersectionRatio > 0) != this.intersecting) {\n                    this.intersecting = !this.intersecting;\n                    if (this.intersecting != this.view.inView)\n                        this.onScrollChanged(document.createEvent(\"Event\"));\n                }\n            }, { threshold: [0, .001] });\n            this.intersection.observe(this.dom);\n            this.gapIntersection = new IntersectionObserver(entries => {\n                if (entries.length > 0 && entries[entries.length - 1].intersectionRatio > 0)\n                    this.onScrollChanged(document.createEvent(\"Event\"));\n            }, {});\n        }\n        this.listenForScroll();\n        this.readSelectionRange();\n    }\n    onScrollChanged(e) {\n        this.view.inputState.runHandlers(\"scroll\", e);\n        if (this.intersecting)\n            this.view.measure();\n    }\n    onScroll(e) {\n        if (this.intersecting)\n            this.flush(false);\n        if (this.editContext)\n            this.view.requestMeasure(this.editContext.measureReq);\n        this.onScrollChanged(e);\n    }\n    onResize() {\n        if (this.resizeTimeout < 0)\n            this.resizeTimeout = setTimeout(() => {\n                this.resizeTimeout = -1;\n                this.view.requestMeasure();\n            }, 50);\n    }\n    onPrint(event) {\n        if ((event.type == \"change\" || !event.type) && !event.matches)\n            return;\n        this.view.viewState.printing = true;\n        this.view.measure();\n        setTimeout(() => {\n            this.view.viewState.printing = false;\n            this.view.requestMeasure();\n        }, 500);\n    }\n    updateGaps(gaps) {\n        if (this.gapIntersection && (gaps.length != this.gaps.length || this.gaps.some((g, i) => g != gaps[i]))) {\n            this.gapIntersection.disconnect();\n            for (let gap of gaps)\n                this.gapIntersection.observe(gap);\n            this.gaps = gaps;\n        }\n    }\n    onSelectionChange(event) {\n        let wasChanged = this.selectionChanged;\n        if (!this.readSelectionRange() || this.delayedAndroidKey)\n            return;\n        let { view } = this, sel = this.selectionRange;\n        if (view.state.facet(editable) ? view.root.activeElement != this.dom : !hasSelection(this.dom, sel))\n            return;\n        let context = sel.anchorNode && view.docView.tile.nearest(sel.anchorNode);\n        if (context && context.isWidget() && context.widget.ignoreEvent(event)) {\n            if (!wasChanged)\n                this.selectionChanged = false;\n            return;\n        }\n        // Deletions on IE11 fire their events in the wrong order, giving\n        // us a selection change event before the DOM changes are\n        // reported.\n        // Chrome Android has a similar issue when backspacing out a\n        // selection (#645).\n        if ((browser.ie && browser.ie_version <= 11 || browser.android && browser.chrome) && !view.state.selection.main.empty &&\n            // (Selection.isCollapsed isn't reliable on IE)\n            sel.focusNode && isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset))\n            this.flushSoon();\n        else\n            this.flush(false);\n    }\n    readSelectionRange() {\n        let { view } = this;\n        // The Selection object is broken in shadow roots in Safari. See\n        // issue #414\n        let selection = getSelection(view.root);\n        if (!selection)\n            return false;\n        let range = browser.safari && view.root.nodeType == 11 &&\n            view.root.activeElement == this.dom &&\n            safariSelectionRangeHack(this.view, selection) || selection;\n        if (!range || this.selectionRange.eq(range))\n            return false;\n        let local = hasSelection(this.dom, range);\n        // Detect the situation where the browser has, on focus, moved the\n        // selection to the start of the content element. Reset it to the\n        // position from the editor state.\n        if (local && !this.selectionChanged &&\n            view.inputState.lastFocusTime > Date.now() - 200 &&\n            view.inputState.lastTouchTime < Date.now() - 300 &&\n            atElementStart(this.dom, range)) {\n            this.view.inputState.lastFocusTime = 0;\n            view.docView.updateSelection();\n            return false;\n        }\n        this.selectionRange.setRange(range);\n        if (local)\n            this.selectionChanged = true;\n        return true;\n    }\n    setSelectionRange(anchor, head) {\n        this.selectionRange.set(anchor.node, anchor.offset, head.node, head.offset);\n        this.selectionChanged = false;\n    }\n    clearSelectionRange() {\n        this.selectionRange.set(null, 0, null, 0);\n    }\n    listenForScroll() {\n        this.parentCheck = -1;\n        let i = 0, changed = null;\n        for (let dom = this.dom; dom;) {\n            if (dom.nodeType == 1) {\n                if (!changed && i < this.scrollTargets.length && this.scrollTargets[i] == dom)\n                    i++;\n                else if (!changed)\n                    changed = this.scrollTargets.slice(0, i);\n                if (changed)\n                    changed.push(dom);\n                dom = dom.assignedSlot || dom.parentNode;\n            }\n            else if (dom.nodeType == 11) { // Shadow root\n                dom = dom.host;\n            }\n            else {\n                break;\n            }\n        }\n        if (i < this.scrollTargets.length && !changed)\n            changed = this.scrollTargets.slice(0, i);\n        if (changed) {\n            for (let dom of this.scrollTargets)\n                dom.removeEventListener(\"scroll\", this.onScroll);\n            for (let dom of this.scrollTargets = changed)\n                dom.addEventListener(\"scroll\", this.onScroll);\n        }\n    }\n    ignore(f) {\n        if (!this.active)\n            return f();\n        try {\n            this.stop();\n            return f();\n        }\n        finally {\n            this.start();\n            this.clear();\n        }\n    }\n    start() {\n        if (this.active)\n            return;\n        this.observer.observe(this.dom, observeOptions);\n        if (useCharData)\n            this.dom.addEventListener(\"DOMCharacterDataModified\", this.onCharData);\n        this.active = true;\n    }\n    stop() {\n        if (!this.active)\n            return;\n        this.active = false;\n        this.observer.disconnect();\n        if (useCharData)\n            this.dom.removeEventListener(\"DOMCharacterDataModified\", this.onCharData);\n    }\n    // Throw away any pending changes\n    clear() {\n        this.processRecords();\n        this.queue.length = 0;\n        this.selectionChanged = false;\n    }\n    // Chrome Android, especially in combination with GBoard, not only\n    // doesn't reliably fire regular key events, but also often\n    // surrounds the effect of enter or backspace with a bunch of\n    // composition events that, when interrupted, cause text duplication\n    // or other kinds of corruption. This hack makes the editor back off\n    // from handling DOM changes for a moment when such a key is\n    // detected (via beforeinput or keydown), and then tries to flush\n    // them or, if that has no effect, dispatches the given key.\n    delayAndroidKey(key, keyCode) {\n        var _a;\n        if (!this.delayedAndroidKey) {\n            let flush = () => {\n                let key = this.delayedAndroidKey;\n                if (key) {\n                    this.clearDelayedAndroidKey();\n                    this.view.inputState.lastKeyCode = key.keyCode;\n                    this.view.inputState.lastKeyTime = Date.now();\n                    let flushed = this.flush();\n                    if (!flushed && key.force)\n                        dispatchKey(this.dom, key.key, key.keyCode);\n                }\n            };\n            this.flushingAndroidKey = this.view.win.requestAnimationFrame(flush);\n        }\n        // Since backspace beforeinput is sometimes signalled spuriously,\n        // Enter always takes precedence.\n        if (!this.delayedAndroidKey || key == \"Enter\")\n            this.delayedAndroidKey = {\n                key, keyCode,\n                // Only run the key handler when no changes are detected if\n                // this isn't coming right after another change, in which case\n                // it is probably part of a weird chain of updates, and should\n                // be ignored if it returns the DOM to its previous state.\n                force: this.lastChange < Date.now() - 50 || !!((_a = this.delayedAndroidKey) === null || _a === void 0 ? void 0 : _a.force)\n            };\n    }\n    clearDelayedAndroidKey() {\n        this.win.cancelAnimationFrame(this.flushingAndroidKey);\n        this.delayedAndroidKey = null;\n        this.flushingAndroidKey = -1;\n    }\n    flushSoon() {\n        if (this.delayedFlush < 0)\n            this.delayedFlush = this.view.win.requestAnimationFrame(() => { this.delayedFlush = -1; this.flush(); });\n    }\n    forceFlush() {\n        if (this.delayedFlush >= 0) {\n            this.view.win.cancelAnimationFrame(this.delayedFlush);\n            this.delayedFlush = -1;\n        }\n        this.flush();\n    }\n    pendingRecords() {\n        for (let mut of this.observer.takeRecords())\n            this.queue.push(mut);\n        return this.queue;\n    }\n    processRecords() {\n        let records = this.pendingRecords();\n        if (records.length)\n            this.queue = [];\n        let from = -1, to = -1, typeOver = false;\n        for (let record of records) {\n            let range = this.readMutation(record);\n            if (!range)\n                continue;\n            if (range.typeOver)\n                typeOver = true;\n            if (from == -1) {\n                ({ from, to } = range);\n            }\n            else {\n                from = Math.min(range.from, from);\n                to = Math.max(range.to, to);\n            }\n        }\n        return { from, to, typeOver };\n    }\n    readChange() {\n        let { from, to, typeOver } = this.processRecords();\n        let newSel = this.selectionChanged && hasSelection(this.dom, this.selectionRange);\n        if (from < 0 && !newSel)\n            return null;\n        if (from > -1)\n            this.lastChange = Date.now();\n        this.view.inputState.lastFocusTime = 0;\n        this.selectionChanged = false;\n        let change = new DOMChange(this.view, from, to, typeOver);\n        this.view.docView.domChanged = { newSel: change.newSel ? change.newSel.main : null };\n        return change;\n    }\n    // Apply pending changes, if any\n    flush(readSelection = true) {\n        // Completely hold off flushing when pending keys are set—the code\n        // managing those will make sure processRecords is called and the\n        // view is resynchronized after\n        if (this.delayedFlush >= 0 || this.delayedAndroidKey)\n            return false;\n        if (readSelection)\n            this.readSelectionRange();\n        let domChange = this.readChange();\n        if (!domChange) {\n            this.view.requestMeasure();\n            return false;\n        }\n        let startState = this.view.state;\n        let handled = applyDOMChange(this.view, domChange);\n        // The view wasn't updated but DOM/selection changes were seen. Reset the view.\n        if (this.view.state == startState &&\n            (domChange.domChanged || domChange.newSel && !sameSelPos(this.view.state.selection, domChange.newSel.main)))\n            this.view.update([]);\n        return handled;\n    }\n    readMutation(rec) {\n        let tile = this.view.docView.tile.nearest(rec.target);\n        if (!tile || tile.isWidget())\n            return null;\n        tile.markDirty(rec.type == \"attributes\");\n        if (rec.type == \"childList\") {\n            let childBefore = findChild(tile, rec.previousSibling || rec.target.previousSibling, -1);\n            let childAfter = findChild(tile, rec.nextSibling || rec.target.nextSibling, 1);\n            return { from: childBefore ? tile.posAfter(childBefore) : tile.posAtStart,\n                to: childAfter ? tile.posBefore(childAfter) : tile.posAtEnd, typeOver: false };\n        }\n        else if (rec.type == \"characterData\") {\n            return { from: tile.posAtStart, to: tile.posAtEnd, typeOver: rec.target.nodeValue == rec.oldValue };\n        }\n        else {\n            return null;\n        }\n    }\n    setWindow(win) {\n        if (win != this.win) {\n            this.removeWindowListeners(this.win);\n            this.win = win;\n            this.addWindowListeners(this.win);\n        }\n    }\n    addWindowListeners(win) {\n        win.addEventListener(\"resize\", this.onResize);\n        if (this.printQuery) {\n            if (this.printQuery.addEventListener)\n                this.printQuery.addEventListener(\"change\", this.onPrint);\n            else\n                this.printQuery.addListener(this.onPrint);\n        }\n        else\n            win.addEventListener(\"beforeprint\", this.onPrint);\n        win.addEventListener(\"scroll\", this.onScroll);\n        win.document.addEventListener(\"selectionchange\", this.onSelectionChange);\n    }\n    removeWindowListeners(win) {\n        win.removeEventListener(\"scroll\", this.onScroll);\n        win.removeEventListener(\"resize\", this.onResize);\n        if (this.printQuery) {\n            if (this.printQuery.removeEventListener)\n                this.printQuery.removeEventListener(\"change\", this.onPrint);\n            else\n                this.printQuery.removeListener(this.onPrint);\n        }\n        else\n            win.removeEventListener(\"beforeprint\", this.onPrint);\n        win.document.removeEventListener(\"selectionchange\", this.onSelectionChange);\n    }\n    update(update) {\n        if (this.editContext) {\n            this.editContext.update(update);\n            if (update.startState.facet(editable) != update.state.facet(editable))\n                update.view.contentDOM.editContext = update.state.facet(editable) ? this.editContext.editContext : null;\n        }\n    }\n    destroy() {\n        var _a, _b, _c;\n        this.stop();\n        (_a = this.intersection) === null || _a === void 0 ? void 0 : _a.disconnect();\n        (_b = this.gapIntersection) === null || _b === void 0 ? void 0 : _b.disconnect();\n        (_c = this.resizeScroll) === null || _c === void 0 ? void 0 : _c.disconnect();\n        for (let dom of this.scrollTargets)\n            dom.removeEventListener(\"scroll\", this.onScroll);\n        this.removeWindowListeners(this.win);\n        clearTimeout(this.parentCheck);\n        clearTimeout(this.resizeTimeout);\n        this.win.cancelAnimationFrame(this.delayedFlush);\n        this.win.cancelAnimationFrame(this.flushingAndroidKey);\n        if (this.editContext) {\n            this.view.contentDOM.editContext = null;\n            this.editContext.destroy();\n        }\n    }\n}\nfunction findChild(tile, dom, dir) {\n    while (dom) {\n        let curTile = Tile.get(dom);\n        if (curTile && curTile.parent == tile)\n            return curTile;\n        let parent = dom.parentNode;\n        dom = parent != tile.dom ? parent : dir > 0 ? dom.nextSibling : dom.previousSibling;\n    }\n    return null;\n}\nfunction buildSelectionRangeFromRange(view, range) {\n    let anchorNode = range.startContainer, anchorOffset = range.startOffset;\n    let focusNode = range.endContainer, focusOffset = range.endOffset;\n    let curAnchor = view.docView.domAtPos(view.state.selection.main.anchor, 1);\n    // Since such a range doesn't distinguish between anchor and head,\n    // use a heuristic that flips it around if its end matches the\n    // current anchor.\n    if (isEquivalentPosition(curAnchor.node, curAnchor.offset, focusNode, focusOffset))\n        [anchorNode, anchorOffset, focusNode, focusOffset] = [focusNode, focusOffset, anchorNode, anchorOffset];\n    return { anchorNode, anchorOffset, focusNode, focusOffset };\n}\n// Used to work around a Safari Selection/shadow DOM bug (#414)\nfunction safariSelectionRangeHack(view, selection) {\n    if (selection.getComposedRanges) {\n        let range = selection.getComposedRanges(view.root)[0];\n        if (range)\n            return buildSelectionRangeFromRange(view, range);\n    }\n    let found = null;\n    // Because Safari (at least in 2018-2021) doesn't provide regular\n    // access to the selection inside a shadowroot, we have to perform a\n    // ridiculous hack to get at it—using `execCommand` to trigger a\n    // `beforeInput` event so that we can read the target range from the\n    // event.\n    function read(event) {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        found = event.getTargetRanges()[0];\n    }\n    view.contentDOM.addEventListener(\"beforeinput\", read, true);\n    view.dom.ownerDocument.execCommand(\"indent\");\n    view.contentDOM.removeEventListener(\"beforeinput\", read, true);\n    return found ? buildSelectionRangeFromRange(view, found) : null;\n}\nclass EditContextManager {\n    constructor(view) {\n        // The document window for which the text in the context is\n        // maintained. For large documents, this may be smaller than the\n        // editor document. This window always includes the selection head.\n        this.from = 0;\n        this.to = 0;\n        // When applying a transaction, this is used to compare the change\n        // made to the context content to the change in the transaction in\n        // order to make the minimal changes to the context (since touching\n        // that sometimes breaks series of multiple edits made for a single\n        // user action on some Android keyboards)\n        this.pendingContextChange = null;\n        this.handlers = Object.create(null);\n        // Kludge to work around the fact that EditContext does not respond\n        // well to having its content updated during a composition (see #1472)\n        this.composing = null;\n        this.resetRange(view.state);\n        let context = this.editContext = new window.EditContext({\n            text: view.state.doc.sliceString(this.from, this.to),\n            selectionStart: this.toContextPos(Math.max(this.from, Math.min(this.to, view.state.selection.main.anchor))),\n            selectionEnd: this.toContextPos(view.state.selection.main.head)\n        });\n        this.handlers.textupdate = e => {\n            let main = view.state.selection.main, { anchor, head } = main;\n            let from = this.toEditorPos(e.updateRangeStart), to = this.toEditorPos(e.updateRangeEnd);\n            if (view.inputState.composing >= 0 && !this.composing)\n                this.composing = { contextBase: e.updateRangeStart, editorBase: from, drifted: false };\n            let deletes = to - from > e.text.length;\n            // If the window doesn't include the anchor, assume changes\n            // adjacent to a side go up to the anchor.\n            if (from == this.from && anchor < this.from)\n                from = anchor;\n            else if (to == this.to && anchor > this.to)\n                to = anchor;\n            let diff = findDiff(view.state.sliceDoc(from, to), e.text, (deletes ? main.from : main.to) - from, deletes ? \"end\" : null);\n            // Edit contexts sometimes fire empty changes\n            if (!diff) {\n                let newSel = EditorSelection.single(this.toEditorPos(e.selectionStart), this.toEditorPos(e.selectionEnd));\n                if (!sameSelPos(newSel, main))\n                    view.dispatch({ selection: newSel, userEvent: \"select\" });\n                return;\n            }\n            let change = { from: diff.from + from, to: diff.toA + from,\n                insert: Text.of(e.text.slice(diff.from, diff.toB).split(\"\\n\")) };\n            if ((browser.mac || browser.android) && change.from == head - 1 &&\n                /^\\. ?$/.test(e.text) && view.contentDOM.getAttribute(\"autocorrect\") == \"off\")\n                change = { from, to, insert: Text.of([e.text.replace(\".\", \" \")]) };\n            this.pendingContextChange = change;\n            if (!view.state.readOnly) {\n                let newLen = this.to - this.from + (change.to - change.from + change.insert.length);\n                applyDOMChangeInner(view, change, EditorSelection.single(this.toEditorPos(e.selectionStart, newLen), this.toEditorPos(e.selectionEnd, newLen)));\n            }\n            // If the transaction didn't flush our change, revert it so\n            // that the context is in sync with the editor state again.\n            if (this.pendingContextChange) {\n                this.revertPending(view.state);\n                this.setSelection(view.state);\n            }\n            // Work around missed compositionend events. See https://discuss.codemirror.net/t/a/9514\n            if (change.from < change.to && !change.insert.length && view.inputState.composing >= 0 &&\n                !/[\\\\p{Alphabetic}\\\\p{Number}_]/.test(context.text.slice(Math.max(0, e.updateRangeStart - 1), Math.min(context.text.length, e.updateRangeStart + 1))))\n                this.handlers.compositionend(e);\n        };\n        this.handlers.characterboundsupdate = e => {\n            let rects = [], prev = null;\n            for (let i = this.toEditorPos(e.rangeStart), end = this.toEditorPos(e.rangeEnd); i < end; i++) {\n                let rect = view.coordsForChar(i);\n                prev = (rect && new DOMRect(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top))\n                    || prev || new DOMRect;\n                rects.push(prev);\n            }\n            context.updateCharacterBounds(e.rangeStart, rects);\n        };\n        this.handlers.textformatupdate = e => {\n            let deco = [];\n            for (let format of e.getTextFormats()) {\n                let lineStyle = format.underlineStyle, thickness = format.underlineThickness;\n                if (!/none/i.test(lineStyle) && !/none/i.test(thickness)) {\n                    let from = this.toEditorPos(format.rangeStart), to = this.toEditorPos(format.rangeEnd);\n                    if (from < to) {\n                        // These values changed from capitalized custom strings to lower-case CSS keywords in 2025\n                        let style = `text-decoration: underline ${/^[a-z]/.test(lineStyle) ? lineStyle + \" \" : lineStyle == \"Dashed\" ? \"dashed \" : lineStyle == \"Squiggle\" ? \"wavy \" : \"\"}${/thin/i.test(thickness) ? 1 : 2}px`;\n                        deco.push(Decoration.mark({ attributes: { style } }).range(from, to));\n                    }\n                }\n            }\n            view.dispatch({ effects: setEditContextFormatting.of(Decoration.set(deco)) });\n        };\n        this.handlers.compositionstart = () => {\n            if (view.inputState.composing < 0) {\n                view.inputState.composing = 0;\n                view.inputState.compositionFirstChange = true;\n            }\n        };\n        this.handlers.compositionend = () => {\n            view.inputState.composing = -1;\n            view.inputState.compositionFirstChange = null;\n            if (this.composing) {\n                let { drifted } = this.composing;\n                this.composing = null;\n                if (drifted)\n                    this.reset(view.state);\n            }\n        };\n        for (let event in this.handlers)\n            context.addEventListener(event, this.handlers[event]);\n        this.measureReq = { read: view => {\n                let sel = getSelection(view.root);\n                if (sel && sel.rangeCount)\n                    this.editContext.updateSelectionBounds(sel.getRangeAt(0).getBoundingClientRect());\n            } };\n    }\n    applyEdits(update) {\n        let off = 0, abort = false, pending = this.pendingContextChange;\n        update.changes.iterChanges((fromA, toA, _fromB, _toB, insert) => {\n            if (abort)\n                return;\n            let dLen = insert.length - (toA - fromA);\n            if (pending && toA >= pending.to) {\n                if (pending.from == fromA && pending.to == toA && pending.insert.eq(insert)) {\n                    pending = this.pendingContextChange = null; // Match\n                    off += dLen;\n                    this.to += dLen;\n                    return;\n                }\n                else { // Mismatch, revert\n                    pending = null;\n                    this.revertPending(update.state);\n                }\n            }\n            fromA += off;\n            toA += off;\n            if (toA <= this.from) { // Before the window\n                this.from += dLen;\n                this.to += dLen;\n            }\n            else if (fromA < this.to) { // Overlaps with window\n                if (fromA < this.from || toA > this.to || (this.to - this.from) + insert.length > 30000 /* CxVp.MaxSize */) {\n                    abort = true;\n                    return;\n                }\n                this.editContext.updateText(this.toContextPos(fromA), this.toContextPos(toA), insert.toString());\n                this.to += dLen;\n            }\n            off += dLen;\n        });\n        if (pending && !abort)\n            this.revertPending(update.state);\n        return !abort;\n    }\n    update(update) {\n        let reverted = this.pendingContextChange, startSel = update.startState.selection.main;\n        if (this.composing &&\n            (this.composing.drifted ||\n                (!update.changes.touchesRange(startSel.from, startSel.to) &&\n                    update.transactions.some(tr => !tr.isUserEvent(\"input.type\") && tr.changes.touchesRange(this.from, this.to))))) {\n            this.composing.drifted = true;\n            this.composing.editorBase = update.changes.mapPos(this.composing.editorBase);\n        }\n        else if (!this.applyEdits(update) || !this.rangeIsValid(update.state)) {\n            this.pendingContextChange = null;\n            this.reset(update.state);\n        }\n        else if (update.docChanged || update.selectionSet || reverted) {\n            this.setSelection(update.state);\n        }\n        if (update.geometryChanged || update.docChanged || update.selectionSet)\n            update.view.requestMeasure(this.measureReq);\n    }\n    resetRange(state) {\n        let { head } = state.selection.main;\n        this.from = Math.max(0, head - 10000 /* CxVp.Margin */);\n        this.to = Math.min(state.doc.length, head + 10000 /* CxVp.Margin */);\n    }\n    reset(state) {\n        this.resetRange(state);\n        this.editContext.updateText(0, this.editContext.text.length, state.doc.sliceString(this.from, this.to));\n        this.setSelection(state);\n    }\n    revertPending(state) {\n        let pending = this.pendingContextChange;\n        this.pendingContextChange = null;\n        this.editContext.updateText(this.toContextPos(pending.from), this.toContextPos(pending.from + pending.insert.length), state.doc.sliceString(pending.from, pending.to));\n    }\n    setSelection(state) {\n        let { main } = state.selection;\n        let start = this.toContextPos(Math.max(this.from, Math.min(this.to, main.anchor)));\n        let end = this.toContextPos(main.head);\n        if (this.editContext.selectionStart != start || this.editContext.selectionEnd != end)\n            this.editContext.updateSelection(start, end);\n    }\n    rangeIsValid(state) {\n        let { head } = state.selection.main;\n        return !(this.from > 0 && head - this.from < 500 /* CxVp.MinMargin */ ||\n            this.to < state.doc.length && this.to - head < 500 /* CxVp.MinMargin */ ||\n            this.to - this.from > 10000 /* CxVp.Margin */ * 3);\n    }\n    toEditorPos(contextPos, clipLen = this.to - this.from) {\n        contextPos = Math.min(contextPos, clipLen);\n        let c = this.composing;\n        return c && c.drifted ? c.editorBase + (contextPos - c.contextBase) : contextPos + this.from;\n    }\n    toContextPos(editorPos) {\n        let c = this.composing;\n        return c && c.drifted ? c.contextBase + (editorPos - c.editorBase) : editorPos - this.from;\n    }\n    destroy() {\n        for (let event in this.handlers)\n            this.editContext.removeEventListener(event, this.handlers[event]);\n    }\n}\n\n// The editor's update state machine looks something like this:\n//\n//     Idle → Updating ⇆ Idle (unchecked) → Measuring → Idle\n//                                         ↑      ↓\n//                                         Updating (measure)\n//\n// The difference between 'Idle' and 'Idle (unchecked)' lies in\n// whether a layout check has been scheduled. A regular update through\n// the `update` method updates the DOM in a write-only fashion, and\n// relies on a check (scheduled with `requestAnimationFrame`) to make\n// sure everything is where it should be and the viewport covers the\n// visible code. That check continues to measure and then optionally\n// update until it reaches a coherent state.\n/**\nAn editor view represents the editor's user interface. It holds\nthe editable DOM surface, and possibly other elements such as the\nline number gutter. It handles events and dispatches state\ntransactions for editing actions.\n*/\nclass EditorView {\n    /**\n    The current editor state.\n    */\n    get state() { return this.viewState.state; }\n    /**\n    To be able to display large documents without consuming too much\n    memory or overloading the browser, CodeMirror only draws the\n    code that is visible (plus a margin around it) to the DOM. This\n    property tells you the extent of the current drawn viewport, in\n    document positions.\n    */\n    get viewport() { return this.viewState.viewport; }\n    /**\n    When there are, for example, large collapsed ranges in the\n    viewport, its size can be a lot bigger than the actual visible\n    content. Thus, if you are doing something like styling the\n    content in the viewport, it is preferable to only do so for\n    these ranges, which are the subset of the viewport that is\n    actually drawn.\n    */\n    get visibleRanges() { return this.viewState.visibleRanges; }\n    /**\n    Returns false when the editor is entirely scrolled out of view\n    or otherwise hidden.\n    */\n    get inView() { return this.viewState.inView; }\n    /**\n    Indicates whether the user is currently composing text via\n    [IME](https://en.wikipedia.org/wiki/Input_method), and at least\n    one change has been made in the current composition.\n    */\n    get composing() { return !!this.inputState && this.inputState.composing > 0; }\n    /**\n    Indicates whether the user is currently in composing state. Note\n    that on some platforms, like Android, this will be the case a\n    lot, since just putting the cursor on a word starts a\n    composition there.\n    */\n    get compositionStarted() { return !!this.inputState && this.inputState.composing >= 0; }\n    /**\n    The document or shadow root that the view lives in.\n    */\n    get root() { return this._root; }\n    /**\n    @internal\n    */\n    get win() { return this.dom.ownerDocument.defaultView || window; }\n    /**\n    Construct a new view. You'll want to either provide a `parent`\n    option, or put `view.dom` into your document after creating a\n    view, so that the user can see the editor.\n    */\n    constructor(config = {}) {\n        var _a;\n        this.plugins = [];\n        this.pluginMap = new Map;\n        this.editorAttrs = {};\n        this.contentAttrs = {};\n        this.bidiCache = [];\n        this.destroyed = false;\n        /**\n        @internal\n        */\n        this.updateState = 2 /* UpdateState.Updating */;\n        /**\n        @internal\n        */\n        this.measureScheduled = -1;\n        /**\n        @internal\n        */\n        this.measureRequests = [];\n        this.contentDOM = document.createElement(\"div\");\n        this.scrollDOM = document.createElement(\"div\");\n        this.scrollDOM.tabIndex = -1;\n        this.scrollDOM.className = \"cm-scroller\";\n        this.scrollDOM.appendChild(this.contentDOM);\n        this.announceDOM = document.createElement(\"div\");\n        this.announceDOM.className = \"cm-announced\";\n        this.announceDOM.setAttribute(\"aria-live\", \"polite\");\n        this.dom = document.createElement(\"div\");\n        this.dom.appendChild(this.announceDOM);\n        this.dom.appendChild(this.scrollDOM);\n        if (config.parent)\n            config.parent.appendChild(this.dom);\n        let { dispatch } = config;\n        this.dispatchTransactions = config.dispatchTransactions ||\n            (dispatch && ((trs) => trs.forEach(tr => dispatch(tr, this)))) ||\n            ((trs) => this.update(trs));\n        this.dispatch = this.dispatch.bind(this);\n        this._root = (config.root || getRoot(config.parent) || document);\n        this.viewState = new ViewState(this, config.state || EditorState.create(config));\n        if (config.scrollTo && config.scrollTo.is(scrollIntoView))\n            this.viewState.scrollTarget = config.scrollTo.value.clip(this.viewState.state);\n        this.plugins = this.state.facet(viewPlugin).map(spec => new PluginInstance(spec));\n        for (let plugin of this.plugins)\n            plugin.update(this);\n        this.observer = new DOMObserver(this);\n        this.inputState = new InputState(this);\n        this.inputState.ensureHandlers(this.plugins);\n        this.docView = new DocView(this);\n        this.mountStyles();\n        this.updateAttrs();\n        this.updateState = 0 /* UpdateState.Idle */;\n        this.requestMeasure();\n        if ((_a = document.fonts) === null || _a === void 0 ? void 0 : _a.ready)\n            document.fonts.ready.then(() => {\n                this.viewState.mustMeasureContent = \"refresh\";\n                this.requestMeasure();\n            });\n    }\n    dispatch(...input) {\n        let trs = input.length == 1 && input[0] instanceof Transaction ? input\n            : input.length == 1 && Array.isArray(input[0]) ? input[0]\n                : [this.state.update(...input)];\n        this.dispatchTransactions(trs, this);\n    }\n    /**\n    Update the view for the given array of transactions. This will\n    update the visible document and selection to match the state\n    produced by the transactions, and notify view plugins of the\n    change. You should usually call\n    [`dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch) instead, which uses this\n    as a primitive.\n    */\n    update(transactions) {\n        if (this.updateState != 0 /* UpdateState.Idle */)\n            throw new Error(\"Calls to EditorView.update are not allowed while an update is in progress\");\n        let redrawn = false, attrsChanged = false, update;\n        let state = this.state;\n        for (let tr of transactions) {\n            if (tr.startState != state)\n                throw new RangeError(\"Trying to update state with a transaction that doesn't start from the previous state.\");\n            state = tr.state;\n        }\n        if (this.destroyed) {\n            this.viewState.state = state;\n            return;\n        }\n        let focus = this.hasFocus, focusFlag = 0, dispatchFocus = null;\n        if (transactions.some(tr => tr.annotation(isFocusChange))) {\n            this.inputState.notifiedFocused = focus;\n            // If a focus-change transaction is being dispatched, set this update flag.\n            focusFlag = 1 /* UpdateFlag.Focus */;\n        }\n        else if (focus != this.inputState.notifiedFocused) {\n            this.inputState.notifiedFocused = focus;\n            // Schedule a separate focus transaction if necessary, otherwise\n            // add a flag to this update\n            dispatchFocus = focusChangeTransaction(state, focus);\n            if (!dispatchFocus)\n                focusFlag = 1 /* UpdateFlag.Focus */;\n        }\n        // If there was a pending DOM change, eagerly read it and try to\n        // apply it after the given transactions.\n        let pendingKey = this.observer.delayedAndroidKey, domChange = null;\n        if (pendingKey) {\n            this.observer.clearDelayedAndroidKey();\n            domChange = this.observer.readChange();\n            // Only try to apply DOM changes if the transactions didn't\n            // change the doc or selection.\n            if (domChange && !this.state.doc.eq(state.doc) || !this.state.selection.eq(state.selection))\n                domChange = null;\n        }\n        else {\n            this.observer.clear();\n        }\n        // When the phrases change, redraw the editor\n        if (state.facet(EditorState.phrases) != this.state.facet(EditorState.phrases))\n            return this.setState(state);\n        update = ViewUpdate.create(this, state, transactions);\n        update.flags |= focusFlag;\n        let scrollTarget = this.viewState.scrollTarget;\n        try {\n            this.updateState = 2 /* UpdateState.Updating */;\n            for (let tr of transactions) {\n                if (scrollTarget)\n                    scrollTarget = scrollTarget.map(tr.changes);\n                if (tr.scrollIntoView) {\n                    let { main } = tr.state.selection;\n                    let { x, y } = this.state.facet(EditorView.cursorScrollMargin);\n                    scrollTarget = new ScrollTarget(main.empty ? main : EditorSelection.cursor(main.head, main.head > main.anchor ? -1 : 1), \"nearest\", \"nearest\", y, x);\n                }\n                for (let e of tr.effects)\n                    if (e.is(scrollIntoView))\n                        scrollTarget = e.value.clip(this.state);\n            }\n            this.viewState.update(update, scrollTarget);\n            this.bidiCache = CachedOrder.update(this.bidiCache, update.changes);\n            if (!update.empty) {\n                this.updatePlugins(update);\n                this.inputState.update(update);\n            }\n            redrawn = this.docView.update(update);\n            if (this.state.facet(styleModule) != this.styleModules)\n                this.mountStyles();\n            attrsChanged = this.updateAttrs();\n            this.showAnnouncements(transactions);\n            this.docView.updateSelection(redrawn, transactions.some(tr => tr.isUserEvent(\"select.pointer\")));\n        }\n        finally {\n            this.updateState = 0 /* UpdateState.Idle */;\n        }\n        if (update.startState.facet(theme) != update.state.facet(theme))\n            this.viewState.mustMeasureContent = true;\n        if (redrawn || attrsChanged || scrollTarget || this.viewState.mustEnforceCursorAssoc || this.viewState.mustMeasureContent)\n            this.requestMeasure();\n        if (redrawn)\n            this.docViewUpdate();\n        if (!update.empty)\n            for (let listener of this.state.facet(updateListener)) {\n                try {\n                    listener(update);\n                }\n                catch (e) {\n                    logException(this.state, e, \"update listener\");\n                }\n            }\n        if (dispatchFocus || domChange)\n            Promise.resolve().then(() => {\n                if (dispatchFocus && this.state == dispatchFocus.startState)\n                    this.dispatch(dispatchFocus);\n                if (domChange) {\n                    if (!applyDOMChange(this, domChange) && pendingKey.force)\n                        dispatchKey(this.contentDOM, pendingKey.key, pendingKey.keyCode);\n                }\n            });\n    }\n    /**\n    Reset the view to the given state. (This will cause the entire\n    document to be redrawn and all view plugins to be reinitialized,\n    so you should probably only use it when the new state isn't\n    derived from the old state. Otherwise, use\n    [`dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch) instead.)\n    */\n    setState(newState) {\n        if (this.updateState != 0 /* UpdateState.Idle */)\n            throw new Error(\"Calls to EditorView.setState are not allowed while an update is in progress\");\n        if (this.destroyed) {\n            this.viewState.state = newState;\n            return;\n        }\n        this.updateState = 2 /* UpdateState.Updating */;\n        let hadFocus = this.hasFocus;\n        try {\n            for (let plugin of this.plugins)\n                plugin.destroy(this);\n            this.viewState = new ViewState(this, newState);\n            this.plugins = newState.facet(viewPlugin).map(spec => new PluginInstance(spec));\n            this.pluginMap.clear();\n            for (let plugin of this.plugins)\n                plugin.update(this);\n            this.docView.destroy();\n            this.docView = new DocView(this);\n            this.inputState.ensureHandlers(this.plugins);\n            this.mountStyles();\n            this.updateAttrs();\n            this.bidiCache = [];\n        }\n        finally {\n            this.updateState = 0 /* UpdateState.Idle */;\n        }\n        if (hadFocus)\n            this.focus();\n        this.requestMeasure();\n    }\n    updatePlugins(update) {\n        let prevSpecs = update.startState.facet(viewPlugin), specs = update.state.facet(viewPlugin);\n        if (prevSpecs != specs) {\n            let newPlugins = [];\n            for (let spec of specs) {\n                let found = prevSpecs.indexOf(spec);\n                if (found < 0) {\n                    newPlugins.push(new PluginInstance(spec));\n                }\n                else {\n                    let plugin = this.plugins[found];\n                    plugin.mustUpdate = update;\n                    newPlugins.push(plugin);\n                }\n            }\n            for (let plugin of this.plugins)\n                if (plugin.mustUpdate != update)\n                    plugin.destroy(this);\n            this.plugins = newPlugins;\n            this.pluginMap.clear();\n        }\n        else {\n            for (let p of this.plugins)\n                p.mustUpdate = update;\n        }\n        for (let i = 0; i < this.plugins.length; i++)\n            this.plugins[i].update(this);\n        if (prevSpecs != specs)\n            this.inputState.ensureHandlers(this.plugins);\n    }\n    docViewUpdate() {\n        for (let plugin of this.plugins) {\n            let val = plugin.value;\n            if (val && val.docViewUpdate) {\n                try {\n                    val.docViewUpdate(this);\n                }\n                catch (e) {\n                    logException(this.state, e, \"doc view update listener\");\n                }\n            }\n        }\n    }\n    /**\n    @internal\n    */\n    measure(flush = true) {\n        if (this.destroyed)\n            return;\n        if (this.measureScheduled > -1)\n            this.win.cancelAnimationFrame(this.measureScheduled);\n        if (this.observer.delayedAndroidKey) {\n            this.measureScheduled = -1;\n            this.requestMeasure();\n            return;\n        }\n        this.measureScheduled = 0; // Prevent requestMeasure calls from scheduling another animation frame\n        if (flush)\n            this.observer.forceFlush();\n        let updated = null;\n        let scroll = this.viewState.scrollParent, scrollOffset = this.viewState.getScrollOffset();\n        let { scrollAnchorPos, scrollAnchorHeight } = this.viewState;\n        if (Math.abs(scrollOffset - this.viewState.scrollOffset) > 1)\n            scrollAnchorHeight = -1;\n        this.viewState.scrollAnchorHeight = -1;\n        try {\n            for (let i = 0;; i++) {\n                if (scrollAnchorHeight < 0) {\n                    if (isScrolledToBottom(scroll || this.win)) {\n                        scrollAnchorPos = -1;\n                        scrollAnchorHeight = this.viewState.heightMap.height;\n                    }\n                    else {\n                        let block = this.viewState.scrollAnchorAt(scrollOffset);\n                        scrollAnchorPos = block.from;\n                        scrollAnchorHeight = block.top;\n                    }\n                }\n                this.updateState = 1 /* UpdateState.Measuring */;\n                let changed = this.viewState.measure();\n                if (!changed && !this.measureRequests.length && this.viewState.scrollTarget == null)\n                    break;\n                if (i > 5) {\n                    console.warn(this.measureRequests.length\n                        ? \"Measure loop restarted more than 5 times\"\n                        : \"Viewport failed to stabilize\");\n                    break;\n                }\n                let measuring = [];\n                // Only run measure requests in this cycle when the viewport didn't change\n                if (!(changed & 4 /* UpdateFlag.Viewport */))\n                    [this.measureRequests, measuring] = [measuring, this.measureRequests];\n                let measured = measuring.map(m => {\n                    try {\n                        return m.read(this);\n                    }\n                    catch (e) {\n                        logException(this.state, e);\n                        return BadMeasure;\n                    }\n                });\n                let update = ViewUpdate.create(this, this.state, []), redrawn = false;\n                update.flags |= changed;\n                if (!updated)\n                    updated = update;\n                else\n                    updated.flags |= changed;\n                this.updateState = 2 /* UpdateState.Updating */;\n                if (!update.empty) {\n                    this.updatePlugins(update);\n                    this.inputState.update(update);\n                    this.updateAttrs();\n                    redrawn = this.docView.update(update);\n                    if (redrawn)\n                        this.docViewUpdate();\n                }\n                for (let i = 0; i < measuring.length; i++)\n                    if (measured[i] != BadMeasure) {\n                        try {\n                            let m = measuring[i];\n                            if (m.write)\n                                m.write(measured[i], this);\n                        }\n                        catch (e) {\n                            logException(this.state, e);\n                        }\n                    }\n                if (redrawn)\n                    this.docView.updateSelection(true);\n                if (!update.viewportChanged && this.measureRequests.length == 0) {\n                    if (this.viewState.editorHeight) {\n                        if (this.viewState.scrollTarget) {\n                            this.docView.scrollIntoView(this.viewState.scrollTarget);\n                            this.viewState.scrollTarget = null;\n                            scrollAnchorHeight = -1;\n                            continue;\n                        }\n                        else {\n                            let newAnchorHeight = scrollAnchorPos < 0 ? this.viewState.heightMap.height :\n                                this.viewState.lineBlockAt(scrollAnchorPos).top;\n                            let diff = (newAnchorHeight - scrollAnchorHeight) / this.scaleY;\n                            if ((diff > 1 || diff < -1) &&\n                                !(browser.ios && this.inputState.lastIOSMomentumScroll > Date.now() - 100) &&\n                                (scroll == this.scrollDOM || this.hasFocus ||\n                                    Math.max(this.inputState.lastWheelEvent, this.inputState.lastTouchTime) > Date.now() - 100)) {\n                                scrollOffset = scrollOffset + diff;\n                                if (scroll)\n                                    scroll.scrollTop += diff;\n                                else\n                                    this.win.scrollBy(0, diff);\n                                scrollAnchorHeight = -1;\n                                continue;\n                            }\n                        }\n                    }\n                    break;\n                }\n            }\n        }\n        finally {\n            this.updateState = 0 /* UpdateState.Idle */;\n            this.measureScheduled = -1;\n        }\n        if (updated && !updated.empty)\n            for (let listener of this.state.facet(updateListener))\n                listener(updated);\n    }\n    /**\n    Get the CSS classes for the currently active editor themes.\n    */\n    get themeClasses() {\n        return baseThemeID + \" \" +\n            (this.state.facet(darkTheme) ? baseDarkID : baseLightID) + \" \" +\n            this.state.facet(theme);\n    }\n    updateAttrs() {\n        let editorAttrs = attrsFromFacet(this, editorAttributes, {\n            class: \"cm-editor\" + (this.hasFocus ? \" cm-focused \" : \" \") + this.themeClasses\n        });\n        let contentAttrs = {\n            spellcheck: \"false\",\n            autocorrect: \"off\",\n            autocapitalize: \"off\",\n            writingsuggestions: \"false\",\n            translate: \"no\",\n            contenteditable: !this.state.facet(editable) ? \"false\" : \"true\",\n            class: \"cm-content\",\n            style: `${browser.tabSize}: ${this.state.tabSize}`,\n            role: \"textbox\",\n            \"aria-multiline\": \"true\"\n        };\n        if (this.state.readOnly)\n            contentAttrs[\"aria-readonly\"] = \"true\";\n        attrsFromFacet(this, contentAttributes, contentAttrs);\n        let changed = this.observer.ignore(() => {\n            let changedContent = updateAttrs(this.contentDOM, this.contentAttrs, contentAttrs);\n            let changedEditor = updateAttrs(this.dom, this.editorAttrs, editorAttrs);\n            return changedContent || changedEditor;\n        });\n        this.editorAttrs = editorAttrs;\n        this.contentAttrs = contentAttrs;\n        return changed;\n    }\n    showAnnouncements(trs) {\n        let first = true;\n        for (let tr of trs)\n            for (let effect of tr.effects)\n                if (effect.is(EditorView.announce)) {\n                    if (first)\n                        this.announceDOM.textContent = \"\";\n                    first = false;\n                    let div = this.announceDOM.appendChild(document.createElement(\"div\"));\n                    div.textContent = effect.value;\n                }\n    }\n    mountStyles() {\n        this.styleModules = this.state.facet(styleModule);\n        let nonce = this.state.facet(EditorView.cspNonce);\n        StyleModule.mount(this.root, this.styleModules.concat(baseTheme$1).reverse(), nonce ? { nonce } : undefined);\n    }\n    readMeasured() {\n        if (this.updateState == 2 /* UpdateState.Updating */)\n            throw new Error(\"Reading the editor layout isn't allowed during an update\");\n        if (this.updateState == 0 /* UpdateState.Idle */ && this.measureScheduled > -1)\n            this.measure(false);\n    }\n    /**\n    Schedule a layout measurement, optionally providing callbacks to\n    do custom DOM measuring followed by a DOM write phase. Using\n    this is preferable reading DOM layout directly from, for\n    example, an event handler, because it'll make sure measuring and\n    drawing done by other components is synchronized, avoiding\n    unnecessary DOM layout computations.\n    */\n    requestMeasure(request) {\n        if (this.measureScheduled < 0)\n            this.measureScheduled = this.win.requestAnimationFrame(() => this.measure());\n        if (request) {\n            if (this.measureRequests.indexOf(request) > -1)\n                return;\n            if (request.key != null)\n                for (let i = 0; i < this.measureRequests.length; i++) {\n                    if (this.measureRequests[i].key === request.key) {\n                        this.measureRequests[i] = request;\n                        return;\n                    }\n                }\n            this.measureRequests.push(request);\n        }\n    }\n    /**\n    Get the value of a specific plugin, if present. Note that\n    plugins that crash can be dropped from a view, so even when you\n    know you registered a given plugin, it is recommended to check\n    the return value of this method.\n    */\n    plugin(plugin) {\n        let known = this.pluginMap.get(plugin);\n        if (known === undefined || known && known.plugin != plugin)\n            this.pluginMap.set(plugin, known = this.plugins.find(p => p.plugin == plugin) || null);\n        return known && known.update(this).value;\n    }\n    /**\n    The top position of the document, in screen coordinates. This\n    may be negative when the editor is scrolled down. Points\n    directly to the top of the first line, not above the padding.\n    */\n    get documentTop() {\n        return this.contentDOM.getBoundingClientRect().top + this.viewState.paddingTop;\n    }\n    /**\n    Reports the padding above and below the document.\n    */\n    get documentPadding() {\n        return { top: this.viewState.paddingTop, bottom: this.viewState.paddingBottom };\n    }\n    /**\n    If the editor is transformed with CSS, this provides the scale\n    along the X axis. Otherwise, it will just be 1. Note that\n    transforms other than translation and scaling are not supported.\n    */\n    get scaleX() { return this.viewState.scaleX; }\n    /**\n    Provide the CSS transformed scale along the Y axis.\n    */\n    get scaleY() { return this.viewState.scaleY; }\n    /**\n    Find the text line or block widget at the given vertical\n    position (which is interpreted as relative to the [top of the\n    document](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop)).\n    */\n    elementAtHeight(height) {\n        this.readMeasured();\n        return this.viewState.elementAtHeight(height);\n    }\n    /**\n    Find the line block (see\n    [`lineBlockAt`](https://codemirror.net/6/docs/ref/#view.EditorView.lineBlockAt)) at the given\n    height, again interpreted relative to the [top of the\n    document](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop).\n    */\n    lineBlockAtHeight(height) {\n        this.readMeasured();\n        return this.viewState.lineBlockAtHeight(height);\n    }\n    /**\n    Get the extent and vertical position of all [line\n    blocks](https://codemirror.net/6/docs/ref/#view.EditorView.lineBlockAt) in the viewport. Positions\n    are relative to the [top of the\n    document](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop);\n    */\n    get viewportLineBlocks() {\n        return this.viewState.viewportLines;\n    }\n    /**\n    Find the line block around the given document position. A line\n    block is a range delimited on both sides by either a\n    non-[hidden](https://codemirror.net/6/docs/ref/#view.Decoration^replace) line break, or the\n    start/end of the document. It will usually just hold a line of\n    text, but may be broken into multiple textblocks by block\n    widgets.\n    */\n    lineBlockAt(pos) {\n        return this.viewState.lineBlockAt(pos);\n    }\n    /**\n    The editor's total content height.\n    */\n    get contentHeight() {\n        return this.viewState.contentHeight;\n    }\n    /**\n    Move a cursor position by [grapheme\n    cluster](https://codemirror.net/6/docs/ref/#state.findClusterBreak). `forward` determines whether\n    the motion is away from the line start, or towards it. In\n    bidirectional text, the line is traversed in visual order, using\n    the editor's [text direction](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection).\n    When the start position was the last one on the line, the\n    returned position will be across the line break. If there is no\n    further line, the original position is returned.\n    \n    By default, this method moves over a single cluster. The\n    optional `by` argument can be used to move across more. It will\n    be called with the first cluster as argument, and should return\n    a predicate that determines, for each subsequent cluster,\n    whether it should also be moved over.\n    */\n    moveByChar(start, forward, by) {\n        return skipAtoms(this, start, moveByChar(this, start, forward, by));\n    }\n    /**\n    Move a cursor position across the next group of either\n    [letters](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer) or non-letter\n    non-whitespace characters.\n    */\n    moveByGroup(start, forward) {\n        return skipAtoms(this, start, moveByChar(this, start, forward, initial => byGroup(this, start.head, initial)));\n    }\n    /**\n    Get the cursor position visually at the start or end of a line.\n    Note that this may differ from the _logical_ position at its\n    start or end (which is simply at `line.from`/`line.to`) if text\n    at the start or end goes against the line's base text direction.\n    */\n    visualLineSide(line, end) {\n        let order = this.bidiSpans(line), dir = this.textDirectionAt(line.from);\n        let span = order[end ? order.length - 1 : 0];\n        return EditorSelection.cursor(span.side(end, dir) + line.from, span.forward(!end, dir) ? 1 : -1);\n    }\n    /**\n    Move to the next line boundary in the given direction. If\n    `includeWrap` is true, line wrapping is on, and there is a\n    further wrap point on the current line, the wrap point will be\n    returned. Otherwise this function will return the start or end\n    of the line.\n    */\n    moveToLineBoundary(start, forward, includeWrap = true) {\n        return moveToLineBoundary(this, start, forward, includeWrap);\n    }\n    /**\n    Move a cursor position vertically. When `distance` isn't given,\n    it defaults to moving to the next line (including wrapped\n    lines). Otherwise, `distance` should provide a positive distance\n    in pixels.\n    \n    When `start` has a\n    [`goalColumn`](https://codemirror.net/6/docs/ref/#state.SelectionRange.goalColumn), the vertical\n    motion will use that as a target horizontal position. Otherwise,\n    the cursor's own horizontal position is used. The returned\n    cursor will have its goal column set to whichever column was\n    used.\n    */\n    moveVertically(start, forward, distance) {\n        return skipAtoms(this, start, moveVertically(this, start, forward, distance));\n    }\n    /**\n    Find the DOM parent node and offset (child offset if `node` is\n    an element, character offset when it is a text node) at the\n    given document position.\n    \n    Note that for positions that aren't currently in\n    `visibleRanges`, the resulting DOM position isn't necessarily\n    meaningful (it may just point before or after a placeholder\n    element).\n    */\n    domAtPos(pos, side = 1) {\n        return this.docView.domAtPos(pos, side);\n    }\n    /**\n    Find the document position at the given DOM node. Can be useful\n    for associating positions with DOM events. Will raise an error\n    when `node` isn't part of the editor content.\n    */\n    posAtDOM(node, offset = 0) {\n        return this.docView.posFromDOM(node, offset);\n    }\n    posAtCoords(coords, precise = true) {\n        this.readMeasured();\n        let found = posAtCoords(this, coords, precise);\n        return found && found.pos;\n    }\n    posAndSideAtCoords(coords, precise = true) {\n        this.readMeasured();\n        return posAtCoords(this, coords, precise);\n    }\n    /**\n    Get the screen coordinates at the given document position.\n    `side` determines whether the coordinates are based on the\n    element before (-1) or after (1) the position (if no element is\n    available on the given side, the method will transparently use\n    another strategy to get reasonable coordinates).\n    */\n    coordsAtPos(pos, side = 1) {\n        this.readMeasured();\n        let line = this.state.doc.lineAt(pos), order = this.bidiSpans(line);\n        let span = order[BidiSpan.find(order, pos - line.from, -1, side)];\n        return this.docView.coordsAt(pos, side, span.dir == Direction.RTL);\n    }\n    /**\n    Return the rectangle around a given character. If `pos` does not\n    point in front of a character that is in the viewport and\n    rendered (i.e. not replaced, not a line break), this will return\n    null. For space characters that are a line wrap point, this will\n    return the position before the line break.\n    */\n    coordsForChar(pos) {\n        this.readMeasured();\n        return this.docView.coordsForChar(pos);\n    }\n    /**\n    The default width of a character in the editor. May not\n    accurately reflect the width of all characters (given variable\n    width fonts or styling of invididual ranges).\n    */\n    get defaultCharacterWidth() { return this.viewState.heightOracle.charWidth; }\n    /**\n    The default height of a line in the editor. May not be accurate\n    for all lines.\n    */\n    get defaultLineHeight() { return this.viewState.heightOracle.lineHeight; }\n    /**\n    The text direction\n    ([`direction`](https://developer.mozilla.org/en-US/docs/Web/CSS/direction)\n    CSS property) of the editor's content element.\n    */\n    get textDirection() { return this.viewState.defaultTextDirection; }\n    /**\n    Find the text direction of the block at the given position, as\n    assigned by CSS. If\n    [`perLineTextDirection`](https://codemirror.net/6/docs/ref/#view.EditorView^perLineTextDirection)\n    isn't enabled, or the given position is outside of the viewport,\n    this will always return the same as\n    [`textDirection`](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection). Note that\n    this may trigger a DOM layout.\n    */\n    textDirectionAt(pos) {\n        let perLine = this.state.facet(perLineTextDirection);\n        if (!perLine || pos < this.viewport.from || pos > this.viewport.to)\n            return this.textDirection;\n        this.readMeasured();\n        return this.docView.textDirectionAt(pos);\n    }\n    /**\n    Whether this editor [wraps lines](https://codemirror.net/6/docs/ref/#view.EditorView.lineWrapping)\n    (as determined by the\n    [`white-space`](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space)\n    CSS property of its content element).\n    */\n    get lineWrapping() { return this.viewState.heightOracle.lineWrapping; }\n    /**\n    Returns the bidirectional text structure of the given line\n    (which should be in the current document) as an array of span\n    objects. The order of these spans matches the [text\n    direction](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection)—if that is\n    left-to-right, the leftmost spans come first, otherwise the\n    rightmost spans come first.\n    */\n    bidiSpans(line) {\n        if (line.length > MaxBidiLine)\n            return trivialOrder(line.length);\n        let dir = this.textDirectionAt(line.from), isolates;\n        for (let entry of this.bidiCache) {\n            if (entry.from == line.from && entry.dir == dir &&\n                (entry.fresh || isolatesEq(entry.isolates, isolates = getIsolatedRanges(this, line))))\n                return entry.order;\n        }\n        if (!isolates)\n            isolates = getIsolatedRanges(this, line);\n        let order = computeOrder(line.text, dir, isolates);\n        this.bidiCache.push(new CachedOrder(line.from, line.to, dir, isolates, true, order));\n        return order;\n    }\n    /**\n    Check whether the editor has focus.\n    */\n    get hasFocus() {\n        var _a;\n        // Safari return false for hasFocus when the context menu is open\n        // or closing, which leads us to ignore selection changes from the\n        // context menu because it looks like the editor isn't focused.\n        // This kludges around that.\n        return (this.dom.ownerDocument.hasFocus() || browser.safari && ((_a = this.inputState) === null || _a === void 0 ? void 0 : _a.lastContextMenu) > Date.now() - 3e4) &&\n            this.root.activeElement == this.contentDOM;\n    }\n    /**\n    Put focus on the editor.\n    */\n    focus() {\n        this.observer.ignore(() => {\n            focusPreventScroll(this.contentDOM);\n            this.docView.updateSelection();\n        });\n    }\n    /**\n    Update the [root](https://codemirror.net/6/docs/ref/##view.EditorViewConfig.root) in which the editor lives. This is only\n    necessary when moving the editor's existing DOM to a new window or shadow root.\n    */\n    setRoot(root) {\n        if (this._root != root) {\n            this._root = root;\n            this.observer.setWindow((root.nodeType == 9 ? root : root.ownerDocument).defaultView || window);\n            this.mountStyles();\n        }\n    }\n    /**\n    Clean up this editor view, removing its element from the\n    document, unregistering event handlers, and notifying\n    plugins. The view instance can no longer be used after\n    calling this.\n    */\n    destroy() {\n        if (this.root.activeElement == this.contentDOM)\n            this.contentDOM.blur();\n        for (let plugin of this.plugins)\n            plugin.destroy(this);\n        this.plugins = [];\n        this.inputState.destroy();\n        this.docView.destroy();\n        this.dom.remove();\n        this.observer.destroy();\n        if (this.measureScheduled > -1)\n            this.win.cancelAnimationFrame(this.measureScheduled);\n        this.destroyed = true;\n    }\n    /**\n    Returns an effect that can be\n    [added](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) to a transaction to\n    cause it to scroll the given position or range into view.\n    */\n    static scrollIntoView(pos, options = {}) {\n        var _a, _b, _c, _d;\n        return scrollIntoView.of(new ScrollTarget(typeof pos == \"number\" ? EditorSelection.cursor(pos) : pos, (_a = options.y) !== null && _a !== void 0 ? _a : \"nearest\", (_b = options.x) !== null && _b !== void 0 ? _b : \"nearest\", (_c = options.yMargin) !== null && _c !== void 0 ? _c : 5, (_d = options.xMargin) !== null && _d !== void 0 ? _d : 5));\n    }\n    /**\n    Return an effect that resets the editor to its current (at the\n    time this method was called) scroll position. Note that this\n    only affects the editor's own scrollable element, not parents.\n    See also\n    [`EditorViewConfig.scrollTo`](https://codemirror.net/6/docs/ref/#view.EditorViewConfig.scrollTo).\n    \n    The effect should be used with a document identical to the one\n    it was created for. Failing to do so is not an error, but may\n    not scroll to the expected position. You can\n    [map](https://codemirror.net/6/docs/ref/#state.StateEffect.map) the effect to account for changes.\n    */\n    scrollSnapshot() {\n        let { scrollTop, scrollLeft } = this.scrollDOM;\n        let ref = this.viewState.scrollAnchorAt(scrollTop);\n        return scrollIntoView.of(new ScrollTarget(EditorSelection.cursor(ref.from), \"start\", \"start\", ref.top - scrollTop, scrollLeft, true));\n    }\n    /**\n    Enable or disable tab-focus mode, which disables key bindings\n    for Tab and Shift-Tab, letting the browser's default\n    focus-changing behavior go through instead. This is useful to\n    prevent trapping keyboard users in your editor.\n    \n    Without argument, this toggles the mode. With a boolean, it\n    enables (true) or disables it (false). Given a number, it\n    temporarily enables the mode until that number of milliseconds\n    have passed or another non-Tab key is pressed.\n    */\n    setTabFocusMode(to) {\n        if (to == null)\n            this.inputState.tabFocusMode = this.inputState.tabFocusMode < 0 ? 0 : -1;\n        else if (typeof to == \"boolean\")\n            this.inputState.tabFocusMode = to ? 0 : -1;\n        else if (this.inputState.tabFocusMode != 0)\n            this.inputState.tabFocusMode = Date.now() + to;\n    }\n    /**\n    Returns an extension that can be used to add DOM event handlers.\n    The value should be an object mapping event names to handler\n    functions. For any given event, such functions are ordered by\n    extension precedence, and the first handler to return true will\n    be assumed to have handled that event, and no other handlers or\n    built-in behavior will be activated for it. These are registered\n    on the [content element](https://codemirror.net/6/docs/ref/#view.EditorView.contentDOM), except\n    for `scroll` handlers, which will be called any time the\n    editor's [scroll element](https://codemirror.net/6/docs/ref/#view.EditorView.scrollDOM) or one of\n    its parent nodes is scrolled.\n    */\n    static domEventHandlers(handlers) {\n        return ViewPlugin.define(() => ({}), { eventHandlers: handlers });\n    }\n    /**\n    Create an extension that registers DOM event observers. Contrary\n    to event [handlers](https://codemirror.net/6/docs/ref/#view.EditorView^domEventHandlers),\n    observers can't be prevented from running by a higher-precedence\n    handler returning true. They also don't prevent other handlers\n    and observers from running when they return true, and should not\n    call `preventDefault`.\n    */\n    static domEventObservers(observers) {\n        return ViewPlugin.define(() => ({}), { eventObservers: observers });\n    }\n    /**\n    Create a theme extension. The first argument can be a\n    [`style-mod`](https://code.haverbeke.berlin/marijn/style-mod#documentation)\n    style spec providing the styles for the theme. These will be\n    prefixed with a generated class for the style.\n    \n    Because the selectors will be prefixed with a scope class, rule\n    that directly match the editor's [wrapper\n    element](https://codemirror.net/6/docs/ref/#view.EditorView.dom)—to which the scope class will be\n    added—need to be explicitly differentiated by adding an `&` to\n    the selector for that element—for example\n    `&.cm-focused`.\n    \n    When `dark` is set to true, the theme will be marked as dark,\n    which will cause the `&dark` rules from [base\n    themes](https://codemirror.net/6/docs/ref/#view.EditorView^baseTheme) to be used (as opposed to\n    `&light` when a light theme is active).\n    */\n    static theme(spec, options) {\n        let prefix = StyleModule.newName();\n        let result = [theme.of(prefix), styleModule.of(buildTheme(`.${prefix}`, spec))];\n        if (options && options.dark)\n            result.push(darkTheme.of(true));\n        return result;\n    }\n    /**\n    Create an extension that adds styles to the base theme. Like\n    with [`theme`](https://codemirror.net/6/docs/ref/#view.EditorView^theme), use `&` to indicate the\n    place of the editor wrapper element when directly targeting\n    that. You can also use `&dark` or `&light` instead to only\n    target editors with a dark or light theme.\n    */\n    static baseTheme(spec) {\n        return Prec.lowest(styleModule.of(buildTheme(\".\" + baseThemeID, spec, lightDarkIDs)));\n    }\n    /**\n    Retrieve an editor view instance from the view's DOM\n    representation.\n    */\n    static findFromDOM(dom) {\n        var _a;\n        let content = dom.querySelector(\".cm-content\");\n        let tile = content && Tile.get(content) || Tile.get(dom);\n        return ((_a = tile === null || tile === void 0 ? void 0 : tile.root) === null || _a === void 0 ? void 0 : _a.view) || null;\n    }\n}\n/**\nFacet to add a [style\nmodule](https://code.haverbeke.berlin/marijn/style-mod#documentation) to\nan editor view. The view will ensure that the module is\nmounted in its [document\nroot](https://codemirror.net/6/docs/ref/#view.EditorView.constructor^config.root).\n*/\nEditorView.styleModule = styleModule;\n/**\nAn input handler can override the way changes to the editable\nDOM content are handled. Handlers are passed the document\npositions between which the change was found, and the new\ncontent. When one returns true, no further input handlers are\ncalled and the default behavior is prevented.\n\nThe `insert` argument can be used to get the default transaction\nthat would be applied for this input. This can be useful when\ndispatching the custom behavior as a separate transaction.\n*/\nEditorView.inputHandler = inputHandler;\n/**\nFunctions provided in this facet will be used to transform text\npasted or dropped into the editor.\n*/\nEditorView.clipboardInputFilter = clipboardInputFilter;\n/**\nTransform text copied or dragged from the editor.\n*/\nEditorView.clipboardOutputFilter = clipboardOutputFilter;\n/**\nScroll handlers can override how things are scrolled into view.\nIf they return `true`, no further handling happens for the\nscrolling. If they return false, the default scroll behavior is\napplied. Scroll handlers should never initiate editor updates.\n*/\nEditorView.scrollHandler = scrollHandler;\n/**\nThis facet can be used to provide functions that create effects\nto be dispatched when the editor's focus state changes.\n*/\nEditorView.focusChangeEffect = focusChangeEffect;\n/**\nBy default, the editor assumes all its content has the same\n[text direction](https://codemirror.net/6/docs/ref/#view.Direction). Configure this with a `true`\nvalue to make it read the text direction of every (rendered)\nline separately.\n*/\nEditorView.perLineTextDirection = perLineTextDirection;\n/**\nAllows you to provide a function that should be called when the\nlibrary catches an exception from an extension (mostly from view\nplugins, but may be used by other extensions to route exceptions\nfrom user-code-provided callbacks). This is mostly useful for\ndebugging and logging. See [`logException`](https://codemirror.net/6/docs/ref/#view.logException).\n*/\nEditorView.exceptionSink = exceptionSink;\n/**\nA facet that can be used to register a function to be called\nevery time the view updates.\n*/\nEditorView.updateListener = updateListener;\n/**\nFacet that controls whether the editor content DOM is editable.\nWhen its highest-precedence value is `false`, the element will\nnot have its `contenteditable` attribute set. (Note that this\ndoesn't affect API calls that change the editor content, even\nwhen those are bound to keys or buttons. See the\n[`readOnly`](https://codemirror.net/6/docs/ref/#state.EditorState.readOnly) facet for that.)\n*/\nEditorView.editable = editable;\n/**\nAllows you to influence the way mouse selection happens. The\nfunctions in this facet will be called for a `mousedown` event\non the editor, and can return an object that overrides the way a\nselection is computed from that mouse click or drag.\n*/\nEditorView.mouseSelectionStyle = mouseSelectionStyle;\n/**\nFacet used to configure whether a given selection drag event\nshould move or copy the selection. The given predicate will be\ncalled with the `mousedown` event, and can return `true` when\nthe drag should move the content.\n*/\nEditorView.dragMovesSelection = dragMovesSelection$1;\n/**\nFacet used to configure whether a given selecting click adds a\nnew range to the existing selection or replaces it entirely. The\ndefault behavior is to check `event.metaKey` on macOS, and\n`event.ctrlKey` elsewhere.\n*/\nEditorView.clickAddsSelectionRange = clickAddsSelectionRange;\n/**\nA facet that determines which [decorations](https://codemirror.net/6/docs/ref/#view.Decoration)\nare shown in the view. Decorations can be provided in two\nways—directly, or via a function that takes an editor view.\n\nOnly decoration sets provided directly are allowed to influence\nthe editor's vertical layout structure. The ones provided as\nfunctions are called _after_ the new viewport has been computed,\nand thus **must not** introduce block widgets or replacing\ndecorations that cover line breaks.\n\nIf you want decorated ranges to behave like atomic units for\ncursor motion and deletion purposes, also provide the range set\ncontaining the decorations to\n[`EditorView.atomicRanges`](https://codemirror.net/6/docs/ref/#view.EditorView^atomicRanges).\n*/\nEditorView.decorations = decorations;\n/**\n[Block wrappers](https://codemirror.net/6/docs/ref/#view.BlockWrapper) provide a way to add DOM\nstructure around editor lines and block widgets. Sets of\nwrappers are provided in a similar way to decorations, and are\nnested in a similar way when they overlap. A wrapper affects all\nlines and block widgets that start inside its range.\n*/\nEditorView.blockWrappers = blockWrappers;\n/**\nFacet that works much like\n[`decorations`](https://codemirror.net/6/docs/ref/#view.EditorView^decorations), but puts its\ninputs at the very bottom of the precedence stack, meaning mark\ndecorations provided here will only be split by other, partially\noverlapping `outerDecorations` ranges, and wrap around all\nregular decorations. Use this for mark elements that should, as\nmuch as possible, remain in one piece.\n*/\nEditorView.outerDecorations = outerDecorations;\n/**\nUsed to provide ranges that should be treated as atoms as far as\ncursor motion is concerned. This causes methods like\n[`moveByChar`](https://codemirror.net/6/docs/ref/#view.EditorView.moveByChar) and\n[`moveVertically`](https://codemirror.net/6/docs/ref/#view.EditorView.moveVertically) (and the\ncommands built on top of them) to skip across such regions when\na selection endpoint would enter them. This does _not_ prevent\ndirect programmatic [selection\nupdates](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection) from moving into such\nregions.\n*/\nEditorView.atomicRanges = atomicRanges;\n/**\nWhen range decorations add a `unicode-bidi: isolate` style, they\nshould also include a\n[`bidiIsolate`](https://codemirror.net/6/docs/ref/#view.MarkDecorationSpec.bidiIsolate) property\nin their decoration spec, and be exposed through this facet, so\nthat the editor can compute the proper text order. (Other values\nfor `unicode-bidi`, except of course `normal`, are not\nsupported.)\n*/\nEditorView.bidiIsolatedRanges = bidiIsolatedRanges;\n/**\nCan be used to specify the distance that scrolling cursor into\nview keeps it away from the sides of the editor, either as a\nsingle pixel number or two different values for the different\naxes. Defaults to 5 pixels on both axes.\n*/\nEditorView.cursorScrollMargin = /*@__PURE__*/Facet.define({\n    combine: inputs => {\n        let x = 5, y = 5;\n        for (let i of inputs) {\n            if (typeof i == \"number\")\n                x = y = i;\n            else\n                ({ x, y } = i);\n        }\n        return { x, y };\n    }\n});\n/**\nFacet that allows extensions to provide additional scroll\nmargins (space around the sides of the scrolling element that\nshould be considered invisible). This can be useful when the\nplugin introduces elements that cover part of that element (for\nexample a horizontally fixed gutter). Not to be confused with\n[`cursorScrollMargin`](https://codemirror.net/6/docs/ref/#view.EditorView^cursorScrollMargin).\n*/\nEditorView.scrollMargins = scrollMargins;\n/**\nThis facet records whether a dark theme is active. The extension\nreturned by [`theme`](https://codemirror.net/6/docs/ref/#view.EditorView^theme) automatically\nincludes an instance of this when the `dark` option is set to\ntrue.\n*/\nEditorView.darkTheme = darkTheme;\n/**\nProvides a Content Security Policy nonce to use when creating\nthe style sheets for the editor. Holds the empty string when no\nnonce has been provided.\n*/\nEditorView.cspNonce = /*@__PURE__*/Facet.define({ combine: values => values.length ? values[0] : \"\" });\n/**\nFacet that provides additional DOM attributes for the editor's\neditable DOM element.\n*/\nEditorView.contentAttributes = contentAttributes;\n/**\nFacet that provides DOM attributes for the editor's outer\nelement.\n*/\nEditorView.editorAttributes = editorAttributes;\n/**\nAn extension that enables line wrapping in the editor (by\nsetting CSS `white-space` to `pre-wrap` in the content).\n*/\nEditorView.lineWrapping = /*@__PURE__*/EditorView.contentAttributes.of({ \"class\": \"cm-lineWrapping\" });\n/**\nState effect used to include screen reader announcements in a\ntransaction. These will be added to the DOM in a visually hidden\nelement with `aria-live=\"polite\"` set, and should be used to\ndescribe effects that are visually obvious but may not be\nnoticed by screen reader users (such as moving to the next\nsearch match).\n*/\nEditorView.announce = /*@__PURE__*/StateEffect.define();\n// Maximum line length for which we compute accurate bidi info\nconst MaxBidiLine = 4096;\nconst BadMeasure = {};\nclass CachedOrder {\n    constructor(from, to, dir, isolates, fresh, order) {\n        this.from = from;\n        this.to = to;\n        this.dir = dir;\n        this.isolates = isolates;\n        this.fresh = fresh;\n        this.order = order;\n    }\n    static update(cache, changes) {\n        if (changes.empty && !cache.some(c => c.fresh))\n            return cache;\n        let result = [], lastDir = cache.length ? cache[cache.length - 1].dir : Direction.LTR;\n        for (let i = Math.max(0, cache.length - 10); i < cache.length; i++) {\n            let entry = cache[i];\n            if (entry.dir == lastDir && !changes.touchesRange(entry.from, entry.to))\n                result.push(new CachedOrder(changes.mapPos(entry.from, 1), changes.mapPos(entry.to, -1), entry.dir, entry.isolates, false, entry.order));\n        }\n        return result;\n    }\n}\nfunction attrsFromFacet(view, facet, base) {\n    for (let sources = view.state.facet(facet), i = sources.length - 1; i >= 0; i--) {\n        let source = sources[i], value = typeof source == \"function\" ? source(view) : source;\n        if (value)\n            combineAttrs(value, base);\n    }\n    return base;\n}\n\nconst currentPlatform = browser.mac ? \"mac\" : browser.windows ? \"win\" : browser.linux ? \"linux\" : \"key\";\nfunction normalizeKeyName(name, platform) {\n    const parts = name.split(/-(?!$)/);\n    let result = parts[parts.length - 1];\n    if (result == \"Space\")\n        result = \" \";\n    let alt, ctrl, shift, meta;\n    for (let i = 0; i < parts.length - 1; ++i) {\n        const mod = parts[i];\n        if (/^(cmd|meta|m)$/i.test(mod))\n            meta = true;\n        else if (/^a(lt)?$/i.test(mod))\n            alt = true;\n        else if (/^(c|ctrl|control)$/i.test(mod))\n            ctrl = true;\n        else if (/^s(hift)?$/i.test(mod))\n            shift = true;\n        else if (/^mod$/i.test(mod)) {\n            if (platform == \"mac\")\n                meta = true;\n            else\n                ctrl = true;\n        }\n        else\n            throw new Error(\"Unrecognized modifier name: \" + mod);\n    }\n    if (alt)\n        result = \"Alt-\" + result;\n    if (ctrl)\n        result = \"Ctrl-\" + result;\n    if (meta)\n        result = \"Meta-\" + result;\n    if (shift)\n        result = \"Shift-\" + result;\n    return result;\n}\nfunction modifiers(name, event, shift) {\n    if (event.altKey)\n        name = \"Alt-\" + name;\n    if (event.ctrlKey)\n        name = \"Ctrl-\" + name;\n    if (event.metaKey)\n        name = \"Meta-\" + name;\n    if (shift !== false && event.shiftKey)\n        name = \"Shift-\" + name;\n    return name;\n}\nconst handleKeyEvents = /*@__PURE__*/Prec.default(/*@__PURE__*/EditorView.domEventHandlers({\n    keydown(event, view) {\n        return runHandlers(getKeymap(view.state), event, view, \"editor\");\n    }\n}));\n/**\nFacet used for registering keymaps.\n\nYou can add multiple keymaps to an editor. Their priorities\ndetermine their precedence (the ones specified early or with high\npriority get checked first). When a handler has returned `true`\nfor a given key, no further handlers are called.\n*/\nconst keymap = /*@__PURE__*/Facet.define({ enables: handleKeyEvents });\nconst Keymaps = /*@__PURE__*/new WeakMap();\n// This is hidden behind an indirection, rather than directly computed\n// by the facet, to keep internal types out of the facet's type.\nfunction getKeymap(state) {\n    let bindings = state.facet(keymap);\n    let map = Keymaps.get(bindings);\n    if (!map)\n        Keymaps.set(bindings, map = buildKeymap(bindings.reduce((a, b) => a.concat(b), [])));\n    return map;\n}\n/**\nRun the key handlers registered for a given scope. The event\nobject should be a `\"keydown\"` event. Returns true if any of the\nhandlers handled it.\n*/\nfunction runScopeHandlers(view, event, scope) {\n    return runHandlers(getKeymap(view.state), event, view, scope);\n}\nlet storedPrefix = null;\nconst PrefixTimeout = 4000;\nfunction buildKeymap(bindings, platform = currentPlatform) {\n    let bound = Object.create(null);\n    let isPrefix = Object.create(null);\n    let checkPrefix = (name, is) => {\n        let current = isPrefix[name];\n        if (current == null)\n            isPrefix[name] = is;\n        else if (current != is)\n            throw new Error(\"Key binding \" + name + \" is used both as a regular binding and as a multi-stroke prefix\");\n    };\n    let add = (scope, key, command, preventDefault, stopPropagation) => {\n        var _a, _b;\n        let scopeObj = bound[scope] || (bound[scope] = Object.create(null));\n        let parts = key.split(/ (?!$)/).map(k => normalizeKeyName(k, platform));\n        for (let i = 1; i < parts.length; i++) {\n            let prefix = parts.slice(0, i).join(\" \");\n            checkPrefix(prefix, true);\n            if (!scopeObj[prefix])\n                scopeObj[prefix] = {\n                    preventDefault: true,\n                    stopPropagation: false,\n                    run: [(view) => {\n                            let ourObj = storedPrefix = { view, prefix, scope };\n                            setTimeout(() => { if (storedPrefix == ourObj)\n                                storedPrefix = null; }, PrefixTimeout);\n                            return true;\n                        }]\n                };\n        }\n        let full = parts.join(\" \");\n        checkPrefix(full, false);\n        let binding = scopeObj[full] || (scopeObj[full] = {\n            preventDefault: false,\n            stopPropagation: false,\n            run: ((_b = (_a = scopeObj._any) === null || _a === void 0 ? void 0 : _a.run) === null || _b === void 0 ? void 0 : _b.slice()) || []\n        });\n        if (command)\n            binding.run.push(command);\n        if (preventDefault)\n            binding.preventDefault = true;\n        if (stopPropagation)\n            binding.stopPropagation = true;\n    };\n    for (let b of bindings) {\n        let scopes = b.scope ? b.scope.split(\" \") : [\"editor\"];\n        if (b.any)\n            for (let scope of scopes) {\n                let scopeObj = bound[scope] || (bound[scope] = Object.create(null));\n                if (!scopeObj._any)\n                    scopeObj._any = { preventDefault: false, stopPropagation: false, run: [] };\n                let { any } = b;\n                for (let key in scopeObj)\n                    scopeObj[key].run.push(view => any(view, currentKeyEvent));\n            }\n        let name = b[platform] || b.key;\n        if (!name)\n            continue;\n        for (let scope of scopes) {\n            add(scope, name, b.run, b.preventDefault, b.stopPropagation);\n            if (b.shift)\n                add(scope, \"Shift-\" + name, b.shift, b.preventDefault, b.stopPropagation);\n        }\n    }\n    return bound;\n}\nlet currentKeyEvent = null;\nfunction runHandlers(map, event, view, scope) {\n    currentKeyEvent = event;\n    let name = keyName(event);\n    let charCode = codePointAt(name, 0), isChar = codePointSize(charCode) == name.length && name != \" \";\n    let prefix = \"\", handled = false, prevented = false, stopPropagation = false;\n    if (storedPrefix && storedPrefix.view == view && storedPrefix.scope == scope) {\n        prefix = storedPrefix.prefix + \" \";\n        if (modifierCodes.indexOf(event.keyCode) < 0) {\n            prevented = true;\n            storedPrefix = null;\n        }\n    }\n    let ran = new Set;\n    let runFor = (binding) => {\n        if (binding) {\n            for (let cmd of binding.run)\n                if (!ran.has(cmd)) {\n                    ran.add(cmd);\n                    if (cmd(view)) {\n                        if (binding.stopPropagation)\n                            stopPropagation = true;\n                        return true;\n                    }\n                }\n            if (binding.preventDefault) {\n                if (binding.stopPropagation)\n                    stopPropagation = true;\n                prevented = true;\n            }\n        }\n        return false;\n    };\n    let scopeObj = map[scope], baseName, shiftName;\n    if (scopeObj) {\n        if (runFor(scopeObj[prefix + modifiers(name, event, !isChar)])) {\n            handled = true;\n        }\n        else if (isChar && (event.altKey || event.metaKey || event.ctrlKey) &&\n            // Ctrl-Alt may be used for AltGr on Windows\n            !(browser.windows && event.ctrlKey && event.altKey) &&\n            // Alt-combinations on macOS tend to be typed characters\n            !(browser.mac && event.altKey && !(event.ctrlKey || event.metaKey)) &&\n            (baseName = base[event.keyCode]) && baseName != name) {\n            if (runFor(scopeObj[prefix + modifiers(baseName, event, true)])) {\n                handled = true;\n            }\n            else if (event.shiftKey && (shiftName = shift[event.keyCode]) != name && shiftName != baseName &&\n                runFor(scopeObj[prefix + modifiers(shiftName, event, false)])) {\n                handled = true;\n            }\n        }\n        else if (isChar && event.shiftKey &&\n            runFor(scopeObj[prefix + modifiers(name, event, true)])) {\n            handled = true;\n        }\n        if (!handled && runFor(scopeObj._any))\n            handled = true;\n    }\n    if (prevented)\n        handled = true;\n    if (handled && stopPropagation)\n        event.stopPropagation();\n    currentKeyEvent = null;\n    return handled;\n}\n\n/**\nImplementation of [`LayerMarker`](https://codemirror.net/6/docs/ref/#view.LayerMarker) that creates\na rectangle at a given set of coordinates.\n*/\nclass RectangleMarker {\n    /**\n    Create a marker with the given class and dimensions. If `width`\n    is null, the DOM element will get no width style.\n    */\n    constructor(className, \n    /**\n    The left position of the marker (in pixels, document-relative).\n    */\n    left, \n    /**\n    The top position of the marker.\n    */\n    top, \n    /**\n    The width of the marker, or null if it shouldn't get a width assigned.\n    */\n    width, \n    /**\n    The height of the marker.\n    */\n    height) {\n        this.className = className;\n        this.left = left;\n        this.top = top;\n        this.width = width;\n        this.height = height;\n    }\n    draw() {\n        let elt = document.createElement(\"div\");\n        elt.className = this.className;\n        this.adjust(elt);\n        return elt;\n    }\n    update(elt, prev) {\n        if (prev.className != this.className)\n            return false;\n        this.adjust(elt);\n        return true;\n    }\n    adjust(elt) {\n        elt.style.left = this.left + \"px\";\n        elt.style.top = this.top + \"px\";\n        if (this.width != null)\n            elt.style.width = this.width + \"px\";\n        elt.style.height = this.height + \"px\";\n    }\n    eq(p) {\n        return this.left == p.left && this.top == p.top && this.width == p.width && this.height == p.height &&\n            this.className == p.className;\n    }\n    /**\n    Create a set of rectangles for the given selection range,\n    assigning them theclass`className`. Will create a single\n    rectangle for empty ranges, and a set of selection-style\n    rectangles covering the range's content (in a bidi-aware\n    way) for non-empty ones.\n    */\n    static forRange(view, className, range) {\n        if (range.empty) {\n            let pos = view.coordsAtPos(range.head, range.assoc || 1);\n            if (!pos)\n                return [];\n            let base = getBase(view);\n            return [new RectangleMarker(className, pos.left - base.left, pos.top - base.top, null, pos.bottom - pos.top)];\n        }\n        else {\n            return rectanglesForRange(view, className, range);\n        }\n    }\n}\nfunction getBase(view) {\n    let rect = view.scrollDOM.getBoundingClientRect();\n    let left = view.textDirection == Direction.LTR ? rect.left : rect.right - view.scrollDOM.clientWidth * view.scaleX;\n    return { left: left - view.scrollDOM.scrollLeft * view.scaleX, top: rect.top - view.scrollDOM.scrollTop * view.scaleY };\n}\nfunction wrappedLine(view, pos, side, inside) {\n    let coords = view.coordsAtPos(pos, side * 2);\n    if (!coords)\n        return inside;\n    let editorRect = view.dom.getBoundingClientRect();\n    let y = (coords.top + coords.bottom) / 2;\n    let left = view.posAtCoords({ x: editorRect.left + 1, y });\n    let right = view.posAtCoords({ x: editorRect.right - 1, y });\n    if (left == null || right == null)\n        return inside;\n    return { from: Math.max(inside.from, Math.min(left, right)), to: Math.min(inside.to, Math.max(left, right)) };\n}\nfunction rectanglesForRange(view, className, range) {\n    if (range.to <= view.viewport.from || range.from >= view.viewport.to)\n        return [];\n    let from = Math.max(range.from, view.viewport.from), to = Math.min(range.to, view.viewport.to);\n    let ltr = view.textDirection == Direction.LTR;\n    let content = view.contentDOM, contentRect = content.getBoundingClientRect(), base = getBase(view);\n    let lineElt = content.querySelector(\".cm-line\"), lineStyle = lineElt && window.getComputedStyle(lineElt);\n    let leftSide = contentRect.left +\n        (lineStyle ? parseInt(lineStyle.paddingLeft) + Math.min(0, parseInt(lineStyle.textIndent)) : 0);\n    let rightSide = contentRect.right - (lineStyle ? parseInt(lineStyle.paddingRight) : 0);\n    let startBlock = blockAt(view, from, 1), endBlock = blockAt(view, to, -1);\n    let visualStart = startBlock.type == BlockType.Text ? startBlock : null;\n    let visualEnd = endBlock.type == BlockType.Text ? endBlock : null;\n    if (visualStart && (view.lineWrapping || startBlock.widgetLineBreaks))\n        visualStart = wrappedLine(view, from, 1, visualStart);\n    if (visualEnd && (view.lineWrapping || endBlock.widgetLineBreaks))\n        visualEnd = wrappedLine(view, to, -1, visualEnd);\n    if (visualStart && visualEnd && visualStart.from == visualEnd.from && visualStart.to == visualEnd.to) {\n        return pieces(drawForLine(range.from, range.to, visualStart));\n    }\n    else {\n        let top = visualStart ? drawForLine(range.from, null, visualStart) : drawForWidget(startBlock, false);\n        let bottom = visualEnd ? drawForLine(null, range.to, visualEnd) : drawForWidget(endBlock, true);\n        let between = [];\n        if ((visualStart || startBlock).to < (visualEnd || endBlock).from - (visualStart && visualEnd ? 1 : 0) ||\n            startBlock.widgetLineBreaks > 1 && top.bottom + view.defaultLineHeight / 2 < bottom.top)\n            between.push(piece(leftSide, top.bottom, rightSide, bottom.top));\n        else if (top.bottom < bottom.top && view.elementAtHeight((top.bottom + bottom.top) / 2).type == BlockType.Text)\n            top.bottom = bottom.top = (top.bottom + bottom.top) / 2;\n        return pieces(top).concat(between).concat(pieces(bottom));\n    }\n    function piece(left, top, right, bottom) {\n        return new RectangleMarker(className, left - base.left, top - base.top, Math.max(0, right - left), bottom - top);\n    }\n    function pieces({ top, bottom, horizontal }) {\n        let pieces = [];\n        for (let i = 0; i < horizontal.length; i += 2)\n            pieces.push(piece(horizontal[i], top, horizontal[i + 1], bottom));\n        return pieces;\n    }\n    // Gets passed from/to in line-local positions\n    function drawForLine(from, to, line) {\n        let top = 1e9, bottom = -1e9, horizontal = [];\n        function addSpan(from, fromOpen, to, toOpen, dir) {\n            // Passing 2/-2 is a kludge to force the view to return\n            // coordinates on the proper side of block widgets, since\n            // normalizing the side there, though appropriate for most\n            // coordsAtPos queries, would break selection drawing.\n            let fromCoords = view.coordsAtPos(from, (from == line.to ? -2 : 2));\n            let toCoords = view.coordsAtPos(to, (to == line.from ? 2 : -2));\n            if (!fromCoords || !toCoords)\n                return;\n            top = Math.min(fromCoords.top, toCoords.top, top);\n            bottom = Math.max(fromCoords.bottom, toCoords.bottom, bottom);\n            if (dir == Direction.LTR)\n                horizontal.push(ltr && fromOpen ? leftSide : fromCoords.left, ltr && toOpen ? rightSide : toCoords.right);\n            else\n                horizontal.push(!ltr && toOpen ? leftSide : toCoords.left, !ltr && fromOpen ? rightSide : fromCoords.right);\n        }\n        let start = from !== null && from !== void 0 ? from : line.from, end = to !== null && to !== void 0 ? to : line.to;\n        // Split the range by visible range and document line\n        for (let r of view.visibleRanges)\n            if (r.to > start && r.from < end) {\n                for (let pos = Math.max(r.from, start), endPos = Math.min(r.to, end);;) {\n                    let docLine = view.state.doc.lineAt(pos);\n                    for (let span of view.bidiSpans(docLine)) {\n                        let spanFrom = span.from + docLine.from, spanTo = span.to + docLine.from;\n                        if (spanFrom >= endPos)\n                            break;\n                        if (spanTo > pos)\n                            addSpan(Math.max(spanFrom, pos), from == null && spanFrom <= start, Math.min(spanTo, endPos), to == null && spanTo >= end, span.dir);\n                    }\n                    pos = docLine.to + 1;\n                    if (pos >= endPos)\n                        break;\n                }\n            }\n        if (horizontal.length == 0)\n            addSpan(start, from == null, end, to == null, view.textDirection);\n        return { top, bottom, horizontal };\n    }\n    function drawForWidget(block, top) {\n        let y = contentRect.top + (top ? block.top : block.bottom);\n        return { top: y, bottom: y, horizontal: [] };\n    }\n}\nfunction sameMarker(a, b) {\n    return a.constructor == b.constructor && a.eq(b);\n}\nclass LayerView {\n    constructor(view, layer) {\n        this.view = view;\n        this.layer = layer;\n        this.drawn = [];\n        this.scaleX = 1;\n        this.scaleY = 1;\n        this.measureReq = { read: this.measure.bind(this), write: this.draw.bind(this) };\n        this.dom = view.scrollDOM.appendChild(document.createElement(\"div\"));\n        this.dom.classList.add(\"cm-layer\");\n        if (layer.above)\n            this.dom.classList.add(\"cm-layer-above\");\n        if (layer.class)\n            this.dom.classList.add(layer.class);\n        this.scale();\n        this.dom.setAttribute(\"aria-hidden\", \"true\");\n        this.setOrder(view.state);\n        view.requestMeasure(this.measureReq);\n        if (layer.mount)\n            layer.mount(this.dom, view);\n    }\n    update(update) {\n        if (update.startState.facet(layerOrder) != update.state.facet(layerOrder))\n            this.setOrder(update.state);\n        if (this.layer.update(update, this.dom) || update.geometryChanged) {\n            this.scale();\n            update.view.requestMeasure(this.measureReq);\n        }\n    }\n    docViewUpdate(view) {\n        if (this.layer.updateOnDocViewUpdate !== false)\n            view.requestMeasure(this.measureReq);\n    }\n    setOrder(state) {\n        let pos = 0, order = state.facet(layerOrder);\n        while (pos < order.length && order[pos] != this.layer)\n            pos++;\n        this.dom.style.zIndex = String((this.layer.above ? 150 : -1) - pos);\n    }\n    measure() {\n        return this.layer.markers(this.view);\n    }\n    scale() {\n        let { scaleX, scaleY } = this.view;\n        if (scaleX != this.scaleX || scaleY != this.scaleY) {\n            this.scaleX = scaleX;\n            this.scaleY = scaleY;\n            this.dom.style.transform = `scale(${1 / scaleX}, ${1 / scaleY})`;\n        }\n    }\n    draw(markers) {\n        if (markers.length != this.drawn.length || markers.some((p, i) => !sameMarker(p, this.drawn[i]))) {\n            let old = this.dom.firstChild, oldI = 0;\n            for (let marker of markers) {\n                if (marker.update && old && marker.constructor && this.drawn[oldI].constructor &&\n                    marker.update(old, this.drawn[oldI])) {\n                    old = old.nextSibling;\n                    oldI++;\n                }\n                else {\n                    this.dom.insertBefore(marker.draw(), old);\n                }\n            }\n            while (old) {\n                let next = old.nextSibling;\n                old.remove();\n                old = next;\n            }\n            this.drawn = markers;\n            if (browser.webkit) // Issue #1600, 1627, 1686\n                this.dom.style.display = this.dom.firstChild ? \"\" : \"none\";\n        }\n    }\n    destroy() {\n        if (this.layer.destroy)\n            this.layer.destroy(this.dom, this.view);\n        this.dom.remove();\n    }\n}\nconst layerOrder = /*@__PURE__*/Facet.define();\n/**\nDefine a layer.\n*/\nfunction layer(config) {\n    return [\n        ViewPlugin.define(v => new LayerView(v, config)),\n        layerOrder.of(config)\n    ];\n}\n\nconst selectionConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            cursorBlinkRate: 1200,\n            drawRangeCursor: true,\n            iosSelectionHandles: true\n        }, {\n            cursorBlinkRate: (a, b) => Math.min(a, b),\n            drawRangeCursor: (a, b) => a || b\n        });\n    }\n});\n/**\nReturns an extension that hides the browser's native selection and\ncursor, replacing the selection with a background behind the text\n(with the `cm-selectionBackground` class), and the\ncursors with elements overlaid over the code (using\n`cm-cursor-primary` and `cm-cursor-secondary`).\n\nThis allows the editor to display secondary selection ranges, and\ntends to produce a type of selection more in line with that users\nexpect in a text editor (the native selection styling will often\nleave gaps between lines and won't fill the horizontal space after\na line when the selection continues past it).\n\nIt does have a performance cost, in that it requires an extra DOM\nlayout cycle for many updates (the selection is drawn based on DOM\nlayout information that's only available after laying out the\ncontent).\n*/\nfunction drawSelection(config = {}) {\n    return [\n        selectionConfig.of(config),\n        cursorLayer,\n        selectionLayer,\n        hideNativeSelection,\n        nativeSelectionHidden.of(true)\n    ];\n}\n/**\nRetrieve the [`drawSelection`](https://codemirror.net/6/docs/ref/#view.drawSelection) configuration\nfor this state. (Note that this will return a set of defaults even\nif `drawSelection` isn't enabled.)\n*/\nfunction getDrawSelectionConfig(state) {\n    return state.facet(selectionConfig);\n}\nfunction configChanged(update) {\n    return update.startState.facet(selectionConfig) != update.state.facet(selectionConfig);\n}\nconst cursorLayer = /*@__PURE__*/layer({\n    above: true,\n    markers(view) {\n        let { state } = view, conf = state.facet(selectionConfig);\n        let cursors = [];\n        for (let r of state.selection.ranges) {\n            let prim = r == state.selection.main;\n            if (r.empty || conf.drawRangeCursor && !(prim && browser.ios && conf.iosSelectionHandles)) {\n                let className = prim ? \"cm-cursor cm-cursor-primary\" : \"cm-cursor cm-cursor-secondary\";\n                let cursor = r.empty ? r : EditorSelection.cursor(r.head, r.assoc);\n                for (let piece of RectangleMarker.forRange(view, className, cursor))\n                    cursors.push(piece);\n            }\n        }\n        return cursors;\n    },\n    update(update, dom) {\n        if (update.transactions.some(tr => tr.selection))\n            dom.style.animationName = dom.style.animationName == \"cm-blink\" ? \"cm-blink2\" : \"cm-blink\";\n        let confChange = configChanged(update);\n        if (confChange)\n            setBlinkRate(update.state, dom);\n        return update.docChanged || update.selectionSet || confChange;\n    },\n    mount(dom, view) {\n        setBlinkRate(view.state, dom);\n    },\n    class: \"cm-cursorLayer\"\n});\nfunction setBlinkRate(state, dom) {\n    dom.style.animationDuration = state.facet(selectionConfig).cursorBlinkRate + \"ms\";\n}\nconst selectionLayer = /*@__PURE__*/layer({\n    above: false,\n    markers(view) {\n        let markers = [], { main, ranges } = view.state.selection;\n        for (let r of ranges)\n            if (!r.empty) {\n                for (let marker of RectangleMarker.forRange(view, \"cm-selectionBackground\", r))\n                    markers.push(marker);\n            }\n        if (browser.ios && !main.empty && view.state.facet(selectionConfig).iosSelectionHandles) {\n            for (let piece of RectangleMarker.forRange(view, \"cm-selectionHandle cm-selectionHandle-start\", EditorSelection.cursor(main.from, 1)))\n                markers.push(piece);\n            for (let piece of RectangleMarker.forRange(view, \"cm-selectionHandle cm-selectionHandle-end\", EditorSelection.cursor(main.to, 1)))\n                markers.push(piece);\n        }\n        return markers;\n    },\n    update(update, dom) {\n        return update.docChanged || update.selectionSet || update.viewportChanged || configChanged(update);\n    },\n    class: \"cm-selectionLayer\"\n});\n// https://discuss.codemirror.net/t/firefox-153-ignores-transparent-selection-styling/9838\nconst selectionBg = browser.gecko && browser.gecko_version == 153 ? \"#ffffff01\" : \"transparent\";\nconst hideNativeSelection = /*@__PURE__*/Prec.highest(/*@__PURE__*/EditorView.theme({\n    \".cm-line\": {\n        \"& ::selection, &::selection\": { backgroundColor: `${selectionBg} !important` },\n        caretColor: \"transparent !important\"\n    },\n    \".cm-content\": {\n        caretColor: \"transparent !important\",\n        \"& :focus\": {\n            caretColor: \"initial !important\",\n            \"&::selection, & ::selection\": {\n                backgroundColor: \"Highlight !important\"\n            }\n        }\n    }\n}));\n\nconst setDropCursorPos = /*@__PURE__*/StateEffect.define({\n    map(pos, mapping) { return pos == null ? null : mapping.mapPos(pos); }\n});\nconst dropCursorPos = /*@__PURE__*/StateField.define({\n    create() { return null; },\n    update(pos, tr) {\n        if (pos != null)\n            pos = tr.changes.mapPos(pos);\n        return tr.effects.reduce((pos, e) => e.is(setDropCursorPos) ? e.value : pos, pos);\n    }\n});\nconst drawDropCursor = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.cursor = null;\n        this.measureReq = { read: this.readPos.bind(this), write: this.drawCursor.bind(this) };\n    }\n    update(update) {\n        var _a;\n        let cursorPos = update.state.field(dropCursorPos);\n        if (cursorPos == null) {\n            if (this.cursor != null) {\n                (_a = this.cursor) === null || _a === void 0 ? void 0 : _a.remove();\n                this.cursor = null;\n            }\n        }\n        else {\n            if (!this.cursor) {\n                this.cursor = this.view.scrollDOM.appendChild(document.createElement(\"div\"));\n                this.cursor.className = \"cm-dropCursor\";\n            }\n            if (update.startState.field(dropCursorPos) != cursorPos || update.docChanged || update.geometryChanged)\n                this.view.requestMeasure(this.measureReq);\n        }\n    }\n    readPos() {\n        let { view } = this;\n        let pos = view.state.field(dropCursorPos);\n        let rect = pos != null && view.coordsAtPos(pos);\n        if (!rect)\n            return null;\n        let outer = view.scrollDOM.getBoundingClientRect();\n        return {\n            left: rect.left - outer.left + view.scrollDOM.scrollLeft * view.scaleX,\n            top: rect.top - outer.top + view.scrollDOM.scrollTop * view.scaleY,\n            height: rect.bottom - rect.top\n        };\n    }\n    drawCursor(pos) {\n        if (this.cursor) {\n            let { scaleX, scaleY } = this.view;\n            if (pos) {\n                this.cursor.style.left = pos.left / scaleX + \"px\";\n                this.cursor.style.top = pos.top / scaleY + \"px\";\n                this.cursor.style.height = pos.height / scaleY + \"px\";\n            }\n            else {\n                this.cursor.style.left = \"-100000px\";\n            }\n        }\n    }\n    destroy() {\n        if (this.cursor)\n            this.cursor.remove();\n    }\n    setDropPos(pos) {\n        if (this.view.state.field(dropCursorPos) != pos)\n            this.view.dispatch({ effects: setDropCursorPos.of(pos) });\n    }\n}, {\n    eventObservers: {\n        dragover(event) {\n            this.setDropPos(this.view.posAtCoords({ x: event.clientX, y: event.clientY }));\n        },\n        dragleave(event) {\n            if (event.target == this.view.contentDOM || !this.view.contentDOM.contains(event.relatedTarget))\n                this.setDropPos(null);\n        },\n        dragend() {\n            this.setDropPos(null);\n        },\n        drop() {\n            this.setDropPos(null);\n        }\n    }\n});\n/**\nDraws a cursor at the current drop position when something is\ndragged over the editor.\n*/\nfunction dropCursor() {\n    return [dropCursorPos, drawDropCursor];\n}\n\nfunction iterMatches(doc, re, from, to, f) {\n    re.lastIndex = 0;\n    for (let cursor = doc.iterRange(from, to), pos = from, m; !cursor.next().done; pos += cursor.value.length) {\n        if (!cursor.lineBreak)\n            while (m = re.exec(cursor.value))\n                f(pos + m.index, m);\n    }\n}\nfunction matchRanges(view, maxLength) {\n    let visible = view.visibleRanges;\n    if (visible.length == 1 && visible[0].from == view.viewport.from &&\n        visible[0].to == view.viewport.to)\n        return visible;\n    let result = [];\n    for (let { from, to } of visible) {\n        from = Math.max(view.state.doc.lineAt(from).from, from - maxLength);\n        to = Math.min(view.state.doc.lineAt(to).to, to + maxLength);\n        if (result.length && result[result.length - 1].to >= from)\n            result[result.length - 1].to = to;\n        else\n            result.push({ from, to });\n    }\n    return result;\n}\n/**\nHelper class used to make it easier to maintain decorations on\nvisible code that matches a given regular expression. To be used\nin a [view plugin](https://codemirror.net/6/docs/ref/#view.ViewPlugin). Instances of this object\nrepresent a matching configuration.\n*/\nclass MatchDecorator {\n    /**\n    Create a decorator.\n    */\n    constructor(config) {\n        const { regexp, decoration, decorate, boundary, maxLength = 1000 } = config;\n        if (!regexp.global)\n            throw new RangeError(\"The regular expression given to MatchDecorator should have its 'g' flag set\");\n        this.regexp = regexp;\n        if (decorate) {\n            this.addMatch = (match, view, from, add) => decorate(add, from, from + match[0].length, match, view);\n        }\n        else if (typeof decoration == \"function\") {\n            this.addMatch = (match, view, from, add) => {\n                let deco = decoration(match, view, from);\n                if (deco)\n                    add(from, from + match[0].length, deco);\n            };\n        }\n        else if (decoration) {\n            this.addMatch = (match, _view, from, add) => add(from, from + match[0].length, decoration);\n        }\n        else {\n            throw new RangeError(\"Either 'decorate' or 'decoration' should be provided to MatchDecorator\");\n        }\n        this.boundary = boundary;\n        this.maxLength = maxLength;\n    }\n    /**\n    Compute the full set of decorations for matches in the given\n    view's viewport. You'll want to call this when initializing your\n    plugin.\n    */\n    createDeco(view) {\n        let build = new RangeSetBuilder(), add = build.add.bind(build);\n        for (let { from, to } of matchRanges(view, this.maxLength))\n            iterMatches(view.state.doc, this.regexp, from, to, (from, m) => this.addMatch(m, view, from, add));\n        return build.finish();\n    }\n    /**\n    Update a set of decorations for a view update. `deco` _must_ be\n    the set of decorations produced by _this_ `MatchDecorator` for\n    the view state before the update.\n    */\n    updateDeco(update, deco) {\n        let changeFrom = 1e9, changeTo = -1;\n        if (update.docChanged)\n            update.changes.iterChanges((_f, _t, from, to) => {\n                if (to >= update.view.viewport.from && from <= update.view.viewport.to) {\n                    changeFrom = Math.min(from, changeFrom);\n                    changeTo = Math.max(to, changeTo);\n                }\n            });\n        if (update.viewportMoved || changeTo - changeFrom > 1000)\n            return this.createDeco(update.view);\n        if (changeTo > -1)\n            return this.updateRange(update.view, deco.map(update.changes), changeFrom, changeTo);\n        return deco;\n    }\n    updateRange(view, deco, updateFrom, updateTo) {\n        for (let r of view.visibleRanges) {\n            let from = Math.max(r.from, updateFrom), to = Math.min(r.to, updateTo);\n            if (to >= from) {\n                let fromLine = view.state.doc.lineAt(from), toLine = fromLine.to < to ? view.state.doc.lineAt(to) : fromLine;\n                let start = Math.max(r.from, fromLine.from), end = Math.min(r.to, toLine.to);\n                if (this.boundary) {\n                    for (; from > fromLine.from; from--)\n                        if (this.boundary.test(fromLine.text[from - 1 - fromLine.from])) {\n                            start = from;\n                            break;\n                        }\n                    for (; to < toLine.to; to++)\n                        if (this.boundary.test(toLine.text[to - toLine.from])) {\n                            end = to;\n                            break;\n                        }\n                }\n                let ranges = [], m;\n                let add = (from, to, deco) => ranges.push(deco.range(from, to));\n                if (fromLine == toLine) {\n                    this.regexp.lastIndex = start - fromLine.from;\n                    while ((m = this.regexp.exec(fromLine.text)) && m.index < end - fromLine.from)\n                        this.addMatch(m, view, m.index + fromLine.from, add);\n                }\n                else {\n                    iterMatches(view.state.doc, this.regexp, start, end, (from, m) => this.addMatch(m, view, from, add));\n                }\n                deco = deco.update({ filterFrom: start, filterTo: end, filter: (from, to) => from < start || to > end, add: ranges });\n            }\n        }\n        return deco;\n    }\n}\n\nconst UnicodeRegexpSupport = /x/.unicode != null ? \"gu\" : \"g\";\nconst Specials = /*@__PURE__*/new RegExp(\"[\\u0000-\\u0008\\u000a-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b\\u200e\\u200f\\u2028\\u2029\\u202d\\u202e\\u2066\\u2067\\u2069\\ufeff\\ufff9-\\ufffc]\", UnicodeRegexpSupport);\nconst Names = {\n    0: \"null\",\n    7: \"bell\",\n    8: \"backspace\",\n    10: \"newline\",\n    11: \"vertical tab\",\n    13: \"carriage return\",\n    27: \"escape\",\n    8203: \"zero width space\",\n    8204: \"zero width non-joiner\",\n    8205: \"zero width joiner\",\n    8206: \"left-to-right mark\",\n    8207: \"right-to-left mark\",\n    8232: \"line separator\",\n    8237: \"left-to-right override\",\n    8238: \"right-to-left override\",\n    8294: \"left-to-right isolate\",\n    8295: \"right-to-left isolate\",\n    8297: \"pop directional isolate\",\n    8233: \"paragraph separator\",\n    65279: \"zero width no-break space\",\n    65532: \"object replacement\"\n};\nlet _supportsTabSize = null;\nfunction supportsTabSize() {\n    var _a;\n    if (_supportsTabSize == null && typeof document != \"undefined\" && document.body) {\n        let styles = document.body.style;\n        _supportsTabSize = ((_a = styles.tabSize) !== null && _a !== void 0 ? _a : styles.MozTabSize) != null;\n    }\n    return _supportsTabSize || false;\n}\nconst specialCharConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        let config = combineConfig(configs, {\n            render: null,\n            specialChars: Specials,\n            addSpecialChars: null\n        });\n        if (config.replaceTabs = !supportsTabSize())\n            config.specialChars = new RegExp(\"\\t|\" + config.specialChars.source, UnicodeRegexpSupport);\n        if (config.addSpecialChars)\n            config.specialChars = new RegExp(config.specialChars.source + \"|\" + config.addSpecialChars.source, UnicodeRegexpSupport);\n        return config;\n    }\n});\n/**\nReturns an extension that installs highlighting of special\ncharacters.\n*/\nfunction highlightSpecialChars(\n/**\nConfiguration options.\n*/\nconfig = {}) {\n    return [specialCharConfig.of(config), specialCharPlugin()];\n}\nlet _plugin = null;\nfunction specialCharPlugin() {\n    return _plugin || (_plugin = ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.view = view;\n            this.decorations = Decoration.none;\n            this.decorationCache = Object.create(null);\n            this.decorator = this.makeDecorator(view.state.facet(specialCharConfig));\n            this.decorations = this.decorator.createDeco(view);\n        }\n        makeDecorator(conf) {\n            return new MatchDecorator({\n                regexp: conf.specialChars,\n                decoration: (m, view, pos) => {\n                    let { doc } = view.state;\n                    let code = codePointAt(m[0], 0);\n                    if (code == 9) {\n                        let line = doc.lineAt(pos);\n                        let size = view.state.tabSize, col = countColumn(line.text, size, pos - line.from);\n                        return Decoration.replace({\n                            widget: new TabWidget((size - (col % size)) * this.view.defaultCharacterWidth / this.view.scaleX)\n                        });\n                    }\n                    return this.decorationCache[code] ||\n                        (this.decorationCache[code] = Decoration.replace({ widget: new SpecialCharWidget(conf, code) }));\n                },\n                boundary: conf.replaceTabs ? undefined : /[^]/\n            });\n        }\n        update(update) {\n            let conf = update.state.facet(specialCharConfig);\n            if (update.startState.facet(specialCharConfig) != conf) {\n                this.decorator = this.makeDecorator(conf);\n                this.decorations = this.decorator.createDeco(update.view);\n            }\n            else {\n                this.decorations = this.decorator.updateDeco(update, this.decorations);\n            }\n        }\n    }, {\n        decorations: v => v.decorations\n    }));\n}\nconst DefaultPlaceholder = \"\\u2022\";\n// Assigns placeholder characters from the Control Pictures block to\n// ASCII control characters\nfunction placeholder$1(code) {\n    if (code >= 32)\n        return DefaultPlaceholder;\n    if (code == 10)\n        return \"\\u2424\";\n    return String.fromCharCode(9216 + code);\n}\nclass SpecialCharWidget extends WidgetType {\n    constructor(options, code) {\n        super();\n        this.options = options;\n        this.code = code;\n    }\n    eq(other) { return other.code == this.code; }\n    toDOM(view) {\n        let ph = placeholder$1(this.code);\n        let desc = view.state.phrase(\"Control character\") + \" \" + (Names[this.code] || \"0x\" + this.code.toString(16));\n        let custom = this.options.render && this.options.render(this.code, desc, ph);\n        if (custom)\n            return custom;\n        let span = document.createElement(\"span\");\n        span.textContent = ph;\n        span.title = desc;\n        span.setAttribute(\"aria-label\", desc);\n        span.className = \"cm-specialChar\";\n        return span;\n    }\n    ignoreEvent() { return false; }\n}\nclass TabWidget extends WidgetType {\n    constructor(width) {\n        super();\n        this.width = width;\n    }\n    eq(other) { return other.width == this.width; }\n    toDOM() {\n        let span = document.createElement(\"span\");\n        span.textContent = \"\\t\";\n        span.className = \"cm-tab\";\n        span.style.width = this.width + \"px\";\n        return span;\n    }\n    ignoreEvent() { return false; }\n}\n\nconst plugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor() {\n        this.height = 1000;\n        this.attrs = { style: \"padding-bottom: 1000px\" };\n    }\n    update(update) {\n        let { view } = update;\n        let height = view.viewState.editorHeight -\n            view.defaultLineHeight - view.documentPadding.top - 0.5;\n        if (height >= 0 && height != this.height) {\n            this.height = height;\n            this.attrs = { style: `padding-bottom: ${height}px` };\n        }\n    }\n});\n/**\nReturns an extension that makes sure the content has a bottom\nmargin equivalent to the height of the editor, minus one line\nheight, so that every line in the document can be scrolled to the\ntop of the editor.\n\nThis is only meaningful when the editor is scrollable, and should\nnot be enabled in editors that take the size of their content.\n*/\nfunction scrollPastEnd() {\n    return [plugin, contentAttributes.of(view => { var _a; return ((_a = view.plugin(plugin)) === null || _a === void 0 ? void 0 : _a.attrs) || null; })];\n}\n\n/**\nMark lines that have a cursor on them with the `\"cm-activeLine\"`\nDOM class.\n*/\nfunction highlightActiveLine() {\n    return activeLineHighlighter;\n}\nconst lineDeco = /*@__PURE__*/Decoration.line({ class: \"cm-activeLine\" });\nconst activeLineHighlighter = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.decorations = this.getDeco(view);\n    }\n    update(update) {\n        if (update.docChanged || update.selectionSet)\n            this.decorations = this.getDeco(update.view);\n    }\n    getDeco(view) {\n        let lastLineStart = -1, deco = [];\n        for (let r of view.state.selection.ranges) {\n            let line = view.lineBlockAt(r.head);\n            if (line.from > lastLineStart) {\n                deco.push(lineDeco.range(line.from));\n                lastLineStart = line.from;\n            }\n        }\n        return Decoration.set(deco);\n    }\n}, {\n    decorations: v => v.decorations\n});\n\nclass Placeholder extends WidgetType {\n    constructor(content) {\n        super();\n        this.content = content;\n    }\n    toDOM(view) {\n        let wrap = document.createElement(\"span\");\n        wrap.className = \"cm-placeholder\";\n        wrap.style.pointerEvents = \"none\";\n        wrap.appendChild(typeof this.content == \"string\" ? document.createTextNode(this.content) :\n            typeof this.content == \"function\" ? this.content(view) :\n                this.content.cloneNode(true));\n        wrap.setAttribute(\"aria-hidden\", \"true\");\n        return wrap;\n    }\n    coordsAt(dom) {\n        let rects = dom.firstChild ? clientRectsFor(dom.firstChild) : [];\n        if (!rects.length)\n            return null;\n        let style = window.getComputedStyle(dom.parentNode);\n        let rect = flattenRect(rects[0], style.direction != \"rtl\");\n        let lineHeight = parseInt(style.lineHeight);\n        if (rect.bottom - rect.top > lineHeight * 1.5)\n            return { left: rect.left, right: rect.right, top: rect.top, bottom: rect.top + lineHeight };\n        return rect;\n    }\n    ignoreEvent() { return false; }\n}\n/**\nExtension that enables a placeholder—a piece of example content\nto show when the editor is empty.\n*/\nfunction placeholder(content) {\n    let plugin = ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.view = view;\n            this.placeholder = content\n                ? Decoration.set([Decoration.widget({ widget: new Placeholder(content), side: 1 }).range(0)])\n                : Decoration.none;\n        }\n        get decorations() { return this.view.state.doc.length ? Decoration.none : this.placeholder; }\n    }, { decorations: v => v.decorations });\n    return typeof content == \"string\" ? [\n        plugin, EditorView.contentAttributes.of({ \"aria-placeholder\": content })\n    ] : plugin;\n}\n\n// Don't compute precise column positions for line offsets above this\n// (since it could get expensive). Assume offset==column for them.\nconst MaxOff = 2000;\nfunction rectangleFor(state, a, b) {\n    let startLine = Math.min(a.line, b.line), endLine = Math.max(a.line, b.line);\n    let ranges = [];\n    if (a.off > MaxOff || b.off > MaxOff || a.col < 0 || b.col < 0) {\n        let startOff = Math.min(a.off, b.off), endOff = Math.max(a.off, b.off);\n        for (let i = startLine; i <= endLine; i++) {\n            let line = state.doc.line(i);\n            if (line.length <= endOff)\n                ranges.push(EditorSelection.range(line.from + startOff, line.to + endOff));\n        }\n    }\n    else {\n        let startCol = Math.min(a.col, b.col), endCol = Math.max(a.col, b.col);\n        for (let i = startLine; i <= endLine; i++) {\n            let line = state.doc.line(i);\n            let start = findColumn(line.text, startCol, state.tabSize, true);\n            if (start < 0) {\n                ranges.push(EditorSelection.cursor(line.to));\n            }\n            else {\n                let end = findColumn(line.text, endCol, state.tabSize);\n                ranges.push(EditorSelection.range(line.from + start, line.from + end));\n            }\n        }\n    }\n    return ranges;\n}\nfunction absoluteColumn(view, x) {\n    let ref = view.coordsAtPos(view.viewport.from);\n    return ref ? Math.round(Math.abs((ref.left - x) / view.defaultCharacterWidth)) : -1;\n}\nfunction getPos(view, event) {\n    let offset = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);\n    let line = view.state.doc.lineAt(offset), off = offset - line.from;\n    let col = off > MaxOff ? -1\n        : off == line.length ? absoluteColumn(view, event.clientX)\n            : countColumn(line.text, view.state.tabSize, offset - line.from);\n    return { line: line.number, col, off };\n}\nfunction rectangleSelectionStyle(view, event) {\n    let start = getPos(view, event), startSel = view.state.selection;\n    if (!start)\n        return null;\n    return {\n        update(update) {\n            if (update.docChanged) {\n                let newStart = update.changes.mapPos(update.startState.doc.line(start.line).from);\n                let newLine = update.state.doc.lineAt(newStart);\n                start = { line: newLine.number, col: start.col, off: Math.min(start.off, newLine.length) };\n                startSel = startSel.map(update.changes);\n            }\n        },\n        get(event, _extend, multiple) {\n            let cur = getPos(view, event);\n            if (!cur)\n                return startSel;\n            let ranges = rectangleFor(view.state, start, cur);\n            if (!ranges.length)\n                return startSel;\n            if (multiple)\n                return EditorSelection.create(ranges.concat(startSel.ranges));\n            else\n                return EditorSelection.create(ranges);\n        }\n    };\n}\n/**\nCreate an extension that enables rectangular selections. By\ndefault, it will react to left mouse drag with the Alt key held\ndown. When such a selection occurs, the text within the rectangle\nthat was dragged over will be selected, as one selection\n[range](https://codemirror.net/6/docs/ref/#state.SelectionRange) per line.\n*/\nfunction rectangularSelection(options) {\n    let filter = (options === null || options === void 0 ? void 0 : options.eventFilter) || (e => e.altKey && e.button == 0);\n    return EditorView.mouseSelectionStyle.of((view, event) => filter(event) ? rectangleSelectionStyle(view, event) : null);\n}\nconst keys = {\n    Alt: [18, e => !!e.altKey],\n    Control: [17, e => !!e.ctrlKey],\n    Shift: [16, e => !!e.shiftKey],\n    Meta: [91, e => !!e.metaKey]\n};\nconst showCrosshair = { style: \"cursor: crosshair\" };\n/**\nReturns an extension that turns the pointer cursor into a\ncrosshair when a given modifier key, defaulting to Alt, is held\ndown. Can serve as a visual hint that rectangular selection is\ngoing to happen when paired with\n[`rectangularSelection`](https://codemirror.net/6/docs/ref/#view.rectangularSelection).\n*/\nfunction crosshairCursor(options = {}) {\n    let [code, getter] = keys[options.key || \"Alt\"];\n    let plugin = ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.view = view;\n            this.isDown = false;\n        }\n        set(isDown) {\n            if (this.isDown != isDown) {\n                this.isDown = isDown;\n                this.view.update([]);\n            }\n        }\n    }, {\n        eventObservers: {\n            keydown(e) {\n                this.set(e.keyCode == code || getter(e));\n            },\n            keyup(e) {\n                if (e.keyCode == code || !getter(e))\n                    this.set(false);\n            },\n            mousemove(e) {\n                this.set(getter(e));\n            }\n        }\n    });\n    return [\n        plugin,\n        EditorView.contentAttributes.of(view => { var _a; return ((_a = view.plugin(plugin)) === null || _a === void 0 ? void 0 : _a.isDown) ? showCrosshair : null; })\n    ];\n}\n\nconst Outside = \"-10000px\";\nclass TooltipViewManager {\n    constructor(view, facet, createTooltipView, removeTooltipView) {\n        this.facet = facet;\n        this.createTooltipView = createTooltipView;\n        this.removeTooltipView = removeTooltipView;\n        this.input = view.state.facet(facet);\n        this.tooltips = this.input.filter(t => t);\n        let prev = null;\n        this.tooltipViews = this.tooltips.map(t => prev = createTooltipView(t, prev));\n    }\n    update(update, above) {\n        var _a;\n        let input = update.state.facet(this.facet);\n        let tooltips = input.filter(x => x);\n        if (input === this.input) {\n            for (let t of this.tooltipViews)\n                if (t.update)\n                    t.update(update);\n            return false;\n        }\n        let tooltipViews = [], newAbove = above ? [] : null;\n        for (let i = 0; i < tooltips.length; i++) {\n            let tip = tooltips[i], known = -1;\n            if (!tip)\n                continue;\n            for (let i = 0; i < this.tooltips.length; i++) {\n                let other = this.tooltips[i];\n                if (other && other.create == tip.create)\n                    known = i;\n            }\n            if (known < 0) {\n                tooltipViews[i] = this.createTooltipView(tip, i ? tooltipViews[i - 1] : null);\n                if (newAbove)\n                    newAbove[i] = !!tip.above;\n            }\n            else {\n                let tooltipView = tooltipViews[i] = this.tooltipViews[known];\n                if (newAbove)\n                    newAbove[i] = above[known];\n                if (tooltipView.update)\n                    tooltipView.update(update);\n            }\n        }\n        for (let t of this.tooltipViews)\n            if (tooltipViews.indexOf(t) < 0) {\n                this.removeTooltipView(t);\n                (_a = t.destroy) === null || _a === void 0 ? void 0 : _a.call(t);\n            }\n        if (above) {\n            newAbove.forEach((val, i) => above[i] = val);\n            above.length = newAbove.length;\n        }\n        this.input = input;\n        this.tooltips = tooltips;\n        this.tooltipViews = tooltipViews;\n        return true;\n    }\n}\n/**\nCreates an extension that configures tooltip behavior.\n*/\nfunction tooltips(config = {}) {\n    return tooltipConfig.of(config);\n}\nfunction windowSpace(view) {\n    let docElt = view.dom.ownerDocument.documentElement;\n    return { top: 0, left: 0, bottom: docElt.clientHeight, right: docElt.clientWidth };\n}\nconst tooltipConfig = /*@__PURE__*/Facet.define({\n    combine: values => {\n        var _a, _b, _c;\n        return ({\n            position: browser.ios ? \"absolute\" : ((_a = values.find(conf => conf.position)) === null || _a === void 0 ? void 0 : _a.position) || \"fixed\",\n            parent: ((_b = values.find(conf => conf.parent)) === null || _b === void 0 ? void 0 : _b.parent) || null,\n            tooltipSpace: ((_c = values.find(conf => conf.tooltipSpace)) === null || _c === void 0 ? void 0 : _c.tooltipSpace) || windowSpace,\n        });\n    }\n});\nconst knownHeight = /*@__PURE__*/new WeakMap();\nconst tooltipPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.above = [];\n        this.inView = true;\n        this.madeAbsolute = false;\n        this.lastTransaction = 0;\n        this.measureTimeout = -1;\n        let config = view.state.facet(tooltipConfig);\n        this.position = config.position;\n        this.parent = config.parent;\n        this.classes = view.themeClasses;\n        this.createContainer();\n        this.measureReq = { read: this.readMeasure.bind(this), write: this.writeMeasure.bind(this), key: this };\n        this.resizeObserver = typeof ResizeObserver == \"function\" ? new ResizeObserver(() => this.measureSoon()) : null;\n        this.manager = new TooltipViewManager(view, showTooltip, (t, p) => this.createTooltip(t, p), t => {\n            if (this.resizeObserver)\n                this.resizeObserver.unobserve(t.dom);\n            t.dom.remove();\n        });\n        this.above = this.manager.tooltips.map(t => !!t.above);\n        this.intersectionObserver = typeof IntersectionObserver == \"function\" ? new IntersectionObserver(entries => {\n            if (Date.now() > this.lastTransaction - 50 &&\n                entries.length > 0 && entries[entries.length - 1].intersectionRatio < 1)\n                this.measureSoon();\n        }, { threshold: [1] }) : null;\n        this.observeIntersection();\n        view.win.addEventListener(\"resize\", this.measureSoon = this.measureSoon.bind(this));\n        this.maybeMeasure();\n    }\n    createContainer() {\n        if (this.parent) {\n            this.container = document.createElement(\"div\");\n            this.container.style.position = \"relative\";\n            this.container.className = this.view.themeClasses;\n            this.parent.appendChild(this.container);\n        }\n        else {\n            this.container = this.view.dom;\n        }\n    }\n    observeIntersection() {\n        if (this.intersectionObserver) {\n            this.intersectionObserver.disconnect();\n            for (let tooltip of this.manager.tooltipViews)\n                this.intersectionObserver.observe(tooltip.dom);\n        }\n    }\n    measureSoon() {\n        if (this.measureTimeout < 0)\n            this.measureTimeout = setTimeout(() => {\n                this.measureTimeout = -1;\n                this.maybeMeasure();\n            }, 50);\n    }\n    update(update) {\n        if (update.transactions.length)\n            this.lastTransaction = Date.now();\n        let updated = this.manager.update(update, this.above);\n        if (updated)\n            this.observeIntersection();\n        let shouldMeasure = updated || update.geometryChanged;\n        let newConfig = update.state.facet(tooltipConfig);\n        if (newConfig.position != this.position && !this.madeAbsolute) {\n            this.position = newConfig.position;\n            for (let t of this.manager.tooltipViews)\n                t.dom.style.position = this.position;\n            shouldMeasure = true;\n        }\n        if (newConfig.parent != this.parent) {\n            if (this.parent)\n                this.container.remove();\n            this.parent = newConfig.parent;\n            this.createContainer();\n            for (let t of this.manager.tooltipViews)\n                this.container.appendChild(t.dom);\n            shouldMeasure = true;\n        }\n        else if (this.parent && this.view.themeClasses != this.classes) {\n            this.classes = this.container.className = this.view.themeClasses;\n        }\n        if (shouldMeasure)\n            this.maybeMeasure();\n    }\n    createTooltip(tooltip, prev) {\n        let tooltipView = tooltip.create(this.view);\n        let before = prev ? prev.dom : null;\n        tooltipView.dom.classList.add(\"cm-tooltip\");\n        if (tooltip.arrow && !tooltipView.dom.querySelector(\".cm-tooltip > .cm-tooltip-arrow\")) {\n            let arrow = document.createElement(\"div\");\n            arrow.className = \"cm-tooltip-arrow\";\n            tooltipView.dom.appendChild(arrow);\n        }\n        tooltipView.dom.style.position = this.position;\n        tooltipView.dom.style.top = Outside;\n        tooltipView.dom.style.left = \"0px\";\n        this.container.insertBefore(tooltipView.dom, before);\n        if (tooltipView.mount)\n            tooltipView.mount(this.view);\n        if (this.resizeObserver)\n            this.resizeObserver.observe(tooltipView.dom);\n        return tooltipView;\n    }\n    destroy() {\n        var _a, _b, _c;\n        this.view.win.removeEventListener(\"resize\", this.measureSoon);\n        for (let tooltipView of this.manager.tooltipViews) {\n            tooltipView.dom.remove();\n            (_a = tooltipView.destroy) === null || _a === void 0 ? void 0 : _a.call(tooltipView);\n        }\n        if (this.parent)\n            this.container.remove();\n        (_b = this.resizeObserver) === null || _b === void 0 ? void 0 : _b.disconnect();\n        (_c = this.intersectionObserver) === null || _c === void 0 ? void 0 : _c.disconnect();\n        clearTimeout(this.measureTimeout);\n    }\n    readMeasure() {\n        let scaleX = 1, scaleY = 1, makeAbsolute = false;\n        if (this.position == \"fixed\" && this.manager.tooltipViews.length) {\n            let { dom } = this.manager.tooltipViews[0];\n            if (browser.safari) {\n                // Safari always sets offsetParent to null, even if a fixed\n                // element is positioned relative to a transformed parent. So\n                // we use this kludge to try and detect this.\n                let rect = dom.getBoundingClientRect();\n                makeAbsolute = Math.abs(rect.top + 10000) > 1 || Math.abs(rect.left) > 1;\n            }\n            else {\n                // More conforming browsers will set offsetParent to the\n                // transformed element.\n                makeAbsolute = !!dom.offsetParent && dom.offsetParent != this.container.ownerDocument.body;\n            }\n        }\n        if (makeAbsolute || this.position == \"absolute\") {\n            if (this.parent) {\n                let rect = this.parent.getBoundingClientRect();\n                if (rect.width && rect.height) {\n                    scaleX = rect.width / this.parent.offsetWidth;\n                    scaleY = rect.height / this.parent.offsetHeight;\n                }\n            }\n            else {\n                ({ scaleX, scaleY } = this.view.viewState);\n            }\n        }\n        let visible = this.view.scrollDOM.getBoundingClientRect(), margins = getScrollMargins(this.view);\n        return {\n            visible: {\n                left: visible.left + margins.left, top: visible.top + margins.top,\n                right: visible.right - margins.right, bottom: visible.bottom - margins.bottom\n            },\n            parent: this.parent ? this.container.getBoundingClientRect() : this.view.dom.getBoundingClientRect(),\n            pos: this.manager.tooltips.map((t, i) => {\n                let tv = this.manager.tooltipViews[i];\n                return tv.getCoords ? tv.getCoords(t.pos) : this.view.coordsAtPos(t.pos);\n            }),\n            size: this.manager.tooltipViews.map(({ dom }) => dom.getBoundingClientRect()),\n            space: this.view.state.facet(tooltipConfig).tooltipSpace(this.view),\n            scaleX, scaleY, makeAbsolute\n        };\n    }\n    writeMeasure(measured) {\n        var _a;\n        if (measured.makeAbsolute) {\n            this.madeAbsolute = true;\n            this.position = \"absolute\";\n            for (let t of this.manager.tooltipViews)\n                t.dom.style.position = \"absolute\";\n        }\n        let { visible, space, scaleX, scaleY } = measured;\n        let others = [];\n        for (let i = 0; i < this.manager.tooltips.length; i++) {\n            let tooltip = this.manager.tooltips[i], tView = this.manager.tooltipViews[i], { dom } = tView;\n            let pos = measured.pos[i], size = measured.size[i];\n            // Hide tooltips that are outside of the editor.\n            if (!pos || tooltip.clip !== false && (pos.bottom <= Math.max(visible.top, space.top) ||\n                pos.top >= Math.min(visible.bottom, space.bottom) ||\n                pos.right < Math.max(visible.left, space.left) - .1 ||\n                pos.left > Math.min(visible.right, space.right) + .1)) {\n                dom.style.top = Outside;\n                continue;\n            }\n            let arrow = tooltip.arrow ? tView.dom.querySelector(\".cm-tooltip-arrow\") : null;\n            let arrowHeight = arrow ? 7 /* Arrow.Size */ : 0;\n            let width = size.right - size.left, height = (_a = knownHeight.get(tView)) !== null && _a !== void 0 ? _a : size.bottom - size.top;\n            let offset = tView.offset || noOffset, ltr = this.view.textDirection == Direction.LTR;\n            let left = size.width > space.right - space.left\n                ? (ltr ? space.left : space.right - size.width)\n                : ltr ? Math.max(space.left, Math.min(pos.left - (arrow ? 14 /* Arrow.Offset */ : 0) + offset.x, space.right - width))\n                    : Math.min(Math.max(space.left, pos.left - width + (arrow ? 14 /* Arrow.Offset */ : 0) - offset.x), space.right - width);\n            let above = this.above[i];\n            if (!tooltip.strictSide && (above\n                ? pos.top - height - arrowHeight - offset.y < space.top\n                : pos.bottom + height + arrowHeight + offset.y > space.bottom) &&\n                above == (space.bottom - pos.bottom > pos.top - space.top))\n                above = this.above[i] = !above;\n            let spaceVert = (above ? pos.top - space.top : space.bottom - pos.bottom) - arrowHeight;\n            if (spaceVert < height && tView.resize !== false) {\n                if (spaceVert < this.view.defaultLineHeight) {\n                    dom.style.top = Outside;\n                    continue;\n                }\n                knownHeight.set(tView, height);\n                dom.style.height = (height = spaceVert) / scaleY + \"px\";\n            }\n            else if (dom.style.height) {\n                dom.style.height = \"\";\n            }\n            let top = above ? pos.top - height - arrowHeight - offset.y : pos.bottom + arrowHeight + offset.y;\n            let right = left + width;\n            if (tView.overlap !== true)\n                for (let r of others)\n                    if (r.left < right && r.right > left && r.top < top + height && r.bottom > top)\n                        top = above ? r.top - height - 2 - arrowHeight : r.bottom + arrowHeight + 2;\n            if (this.position == \"absolute\") {\n                dom.style.top = (top - measured.parent.top) / scaleY + \"px\";\n                setLeftStyle(dom, (left - measured.parent.left) / scaleX);\n            }\n            else {\n                dom.style.top = top / scaleY + \"px\";\n                setLeftStyle(dom, left / scaleX);\n            }\n            if (arrow) {\n                let arrowLeft = pos.left + (ltr ? offset.x : -offset.x) - (left + 14 /* Arrow.Offset */ - 7 /* Arrow.Size */);\n                arrow.style.left = arrowLeft / scaleX + \"px\";\n            }\n            if (tView.overlap !== true)\n                others.push({ left, top, right, bottom: top + height });\n            dom.classList.toggle(\"cm-tooltip-above\", above);\n            dom.classList.toggle(\"cm-tooltip-below\", !above);\n            if (tView.positioned)\n                tView.positioned(measured.space);\n        }\n    }\n    maybeMeasure() {\n        if (this.manager.tooltips.length) {\n            if (this.view.inView)\n                this.view.requestMeasure(this.measureReq);\n            if (this.inView != this.view.inView) {\n                this.inView = this.view.inView;\n                if (!this.inView)\n                    for (let tv of this.manager.tooltipViews)\n                        tv.dom.style.top = Outside;\n            }\n        }\n    }\n}, {\n    eventObservers: {\n        scroll() { this.maybeMeasure(); }\n    }\n});\nfunction setLeftStyle(elt, value) {\n    let current = parseInt(elt.style.left, 10);\n    if (isNaN(current) || Math.abs(value - current) > 1)\n        elt.style.left = value + \"px\";\n}\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-tooltip\": {\n        zIndex: 500,\n        boxSizing: \"border-box\"\n    },\n    \"&light .cm-tooltip\": {\n        border: \"1px solid #bbb\",\n        backgroundColor: \"#f5f5f5\"\n    },\n    \"&light .cm-tooltip-section:not(:first-child)\": {\n        borderTop: \"1px solid #bbb\",\n    },\n    \"&dark .cm-tooltip\": {\n        backgroundColor: \"#333338\",\n        color: \"white\"\n    },\n    \".cm-tooltip-arrow\": {\n        height: `${7 /* Arrow.Size */}px`,\n        width: `${7 /* Arrow.Size */ * 2}px`,\n        position: \"absolute\",\n        zIndex: -1,\n        overflow: \"hidden\",\n        \"&:before, &:after\": {\n            content: \"''\",\n            position: \"absolute\",\n            width: 0,\n            height: 0,\n            borderLeft: `${7 /* Arrow.Size */}px solid transparent`,\n            borderRight: `${7 /* Arrow.Size */}px solid transparent`,\n        },\n        \".cm-tooltip-above &\": {\n            bottom: `-${7 /* Arrow.Size */}px`,\n            \"&:before\": {\n                borderTop: `${7 /* Arrow.Size */}px solid #bbb`,\n            },\n            \"&:after\": {\n                borderTop: `${7 /* Arrow.Size */}px solid #f5f5f5`,\n                bottom: \"1px\"\n            }\n        },\n        \".cm-tooltip-below &\": {\n            top: `-${7 /* Arrow.Size */}px`,\n            \"&:before\": {\n                borderBottom: `${7 /* Arrow.Size */}px solid #bbb`,\n            },\n            \"&:after\": {\n                borderBottom: `${7 /* Arrow.Size */}px solid #f5f5f5`,\n                top: \"1px\"\n            }\n        },\n    },\n    \"&dark .cm-tooltip .cm-tooltip-arrow\": {\n        \"&:before\": {\n            borderTopColor: \"#333338\",\n            borderBottomColor: \"#333338\"\n        },\n        \"&:after\": {\n            borderTopColor: \"transparent\",\n            borderBottomColor: \"transparent\"\n        }\n    }\n});\nconst noOffset = { x: 0, y: 0 };\n/**\nFacet to which an extension can add a value to show a tooltip.\n*/\nconst showTooltip = /*@__PURE__*/Facet.define({\n    enables: [tooltipPlugin, baseTheme]\n});\nconst showHoverTooltip = /*@__PURE__*/Facet.define({\n    combine: inputs => inputs.reduce((a, i) => a.concat(i), [])\n});\nclass HoverTooltipHost {\n    // Needs to be static so that host tooltip instances always match\n    static create(view) {\n        return new HoverTooltipHost(view);\n    }\n    constructor(view) {\n        this.view = view;\n        this.mounted = false;\n        this.dom = document.createElement(\"div\");\n        this.dom.classList.add(\"cm-tooltip-hover\");\n        this.manager = new TooltipViewManager(view, showHoverTooltip, (t, p) => this.createHostedView(t, p), t => t.dom.remove());\n    }\n    createHostedView(tooltip, prev) {\n        let hostedView = tooltip.create(this.view);\n        hostedView.dom.classList.add(\"cm-tooltip-section\");\n        this.dom.insertBefore(hostedView.dom, prev ? prev.dom.nextSibling : this.dom.firstChild);\n        if (this.mounted && hostedView.mount)\n            hostedView.mount(this.view);\n        return hostedView;\n    }\n    mount(view) {\n        for (let hostedView of this.manager.tooltipViews) {\n            if (hostedView.mount)\n                hostedView.mount(view);\n        }\n        this.mounted = true;\n    }\n    positioned(space) {\n        for (let hostedView of this.manager.tooltipViews) {\n            if (hostedView.positioned)\n                hostedView.positioned(space);\n        }\n    }\n    update(update) {\n        this.manager.update(update);\n    }\n    destroy() {\n        var _a;\n        for (let t of this.manager.tooltipViews)\n            (_a = t.destroy) === null || _a === void 0 ? void 0 : _a.call(t);\n    }\n    passProp(name) {\n        let value = undefined;\n        for (let view of this.manager.tooltipViews) {\n            let given = view[name];\n            if (given !== undefined) {\n                if (value === undefined)\n                    value = given;\n                else if (value !== given)\n                    return undefined;\n            }\n        }\n        return value;\n    }\n    get offset() { return this.passProp(\"offset\"); }\n    get getCoords() { return this.passProp(\"getCoords\"); }\n    get overlap() { return this.passProp(\"overlap\"); }\n    get resize() { return this.passProp(\"resize\"); }\n}\nconst showHoverTooltipHost = /*@__PURE__*/showTooltip.compute([showHoverTooltip], state => {\n    let tooltips = state.facet(showHoverTooltip);\n    if (tooltips.length === 0)\n        return null;\n    return {\n        pos: Math.min(...tooltips.map(t => t.pos)),\n        end: Math.max(...tooltips.map(t => { var _a; return (_a = t.end) !== null && _a !== void 0 ? _a : t.pos; })),\n        create: HoverTooltipHost.create,\n        above: tooltips[0].above,\n        arrow: tooltips.some(t => t.arrow),\n    };\n});\nconst hoverPlugin = /*@__PURE__*/Facet.define();\nclass HoverPlugin {\n    constructor(view, source, field, locked, setHover, hoverTime) {\n        this.view = view;\n        this.source = source;\n        this.field = field;\n        this.locked = locked;\n        this.setHover = setHover;\n        this.hoverTime = hoverTime;\n        this.hoverTimeout = -1;\n        this.restartTimeout = -1;\n        this.pending = null;\n        this.lastMove = { x: 0, y: 0, target: view.dom, time: 0 };\n        this.checkHover = this.checkHover.bind(this);\n        view.dom.addEventListener(\"mouseleave\", this.mouseleave = this.mouseleave.bind(this));\n        view.dom.addEventListener(\"mousemove\", this.mousemove = this.mousemove.bind(this));\n    }\n    update(update) {\n        if (this.pending) {\n            this.pending = null;\n            clearTimeout(this.restartTimeout);\n            this.restartTimeout = setTimeout(() => this.startHover(), 20);\n        }\n    }\n    get active() {\n        return this.view.state.field(this.field);\n    }\n    checkHover() {\n        this.hoverTimeout = -1;\n        if (this.active.length)\n            return;\n        let hovered = Date.now() - this.lastMove.time;\n        if (hovered < this.hoverTime)\n            this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime - hovered);\n        else\n            this.startHover();\n    }\n    startHover() {\n        clearTimeout(this.restartTimeout);\n        let { view, lastMove } = this;\n        let tile = view.docView.tile.nearest(lastMove.target);\n        if (!tile)\n            return;\n        let pos, side = 1;\n        if (tile.isWidget()) {\n            pos = tile.posAtStart;\n        }\n        else {\n            pos = view.posAtCoords(lastMove);\n            if (pos == null)\n                return;\n            let posCoords = view.coordsAtPos(pos);\n            if (!posCoords ||\n                lastMove.y < posCoords.top || lastMove.y > posCoords.bottom ||\n                lastMove.x < posCoords.left - view.defaultCharacterWidth ||\n                lastMove.x > posCoords.right + view.defaultCharacterWidth)\n                return;\n            let bidi = view.bidiSpans(view.state.doc.lineAt(pos)).find(s => s.from <= pos && s.to >= pos);\n            let rtl = bidi && bidi.dir == Direction.RTL ? -1 : 1;\n            side = (lastMove.x < posCoords.left ? -rtl : rtl);\n        }\n        this.activateHover(view, pos, side);\n    }\n    activateHover(view, pos, side, locked) {\n        let open = this.source(view, pos, side);\n        let done = (value) => {\n            if (value && !(Array.isArray(value) && !value.length)) {\n                let tooltips = Array.isArray(value) ? value : [value];\n                if (locked)\n                    this.locked.set(tooltips, locked);\n                view.dispatch({ effects: this.setHover.of(tooltips) });\n            }\n        };\n        if (open && \"then\" in open) {\n            let pending = this.pending = { pos };\n            open.then(result => {\n                if (this.pending == pending) {\n                    this.pending = null;\n                    done(result);\n                }\n            }, e => logException(view.state, e, \"hover tooltip\"));\n        }\n        else {\n            done(open);\n        }\n    }\n    get tooltip() {\n        let plugin = this.view.plugin(tooltipPlugin);\n        let index = plugin ? plugin.manager.tooltips.findIndex(t => t.create == HoverTooltipHost.create) : -1;\n        return index > -1 ? plugin.manager.tooltipViews[index] : null;\n    }\n    mousemove(event) {\n        var _a, _b;\n        this.lastMove = { x: event.clientX, y: event.clientY, target: event.target, time: Date.now() };\n        if (this.hoverTimeout < 0)\n            this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime);\n        let { active, tooltip } = this;\n        if (active.length && !this.locked.has(active) && tooltip && !isInTooltip(tooltip.dom, event) || this.pending) {\n            let { pos } = active[0] || this.pending, end = (_b = (_a = active[0]) === null || _a === void 0 ? void 0 : _a.end) !== null && _b !== void 0 ? _b : pos;\n            if ((pos == end ? this.view.posAtCoords(this.lastMove) != pos\n                : !isOverRange(this.view, pos, end, event.clientX, event.clientY))) {\n                this.view.dispatch({ effects: this.setHover.of([]) });\n                this.pending = null;\n            }\n        }\n    }\n    mouseleave(event) {\n        clearTimeout(this.hoverTimeout);\n        this.hoverTimeout = -1;\n        let { active } = this;\n        if (active.length && !this.locked.has(active)) {\n            let { tooltip } = this;\n            let inTooltip = tooltip && tooltip.dom.contains(event.relatedTarget);\n            if (!inTooltip)\n                this.view.dispatch({ effects: this.setHover.of([]) });\n            else\n                this.watchTooltipLeave(tooltip.dom);\n        }\n    }\n    watchTooltipLeave(tooltip) {\n        let watch = (event) => {\n            tooltip.removeEventListener(\"mouseleave\", watch);\n            let { active } = this;\n            if (active.length && !this.locked.has(active) && !this.view.dom.contains(event.relatedTarget))\n                this.view.dispatch({ effects: this.setHover.of([]) });\n        };\n        tooltip.addEventListener(\"mouseleave\", watch);\n    }\n    destroy() {\n        clearTimeout(this.hoverTimeout);\n        clearTimeout(this.restartTimeout);\n        this.view.dom.removeEventListener(\"mouseleave\", this.mouseleave);\n        this.view.dom.removeEventListener(\"mousemove\", this.mousemove);\n    }\n}\nconst tooltipMargin = 4;\nfunction isInTooltip(tooltip, event) {\n    let { left, right, top, bottom } = tooltip.getBoundingClientRect(), arrow;\n    if (arrow = tooltip.querySelector(\".cm-tooltip-arrow\")) {\n        let arrowRect = arrow.getBoundingClientRect();\n        top = Math.min(arrowRect.top, top);\n        bottom = Math.max(arrowRect.bottom, bottom);\n    }\n    return event.clientX >= left - tooltipMargin && event.clientX <= right + tooltipMargin &&\n        event.clientY >= top - tooltipMargin && event.clientY <= bottom + tooltipMargin;\n}\nfunction isOverRange(view, from, to, x, y, margin) {\n    let rect = view.scrollDOM.getBoundingClientRect();\n    let docBottom = view.documentTop + view.documentPadding.top + view.contentHeight;\n    if (rect.left > x || rect.right < x || rect.top > y || Math.min(rect.bottom, docBottom) < y)\n        return false;\n    let pos = view.posAtCoords({ x, y }, false);\n    return pos >= from && pos <= to;\n}\n/**\nSet up a hover tooltip, which shows up when the pointer hovers\nover ranges of text. The callback is called when the mouse hovers\nover the document text. It should, if there is a tooltip\nassociated with position `pos`, return the tooltip description\n(either directly or in a promise). The `side` argument indicates\non which side of the position the pointer is—it will be -1 if the\npointer is before the position, 1 if after the position.\n\nNote that all hover tooltips are hosted within a single tooltip\ncontainer element. This allows multiple tooltips over the same\nrange to be \"merged\" together without overlapping.\n\nThe return value is a valid [editor extension](https://codemirror.net/6/docs/ref/#state.Extension)\nbut also provides an `active` property holding a state field that\ncan be used to read the currently active tooltips produced by this\nextension.\n*/\nfunction hoverTooltip(source, options = {}) {\n    let setHover = StateEffect.define();\n    // This would be better stored in the state field, but we've set\n    // down the type of the field in our interface, so it's indirectly\n    // stored by array identity.\n    let locked = new WeakMap();\n    let hoverState = StateField.define({\n        create() { return []; },\n        update(value, tr) {\n            let lock = locked.get(value);\n            if (value.length) {\n                if (options.hideOnChange && (tr.docChanged || tr.selection))\n                    value = [];\n                else if (lock && lock(tr))\n                    value = [];\n                else if (options.hideOn)\n                    value = value.filter(v => !options.hideOn(tr, v));\n            }\n            if (tr.docChanged && value.length) {\n                let mapped = [];\n                for (let tooltip of value) {\n                    let newPos = tr.changes.mapPos(tooltip.pos, -1, MapMode.TrackDel);\n                    if (newPos != null) {\n                        let copy = Object.assign(Object.create(null), tooltip);\n                        copy.pos = newPos;\n                        if (copy.end != null)\n                            copy.end = tr.changes.mapPos(copy.end);\n                        mapped.push(copy);\n                    }\n                }\n                value = mapped;\n            }\n            for (let effect of tr.effects) {\n                if (effect.is(setHover)) {\n                    value = effect.value;\n                    lock = undefined;\n                }\n                if (effect.is(closeHoverTooltipEffect) && !effect.value || effect.value == hoverState)\n                    value = [];\n            }\n            if (value.length && lock)\n                locked.set(value, lock);\n            return value;\n        },\n        provide: f => showHoverTooltip.from(f)\n    });\n    const plugin = ViewPlugin.define(view => new HoverPlugin(view, source, hoverState, locked, setHover, options.hoverTime || 300 /* Hover.Time */));\n    return {\n        active: hoverState,\n        extension: [\n            hoverState,\n            plugin,\n            hoverPlugin.of(plugin),\n            showHoverTooltipHost\n        ]\n    };\n}\n/**\nActivate hover tooltips for the given position and side. If you\nprovide a specific hover tooltip (the value returned from\n[`hoverTooltip`](https://codemirror.net/6/docs/ref/#view.hoverTooltip)), only that one will be\nactivated. If not given, all hover tooltips at the given position\nare triggered.\n\nNote that tooltips opened this way don't close automatically, and\nyou'll want to pass an `until` callback or use\n[`closeHoverTooltip`](https://codemirror.net/6/docs/ref/#view.closeHoverTooltip)/[`closeHoverTooltips`](https://codemirror.net/6/docs/ref/#view.closeHoverTooltips)\nto deactivate them.\n*/\nfunction activateHover(view, pos, side, options = {}) {\n    var _a;\n    let plugins = view.state.facet(hoverPlugin).map(p => view.plugin(p)).filter((p) => !!p);\n    if (options.tooltip && options.tooltip.active) {\n        let found = plugins.find(p => p.field == options.tooltip.active);\n        if (found)\n            plugins = [found];\n    }\n    for (let plugin of plugins)\n        plugin.activateHover(view, pos, side, (_a = options.until) !== null && _a !== void 0 ? _a : (() => false));\n}\n/**\nGet the active tooltip view for a given tooltip, if available.\n*/\nfunction getTooltip(view, tooltip) {\n    let plugin = view.plugin(tooltipPlugin);\n    if (!plugin)\n        return null;\n    let found = plugin.manager.tooltips.indexOf(tooltip);\n    return found < 0 ? null : plugin.manager.tooltipViews[found];\n}\n/**\nReturns true if any hover tooltips are currently active.\n*/\nfunction hasHoverTooltips(state) {\n    return state.facet(showHoverTooltip).some(x => x);\n}\nconst closeHoverTooltipEffect = /*@__PURE__*/StateEffect.define();\n/**\nTransaction effect that closes all hover tooltips.\n*/\nconst closeHoverTooltips = /*@__PURE__*/closeHoverTooltipEffect.of(null);\n/**\nTransaction effect that closes a specific hover tooltip.\n*/\nfunction closeHoverTooltip(tooltip) {\n    return closeHoverTooltipEffect.of(tooltip.active);\n}\n/**\nTell the tooltip extension to recompute the position of the active\ntooltips. This can be useful when something happens (such as a\nre-positioning or CSS change affecting the editor) that could\ninvalidate the existing tooltip positions.\n*/\nfunction repositionTooltips(view) {\n    let plugin = view.plugin(tooltipPlugin);\n    if (plugin)\n        plugin.maybeMeasure();\n}\n\nconst panelConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        let topContainer, bottomContainer;\n        for (let c of configs) {\n            topContainer = topContainer || c.topContainer;\n            bottomContainer = bottomContainer || c.bottomContainer;\n        }\n        return { topContainer, bottomContainer };\n    }\n});\n/**\nConfigures the panel-managing extension.\n*/\nfunction panels(config) {\n    return config ? [panelConfig.of(config)] : [];\n}\n/**\nGet the active panel created by the given constructor, if any.\nThis can be useful when you need access to your panels' DOM\nstructure.\n*/\nfunction getPanel(view, panel) {\n    let plugin = view.plugin(panelPlugin);\n    let index = plugin ? plugin.specs.indexOf(panel) : -1;\n    return index > -1 ? plugin.panels[index] : null;\n}\nconst panelPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.input = view.state.facet(showPanel);\n        this.specs = this.input.filter(s => s);\n        this.panels = this.specs.map(spec => spec(view));\n        let conf = view.state.facet(panelConfig);\n        this.top = new PanelGroup(view, true, conf.topContainer);\n        this.bottom = new PanelGroup(view, false, conf.bottomContainer);\n        this.top.sync(this.panels.filter(p => p.top));\n        this.bottom.sync(this.panels.filter(p => !p.top));\n        for (let p of this.panels) {\n            p.dom.classList.add(\"cm-panel\");\n            if (p.mount)\n                p.mount();\n        }\n    }\n    update(update) {\n        let conf = update.state.facet(panelConfig);\n        if (this.top.container != conf.topContainer) {\n            this.top.sync([]);\n            this.top = new PanelGroup(update.view, true, conf.topContainer);\n        }\n        if (this.bottom.container != conf.bottomContainer) {\n            this.bottom.sync([]);\n            this.bottom = new PanelGroup(update.view, false, conf.bottomContainer);\n        }\n        this.top.syncClasses();\n        this.bottom.syncClasses();\n        let input = update.state.facet(showPanel);\n        if (input != this.input) {\n            let specs = input.filter(x => x);\n            let panels = [], top = [], bottom = [], mount = [];\n            for (let spec of specs) {\n                let known = this.specs.indexOf(spec), panel;\n                if (known < 0) {\n                    panel = spec(update.view);\n                    mount.push(panel);\n                }\n                else {\n                    panel = this.panels[known];\n                    if (panel.update)\n                        panel.update(update);\n                }\n                panels.push(panel);\n                (panel.top ? top : bottom).push(panel);\n            }\n            this.specs = specs;\n            this.panels = panels;\n            this.top.sync(top);\n            this.bottom.sync(bottom);\n            for (let p of mount) {\n                p.dom.classList.add(\"cm-panel\");\n                if (p.mount)\n                    p.mount();\n            }\n        }\n        else {\n            for (let p of this.panels)\n                if (p.update)\n                    p.update(update);\n        }\n    }\n    destroy() {\n        this.top.sync([]);\n        this.bottom.sync([]);\n    }\n}, {\n    provide: plugin => EditorView.scrollMargins.of(view => {\n        let value = view.plugin(plugin);\n        return value && { top: value.top.scrollMargin(), bottom: value.bottom.scrollMargin() };\n    })\n});\nclass PanelGroup {\n    constructor(view, top, container) {\n        this.view = view;\n        this.top = top;\n        this.container = container;\n        this.dom = undefined;\n        this.classes = \"\";\n        this.panels = [];\n        this.syncClasses();\n    }\n    sync(panels) {\n        for (let p of this.panels)\n            if (p.destroy && panels.indexOf(p) < 0)\n                p.destroy();\n        this.panels = panels;\n        this.syncDOM();\n    }\n    syncDOM() {\n        if (this.panels.length == 0) {\n            if (this.dom) {\n                this.dom.remove();\n                this.dom = undefined;\n            }\n            return;\n        }\n        if (!this.dom) {\n            this.dom = document.createElement(\"div\");\n            this.dom.className = this.top ? \"cm-panels cm-panels-top\" : \"cm-panels cm-panels-bottom\";\n            let parent = this.container || this.view.dom;\n            parent.insertBefore(this.dom, this.top ? parent.firstChild : null);\n        }\n        let curDOM = this.dom.firstChild;\n        for (let panel of this.panels) {\n            if (panel.dom.parentNode == this.dom) {\n                while (curDOM != panel.dom)\n                    curDOM = rm(curDOM);\n                curDOM = curDOM.nextSibling;\n            }\n            else {\n                this.dom.insertBefore(panel.dom, curDOM);\n            }\n        }\n        while (curDOM)\n            curDOM = rm(curDOM);\n    }\n    scrollMargin() {\n        return !this.dom || this.container ? 0\n            : Math.max(0, this.top ?\n                this.dom.getBoundingClientRect().bottom - Math.max(0, this.view.scrollDOM.getBoundingClientRect().top) :\n                Math.min(innerHeight, this.view.scrollDOM.getBoundingClientRect().bottom) - this.dom.getBoundingClientRect().top);\n    }\n    syncClasses() {\n        if (!this.container || this.classes == this.view.themeClasses)\n            return;\n        for (let cls of this.classes.split(\" \"))\n            if (cls)\n                this.container.classList.remove(cls);\n        for (let cls of (this.classes = this.view.themeClasses).split(\" \"))\n            if (cls)\n                this.container.classList.add(cls);\n    }\n}\nfunction rm(node) {\n    let next = node.nextSibling;\n    node.remove();\n    return next;\n}\n/**\nOpening a panel is done by providing a constructor function for\nthe panel through this facet. (The panel is closed again when its\nconstructor is no longer provided.) Values of `null` are ignored.\n*/\nconst showPanel = /*@__PURE__*/Facet.define({\n    enables: panelPlugin\n});\n\n/**\nShow a panel above or below the editor to show the user a message\nor prompt them for input. Returns an effect that can be dispatched\nto close the dialog, and a promise that resolves when the dialog\nis closed or a form inside of it is submitted.\n\nYou are encouraged, if your handling of the result of the promise\ndispatches a transaction, to include the `close` effect in it. If\nyou don't, this function will automatically dispatch a separate\ntransaction right after.\n*/\nfunction showDialog(view, config) {\n    let resolve;\n    let promise = new Promise(r => resolve = r);\n    let panelCtor = (view) => createDialog(view, config, resolve);\n    if (view.state.field(dialogField, false)) {\n        view.dispatch({ effects: openDialogEffect.of(panelCtor) });\n    }\n    else {\n        view.dispatch({ effects: StateEffect.appendConfig.of(dialogField.init(() => [panelCtor])) });\n    }\n    let close = closeDialogEffect.of(panelCtor);\n    return { close, result: promise.then(form => {\n            let queue = view.win.queueMicrotask || ((f) => view.win.setTimeout(f, 10));\n            queue(() => {\n                if (view.state.field(dialogField).indexOf(panelCtor) > -1)\n                    view.dispatch({ effects: close });\n            });\n            return form;\n        }) };\n}\n/**\nFind the [`Panel`](https://codemirror.net/6/docs/ref/#view.Panel) for an open dialog, using a class\nname as identifier.\n*/\nfunction getDialog(view, className) {\n    let dialogs = view.state.field(dialogField, false) || [];\n    for (let open of dialogs) {\n        let panel = getPanel(view, open);\n        if (panel && panel.dom.classList.contains(className))\n            return panel;\n    }\n    return null;\n}\nconst dialogField = /*@__PURE__*/StateField.define({\n    create() { return []; },\n    update(dialogs, tr) {\n        for (let e of tr.effects) {\n            if (e.is(openDialogEffect))\n                dialogs = [e.value].concat(dialogs);\n            else if (e.is(closeDialogEffect))\n                dialogs = dialogs.filter(d => d != e.value);\n        }\n        return dialogs;\n    },\n    provide: f => showPanel.computeN([f], state => state.field(f))\n});\nconst openDialogEffect = /*@__PURE__*/StateEffect.define();\nconst closeDialogEffect = /*@__PURE__*/StateEffect.define();\nfunction createDialog(view, config, result) {\n    let content = config.content ? config.content(view, () => done(null)) : null;\n    if (!content) {\n        content = elt(\"form\");\n        if (config.input) {\n            let input = elt(\"input\", config.input);\n            if (/^(text|password|number|email|tel|url)$/.test(input.type))\n                input.classList.add(\"cm-textfield\");\n            if (!input.name)\n                input.name = \"input\";\n            content.appendChild(elt(\"label\", (config.label || \"\") + \": \", input));\n        }\n        else {\n            content.appendChild(document.createTextNode(config.label || \"\"));\n        }\n        content.appendChild(document.createTextNode(\" \"));\n        content.appendChild(elt(\"button\", { class: \"cm-button\", type: \"submit\" }, config.submitLabel || \"OK\"));\n    }\n    let forms = content.nodeName == \"FORM\" ? [content] : content.querySelectorAll(\"form\");\n    for (let i = 0; i < forms.length; i++) {\n        let form = forms[i];\n        form.addEventListener(\"keydown\", (event) => {\n            if (event.keyCode == 27) { // Escape\n                event.preventDefault();\n                done(null);\n            }\n            else if (event.keyCode == 13) { // Enter\n                event.preventDefault();\n                done(form);\n            }\n        });\n        form.addEventListener(\"submit\", (event) => {\n            event.preventDefault();\n            done(form);\n        });\n    }\n    let panel = elt(\"div\", content, elt(\"button\", {\n        onclick: () => done(null),\n        \"aria-label\": view.state.phrase(\"close\"),\n        class: \"cm-dialog-close\",\n        type: \"button\"\n    }, [\"×\"]));\n    if (config.class)\n        panel.className = config.class;\n    panel.classList.add(\"cm-dialog\");\n    function done(form) {\n        if (panel.contains(panel.ownerDocument.activeElement))\n            view.focus();\n        result(form);\n    }\n    return {\n        dom: panel,\n        top: config.top,\n        mount: () => {\n            if (config.focus) {\n                let focus;\n                if (typeof config.focus == \"string\")\n                    focus = content.querySelector(config.focus);\n                else\n                    focus = content.querySelector(\"input\") || content.querySelector(\"button\");\n                if (focus && \"select\" in focus)\n                    focus.select();\n                else if (focus && \"focus\" in focus)\n                    focus.focus();\n            }\n        }\n    };\n}\n\n/**\nA gutter marker represents a bit of information attached to a line\nin a specific gutter. Your own custom markers have to extend this\nclass.\n*/\nclass GutterMarker extends RangeValue {\n    /**\n    @internal\n    */\n    compare(other) {\n        return this == other || this.constructor == other.constructor && this.eq(other);\n    }\n    /**\n    Compare this marker to another marker of the same type.\n    */\n    eq(other) { return false; }\n    /**\n    Called if the marker has a `toDOM` method and its representation\n    was removed from a gutter.\n    */\n    destroy(dom) { }\n}\nGutterMarker.prototype.elementClass = \"\";\nGutterMarker.prototype.toDOM = undefined;\nGutterMarker.prototype.mapMode = MapMode.TrackBefore;\nGutterMarker.prototype.startSide = GutterMarker.prototype.endSide = -1;\nGutterMarker.prototype.point = true;\n/**\nFacet used to add a class to all gutter elements for a given line.\nMarkers given to this facet should _only_ define an\n[`elementclass`](https://codemirror.net/6/docs/ref/#view.GutterMarker.elementClass), not a\n[`toDOM`](https://codemirror.net/6/docs/ref/#view.GutterMarker.toDOM) (or the marker will appear\nin all gutters for the line).\n*/\nconst gutterLineClass = /*@__PURE__*/Facet.define();\n/**\nFacet used to add a class to all gutter elements next to a widget.\nShould not provide widgets with a `toDOM` method.\n*/\nconst gutterWidgetClass = /*@__PURE__*/Facet.define();\nconst defaults = {\n    class: \"\",\n    renderEmptyElements: false,\n    elementStyle: \"\",\n    markers: () => RangeSet.empty,\n    lineMarker: () => null,\n    widgetMarker: () => null,\n    lineMarkerChange: null,\n    initialSpacer: null,\n    updateSpacer: null,\n    domEventHandlers: {},\n    side: \"before\"\n};\nconst activeGutters = /*@__PURE__*/Facet.define();\n/**\nDefine an editor gutter. The order in which the gutters appear is\ndetermined by their extension priority.\n*/\nfunction gutter(config) {\n    return [gutters(), activeGutters.of({ ...defaults, ...config })];\n}\nconst unfixGutters = /*@__PURE__*/Facet.define({\n    combine: values => values.some(x => x)\n});\n/**\nThe gutter-drawing plugin is automatically enabled when you add a\ngutter, but you can use this function to explicitly configure it.\n\nUnless `fixed` is explicitly set to `false`, the gutters are\nfixed, meaning they don't scroll along with the content\nhorizontally (except on Internet Explorer, which doesn't support\nCSS [`position:\nsticky`](https://developer.mozilla.org/en-US/docs/Web/CSS/position#sticky)).\n*/\nfunction gutters(config) {\n    let result = [\n        gutterView,\n    ];\n    if (config && config.fixed === false)\n        result.push(unfixGutters.of(true));\n    return result;\n}\nconst gutterView = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.domAfter = null;\n        this.prevViewport = view.viewport;\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-gutters cm-gutters-before\";\n        this.dom.setAttribute(\"aria-hidden\", \"true\");\n        this.dom.style.minHeight = (this.view.contentHeight / this.view.scaleY) + \"px\";\n        this.gutters = view.state.facet(activeGutters).map(conf => new SingleGutterView(view, conf));\n        this.fixed = !view.state.facet(unfixGutters);\n        for (let gutter of this.gutters) {\n            if (gutter.config.side == \"after\")\n                this.getDOMAfter().appendChild(gutter.dom);\n            else\n                this.dom.appendChild(gutter.dom);\n        }\n        if (this.fixed) {\n            // FIXME IE11 fallback, which doesn't support position: sticky,\n            // by using position: relative + event handlers that realign the\n            // gutter (or just force fixed=false on IE11?)\n            this.dom.style.position = \"sticky\";\n        }\n        this.syncGutters(false);\n        view.scrollDOM.insertBefore(this.dom, view.contentDOM);\n    }\n    getDOMAfter() {\n        if (!this.domAfter) {\n            this.domAfter = document.createElement(\"div\");\n            this.domAfter.className = \"cm-gutters cm-gutters-after\";\n            this.domAfter.setAttribute(\"aria-hidden\", \"true\");\n            this.domAfter.style.minHeight = (this.view.contentHeight / this.view.scaleY) + \"px\";\n            this.domAfter.style.position = this.fixed ? \"sticky\" : \"\";\n            this.view.scrollDOM.appendChild(this.domAfter);\n        }\n        return this.domAfter;\n    }\n    update(update) {\n        if (this.updateGutters(update)) {\n            // Detach during sync when the viewport changed significantly\n            // (such as during scrolling), since for large updates that is\n            // faster.\n            let vpA = this.prevViewport, vpB = update.view.viewport;\n            let vpOverlap = Math.min(vpA.to, vpB.to) - Math.max(vpA.from, vpB.from);\n            this.syncGutters(vpOverlap < (vpB.to - vpB.from) * 0.8);\n        }\n        if (update.geometryChanged) {\n            let min = (this.view.contentHeight / this.view.scaleY) + \"px\";\n            this.dom.style.minHeight = min;\n            if (this.domAfter)\n                this.domAfter.style.minHeight = min;\n        }\n        if (this.view.state.facet(unfixGutters) != !this.fixed) {\n            this.fixed = !this.fixed;\n            this.dom.style.position = this.fixed ? \"sticky\" : \"\";\n            if (this.domAfter)\n                this.domAfter.style.position = this.fixed ? \"sticky\" : \"\";\n        }\n        this.prevViewport = update.view.viewport;\n    }\n    syncGutters(detach) {\n        let after = this.dom.nextSibling;\n        if (detach) {\n            this.dom.remove();\n            if (this.domAfter)\n                this.domAfter.remove();\n        }\n        let lineClasses = RangeSet.iter(this.view.state.facet(gutterLineClass), this.view.viewport.from);\n        let classSet = [];\n        let contexts = this.gutters.map(gutter => new UpdateContext(gutter, this.view.viewport, -this.view.documentPadding.top));\n        for (let line of this.view.viewportLineBlocks) {\n            if (classSet.length)\n                classSet = [];\n            if (Array.isArray(line.type)) {\n                let first = true;\n                for (let b of line.type) {\n                    if (b.type == BlockType.Text && first) {\n                        advanceCursor(lineClasses, classSet, b.from);\n                        for (let cx of contexts)\n                            cx.line(this.view, b, classSet);\n                        first = false;\n                    }\n                    else if (b.widget) {\n                        for (let cx of contexts)\n                            cx.widget(this.view, b);\n                    }\n                }\n            }\n            else if (line.type == BlockType.Text) {\n                advanceCursor(lineClasses, classSet, line.from);\n                for (let cx of contexts)\n                    cx.line(this.view, line, classSet);\n            }\n            else if (line.widget) {\n                for (let cx of contexts)\n                    cx.widget(this.view, line);\n            }\n        }\n        for (let cx of contexts)\n            cx.finish();\n        if (detach) {\n            this.view.scrollDOM.insertBefore(this.dom, after);\n            if (this.domAfter)\n                this.view.scrollDOM.appendChild(this.domAfter);\n        }\n    }\n    updateGutters(update) {\n        let prev = update.startState.facet(activeGutters), cur = update.state.facet(activeGutters);\n        let change = update.docChanged || update.heightChanged || update.viewportChanged ||\n            !RangeSet.eq(update.startState.facet(gutterLineClass), update.state.facet(gutterLineClass), update.view.viewport.from, update.view.viewport.to);\n        if (prev == cur) {\n            for (let gutter of this.gutters)\n                if (gutter.update(update))\n                    change = true;\n        }\n        else {\n            change = true;\n            let gutters = [];\n            for (let conf of cur) {\n                let known = prev.indexOf(conf);\n                if (known < 0) {\n                    gutters.push(new SingleGutterView(this.view, conf));\n                }\n                else {\n                    this.gutters[known].update(update);\n                    gutters.push(this.gutters[known]);\n                }\n            }\n            for (let g of this.gutters) {\n                g.dom.remove();\n                if (gutters.indexOf(g) < 0)\n                    g.destroy();\n            }\n            for (let g of gutters) {\n                if (g.config.side == \"after\")\n                    this.getDOMAfter().appendChild(g.dom);\n                else\n                    this.dom.appendChild(g.dom);\n            }\n            this.gutters = gutters;\n        }\n        return change;\n    }\n    destroy() {\n        for (let view of this.gutters)\n            view.destroy();\n        this.dom.remove();\n        if (this.domAfter)\n            this.domAfter.remove();\n    }\n}, {\n    provide: plugin => EditorView.scrollMargins.of(view => {\n        let value = view.plugin(plugin);\n        if (!value || value.gutters.length == 0 || !value.fixed)\n            return null;\n        let before = value.dom.offsetWidth * view.scaleX, after = value.domAfter ? value.domAfter.offsetWidth * view.scaleX : 0;\n        return view.textDirection == Direction.LTR\n            ? { left: before, right: after }\n            : { right: before, left: after };\n    })\n});\nfunction asArray(val) { return (Array.isArray(val) ? val : [val]); }\nfunction advanceCursor(cursor, collect, pos) {\n    while (cursor.value && cursor.from <= pos) {\n        if (cursor.from == pos)\n            collect.push(cursor.value);\n        cursor.next();\n    }\n}\nclass UpdateContext {\n    constructor(gutter, viewport, height) {\n        this.gutter = gutter;\n        this.height = height;\n        this.i = 0;\n        this.cursor = RangeSet.iter(gutter.markers, viewport.from);\n    }\n    addElement(view, block, markers) {\n        let { gutter } = this, above = (block.top - this.height) / view.scaleY, height = block.height / view.scaleY;\n        if (this.i == gutter.elements.length) {\n            let newElt = new GutterElement(view, height, above, markers);\n            gutter.elements.push(newElt);\n            gutter.dom.appendChild(newElt.dom);\n        }\n        else {\n            gutter.elements[this.i].update(view, height, above, markers);\n        }\n        this.height = block.bottom;\n        this.i++;\n    }\n    line(view, line, extraMarkers) {\n        let localMarkers = [];\n        advanceCursor(this.cursor, localMarkers, line.from);\n        if (extraMarkers.length)\n            localMarkers = localMarkers.concat(extraMarkers);\n        let forLine = this.gutter.config.lineMarker(view, line, localMarkers);\n        if (forLine)\n            localMarkers.unshift(forLine);\n        let gutter = this.gutter;\n        if (localMarkers.length == 0 && !gutter.config.renderEmptyElements)\n            return;\n        this.addElement(view, line, localMarkers);\n    }\n    widget(view, block) {\n        let marker = this.gutter.config.widgetMarker(view, block.widget, block), markers = marker ? [marker] : null;\n        for (let cls of view.state.facet(gutterWidgetClass)) {\n            let marker = cls(view, block.widget, block);\n            if (marker)\n                (markers || (markers = [])).push(marker);\n        }\n        if (markers)\n            this.addElement(view, block, markers);\n    }\n    finish() {\n        let gutter = this.gutter;\n        while (gutter.elements.length > this.i) {\n            let last = gutter.elements.pop();\n            gutter.dom.removeChild(last.dom);\n            last.destroy();\n        }\n    }\n}\nclass SingleGutterView {\n    constructor(view, config) {\n        this.view = view;\n        this.config = config;\n        this.elements = [];\n        this.spacer = null;\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-gutter\" + (this.config.class ? \" \" + this.config.class : \"\");\n        for (let prop in config.domEventHandlers) {\n            this.dom.addEventListener(prop, (event) => {\n                let target = event.target, y;\n                if (target != this.dom && this.dom.contains(target)) {\n                    while (target.parentNode != this.dom)\n                        target = target.parentNode;\n                    let rect = target.getBoundingClientRect();\n                    y = (rect.top + rect.bottom) / 2;\n                }\n                else {\n                    y = event.clientY;\n                }\n                let line = view.lineBlockAtHeight(y - view.documentTop);\n                if (config.domEventHandlers[prop](view, line, event))\n                    event.preventDefault();\n            });\n        }\n        this.markers = asArray(config.markers(view));\n        if (config.initialSpacer) {\n            this.spacer = new GutterElement(view, 0, 0, [config.initialSpacer(view)]);\n            this.dom.appendChild(this.spacer.dom);\n            this.spacer.dom.style.cssText += \"visibility: hidden; pointer-events: none\";\n        }\n    }\n    update(update) {\n        let prevMarkers = this.markers;\n        this.markers = asArray(this.config.markers(update.view));\n        if (this.spacer && this.config.updateSpacer) {\n            let updated = this.config.updateSpacer(this.spacer.markers[0], update);\n            if (updated != this.spacer.markers[0])\n                this.spacer.update(update.view, 0, 0, [updated]);\n        }\n        let vp = update.view.viewport;\n        return !RangeSet.eq(this.markers, prevMarkers, vp.from, vp.to) ||\n            (this.config.lineMarkerChange ? this.config.lineMarkerChange(update) : false);\n    }\n    destroy() {\n        for (let elt of this.elements)\n            elt.destroy();\n    }\n}\nclass GutterElement {\n    constructor(view, height, above, markers) {\n        this.height = -1;\n        this.above = 0;\n        this.markers = [];\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-gutterElement\";\n        this.update(view, height, above, markers);\n    }\n    update(view, height, above, markers) {\n        if (this.height != height) {\n            this.height = height;\n            this.dom.style.height = height + \"px\";\n        }\n        if (this.above != above)\n            this.dom.style.marginTop = (this.above = above) ? above + \"px\" : \"\";\n        if (!sameMarkers(this.markers, markers))\n            this.setMarkers(view, markers);\n    }\n    setMarkers(view, markers) {\n        let cls = \"cm-gutterElement\", domPos = this.dom.firstChild;\n        for (let iNew = 0, iOld = 0;;) {\n            let skipTo = iOld, marker = iNew < markers.length ? markers[iNew++] : null, matched = false;\n            if (marker) {\n                let c = marker.elementClass;\n                if (c)\n                    cls += \" \" + c;\n                for (let i = iOld; i < this.markers.length; i++)\n                    if (this.markers[i].compare(marker)) {\n                        skipTo = i;\n                        matched = true;\n                        break;\n                    }\n            }\n            else {\n                skipTo = this.markers.length;\n            }\n            while (iOld < skipTo) {\n                let next = this.markers[iOld++];\n                if (next.toDOM) {\n                    next.destroy(domPos);\n                    let after = domPos.nextSibling;\n                    domPos.remove();\n                    domPos = after;\n                }\n            }\n            if (!marker)\n                break;\n            if (marker.toDOM) {\n                if (matched)\n                    domPos = domPos.nextSibling;\n                else\n                    this.dom.insertBefore(marker.toDOM(view), domPos);\n            }\n            if (matched)\n                iOld++;\n        }\n        this.dom.className = cls;\n        this.markers = markers;\n    }\n    destroy() {\n        this.setMarkers(null, []); // First argument not used unless creating markers\n    }\n}\nfunction sameMarkers(a, b) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++)\n        if (!a[i].compare(b[i]))\n            return false;\n    return true;\n}\n/**\nFacet used to provide markers to the line number gutter.\n*/\nconst lineNumberMarkers = /*@__PURE__*/Facet.define();\n/**\nFacet used to create markers in the line number gutter next to widgets.\n*/\nconst lineNumberWidgetMarker = /*@__PURE__*/Facet.define();\nconst lineNumberConfig = /*@__PURE__*/Facet.define({\n    combine(values) {\n        return combineConfig(values, { formatNumber: String, domEventHandlers: {} }, {\n            domEventHandlers(a, b) {\n                let result = Object.assign({}, a);\n                for (let event in b) {\n                    let exists = result[event], add = b[event];\n                    result[event] = exists ? (view, line, event) => exists(view, line, event) || add(view, line, event) : add;\n                }\n                return result;\n            }\n        });\n    }\n});\nclass NumberMarker extends GutterMarker {\n    constructor(number) {\n        super();\n        this.number = number;\n    }\n    eq(other) { return this.number == other.number; }\n    toDOM() { return document.createTextNode(this.number); }\n}\nfunction formatNumber(view, number) {\n    return view.state.facet(lineNumberConfig).formatNumber(number, view.state);\n}\nconst lineNumberGutter = /*@__PURE__*/activeGutters.compute([lineNumberConfig], state => ({\n    class: \"cm-lineNumbers\",\n    renderEmptyElements: false,\n    markers(view) { return view.state.facet(lineNumberMarkers); },\n    lineMarker(view, line, others) {\n        if (others.some(m => m.toDOM))\n            return null;\n        return new NumberMarker(formatNumber(view, view.state.doc.lineAt(line.from).number));\n    },\n    widgetMarker: (view, widget, block) => {\n        for (let m of view.state.facet(lineNumberWidgetMarker)) {\n            let result = m(view, widget, block);\n            if (result)\n                return result;\n        }\n        return null;\n    },\n    lineMarkerChange: update => update.startState.facet(lineNumberConfig) != update.state.facet(lineNumberConfig),\n    initialSpacer(view) {\n        return new NumberMarker(formatNumber(view, maxLineNumber(view.state.doc.lines)));\n    },\n    updateSpacer(spacer, update) {\n        let max = formatNumber(update.view, maxLineNumber(update.view.state.doc.lines));\n        return max == spacer.number ? spacer : new NumberMarker(max);\n    },\n    domEventHandlers: state.facet(lineNumberConfig).domEventHandlers,\n    side: \"before\"\n}));\n/**\nCreate a line number gutter extension.\n*/\nfunction lineNumbers(config = {}) {\n    return [\n        lineNumberConfig.of(config),\n        gutters(),\n        lineNumberGutter\n    ];\n}\nfunction maxLineNumber(lines) {\n    let last = 9;\n    while (last < lines)\n        last = last * 10 + 9;\n    return last;\n}\nconst activeLineGutterMarker = /*@__PURE__*/new class extends GutterMarker {\n    constructor() {\n        super(...arguments);\n        this.elementClass = \"cm-activeLineGutter\";\n    }\n};\nconst activeLineGutterHighlighter = /*@__PURE__*/gutterLineClass.compute([\"selection\"], state => {\n    let marks = [], last = -1;\n    for (let range of state.selection.ranges) {\n        let linePos = state.doc.lineAt(range.head).from;\n        if (linePos > last) {\n            last = linePos;\n            marks.push(activeLineGutterMarker.range(linePos));\n        }\n    }\n    return RangeSet.of(marks);\n});\n/**\nReturns an extension that adds a `cm-activeLineGutter` class to\nall gutter elements on the [active\nline](https://codemirror.net/6/docs/ref/#view.highlightActiveLine).\n*/\nfunction highlightActiveLineGutter() {\n    return activeLineGutterHighlighter;\n}\n\nfunction matcher(decorator) {\n    return ViewPlugin.define(view => ({\n        decorations: decorator.createDeco(view),\n        update(u) {\n            this.decorations = decorator.updateDeco(u, this.decorations);\n        },\n    }), {\n        decorations: v => v.decorations\n    });\n}\nconst tabDeco = /*@__PURE__*/Decoration.mark({ class: \"cm-highlightTab\" });\nconst spaceDeco = /*@__PURE__*/Decoration.mark({ class: \"cm-highlightSpace\" });\nconst whitespaceHighlighter = /*@__PURE__*/matcher(/*@__PURE__*/new MatchDecorator({\n    regexp: /\\t| /g,\n    decoration: match => match[0] == \"\\t\" ? tabDeco : spaceDeco,\n    boundary: /\\S/,\n}));\n/**\nReturns an extension that highlights whitespace, adding a\n`cm-highlightSpace` class to stretches of spaces, and a\n`cm-highlightTab` class to individual tab characters. By default,\nthe former are shown as faint dots, and the latter as arrows.\n*/\nfunction highlightWhitespace() {\n    return whitespaceHighlighter;\n}\nconst trailingHighlighter = /*@__PURE__*/matcher(/*@__PURE__*/new MatchDecorator({\n    regexp: /\\s+$/g,\n    decoration: /*@__PURE__*/Decoration.mark({ class: \"cm-trailingSpace\" })\n}));\n/**\nReturns an extension that adds a `cm-trailingSpace` class to all\ntrailing whitespace.\n*/\nfunction highlightTrailingWhitespace() {\n    return trailingHighlighter;\n}\n\n/**\n@internal\n*/\nconst __test = { HeightMap, HeightOracle, MeasuredHeights, QueryType, ChangedRange, computeOrder,\n    moveVisually, clearHeightChangeFlag, getHeightChangeFlag: () => heightChangeFlag };\n\nexport { BidiSpan, BlockInfo, BlockType, BlockWrapper, Decoration, Direction, EditorView, GutterMarker, MatchDecorator, RectangleMarker, ViewPlugin, ViewUpdate, WidgetType, __test, activateHover, closeHoverTooltip, closeHoverTooltips, crosshairCursor, drawSelection, dropCursor, getDialog, getDrawSelectionConfig, getPanel, getTooltip, gutter, gutterLineClass, gutterWidgetClass, gutters, hasHoverTooltips, highlightActiveLine, highlightActiveLineGutter, highlightSpecialChars, highlightTrailingWhitespace, highlightWhitespace, hoverTooltip, keymap, layer, lineNumberMarkers, lineNumberWidgetMarker, lineNumbers, logException, panels, placeholder, rectangularSelection, repositionTooltips, runScopeHandlers, scrollPastEnd, showDialog, showPanel, showTooltip, tooltips };\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { tabbable } from 'tabbable';\n\nexport const onFocusTrapDeactivate = (cell: HTMLDivElement) => {\n  const cellTabbableChildren = tabbable(cell);\n\n  for (const child of cellTabbableChildren) {\n    child.setAttribute('tabindex', '-1');\n  }\n\n  cell.setAttribute('tabindex', '0');\n};\n\nexport const updateTabbableChildren = (\n  cell: HTMLDivElement,\n  isFocusTrapActive?: boolean\n): void => {\n  const cellTabbableChildren = tabbable(cell, { displayCheck: 'none' });\n\n  for (const child of cellTabbableChildren) {\n    if (child instanceof HTMLElement) {\n      if (!isFocusTrapActive) {\n        child.setAttribute('tabindex', '-1');\n      }\n\n      child.setAttribute('data-advanced-table-child-focusable', '');\n    }\n  }\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","export default function getValueArrayAndUseDeepEqualFromParams<T>(\n  params: [T, boolean | T[], T[]?],\n) {\n  const currentValue = params[0];\n\n  let array;\n  let useDeepEqual = false;\n  if (params.length === 2) {\n    array = params[1];\n  } else {\n    useDeepEqual = params[1] as boolean;\n    array = params[2] as T[];\n  }\n\n  return {\n    currentValue,\n    array,\n    useDeepEqual,\n  };\n}\n","class BoundedPolicy {\n  constructor(maxConcurrency) {\n    this.maxConcurrency = maxConcurrency || 1;\n  }\n}\n\nexport default BoundedPolicy;\n","export const cancelableSymbol = '__ec_cancel__';\nexport const yieldableSymbol = '__ec_yieldable__';\nexport const YIELDABLE_CONTINUE = 'next';\nexport const YIELDABLE_THROW = 'throw';\nexport const YIELDABLE_RETURN = 'return';\nexport const YIELDABLE_CANCEL = 'cancel';\n\n/**\n * @class YieldableState\n * @hideconstructor\n */\nclass YieldableState {\n  constructor(taskInstance, resumeIndex) {\n    this._taskInstance = taskInstance;\n    this._resumeIndex = resumeIndex;\n  }\n\n  /**\n   * Return yielded TaskInstance. Useful for introspection on instance state.\n   * @method getTaskInstance\n   * @memberof YieldableState\n   * @public\n   * @instance\n   */\n  getTaskInstance() {\n    return this._taskInstance;\n  }\n\n  /**\n   * Cancel the yielded TaskInstance.\n   * @method cancel\n   * @memberof YieldableState\n   * @public\n   * @instance\n   */\n  cancel() {\n    let taskInstance = this._taskInstance;\n    taskInstance.proceed.call(\n      taskInstance,\n      this._resumeIndex,\n      YIELDABLE_CANCEL,\n    );\n  }\n\n  /**\n   * Cause the TaskInstance to return from its yield with an optional value,\n   * and continue executing.\n   * @method next\n   * @memberof YieldableState\n   * @param value\n   * @public\n   * @instance\n   */\n  next(value) {\n    let taskInstance = this._taskInstance;\n    taskInstance.proceed.call(\n      taskInstance,\n      this._resumeIndex,\n      YIELDABLE_CONTINUE,\n      value,\n    );\n  }\n\n  /**\n   * Short-circuit TaskInstance execution and have it return with an optional\n   * value.\n   * @method return\n   * @memberof YieldableState\n   * @param value\n   * @public\n   * @instance\n   */\n  return(value) {\n    let taskInstance = this._taskInstance;\n    taskInstance.proceed.call(\n      taskInstance,\n      this._resumeIndex,\n      YIELDABLE_RETURN,\n      value,\n    );\n  }\n\n  /**\n   * Raise a given error within the given task instance and halt execution\n   * @method throw\n   * @memberof YieldableState\n   * @param error\n   * @public\n   * @instance\n   */\n  throw(error) {\n    let taskInstance = this._taskInstance;\n    taskInstance.proceed.call(\n      taskInstance,\n      this._resumeIndex,\n      YIELDABLE_THROW,\n      error,\n    );\n  }\n}\n\n/**\n * Yieldables are a primitive for building safe, cancelation-aware ways to\n * instrument and introspect the runtime of a task. Many Yieldables are built-in\n * to ember-concurrency today, such as `timeout`, `animationFrame`, and\n * `rawTimeout`.\n *\n * For example, if I wanted to implement a yieldable for `requestIdleCallback`,\n * I could do the following:\n *\n * ```javascript\n * import Component from '@glimmer/component';\n * import { task, Yieldable } from 'ember-concurrency';\n *\n * class IdleCallbackYieldable extends Yieldable {\n *   onYield(state) {\n *     let callbackId = requestIdleCallback(() => state.next());\n *\n *     return () => cancelIdleCallback(callbackId);\n *   }\n * }\n *\n * const idleCallback = () => new IdleCallbackYieldable();\n *\n * class MyComponent extends Component {\n *   &#64;task *backgroundTask() {\n *     while (1) {\n *       yield idleCallback();\n *\n *       const data = this.complicatedNumberCrunching();\n *       yield this.sendData(data);\n *     }\n *   }\n * }\n * ```\n *\n * In general, `Yieldable` instances **should** be reusable across calls, and thus\n * care should be taken to ensure that teardown is provided and state not\n * intended to be shared across calls stay inside `onYield`.\n *\n * `Yieldable` also provides automatic Promise-casting.\n *\n * <style>\n *   .ignore-this--this-is-here-to-hide-constructor,\n *   #Yieldable { display: none }\n * </style>\n *\n * @class Yieldable\n */\nexport class Yieldable {\n  constructor() {\n    this[yieldableSymbol] = this[yieldableSymbol].bind(this);\n  }\n\n  /**\n   * Defines what happens when the task encounters `yield myYieldable` and returns\n   * a disposer function that handles any cleanup.\n   *\n   * The state parameter is provided by the runtime, and provides operations for\n   * interacting with the yielding task instance and advancing, returning,\n   * throwing, or canceling its execution.\n   *\n   * @method onYield\n   * @memberof Yieldable\n   * @param {YieldableState} state\n   * @instance\n   * @public\n   */\n  onYield() {}\n\n  _deferable() {\n    let def = { resolve: undefined, reject: undefined };\n\n    def.promise = new Promise((resolve, reject) => {\n      def.resolve = resolve;\n      def.reject = reject;\n    });\n\n    return def;\n  }\n\n  _toPromise() {\n    let def = this._deferable();\n\n    let thinInstance = {\n      proceed(_index, resumeType, value) {\n        if (\n          resumeType == YIELDABLE_CONTINUE ||\n          resumeType == YIELDABLE_RETURN\n        ) {\n          def.resolve(value);\n        } else {\n          def.reject(value);\n        }\n      },\n    };\n\n    let maybeDisposer = this[yieldableSymbol](thinInstance, 0);\n    def.promise[cancelableSymbol] = maybeDisposer;\n\n    return def.promise;\n  }\n\n  /**\n   * Returns a promise that resolves with the value yielded back to or returned\n   * to the yielded task, or rejects with either the exception thrown from the\n   * Yieldable, or an error with a `.name` property with value `\"TaskCancelation\"`.\n   *\n   * @method then\n   * @memberof Yieldable\n   * @instance\n   * @return {Promise}\n   */\n  then(...args) {\n    return this._toPromise().then(...args);\n  }\n\n  /**\n   * @method catch\n   * @memberof Yieldable\n   * @instance\n   * @return {Promise}\n   */\n  catch(...args) {\n    return this._toPromise().catch(...args);\n  }\n\n  /**\n   * @method finally\n   * @memberof Yieldable\n   * @instance\n   * @return {Promise}\n   */\n  finally(...args) {\n    return this._toPromise().finally(...args);\n  }\n\n  [yieldableSymbol](taskInstance, resumeIndex) {\n    let state = new YieldableState(taskInstance, resumeIndex);\n\n    return this.onYield(state);\n  }\n}\n\nclass AnimationFrameYieldable extends Yieldable {\n  onYield(state) {\n    let timerId = requestAnimationFrame(() => state.next());\n\n    return () => cancelAnimationFrame(timerId);\n  }\n}\n\nclass ForeverYieldable extends Yieldable {\n  onYield() {}\n}\n\nclass RawTimeoutYieldable extends Yieldable {\n  constructor(ms) {\n    super();\n    this.ms = ms;\n  }\n\n  onYield(state) {\n    let timerId = setTimeout(() => state.next(), this.ms);\n\n    return () => clearTimeout(timerId);\n  }\n}\n\n/**\n * Yielding `animationFrame()` will pause a task until after the next animation\n * frame using the native `requestAnimationFrame()` browser API.\n *\n * The task below, when performed, will print the time since the last loop run\n * for every animation frame.\n *\n * ```js\n * export default class MyComponent extends Component {\n *   &#64;task *myTask() {\n *     let lastNow = performance.now();\n *     while (true) {\n *       yield animationFrame();\n *\n *       let now = performance.now();\n *       let dt = now - lastNow;\n *       lastNow = now;\n *\n *       console.log(dt);\n *     }\n *   }\n * }\n * ```\n */\nexport function animationFrame() {\n  return new AnimationFrameYieldable();\n}\n\n/**\n *\n * Yielding `forever` will pause a task indefinitely until\n * it is cancelled (i.e. via host object destruction, the restartable modifier,\n * or manual cancellation).\n *\n * This is often useful in cases involving animation: if you're\n * using Liquid Fire, or some other animation scheme, sometimes you'll\n * notice buttons visibly reverting to their inactive states during\n * a route transition. By yielding `forever` in a Component task that drives a\n * button's active state, you can keep a task indefinitely running\n * until the animation runs to completion.\n *\n * NOTE: Liquid Fire also includes a useful `waitUntilIdle()` method\n * on the `liquid-fire-transitions` service that you can use in a lot\n * of these cases, but it won't cover cases of asynchrony that are\n * unrelated to animation, in which case `forever` might be better suited\n * to your needs.\n *\n * ```js\n * import { task, forever } from 'ember-concurrency';\n * export default class MyComponent extends Component {\n *   &#64;service myService;\n *   &#64;task *myTask() {\n *     yield this.myService.doSomethingThatCausesATransition();\n *     yield forever;\n *   }\n * }\n * ```\n */\nexport const forever = new ForeverYieldable();\n\n/**\n *\n * Yielding `rawTimeout(ms)` will pause a task for the duration\n * of time passed in, in milliseconds.\n *\n * The timeout will use the native `setTimeout()` browser API,\n * instead of the Ember runloop, which means that test helpers\n * will *not* wait for it to complete.\n *\n * The task below, when performed, will print a message to the\n * console every second.\n *\n * ```js\n * export default class MyComponent extends Component {\n *   &#64;task *myTask() {\n *     while (true) {\n *       console.log(\"Hello!\");\n *       yield rawTimeout(1000);\n *     }\n *   }\n * }\n * ```\n *\n * @param {number} ms - the amount of time to sleep before resuming\n *   the task, in milliseconds\n */\nexport function rawTimeout(ms) {\n  return new RawTimeoutYieldable(ms);\n}\n","\"use strict\";\nvar __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};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ReCaptchaInstance = void 0;\nvar ReCaptchaInstance = (function () {\n    function ReCaptchaInstance(siteKey, recaptchaID, recaptcha) {\n        this.siteKey = siteKey;\n        this.recaptchaID = recaptchaID;\n        this.recaptcha = recaptcha;\n        this.styleContainer = null;\n    }\n    ReCaptchaInstance.prototype.execute = function (action) {\n        return __awaiter(this, void 0, void 0, function () {\n            var _a;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        if (!this.recaptcha.enterprise) return [3, 2];\n                        return [4, this.recaptcha.enterprise.execute(this.recaptchaID, { action: action })];\n                    case 1:\n                        _a = _b.sent();\n                        return [3, 4];\n                    case 2: return [4, this.recaptcha.execute(this.recaptchaID, { action: action })];\n                    case 3:\n                        _a = _b.sent();\n                        _b.label = 4;\n                    case 4: return [2, _a];\n                }\n            });\n        });\n    };\n    ReCaptchaInstance.prototype.getSiteKey = function () {\n        return this.siteKey;\n    };\n    ReCaptchaInstance.prototype.hideBadge = function () {\n        if (this.styleContainer !== null) {\n            return;\n        }\n        this.styleContainer = document.createElement(\"style\");\n        this.styleContainer.innerHTML =\n            \".grecaptcha-badge{visibility:hidden !important;}\";\n        document.head.appendChild(this.styleContainer);\n    };\n    ReCaptchaInstance.prototype.showBadge = function () {\n        if (this.styleContainer === null) {\n            return;\n        }\n        document.head.removeChild(this.styleContainer);\n        this.styleContainer = null;\n    };\n    return ReCaptchaInstance;\n}());\nexports.ReCaptchaInstance = ReCaptchaInstance;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { FloatingUIOptions } from '../../../../modifiers/hds-anchored-position.ts';\n\nexport enum HdsFormSuperSelectHorizontalPositionValues {\n  Left = 'left',\n  Center = 'center',\n  Right = 'right',\n}\n\nexport type HdsFormSuperSelectHorizontalPositions =\n  `${HdsFormSuperSelectHorizontalPositionValues}`;\n\n// map SuperSelect's `horizontalPosition` values to anchoredPositionModifier's `placement` values\nexport const HdsFormSuperSelectHorizontalPositionToPlacementValues: Record<\n  // SuperSelect's `horizontalPosition` values\n  HdsFormSuperSelectHorizontalPositionValues,\n  FloatingUIOptions['placement']\n> = {\n  [HdsFormSuperSelectHorizontalPositionValues.Left]: 'bottom-start',\n  [HdsFormSuperSelectHorizontalPositionValues.Center]: 'bottom',\n  [HdsFormSuperSelectHorizontalPositionValues.Right]: 'bottom-end',\n};\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { guidFor } from '@ember/object/internals';\nimport { hash } from '@ember/helper';\n\nimport {\n  HdsAccordionSizeValues,\n  HdsAccordionTypeValues,\n  HdsAccordionItemTitleTagValues,\n  HdsAccordionForceStateValues,\n} from '../types.ts';\nimport HdsAccordionItemButton from './button.gts';\nimport HdsTextBody from '../../text/body.gts';\nimport HdsDisclosurePrimitive from '../../disclosure-primitive/index.gts';\n\nimport type {\n  HdsAccordionForceStates,\n  HdsAccordionSizes,\n  HdsAccordionTypes,\n  HdsAccordionItemTitleTags,\n} from '../types.ts';\n\nexport const SIZES: HdsAccordionSizes[] = Object.values(HdsAccordionSizeValues);\nexport const DEFAULT_SIZE = HdsAccordionSizeValues.Medium;\n\nexport const TYPES: HdsAccordionTypes[] = Object.values(HdsAccordionTypeValues);\nexport const DEFAULT_TYPE = HdsAccordionTypeValues.Card;\n\nconst TEXT_SIZE_MAP = {\n  small: 100,\n  medium: 200,\n  large: 300,\n};\n\nexport interface HdsAccordionItemSignature {\n  Args: {\n    ariaLabel?: string;\n    containsInteractive?: boolean;\n    forceState?: HdsAccordionForceStates;\n    isOpen?: boolean;\n    isStatic?: boolean;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    onClickToggle?: (event: MouseEvent, ...args: any[]) => void;\n    size?: HdsAccordionSizes;\n    titleTag?: HdsAccordionItemTitleTags;\n    type?: HdsAccordionTypes;\n  };\n  Blocks: {\n    toggle?: [];\n    content: [\n      {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        close: (...args: any[]) => void;\n      },\n    ];\n  };\n  Element: HTMLElement;\n}\n\nexport default class HdsAccordionItem extends Component<HdsAccordionItemSignature> {\n  private _titleId = 'title-' + guidFor(this);\n\n  get ariaLabelledBy(): string | undefined {\n    if (!this.args.ariaLabel) {\n      return this._titleId;\n    }\n    return undefined;\n  }\n\n  get containsInteractive(): boolean {\n    return this.args.containsInteractive ?? false;\n  }\n\n  get toggleTextSize(): number {\n    const size = this.args.size ?? DEFAULT_SIZE;\n    return TEXT_SIZE_MAP[size];\n  }\n\n  get size(): HdsAccordionSizes {\n    const { size = DEFAULT_SIZE } = this.args;\n\n    assert(\n      `@size for \"Hds::Accordion::Item\" must be one of the following: ${SIZES.join(\n        ', '\n      )}; received: ${size}`,\n      SIZES.includes(size)\n    );\n\n    return size;\n  }\n\n  get isOpen(): boolean {\n    if (\n      this.args.isOpen ||\n      this.args.forceState === HdsAccordionForceStateValues.Open\n    ) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  get type(): HdsAccordionTypes {\n    const { type = DEFAULT_TYPE } = this.args;\n\n    assert(\n      `@type for \"Hds::Accordion::Item\" must be one of the following: ${TYPES.join(\n        ', '\n      )}; received: ${type}`,\n      TYPES.includes(type)\n    );\n\n    return type;\n  }\n\n  get titleTag(): HdsAccordionItemTitleTags {\n    return this.args.titleTag ?? HdsAccordionItemTitleTagValues.Div;\n  }\n\n  get classNames() {\n    const classes = ['hds-accordion-item'];\n\n    // add a class based on the @isOpen argument\n    if (this.args.isOpen) {\n      classes.push('hds-accordion-item--is-open');\n    }\n\n    // add a class based on the @isStatic argument\n    if (this.args.isStatic) {\n      classes.push('hds-accordion-item--is-static');\n    }\n\n    // add a class based on the @size argument\n    classes.push(`hds-accordion-item--size-${this.size}`);\n\n    // add a class based on the @type argument\n    classes.push(`hds-accordion-item--type-${this.type}`);\n\n    if (this.containsInteractive) {\n      // Entire accordion item including the chevron is interactive:\n      classes.push('hds-accordion-item--contains-interactive');\n    } else {\n      // Only chevron is interactive:\n      classes.push('hds-accordion-item--does-not-contain-interactive');\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <HdsDisclosurePrimitive\n      class={{this.classNames}}\n      @isOpen={{this.isOpen}}\n      @onClickToggle={{@onClickToggle}}\n      ...attributes\n    >\n      <:toggle as |t|>\n        <div class=\"hds-accordion-item__toggle\">\n          <HdsAccordionItemButton\n            @isOpen={{t.isOpen}}\n            @onClickToggle={{t.onClickToggle}}\n            @contentId={{t.contentId}}\n            @ariaLabel={{@ariaLabel}}\n            @ariaLabelledBy={{this.ariaLabelledBy}}\n            @size={{this.size}}\n            @parentContainsInteractive={{this.containsInteractive}}\n          />\n\n          <HdsTextBody\n            @tag={{this.titleTag}}\n            @size={{this.toggleTextSize}}\n            @weight=\"semibold\"\n            @color=\"strong\"\n            id={{this._titleId}}\n            class=\"hds-accordion-item__toggle-content\"\n          >\n            {{yield to=\"toggle\"}}\n          </HdsTextBody>\n        </div>\n      </:toggle>\n\n      <:content as |c|>\n        <HdsTextBody\n          class=\"hds-accordion-item__content\"\n          @tag=\"div\"\n          @size=\"200\"\n          @weight=\"regular\"\n          @color=\"primary\"\n        >\n          {{yield (hash close=c.close) to=\"content\"}}\n        </HdsTextBody>\n      </:content>\n    </HdsDisclosurePrimitive>\n  </template>\n}\n","import { helper } from '@ember/component/helper';\nimport getIndex from '../utils/get-index.ts';\nimport { isEmpty } from '@ember/utils';\nimport getValueArrayAndUseDeepEqualFromParams from '../-private/get-value-array-and-use-deep-equal-from-params.ts';\nimport asArray from '../utils/as-array.ts';\n\nexport function next<T>(\n  currentValue: T,\n  maybeArray: T[],\n  useDeepEqual = false,\n) {\n  const array = asArray(maybeArray);\n  const currentIndex = getIndex(array, currentValue, useDeepEqual);\n  const lastIndex = array.length - 1;\n\n  if (null === currentIndex || isEmpty(currentIndex)) {\n    return;\n  }\n\n  return currentIndex === lastIndex ? currentValue : array.at(currentIndex + 1);\n}\n\nexport default helper(function <T>(params: [T, boolean | T[], T[]?]) {\n  const { currentValue, array, useDeepEqual } =\n    getValueArrayAndUseDeepEqualFromParams(params);\n\n  return next(currentValue, array as T[], useDeepEqual);\n});\n","import { helper } from '@ember/component/helper';\nimport getIndex from '../utils/get-index.ts';\nimport { isEmpty } from '@ember/utils';\nimport getValueArrayAndUseDeepEqualFromParams from '../-private/get-value-array-and-use-deep-equal-from-params.ts';\n\nexport function previous<T>(currentValue: T, array: T[], useDeepEqual = false) {\n  const currentIndex = getIndex(array, currentValue, useDeepEqual);\n\n  if (null === currentIndex || isEmpty(currentIndex)) {\n    return;\n  }\n\n  return currentIndex === 0 ? currentValue : array.at(currentIndex - 1);\n}\n\nexport default helper(function <T>(params: [T, boolean | T[], T[]?]) {\n  const { currentValue, array, useDeepEqual } =\n    getValueArrayAndUseDeepEqualFromParams(params);\n\n  return previous(currentValue, array as T[], useDeepEqual);\n});\n","import { helper } from '@ember/component/helper';\nimport isPromise from '../utils/is-promise.ts';\n\nexport function invokeFunction<T>(acc: T, curr: (...args: unknown[]) => void) {\n  if (isPromise(acc)) {\n    return acc.then(curr);\n  }\n\n  return curr(acc);\n}\n\nexport function pipe(actions: [...((...args1: unknown[]) => unknown)[]] = []) {\n  return function (...args: [...unknown[]]) {\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n    return actions.reduce<unknown | Promise<unknown>>((acc, curr, idx) => {\n      if (idx === 0) {\n        return curr(...args);\n      }\n\n      return invokeFunction(acc, curr);\n    }, undefined);\n  };\n}\n\nexport default helper(pipe as (actions: unknown[]) => unknown);\n","import { helper } from '@ember/component/helper';\nimport { get } from '@ember/object';\nimport { set } from '@ember/object';\nimport { isPresent } from '@ember/utils';\n\nfunction nextIndex(length: number, currentIdx: number) {\n  if (currentIdx === -1 || currentIdx + 1 === length) {\n    return 0;\n  }\n\n  return currentIdx + 1;\n}\n\nexport function toggle<T>([prop, obj, ...values]: [\n  keyof T,\n  T,\n  ...T[keyof T][],\n]) {\n  return function () {\n    const currentValue = get(obj as object, prop as string);\n\n    if (isPresent(values)) {\n      const currentIdx = values.indexOf(currentValue as T[keyof T]);\n      const nextIdx = nextIndex(values.length, currentIdx);\n\n      return set(obj as object, prop as string, values[nextIdx]!);\n    }\n\n    return set(obj as object, prop as string, !currentValue);\n  };\n}\n\nexport default helper(toggle);\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsFilterBarFilterTypeValues {\n  multiSelect = 'multi-select',\n  singleSelect = 'single-select',\n  numerical = 'numerical',\n  date = 'date',\n  time = 'time',\n  datetime = 'datetime',\n  generic = 'generic',\n  search = 'search',\n}\n\nexport type HdsFilterBarFilterType = `${HdsFilterBarFilterTypeValues}`;\n\nexport interface HdsFilterBarGenericFilterData {\n  value: unknown;\n  label?: string;\n  dismissTagText?: string;\n}\n\nexport enum HdsFilterBarNumericalFilterSelectorValues {\n  lessThan = 'less-than',\n  lessThanOrEqualTo = 'less-than-or-equal-to',\n  equalTo = 'equal-to',\n  greaterThanOrEqualTo = 'greater-than-or-equal-to',\n  greaterThan = 'greater-than',\n  between = 'between',\n}\n\nexport type HdsFilterBarNumericalFilterSelector =\n  `${HdsFilterBarNumericalFilterSelectorValues}`;\n\nexport type HdsFilterBarNumericalFilterValue =\n  | number\n  | { start?: number; end?: number };\n\nexport interface HdsFilterBarNumericalFilterData {\n  selector: HdsFilterBarNumericalFilterSelector;\n  value: HdsFilterBarNumericalFilterValue;\n}\n\nexport enum HdsFilterBarDateFilterSelectorValues {\n  before = 'before',\n  exactly = 'exactly',\n  after = 'after',\n  between = 'between',\n}\n\nexport type HdsFilterBarDateFilterSelector =\n  `${HdsFilterBarDateFilterSelectorValues}`;\n\nexport type HdsFilterBarDateFilterValue =\n  | string\n  | { start?: string; end?: string };\n\nexport interface HdsFilterBarDateFilterData {\n  selector: HdsFilterBarDateFilterSelector;\n  value: HdsFilterBarDateFilterValue;\n}\n\nexport type HdsFilterBarData =\n  | HdsFilterBarGenericFilterData[]\n  | HdsFilterBarGenericFilterData\n  | HdsFilterBarNumericalFilterData\n  | HdsFilterBarDateFilterData;\n\nexport interface HdsFilterBarMultiSelectFilter {\n  type: 'multi-select';\n  text?: string;\n  data: HdsFilterBarGenericFilterData[];\n}\n\nexport interface HdsFilterBarSingleSelectFilter {\n  type: 'single-select';\n  text?: string;\n  data: HdsFilterBarGenericFilterData;\n}\n\nexport interface HdsFilterBarNumericalFilter {\n  type: 'numerical';\n  text?: string;\n  data: HdsFilterBarNumericalFilterData;\n}\n\nexport interface HdsFilterBarDateFilter {\n  type: 'date' | 'time' | 'datetime';\n  text?: string;\n  data: HdsFilterBarDateFilterData;\n}\n\nexport interface HdsFilterBarGenericFilter {\n  type: 'generic';\n  text?: string;\n  dismissTagText?: string;\n  data: HdsFilterBarGenericFilterData | HdsFilterBarGenericFilterData[];\n}\n\nexport interface HdsFilterBarSearchFilter {\n  type: 'search';\n  text?: string;\n  data: HdsFilterBarGenericFilterData;\n}\n\nexport type HdsFilterBarFilter =\n  | HdsFilterBarMultiSelectFilter\n  | HdsFilterBarSingleSelectFilter\n  | HdsFilterBarNumericalFilter\n  | HdsFilterBarDateFilter\n  | HdsFilterBarGenericFilter\n  | HdsFilterBarSearchFilter;\n\nexport interface HdsFilterBarFilters {\n  [name: string]: HdsFilterBarFilter;\n}\n\nexport enum HdsFilterBarFilterGroupDateTypeValues {\n  date = 'date',\n  time = 'time',\n  datetime = 'datetime',\n}\n\nexport type HdsFilterBarFilterGroupDateType =\n  `${HdsFilterBarFilterGroupDateTypeValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsBadgeSizeValues {\n  Small = 'small',\n  Medium = 'medium',\n  Large = 'large',\n}\nexport type HdsBadgeSizes = `${HdsBadgeSizeValues}`;\n\nexport enum HdsBadgeTypeValues {\n  Filled = 'filled',\n  Inverted = 'inverted',\n  Outlined = 'outlined',\n}\nexport type HdsBadgeTypes = `${HdsBadgeTypeValues}`;\n\nexport enum HdsBadgeColorValues {\n  Neutral = 'neutral',\n  NeutralDarkMode = 'neutral-dark-mode',\n  Highlight = 'highlight',\n  Success = 'success',\n  Warning = 'warning',\n  Critical = 'critical',\n}\nexport type HdsBadgeColors = `${HdsBadgeColorValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nimport HdsTextBody from '../../text/body.gts';\n\nimport type { HdsTextBodySignature } from '../../text/body.gts';\n\nexport interface HdsFormErrorMessageSignature {\n  Blocks: {\n    default: [];\n  };\n  Element: HdsTextBodySignature['Element'];\n}\n\nconst HdsFormErrorMessage: TemplateOnlyComponent<HdsFormErrorMessageSignature> =\n  <template>\n    <HdsTextBody\n      class=\"hds-form-error__message\"\n      @tag=\"p\"\n      @size=\"100\"\n      @weight=\"medium\"\n      ...attributes\n    >\n      {{yield}}\n    </HdsTextBody>\n  </template>;\n\nexport default HdsFormErrorMessage;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { element } from 'ember-element-helper';\nimport style from 'ember-style-modifier';\n\nimport type { AvailableTagNames, AvailableElements } from './types.ts';\n\nexport interface HdsLayoutFlexItemSignature {\n  Args: {\n    tag?: AvailableTagNames;\n    basis?: string | 0;\n    grow?: boolean | number | string;\n    shrink?: boolean | number | string;\n    // TODO final name TBD\n    enableCollapseBelowContentSize?: boolean;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: AvailableElements;\n}\n\nexport default class HdsLayoutFlexItem extends Component<HdsLayoutFlexItemSignature> {\n  get componentTag(): AvailableTagNames {\n    return this.args.tag ?? 'div';\n  }\n\n  get inlineStyles(): Record<string, unknown> {\n    const inlineStyles: {\n      'flex-basis'?: string;\n      'flex-grow'?: string;\n      'flex-shrink'?: string;\n    } = {};\n\n    // we handle all non-zero cases of `basis` values via inline styles\n    if (typeof this.args.basis === 'string') {\n      inlineStyles['flex-basis'] = this.args.basis;\n    }\n\n    // we handle non-standard cases of `grow` values via inline styles\n    if (typeof this.args.grow === 'number' && this.args.grow > 1) {\n      // the `{{style}}` modifier accepts only strings\n      inlineStyles['flex-grow'] = this.args.grow.toString();\n    } else if (typeof this.args.grow === 'string') {\n      inlineStyles['flex-grow'] = this.args.grow;\n    }\n\n    // we handle non-standard cases of `shrink` values via inline styles\n    if (typeof this.args.shrink === 'number' && this.args.shrink > 1) {\n      // the `{{style}}` modifier accepts only strings\n      inlineStyles['flex-shrink'] = this.args.shrink.toString();\n    } else if (typeof this.args.shrink === 'string') {\n      inlineStyles['flex-shrink'] = this.args.shrink;\n    }\n\n    return inlineStyles;\n  }\n\n  get classNames() {\n    const classes = ['hds-layout-flex-item'];\n\n    // add a class based on the @basis argument (if set to `0`)\n    if (this.args.basis === 0) {\n      classes.push('hds-layout-flex-item--basis-0');\n    }\n\n    // add a class based on the @grow argument (if set to `0/1` or `true/false`)\n    if (this.args.grow === 0 || this.args.grow === false) {\n      classes.push('hds-layout-flex-item--grow-0');\n    } else if (this.args.grow === 1 || this.args.grow === true) {\n      classes.push('hds-layout-flex-item--grow-1');\n    }\n\n    // add a class based on the @shrink argument (if set to `0/1` or `true/false`)\n    if (this.args.shrink === 0 || this.args.shrink === false) {\n      classes.push('hds-layout-flex-item--shrink-0');\n    } else if (this.args.shrink === 1 || this.args.shrink === true) {\n      classes.push('hds-layout-flex-item--shrink-1');\n    }\n\n    // add a class based on the @enableCollapseBelowContentSize argument (applies a `min-width: 0`)\n    if (this.args.enableCollapseBelowContentSize) {\n      classes.push('hds-layout-flex-item--enable-collapse-below-content-size');\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    {{#let (element this.componentTag) as |Tag|}}<Tag\n        class={{this.classNames}}\n        {{style this.inlineStyles}}\n        ...attributes\n      >{{yield}}</Tag>{{/let}}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\n\nimport HdsDropdown from '../dropdown/index.gts';\n\nimport type { HdsDropdownSignature } from '../dropdown/index.gts';\nimport type { HdsDropdownToggleButtonSignature } from '../dropdown/toggle/button.gts';\nimport type HdsIntlService from '../../../services/hds-intl.ts';\n\nexport interface HdsFilterBarActionsDropdownSignature {\n  Args: Pick<\n    HdsDropdownSignature['Args'],\n    | 'enableCollisionDetection'\n    | 'width'\n    | 'height'\n    | 'preserveContentInDom'\n    | 'onClose'\n    | 'onFocusOut'\n  > & {\n    toggleButtonText?: HdsDropdownToggleButtonSignature['Args']['text'];\n    toggleButtonIcon?: HdsDropdownToggleButtonSignature['Args']['icon'];\n  };\n  Blocks: {\n    default: [HdsDropdownSignature['Blocks']['default'][0]];\n  };\n  Element: HdsDropdownSignature['Element'];\n}\n\nexport default class HdsFilterBarActionsDropdown extends Component<HdsFilterBarActionsDropdownSignature> {\n  @service hdsIntl!: HdsIntlService;\n\n  get toggleButtonText(): string {\n    return (\n      this.args.toggleButtonText ??\n      this.hdsIntl.t(\n        'hds.components.filter-bar.actions-dropdown.toggle-button',\n        {\n          default: 'Actions',\n        }\n      )\n    );\n  }\n\n  <template>\n    <HdsDropdown\n      @listPosition=\"bottom-right\"\n      @enableCollisionDetection={{@enableCollisionDetection}}\n      @width={{@width}}\n      @height={{@height}}\n      @preserveContentInDom={{@preserveContentInDom}}\n      @onClose={{@onClose}}\n      @onFocusOut={{@onFocusOut}}\n      class=\"hds-filter-bar__actions-dropdown\"\n      ...attributes\n      as |D|\n    >\n      <D.ToggleButton\n        @icon={{@toggleButtonIcon}}\n        @text={{this.toggleButtonText}}\n        @color=\"secondary\"\n        @size=\"small\"\n      />\n      {{yield D}}\n    </HdsDropdown>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { guidFor } from '@ember/object/internals';\n\nimport type { ModifierLike } from '@glint/template';\n\nimport {\n  HdsDropdownToggleButtonSizeValues,\n  HdsDropdownToggleButtonColorValues,\n} from './types.ts';\nimport HdsBadge from '../../badge/index.gts';\nimport HdsBadgeCount from '../../badge-count/index.gts';\nimport HdsIcon from '../../icon/index.gts';\nimport HdsDropdownToggleChevron from '../toggle/chevron.gts';\n\nimport type { HdsIconSignature } from '../../icon/index.gts';\nimport type { HdsBadgeSignature } from '../../badge/index.gts';\nimport type { HdsBadgeCountSignature } from '../../badge-count/index.gts';\nimport type {\n  HdsDropdownToggleButtonSizes,\n  HdsDropdownToggleButtonColors,\n} from './types.ts';\nimport type { SetupPrimitiveToggleModifier } from '../../popover-primitive/index.gts';\n\nexport const DEFAULT_SIZE = HdsDropdownToggleButtonSizeValues.Medium;\nexport const DEFAULT_COLOR = HdsDropdownToggleButtonColorValues.Primary;\nexport const SIZES: HdsDropdownToggleButtonSizes[] = Object.values(\n  HdsDropdownToggleButtonSizeValues\n);\nexport const COLORS: HdsDropdownToggleButtonColors[] = Object.values(\n  HdsDropdownToggleButtonColorValues\n);\n\nexport interface HdsDropdownToggleButtonSignature {\n  Args: {\n    badge?: HdsBadgeSignature['Args']['text'];\n    badgeIcon?: HdsBadgeSignature['Args']['icon'];\n    color?: HdsDropdownToggleButtonColors;\n    count?: HdsBadgeCountSignature['Args']['text'];\n    icon?: HdsIconSignature['Args']['name'];\n    isFullWidth?: boolean;\n    isOpen?: boolean;\n    size?: HdsDropdownToggleButtonSizes;\n    text: string;\n    setupPrimitiveToggle?: ModifierLike<SetupPrimitiveToggleModifier>;\n  };\n  Element: HTMLButtonElement;\n}\n\nexport default class HdsDropdownToggleButton extends Component<HdsDropdownToggleButtonSignature> {\n  private _toggleButtonId = 'toggle-button-' + guidFor(this);\n\n  get text(): string {\n    const { text } = this.args;\n\n    assert(\n      '@text for \"Hds::Dropdown::Toggle::Button\" must have a valid value',\n      text !== undefined\n    );\n\n    return text;\n  }\n\n  get size(): HdsDropdownToggleButtonSizes {\n    const { size = DEFAULT_SIZE } = this.args;\n\n    assert(\n      `@size for \"Hds::Dropdown::Toggle::Button\" must be one of the following: ${SIZES.join(\n        ', '\n      )}; received: ${size}`,\n      SIZES.includes(size)\n    );\n\n    return size;\n  }\n\n  get color(): HdsDropdownToggleButtonColors {\n    const { color = DEFAULT_COLOR } = this.args;\n\n    assert(\n      `@color for \"Hds::Dropdown::Toggle::Button\" must be one of the following: ${COLORS.join(\n        ', '\n      )}; received: ${color}`,\n      COLORS.includes(color)\n    );\n\n    return color;\n  }\n\n  get isFullWidth(): boolean {\n    return this.args.isFullWidth ?? false;\n  }\n\n  get badgeType(): HdsBadgeCountSignature['Args']['type'] {\n    return this.color === 'primary' ? 'filled' : 'inverted';\n  }\n\n  get classNames(): string {\n    const classes = ['hds-dropdown-toggle-button'];\n\n    // add a class based on the @size argument\n    classes.push(`hds-dropdown-toggle-button--size-${this.size}`);\n\n    // add a class based on the @color argument\n    classes.push(`hds-dropdown-toggle-button--color-${this.color}`);\n\n    // add a class based on the @isFullWidth argument\n    if (this.isFullWidth) {\n      classes.push('hds-dropdown-toggle-button--width-full');\n    }\n\n    // add a class based on the @isOpen argument\n    if (this.args.isOpen) {\n      classes.push('hds-dropdown-toggle-button--is-open');\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <button\n      class={{this.classNames}}\n      id={{this._toggleButtonId}}\n      ...attributes\n      type=\"button\"\n      aria-expanded={{if @isOpen \"true\" \"false\"}}\n      {{@setupPrimitiveToggle}}\n    >\n      {{#if @icon}}\n        <div class=\"hds-dropdown-toggle-button__icon\">\n          <HdsIcon @name={{@icon}} @stretched={{true}} />\n        </div>\n      {{/if}}\n      <div class=\"hds-dropdown-toggle-button__text\">\n        {{this.text}}\n      </div>\n      {{#if @count}}\n        <HdsBadgeCount\n          @text={{@count}}\n          @size=\"small\"\n          @type={{this.badgeType}}\n          class=\"hds-dropdown-toggle-button__count\"\n        />\n      {{/if}}\n      {{#if @badge}}\n        <HdsBadge\n          @text={{@badge}}\n          @icon={{@badgeIcon}}\n          @size=\"small\"\n          @type={{this.badgeType}}\n          class=\"hds-dropdown-toggle-button__badge\"\n        />\n      {{/if}}\n      <HdsDropdownToggleChevron />\n    </button>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsDropdownToggleIconSizeValues {\n  Small = 'small',\n  Medium = 'medium',\n}\nexport type HdsDropdownToggleIconSizes = `${HdsDropdownToggleIconSizeValues}`;\n\nexport enum HdsDropdownToggleButtonSizeValues {\n  Small = 'small',\n  Medium = 'medium',\n}\nexport type HdsDropdownToggleButtonSizes =\n  `${HdsDropdownToggleButtonSizeValues}`;\n\nexport enum HdsDropdownToggleButtonColorValues {\n  Primary = 'primary',\n  Secondary = 'secondary',\n}\nexport type HdsDropdownToggleButtonColors =\n  `${HdsDropdownToggleButtonColorValues}`;\n\nexport enum HdsDropdownToggleIconAllowedIconValues {\n  MoreHorizontal = 'more-horizontal',\n  MoreVertical = 'more-vertical',\n}\nexport type HdsDropdownToggleIconAllowedIcons =\n  `${HdsDropdownToggleIconAllowedIconValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { tracked } from '@glimmer/tracking';\nimport { on } from '@ember/modifier';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didUpdate from '@ember/render-modifiers/modifiers/did-update';\n\nimport type { ModifierLike } from '@glint/template';\nimport type Owner from '@ember/owner';\n\nimport HdsIcon from '../../icon/index.gts';\nimport HdsDropdownToggleChevron from './chevron.gts';\nimport {\n  HdsDropdownToggleIconSizeValues,\n  HdsDropdownToggleIconAllowedIconValues,\n} from './types.ts';\n\nimport type { HdsIconSignature } from '../../icon/index.gts';\nimport type { HdsDropdownToggleIconSizes } from './types.ts';\nimport type { SetupPrimitiveToggleModifier } from '../../popover-primitive/index.gts';\n\nexport const DEFAULT_SIZE = HdsDropdownToggleIconSizeValues.Medium;\nexport const SIZES: HdsDropdownToggleIconSizes[] = Object.values(\n  HdsDropdownToggleIconSizeValues\n);\n\nexport const ALLOWED_ICON_LIST: HdsIconSignature['Args']['name'][] =\n  Object.values(HdsDropdownToggleIconAllowedIconValues);\n\nexport interface HdsDropdownToggleIconSignature {\n  Args: {\n    hasChevron?: boolean;\n    icon?: HdsIconSignature['Args']['name'];\n    imageSrc?: string;\n    isOpen?: boolean;\n    size?: HdsDropdownToggleIconSizes;\n    text: string;\n    setupPrimitiveToggle?: ModifierLike<SetupPrimitiveToggleModifier>;\n  };\n  Element: HTMLButtonElement;\n}\n\nexport default class HdsDropdownToggleIcon extends Component<HdsDropdownToggleIconSignature> {\n  @tracked private _hasImage = true;\n\n  constructor(owner: Owner, args: HdsDropdownToggleIconSignature['Args']) {\n    super(owner, args);\n    if (!(this.args.icon || this.args.imageSrc)) {\n      assert(\n        '@icon or @imageSrc must be defined for \"Hds::Dropdown::Toggle::Icon\"'\n      );\n    }\n  }\n\n  @action\n  onDidUpdateImageSrc(): void {\n    this._hasImage = true;\n  }\n\n  @action\n  onImageLoadError(): void {\n    this._hasImage = false;\n  }\n\n  get text(): string {\n    const { text } = this.args;\n\n    assert(\n      '@text for \"Hds::Dropdown::Toggle::Icon\" must have a valid value',\n      text !== undefined\n    );\n\n    return text;\n  }\n\n  get size(): HdsDropdownToggleIconSizes {\n    const { size = DEFAULT_SIZE } = this.args;\n\n    assert(\n      `@size for \"Hds::Dropdown::Toggle::Icon\" must be one of the following: ${SIZES.join(\n        ', '\n      )}; received: ${size}`,\n      SIZES.includes(size)\n    );\n\n    return size;\n  }\n\n  get iconSize(): HdsIconSignature['Args']['size'] {\n    if (this.args.size === 'medium' && !this.hasChevron) {\n      // in this special case we use a larger SVG\n      return '24';\n    } else {\n      // this is the default size (notice: for the \"small\" variant with chevron, we set the actual size to `12px` via CSS)\n      return '16';\n    }\n  }\n\n  get hasChevron(): boolean {\n    if (\n      this.args.icon &&\n      !ALLOWED_ICON_LIST.includes(this.args.icon) &&\n      this.args.hasChevron === false\n    ) {\n      assert(\n        `@hasChevron for \"Hds::Dropdown::Toggle::Icon\" must be true unless the icon is one of the following: ${ALLOWED_ICON_LIST.join(\n          ', '\n        )}; received: ${this.args.icon}`\n      );\n    }\n\n    return this.args.hasChevron ?? true;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-dropdown-toggle-icon'];\n\n    // add a class based on the @size argument\n    classes.push(`hds-dropdown-toggle-icon--size-${this.size}`);\n\n    // add a class based on the @isOpen argument\n    if (this.args.isOpen) {\n      classes.push('hds-dropdown-toggle-icon--is-open');\n    }\n\n    // add a class based on the @hasChevron argument\n    if (this.hasChevron) {\n      classes.push('hds-dropdown-toggle-icon--has-chevron');\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <button\n      class={{this.classNames}}\n      aria-label={{this.text}}\n      ...attributes\n      aria-expanded={{if @isOpen \"true\" \"false\"}}\n      {{@setupPrimitiveToggle}}\n      {{didUpdate this.onDidUpdateImageSrc @imageSrc}}\n      type=\"button\"\n    >\n      <div class=\"hds-dropdown-toggle-icon__wrapper\">\n        {{#if @imageSrc}}\n          {{#if this._hasImage}}\n            <img\n              src={{@imageSrc}}\n              alt=\"\"\n              role=\"presentation\"\n              {{on \"error\" this.onImageLoadError}}\n            />\n          {{else}}\n            <HdsIcon @name=\"user\" @size={{this.iconSize}} />\n          {{/if}}\n        {{else if @icon}}\n          <HdsIcon @name={{@icon}} @size={{this.iconSize}} />\n        {{/if}}\n      </div>\n      {{#if this.hasChevron}}\n        <HdsDropdownToggleChevron />\n      {{/if}}\n    </button>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsDropdownHeaderSignature {\n  Args: {\n    hasDivider?: boolean;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLDivElement;\n}\n\nconst HdsDropdownHeader: TemplateOnlyComponent<HdsDropdownHeaderSignature> =\n  <template>\n    <div\n      class=\"hds-dropdown__header\n        {{if @hasDivider 'hds-dropdown__header--with-divider'}}\"\n      ...attributes\n    >\n      {{yield}}\n    </div>\n  </template>;\n\nexport default HdsDropdownHeader;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\n\nimport { getElementId } from '../../../../utils/hds-get-element-id.ts';\nimport HdsFormCheckboxBase from '../../form/checkbox/base.gts';\nimport HdsIcon from '../../icon/index.gts';\nimport HdsTextBody from '../../text/body.gts';\n\nimport type { HdsIconSignature } from '../../icon/index.ts';\nimport type { HdsFormCheckboxBaseSignature } from '../../form/checkbox/base.gts';\n\nexport interface HdsDropdownListItemCheckboxSignature {\n  Args: HdsFormCheckboxBaseSignature['Args'] & {\n    count?: string | number;\n    icon?: HdsIconSignature['Args']['name'];\n    id?: string;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HdsFormCheckboxBaseSignature['Element'];\n}\n\nexport default class HdsDropdownListItemCheckbox extends Component<HdsDropdownListItemCheckboxSignature> {\n  get id(): string {\n    return getElementId(this);\n  }\n\n  <template>\n    <li class=\"hds-dropdown-list-item hds-dropdown-list-item--variant-checkbox\">\n      <label\n        class=\"hds-dropdown-list-item__label hds-typography-body-200\"\n        for={{this.id}}\n      >\n        <HdsFormCheckboxBase\n          class=\"hds-dropdown-list-item__control\"\n          id={{this.id}}\n          @value={{@value}}\n          ...attributes\n        />\n        {{#if @icon}}\n          <span class=\"hds-dropdown-list-item__icon\">\n            <HdsIcon @name={{@icon}} />\n          </span>\n        {{/if}}\n        <HdsTextBody\n          @tag=\"span\"\n          @size=\"200\"\n          @weight=\"medium\"\n          class=\"hds-dropdown-list-item__text-content\"\n        >{{yield}}</HdsTextBody>\n        {{#if @count}}\n          <HdsTextBody\n            @tag=\"span\"\n            @size=\"100\"\n            @weight=\"medium\"\n            class=\"hds-dropdown-list-item__count\"\n          >{{@count}}</HdsTextBody>\n        {{/if}}\n      </label>\n    </li>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { array } from '@ember/helper';\n\nimport { hdsLinkToModels } from '../../../../helpers/hds-link-to-models.ts';\nimport { hdsLinkToQuery } from '../../../../helpers/hds-link-to-query.ts';\nimport HdsIcon from '../../icon/index.gts';\nimport HdsTextBody from '../../text/body.gts';\nimport HdsInteractive from '../../interactive/index.gts';\n\nimport type { HdsIconSignature } from '../../icon/index.gts';\nimport type { HdsInteractiveSignature } from '../../interactive/index.gts';\n\nexport interface HdsDropdownListItemCheckmarkSignature {\n  Args: HdsInteractiveSignature['Args'] & {\n    count?: string | number;\n    icon?: HdsIconSignature['Args']['name'];\n    selected?: boolean;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HdsInteractiveSignature['Element'];\n}\n\nexport default class HdsDropdownListItemCheckmark extends Component<HdsDropdownListItemCheckmarkSignature> {\n  get classNames(): string {\n    const classes = [\n      'hds-dropdown-list-item',\n      'hds-dropdown-list-item--color-action',\n      'hds-dropdown-list-item--variant-checkmark',\n    ];\n\n    // add a class based on the @selected argument\n    if (this.args.selected) {\n      classes.push('hds-dropdown-list-item--variant-checkmark-selected');\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    {{! template-lint-disable no-invalid-role require-context-role require-presentational-children }}\n    <li class={{this.classNames}} role=\"none\">\n      <HdsInteractive\n        @current-when={{@current-when}}\n        @models={{hdsLinkToModels (array @model @models)}}\n        @query={{hdsLinkToQuery (array @query)}}\n        @replace={{@replace}}\n        @route={{@route}}\n        @isRouteExternal={{@isRouteExternal}}\n        @href={{@href}}\n        @isHrefExternal={{@isHrefExternal}}\n        class=\"hds-dropdown-list-item__interactive\"\n        ...attributes\n        role=\"option\"\n        aria-selected={{if @selected \"true\" \"false\"}}\n      >\n        {{#if @icon}}\n          <span\n            class=\"hds-dropdown-list-item__interactive-icon hds-dropdown-list-item__interactive-icon--leading\"\n          >\n            <HdsIcon @name={{@icon}} />\n          </span>\n        {{/if}}\n        <HdsTextBody\n          @tag=\"span\"\n          @size=\"200\"\n          @weight=\"medium\"\n          class=\"hds-dropdown-list-item__interactive-text\"\n        >{{yield}}</HdsTextBody>\n        {{#if @count}}\n          <HdsTextBody\n            class=\"hds-dropdown-list-item__count\"\n            @tag=\"span\"\n            @size=\"100\"\n            @weight=\"medium\"\n            @color=\"faint\"\n          >{{@count}}</HdsTextBody>\n        {{/if}}\n        <span class=\"hds-dropdown-list-item__checkmark\">\n          {{#if @selected}}\n            <HdsIcon\n              class=\"hds-dropdown-list-item__checkmark-icon\"\n              @name=\"check\"\n            />\n          {{/if}}\n        </span>\n      </HdsInteractive>\n    </li>\n    {{! template-lint-enable no-invalid-role require-context-role require-presentational-children }}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\n\nimport HdsTextBody from '../../text/body.gts';\nimport HdsCopySnippet from '../../copy/snippet/index.gts';\n\nimport type { HdsCopySnippetSignature } from '../../copy/snippet/index.gts';\n\nexport interface HdsDropdownListItemCopyItemSignature {\n  Args: {\n    copyItemTitle?: string;\n    isTruncated?: HdsCopySnippetSignature['Args']['isTruncated'];\n    text: HdsCopySnippetSignature['Args']['textToCopy'];\n  };\n  Element: HTMLLIElement;\n}\n\nexport default class HdsDropdownListItemCopyItem extends Component<HdsDropdownListItemCopyItemSignature> {\n  get text(): HdsCopySnippetSignature['Args']['textToCopy'] {\n    const { text } = this.args;\n\n    assert(\n      '@text for \"Hds::Dropdown::ListItem::CopyItem\" must have a valid value',\n      text !== undefined\n    );\n\n    return text;\n  }\n\n  get isTruncated(): HdsCopySnippetSignature['Args']['isTruncated'] {\n    const { isTruncated = true } = this.args;\n\n    return isTruncated;\n  }\n\n  get classNames(): string {\n    const classes = [\n      'hds-dropdown-list-item',\n      'hds-dropdown-list-item--variant-copy-item',\n    ];\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <li class={{this.classNames}} ...attributes>\n      {{#if @copyItemTitle}}\n        <HdsTextBody\n          class=\"hds-dropdown-list-item__copy-item-title\"\n          @tag=\"div\"\n          @size=\"100\"\n          @weight=\"semibold\"\n          @color=\"faint\"\n        >{{@copyItemTitle}}</HdsTextBody>\n      {{/if}}\n      <HdsCopySnippet\n        @color=\"secondary\"\n        @textToCopy={{this.text}}\n        @isTruncated={{this.isTruncated}}\n      />\n    </li>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { tracked } from '@glimmer/tracking';\nimport { concat } from '@ember/helper';\nimport { service } from '@ember/service';\n\nimport { HdsCopySnippetColorValues } from './types.ts';\nimport HdsTextCode from '../../text/code.gts';\nimport HdsIcon from '../../icon/index.gts';\nimport hdsClipboard from '../../../../modifiers/hds-clipboard.ts';\nimport hdsT from '../../../../helpers/hds-t.ts';\n\nimport type { HdsCopySnippetColors } from './types.ts';\nimport type { HdsClipboardModifierSignature } from '../../../../modifiers/hds-clipboard.ts';\nimport type { HdsIconSignature } from '../../icon/index.gts';\nimport type HdsIntlService from '../../../../services/hds-intl';\n\nexport const DEFAULT_COLOR = HdsCopySnippetColorValues.Primary;\nexport const COLORS: HdsCopySnippetColors[] = Object.values(\n  HdsCopySnippetColorValues\n);\n\nexport const DEFAULT_ICON = 'clipboard-copy';\nexport const SUCCESS_ICON = 'clipboard-checked';\nexport const ERROR_ICON = 'clipboard-x';\nexport const DEFAULT_STATUS = 'idle';\n\nexport interface HdsCopySnippetSignature {\n  Args: {\n    color?: HdsCopySnippetColors;\n    isFullWidth?: boolean;\n    textToCopy: HdsClipboardModifierSignature['Args']['Named']['text'];\n    isTruncated?: boolean;\n    onSuccess?: HdsClipboardModifierSignature['Args']['Named']['onSuccess'];\n    onError?: HdsClipboardModifierSignature['Args']['Named']['onError'];\n    ariaMessageText?: string;\n  };\n  Element: HTMLButtonElement;\n}\n\nexport default class HdsCopySnippet extends Component<HdsCopySnippetSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  @tracked private _status = DEFAULT_STATUS;\n  @tracked private _timer: ReturnType<typeof setTimeout> | undefined;\n\n  get textToShow(): string {\n    const { textToCopy = '' } = this.args;\n\n    if (typeof textToCopy === 'string') {\n      return textToCopy;\n    } else {\n      return textToCopy.toString();\n    }\n  }\n\n  get icon(): HdsIconSignature['Args']['name'] {\n    let icon: HdsIconSignature['Args']['name'] = DEFAULT_ICON;\n    if (this._status === 'success') {\n      icon = SUCCESS_ICON;\n    } else if (this._status === 'error') {\n      icon = ERROR_ICON;\n    }\n    return icon;\n  }\n\n  get color(): HdsCopySnippetColors {\n    const { color = DEFAULT_COLOR } = this.args;\n\n    assert(\n      `@color for \"Hds::Copy::Snippet\" must be one of the following: ${COLORS.join(\n        ', '\n      )}; received: ${color}`,\n      COLORS.includes(color)\n    );\n\n    return color;\n  }\n\n  get isFullWidth(): boolean {\n    return this.args.isFullWidth ?? false;\n  }\n\n  get isTruncated(): boolean {\n    return this.args.isTruncated ?? false;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-copy-snippet'];\n\n    // add a class based on the @color argument\n    classes.push(`hds-copy-snippet--color-${this.color}`);\n\n    // add a class based on the tracked status (idle/success/error)\n    classes.push(`hds-copy-snippet--status-${this._status}`);\n\n    // add a class based on the @isTruncated argument\n    if (this.isTruncated) {\n      classes.push('hds-copy-snippet--is-truncated');\n    }\n\n    // add a class based on the @isFullWidth argument\n    if (this.isFullWidth) {\n      classes.push('hds-copy-snippet--width-full');\n    }\n\n    return classes.join(' ');\n  }\n\n  get ariaMessageText(): string {\n    if (this._status === 'success') {\n      return (\n        this.args.ariaMessageText ??\n        this.hdsIntl.t(\n          'hds.components.copy-snippet.aria-message-text.success',\n          {\n            default: 'Copied to clipboard',\n          }\n        )\n      );\n    } else if (this._status === 'error') {\n      return this.hdsIntl.t(\n        'hds.components.copy-snippet.aria-message-text.error',\n        {\n          default: 'Failed to copy to clipboard',\n        }\n      );\n    } else {\n      return '';\n    }\n  }\n\n  onSuccess = (\n    args: HdsClipboardModifierSignature['Args']['Named']['onSuccess']\n  ): void => {\n    this._status = 'success';\n    this.resetStatusDelayed();\n\n    const { onSuccess } = this.args;\n\n    if (typeof onSuccess === 'function') {\n      onSuccess(args);\n    }\n  };\n\n  onError = (\n    args: HdsClipboardModifierSignature['Args']['Named']['onError']\n  ): void => {\n    this._status = 'error';\n    this.resetStatusDelayed();\n\n    const { onError } = this.args;\n\n    if (typeof onError === 'function') {\n      onError(args);\n    }\n  };\n\n  resetStatusDelayed = (): void => {\n    clearTimeout(this._timer);\n    // make it fade back to the default state\n    this._timer = setTimeout((): void => {\n      this._status = DEFAULT_STATUS;\n    }, 1500);\n  };\n\n  <template>\n    <button\n      type=\"button\"\n      class={{this.classNames}}\n      {{hdsClipboard\n        text=@textToCopy\n        onSuccess=this.onSuccess\n        onError=this.onError\n      }}\n      aria-label={{hdsT\n        \"hds.components.copy-snippet.button.aria-label\"\n        textToCopy=@textToCopy\n        default=(concat \"copy \" @textToCopy)\n      }}\n      ...attributes\n    >\n      <HdsTextCode class=\"hds-copy-snippet__text\" @tag=\"span\" @size=\"100\">\n        {{this.textToShow}}\n      </HdsTextCode>\n      <HdsIcon @name={{this.icon}} class=\"hds-copy-snippet__icon\" />\n    </button>\n    <span class=\"sr-only\" aria-live=\"polite\">{{this.ariaMessageText}}</span>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\n\nimport HdsText from './index.gts';\nimport { HdsTextSizeValues, HdsTextWeightValues } from './types.ts';\nimport type {\n  HdsTextAligns,\n  HdsTextColors,\n  HdsTextTags,\n  HdsTextWeights,\n} from './types.ts';\n\n// notice: only some combinations of size + font-weight are allowed (per design specs)\n// see: https://www.figma.com/file/oQsMzMMnynfPWpMEt91OpH/HDS-Product---Foundations?node-id=1262%3A9192\n\n// Allow consumers to provide either string or number representation of size\ntype HdsTextCodeSizeNumber = Extract<\n  HdsTextSizeValues,\n  | HdsTextSizeValues.OneHundred\n  | HdsTextSizeValues.TwoHundred\n  | HdsTextSizeValues.ThreeHundred\n>;\ntype HdsTextCodeSizeString = `${HdsTextCodeSizeNumber}`;\nexport type HdsTextCodeSizes = HdsTextCodeSizeNumber | HdsTextCodeSizeString;\nexport const SIZES: HdsTextCodeSizes[] = [\n  HdsTextSizeValues.ThreeHundred,\n  HdsTextSizeValues.TwoHundred,\n  HdsTextSizeValues.OneHundred,\n];\nexport const DEFAULT_SIZE = HdsTextSizeValues.TwoHundred;\n\nexport const DEFAULT_WEIGHT = HdsTextWeightValues.Regular;\nexport type HdsTextCodeWeight = Extract<HdsTextWeights, 'regular' | 'bold'>;\nexport const WEIGHTS_PER_SIZE: Record<HdsTextCodeSizes, HdsTextCodeWeight[]> = {\n  [HdsTextSizeValues.ThreeHundred]: [\n    HdsTextWeightValues.Regular,\n    HdsTextWeightValues.Bold,\n  ],\n  [HdsTextSizeValues.TwoHundred]: [\n    HdsTextWeightValues.Regular,\n    HdsTextWeightValues.Bold,\n  ],\n  [HdsTextSizeValues.OneHundred]: [\n    HdsTextWeightValues.Regular,\n    HdsTextWeightValues.Bold,\n  ],\n};\n\nexport interface HdsTextCodeSignature {\n  Args: {\n    size?: HdsTextCodeSizes;\n    tag?: HdsTextTags;\n    weight?: HdsTextCodeWeight;\n    align?: HdsTextAligns;\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n    color?: string | HdsTextColors;\n  };\n  Element:\n    | HTMLSpanElement\n    | HTMLHeadingElement\n    | HTMLParagraphElement\n    | HTMLDivElement;\n  Blocks: {\n    default: [];\n  };\n}\n\nexport default class HdsTextCode extends Component<HdsTextCodeSignature> {\n  // Sets the \"size\" for the text\n  get size(): HdsTextCodeSizes {\n    let { size = DEFAULT_SIZE } = this.args;\n\n    // let's be a bit forgiving with the consumers\n    if (typeof size === 'string') {\n      size = parseInt(size, 10);\n    }\n\n    assert(\n      `@size for \"Hds::Text::Code\" must be one of the following: ${SIZES.join(\n        ', '\n      )}; received: ${size}`,\n      SIZES.includes(size)\n    );\n\n    return size;\n  }\n\n  // Sets the \"weight\" for the text\n  get weight(): HdsTextCodeWeight {\n    const { weight = DEFAULT_WEIGHT } = this.args;\n\n    const weights = WEIGHTS_PER_SIZE[this.size];\n\n    assert(\n      `@weight for \"Hds::Text::Code\" with @size=${\n        this.size\n      } must be one of the following: ${weights.join(\n        ', '\n      )}; received: ${weight}`,\n      weights.includes(weight)\n    );\n\n    return weight;\n  }\n\n  <template>\n    <HdsText\n      @group=\"code\"\n      @size={{this.size}}\n      @weight={{this.weight}}\n      @align={{@align}}\n      @color={{@color}}\n      @tag={{@tag}}\n      ...attributes\n    >{{yield}}</HdsText>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\n\nimport HdsTextBody from '../../text/body.gts';\n\nimport type { HdsTextBodySignature } from '../../text/body.gts';\n\nexport interface HdsDropdownListItemDescriptionSignature {\n  Args: {\n    text: string;\n  };\n  Element: HdsTextBodySignature['Element'];\n}\n\nexport default class HdsDropdownListItemDescription extends Component<HdsDropdownListItemDescriptionSignature> {\n  get text(): string {\n    const { text } = this.args;\n\n    assert(\n      '@text for \"Hds::Dropdown::ListItem::Description\" must have a valid value',\n      text !== undefined\n    );\n\n    return text;\n  }\n\n  <template>\n    <HdsTextBody\n      class=\"hds-dropdown-list-item hds-dropdown-list-item--variant-description\"\n      @tag=\"li\"\n      @size=\"100\"\n      @weight=\"regular\"\n      @color=\"faint\"\n      ...attributes\n    >\n      {{this.text}}\n    </HdsTextBody>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsDropdownListItemGenericSignature {\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLLIElement;\n}\n\nconst HdsDropdownListItemGeneric: TemplateOnlyComponent<HdsDropdownListItemGenericSignature> =\n  <template>\n    <li\n      class=\"hds-dropdown-list-item hds-dropdown-list-item--variant-generic\"\n      ...attributes\n    >\n      {{yield}}\n    </li>\n  </template>;\n\nexport default HdsDropdownListItemGeneric;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { array, hash } from '@ember/helper';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport { hdsLinkToModels } from '../../../../helpers/hds-link-to-models.ts';\nimport { hdsLinkToQuery } from '../../../../helpers/hds-link-to-query.ts';\nimport { HdsDropdownListItemInteractiveColorValues } from './types.ts';\nimport HdsTextBody from '../../text/body.gts';\nimport HdsIcon from '../../icon/index.gts';\nimport HdsInteractive from '../../interactive/index.gts';\nimport HdsBadge from '../../badge/index.gts';\n\nimport type { HdsIconSignature } from '../../icon/index.gts';\nimport type { HdsInteractiveSignature } from '../../interactive/index.gts';\nimport type { HdsDropdownListItemInteractiveColors } from './types.ts';\n\nexport const DEFAULT_COLOR = HdsDropdownListItemInteractiveColorValues.Action;\nexport const COLORS: HdsDropdownListItemInteractiveColors[] = Object.values(\n  HdsDropdownListItemInteractiveColorValues\n);\n\nexport interface HdsDropdownListItemInteractiveSignature {\n  Args: HdsInteractiveSignature['Args'] & {\n    color?: HdsDropdownListItemInteractiveColors;\n    icon?: HdsIconSignature['Args']['name'];\n    isLoading?: boolean;\n    trailingIcon?: HdsIconSignature['Args']['name'];\n  };\n  Blocks: {\n    default?: [\n      {\n        Badge?: WithBoundArgs<typeof HdsBadge, 'size'>;\n      },\n    ];\n  };\n  Element: HTMLDivElement | HdsInteractiveSignature['Element'];\n}\n\nexport default class HdsDropdownListItemInteractive extends Component<HdsDropdownListItemInteractiveSignature> {\n  get color(): HdsDropdownListItemInteractiveColors {\n    const { color = DEFAULT_COLOR } = this.args;\n\n    assert(\n      `@color for \"Hds::Dropdown::ListItem::Interactive\" must be one of the following: ${COLORS.join(\n        ', '\n      )}; received: ${color}`,\n      COLORS.includes(color)\n    );\n\n    return color;\n  }\n\n  get classNames(): string {\n    const classes = [\n      'hds-dropdown-list-item',\n      'hds-dropdown-list-item--variant-interactive',\n    ];\n\n    // add a class based on the @color argument\n    classes.push(`hds-dropdown-list-item--color-${this.color}`);\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <li class={{this.classNames}}>\n      {{#if @isLoading}}\n        <div\n          class=\"hds-dropdown-list-item__interactive-loading-wrapper\"\n          ...attributes\n        >\n          <div\n            class=\"hds-dropdown-list-item__interactive-icon hds-dropdown-list-item__interactive-icon--leading\"\n          >\n            <HdsIcon @name=\"loading\" />\n          </div>\n          <HdsTextBody\n            @tag=\"div\"\n            @size=\"100\"\n            @weight=\"regular\"\n            class=\"hds-dropdown-list-item__interactive-text\"\n          >\n            {{yield (hash Badge=(component HdsBadge size=\"small\"))}}\n          </HdsTextBody>\n        </div>\n      {{else}}\n        <HdsInteractive\n          @current-when={{@current-when}}\n          @models={{hdsLinkToModels (array @model @models)}}\n          @query={{hdsLinkToQuery (array @query)}}\n          @replace={{@replace}}\n          @route={{@route}}\n          @isRouteExternal={{@isRouteExternal}}\n          @href={{@href}}\n          @isHrefExternal={{@isHrefExternal}}\n          ...attributes\n        >\n          {{#if @icon}}\n            <span\n              class=\"hds-dropdown-list-item__interactive-icon hds-dropdown-list-item__interactive-icon--leading\"\n            >\n              <HdsIcon @name={{@icon}} />\n            </span>\n          {{/if}}\n          <HdsTextBody\n            class=\"hds-dropdown-list-item__interactive-text\"\n            @tag=\"span\"\n            @size=\"200\"\n            @weight=\"medium\"\n          >\n            {{yield (hash Badge=(component HdsBadge size=\"small\"))}}\n          </HdsTextBody>\n          {{#if @trailingIcon}}\n            <span\n              class=\"hds-dropdown-list-item__interactive-icon hds-dropdown-list-item__interactive-icon--trailing\"\n            >\n              <HdsIcon @name={{@trailingIcon}} />\n            </span>\n          {{/if}}\n        </HdsInteractive>\n      {{/if}}\n    </li>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\n\nimport { getElementId } from '../../../../utils/hds-get-element-id.ts';\nimport HdsFormRadioBase from '../../form/radio/base.gts';\nimport HdsIcon from '../../icon/index.gts';\nimport HdsTextBody from '../../text/body.gts';\n\nimport type { HdsIconSignature } from '../../icon/index.gts';\nimport type { HdsFormRadioBaseSignature } from '../../form/radio/base.gts';\n\nexport interface HdsDropdownListItemRadioSignature {\n  Args: HdsFormRadioBaseSignature['Args'] & {\n    count?: string | number;\n    icon?: HdsIconSignature['Args']['name'];\n    id?: string;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HdsFormRadioBaseSignature['Element'];\n}\n\nexport default class HdsDropdownListItemRadio extends Component<HdsDropdownListItemRadioSignature> {\n  get id(): string {\n    return getElementId(this);\n  }\n\n  <template>\n    <li class=\"hds-dropdown-list-item hds-dropdown-list-item--variant-radio\">\n      <label\n        class=\"hds-dropdown-list-item__label hds-typography-body-200\"\n        for={{this.id}}\n      >\n        <HdsFormRadioBase\n          class=\"hds-dropdown-list-item__control\"\n          id={{this.id}}\n          @value={{@value}}\n          ...attributes\n        />\n        {{#if @icon}}\n          <div class=\"hds-dropdown-list-item__icon\">\n            <HdsIcon @name={{@icon}} />\n          </div>\n        {{/if}}\n        <HdsTextBody\n          @tag=\"span\"\n          @size=\"200\"\n          @weight=\"medium\"\n          class=\"hds-dropdown-list-item__text-content\"\n        >{{yield}}</HdsTextBody>\n        {{#if @count}}\n          <HdsTextBody\n            @tag=\"span\"\n            @size=\"100\"\n            @weight=\"medium\"\n            class=\"hds-dropdown-list-item__count\"\n          >{{@count}}</HdsTextBody>\n        {{/if}}\n      </label>\n    </li>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsDropdownListItemSeparatorSignature {\n  Element: HTMLLIElement;\n}\n\nconst HdsDropdownListItemSeparator: TemplateOnlyComponent<HdsDropdownListItemSeparatorSignature> =\n  <template>\n    <li\n      class=\"hds-dropdown-list-item hds-dropdown-list-item--variant-separator\"\n      aria-hidden=\"true\"\n      role=\"separator\"\n      ...attributes\n    ></li>\n  </template>;\n\nexport default HdsDropdownListItemSeparator;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\n\nimport HdsTextBody from '../../text/body.gts';\n\nimport type { HdsTextBodySignature } from '../../text/body.gts';\n\nexport interface HdsDropdownListItemTitleSignature {\n  Args: {\n    text: string;\n  };\n  Element: HdsTextBodySignature['Element'];\n}\n\nexport default class HdsDropdownListItemTitle extends Component<HdsDropdownListItemTitleSignature> {\n  get text(): string {\n    const { text } = this.args;\n\n    assert(\n      '@text for \"Hds::Dropdown::ListItem::Title\" must have a valid value',\n      text !== undefined\n    );\n\n    return text;\n  }\n\n  <template>\n    <HdsTextBody\n      class=\"hds-dropdown-list-item hds-dropdown-list-item--variant-title\"\n      @tag=\"li\"\n      @size=\"100\"\n      @weight=\"semibold\"\n      @color=\"strong\"\n      ...attributes\n    >\n      {{this.text}}\n    </HdsTextBody>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsDropdownFooterSignature {\n  Args: {\n    hasDivider?: boolean;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLDivElement;\n}\n\nconst HdsDropdownFooter: TemplateOnlyComponent<HdsDropdownFooterSignature> =\n  <template>\n    <div\n      class=\"hds-dropdown__footer\n        {{if @hasDivider 'hds-dropdown__footer--with-divider'}}\"\n      ...attributes\n    >\n      {{yield}}\n    </div>\n  </template>;\n\nexport default HdsDropdownFooter;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { modifier } from 'ember-modifier';\nimport style from 'ember-style-modifier';\nimport { hash, fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport hdsT from '../../../helpers/hds-t.ts';\nimport HdsDropdown from '../dropdown/index.gts';\nimport HdsFilterBarFilterGroup from './filter-group/index.gts';\nimport HdsFilterBarTabs from './tabs/index.gts';\nimport HdsButtonSet from '../button-set/index.gts';\nimport HdsButton from '../button/index.gts';\n\nimport type { HdsFilterBarFilters, HdsFilterBarFilter } from './types.ts';\nimport type { HdsDropdownSignature } from '../dropdown/index.gts';\n\nexport const DEFAULT_DROPDOWN_HEIGHT = '600px';\n\nexport interface HdsFilterBarFiltersDropdownSignature {\n  Args: {\n    filters: HdsFilterBarFilters;\n    isLiveFilter?: boolean;\n    height?: string;\n    onFilter?: (filters: HdsFilterBarFilters) => void;\n    onFocusOut?: HdsDropdownSignature['Args']['onFocusOut'];\n  };\n  Blocks: {\n    default: [\n      {\n        FilterGroup?: WithBoundArgs<\n          typeof HdsFilterBarFilterGroup,\n          'tab' | 'panel' | 'filters' | 'onChange'\n        >;\n        close: HdsDropdownSignature['Blocks']['default'][0]['close'];\n      },\n    ];\n  };\n  Element: HdsDropdownSignature['Element'];\n}\n\nexport default class HdsFilterBarFiltersDropdown extends Component<HdsFilterBarFiltersDropdownSignature> {\n  @tracked internalFilters: HdsFilterBarFilters = {};\n\n  private _syncFilters = modifier(() => {\n    const { filters } = this.args;\n    if (filters) {\n      this.internalFilters = this._copyFilters(filters);\n    } else {\n      this.internalFilters = {};\n    }\n  });\n\n  get isLiveFilter(): boolean {\n    return this.args.isLiveFilter ?? false;\n  }\n\n  get dropdownHeightStyle(): Record<string, string> {\n    const heightStyle: { [key: string]: string } = {};\n    heightStyle['--filter-bar-filters-dropdown-height'] =\n      this.args.height ?? DEFAULT_DROPDOWN_HEIGHT;\n    return heightStyle;\n  }\n\n  onFilter = (key: string, keyFilter?: HdsFilterBarFilter): void => {\n    this.internalFilters = this._updateFilter(key, keyFilter);\n\n    if (this.isLiveFilter) {\n      this._applyFilters();\n    }\n  };\n\n  onApply = (closeDropdown: () => void): void => {\n    this._applyFilters(closeDropdown);\n  };\n\n  onClear = (closeDropdown: () => void): void => {\n    const { onFilter } = this.args;\n    this.internalFilters = {};\n\n    if (onFilter && typeof onFilter === 'function') {\n      onFilter(this.internalFilters);\n    }\n\n    if (closeDropdown && typeof closeDropdown === 'function') {\n      closeDropdown();\n    }\n  };\n\n  private _copyFilters = (\n    filters: HdsFilterBarFilters\n  ): HdsFilterBarFilters => {\n    const newFilters = {} as HdsFilterBarFilters;\n\n    // Note: Due to the filters being an Ember object, structuredClone cannot be used here.\n    Object.keys(filters).forEach((k) => {\n      newFilters[k] = JSON.parse(\n        JSON.stringify(filters[k])\n      ) as HdsFilterBarFilter;\n    });\n\n    return newFilters;\n  };\n\n  private _updateFilter = (\n    key: string,\n    keyFilter?: HdsFilterBarFilter\n  ): HdsFilterBarFilters => {\n    const newFilters = this._copyFilters(this.internalFilters);\n    if (keyFilter === undefined) {\n      delete newFilters[key];\n    } else {\n      Object.assign(newFilters, { [key]: keyFilter });\n    }\n\n    return { ...newFilters };\n  };\n\n  private _applyFilters = (closeDropdown?: () => void): void => {\n    const { onFilter } = this.args;\n    if (onFilter && typeof onFilter === 'function') {\n      onFilter(this.internalFilters);\n    }\n\n    if (closeDropdown && typeof closeDropdown === 'function') {\n      closeDropdown();\n    }\n  };\n\n  <template>\n    <HdsDropdown\n      @listPosition=\"bottom-left\"\n      @width=\"600px\"\n      @onFocusOut={{@onFocusOut}}\n      ...attributes\n      class=\"hds-filter-bar__filters-dropdown\"\n      {{style this.dropdownHeightStyle}}\n      {{this._syncFilters}}\n      as |D|\n    >\n      <D.ToggleButton\n        @icon=\"filter\"\n        @text={{hdsT\n          \"hds.components.filter-bar.filters-dropdown.toggle-button\"\n          default=\"Filters\"\n        }}\n        @color=\"secondary\"\n        @size=\"small\"\n      />\n      <D.Generic>\n        <HdsFilterBarTabs as |T|>\n          {{yield\n            (hash\n              FilterGroup=(component\n                HdsFilterBarFilterGroup\n                tab=T.Tab\n                panel=T.Panel\n                onChange=this.onFilter\n                filters=this.internalFilters\n              )\n              close=D.close\n            )\n          }}\n        </HdsFilterBarTabs>\n      </D.Generic>\n      <D.Footer @hasDivider={{true}}>\n        <HdsButtonSet>\n          {{#unless this.isLiveFilter}}\n            <HdsButton\n              @text={{hdsT\n                \"hds.components.filter-bar.filters-dropdown.apply\"\n                default=\"Apply filters\"\n              }}\n              @size=\"small\"\n              {{on \"click\" (fn this.onApply D.close)}}\n            />\n          {{/unless}}\n          <HdsButton\n            @text={{hdsT\n              \"hds.components.filter-bar.filters-dropdown.clear\"\n              default=\"Clear all filters\"\n            }}\n            @color=\"secondary\"\n            @size=\"small\"\n            {{on \"click\" (fn this.onClear D.close)}}\n          />\n        </HdsButtonSet>\n      </D.Footer>\n    </HdsDropdown>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { modifier } from 'ember-modifier';\nimport { on } from '@ember/modifier';\nimport { eq, or } from 'ember-truth-helpers';\nimport { hash } from '@ember/helper';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport hdsT from '../../../../helpers/hds-t.ts';\nimport HdsFilterBarTabsTab from '../tabs/tab.gts';\nimport HdsFilterBarTabsPanel from '../tabs/panel.gts';\nimport HdsFilterBarFilterGroupGeneric from './generic.gts';\nimport HdsFilterBarFilterGroupCheckbox from './checkbox.gts';\nimport HdsFilterBarFilterGroupRadio from './radio.gts';\nimport HdsFilterBarFilterGroupClearButton from './clear-button.gts';\nimport HdsFilterBarFilterGroupDate from './date.gts';\nimport HdsFilterBarFilterGroupNumerical from './numerical.gts';\nimport HdsFormTextInputBase from '../../form/text-input/base.gts';\n\nimport type {\n  HdsFilterBarFilter,\n  HdsFilterBarFilters,\n  HdsFilterBarFilterType,\n  HdsFilterBarData,\n  HdsFilterBarGenericFilterData,\n} from '../types.ts';\n\nexport interface HdsFilterBarFilterGroupSignature {\n  Args: {\n    tab?: WithBoundArgs<typeof HdsFilterBarTabsTab, never>;\n    panel?: WithBoundArgs<typeof HdsFilterBarTabsPanel, never>;\n    key: string;\n    text: string;\n    type: HdsFilterBarFilterType;\n    filters: HdsFilterBarFilters;\n    searchEnabled?: boolean;\n    onChange: (key: string, keyFilter?: HdsFilterBarFilter) => void;\n    onClear?: (key: string) => void;\n  };\n  Blocks: {\n    default: [\n      {\n        Generic?: WithBoundArgs<\n          typeof HdsFilterBarFilterGroupGeneric,\n          'onChange'\n        >;\n        Checkbox?: WithBoundArgs<\n          typeof HdsFilterBarFilterGroupCheckbox,\n          'keyFilter' | 'name' | 'searchValue' | 'onChange'\n        >;\n        Radio?: WithBoundArgs<\n          typeof HdsFilterBarFilterGroupRadio,\n          'keyFilter' | 'name' | 'searchValue' | 'onChange'\n        >;\n      },\n    ];\n  };\n}\n\nexport default class HdsFilterBarFilterGroup extends Component<HdsFilterBarFilterGroupSignature> {\n  @tracked internalFilters: HdsFilterBarData | undefined = undefined;\n  @tracked searchValue: string | undefined = undefined;\n\n  private _setUpFilterPanel = modifier(() => {\n    // Note: Due to the filters being an Ember object, structuredClone cannot be used here.\n    if (this.keyFilter) {\n      this.internalFilters = JSON.parse(\n        JSON.stringify(this.keyFilter.data)\n      ) as HdsFilterBarData;\n    }\n  });\n\n  get keyFilter(): HdsFilterBarFilter | undefined {\n    const { filters, key } = this.args;\n\n    if (!filters) {\n      return undefined;\n    }\n    return filters[key];\n  }\n\n  get numFilters(): number {\n    const { filters, key } = this.args;\n    if (filters && key in filters) {\n      const keyFilters = filters[key]?.data;\n      if (Array.isArray(keyFilters)) {\n        return keyFilters.length;\n      } else if (keyFilters) {\n        return 1;\n      }\n    }\n    return 0;\n  }\n\n  get formattedFilters(): HdsFilterBarFilter | undefined {\n    const { type, text } = this.args;\n    if (\n      this.internalFilters === undefined ||\n      (Array.isArray(this.internalFilters) && this.internalFilters.length === 0)\n    ) {\n      return undefined;\n    }\n    return {\n      type: type,\n      text: text,\n      data: this.internalFilters,\n    } as HdsFilterBarFilter;\n  }\n\n  onSelectionChange = (event: Event, label?: string): void => {\n    const { type } = this.args;\n\n    const addFilter = (value: unknown): void => {\n      const newFilter = {\n        value: value,\n        label: label,\n      } as HdsFilterBarGenericFilterData;\n      if (type === 'multi-select') {\n        if (Array.isArray(this.internalFilters)) {\n          this.internalFilters = [...this.internalFilters, newFilter];\n        } else {\n          this.internalFilters = [newFilter];\n        }\n      } else {\n        this.internalFilters = newFilter;\n      }\n    };\n\n    const removeFilter = (value: string): void => {\n      if (type === 'multi-select' && Array.isArray(this.internalFilters)) {\n        const newFilter = [] as HdsFilterBarGenericFilterData[];\n        this.internalFilters.forEach((filter) => {\n          if (filter.value != value) {\n            newFilter.push(filter);\n          }\n        });\n        this.internalFilters = newFilter;\n      } else {\n        this.internalFilters = undefined;\n      }\n    };\n\n    const input = event.target as HTMLInputElement;\n\n    if (input.checked) {\n      addFilter(input.value);\n    } else {\n      removeFilter(input.value);\n    }\n\n    const { onChange } = this.args;\n    if (onChange && typeof onChange === 'function') {\n      onChange(this.args.key, this.formattedFilters);\n    }\n  };\n\n  onGenericChange = (filter: HdsFilterBarFilter): void => {\n    this.internalFilters = filter.data;\n    filter.text = this.args.text;\n\n    const { onChange } = this.args;\n    if (onChange && typeof onChange === 'function') {\n      onChange(this.args.key, filter);\n    }\n  };\n\n  onClear = (): void => {\n    this.internalFilters = undefined;\n    const { onChange, onClear } = this.args;\n\n    if (onClear && typeof onClear === 'function') {\n      onClear(this.args.key);\n    }\n\n    if (onChange && typeof onChange === 'function') {\n      onChange(this.args.key);\n    }\n  };\n\n  private _onSearch = (event: Event) => {\n    const input = event.target as HTMLInputElement;\n    this.searchValue = input.value;\n  };\n\n  <template>\n    {{#let @tab as |Tab|}}\n      <Tab @numFilters={{this.numFilters}}>\n        {{@text}}\n      </Tab>\n    {{/let}}\n    {{#let @panel as |Panel|}}\n      <Panel {{this._setUpFilterPanel}}>\n        {{#if @searchEnabled}}\n          <div class=\"hds-filter-bar__filter-group__search\">\n            <HdsFormTextInputBase\n              @type=\"search\"\n              aria-label={{hdsT\n                \"components.filter-bar.filter-group.search-input.aria-label\"\n                default=\"Search filter options\"\n              }}\n              aria-description={{hdsT\n                \"hds.components.filter-bar.filter-group.search-input.aria-description\"\n                default=\"Search will be performed automatically as you type\"\n              }}\n              placeholder={{hdsT\n                \"hds.components.filter-bar.filter-group.search-input.placeholder\"\n                default=\"Search\"\n              }}\n              {{on \"input\" this._onSearch}}\n            />\n          </div>\n        {{/if}}\n        {{#if\n          (or\n            (eq @type \"numerical\")\n            (eq @type \"date\")\n            (eq @type \"datetime\")\n            (eq @type \"time\")\n            (eq @type \"generic\")\n          )\n        }}\n          {{#if (eq @type \"numerical\")}}\n            <HdsFilterBarFilterGroupNumerical\n              @key={{@key}}\n              @keyFilter={{this.keyFilter}}\n              @text={{@text}}\n              @onChange={{this.onGenericChange}}\n            />\n          {{else if (eq @type \"date\")}}\n            <HdsFilterBarFilterGroupDate\n              @key={{@key}}\n              @keyFilter={{this.keyFilter}}\n              @text={{@text}}\n              @onChange={{this.onGenericChange}}\n              @type=\"date\"\n            />\n          {{else if (eq @type \"datetime\")}}\n            <HdsFilterBarFilterGroupDate\n              @key={{@key}}\n              @keyFilter={{this.keyFilter}}\n              @text={{@text}}\n              @onChange={{this.onGenericChange}}\n              @type=\"datetime\"\n            />\n          {{else if (eq @type \"time\")}}\n            <HdsFilterBarFilterGroupDate\n              @key={{@key}}\n              @keyFilter={{this.keyFilter}}\n              @text={{@text}}\n              @onChange={{this.onGenericChange}}\n              @type=\"time\"\n            />\n          {{else if (eq @type \"generic\")}}\n            {{yield\n              (hash\n                Generic=(component\n                  HdsFilterBarFilterGroupGeneric onChange=this.onGenericChange\n                )\n              )\n            }}\n          {{/if}}\n          <HdsFilterBarFilterGroupClearButton\n            @text={{hdsT\n              \"hds.components.filter-bar.filter-group.values-list.clear-filter\"\n              default=\"Clear filter\"\n            }}\n            {{on \"click\" this.onClear}}\n          />\n        {{else if (or (eq @type \"single-select\") (eq @type \"multi-select\"))}}\n          <div class=\"hds-filter-bar__filter-group__values-list\">\n            <HdsFilterBarFilterGroupClearButton\n              @text={{hdsT\n                \"hds.components.filter-bar.filter-group.values-list.clear-selection\"\n                default=\"Clear selection\"\n              }}\n              {{on \"click\" this.onClear}}\n            />\n            <fieldset class=\"hds-filter-bar__filter-group__list\">\n              <legend class=\"sr-only\">\n                {{hdsT\n                  \"hds.components.filter-bar.filter-group.values-list.legend\"\n                  text=@text\n                  default=\"Filter by options\"\n                }}\n              </legend>\n              {{#if (eq @type \"single-select\")}}\n                {{yield\n                  (hash\n                    Radio=(component\n                      HdsFilterBarFilterGroupRadio\n                      keyFilter=this.keyFilter\n                      name=@key\n                      searchValue=this.searchValue\n                      onChange=this.onSelectionChange\n                    )\n                  )\n                }}\n              {{else if (eq @type \"multi-select\")}}\n                {{yield\n                  (hash\n                    Checkbox=(component\n                      HdsFilterBarFilterGroupCheckbox\n                      keyFilter=this.keyFilter\n                      name=@key\n                      searchValue=this.searchValue\n                      onChange=this.onSelectionChange\n                    )\n                  )\n                }}\n              {{/if}}\n            </fieldset>\n          </div>\n        {{/if}}\n      </Panel>\n    {{/let}}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { on } from '@ember/modifier';\n\nimport HdsFormCheckboxBase from '../../form/checkbox/base.gts';\nimport HdsTextBody from '../../text/body.gts';\n\nimport type { HdsFilterBarFilter } from '../types.ts';\n\nexport interface HdsFilterBarFilterGroupCheckboxSignature {\n  Args: {\n    value: string;\n    label: string;\n    name: string;\n    searchValue?: string;\n    keyFilter?: HdsFilterBarFilter;\n    onChange?: (event: Event, label?: string) => void;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLLabelElement;\n}\n\nexport default class HdsFilterBarFilterGroupCheckbox extends Component<HdsFilterBarFilterGroupCheckboxSignature> {\n  private _elementId = 'checkbox' + guidFor(this);\n\n  get isChecked(): boolean {\n    const { keyFilter, value } = this.args;\n    if (keyFilter && Array.isArray(keyFilter.data)) {\n      return keyFilter.data.some((filter) => filter.value === value);\n    }\n    return false;\n  }\n\n  get isHidden(): boolean {\n    const { searchValue, label } = this.args;\n    if (searchValue && searchValue.length > 0) {\n      return !label.toLowerCase().includes(searchValue.toLowerCase());\n    }\n    return false;\n  }\n\n  get classNames(): string {\n    const classes = [\n      'hds-filter-bar__filter-group__checkbox',\n      'hds-filter-bar__filter-group__selection-option',\n      'hds-typography-body-200',\n    ];\n\n    if (this.isHidden) {\n      classes.push(`hds-filter-bar__filter-group__selection-option--hidden`);\n    }\n\n    return classes.join(' ');\n  }\n\n  onChange = (event: Event): void => {\n    const { onChange, label } = this.args;\n    if (onChange && typeof onChange === 'function') {\n      onChange(event, label);\n    }\n  };\n\n  <template>\n    <label class={{this.classNames}} ...attributes for={{this._elementId}}>\n      <HdsFormCheckboxBase\n        class=\"hds-filter-bar__filter-group__selection-option__control\"\n        id={{this._elementId}}\n        name={{@name}}\n        checked={{this.isChecked}}\n        @value={{@value}}\n        {{on \"change\" this.onChange}}\n      />\n      <HdsTextBody\n        @tag=\"span\"\n        @size=\"200\"\n        @weight=\"medium\"\n        class=\"hds-filter-bar__filter-group__selection-option__text-content\"\n      >{{@label}}</HdsTextBody>\n    </label>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { on } from '@ember/modifier';\n\nimport HdsFormRadioBase from '../../form/radio/base.gts';\nimport HdsTextBody from '../../text/body.gts';\n\nimport type { HdsFilterBarFilter } from '../types.ts';\n\nexport interface HdsFilterBarFilterGroupRadioSignature {\n  Args: {\n    value: string;\n    label: string;\n    name: string;\n    searchValue?: string;\n    keyFilter?: HdsFilterBarFilter;\n    onChange?: (event: Event, label?: string) => void;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLLabelElement;\n}\n\nexport default class HdsFilterBarFilterGroupRadio extends Component<HdsFilterBarFilterGroupRadioSignature> {\n  private _elementId = 'radio' + guidFor(this);\n\n  onChange = (event: Event): void => {\n    const { onChange, label } = this.args;\n    if (onChange && typeof onChange === 'function') {\n      onChange(event, label);\n    }\n  };\n\n  get isChecked(): boolean {\n    const { keyFilter, value } = this.args;\n    if (\n      keyFilter &&\n      keyFilter.type === 'single-select' &&\n      value &&\n      'value' in keyFilter.data\n    ) {\n      return keyFilter.data.value === value;\n    }\n    return false;\n  }\n\n  get isHidden(): boolean {\n    const { searchValue, label } = this.args;\n    if (searchValue && searchValue.length > 0) {\n      return !label.toLowerCase().includes(searchValue.toLowerCase());\n    }\n    return false;\n  }\n\n  get classNames(): string {\n    const classes = [\n      'hds-filter-bar__filter-group__radio',\n      'hds-filter-bar__filter-group__selection-option',\n      'hds-typography-body-200',\n    ];\n\n    if (this.isHidden) {\n      classes.push(`hds-filter-bar__filter-group__selection-option--hidden`);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <label class={{this.classNames}} ...attributes for={{this._elementId}}>\n      <HdsFormRadioBase\n        class=\"hds-filter-bar__filter-group__selection-option__control\"\n        id={{this._elementId}}\n        name={{@name}}\n        checked={{this.isChecked}}\n        @value={{@value}}\n        {{on \"change\" this.onChange}}\n      />\n      <HdsTextBody\n        @tag=\"span\"\n        @size=\"200\"\n        @weight=\"medium\"\n        class=\"hds-filter-bar__filter-group__selection-option__text-content\"\n      >{{@label}}</HdsTextBody>\n    </label>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nimport HdsButton from '../../button/index.gts';\n\nimport type { HdsButtonSignature } from '../../button/index.gts';\n\nexport interface HdsFilterBarFilterGroupClearButtonSignature {\n  Args: {\n    text: string;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HdsButtonSignature['Element'];\n}\n\nconst HdsFilterBarFilterGroupClearButton: TemplateOnlyComponent<HdsFilterBarFilterGroupClearButtonSignature> =\n  <template>\n    <HdsButton\n      @text={{@text}}\n      @color=\"tertiary\"\n      @size=\"small\"\n      @icon=\"rotate-ccw\"\n      ...attributes\n      class=\"hds-filter-bar__filter-group__clear-button\"\n    />\n  </template>;\n\nexport default HdsFilterBarFilterGroupClearButton;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { schedule } from '@ember/runloop';\nimport { modifier } from 'ember-modifier';\nimport { hash } from '@ember/helper';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport hdsT from '../../../../helpers/hds-t.ts';\nimport HdsFilterBarTabsTab from './tab.gts';\nimport HdsFilterBarTabsPanel from './panel.gts';\n\nexport interface HdsFilterBarTabsSignature {\n  Args: {\n    selectedTabIndex?: number;\n  };\n  Blocks: {\n    default: [\n      {\n        Tab?: WithBoundArgs<\n          typeof HdsFilterBarTabsTab,\n          | 'selectedTabIndex'\n          | 'tabIds'\n          | 'panelIds'\n          | 'didInsertNode'\n          | 'willDestroyNode'\n          | 'onClick'\n          | 'onKeydown'\n        >;\n        Panel?: WithBoundArgs<\n          typeof HdsFilterBarTabsPanel,\n          | 'selectedTabIndex'\n          | 'tabIds'\n          | 'panelIds'\n          | 'didInsertNode'\n          | 'willDestroyNode'\n        >;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsFilterBarTabs extends Component<HdsFilterBarTabsSignature> {\n  @tracked private _tabIds: string[] = [];\n  @tracked private _tabNodes: HTMLElement[] = [];\n  @tracked private _panelNodes: HTMLElement[] = [];\n  @tracked private _panelIds: string[] = [];\n  @tracked private _selectedTabIndex: number = 0;\n\n  private _element!: HTMLDivElement;\n\n  private _setUpFilterBarTabs = modifier((element: HTMLDivElement) => {\n    const { selectedTabIndex } = this.args;\n\n    if (selectedTabIndex) {\n      this._selectedTabIndex = selectedTabIndex;\n    }\n\n    this._element = element;\n  });\n\n  didInsertTab = (element: HTMLElement, tabId: string): void => {\n    // eslint-disable-next-line ember/no-runloop\n    schedule('afterRender', (): void => {\n      this._tabIds = [...this._tabIds, tabId];\n      this._tabNodes = [...this._tabNodes, element];\n    });\n  };\n\n  willDestroyTab = (element: HTMLElement): void => {\n    // eslint-disable-next-line ember/no-runloop\n    schedule('afterRender', (): void => {\n      this._tabNodes = this._tabNodes.filter(\n        (node): boolean => node.id !== element.id\n      );\n      this._tabIds = this._tabIds.filter(\n        (tabId): boolean => tabId !== element.id\n      );\n    });\n  };\n\n  didInsertPanel = (element: HTMLElement, panelId: string): void => {\n    // eslint-disable-next-line ember/no-runloop\n    schedule('afterRender', (): void => {\n      this._panelIds = [...this._panelIds, panelId];\n      this._panelNodes = [...this._panelNodes, element];\n    });\n  };\n\n  willDestroyPanel = (element: HTMLElement): void => {\n    // eslint-disable-next-line ember/no-runloop\n    schedule('afterRender', (): void => {\n      this._panelNodes = this._panelNodes.filter(\n        (node): boolean => node.id !== element.id\n      );\n      this._panelIds = this._panelIds.filter(\n        (panelId): boolean => panelId !== element.id\n      );\n    });\n  };\n\n  onClick = (event: MouseEvent, tabIndex: number): void => {\n    this._selectedTabIndex = tabIndex;\n  };\n\n  onKeydown = (event: KeyboardEvent, tabIndex: number): void => {\n    const leftArrow = 'ArrowLeft';\n    const rightArrow = 'ArrowRight';\n    const upArrow = 'ArrowUp';\n    const downArrow = 'ArrowDown';\n    const enterKey = 'Enter';\n    const spaceKey = ' ';\n    const tabKey = 'Tab';\n\n    if (event.key !== tabKey) {\n      event.preventDefault();\n    }\n\n    if (event.key === rightArrow || event.key === downArrow) {\n      const nextTabIndex = (tabIndex + 1) % this._tabIds.length;\n      this._focusTab(nextTabIndex, event);\n    } else if (event.key === leftArrow || event.key === upArrow) {\n      const prevTabIndex =\n        (tabIndex + this._tabIds.length - 1) % this._tabIds.length;\n      this._focusTab(prevTabIndex, event);\n    } else if (event.key === enterKey || event.key === spaceKey) {\n      this._selectedTabIndex = tabIndex;\n    }\n    // scroll selected tab into view (it may be out of view when activated using a keyboard with `prev/next`)\n    const parentNode = this._tabNodes[this._selectedTabIndex]?.parentNode;\n    if (parentNode instanceof HTMLElement) {\n      parentNode.scrollIntoView({\n        behavior: 'smooth',\n        block: 'nearest',\n        inline: 'nearest',\n      });\n    }\n  };\n\n  // Focus tab for keyboard & mouse navigation:\n  private _focusTab = (tabIndex: number, event: KeyboardEvent): void => {\n    event.preventDefault();\n    this._tabNodes[tabIndex]?.focus();\n  };\n\n  <template>\n    <div\n      class=\"hds-filter-bar__tabs\"\n      ...attributes\n      {{this._setUpFilterBarTabs}}\n    >\n      <ol\n        class=\"hds-filter-bar__tabs__list\"\n        aria-label={{hdsT\n          \"hds.components.filter-bar.tabs.aria-label\"\n          default=\"Filter bar tabs\"\n        }}\n        role=\"tablist\"\n      >\n        {{yield\n          (hash\n            Tab=(component\n              HdsFilterBarTabsTab\n              selectedTabIndex=this._selectedTabIndex\n              tabIds=this._tabIds\n              panelIds=this._panelIds\n              didInsertNode=this.didInsertTab\n              willDestroyNode=this.willDestroyTab\n              onClick=this.onClick\n              onKeydown=this.onKeydown\n            )\n          )\n        }}\n      </ol>\n      {{yield\n        (hash\n          Panel=(component\n            HdsFilterBarTabsPanel\n            selectedTabIndex=this._selectedTabIndex\n            tabIds=this._tabIds\n            panelIds=this._panelIds\n            didInsertNode=this.didInsertPanel\n            willDestroyNode=this.willDestroyPanel\n          )\n        )\n      }}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { isArray } from '@ember/array';\nimport { fn } from '@ember/helper';\n\nimport { NUMERICAL_SELECTORS_TEXT } from './filter-group/numerical.gts';\nimport { DATE_SELECTORS_TEXT } from './filter-group/date.gts';\nimport hdsT from '../../../helpers/hds-t.ts';\nimport HdsTag from '../tag/index.gts';\n\nimport type HdsIntlService from '../../../services/hds-intl.ts';\nimport type {\n  HdsFilterBarFilters,\n  HdsFilterBarFilter,\n  HdsFilterBarFilterType,\n  HdsFilterBarData,\n  HdsFilterBarGenericFilterData,\n} from './types.ts';\n\nexport interface HdsFilterBarAppliedFiltersSignature {\n  Args: {\n    filters: HdsFilterBarFilters;\n    onFilterDismiss?: (key: string, filterValue?: unknown) => void;\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsFilterBarAppliedFilters extends Component<HdsFilterBarAppliedFiltersSignature> {\n  @service hdsIntl!: HdsIntlService;\n\n  private _isArrayFilter = (filter: HdsFilterBarFilter): boolean => {\n    return (\n      filter.type === 'multi-select' ||\n      (filter.type === 'generic' && isArray(filter.data))\n    );\n  };\n\n  private _onFilterDismiss = (key: string, filterValue?: unknown): void => {\n    const { onFilterDismiss } = this.args;\n\n    if (onFilterDismiss && typeof onFilterDismiss === 'function') {\n      onFilterDismiss(key, filterValue);\n    }\n  };\n\n  private _filterData = (\n    data: HdsFilterBarData\n  ): HdsFilterBarGenericFilterData => {\n    const result = {\n      value: '',\n    } as HdsFilterBarGenericFilterData;\n    if ('value' in data) {\n      result.value = data.value;\n    }\n    if ('label' in data) {\n      result.label = data.label;\n    }\n    if ('dismissTagText' in data) {\n      result.dismissTagText = data.dismissTagText;\n    }\n    return result;\n  };\n\n  private _filterText = (key: string, filter: HdsFilterBarFilter): string => {\n    const valueText = this._filterValueText(filter);\n    const keyText = this._filterKeyText(key, filter);\n    const separatorText = this._filterSeparatorText(filter);\n    return `${keyText}${separatorText} ${valueText}`;\n  };\n\n  private _arrayFilterText = (\n    key: string,\n    filter: HdsFilterBarFilter,\n    item: HdsFilterBarGenericFilterData\n  ): string => {\n    const keyText = this._filterKeyText(key, filter);\n    if (\n      filter.type === 'generic' &&\n      'dismissTagText' in item &&\n      item.dismissTagText\n    ) {\n      return `${keyText} ${item.dismissTagText}`;\n    } else {\n      const valueText = item.label ?? String(item.value);\n      return `${keyText}: ${valueText}`;\n    }\n  };\n\n  private _filterValueText = (filter: HdsFilterBarFilter): string => {\n    if (filter.type === 'numerical') {\n      return this._numericalFilterValueText(filter);\n    } else if (\n      filter.type === 'date' ||\n      filter.type === 'datetime' ||\n      filter.type === 'time'\n    ) {\n      return this._dateFilterValueText(filter);\n    } else if (filter.type === 'generic') {\n      return this._genericFilterValueText(filter);\n    } else {\n      const result = this._filterData(filter.data);\n      const resultLabel = result?.label as string;\n      const resultValue = result?.value as string;\n      return resultLabel ?? resultValue;\n    }\n  };\n\n  private _filterKeyText = (key: string, data: HdsFilterBarFilter): string => {\n    if (data.text) {\n      return data.text;\n    } else {\n      return key;\n    }\n  };\n\n  private _numericalFilterValueText = (filter: HdsFilterBarFilter): string => {\n    const data = filter.data;\n\n    if (filter.type === 'numerical' && 'selector' in data && 'value' in data) {\n      const selector = data.selector as keyof typeof NUMERICAL_SELECTORS_TEXT;\n      if (\n        selector === 'between' &&\n        typeof data.value === 'object' &&\n        data.value !== null\n      ) {\n        const separatorText = this.hdsIntl.t(\n          'hds.components.filter-bar.tag.numerical-filter.separator',\n          {\n            default: 'and',\n          }\n        );\n        return `${NUMERICAL_SELECTORS_TEXT[selector]} ${data.value.start} ${separatorText} ${data.value.end}`;\n      } else if (typeof data.value !== 'object') {\n        return `${NUMERICAL_SELECTORS_TEXT[selector]} ${data.value}`;\n      }\n      return '';\n    } else {\n      return '';\n    }\n  };\n\n  private _dateFilterValueText = (filter: HdsFilterBarFilter): string => {\n    const data = filter.data;\n\n    if (\n      (filter.type === 'date' ||\n        filter.type === 'datetime' ||\n        filter.type === 'time') &&\n      'selector' in data &&\n      'value' in data\n    ) {\n      const selector = data.selector as keyof typeof DATE_SELECTORS_TEXT;\n      if (\n        selector === 'between' &&\n        typeof data.value === 'object' &&\n        data.value !== null\n      ) {\n        const separatorText = this.hdsIntl.t(\n          'hds.components.filter-bar.tag.date-filter.separator',\n          {\n            default: 'and',\n          }\n        );\n        const startDateText = this._formatDateFilterText(\n          data.value.start as string,\n          filter.type\n        );\n        const endDateText = this._formatDateFilterText(\n          data.value.end as string,\n          filter.type\n        );\n        return `${DATE_SELECTORS_TEXT[selector]} ${startDateText} ${separatorText} ${endDateText}`;\n      } else if (data.value !== null && typeof data.value !== 'object') {\n        const dateText = this._formatDateFilterText(\n          data.value as string,\n          filter.type\n        );\n        return `${DATE_SELECTORS_TEXT[selector]} ${dateText}`;\n      }\n      return '';\n    } else {\n      return '';\n    }\n  };\n\n  private _formatDateFilterText = (\n    dateString: string,\n    filterType: HdsFilterBarFilterType\n  ): string => {\n    let date;\n    if (filterType === 'time') {\n      date = new Date(`1970-01-01T${dateString}`);\n    } else if (filterType === 'date') {\n      // Parse YYYY-MM-DD as a local date to avoid timezone shifts\n      const m = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(dateString);\n      if (m) {\n        const year = Number(m[1]);\n        const month = Number(m[2]) - 1;\n        const day = Number(m[3]);\n        date = new Date(year, month, day);\n      } else {\n        date = new Date(dateString);\n      }\n    } else {\n      date = new Date(dateString);\n    }\n\n    let options = {};\n    if (filterType === 'date') {\n      options = { dateStyle: 'short' };\n    } else if (filterType === 'time') {\n      options = { timeStyle: 'short' };\n    } else {\n      options = { dateStyle: 'short', timeStyle: 'short' };\n    }\n\n    // Use the intl service if available for consistent localization, and fall back to the native Intl API\n    if (this.hdsIntl.intl) {\n      return this.hdsIntl.intl.formatDate(date, options);\n    } else {\n      const newDate = new Intl.DateTimeFormat(undefined, options);\n      return newDate.format(date);\n    }\n  };\n\n  private _genericFilterValueText = (filter: HdsFilterBarFilter): string => {\n    if ('dismissTagText' in filter) {\n      return filter.dismissTagText ?? '';\n    } else {\n      const result = this._filterData(filter.data);\n      const resultLabel = result?.label as string;\n      const resultValue = result?.value as string;\n      return resultLabel ?? resultValue;\n    }\n  };\n\n  private _arrayFilterData = (\n    data: HdsFilterBarData\n  ): { value: unknown; label?: string; dismissTagText?: string }[] => {\n    if (isArray(data)) {\n      return data.map((item) => this._filterData(item));\n    }\n    return [];\n  };\n\n  private _filterSeparatorText = (filter: HdsFilterBarFilter): string => {\n    return filter.type === 'single-select' ||\n      filter.type === 'multi-select' ||\n      filter.type === 'search' ||\n      (filter.type === 'generic' && !filter.dismissTagText)\n      ? ':'\n      : '';\n  };\n\n  <template>\n    <div class=\"hds-filter-bar__applied-filters\" ...attributes>\n      {{#each-in @filters as |key filter|}}\n        {{#if filter.data}}\n          {{#if (this._isArrayFilter filter)}}\n            {{#each (this._arrayFilterData filter.data) as |item|}}\n              <HdsTag\n                @text=\"{{this._arrayFilterText key filter item}}\"\n                @ariaLabel={{hdsT\n                  \"hds.components.filter-bar.applied-filters.tag.aria-label\"\n                  default=\"Clear filter\"\n                }}\n                @onDismiss={{fn this._onFilterDismiss key item.value}}\n              />\n            {{/each}}\n          {{else}}\n            <HdsTag\n              @text={{this._filterText key filter}}\n              @ariaLabel={{hdsT\n                \"hds.components.filter-bar.applied-filters.tag.aria-label\"\n                default=\"Clear filter\"\n              }}\n              @onDismiss={{fn this._onFilterDismiss key}}\n            />\n          {{/if}}\n        {{/if}}\n      {{/each-in}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { TrackedWeakSet } from 'tracked-built-ins';\nimport { assert } from '@ember/debug';\nimport { modifier } from 'ember-modifier';\nimport { on } from '@ember/modifier';\nimport { or } from 'ember-truth-helpers';\nimport { hash } from '@ember/helper';\n\nimport { HdsTagColorValues } from './types.ts';\nimport { HdsTagTooltipPlacementValues } from './types.ts';\nimport HdsInteractive from '../interactive/index.gts';\nimport HdsTooltipButton from '../tooltip-button/index.gts';\nimport HdsTextBody from '../text/body.gts';\nimport HdsIcon from '../icon/index.gts';\nimport hdsTooltip from '../../../modifiers/hds-tooltip.ts';\n\nimport type { HdsTagColors } from './types.ts';\nimport type { HdsTagTooltipPlacements } from './types.ts';\nimport type { HdsInteractiveSignature } from '../interactive/index.gts';\n\nexport const COLORS: HdsTagColors[] = Object.values(HdsTagColorValues);\nexport const DEFAULT_COLOR = HdsTagColorValues.Primary;\nexport const TOOLTIP_PLACEMENTS: HdsTagTooltipPlacements[] = Object.values(\n  HdsTagTooltipPlacementValues\n);\nexport const DEFAULT_TOOLTIP_PLACEMENT = HdsTagTooltipPlacementValues.Top;\n\nexport interface HdsTagSignature {\n  Args: HdsInteractiveSignature['Args'] & {\n    color?: HdsTagColors;\n    text: string;\n    ariaLabel?: string;\n    tooltipPlacement?: HdsTagTooltipPlacements;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    onDismiss?: (event: MouseEvent, ...args: any[]) => void;\n  };\n  Element: HTMLSpanElement;\n}\n\nconst overflowed = new TrackedWeakSet<Element>();\n\nlet observer: ResizeObserver | undefined;\n\nif (typeof ResizeObserver !== 'undefined') {\n  observer = new ResizeObserver((entries) => {\n    entries.forEach((entry) => {\n      const textContainer = entry.target.querySelector(\n        '.hds-tag__text-container'\n      );\n      if (\n        textContainer &&\n        textContainer.scrollHeight > textContainer.clientHeight\n      ) {\n        overflowed.add(entry.target);\n      } else {\n        overflowed.delete(entry.target);\n      }\n    });\n  });\n}\n\nexport default class HdsTag extends Component<HdsTagSignature> {\n  @tracked private _element?: HTMLElement;\n  private get _isTextOverflow(): boolean {\n    if (!this._element) {\n      return false;\n    }\n    return overflowed.has(this._element);\n  }\n\n  private _setUpObserver = modifier((element: HTMLElement) => {\n    this._element = element;\n    observer?.observe(element);\n\n    return () => {\n      if (this._element) {\n        observer?.unobserve(this._element);\n      }\n      delete this._element;\n    };\n  });\n\n  get tooltipPlacement(): HdsTagTooltipPlacements {\n    const { tooltipPlacement = DEFAULT_TOOLTIP_PLACEMENT } = this.args;\n\n    assert(\n      '@tooltipPlacement for \"Hds::Tag\" must have a valid value',\n      tooltipPlacement == undefined ||\n        TOOLTIP_PLACEMENTS.includes(tooltipPlacement)\n    );\n\n    return tooltipPlacement;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  get onDismiss(): ((event: MouseEvent, ...args: any[]) => void) | false {\n    const { onDismiss } = this.args;\n\n    if (typeof onDismiss === 'function') {\n      return onDismiss;\n    } else {\n      return false;\n    }\n  }\n\n  get text(): string {\n    const { text } = this.args;\n\n    assert('@text for \"Hds::Tag\" must have a valid value', text !== undefined);\n\n    return text;\n  }\n\n  get ariaLabel(): string {\n    const tagAriaLabel = this.args.ariaLabel ?? 'Dismiss';\n    return tagAriaLabel + ' ' + this.args.text;\n  }\n\n  get color(): HdsTagColors | false {\n    if (this.args.href || this.args.route) {\n      const { color = DEFAULT_COLOR } = this.args;\n      assert(\n        `@color for \"Hds::Tag\" must be one of the following: ${COLORS.join(\n          ', '\n        )}; received: ${color}`,\n        COLORS.includes(color)\n      );\n      return color;\n    } else if (this.args.color) {\n      assert(\n        '@color can only be applied to \"Hds::Tag\" along with either @href or @route',\n        this.args.href || this.args.route\n      );\n    }\n    return false;\n  }\n\n  get classNames(): string {\n    const { href, route } = this.args;\n\n    const classes = ['hds-tag'];\n\n    // add a class based on the @color argument\n    if (this.color) {\n      classes.push(`hds-tag--color-${this.color}`);\n    }\n\n    if (href || route) {\n      classes.push('hds-tag--is-interactive');\n    } else {\n      classes.push('hds-tag--is-static');\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <span class={{this.classNames}} {{this._setUpObserver}} ...attributes>\n      {{#if this.onDismiss}}\n        <button\n          class=\"hds-tag__dismiss\"\n          type=\"button\"\n          aria-label={{this.ariaLabel}}\n          {{on \"click\" this.onDismiss}}\n        >\n          <HdsIcon class=\"hds-tag__dismiss-icon\" @name=\"x\" @size=\"16\" />\n        </button>\n      {{/if}}\n      {{#if (or @href @route)}}\n        {{#if this._isTextOverflow}}\n          <HdsInteractive\n            class=\"hds-tag__link\"\n            @current-when={{@current-when}}\n            @models={{@models}}\n            @model={{@model}}\n            @query={{@query}}\n            @replace={{@replace}}\n            @route={{@route}}\n            @isRouteExternal={{@isRouteExternal}}\n            @href={{@href}}\n            @isHrefExternal={{@isHrefExternal}}\n            {{hdsTooltip\n              this.text\n              options=(hash placement=this.tooltipPlacement)\n            }}\n          >\n            <HdsTextBody\n              @tag=\"span\"\n              @size=\"100\"\n              @weight=\"medium\"\n              class=\"hds-tag__text-container\"\n            >\n              {{this.text}}\n            </HdsTextBody>\n          </HdsInteractive>\n        {{else}}\n          <HdsInteractive\n            class=\"hds-tag__link\"\n            @current-when={{@current-when}}\n            @models={{@models}}\n            @model={{@model}}\n            @query={{@query}}\n            @replace={{@replace}}\n            @route={{@route}}\n            @isRouteExternal={{@isRouteExternal}}\n            @href={{@href}}\n            @isHrefExternal={{@isHrefExternal}}\n          >\n            <HdsTextBody\n              @tag=\"span\"\n              @size=\"100\"\n              @weight=\"medium\"\n              class=\"hds-tag__text-container\"\n            >\n              {{this.text}}\n            </HdsTextBody>\n          </HdsInteractive>\n        {{/if}}\n      {{else}}\n        {{#if this._isTextOverflow}}\n          <HdsTooltipButton\n            class=\"hds-tag__text\"\n            @text={{this.text}}\n            @placement={{this.tooltipPlacement}}\n          >\n            <HdsTextBody\n              @tag=\"span\"\n              @size=\"100\"\n              @weight=\"medium\"\n              class=\"hds-tag__text-container\"\n            >\n              {{this.text}}\n            </HdsTextBody>\n          </HdsTooltipButton>\n        {{else}}\n          <span class=\"hds-tag__text\">\n            <HdsTextBody\n              @tag=\"span\"\n              @size=\"100\"\n              @weight=\"medium\"\n              class=\"hds-tag__text-container\"\n            >\n              {{this.text}}\n            </HdsTextBody>\n          </span>\n        {{/if}}\n      {{/if}}\n    </span>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsApplicationStateMediaSignature {\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLDivElement;\n}\n\nconst HdsApplicationStateMedia: TemplateOnlyComponent<HdsApplicationStateMediaSignature> =\n  <template>\n    <div class=\"hds-application-state__media\" ...attributes>\n      {{yield}}\n    </div>\n  </template>;\n\nexport default HdsApplicationStateMedia;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\n\nimport { HdsApplicationStateTitleTagValues } from './types.ts';\nimport HdsTextBody from '../text/body.gts';\nimport HdsTextDisplay from '../text/display.gts';\nimport HdsIcon from '../icon/index.gts';\nimport hdsT from '../../../helpers/hds-t.ts';\n\nimport type { HdsIconSignature } from '../icon/index.gts';\nimport type { HdsApplicationStateTitleTags } from './types.ts';\n\nexport interface HdsApplicationStateHeaderSignature {\n  Args: {\n    title?: string;\n    titleTag?: HdsApplicationStateTitleTags;\n    errorCode?: string;\n    icon?: HdsIconSignature['Args']['name'];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsApplicationStateHeader extends Component<HdsApplicationStateHeaderSignature> {\n  get titleTag(): HdsApplicationStateTitleTags {\n    return this.args.titleTag ?? HdsApplicationStateTitleTagValues.Div;\n  }\n\n  <template>\n    <div class=\"hds-application-state__header\" ...attributes>\n      {{#if @errorCode}}\n        <HdsTextBody\n          class=\"hds-application-state__error-code\"\n          @tag=\"div\"\n          @size=\"100\"\n          @weight=\"medium\"\n          @color=\"faint\"\n        >\n          {{hdsT \"hds.application-state.header.error\" default=\"ERROR\"}}\n          {{@errorCode}}\n        </HdsTextBody>\n      {{/if}}\n      {{#if @icon}}\n        <div class=\"hds-application-state__icon\">\n          <HdsIcon\n            @color=\"var(--token-color-foreground-strong)\"\n            @name={{@icon}}\n            @size=\"24\"\n            @isInline={{true}}\n          />\n        </div>\n      {{/if}}\n      <HdsTextDisplay\n        class=\"hds-application-state__title\"\n        @tag={{this.titleTag}}\n        @size=\"300\"\n        @weight=\"semibold\"\n        @color=\"strong\"\n      >\n        {{@title}}\n      </HdsTextDisplay>\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nimport HdsTextBody from '../text/body.gts';\n\nexport interface HdsApplicationStateBodySignature {\n  Args: {\n    text?: string;\n  };\n  Blocks: {\n    default?: [];\n  };\n  Element: HTMLDivElement;\n}\n\nconst HdsApplicationStateBody: TemplateOnlyComponent<HdsApplicationStateBodySignature> =\n  <template>\n    <div class=\"hds-application-state__body\" ...attributes>\n      {{#if (has-block)}}\n        {{yield}}\n      {{else}}\n        <HdsTextBody\n          class=\"hds-application-state__body-text\"\n          @tag=\"p\"\n          @size=\"300\"\n        >\n          {{@text}}\n        </HdsTextBody>\n      {{/if}}\n    </div>\n  </template>;\n\nexport default HdsApplicationStateBody;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport { hash } from '@ember/helper';\n\nimport HdsButton from '../button/index.gts';\nimport HdsDropdown from '../dropdown/index.gts';\nimport HdsLinkStandalone from '../link/standalone.gts';\n\nexport interface HdsApplicationStateFooterSignature {\n  Args: {\n    hasDivider?: boolean;\n  };\n  Blocks: {\n    default?: [\n      {\n        Button?: typeof HdsButton;\n        Dropdown?: typeof HdsDropdown;\n        LinkStandalone?: typeof HdsLinkStandalone;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nconst HdsApplicationStateFooter: TemplateOnlyComponent<HdsApplicationStateFooterSignature> =\n  <template>\n    <div class=\"hds-application-state__footer\" ...attributes>\n      {{yield\n        (hash\n          Button=HdsButton Dropdown=HdsDropdown LinkStandalone=HdsLinkStandalone\n        )\n      }}\n    </div>\n  </template>;\n\nexport default HdsApplicationStateFooter;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { element } from 'ember-element-helper';\n\nimport { HdsAlertTitleTagValues } from './types.ts';\nimport type { HdsAlertTitleTags } from './types.ts';\n\nexport interface HdsAlertTitleSignature {\n  Args: {\n    tag?: HdsAlertTitleTags;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsAlertTitle extends Component<HdsAlertTitleSignature> {\n  get componentTag(): HdsAlertTitleTags {\n    return this.args.tag ?? HdsAlertTitleTagValues.Div;\n  }\n\n  <template>\n    {{! IMPORTANT: we removed any extra newlines before/after the let to reduce the issues with unexpected whitespaces (see https://github.com/hashicorp/design-system/pull/1652) }}\n    {{#let (element this.componentTag) as |Tag|}}<Tag\n        class=\"hds-alert__title hds-typography-body-200 hds-font-weight-semibold\"\n        ...attributes\n      >\n        {{yield}}\n      </Tag>{{/let}}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsAlertDescriptionSignature {\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLDivElement;\n}\n\nconst HdsAlertDescription: TemplateOnlyComponent<HdsAlertDescriptionSignature> =\n  <template>\n    <div\n      class=\"hds-alert__description hds-font-weight-regular hds-foreground-primary\"\n      ...attributes\n    >{{yield}}</div>\n  </template>;\n\nexport default HdsAlertDescription;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { concat } from '@ember/helper';\n\nimport hdsT from '../../../helpers/hds-t.ts';\nimport HdsIcon from '../icon/index.gts';\nimport HdsTextBody from '../text/body.gts';\n\nexport interface HdsAppFooterCopyrightSignature {\n  Args: {\n    year?: string;\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsAppFooterCopyright extends Component<HdsAppFooterCopyrightSignature> {\n  get year(): string | number {\n    return this.args.year ?? new Date().getFullYear();\n  }\n\n  <template>\n    <div class=\"hds-app-footer__copyright\" ...attributes>\n      <HdsIcon @name=\"hashicorp\" />\n      <HdsTextBody @tag=\"span\" @size=\"100\" @align=\"center\">\n        {{hdsT\n          \"hds.components.app-footer.copyright.copyright-text\"\n          default=(concat \"© \" this.year \" HashiCorp, an IBM Company\")\n          year=this.year\n        }}\n      </HdsTextBody>\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport style from 'ember-style-modifier';\n\nimport type { SafeString } from '@ember/template';\nimport type Owner from '@ember/owner';\nimport type HdsIntlService from '../../../services/hds-intl';\n\nimport { service } from '@ember/service';\n\nimport { HdsAppFooterStatusLinkStatusValues } from './types.ts';\nimport HdsAppFooterLink from './link.gts';\n\nimport type { HdsAppFooterStatusTypes } from './types.ts';\nimport type { HdsAppFooterLinkSignature } from './link.gts';\nimport type { HdsIconSignature } from '../icon/index.gts';\nimport type { HdsInteractiveSignature } from '../interactive/index.gts';\n\n// STATUSES are generated at runtime using the injected `hdsIntl` service\n\nexport interface HdsAppFooterStatusLinkSignature {\n  Args: HdsInteractiveSignature['Args'] & {\n    itemStyle?: SafeString;\n    status?: HdsAppFooterStatusTypes;\n    statusIcon?: HdsIconSignature['Args']['name'];\n    statusIconColor?: string;\n    text?: string;\n  };\n  Element: HdsAppFooterLinkSignature['Element'];\n}\n\nexport default class HdsAppFooterStatusLink extends Component<HdsAppFooterStatusLinkSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  get statuses() {\n    return HdsAppFooterStatusLinkStatusValues(this.hdsIntl);\n  }\n\n  constructor(owner: Owner, args: HdsInteractiveSignature['Args']) {\n    super(owner, args);\n\n    assert(\n      'Either @status or @text for \"Hds::AppFooter::StatusLink\" must have a valid value',\n      this.args.text !== undefined || this.args.status\n    );\n  }\n\n  get status(): HdsAppFooterStatusTypes | undefined {\n    let status;\n    if (this.args.status) {\n      status = this.args.status.toLowerCase();\n      assert(\n        `@status for \"Hds::AppFooter\" must be one of the following: ${Object.keys(\n          this.statuses\n        ).join(', ')} received: ${this.args.status}`,\n\n        status in this.statuses\n      );\n      return status as HdsAppFooterStatusTypes;\n    }\n    return status;\n  }\n\n  get statusIcon(): HdsIconSignature['Args']['name'] | undefined {\n    return (\n      this.args.statusIcon ??\n      (this.status !== undefined\n        ? this.statuses[this.status]?.iconName\n        : undefined)\n    );\n  }\n\n  get itemStyle(): Record<string, string> {\n    if (this.args.statusIconColor) {\n      return {\n        '--hds-app-footer-status-icon-color': this.args.statusIconColor,\n      };\n    } else {\n      return {};\n    }\n  }\n\n  get text(): string | undefined {\n    if (!this.args.text && this.status) {\n      return this.statuses[this.status]?.text;\n    }\n    return this.args.text;\n  }\n\n  get href(): string {\n    return this.args.href ?? 'https://status.hashicorp.com';\n  }\n\n  get classNames(): string {\n    const classes = ['hds-app-footer__status-link'];\n\n    // add a class based on status if no statusIconColor is explicitly specified\n    if (this.status && !this.args.statusIconColor) {\n      classes.push(`hds-app-footer__status-link--${this.status}`);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <HdsAppFooterLink\n      class={{this.classNames}}\n      {{style this.itemStyle}}\n      @current-when={{@current-when}}\n      @models={{@models}}\n      @model={{@model}}\n      @query={{@query}}\n      @replace={{@replace}}\n      @route={{@route}}\n      @isRouteExternal={{@isRouteExternal}}\n      @href={{this.href}}\n      @isHrefExternal={{@isHrefExternal}}\n      @icon={{this.statusIcon}}\n      @iconPosition=\"leading\"\n      ...attributes\n    >{{this.text}}</HdsAppFooterLink>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { eq } from 'ember-truth-helpers';\n\nimport type Owner from '@ember/owner';\n\nimport { HdsLinkColorValues, HdsLinkIconPositionValues } from './types.ts';\nimport HdsInteractive from '../interactive/index.gts';\nimport HdsIcon from '../icon/index.gts';\n\nimport type { HdsInteractiveSignature } from '../interactive/index.gts';\nimport type { HdsIconSignature } from '../icon/index.gts';\nimport type { HdsLinkColors, HdsLinkIconPositions } from './types.ts';\n\nexport const DEFAULT_ICON_POSITION = HdsLinkIconPositionValues.Trailing;\nexport const DEFAULT_COLOR = HdsLinkColorValues.Primary;\nexport const ICON_POSITIONS: HdsLinkIconPositions[] = Object.values(\n  HdsLinkIconPositionValues\n);\nexport const COLORS: HdsLinkColors[] = Object.values(HdsLinkColorValues);\n\nexport interface HdsLinkInlineSignature {\n  Args: HdsInteractiveSignature['Args'] & {\n    color?: HdsLinkColors;\n    icon?: HdsIconSignature['Args']['name'];\n    iconPosition?: HdsLinkIconPositions;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HdsInteractiveSignature['Element'];\n}\n\nexport default class HdsLinkInline extends Component<HdsLinkInlineSignature> {\n  constructor(owner: Owner, args: HdsLinkInlineSignature['Args']) {\n    super(owner, args);\n    if (!(this.args.href || this.args.route)) {\n      assert('@href or @route must be defined for <Hds::Link::Inline>');\n    }\n  }\n\n  get color(): HdsLinkColors {\n    const { color = DEFAULT_COLOR } = this.args;\n\n    assert(\n      `@color for \"Hds::Link::Inline\" must be one of the following: ${COLORS.join(\n        ', '\n      )}; received: ${color}`,\n      COLORS.includes(color)\n    );\n\n    return color;\n  }\n\n  get iconPosition(): HdsLinkIconPositions {\n    const { iconPosition = DEFAULT_ICON_POSITION } = this.args;\n\n    assert(\n      `@iconPosition for \"Hds::Link::Inline\" must be one of the following: ${ICON_POSITIONS.join(\n        ', '\n      )}; received: ${iconPosition}`,\n      ICON_POSITIONS.includes(iconPosition)\n    );\n\n    return iconPosition;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-link-inline'];\n\n    // add a class based on the @color argument\n    classes.push(`hds-link-inline--color-${this.color}`);\n\n    // add a class based on the @iconPosition argument\n    classes.push(`hds-link-inline--icon-${this.iconPosition}`);\n\n    return classes.join(' ');\n  }\n\n  <template>\n    {{! IMPORTANT: we need to add \"squishies\" here (~) because otherwise the whitespace added by Ember becomes visible in the link (being an inline element) - See https://handlebarsjs.com/guide/expressions.html#whitespace-control }}\n    <HdsInteractive\n      class={{this.classNames}}\n      @current-when={{@current-when}}\n      @models={{@models}}\n      @model={{@model}}\n      @query={{@query}}\n      @replace={{@replace}}\n      @route={{@route}}\n      @isRouteExternal={{@isRouteExternal}}\n      @href={{@href}}\n      @isHrefExternal={{@isHrefExternal}}\n      ...attributes\n    >\n      {{~#if (eq this.iconPosition \"leading\")~}}\n        {{~#if @icon~}}\n          <span class=\"hds-link-inline__icon hds-link-inline__icon--leading\">\n            <HdsIcon @name={{@icon}} @size=\"16\" @stretched={{true}} />\n          </span>\n        {{~/if~}}\n      {{~/if~}}\n      {{yield}}\n      {{~#if (eq this.iconPosition \"trailing\")~}}\n        {{~#if @icon~}}\n          <span class=\"hds-link-inline__icon hds-link-inline__icon--trailing\">\n            <HdsIcon @name={{@icon}} @size=\"16\" @stretched={{true}} />\n          </span>\n        {{~/if~}}\n      {{~/if~}}\n    </HdsInteractive>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\n\nimport hdsT from '../../../helpers/hds-t.ts';\nimport HdsAppFooterItem from './item.gts';\nimport HdsAppFooterLink from './link.gts';\n\nimport type HdsIntlService from '../../../services/hds-intl.ts';\n\nexport interface HdsAppFooterLegalLinksSignature {\n  Args: {\n    ariaLabel?: string;\n    hrefForTerms?: string;\n    hrefForPrivacy?: string;\n    hrefForSecurity?: string;\n    hrefForSupport?: string;\n    hrefForAccessibility?: string;\n  };\n  Element: HTMLUListElement;\n}\n\nexport default class HdsAppFooterLegalLinks extends Component<HdsAppFooterLegalLinksSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  get ariaLabel(): string {\n    return (\n      this.args.ariaLabel ??\n      this.hdsIntl.t('hds.components.app-footer.legal-links.aria-label', {\n        default: 'Legal links',\n      })\n    );\n  }\n\n  get hrefForSupport(): string {\n    return this.args.hrefForSupport ?? 'https://www.hashicorp.com/support';\n  }\n\n  get hrefForTerms(): string {\n    return (\n      this.args.hrefForTerms ?? 'https://www.hashicorp.com/terms-of-service'\n    );\n  }\n\n  get hrefForPrivacy(): string {\n    return this.args.hrefForPrivacy ?? 'https://www.hashicorp.com/privacy';\n  }\n\n  get hrefForSecurity(): string {\n    return this.args.hrefForSecurity ?? 'https://www.hashicorp.com/security';\n  }\n\n  get hrefForAccessibility(): string {\n    return (\n      this.args.hrefForAccessibility ??\n      'https://www.hashicorp.com/accessibility'\n    );\n  }\n\n  <template>\n    <HdsAppFooterItem>\n      <ul\n        class=\"hds-app-footer__legal-links\"\n        aria-label={{this.ariaLabel}}\n        ...attributes\n      >\n        <HdsAppFooterLink @href={{this.hrefForSupport}}>\n          {{hdsT\n            \"hds.components.app-footer.legal-links.support\"\n            default=\"Support\"\n          }}\n        </HdsAppFooterLink>\n        <HdsAppFooterLink @href={{this.hrefForTerms}}>\n          {{hdsT \"hds.components.app-footer.legal-links.terms\" default=\"Terms\"}}\n        </HdsAppFooterLink>\n        <HdsAppFooterLink @href={{this.hrefForPrivacy}}>\n          {{hdsT\n            \"hds.components.app-footer.legal-links.privacy\"\n            default=\"Privacy\"\n          }}\n        </HdsAppFooterLink>\n        <HdsAppFooterLink @href={{this.hrefForSecurity}}>\n          {{hdsT\n            \"hds.components.app-footer.legal-links.security\"\n            default=\"Security\"\n          }}\n        </HdsAppFooterLink>\n        <HdsAppFooterLink @href={{this.hrefForAccessibility}}>\n          {{hdsT\n            \"hds.components.app-footer.legal-links.accessibility\"\n            default=\"Accessibility\"\n          }}\n        </HdsAppFooterLink>\n      </ul>\n    </HdsAppFooterItem>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nimport HdsIcon from '../icon/index.gts';\n\nimport type { HdsIconSignature } from '../icon/index.gts';\n\ninterface HdsAppSideNavToggleButtonSignature {\n  Args: {\n    icon: HdsIconSignature['Args']['name'];\n  };\n  Element: HTMLButtonElement;\n}\n\nconst HdsAppSideNavToggleButton: TemplateOnlyComponent<HdsAppSideNavToggleButtonSignature> =\n  <template>\n    <button class=\"hds-app-side-nav__toggle-button\" type=\"button\" ...attributes>\n      <HdsIcon @name={{@icon}} />\n    </button>\n  </template>;\n\nexport default HdsAppSideNavToggleButton;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { hash } from '@ember/helper';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport hdsT from '../../../../helpers/hds-t.ts';\nimport HdsYield from '../../yield/index.gts';\nimport HdsAppSideNavListItem from './item.gts';\nimport HdsAppSideNavListBackLink from './back-link.gts';\nimport HdsAppSideNavListTitle from './title.gts';\nimport HdsAppSideNavListLink from './link.gts';\n\nexport interface HdsAppSideNavListSignature {\n  Blocks: {\n    default: [\n      {\n        ExtraBefore?: typeof HdsYield;\n        Item?: typeof HdsAppSideNavListItem;\n        BackLink?: typeof HdsAppSideNavListBackLink;\n        Title?: WithBoundArgs<typeof HdsAppSideNavListTitle, 'didInsertTitle'>;\n        Link?: typeof HdsAppSideNavListLink;\n        ExtraAfter?: typeof HdsYield;\n      },\n    ];\n  };\n  Element: HTMLElement;\n}\n\nexport default class HdsAppSideNavList extends Component<HdsAppSideNavListSignature> {\n  @tracked private _titleIds: string[] = [];\n\n  get titleIds(): string {\n    return this._titleIds.join(' ');\n  }\n\n  didInsertTitle = (titleId: string): void => {\n    this._titleIds = [...this._titleIds, titleId];\n  };\n\n  <template>\n    <nav\n      class=\"hds-app-side-nav__list-wrapper\"\n      aria-label={{hdsT\n        \"hds.components.app-side-nav.list.aria-label\"\n        default=\"Application local\"\n      }}\n      ...attributes\n    >\n      {{yield (hash ExtraBefore=HdsYield)}}\n      <ul\n        class=\"hds-app-side-nav__list\"\n        role=\"list\"\n        aria-labelledby={{this.titleIds}}\n      >\n        {{yield\n          (hash\n            Item=HdsAppSideNavListItem\n            BackLink=HdsAppSideNavListBackLink\n            Title=(component\n              HdsAppSideNavListTitle didInsertTitle=this.didInsertTitle\n            )\n            Link=HdsAppSideNavListLink\n          )\n        }}\n      </ul>\n      {{yield (hash ExtraAfter=HdsYield)}}\n    </nav>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nimport HdsAppSideNavListItem from './item.gts';\nimport HdsIcon from '../../icon/index.gts';\nimport HdsInteractive from '../../interactive/index.gts';\n\nimport type { HdsInteractiveSignature } from '../../interactive/index.gts';\n\nexport interface HdsAppSideNavListBackLinkSignature {\n  Args: HdsInteractiveSignature['Args'] & {\n    text: string;\n  };\n  Element: HdsInteractiveSignature['Element'];\n}\n\nconst HdsAppSideNavListBackLink: TemplateOnlyComponent<HdsAppSideNavListBackLinkSignature> =\n  <template>\n    <HdsAppSideNavListItem>\n      <HdsInteractive\n        class=\"hds-app-side-nav__list-item-link hds-app-side-nav__list-item-link--back-link\"\n        @current-when={{@current-when}}\n        @model={{@model}}\n        @models={{@models}}\n        @query={{@query}}\n        @replace={{@replace}}\n        @route={{@route}}\n        @isRouteExternal={{@isRouteExternal}}\n        @href={{@href}}\n        @isHrefExternal={{@isHrefExternal}}\n        ...attributes\n      >\n        <HdsIcon\n          class=\"hds-app-side-nav__list-item-icon-leading\"\n          @name=\"chevron-left\"\n        />\n        <span\n          class=\"hds-app-side-nav__list-item-text hds-typography-body-200 hds-font-weight-medium\"\n        >\n          {{@text}}\n        </span>\n      </HdsInteractive>\n    </HdsAppSideNavListItem>\n  </template>;\n\nexport default HdsAppSideNavListBackLink;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\n\nimport HdsAppSideNavListItem from './item.gts';\n\nexport interface HdsAppSideNavListTitleSignature {\n  Args: {\n    didInsertTitle?: (titleId: string) => void;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsAppSideNavListTitle extends Component<HdsAppSideNavListTitleSignature> {\n  /*  Generate a unique ID for each Title */\n  private _titleId = 'title-' + guidFor(this);\n\n  didInsertTitle = (element: HTMLElement): void => {\n    const { didInsertTitle } = this.args;\n\n    if (typeof didInsertTitle === 'function') {\n      didInsertTitle(element.id);\n    }\n  };\n\n  <template>\n    <HdsAppSideNavListItem>\n      <div\n        class=\"hds-app-side-nav__list-title hds-typography-body-100 hds-font-weight-semibold\"\n        id={{this._titleId}}\n        {{didInsert this.didInsertTitle}}\n        ...attributes\n      >{{~yield~}}</div>\n    </HdsAppSideNavListItem>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nimport HdsAppSideNavListItem from './item.gts';\nimport HdsIcon from '../../icon/index.gts';\nimport HdsInteractive from '../../interactive/index.gts';\nimport HdsBadge from '../../badge/index.gts';\nimport HdsBadgeCount from '../../badge-count/index.gts';\n\nimport type { HdsIconSignature } from '../../icon/index.gts';\nimport type { HdsInteractiveSignature } from '../../interactive/index.gts';\n\nexport interface HdsAppSideNavListLinkSignature {\n  Args: HdsInteractiveSignature['Args'] & {\n    icon?: HdsIconSignature['Args']['name'];\n    text?: string;\n    badge?: string;\n    count?: string;\n    hasSubItems?: boolean;\n    isActive?: boolean;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HdsInteractiveSignature['Element'];\n}\n\nconst HdsAppSideNavListLink: TemplateOnlyComponent<HdsAppSideNavListLinkSignature> =\n  <template>\n    <HdsAppSideNavListItem>\n      <HdsInteractive\n        class=\"hds-app-side-nav__list-item-link {{if @isActive 'active'}}\"\n        @current-when={{@current-when}}\n        @model={{@model}}\n        @models={{@models}}\n        @query={{@query}}\n        @replace={{@replace}}\n        @route={{@route}}\n        @isRouteExternal={{@isRouteExternal}}\n        @href={{@href}}\n        @isHrefExternal={{@isHrefExternal}}\n        aria-current={{if @isActive \"page\"}}\n        ...attributes\n      >\n        {{#if @icon}}\n          <HdsIcon\n            class=\"hds-app-side-nav__list-item-icon-leading\"\n            @name={{@icon}}\n          />\n        {{/if}}\n\n        {{#if @text}}\n          <span\n            class=\"hds-app-side-nav__list-item-text hds-typography-body-200 hds-font-weight-medium\"\n          >\n            {{@text}}\n          </span>\n        {{/if}}\n\n        {{#if @count}}\n          <HdsBadgeCount @text={{@count}} @type=\"outlined\" @size=\"small\" />\n        {{/if}}\n\n        {{#if @badge}}\n          <HdsBadge @text={{@badge}} @type=\"outlined\" @size=\"small\" />\n        {{/if}}\n\n        {{yield}}\n\n        {{#if @hasSubItems}}\n          <span class=\"hds-app-side-nav__list-item-icon-trailing\">\n            <HdsIcon @name=\"chevron-right\" />\n          </span>\n        {{/if}}\n        {{#if @isHrefExternal}}\n          <span class=\"hds-app-side-nav__list-item-icon-trailing\">\n            <HdsIcon @name=\"external-link\" />\n          </span>\n        {{/if}}\n      </HdsInteractive>\n    </HdsAppSideNavListItem>\n  </template>;\n\nexport default HdsAppSideNavListLink;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\n\nimport HdsCopyButton from '../copy/button/index.gts';\n\nimport type { HdsCopyButtonSignature } from '../copy/button/index.gts';\n\nexport interface HdsCodeBlockCopyButtonSignature {\n  Args: {\n    targetToCopy?: HdsCopyButtonSignature['Args']['targetToCopy'];\n    text?: HdsCopyButtonSignature['Args']['text'];\n    onCopy?: HdsCopyButtonSignature['Args']['onSuccess'];\n    copySuccessMessageText?: HdsCopyButtonSignature['Args']['ariaMessageText'];\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HdsCopyButtonSignature['Element'];\n}\n\nexport default class HdsCodeBlockCopyButton extends Component<HdsCodeBlockCopyButtonSignature> {\n  get text(): HdsCopyButtonSignature['Args']['text'] {\n    return this.args.text ? this.args.text : 'Copy';\n  }\n\n  <template>\n    <HdsCopyButton\n      class=\"hds-code-block__copy-button\"\n      @text={{this.text}}\n      @isIconOnly={{true}}\n      @size=\"small\"\n      @targetToCopy={{@targetToCopy}}\n      @onSuccess={{@onCopy}}\n      @ariaMessageText={{@copySuccessMessageText}}\n      ...attributes\n    />\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { modifier } from 'ember-modifier';\n\nimport { HdsCodeBlockTitleTagValues } from './types.ts';\nimport HdsTextBody from '../text/body.gts';\n\nimport type { HdsCodeBlockTitleTags } from './types.ts';\nimport type { HdsTextBodySignature } from '../text/body.gts';\n\ntype HdsCodeBlockTitleElement = HdsTextBodySignature['Element'];\nexport interface HdsCodeBlockTitleSignature {\n  Args: {\n    tag?: HdsCodeBlockTitleTags;\n    didInsertNode: (element: HdsCodeBlockTitleElement) => void;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HdsTextBodySignature['Element'];\n}\n\nexport default class HdsCodeBlockTitle extends Component<HdsCodeBlockTitleSignature> {\n  private _id = 'title-' + guidFor(this);\n\n  private _setUpTitle = modifier(\n    (\n      element: HTMLElement,\n      [insertCallbackFunction]: [(element: HTMLElement) => void]\n    ) => {\n      if (typeof insertCallbackFunction === 'function') {\n        insertCallbackFunction(element);\n      }\n    }\n  );\n\n  get componentTag(): HdsCodeBlockTitleTags {\n    return this.args.tag ?? HdsCodeBlockTitleTagValues.P;\n  }\n\n  <template>\n    <HdsTextBody\n      id={{this._id}}\n      @size=\"200\"\n      @tag={{this.componentTag}}\n      @weight=\"semibold\"\n      class=\"hds-code-block__title\"\n      ...attributes\n      {{this._setUpTitle @didInsertNode}}\n    >\n      {{yield}}\n    </HdsTextBody>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { modifier } from 'ember-modifier';\n\nimport HdsTextBody from '../text/body.gts';\n\nimport type { HdsTextBodySignature } from '../text/body.gts';\n\ntype HdsCodeBlockDescriptionElement = HdsTextBodySignature['Element'];\nexport interface HdsCodeBlockDescriptionSignature {\n  Args: {\n    didInsertNode: (element: HdsCodeBlockDescriptionElement) => void;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HdsCodeBlockDescriptionElement;\n}\n\nexport default class HdsCodeBlockDescription extends Component<HdsCodeBlockDescriptionSignature> {\n  private _id = 'description-' + guidFor(this);\n\n  private _setUpDescription = modifier(\n    (\n      element: HTMLElement,\n      [insertCallbackFunction]: [(element: HTMLElement) => void]\n    ) => {\n      if (typeof insertCallbackFunction === 'function') {\n        insertCallbackFunction(element);\n      }\n    }\n  );\n\n  <template>\n    <HdsTextBody\n      id={{this._id}}\n      @tag=\"p\"\n      @size=\"100\"\n      class=\"hds-code-block__description\"\n      ...attributes\n      {{this._setUpDescription @didInsertNode}}\n    >\n      {{yield}}\n    </HdsTextBody>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\n\nimport HdsTextBody from '../text/body.gts';\n\nimport type { HdsTextBodySignature } from '../text/body.gts';\n\ntype HdsCodeEditorDescriptionElement = HdsTextBodySignature['Element'];\nexport interface HdsCodeEditorDescriptionSignature {\n  Args: {\n    editorId: string;\n    onInsert: (element: HdsCodeEditorDescriptionElement) => void;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HdsCodeEditorDescriptionElement;\n}\n\nexport default class HdsCodeEditorDescription extends Component<HdsCodeEditorDescriptionSignature> {\n  private _id = `${this.args.editorId}-description`;\n\n  <template>\n    <HdsTextBody\n      id={{this._id}}\n      class=\"hds-code-editor__description\"\n      @tag=\"p\"\n      @size=\"100\"\n      {{didInsert @onInsert}}\n      ...attributes\n    >\n      {{yield}}\n    </HdsTextBody>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { on } from '@ember/modifier';\n\nimport HdsButton from '../button/index.gts';\nimport hdsT from '../../../helpers/hds-t.ts';\n\nimport type { HdsButtonSignature } from '../button/index.gts';\n\nexport interface HdsCodeEditorFullScreenButtonSignature {\n  Args: {\n    isFullScreen: boolean;\n    onToggleFullScreen: () => void;\n  };\n  Element: HdsButtonSignature['Element'];\n}\n\nexport default class HdsCodeEditorFullScreenButton extends Component<HdsCodeEditorFullScreenButtonSignature> {\n  get state(): 'minimize' | 'maximize' {\n    return this.args.isFullScreen ? 'minimize' : 'maximize';\n  }\n\n  get className(): string {\n    const classes = [\n      'hds-code-editor__full-screen-button',\n      'hds-code-editor__button',\n    ];\n\n    const stateClass = `hds-code-editor__full-screen-button--${this.state}`;\n\n    classes.push(stateClass);\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <HdsButton\n      class={{this.className}}\n      aria-pressed={{@isFullScreen}}\n      @isIconOnly={{true}}\n      @color=\"secondary\"\n      @size=\"small\"\n      @icon={{this.state}}\n      @text={{hdsT\n        \"hds.components.code-editor.full-screen-button.text\"\n        default=\"Toggle full screen view\"\n      }}\n      {{on \"click\" @onToggleFullScreen}}\n      ...attributes\n    />\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\n\nimport HdsTextBody from '../text/body.gts';\n\nimport type { HdsTextBodySignature } from '../text/body.gts';\n\ntype HdsCodeEditorTitleElement = HdsTextBodySignature['Element'];\n\nexport interface HdsCodeEditorTitleSignature {\n  Args: {\n    editorId: string;\n    tag?: HdsTextBodySignature['Args']['tag'];\n    onInsert: (element: HdsCodeEditorTitleElement) => void;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HdsCodeEditorTitleElement;\n}\n\nexport default class HdsCodeEditorTitle extends Component<HdsCodeEditorTitleSignature> {\n  private _id = `${this.args.editorId}-title`;\n\n  get tag(): HdsTextBodySignature['Args']['tag'] {\n    return this.args.tag ?? 'h2';\n  }\n\n  <template>\n    <HdsTextBody\n      id={{this._id}}\n      class=\"hds-code-editor__title\"\n      @tag={{this.tag}}\n      @size=\"200\"\n      @weight=\"semibold\"\n      {{didInsert @onInsert}}\n      ...attributes\n    >\n      {{yield}}\n    </HdsTextBody>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsDialogPrimitiveDescriptionSignature {\n  Args: {\n    contextualClass?: string;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLDivElement;\n}\n\nconst HdsDialogPrimitiveDescription: TemplateOnlyComponent<HdsDialogPrimitiveDescriptionSignature> =\n  <template>\n    <div\n      class=\"hds-dialog-primitive__description hds-typography-body-200 hds-foreground-primary\n        {{@contextualClass}}\"\n      ...attributes\n    >\n      {{yield}}\n    </div>\n  </template>;\n\nexport default HdsDialogPrimitiveDescription;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\n\nimport HdsSeparator from '../../separator/index.gts';\n\nexport interface HdsFormSeparatorSignature {\n  Args: {\n    isFullWidth?: boolean;\n  };\n  Element: HTMLElement;\n}\n\nexport default class HdsFormSeparator extends Component<HdsFormSeparatorSignature> {\n  get classNames(): string {\n    const classes = ['hds-form__separator'];\n\n    // add a class based on the @isFullWidth argument\n    if (this.args.isFullWidth) {\n      classes.push('hds-form-content--is-full-width');\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <HdsSeparator class={{this.classNames}} @spacing=\"0\" ...attributes />\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { hash } from '@ember/helper';\n\nimport HdsButtonSet from '../../button-set/index.gts';\n\nexport interface HdsFormFooterSignature {\n  Args: {\n    isFullWidth?: boolean;\n  };\n  Blocks: {\n    default: [\n      {\n        ButtonSet?: typeof HdsButtonSet;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsFormFooter extends Component<HdsFormFooterSignature> {\n  get classNames(): string {\n    const classes = ['hds-form__footer'];\n\n    // add a class based on the @isFullWidth argument\n    if (this.args.isFullWidth) {\n      classes.push('hds-form-content--is-full-width');\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <div class={{this.classNames}} ...attributes>\n      {{yield (hash ButtonSet=HdsButtonSet)}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { hash } from '@ember/helper';\n\nimport HdsFormHeaderTitle from './title.gts';\nimport HdsFormHeaderDescription from './description.gts';\n\nexport interface HdsFormHeaderSignature {\n  Args: {\n    isFullWidth?: boolean;\n  };\n  Blocks: {\n    default: [\n      {\n        Title?: typeof HdsFormHeaderTitle;\n        Description?: typeof HdsFormHeaderDescription;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsFormHeader extends Component<HdsFormHeaderSignature> {\n  get classNames(): string {\n    const classes = ['hds-form__header'];\n\n    // add a class based on the @isFullWidth argument\n    if (this.args.isFullWidth) {\n      classes.push('hds-form-content--is-full-width');\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <div class={{this.classNames}} ...attributes>\n      {{yield\n        (hash Title=HdsFormHeaderTitle Description=HdsFormHeaderDescription)\n      }}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { hash } from '@ember/helper';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport HdsFormSectionHeader from './header.gts';\nimport HdsFormSectionMultiFieldGroup from './multi-field-group/index.gts';\nimport HdsFormHeaderTitle from '../header/title.gts';\nimport HdsFormHeaderDescription from '../header/description.gts';\nimport HdsFormSectionMultiFieldGroupItem from './multi-field-group/item.gts';\n\nexport interface HdsFormSectionSignature {\n  Args: {\n    isFullWidth?: boolean;\n  };\n  Blocks: {\n    default: [\n      {\n        Section?: typeof HdsFormSection; // for nested sections\n        Header?: typeof HdsFormSectionHeader;\n        HeaderTitle?: WithBoundArgs<typeof HdsFormHeaderTitle, 'size'>;\n        HeaderDescription?: typeof HdsFormHeaderDescription;\n        MultiFieldGroup?: typeof HdsFormSectionMultiFieldGroup;\n        MultiFieldGroupItem?: typeof HdsFormSectionMultiFieldGroupItem;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsFormSection extends Component<HdsFormSectionSignature> {\n  get classNames(): string {\n    const classes = ['hds-form__section'];\n\n    // add a class based on the @isFullWidth argument\n    if (this.args.isFullWidth) {\n      classes.push('hds-form-content--is-full-width');\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    {{! IMPORTANT: we need to add \"squishies\" here (~) because otherwise the whitespace added by Ember causes the empty element to still occupy space - See https://handlebarsjs.com/guide/expressions.html#whitespace-control }}\n    <div class={{this.classNames}} ...attributes>\n      {{~yield\n        (hash\n          Header=HdsFormSectionHeader\n          HeaderTitle=(component HdsFormHeaderTitle size=\"300\")\n          HeaderDescription=HdsFormHeaderDescription\n          MultiFieldGroup=HdsFormSectionMultiFieldGroup\n          MultiFieldGroupItem=HdsFormSectionMultiFieldGroupItem\n        )\n      ~}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport { hash } from '@ember/helper';\n\nimport HdsFormCheckboxBase from './base.gts';\nimport HdsFormField from '../field/index.gts';\n\nimport type { HdsFormFieldSignature } from '../field/index.gts';\nimport type { HdsFormCheckboxBaseSignature } from './base.gts';\n\nexport interface HdsFormCheckboxFieldSignature {\n  Args: Omit<HdsFormFieldSignature['Args'], 'isOptional'> & {\n    value?: string;\n    name?: string;\n  };\n  Blocks: {\n    default: [\n      {\n        Label?: HdsFormFieldSignature['Blocks']['default'][0]['Label'];\n        HelperText?: HdsFormFieldSignature['Blocks']['default'][0]['HelperText'];\n        Error?: HdsFormFieldSignature['Blocks']['default'][0]['Error'];\n      },\n    ];\n  };\n  Element: HdsFormCheckboxBaseSignature['Element'];\n}\n\nconst HdsFormCheckboxField: TemplateOnlyComponent<HdsFormCheckboxFieldSignature> =\n  <template>\n    <HdsFormField\n      @layout=\"flag\"\n      @contextualClass={{@contextualClass}}\n      @extraAriaDescribedBy={{@extraAriaDescribedBy}}\n      @id={{@id}}\n      as |F|\n    >\n      {{! Notice: the order of the elements is not relevant here, because it's controlled at \"HdsFormField\" component level }}\n      {{yield (hash Label=F.Label HelperText=F.HelperText Error=F.Error)}}\n      <F.Control>\n        <HdsFormCheckboxBase\n          @value={{@value}}\n          name={{@name}}\n          required={{@isRequired}}\n          ...attributes\n          id={{F.id}}\n          aria-describedby={{F.ariaDescribedBy}}\n        />\n      </F.Control>\n    </HdsFormField>\n  </template>;\n\nexport default HdsFormCheckboxField;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\nimport Component from '@glimmer/component';\nimport { modifier } from 'ember-modifier';\nimport { on } from '@ember/modifier';\nimport { service } from '@ember/service';\n\nimport type HdsIntlService from '../../../../services/hds-intl.ts';\n\nimport HdsButton from '../../button/index.gts';\n\nimport type { HdsButtonSignature } from '../../button/index.gts';\n\nexport interface HdsFormKeyValueInputsDeleteRowButtonSignature {\n  Args: {\n    onClick?: (rowData: unknown, rowIndex: number) => void;\n    onInsert?: () => void;\n    onRemove?: () => void;\n    returnFocusTo?: HTMLFieldSetElement;\n    rowData: unknown;\n    rowIndex: number;\n    text?: HdsButtonSignature['Args']['text'];\n  };\n  Element: HdsButtonSignature['Element'];\n}\n\nexport default class HdsFormKeyValueInputsDeleteRowButton extends Component<HdsFormKeyValueInputsDeleteRowButtonSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  private _onInsert = modifier(() => {\n    if (this.args.onInsert) {\n      this.args.onInsert();\n    }\n\n    return () => {\n      if (this.args.onRemove) {\n        this.args.onRemove();\n      }\n\n      const { returnFocusTo } = this.args;\n\n      if (returnFocusTo && returnFocusTo.isConnected) {\n        returnFocusTo.focus();\n      }\n    };\n  });\n\n  get text(): string {\n    return (\n      this.args.text ??\n      this.hdsIntl.t(\n        'hds.components.form.key-value-inputs.delete-row-button.text',\n        {\n          default: 'Delete row {rowNumber}',\n          rowNumber: this.args.rowIndex + 1,\n        }\n      )\n    );\n  }\n\n  onClick = (): void => {\n    const { onClick } = this.args;\n\n    if (typeof onClick === 'function') {\n      onClick(this.args.rowData, this.args.rowIndex);\n    }\n  };\n\n  <template>\n    <span\n      class=\"hds-form-key-value-inputs__delete-row-button-container\"\n      {{this._onInsert}}\n    >\n      <HdsButton\n        @text={{this.text}}\n        @size=\"medium\"\n        @color=\"secondary\"\n        @icon=\"trash\"\n        @isIconOnly={{true}}\n        class=\"hds-form-key-value-inputs__delete-row-button\"\n        {{on \"click\" this.onClick}}\n        ...attributes\n      />\n    </span>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { modifier } from 'ember-modifier';\nimport { hash, concat } from '@ember/helper';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport {\n  ariaDescribedBy,\n  registerAriaDescriptionElement,\n  unregisterAriaDescriptionElement,\n} from '../../../../utils/hds-aria-described-by.ts';\nimport { getElementId } from '../../../../utils/hds-get-element-id.ts';\nimport HdsFormError from '../error/index.gts';\nimport HdsFormFileInputBase from '../file-input/base.gts';\nimport HdsFormHelperText from '../helper-text/index.gts';\nimport HdsFormLabel, { ID_PREFIX as LABEL_ID_PREFIX } from '../label/index.gts';\nimport HdsFormMaskedInputBase from '../masked-input/base.gts';\nimport HdsFormSelectBase from '../select/base.gts';\nimport HdsFormSuperSelectMultipleBase from '../super-select/multiple/base.gts';\nimport HdsFormSuperSelectSingleBase from '../super-select/single/base.gts';\nimport HdsFormTextareaBase from '../textarea/base.gts';\nimport HdsFormTextInputBase from '../text-input/base.gts';\n\nimport { service } from '@ember/service';\n\nimport type HdsIntlService from '../../../../services/hds-intl.ts';\nimport type { AriaDescribedByComponent } from '../../../../utils/hds-aria-described-by.ts';\n\nexport interface HdsFormKeyValueInputsFieldSignature {\n  Args: {\n    extraAriaDescribedBy?: string;\n    id?: string;\n    isInvalid?: boolean;\n    isOptional?: boolean;\n    isRequired?: boolean;\n    onInsert?: () => void;\n    onRemove?: () => void;\n    rowIndex: number;\n    width?: string;\n  };\n  Blocks: {\n    default?: [\n      {\n        Label?: WithBoundArgs<\n          typeof HdsFormLabel,\n          | 'contextualClass'\n          | 'controlId'\n          | 'hiddenText'\n          | 'isOptional'\n          | 'isRequired'\n        >;\n        HelperText?: WithBoundArgs<\n          typeof HdsFormHelperText,\n          'contextualClass' | 'controlId' | 'onInsert'\n        >;\n        FileInput?: WithBoundArgs<\n          typeof HdsFormFileInputBase,\n          'ariaDescribedBy' | 'id'\n        >;\n        MaskedInput?: WithBoundArgs<\n          typeof HdsFormMaskedInputBase,\n          'ariaDescribedBy' | 'id' | 'isInvalid'\n        >;\n        Select?: WithBoundArgs<\n          typeof HdsFormSelectBase,\n          'ariaDescribedBy' | 'id' | 'isInvalid'\n        >;\n        SuperSelectSingle?: WithBoundArgs<\n          typeof HdsFormSuperSelectSingleBase,\n          'ariaDescribedBy' | 'ariaLabelledBy' | 'isInvalid' | 'triggerId'\n        >;\n        SuperSelectMultiple?: WithBoundArgs<\n          typeof HdsFormSuperSelectMultipleBase,\n          'ariaDescribedBy' | 'ariaLabelledBy' | 'isInvalid' | 'triggerId'\n        >;\n        TextInput?: WithBoundArgs<\n          typeof HdsFormTextInputBase,\n          'ariaDescribedBy' | 'id' | 'isInvalid'\n        >;\n        Textarea?: WithBoundArgs<\n          typeof HdsFormTextareaBase,\n          'ariaDescribedBy' | 'id' | 'isInvalid'\n        >;\n        Error?: WithBoundArgs<\n          typeof HdsFormError,\n          'contextualClass' | 'controlId' | 'onInsert' | 'onRemove'\n        >;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\n// @ts-expect-error: decorator function return type 'ClassOf<AriaDescribedBy>' is not assignable to 'typeof HdsFormField'\n@ariaDescribedBy\nexport default class HdsFormKeyValueInputsField extends Component<HdsFormKeyValueInputsFieldSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  private _onInsert = modifier(() => {\n    if (this.args.onInsert) {\n      this.args.onInsert();\n    }\n\n    return () => {\n      if (this.args.onRemove) {\n        this.args.onRemove();\n      }\n    };\n  });\n\n  get id(): string {\n    return getElementId(this);\n  }\n\n  get labelHiddenText(): string {\n    return this.hdsIntl.t(\n      'hds.components.form.key-value-inputs.field.label-hidden-text',\n      {\n        default: 'row {rowNumber}',\n        rowNumber: this.args.rowIndex + 1,\n      }\n    );\n  }\n\n  get labelIdPrefix(): string {\n    return LABEL_ID_PREFIX;\n  }\n\n  appendDescriptor = (element: HTMLElement): void => {\n    registerAriaDescriptionElement(this as AriaDescribedByComponent, element);\n  };\n\n  removeDescriptor = (element: HTMLElement): void => {\n    unregisterAriaDescriptionElement(this as AriaDescribedByComponent, element);\n  };\n\n  <template>\n    <div\n      class=\"hds-form-key-value-inputs__field\"\n      data-width={{@width}}\n      ...attributes\n      {{this._onInsert}}\n    >\n      <div class=\"hds-form-key-value-inputs__field-header\">\n        {{yield\n          (hash\n            Label=(component\n              HdsFormLabel\n              contextualClass=\"hds-form-key-value-inputs__field-label\"\n              controlId=this.id\n              hiddenText=this.labelHiddenText\n              isOptional=@isOptional\n              isRequired=@isRequired\n            )\n          )\n        }}\n        {{yield\n          (hash\n            HelperText=(component\n              HdsFormHelperText\n              contextualClass=\"hds-form-key-value-inputs__field-helper-text\"\n              controlId=this.id\n              onInsert=this.appendDescriptor\n            )\n          )\n        }}\n      </div>\n      <div class=\"hds-form-key-value-inputs__field-control\">\n        {{! @glint-expect-error - Glint does not recognize this.ariaDescribedBy as defined when used directly in a multi-line hash passed to yield. Since @glint-expect-error only applies to the line immediately after it and cannot be placed inside a multi-line hash, we use a let to work around this limitation. }}\n        {{#let this.ariaDescribedBy as |ariaDescribedBy|}}\n          {{yield\n            (hash\n              FileInput=(component\n                HdsFormFileInputBase ariaDescribedBy=ariaDescribedBy id=this.id\n              )\n              MaskedInput=(component\n                HdsFormMaskedInputBase\n                ariaDescribedBy=ariaDescribedBy\n                id=this.id\n                isInvalid=@isInvalid\n              )\n              Select=(component\n                HdsFormSelectBase\n                ariaDescribedBy=ariaDescribedBy\n                id=this.id\n                isInvalid=@isInvalid\n              )\n              SuperSelectSingle=(component\n                HdsFormSuperSelectSingleBase\n                ariaDescribedBy=ariaDescribedBy\n                ariaLabelledBy=(concat this.labelIdPrefix this.id)\n                isInvalid=@isInvalid\n                triggerId=this.id\n              )\n              SuperSelectMultiple=(component\n                HdsFormSuperSelectMultipleBase\n                ariaDescribedBy=ariaDescribedBy\n                ariaLabelledBy=(concat this.labelIdPrefix this.id)\n                isInvalid=@isInvalid\n                triggerId=this.id\n              )\n              TextInput=(component\n                HdsFormTextInputBase\n                ariaDescribedBy=ariaDescribedBy\n                id=this.id\n                isInvalid=@isInvalid\n              )\n              Textarea=(component\n                HdsFormTextareaBase\n                ariaDescribedBy=ariaDescribedBy\n                id=this.id\n                isInvalid=@isInvalid\n              )\n            )\n          }}\n        {{/let}}\n\n        {{yield\n          (hash\n            Error=(component\n              HdsFormError\n              contextualClass=\"hds-form-key-value-inputs__field-error\"\n              controlId=this.id\n              onInsert=this.appendDescriptor\n              onRemove=this.removeDescriptor\n            )\n          )\n        }}\n      </div>\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nimport HdsTextBody from '../../text/body.gts';\n\nexport interface HdsFormSuperSelectPlaceholderSignature {\n  Args: {\n    placeholder?: string;\n  };\n}\n\nconst HdsFormSuperSelectPlaceholder: TemplateOnlyComponent<HdsFormSuperSelectPlaceholderSignature> =\n  <template>\n    <HdsTextBody\n      @tag=\"span\"\n      @size=\"200\"\n      class=\"ember-power-select-placeholder\"\n    >{{@placeholder}}</HdsTextBody>\n  </template>;\n\nexport default HdsFormSuperSelectPlaceholder;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { modifier } from 'ember-modifier';\n\nexport interface HdsFormKeyValueInputsGenericSignature {\n  Args: {\n    onInsert?: () => void;\n    onRemove?: () => void;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsFormKeyValueInputsGeneric extends Component<HdsFormKeyValueInputsGenericSignature> {\n  private _onInsert = modifier(() => {\n    if (this.args.onInsert) {\n      this.args.onInsert();\n    }\n\n    return () => {\n      if (this.args.onRemove) {\n        this.args.onRemove();\n      }\n    };\n  });\n\n  <template>\n    <div\n      class=\"hds-form-key-value-inputs__generic-container\"\n      {{this._onInsert}}\n      ...attributes\n    >\n      {{yield}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { on } from '@ember/modifier';\nimport { service } from '@ember/service';\n\nimport HdsButton from '../../button/index.gts';\n\nimport type HdsIntlService from '../../../../services/hds-intl.ts';\n\nimport type { HdsButtonSignature } from '../../button/index.gts';\n\nexport interface HdsFormKeyValueInputsAddRowButtonSignature {\n  Args: {\n    ariaLabel?: string;\n    onClick?: () => void;\n    text?: HdsButtonSignature['Args']['text'];\n  };\n  Element: HdsButtonSignature['Element'];\n}\n\nexport default class HdsFormKeyValueInputsAddRowButton extends Component<HdsFormKeyValueInputsAddRowButtonSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  get ariaDescription(): string {\n    return this.hdsIntl.t(\n      'hds.components.form.key-value-inputs.add-row-button.aria-description',\n      {\n        default:\n          'Adds a new row of one or more inputs at the end of the form field. Press shift tab to move focus back to the newly added row.',\n      }\n    );\n  }\n\n  get text(): string {\n    return (\n      this.args.text ??\n      this.hdsIntl.t(\n        'hds.components.form.key-value-inputs.add-row-button.text',\n        {\n          default: 'Add row',\n        }\n      )\n    );\n  }\n\n  onClick = (): void => {\n    const { onClick } = this.args;\n\n    if (typeof onClick === 'function') {\n      onClick();\n    }\n  };\n\n  <template>\n    <HdsButton\n      @text={{this.text}}\n      @size=\"medium\"\n      @color=\"secondary\"\n      @icon=\"plus\"\n      @iconPosition=\"leading\"\n      class=\"hds-form-key-value-inputs__add-row-button\"\n      aria-description={{this.ariaDescription}}\n      {{on \"click\" this.onClick}}\n      ...attributes\n    />\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport { hash } from '@ember/helper';\n\nimport HdsFormField from '../field/index.gts';\nimport HdsFormRadioBase from './base.gts';\n\nimport type { HdsFormFieldSignature } from '../field/index.gts';\nimport type { HdsFormRadioBaseSignature } from './base.gts';\n\nexport interface HdsFormRadioFieldSignature {\n  Args: Omit<HdsFormFieldSignature['Args'], 'isOptional'> & {\n    value?: string;\n    name?: string;\n  };\n  Blocks: {\n    default: [\n      {\n        Label?: HdsFormFieldSignature['Blocks']['default'][0]['Label'];\n        HelperText?: HdsFormFieldSignature['Blocks']['default'][0]['HelperText'];\n        Error?: HdsFormFieldSignature['Blocks']['default'][0]['Error'];\n      },\n    ];\n  };\n  Element: HdsFormRadioBaseSignature['Element'];\n}\n\nconst HdsFormRadioField: TemplateOnlyComponent<HdsFormRadioFieldSignature> =\n  <template>\n    <HdsFormField\n      @layout=\"flag\"\n      @contextualClass={{@contextualClass}}\n      @extraAriaDescribedBy={{@extraAriaDescribedBy}}\n      @id={{@id}}\n      as |F|\n    >\n      {{! Notice: the order of the elements is not relevant here, because it's controlled at \"HdsFormField\" component level }}\n      {{yield (hash Label=F.Label HelperText=F.HelperText Error=F.Error)}}\n      <F.Control>\n        <HdsFormRadioBase\n          @value={{@value}}\n          name={{@name}}\n          required={{@isRequired}}\n          ...attributes\n          id={{F.id}}\n          aria-describedby={{F.ariaDescribedBy}}\n        />\n      </F.Control>\n    </HdsFormField>\n  </template>;\n\nexport default HdsFormRadioField;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { hash } from '@ember/helper';\nimport style from 'ember-style-modifier';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport {\n  HdsFormRadioCardControlPositionValues,\n  HdsFormRadioCardAlignmentValues,\n} from './types.ts';\nimport HdsFormRadioBase from '../radio/base.gts';\nimport HdsIcon from '../../icon/index.gts';\nimport HdsBadge from '../../badge/index.gts';\nimport HdsFormRadioCardLabel from './label.gts';\nimport HdsFormRadioCardDescription from './description.gts';\nimport HdsYield from '../../yield/index.gts';\n\nimport type { HdsFormRadioBaseSignature } from '../radio/base.gts';\nimport type {\n  HdsFormRadioCardControlPositions,\n  HdsFormRadioCardAlignments,\n} from './types.ts';\n\nexport const DEFAULT_CONTROL_POSITION =\n  HdsFormRadioCardControlPositionValues.Bottom;\nexport const DEFAULT_ALIGNMENT = HdsFormRadioCardAlignmentValues.Left;\nexport const CONTROL_POSITIONS: HdsFormRadioCardControlPositions[] =\n  Object.values(HdsFormRadioCardControlPositionValues);\nexport const ALIGNMENTS: HdsFormRadioCardAlignments[] = Object.values(\n  HdsFormRadioCardAlignmentValues\n);\n\nexport interface HdsFormRadioCardSignature {\n  Args: {\n    name?: string;\n    value?: string;\n    checked?: boolean;\n    disabled?: boolean;\n    controlPosition?: HdsFormRadioCardControlPositions;\n    alignment?: HdsFormRadioCardAlignments;\n    maxWidth?: string;\n    extraAriaDescribedBy?: string;\n  };\n  Blocks: {\n    default: [\n      {\n        Icon?: WithBoundArgs<typeof HdsIcon, 'size'>;\n        Label?: typeof HdsFormRadioCardLabel;\n        Badge?: typeof HdsBadge;\n        Description?: typeof HdsFormRadioCardDescription;\n        Generic?: typeof HdsYield;\n      },\n    ];\n  };\n  Element: HdsFormRadioBaseSignature['Element'];\n}\n\nexport default class HdsFormRadioCard extends Component<HdsFormRadioCardSignature> {\n  get controlPosition(): HdsFormRadioCardControlPositions {\n    const { controlPosition = DEFAULT_CONTROL_POSITION } = this.args;\n\n    assert(\n      `@controlPosition for \"Hds::Form::RadioCard\" must be one of the following: ${CONTROL_POSITIONS.join(\n        ', '\n      )}; received: ${controlPosition}`,\n      CONTROL_POSITIONS.includes(controlPosition)\n    );\n\n    return controlPosition;\n  }\n\n  get alignment(): HdsFormRadioCardAlignments {\n    const { alignment = DEFAULT_ALIGNMENT } = this.args;\n\n    assert(\n      `@alignment for \"Hds::Form::RadioCard\" must be one of the following: ${ALIGNMENTS.join(\n        ', '\n      )}; received: ${alignment}`,\n      ALIGNMENTS.includes(alignment)\n    );\n\n    return alignment;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-form-radio-card'];\n\n    if (this.args.checked) {\n      classes.push('hds-form-radio-card--checked');\n    }\n    if (this.args.disabled) {\n      classes.push('hds-form-radio-card--disabled');\n    }\n    if (this.args.maxWidth) {\n      classes.push('hds-form-radio-card--has-fixed-width');\n    } else {\n      classes.push('hds-form-radio-card--has-fluid-width');\n    }\n\n    // add a class based on the @controlPosition argument\n    classes.push(`hds-form-radio-card--control-${this.controlPosition}`);\n\n    // add a class based on the @alignment argument\n    classes.push(`hds-form-radio-card--align-${this.alignment}`);\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <label class={{this.classNames}} {{style maxWidth=@maxWidth}}>\n      <span class=\"hds-form-radio-card__content\">\n        {{yield (hash Icon=(component HdsIcon size=\"24\"))}}\n        {{yield (hash Label=HdsFormRadioCardLabel)}}\n        {{yield (hash Badge=HdsBadge)}}\n        {{yield (hash Description=HdsFormRadioCardDescription)}}\n        {{yield (hash Generic=HdsYield)}}\n      </span>\n      <span class=\"hds-form-radio-card__control-wrapper\">\n        <HdsFormRadioBase\n          class=\"hds-form-radio-card__control\"\n          @value={{@value}}\n          name={{@name}}\n          checked={{@checked}}\n          disabled={{@disabled}}\n          aria-describedby={{@extraAriaDescribedBy}}\n          ...attributes\n        />\n      </span>\n    </label>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nimport HdsTextDisplay from '../../text/display.gts';\n\nimport type { HdsTextDisplaySignature } from '../../text/display.gts';\n\nexport interface HdsFormRadioCardLabelSignature {\n  Blocks: {\n    default: [];\n  };\n  Element: HdsTextDisplaySignature['Element'];\n}\n\nconst HdsFormRadioCardLabel: TemplateOnlyComponent<HdsFormRadioCardLabelSignature> =\n  <template>\n    <HdsTextDisplay\n      class=\"hds-form-radio-card__label\"\n      @tag=\"span\"\n      @size=\"300\"\n      @weight=\"bold\"\n      ...attributes\n    >{{yield}}</HdsTextDisplay>\n  </template>;\n\nexport default HdsFormRadioCardLabel;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nimport HdsTextBody from '../../text/body.gts';\n\nimport type { HdsTextBodySignature } from '../../text/body.gts';\n\nexport interface HdsFormRadioCardDescriptionSignature {\n  Blocks: {\n    default: [];\n  };\n  Element: HdsTextBodySignature['Element'];\n}\n\nconst HdsFormRadioCardDescription: TemplateOnlyComponent<HdsFormRadioCardDescriptionSignature> =\n  <template>\n    <HdsTextBody\n      class=\"hds-form-radio-card__description\"\n      @tag=\"span\"\n      @size=\"100\"\n      ...attributes\n    >{{yield}}</HdsTextBody>\n  </template>;\n\nexport default HdsFormRadioCardDescription;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { modifier } from 'ember-modifier';\n\nexport interface HdsFormToggleBaseSignature {\n  Args: {\n    value?: string;\n  };\n  Element: HTMLInputElement;\n}\n\nexport default class HdsFormToggleBase extends Component<HdsFormToggleBaseSignature> {\n  private _syncAriaChecked = modifier((element: HTMLInputElement) => {\n    const syncAriaChecked = () => {\n      const checkedValue = element.getAttribute('checked');\n      let ariaCheckedValue: 'true' | 'false';\n\n      if (checkedValue === 'mixed') {\n        ariaCheckedValue = 'false';\n      } else {\n        ariaCheckedValue = element.checked ? 'true' : 'false';\n      }\n\n      element.setAttribute('aria-checked', ariaCheckedValue);\n    };\n\n    syncAriaChecked();\n\n    const observer = new MutationObserver(syncAriaChecked);\n    observer.observe(element, {\n      attributes: true,\n      attributeFilter: ['checked'],\n    });\n\n    element.addEventListener('change', syncAriaChecked);\n\n    return () => {\n      observer.disconnect();\n      element.removeEventListener('change', syncAriaChecked);\n    };\n  });\n\n  <template>\n    <div class=\"hds-form-toggle\">\n      <input\n        class=\"hds-form-toggle__control\"\n        type=\"checkbox\"\n        ...attributes\n        value={{@value}}\n        role=\"switch\"\n        {{this._syncAriaChecked}}\n      />\n      <div class=\"hds-form-toggle__facade\"></div>\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport { hash } from '@ember/helper';\n\nimport HdsFormField from '../field/index.gts';\nimport HdsFormToggleBase from './base.gts';\n\nimport type { HdsFormFieldSignature } from '../field/index.gts';\nimport type { HdsFormToggleBaseSignature } from './base.gts';\n\nexport interface HdsFormToggleFieldSignature {\n  Args: Omit<HdsFormFieldSignature['Args'], 'isOptional'> & {\n    value?: string;\n  };\n  Blocks: {\n    default: [\n      {\n        Label?: HdsFormFieldSignature['Blocks']['default'][0]['Label'];\n        HelperText?: HdsFormFieldSignature['Blocks']['default'][0]['HelperText'];\n        Error?: HdsFormFieldSignature['Blocks']['default'][0]['Error'];\n      },\n    ];\n  };\n  Element: HdsFormToggleBaseSignature['Element'];\n}\n\nconst HdsFormToggleField: TemplateOnlyComponent<HdsFormToggleFieldSignature> =\n  <template>\n    <HdsFormField\n      @layout=\"flag\"\n      @contextualClass={{@contextualClass}}\n      @extraAriaDescribedBy={{@extraAriaDescribedBy}}\n      @id={{@id}}\n      as |F|\n    >\n      {{! Notice: the order of the elements is not relevant here, because is controlled at \"HdsFormField\" component level }}\n      {{yield (hash Label=F.Label HelperText=F.HelperText Error=F.Error)}}\n      <F.Control>\n        <HdsFormToggleBase\n          @value={{@value}}\n          required={{@isRequired}}\n          ...attributes\n          id={{F.id}}\n          aria-describedby={{F.ariaDescribedBy}}\n        />\n      </F.Control>\n    </HdsFormField>\n  </template>;\n\nexport default HdsFormToggleField;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\n\nimport {\n  HdsIconTileColorNeutral,\n  HdsIconTileProductValues,\n  HdsIconTileSizeValues,\n} from './types.ts';\nimport HdsIcon from '../icon/index.gts';\n\nimport type {\n  HdsIconTileColors,\n  HdsIconTileProducts,\n  HdsIconTileSizes,\n} from './types.ts';\nimport type { HdsIconSignature } from '../icon/index.gts';\n\nexport const DEFAULT_SIZE = 'medium';\nexport const DEFAULT_COLOR = 'neutral';\nexport const SIZES: HdsIconTileSizes[] = Object.values(HdsIconTileSizeValues);\nexport const COLORS: HdsIconTileColors[] = Object.values({\n  ...HdsIconTileColorNeutral,\n  ...HdsIconTileProductValues,\n});\nexport const PRODUCTS: HdsIconTileProducts[] = Object.values(\n  HdsIconTileProductValues\n);\n\nexport interface HdsIconTileSignature {\n  Args: {\n    size?: HdsIconTileSizes;\n    color?: HdsIconTileColors;\n    logo?: HdsIconTileProducts;\n    icon?: HdsIconSignature['Args']['name'];\n    iconSecondary?: HdsIconSignature['Args']['name'];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsIconTile extends Component<HdsIconTileSignature> {\n  get size(): HdsIconTileSizes {\n    const { size = DEFAULT_SIZE } = this.args;\n\n    assert(\n      `@size for \"Hds::IconTile\" must be one of the following: ${SIZES.join(\n        ', '\n      )}; received: ${size}`,\n      SIZES.includes(size)\n    );\n\n    return size;\n  }\n\n  get color() {\n    let { color = DEFAULT_COLOR } = this.args;\n\n    // if it's a \"logo\" then we overwrite any @color parameter passed\n    // and just use the product \"brand\" color\n    if (this.logo) {\n      color = this.logo;\n    }\n\n    assert(\n      `@color for \"Hds::IconTile\" must be one of the following: ${COLORS.join(\n        ', '\n      )}; received: ${color}`,\n      COLORS.includes(color)\n    );\n\n    return color;\n  }\n\n  get icon(): HdsIconSignature['Args']['name'] | undefined {\n    if (this.args.logo) {\n      return this.args.logo;\n    } else if (this.args.icon) {\n      return this.args.icon;\n    } else {\n      return undefined;\n    }\n  }\n\n  get iconSize(): HdsIconSignature['Args']['size'] {\n    if (this.args.size === 'small') {\n      return '16';\n    } else {\n      return '24';\n    }\n  }\n\n  get iconWrapperClass(): string | undefined {\n    if (this.args.logo !== undefined) {\n      return 'hds-icon-tile__logo';\n    }\n\n    if (this.args.icon !== undefined) {\n      return 'hds-icon-tile__icon';\n    }\n  }\n\n  get logo(): HdsIconTileProducts | null {\n    const { logo } = this.args;\n\n    if (logo) {\n      assert(\n        `@logo for \"Hds::IconTile\" must be one of the following: ${PRODUCTS.join(\n          ', '\n        )}; received: ${logo}`,\n        PRODUCTS.includes(logo)\n      );\n    }\n\n    return logo ?? null;\n  }\n\n  get entity(): string | undefined {\n    let entity;\n\n    assert(\n      `you can't pass both @logo and @icon properties to the \"Hds::IconTile\" component`,\n      !(this.args.logo && this.args.icon)\n    );\n\n    assert(\n      `you need to pass @logo or @icon to the \"Hds::IconTile\" component`,\n      !(this.args.logo === undefined && this.args.icon === undefined)\n    );\n\n    if (this.args.logo) {\n      entity = 'logo';\n    }\n    if (this.args.icon) {\n      entity = 'icon';\n    }\n\n    return entity;\n  }\n\n  get iconSecondary(): HdsIconSignature['Args']['name'] | undefined {\n    return this.args.iconSecondary;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-icon-tile'];\n\n    // add a class based on its entity argument\n    classes.push(`hds-icon-tile--${this.entity}`);\n\n    // add a class based on the @size argument\n    classes.push(`hds-icon-tile--size-${this.size}`);\n\n    // add a class based on the @color argument\n    classes.push(`hds-icon-tile--color-${this.color}`);\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <div class={{this.classNames}} aria-hidden=\"true\" ...attributes>\n      {{#if this.icon}}\n        <div class={{this.iconWrapperClass}}>\n          <HdsIcon\n            @name={{this.icon}}\n            @size={{this.iconSize}}\n            @stretched={{true}}\n          />\n        </div>\n      {{/if}}\n\n      {{#if this.iconSecondary}}\n        <div class=\"hds-icon-tile__extra\">\n          <div class=\"hds-icon-tile__extra-icon\">\n            <HdsIcon\n              @name={{this.iconSecondary}}\n              @size=\"16\"\n              @stretched={{true}}\n            />\n          </div>\n        </div>\n      {{/if}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsPageHeaderActionsSignature {\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLDivElement;\n}\n\nconst HdsPageHeaderActions: TemplateOnlyComponent<HdsPageHeaderActionsSignature> =\n  <template>\n    <div class=\"hds-page-header__actions\" ...attributes>{{yield}}</div>\n  </template>;\n\nexport default HdsPageHeaderActions;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsPageHeaderBadgesSignature {\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLDivElement;\n}\n\nconst HdsPageHeaderBadges: TemplateOnlyComponent<HdsPageHeaderBadgesSignature> =\n  <template>\n    <div class=\"hds-page-header__badges-wrapper\" ...attributes>{{yield}}</div>\n  </template>;\n\nexport default HdsPageHeaderBadges;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nimport HdsTextBody from '../text/body.gts';\n\nimport type { HdsTextBodySignature } from '../text/body.gts';\n\nexport interface HdsPageHeaderDescriptionSignature {\n  Args: HdsTextBodySignature['Args'];\n  Blocks: {\n    default: [];\n  };\n  Element: HdsTextBodySignature['Element'];\n}\n\nconst HdsPageHeaderDescription: TemplateOnlyComponent<HdsPageHeaderDescriptionSignature> =\n  <template>\n    <HdsTextBody\n      class=\"hds-page-header__description\"\n      @tag=\"p\"\n      @size=\"200\"\n      @color=\"primary\"\n      ...attributes\n    >{{yield}}</HdsTextBody>\n  </template>;\n\nexport default HdsPageHeaderDescription;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nimport HdsTextBody from '../text/body.gts';\n\nimport type { HdsTextBodySignature } from '../text/body.gts';\n\nexport interface HdsPageHeaderSubtitleSignature {\n  Args: HdsTextBodySignature['Args'];\n  Blocks: {\n    default: [];\n  };\n  Element: HdsTextBodySignature['Element'];\n}\n\nconst HdsPageHeaderSubtitle: TemplateOnlyComponent<HdsPageHeaderSubtitleSignature> =\n  <template>\n    <HdsTextBody\n      class=\"hds-page-header__subtitle\"\n      @tag=\"p\"\n      @size=\"200\"\n      @color=\"faint\"\n      ...attributes\n    >{{yield}}</HdsTextBody>\n  </template>;\n\nexport default HdsPageHeaderSubtitle;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nimport HdsTextDisplay from '../text/display.gts';\n\nimport type { HdsTextDisplaySignature } from '../text/display.gts';\n\nexport interface HdsPageHeaderTitleSignature {\n  Args: HdsTextDisplaySignature['Args'];\n  Blocks: {\n    default: [];\n  };\n  Element: HdsTextDisplaySignature['Element'];\n}\n\nconst HdsPageHeaderTitle: TemplateOnlyComponent<HdsPageHeaderTitleSignature> =\n  <template>\n    <HdsTextDisplay\n      class=\"hds-page-header__title\"\n      @tag=\"h1\"\n      @size=\"500\"\n      @color=\"strong\"\n      ...attributes\n    >{{yield}}</HdsTextDisplay>\n  </template>;\n\nexport default HdsPageHeaderTitle;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\n\nimport HdsTextBody from '../../text/body.gts';\n\nimport type { HdsPaginationNumberedSignature } from '../numbered/index.gts';\nimport type { HdsTextBodySignature } from '../../text/body.gts';\nimport type HdsIntlService from '../../../../services/hds-intl.ts';\n\nexport interface HdsPaginationInfoSignature {\n  Args: {\n    itemsRangeStart: number;\n    itemsRangeEnd: number;\n    showTotalItems?: HdsPaginationNumberedSignature['Args']['showTotalItems'];\n    totalItems: HdsPaginationNumberedSignature['Args']['totalItems'];\n  };\n  Element: HdsTextBodySignature['Element'];\n}\n\nexport default class HdsPaginationInfo extends Component<HdsPaginationInfoSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  get showTotalItems(): boolean {\n    return this.args.showTotalItems ?? true;\n  }\n\n  get translatedItemsRange(): string {\n    const { itemsRangeStart, itemsRangeEnd, totalItems } = this.args;\n\n    let translationKey: string;\n    let defaultValue: string;\n    let interpolationProps: object;\n\n    if (this.showTotalItems) {\n      translationKey = 'hds.components.pagination.info.page_range_with_total';\n      defaultValue = `${itemsRangeStart}–${itemsRangeEnd} of ${totalItems}`;\n      interpolationProps = { itemsRangeStart, itemsRangeEnd, totalItems };\n    } else {\n      translationKey = 'hds.components.pagination.info.page_range';\n      defaultValue = `${itemsRangeStart}–${itemsRangeEnd}`;\n      interpolationProps = { itemsRangeStart, itemsRangeEnd };\n    }\n\n    return this.hdsIntl.t(translationKey, {\n      ...interpolationProps,\n      default: defaultValue,\n    });\n  }\n\n  <template>\n    <HdsTextBody\n      class=\"hds-pagination-info\"\n      @tag=\"div\"\n      @size=\"100\"\n      @weight=\"medium\"\n      ...attributes\n    >\n      {{this.translatedItemsRange}}\n    </HdsTextBody>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsApplicationPaginationNavEllipsisSignature {\n  Element: HTMLDivElement;\n}\n\nconst HdsApplicationPaginationNavEllipsis: TemplateOnlyComponent<HdsApplicationPaginationNavEllipsisSignature> =\n  <template>\n    <div class=\"hds-pagination-nav__ellipsis\" ...attributes>...</div>\n  </template>;\n\nexport default HdsApplicationPaginationNavEllipsis;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { on } from '@ember/modifier';\n\nimport HdsInteractive from '../../interactive/index.gts';\nimport HdsTextBody from '../../text/body.gts';\nimport hdsT from '../../../../helpers/hds-t.ts';\n\nimport type { HdsInteractiveSignature } from '../../interactive/index.gts';\n\ninterface HdsPaginationNavNumberArgs {\n  page: number;\n  onClick: (page: number) => void;\n  isSelected: boolean;\n}\n\nexport interface HdsPaginationNavNumberSignature {\n  Args: HdsPaginationNavNumberArgs & HdsInteractiveSignature['Args'];\n  Element: HdsInteractiveSignature['Element'];\n}\n\nexport default class HdsPaginationControlNumber extends Component<HdsPaginationNavNumberSignature> {\n  get page(): number {\n    const { page } = this.args;\n\n    assert(\n      '@page for \"Pagination::Nav::Number\" must have a valid value',\n      page !== undefined\n    );\n\n    return page;\n  }\n\n  get classNames(): string {\n    const classes = [\n      'hds-pagination-nav__control',\n      'hds-pagination-nav__number',\n    ];\n\n    if (this.args.isSelected) {\n      classes.push(`hds-pagination-nav__number--is-selected`);\n    }\n\n    return classes.join(' ');\n  }\n\n  onClick = (): void => {\n    const { onClick } = this.args;\n\n    if (typeof onClick === 'function') {\n      onClick(this.args.page);\n    }\n  };\n\n  <template>\n    <HdsInteractive\n      class={{this.classNames}}\n      @route={{@route}}\n      @query={{@query}}\n      @model={{@model}}\n      @models={{@models}}\n      @replace={{@replace}}\n      {{on \"click\" this.onClick}}\n      ...attributes\n      aria-current={{if @isSelected \"page\" null}}\n    >\n      <HdsTextBody @tag=\"span\" @size=\"100\" @weight=\"medium\">\n        <span class=\"sr-only\">{{hdsT\n            \"hds.components.pagination.nav.number.screen-reader-label\"\n            default=\"page\"\n          }}</span>\n        {{this.page}}\n      </HdsTextBody>\n    </HdsInteractive>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\n\nimport HdsButton from '../../button/index.gts';\n\nimport type { HdsButtonSignature } from '../../button/index.gts';\n\nexport interface HdsRevealToggleButtonSignature {\n  Args: {\n    text: string;\n    isOpen?: boolean;\n  };\n  Element: HdsButtonSignature['Element'];\n}\n\nexport default class HdsRevealToggleButton extends Component<HdsRevealToggleButtonSignature> {\n  get classNames(): string {\n    const classes = ['hds-reveal__toggle-button'];\n\n    // add a class based on the @isOpen argument\n    if (this.args.isOpen) {\n      classes.push('hds-reveal__toggle-button--is-open');\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <HdsButton\n      @text={{@text}}\n      @color=\"tertiary\"\n      @icon=\"chevron-down\"\n      aria-expanded={{if @isOpen \"true\" \"false\"}}\n      class={{this.classNames}}\n      ...attributes\n    />\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { eq } from 'ember-truth-helpers';\n\nimport type { ModifierLike } from '@glint/template';\n\nimport {\n  HdsRichTooltipToggleIconPositionValues,\n  HdsRichTooltipToggleSizeValues,\n} from './types.ts';\nimport HdsIcon from '../icon/index.gts';\n\nimport type {\n  HdsRichTooltipToggleIconPositions,\n  HdsRichTooltipToggleSizes,\n} from './types.ts';\nimport type { HdsIconSignature } from '../icon/index.gts';\nimport type { SetupPrimitiveToggleModifier } from '../popover-primitive/index.gts';\n\nexport const ICON_POSITIONS: HdsRichTooltipToggleIconPositions[] =\n  Object.values(HdsRichTooltipToggleIconPositionValues);\nexport const DEFAULT_ICON_POSITION =\n  HdsRichTooltipToggleIconPositionValues.Trailing;\nexport const SIZES: HdsRichTooltipToggleSizes[] = Object.values(\n  HdsRichTooltipToggleSizeValues\n);\n\nexport interface HdsRichTooltipToggleSignature {\n  Args: {\n    text?: string;\n    icon?: HdsIconSignature['Args']['name'];\n    iconPosition?: HdsRichTooltipToggleIconPositions;\n    size?: undefined | HdsRichTooltipToggleSizes;\n    isInline?: boolean;\n    isOpen?: boolean;\n    popoverId: string;\n    setupPrimitiveToggle: ModifierLike<SetupPrimitiveToggleModifier>;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLButtonElement;\n}\n\nexport default class HdsRichTooltipToggle extends Component<HdsRichTooltipToggleSignature> {\n  get isInline(): boolean {\n    const { isInline = false } = this.args;\n    return isInline;\n  }\n\n  get iconPosition(): HdsRichTooltipToggleIconPositions {\n    const { iconPosition = DEFAULT_ICON_POSITION } = this.args;\n\n    assert(\n      `@iconPosition for \"Hds::RichTooltip::Toggle\" must be one of the following: ${ICON_POSITIONS.join(\n        ', '\n      )}; received: ${iconPosition}`,\n      ICON_POSITIONS.includes(iconPosition)\n    );\n\n    return iconPosition;\n  }\n\n  get size(): HdsRichTooltipToggleSizes | undefined {\n    let size;\n\n    // we assign a \"size\" only if `@text` is provided\n    if (this.args.text) {\n      size = this.args.size;\n\n      assert(\n        `@size for \"Hds::RichTooltip::Toggle\" must be one of the following: ${SIZES.join(\n          ', '\n        )}; received: ${size}`,\n        size === undefined || SIZES.includes(size)\n      );\n    }\n\n    return size;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-rich-tooltip__toggle'];\n\n    // add a class based on the @isInline argument\n    if (this.isInline) {\n      classes.push('hds-rich-tooltip__toggle--is-inline');\n    } else {\n      classes.push('hds-rich-tooltip__toggle--is-block');\n    }\n\n    // add a class based on the @size argument (if provided)\n    if (this.size) {\n      classes.push(`hds-rich-tooltip__toggle--size-${this.size}`);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    {{! IMPORTANT: we need to add \"squishies\" here (~) because otherwise the whitespace added by Ember becomes visible in the underlined text (being an inline element) - See https://handlebarsjs.com/guide/expressions.html#whitespace-control }}\n    <button\n      class={{this.classNames}}\n      ...attributes\n      type=\"button\"\n      aria-describedby={{@popoverId}}\n      aria-expanded={{if @isOpen \"true\" \"false\"}}\n      {{@setupPrimitiveToggle}}\n    >\n      {{~#if (has-block)~}}\n        {{yield}}\n      {{~else~}}\n        {{~#if @icon~}}\n          {{~#if (eq this.iconPosition \"leading\")~}}\n            <HdsIcon\n              class=\"hds-rich-tooltip__toggle-icon\"\n              @name={{@icon}}\n              @isInline={{this.isInline}}\n            />\n          {{~/if~}}\n        {{~/if~}}\n        {{~#if @text~}}\n          <span class=\"hds-rich-tooltip__toggle-text\">{{~@text~}}</span>\n        {{~/if~}}\n        {{~#if @icon~}}\n          {{~#if (eq this.iconPosition \"trailing\")~}}\n            <HdsIcon\n              class=\"hds-rich-tooltip__toggle-icon\"\n              @name={{@icon}}\n              @isInline={{this.isInline}}\n            />\n          {{~/if~}}\n        {{~/if~}}\n      {{~/if~}}\n    </button>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport style from 'ember-style-modifier';\n\nimport type { ModifierLike } from '@glint/template';\n\nimport {\n  DEFAULT_PLACEMENT,\n  PLACEMENTS,\n} from '../../../modifiers/hds-anchored-position.ts';\n\nimport type { SetupPrimitivePopoverModifier } from '../popover-primitive/index.gts';\nimport type { HdsAnchoredPositionOptions } from '../../../modifiers/hds-anchored-position.ts';\n\nexport interface HdsRichTooltipBubbleSignature {\n  Args: {\n    placement?: HdsAnchoredPositionOptions['placement'];\n    offset?: HdsAnchoredPositionOptions['offsetOptions'];\n    enableCollisionDetection?: HdsAnchoredPositionOptions['enableCollisionDetection'];\n    width?: string;\n    height?: string;\n    isOpen?: boolean;\n    popoverId: string;\n    arrowId: string;\n    boundary?: HdsAnchoredPositionOptions['boundary'];\n    setupPrimitivePopover: ModifierLike<SetupPrimitivePopoverModifier>;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsRichTooltipBubble extends Component<HdsRichTooltipBubbleSignature> {\n  get placement(): HdsAnchoredPositionOptions['placement'] {\n    const { placement = DEFAULT_PLACEMENT } = this.args;\n\n    assert(\n      `@placement for \"Hds::RichTooltip::Bubble\" must be one of the following: ${PLACEMENTS.join(\n        ', '\n      )}; received: ${placement}`,\n      PLACEMENTS.includes(placement)\n    );\n\n    return placement;\n  }\n\n  get enableCollisionDetection(): HdsAnchoredPositionOptions['enableCollisionDetection'] {\n    return this.args.enableCollisionDetection ?? true;\n  }\n\n  get sizingStyles(): Record<string, string> {\n    const sizingStyles: {\n      width?: string;\n      'max-width'?: string;\n      height?: string;\n      'max-height'?: string;\n    } = {};\n\n    if (this.args.width) {\n      sizingStyles['width'] = this.args.width;\n      sizingStyles['max-width'] = 'none';\n    }\n\n    if (this.args.height) {\n      sizingStyles['height'] = this.args.height;\n      sizingStyles['max-height'] = 'none';\n    }\n\n    return sizingStyles;\n  }\n\n  get anchoredPositionOptions(): {\n    placement: HdsAnchoredPositionOptions['placement'];\n    offsetOptions: HdsAnchoredPositionOptions['offsetOptions'];\n    enableCollisionDetection: HdsAnchoredPositionOptions['enableCollisionDetection'];\n    arrowSelector: string;\n    arrowPadding: HdsAnchoredPositionOptions['arrowPadding'];\n    boundary: HdsAnchoredPositionOptions['boundary'];\n  } {\n    // custom options specific for the `RichTooltip` component\n    // for details see the `hds-anchored-position` modifier\n    return {\n      placement: this.placement,\n      offsetOptions: this.args.offset ?? 12,\n      enableCollisionDetection: this.args.enableCollisionDetection ?? true,\n      arrowSelector: `#${this.args.arrowId}`,\n      arrowPadding: 12,\n      boundary: this.args.boundary,\n    };\n  }\n\n  <template>\n    <div\n      class=\"hds-rich-tooltip__bubble\"\n      ...attributes\n      id={{@popoverId}}\n      tabindex=\"-1\"\n      role=\"tooltip\"\n      aria-hidden={{(unless @isOpen true)}}\n      {{style this.sizingStyles}}\n      {{@setupPrimitivePopover\n        anchoredPositionOptions=this.anchoredPositionOptions\n      }}\n    >\n      <div class=\"hds-rich-tooltip__bubble-arrow\" id={{@arrowId}} />\n      {{#if @isOpen}}\n        <div class=\"hds-rich-tooltip__bubble-inner-content\">\n          {{yield}}\n        </div>\n      {{/if}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { guidFor } from '@ember/object/internals';\nimport { modifier } from 'ember-modifier';\nimport { service } from '@ember/service';\nimport { concat } from '@ember/helper';\nimport type HdsIntlService from '../../../../services/hds-intl';\nimport type Owner from '@ember/owner';\n\nimport {\n  HdsStepperStatusesValues,\n  HdsStepperStatusToSrOnlyText,\n  HdsStepperTitleTagValues,\n} from '../types.ts';\nimport HdsTextBody from '../../text/body.gts';\nimport HdsStepperStepIndicator from '../step/indicator.gts';\nimport hdsT from '../../../../helpers/hds-t.ts';\n\nimport type {\n  HdsStepperListStepIds,\n  HdsStepperStatuses,\n  HdsStepperTitleTags,\n} from '../types.ts';\n\nexport const DEFAULT_STATUS = HdsStepperStatusesValues.Incomplete;\nexport const STATUSES: HdsStepperStatuses[] = Object.values(\n  HdsStepperStatusesValues\n);\n\nexport interface HdsStepperListStepSignature {\n  Args: {\n    status?: HdsStepperStatuses;\n    titleTag?: HdsStepperTitleTags;\n    stepIds?: HdsStepperListStepIds;\n    didInsertNode?: (element: HTMLElement) => void;\n    willDestroyNode?: (element: HTMLElement) => void;\n  };\n  Blocks: {\n    title: [];\n    description?: [];\n    content?: [];\n  };\n  Element: HTMLElement;\n}\n\nexport default class HdsStepperListStep extends Component<HdsStepperListStepSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  private _statusSrOnlyTextMap?: Record<HdsStepperStatusesValues, string>;\n  private _stepId = 'step-' + guidFor(this);\n\n  private _setUpStep = modifier(\n    (\n      element: HTMLElement,\n      [insertCallbackFunction, destroyCallbackFunction]\n    ) => {\n      if (typeof insertCallbackFunction === 'function') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n        insertCallbackFunction(element);\n      }\n\n      return () => {\n        if (typeof destroyCallbackFunction === 'function') {\n          // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n          destroyCallbackFunction(element);\n        }\n      };\n    }\n  );\n\n  constructor(owner: Owner, args: HdsStepperListStepSignature['Args']) {\n    super(owner, args);\n\n    this._statusSrOnlyTextMap = HdsStepperStatusToSrOnlyText(this.hdsIntl);\n  }\n\n  get stepNumber(): number | undefined {\n    return this.args.stepIds\n      ? this.args.stepIds.indexOf(this._stepId) + 1\n      : undefined;\n  }\n\n  get status(): HdsStepperStatuses {\n    const { status = DEFAULT_STATUS } = this.args;\n\n    assert(\n      `@status for \"Hds::Stepper::List::Step\" must be one of the following: ${STATUSES.join(\n        ', '\n      )}; received: ${status}`,\n      STATUSES.includes(status)\n    );\n\n    return status;\n  }\n\n  get statusSrOnlyText(): string {\n    return this._statusSrOnlyTextMap![this.status];\n  }\n\n  get titleTag(): HdsStepperTitleTags {\n    return this.args.titleTag ?? HdsStepperTitleTagValues.Div;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-stepper-list__step'];\n\n    classes.push(`hds-stepper-list__step--${this.status}`);\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <li\n      class={{this.classNames}}\n      ...attributes\n      id={{this._stepId}}\n      {{this._setUpStep @didInsertNode @willDestroyNode}}\n    >\n      <div class=\"hds-stepper-list__step-progress\">\n        <HdsStepperStepIndicator\n          @text=\"{{this.stepNumber}}\"\n          @status={{this.status}}\n          @isInteractive={{false}}\n          aria-hidden=\"true\"\n          class=\"hds-stepper-list__step-indicator\"\n        />\n      </div>\n      <div class=\"hds-stepper-list__step-text\">\n        <HdsTextBody\n          class=\"hds-stepper-list__step-title\"\n          @tag={{this.titleTag}}\n          @size=\"200\"\n          @weight=\"semibold\"\n          @color=\"strong\"\n        >\n          <span class=\"sr-only\">\n            {{hdsT\n              \"hds.components.stepper.step-number\"\n              default=(concat \"Step \" this.stepNumber)\n              stepNumber=this.stepNumber\n            }}\n          </span>\n          {{yield to=\"title\"}}\n          <span class=\"sr-only\">{{this.statusSrOnlyText}}</span>\n        </HdsTextBody>\n        {{! we use :empty in CSS so we have to add squishes here to avoid whitespaces }}\n        {{#if (has-block \"description\")}}\n          <HdsTextBody\n            class=\"hds-stepper-list__step-description\"\n            @tag=\"div\"\n            @size=\"100\"\n            @weight=\"regular\"\n            @color=\"primary\"\n          >\n            {{~yield to=\"description\"~}}\n          </HdsTextBody>\n        {{/if}}\n        {{#if (has-block \"content\")}}\n          <div class=\"hds-stepper-list__step-content\">\n            {{~yield to=\"content\"~}}\n          </div>\n        {{/if}}\n      </div>\n    </li>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { modifier } from 'ember-modifier';\nimport { eq } from 'ember-truth-helpers';\nimport { on } from '@ember/modifier';\nimport { concat } from '@ember/helper';\n\nimport { service } from '@ember/service';\nimport type HdsIntlService from '../../../../services/hds-intl';\nimport type Owner from '@ember/owner';\n\nimport {\n  HdsStepperNavStatusesValues,\n  HdsStepperNavStatusToIndicatorStatus,\n  HdsStepperNavStatusToSrOnlyText,\n  HdsStepperTitleTagValues,\n} from '../types.ts';\nimport HdsStepperStepIndicator from '../step/indicator.gts';\nimport HdsTextBody from '../../text/body.gts';\nimport hdsT from '../../../../helpers/hds-t.ts';\n\nimport type {\n  HdsStepperNavPanelIds,\n  HdsStepperNavStatuses,\n  HdsStepperNavStepIds,\n  HdsStepperStatuses,\n  HdsStepperTitleTags,\n} from '../types.ts';\n\nexport const MAPPING_STATUS_TO_INDICATOR_STATUS =\n  HdsStepperNavStatusToIndicatorStatus;\n\nexport interface HdsStepperNavStepSignature {\n  Args: {\n    currentStep: number;\n    isNavInteractive?: boolean;\n    titleTag?: HdsStepperTitleTags;\n    stepIds?: HdsStepperNavStepIds;\n    panelIds?: HdsStepperNavPanelIds;\n    didInsertNode?: () => void;\n    willDestroyNode?: (element: HTMLButtonElement) => void;\n    onStepChange?: (event: MouseEvent, nodeIndex: number) => void;\n    onKeyUp?: (nodeIndex: number, event: KeyboardEvent) => void;\n  };\n  Blocks: {\n    title: [];\n    description?: [];\n  };\n  Element: HTMLElement;\n}\n\nexport default class HdsStepperNavStep extends Component<HdsStepperNavStepSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  private _statusSrOnlyTextMap?: Record<HdsStepperNavStatuses, string>;\n  private _stepId = 'step-' + guidFor(this);\n  private _elementId?: string;\n\n  private _setUpStep = modifier(\n    (\n      element: HTMLElement,\n      [insertCallbackFunction, destroyCallbackFunction]\n    ) => {\n      if (typeof insertCallbackFunction === 'function') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n        insertCallbackFunction(element);\n      }\n\n      return () => {\n        if (typeof destroyCallbackFunction === 'function') {\n          // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n          destroyCallbackFunction(element);\n        }\n      };\n    }\n  );\n\n  constructor(owner: Owner, args: HdsStepperNavStepSignature['Args']) {\n    super(owner, args);\n\n    this._statusSrOnlyTextMap = HdsStepperNavStatusToSrOnlyText(this.hdsIntl);\n  }\n\n  get titleTag(): HdsStepperTitleTags {\n    return this.args.titleTag ?? HdsStepperTitleTagValues.Div;\n  }\n\n  get isNavInteractive(): boolean {\n    return this.args.isNavInteractive != undefined\n      ? this.args.isNavInteractive\n      : true;\n  }\n\n  get nodeIndex(): number | undefined {\n    return this.args.stepIds?.indexOf(this._stepId);\n  }\n\n  get stepNumber(): number | undefined {\n    return this.args.stepIds\n      ? this.args.stepIds.indexOf(this._stepId) + 1\n      : undefined;\n  }\n\n  get coupledPanelId(): string | undefined {\n    return this.nodeIndex !== undefined\n      ? this.args.panelIds?.[this.nodeIndex]\n      : undefined;\n  }\n\n  get status(): HdsStepperNavStatuses {\n    if (this.nodeIndex != undefined && this.nodeIndex >= 0) {\n      if (this.nodeIndex === this.args.currentStep) {\n        return HdsStepperNavStatusesValues.Active;\n      } else if (this.nodeIndex < this.args.currentStep) {\n        return HdsStepperNavStatusesValues.Complete;\n      } else {\n        return HdsStepperNavStatusesValues.Incomplete;\n      }\n    } else {\n      return HdsStepperNavStatusesValues.Incomplete;\n    }\n  }\n\n  get stepIndicatorStatus(): HdsStepperStatuses {\n    return MAPPING_STATUS_TO_INDICATOR_STATUS[this.status];\n  }\n\n  get statusSrOnlyText(): string {\n    return this._statusSrOnlyTextMap![this.status];\n  }\n\n  get isInteractive(): boolean {\n    return (\n      this.isNavInteractive &&\n      this.status === HdsStepperNavStatusesValues.Complete\n    );\n  }\n\n  didInsertNode = (element: HTMLButtonElement): void => {\n    const { didInsertNode } = this.args;\n\n    if (typeof didInsertNode === 'function') {\n      this._elementId = element.id;\n      didInsertNode();\n    }\n  };\n\n  willDestroyNode = (element: HTMLButtonElement): void => {\n    const { willDestroyNode } = this.args;\n\n    if (typeof willDestroyNode === 'function') {\n      willDestroyNode(element);\n    }\n  };\n\n  onStepChange = (event: MouseEvent): false | undefined => {\n    const { onStepChange } = this.args;\n\n    if (\n      this.isInteractive &&\n      this.nodeIndex !== undefined &&\n      typeof onStepChange === 'function'\n    ) {\n      onStepChange(event, this.nodeIndex);\n    } else {\n      return false;\n    }\n  };\n\n  onKeyUp = (event: KeyboardEvent): void => {\n    const { onKeyUp } = this.args;\n\n    if (\n      !(this.status === HdsStepperNavStatusesValues.Incomplete) &&\n      this.nodeIndex !== undefined &&\n      typeof onKeyUp === 'function'\n    ) {\n      onKeyUp(this.nodeIndex, event);\n    }\n  };\n\n  get classNames(): string {\n    const classes = ['hds-stepper-nav__step'];\n\n    classes.push(`hds-stepper-nav__step--${this.status}`);\n\n    return classes.join(' ');\n  }\n\n  <template>\n    {{! template-lint-disable require-context-role no-invalid-role }}\n    {{! template-lint-disable require-presentational-children }}\n    {{#if this.isNavInteractive}}\n      <li\n        class={{this.classNames}}\n        ...attributes\n        role={{if this.isNavInteractive \"presentation\"}}\n      >\n        <button\n          class=\"hds-stepper-nav__step-content hds-stepper-nav__step-button\"\n          id={{this._stepId}}\n          tabindex={{unless (eq this.status \"active\") \"-1\"}}\n          type=\"button\"\n          role=\"tab\"\n          aria-controls={{this.coupledPanelId}}\n          aria-selected={{if (eq this.status \"active\") \"true\" \"false\"}}\n          aria-disabled={{if (eq this.status \"incomplete\") \"true\" \"false\"}}\n          {{on \"click\" this.onStepChange}}\n          {{on \"keyup\" this.onKeyUp}}\n          {{this._setUpStep this.didInsertNode this.willDestroyNode}}\n        >\n          <div class=\"hds-stepper-nav__step-progress\">\n            <HdsStepperStepIndicator\n              @text=\"{{this.stepNumber}}\"\n              @status={{this.stepIndicatorStatus}}\n              @isInteractive={{true}}\n              aria-hidden=\"true\"\n              class=\"hds-stepper-nav__step-indicator\"\n            />\n          </div>\n          <div class=\"hds-stepper-nav__step-text\">\n            <HdsTextBody\n              class=\"hds-stepper-nav__step-title\"\n              @tag={{this.titleTag}}\n              @size=\"200\"\n              @weight=\"semibold\"\n            >\n              <span class=\"sr-only\">\n                {{hdsT\n                  \"hds.components.stepper.step-number\"\n                  default=(concat \"Step \" this.stepNumber)\n                  stepNumber=this.stepNumber\n                }}\n              </span>\n              {{yield to=\"title\"}}\n              <span class=\"sr-only\">{{this.statusSrOnlyText}}</span>\n            </HdsTextBody>\n            {{#if (has-block \"description\")}}\n              <HdsTextBody\n                class=\"hds-stepper-nav__step-description\"\n                @tag=\"div\"\n                @size=\"100\"\n                @weight=\"regular\"\n              >\n                {{yield to=\"description\"}}\n              </HdsTextBody>\n            {{/if}}\n          </div>\n        </button>\n      </li>\n    {{else}}\n      <li\n        class={{this.classNames}}\n        ...attributes\n        role={{if this.isNavInteractive \"presentation\"}}\n        aria-current={{if (eq this.status \"active\") \"step\" \"false\"}}\n      >\n        <div\n          class=\"hds-stepper-nav__step-content\"\n          id={{this._stepId}}\n          {{this._setUpStep this.didInsertNode this.willDestroyNode}}\n        >\n          <div class=\"hds-stepper-nav__step-progress\">\n            <HdsStepperStepIndicator\n              @text=\"{{this.stepNumber}}\"\n              @status={{this.stepIndicatorStatus}}\n              @isInteractive={{false}}\n              aria-hidden=\"true\"\n              class=\"hds-stepper-nav__step-indicator\"\n            />\n          </div>\n          <div class=\"hds-stepper-nav__step-text\">\n            <HdsTextBody\n              class=\"hds-stepper-nav__step-title\"\n              @tag={{this.titleTag}}\n              @size=\"200\"\n              @weight=\"semibold\"\n            >\n              {{yield to=\"title\"}}\n              <span class=\"sr-only\">{{this.statusSrOnlyText}}</span>\n            </HdsTextBody>\n            {{#if (has-block \"description\")}}\n              <HdsTextBody\n                class=\"hds-stepper-nav__step-description\"\n                @tag=\"div\"\n                @size=\"100\"\n                @weight=\"regular\"\n              >\n                {{yield to=\"description\"}}\n              </HdsTextBody>\n            {{/if}}\n          </div>\n        </div>\n      </li>\n    {{/if}}\n    {{! template-lint-enable require-presentational-children }}\n    {{! template-lint-enable require-context-role no-invalid-role }}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { modifier } from 'ember-modifier';\nimport { not } from 'ember-truth-helpers';\n\nimport type { HdsStepperNavStepIds, HdsStepperNavPanelIds } from '../types.ts';\n\nexport interface HdsStepperNavPanelSignature {\n  Args: {\n    currentStep: number;\n    isNavInteractive?: boolean;\n    stepIds?: HdsStepperNavStepIds;\n    panelIds?: HdsStepperNavPanelIds;\n    didInsertNode?: () => void;\n    willDestroyNode?: (element: HTMLElement) => void;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLElement;\n}\n\nexport default class HdsStepperNavPanel extends Component<HdsStepperNavPanelSignature> {\n  private _panelId = 'panel-' + guidFor(this);\n  private _elementId?: string;\n\n  private _setUpPanel = modifier(\n    (\n      element: HTMLElement,\n      [insertCallbackFunction, destroyCallbackFunction]\n    ) => {\n      if (typeof insertCallbackFunction === 'function') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n        insertCallbackFunction(element);\n      }\n\n      return () => {\n        if (typeof destroyCallbackFunction === 'function') {\n          // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n          destroyCallbackFunction(element);\n        }\n      };\n    }\n  );\n\n  get isNavInteractive(): boolean {\n    return this.args.isNavInteractive != undefined\n      ? this.args.isNavInteractive\n      : true;\n  }\n\n  get nodeIndex(): number | undefined {\n    return this.args.panelIds?.indexOf(this._panelId);\n  }\n\n  get coupledStepId(): string | undefined {\n    return this.nodeIndex !== undefined\n      ? this.args.stepIds?.[this.nodeIndex]\n      : undefined;\n  }\n\n  get isVisible(): boolean {\n    return this.nodeIndex === this.args.currentStep;\n  }\n\n  didInsertNode = (element: HTMLElement): void => {\n    const { didInsertNode } = this.args;\n\n    if (typeof didInsertNode === 'function') {\n      this._elementId = element.id;\n      didInsertNode();\n    }\n  };\n\n  willDestroyNode = (element: HTMLElement): void => {\n    const { willDestroyNode } = this.args;\n\n    if (typeof willDestroyNode === 'function') {\n      willDestroyNode(element);\n    }\n  };\n\n  <template>\n    <section\n      class=\"hds-stepper-nav__panel\"\n      ...attributes\n      role={{if this.isNavInteractive \"tabpanel\"}}\n      id={{this._panelId}}\n      hidden={{not this.isVisible}}\n      aria-labelledby={{this.coupledStepId}}\n      {{this._setUpPanel this.didInsertNode this.willDestroyNode}}\n    >\n      {{#if this.isVisible}}\n        {{yield}}\n      {{/if}}\n    </section>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { tracked } from '@glimmer/tracking';\n\n// import { HdsTableScopeValues } from './types.ts';\nimport HdsTableThSelectable from './th-selectable.gts';\n\nimport type { HdsTableScope, HdsTableThSortOrder } from './types.ts';\nimport type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base.gts';\nimport type { HdsTableSignature } from './index.gts';\nimport type { HdsTableThSelectableSignature } from './th-selectable.gts';\n\nexport interface BaseHdsTableTrSignature {\n  Args: {\n    selectableColumnKey?: HdsTableSignature['Args']['selectableColumnKey'];\n    isSelectable?: boolean;\n    isSelected?: boolean;\n    selectionAriaLabelSuffix?: string;\n    selectionKey?: string;\n    selectionScope?: HdsTableScope;\n    sortBySelectedOrder?: HdsTableThSortOrder;\n    didInsert?: (\n      checkbox: HdsFormCheckboxBaseSignature['Element'],\n      selectionKey?: string\n    ) => void;\n    onSelectionChange?: (\n      checkbox?: HdsFormCheckboxBaseSignature['Element'],\n      selectionKey?: string\n    ) => void;\n    willDestroy?: () => void;\n    onClickSortBySelected?: HdsTableThSelectableSignature['Args']['onClickSortBySelected'];\n  };\n  Blocks: {\n    default?: [];\n  };\n  Element: HTMLTableRowElement;\n}\n\n/*\n * NOTE: There is currently an issue with `WithBoundArgs` or Glint that causes a typing error where @selectionKey is set as always required.\n *\n * Until this is fixed, we are holding off on doing a union with the SelectableHdsTableTrArgs\n */\n\n// Extended interface for selectable rows\n// export interface SelectableHdsTableTrArgs extends BaseHdsTableTrSignature {\n//   Args: BaseHdsTableTrSignature['Args'] & {\n//     isSelectable: true;\n//     selectionScope?: HdsTableScopeValues.Row;\n//     selectionKey: string; // Now required for selectable rows\n//   };\n// }\n\n// Union type to combine both possible states\nexport type HdsTableTrSignature = BaseHdsTableTrSignature;\n// | SelectableHdsTableTrArgs;\n\nexport default class HdsTableTr extends Component<HdsTableTrSignature> {\n  @tracked private isSelectedOverride?: boolean;\n\n  get selectionKey(): string | undefined {\n    if (this.args.isSelectable && this.args.selectionScope === 'row') {\n      assert(\n        `@selectionKey must be defined on Table::Tr or B.Tr when @isSelectable is true`,\n        this.args.selectionKey\n      );\n      return this.args.selectionKey;\n    }\n    return undefined;\n  }\n\n  // Carbon applies styles to the entire row when it is selected, so we need a state to track the selection state to toggle the appropriate class.\n  get isSelected(): boolean {\n    return this.isSelectedOverride ?? this.args.isSelected ?? false;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-table__tr'];\n\n    if (this.isSelected) {\n      classes.push(`hds-table__tr--is-selected`);\n    }\n\n    return classes.join(' ');\n  }\n\n  onSelectionChange = (\n    checkbox?: HdsFormCheckboxBaseSignature['Element'],\n    selectionKey?: string\n  ): void => {\n    this.isSelectedOverride = checkbox?.checked ?? false;\n\n    const { onSelectionChange } = this.args;\n    if (typeof onSelectionChange === 'function') {\n      onSelectionChange(checkbox, selectionKey);\n    }\n  };\n\n  <template>\n    <tr class={{this.classNames}} ...attributes>\n      {{#if @isSelectable}}\n        <HdsTableThSelectable\n          @isSelected={{this.isSelected}}\n          @selectionScope={{@selectionScope}}\n          @selectionKey={{this.selectionKey}}\n          @selectionAriaLabelSuffix={{@selectionAriaLabelSuffix}}\n          @sortBySelectedOrder={{@sortBySelectedOrder}}\n          @didInsert={{@didInsert}}\n          @willDestroy={{@willDestroy}}\n          @onClickSortBySelected={{@onClickSortBySelected}}\n          @onSelectionChange={{this.onSelectionChange}}\n        />\n      {{/if}}\n\n      {{yield}}\n    </tr>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { tracked } from '@glimmer/tracking';\nimport { on } from '@ember/modifier';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport willDestroy from '@ember/render-modifiers/modifiers/will-destroy';\nimport { service } from '@ember/service';\n\nimport type HdsIntlService from '../../../services/hds-intl';\n\nimport type Owner from '@ember/owner';\n\nimport {\n  HdsTableThSortOrderValues,\n  HdsTableThSortOrderLabelValues,\n} from './types.ts';\nimport HdsFormCheckboxBase from '../form/checkbox/base.gts';\nimport HdsTableThButtonSort from './th-button-sort.gts';\nimport HdsTableTh from './th.gts';\n\nimport type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base';\nimport type {\n  HdsTableScope,\n  HdsTableThSortOrder,\n  HdsTableThSortOrderLabels,\n} from './types';\nimport type { HdsTableThSignature } from './th';\n\nexport interface HdsTableThSelectableSignature {\n  Args: {\n    didInsert?: (\n      checkbox: HdsFormCheckboxBaseSignature['Element'],\n      selectionKey?: string\n    ) => void;\n    isSelected?: boolean;\n    onClickSortBySelected?: () => void;\n    onSelectionChange?: (\n      target: HdsFormCheckboxBaseSignature['Element'],\n      selectionKey: string | undefined\n    ) => void;\n    selectionAriaLabelSuffix?: string;\n    selectionKey?: string;\n    selectionScope?: HdsTableScope;\n    sortBySelectedOrder?: HdsTableThSortOrder;\n    willDestroy?: (selectionKey?: string) => void;\n  };\n  Element: HdsTableThSignature['Element'];\n}\n\nexport default class HdsTableThSelectable extends Component<HdsTableThSelectableSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n  @tracked isSelected: boolean;\n  private _guid = guidFor(this);\n\n  private _checkboxId = `checkbox-${this._guid}`;\n  private _labelId = `label-${this._guid}`;\n\n  constructor(owner: Owner, args: HdsTableThSelectableSignature['Args']) {\n    super(owner, args);\n    this.isSelected = this.args.isSelected ?? false;\n  }\n\n  get isSortable(): boolean {\n    return this.args.onClickSortBySelected !== undefined;\n  }\n\n  get ariaLabel(): string {\n    const { selectionAriaLabelSuffix = 'row' } = this.args;\n    const defaultString = `Select ${selectionAriaLabelSuffix}`;\n    return this.hdsIntl.t('hds.components.table.th-selectable.aria-label', {\n      default: defaultString,\n      suffix: selectionAriaLabelSuffix,\n    });\n  }\n\n  get ariaSort(): HdsTableThSortOrderLabels | undefined {\n    switch (this.args.sortBySelectedOrder) {\n      case HdsTableThSortOrderValues.Asc:\n        return HdsTableThSortOrderLabelValues.Asc;\n      case HdsTableThSortOrderValues.Desc:\n        return HdsTableThSortOrderLabelValues.Desc;\n      default:\n        // none is the default per the spec.\n        return HdsTableThSortOrderLabelValues.None;\n    }\n  }\n\n  didInsert = (checkbox: HdsFormCheckboxBaseSignature['Element']): void => {\n    const { didInsert } = this.args;\n    if (typeof didInsert === 'function') {\n      didInsert(checkbox, this.args.selectionKey);\n    }\n  };\n\n  willDestroyNode = (): void => {\n    super.willDestroy();\n    const { willDestroy } = this.args;\n    if (typeof willDestroy === 'function') {\n      willDestroy(this.args.selectionKey);\n    }\n  };\n\n  onSelectionChange = (event: Event): void => {\n    // Assert event.target as HdsFormCheckboxBaseSignature['Element'] to access the 'checked' property\n    const target = event.target as HdsFormCheckboxBaseSignature['Element'];\n    this.isSelected = target.checked;\n    const { onSelectionChange } = this.args;\n    if (typeof onSelectionChange === 'function') {\n      onSelectionChange(target, this.args.selectionKey);\n    }\n  };\n\n  <template>\n    <HdsTableTh\n      class=\"hds-table__th--is-selectable\"\n      aria-sort={{if this.isSortable this.ariaSort}}\n      @scope={{@selectionScope}}\n      ...attributes\n    >\n      <div class=\"hds-table__th-content\">\n        <HdsFormCheckboxBase\n          id={{this._checkboxId}}\n          class=\"hds-table__checkbox\"\n          checked={{@isSelected}}\n          aria-label={{this.ariaLabel}}\n          {{didInsert this.didInsert}}\n          {{willDestroy this.willDestroyNode}}\n          {{on \"change\" this.onSelectionChange}}\n        />\n        {{#if this.isSortable}}\n          <HdsTableThButtonSort\n            @sortOrder={{@sortBySelectedOrder}}\n            @onClick={{@onClickSortBySelected}}\n            @labelId={{this._labelId}}\n          />\n        {{/if}}\n      </div>\n    </HdsTableTh>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { assert } from '@ember/debug';\nimport style from 'ember-style-modifier';\n\nimport {\n  HdsTableHorizontalAlignmentValues,\n  HdsTableThSortOrderValues,\n  HdsTableThSortOrderLabelValues,\n} from './types.ts';\nimport HdsTableThButtonTooltip from './th-button-tooltip.gts';\nimport HdsTableThButtonSort from './th-button-sort.gts';\n\nimport type {\n  HdsTableHorizontalAlignment,\n  HdsTableThSortOrder,\n  HdsTableThSortOrderLabels,\n} from './types.ts';\nimport type { HdsTableThButtonSortSignature } from './th-button-sort.gts';\n\nexport const ALIGNMENTS: HdsTableHorizontalAlignment[] = Object.values(\n  HdsTableHorizontalAlignmentValues\n);\nexport const DEFAULT_ALIGN = HdsTableHorizontalAlignmentValues.Left;\n\nexport interface HdsTableThSortSignature {\n  Args: {\n    align?: HdsTableHorizontalAlignment;\n    onClickSort?: HdsTableThButtonSortSignature['Args']['onClick'];\n    sortOrder?: HdsTableThSortOrder;\n    tooltip?: string;\n    width?: string;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLTableCellElement;\n}\n\nexport default class HdsTableThSort extends Component<HdsTableThSortSignature> {\n  private _labelId = guidFor(this);\n\n  get ariaSort(): HdsTableThSortOrderLabels {\n    switch (this.args.sortOrder) {\n      case HdsTableThSortOrderValues.Asc:\n        return HdsTableThSortOrderLabelValues.Asc;\n      case HdsTableThSortOrderValues.Desc:\n        return HdsTableThSortOrderLabelValues.Desc;\n      default:\n        // none is the default per the spec.\n        return HdsTableThSortOrderLabelValues.None;\n    }\n  }\n\n  get align(): HdsTableHorizontalAlignment {\n    const { align = DEFAULT_ALIGN } = this.args;\n\n    assert(\n      `@align for \"Hds::Table\" must be one of the following: ${ALIGNMENTS.join(\n        ', '\n      )}; received: ${align}`,\n      ALIGNMENTS.includes(align)\n    );\n    return align;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-table__th', 'hds-table__th--sort'];\n\n    // add a class based on the @align argument\n    if (this.align) {\n      classes.push(`hds-table__th--align-${this.align}`);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <th\n      class={{this.classNames}}\n      aria-sort={{this.ariaSort}}\n      {{style width=@width minWidth=@width}}\n      ...attributes\n      scope=\"col\"\n    >\n      <div class=\"hds-table__th-content\">\n        <span\n          id={{this._labelId}}\n          class=\"hds-typography-body-200 hds-font-weight-semibold\"\n        >{{yield}}</span>\n        {{#if @tooltip}}\n          <HdsTableThButtonTooltip\n            @tooltip={{@tooltip}}\n            @labelId={{this._labelId}}\n          />\n        {{/if}}\n        <HdsTableThButtonSort\n          @sortOrder={{@sortOrder}}\n          @onClick={{@onClickSort}}\n          @labelId={{this._labelId}}\n        />\n      </div>\n    </th>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\n\nimport type { HdsTableHorizontalAlignment } from './types.ts';\nimport { HdsTableHorizontalAlignmentValues } from './types.ts';\n\nexport const ALIGNMENTS: HdsTableHorizontalAlignment[] = Object.values(\n  HdsTableHorizontalAlignmentValues\n);\nexport const DEFAULT_ALIGN = HdsTableHorizontalAlignmentValues.Left;\n\nexport interface HdsTableTdSignature {\n  Args: {\n    align?: HdsTableHorizontalAlignment;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLTableCellElement;\n}\n\nexport default class HdsTableTd extends Component<HdsTableTdSignature> {\n  get align(): HdsTableHorizontalAlignment {\n    const { align = DEFAULT_ALIGN } = this.args;\n\n    assert(\n      `@align for \"Hds::Table::Td\" must be one of the following: ${ALIGNMENTS.join(\n        ', '\n      )}; received: ${align}`,\n      ALIGNMENTS.includes(align)\n    );\n    return align;\n  }\n\n  get classNames(): string {\n    const classes = [\n      'hds-table__td',\n      'hds-typography-body-200',\n      'hds-font-weight-regular',\n    ];\n\n    // add a class based on the @align argument\n    if (this.align) {\n      classes.push(`hds-table__td--align-${this.align}`);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <td class={{this.classNames}} ...attributes>\n      {{yield}}\n    </td>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { on } from '@ember/modifier';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didUpdate from '@ember/render-modifiers/modifiers/did-update';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport willDestroy from '@ember/render-modifiers/modifiers/will-destroy';\n\nimport type { IconName } from '@hashicorp/flight-icons/svg';\n\nimport HdsIcon from '../icon/index.gts';\nimport HdsBadgeCount from '../badge-count/index.gts';\n\nimport type { HdsTabsTabIds, HdsTabsPanelIds } from './types.ts';\n\nexport interface HdsTabsTabSignature {\n  Args: {\n    tabIds?: HdsTabsTabIds;\n    panelIds?: HdsTabsPanelIds;\n    selectedTabIndex?: number;\n    icon?: IconName;\n    count?: string;\n    isSelected?: boolean;\n    didInsertNode?: (element: HTMLButtonElement, isSelected?: boolean) => void;\n    didUpdateNode?: (nodeIndex: number, isSelected?: boolean) => void;\n    willDestroyNode?: (element: HTMLButtonElement) => void;\n    onClick?: (event: MouseEvent, tabIndex: number) => void;\n    onKeyUp?: (nodeIndex: number, event: KeyboardEvent) => void;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLLIElement;\n}\n\nexport default class HdsTabsTab extends Component<HdsTabsTabSignature> {\n  private _tabId = 'tab-' + guidFor(this);\n\n  get nodeIndex(): number | undefined {\n    return this.args.tabIds?.indexOf(this._tabId);\n  }\n\n  get isSelected(): boolean {\n    return (\n      this.nodeIndex !== undefined &&\n      this.nodeIndex === this.args.selectedTabIndex\n    );\n  }\n\n  get coupledPanelId(): string | undefined {\n    return this.nodeIndex !== undefined\n      ? this.args.panelIds?.[this.nodeIndex]\n      : undefined;\n  }\n\n  didInsertNode = (\n    element: HTMLButtonElement,\n    positional: [boolean?]\n  ): void => {\n    const { didInsertNode } = this.args;\n\n    const isSelected = positional[0];\n\n    if (typeof didInsertNode === 'function') {\n      didInsertNode(element, isSelected);\n    }\n  };\n\n  didUpdateNode = (): void => {\n    const { didUpdateNode } = this.args;\n\n    if (typeof didUpdateNode === 'function' && this.nodeIndex !== undefined) {\n      didUpdateNode(this.nodeIndex, this.args.isSelected);\n    }\n  };\n\n  willDestroyNode = (element: HTMLButtonElement): void => {\n    const { willDestroyNode } = this.args;\n\n    if (typeof willDestroyNode === 'function') {\n      willDestroyNode(element);\n    }\n  };\n\n  onClick = (event: MouseEvent): false | undefined => {\n    const { onClick } = this.args;\n\n    if (typeof onClick === 'function' && this.nodeIndex !== undefined) {\n      onClick(event, this.nodeIndex);\n    } else {\n      return false;\n    }\n  };\n\n  onKeyUp = (event: KeyboardEvent): void => {\n    const { onKeyUp } = this.args;\n\n    if (typeof onKeyUp === 'function' && this.nodeIndex !== undefined) {\n      onKeyUp(this.nodeIndex, event);\n    }\n  };\n\n  get classNames(): string {\n    const classes = ['hds-tabs__tab'];\n\n    if (this.isSelected) {\n      classes.push(`hds-tabs__tab--is-selected`);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    {{! template-lint-disable require-context-role no-invalid-role }}\n    <li class={{this.classNames}} ...attributes role=\"presentation\">\n      <button\n        class=\"hds-tabs__tab-button\"\n        role=\"tab\"\n        type=\"button\"\n        id={{this._tabId}}\n        aria-controls={{this.coupledPanelId}}\n        aria-selected={{if this.isSelected \"true\" \"false\"}}\n        tabindex={{unless this.isSelected \"-1\"}}\n        {{didInsert this.didInsertNode @isSelected}}\n        {{didUpdate this.didUpdateNode @count @isSelected}}\n        {{willDestroy this.willDestroyNode}}\n        {{on \"click\" this.onClick}}\n        {{on \"keyup\" this.onKeyUp}}\n      >\n        {{#if @icon}}\n          <HdsIcon\n            @name={{@icon}}\n            class=\"hds-tabs__tab-icon\"\n            role=\"presentation\"\n          />\n        {{/if}}\n\n        {{yield}}\n\n        {{#if @count}}\n          <HdsBadgeCount\n            @text={{@count}}\n            @size=\"small\"\n            class=\"hds-tabs__tab-count\"\n            role=\"presentation\"\n          />\n        {{/if}}\n      </button>\n    </li>\n    {{! template-lint-enable require-context-role no-invalid-role }}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { hash } from '@ember/helper';\nimport { not } from 'ember-truth-helpers';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport willDestroy from '@ember/render-modifiers/modifiers/will-destroy';\n\nimport type { HdsTabsTabSignature } from './tab.gts';\nimport type { HdsTabsPanelIds, HdsTabsTabIds } from './types';\n\nexport interface HdsTabsPanelSignature {\n  Args: {\n    tabIds?: HdsTabsTabIds;\n    panelIds?: HdsTabsPanelIds;\n    selectedTabIndex?: HdsTabsTabSignature['Args']['selectedTabIndex'];\n    didInsertNode?: (element: HTMLElement, elementId: string) => void;\n    willDestroyNode?: (element: HTMLElement) => void;\n  };\n  Blocks: {\n    default: [\n      {\n        isVisible?: boolean;\n      },\n    ];\n  };\n  Element: HTMLElement;\n}\n\nexport default class HdsTabsPanel extends Component<HdsTabsPanelSignature> {\n  private _panelId = 'panel-' + guidFor(this);\n\n  private _elementId?: string;\n\n  get nodeIndex(): number | undefined {\n    return this.args.panelIds\n      ? this.args.panelIds.indexOf(this._panelId)\n      : undefined;\n  }\n\n  get isVisible(): boolean {\n    return this.nodeIndex === this.args.selectedTabIndex;\n  }\n\n  get coupledTabId(): string | undefined {\n    return this.nodeIndex !== undefined\n      ? this.args.tabIds?.[this.nodeIndex]\n      : undefined;\n  }\n\n  didInsertNode = (element: HTMLElement): void => {\n    const { didInsertNode } = this.args;\n\n    if (typeof didInsertNode === 'function') {\n      this._elementId = element.id;\n      didInsertNode(element, this._elementId);\n    }\n  };\n\n  willDestroyNode = (element: HTMLElement): void => {\n    const { willDestroyNode } = this.args;\n\n    if (typeof willDestroyNode === 'function') {\n      willDestroyNode(element);\n    }\n  };\n\n  <template>\n    <section\n      class=\"hds-tabs__panel\"\n      ...attributes\n      role=\"tabpanel\"\n      id={{this._panelId}}\n      hidden={{not this.isVisible}}\n      aria-labelledby={{this.coupledTabId}}\n      {{didInsert this.didInsertNode}}\n      {{willDestroy this.willDestroyNode}}\n    >\n      {{yield (hash isVisible=this.isVisible)}}\n    </section>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\n\nimport hdsFormatDate from '../../../helpers/hds-format-date.ts';\n\nimport type TimeService from '../../../services/hds-time.ts';\n\nexport interface HdsTimeRangeSignature {\n  Args: {\n    startDate?: Date;\n    endDate?: Date;\n  };\n  Element: HTMLElement;\n}\n\nexport default class HdsTimeRange extends Component<HdsTimeRangeSignature> {\n  @service declare readonly hdsTime: TimeService;\n\n  get startDateIsoUtcString(): string | undefined {\n    const { startDate } = this.args;\n    if (startDate) {\n      return this.hdsTime.toIsoUtcString(startDate);\n    }\n  }\n\n  get endDateIsoUtcString(): string | undefined {\n    const { endDate } = this.args;\n    if (endDate) {\n      return this.hdsTime.toIsoUtcString(endDate);\n    }\n  }\n\n  get startDateDisplayFormat(): {\n    month: Intl.DateTimeFormatOptions['month'];\n    day: Intl.DateTimeFormatOptions['day'];\n    year?: Intl.DateTimeFormatOptions['year'];\n    hour?: Intl.DateTimeFormatOptions['hour'];\n    minute?: Intl.DateTimeFormatOptions['minute'];\n    second?: Intl.DateTimeFormatOptions['second'];\n  } {\n    const { startDate, endDate } = this.args;\n\n    if (startDate?.getFullYear() !== endDate?.getFullYear()) {\n      return {\n        month: 'short',\n        day: 'numeric',\n        year: 'numeric',\n      };\n    } else {\n      return {\n        month: 'short',\n        day: 'numeric',\n        year: undefined,\n      };\n    }\n  }\n\n  get endDateDisplayFormat(): {\n    month: Intl.DateTimeFormatOptions['month'];\n    day: Intl.DateTimeFormatOptions['day'];\n    year?: Intl.DateTimeFormatOptions['year'];\n    hour?: Intl.DateTimeFormatOptions['hour'];\n    minute?: Intl.DateTimeFormatOptions['minute'];\n    second?: Intl.DateTimeFormatOptions['second'];\n  } {\n    return {\n      month: 'short',\n      day: 'numeric',\n      year: 'numeric',\n    };\n  }\n\n  <template>\n    {{! IMPORTANT: we need to add \"squishies\" here (~) because otherwise the whitespace added by Ember causes extra space around the time element - See https://handlebarsjs.com/guide/expressions.html#whitespace-control }}\n    <span class=\"hds-time hds-time--range\" ...attributes>\n      <time datetime={{this.startDateIsoUtcString}}>\n        {{~hdsFormatDate @startDate this.startDateDisplayFormat~}}\n      </time>\n      &ndash;\n      <time datetime={{this.endDateIsoUtcString}}>\n        {{~hdsFormatDate @endDate this.endDateDisplayFormat~}}\n      </time>\n    </span>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport willDestroy from '@ember/render-modifiers/modifiers/will-destroy';\n\nimport hdsFormatDate from '../../../helpers/hds-format-date.ts';\nimport hdsFormatRelative from '../../../helpers/hds-format-relative.ts';\n\nimport type { DisplayType } from '../../../services/hds-time-types.ts';\n\nexport interface HdsTimeSingleSignature {\n  Args: {\n    date?: Date;\n    display: DisplayType;\n    isoUtcString?: string;\n    register: () => void;\n    unregister: () => void;\n  };\n  Element: HTMLTimeElement;\n}\n\nconst HdsTimeSingleComponent: TemplateOnlyComponent<HdsTimeSingleSignature> =\n  <template>\n    {{! IMPORTANT: we need to add \"squishies\" here (~) because otherwise the whitespace added by Ember causes extra space around the time element - See https://handlebarsjs.com/guide/expressions.html#whitespace-control }}\n    <time\n      class=\"hds-time hds-time--single\"\n      datetime={{@isoUtcString}}\n      ...attributes\n      {{didInsert @register}}\n      {{willDestroy @unregister}}\n    >\n      {{~#if @display.options.showFriendly~}}\n        {{~#if @display.options.displayFormat~}}\n          {{~hdsFormatDate @date @display.options.displayFormat~}}\n        {{~else~}}\n          {{~@isoUtcString}}\n        {{~/if~}}\n        {{#if @display.options.showRelative}}\n          ({{hdsFormatRelative @display.relative.value @display.relative.unit}})\n        {{/if}}\n      {{~else~}}\n        {{#if @display.options.showRelative}}\n          {{~hdsFormatRelative @display.relative.value @display.relative.unit~}}\n        {{~/if~}}\n      {{~/if~}}\n    </time>\n  </template>;\n\nexport default HdsTimeSingleComponent;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsAppFrameFooterSignature {\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLElement;\n}\n\nconst HdsAppFrameFooter: TemplateOnlyComponent<HdsAppFrameFooterSignature> =\n  <template>\n    <footer class=\"hds-app-frame__footer\" ...attributes>\n      {{yield}}\n    </footer>\n  </template>;\n\nexport default HdsAppFrameFooter;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsAppFrameHeaderSignature {\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLElement;\n}\n\nconst HdsAppFrameHeader: TemplateOnlyComponent<HdsAppFrameHeaderSignature> =\n  <template>\n    <header class=\"hds-app-frame__header\" ...attributes>\n      {{yield}}\n    </header>\n  </template>;\n\nexport default HdsAppFrameHeader;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsAppFrameMainSignature {\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLElement;\n}\n\nconst HdsAppFrameMain: TemplateOnlyComponent<HdsAppFrameMainSignature> =\n  <template>\n    <main class=\"hds-app-frame__main\" id=\"hds-main\" ...attributes>\n      {{yield}}\n    </main>\n  </template>;\n\nexport default HdsAppFrameMain;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsAppFrameModalsSignature {\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLElement;\n}\n\nconst HdsAppFrameModals: TemplateOnlyComponent<HdsAppFrameModalsSignature> =\n  <template>\n    {{! we use :empty in CSS so we have to avoid whitespaces }}\n    <div class=\"hds-app-frame__modals\" ...attributes>{{~yield~}}</div>\n  </template>;\n\nexport default HdsAppFrameModals;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsAppFrameSidebarSignature {\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLElement;\n}\n\nconst HdsAppFrameSidebar: TemplateOnlyComponent<HdsAppFrameSidebarSignature> =\n  <template>\n    <aside class=\"hds-app-frame__sidebar\" ...attributes>\n      {{yield}}\n    </aside>\n  </template>;\n\nexport default HdsAppFrameSidebar;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { element } from 'ember-element-helper';\nimport style from 'ember-style-modifier';\n\nimport type { AvailableTagNames, AvailableElements } from './types.ts';\n\ntype ResponsiveSpan = {\n  sm?: number;\n  md?: number;\n  lg?: number;\n  xl?: number;\n  xxl?: number;\n};\n\nexport interface HdsLayoutGridItemSignature {\n  Args: {\n    tag?: AvailableTagNames;\n    colspan?: number | ResponsiveSpan;\n    rowspan?: number | ResponsiveSpan;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: AvailableElements;\n}\n\nexport default class HdsLayoutGridItem extends Component<HdsLayoutGridItemSignature> {\n  get componentTag(): AvailableTagNames {\n    return this.args.tag ?? 'div';\n  }\n\n  get inlineStyles(): Record<string, unknown> {\n    const inlineStyles: {\n      '--hds-layout-grid-column-span'?: string;\n      '--hds-layout-grid-row-span'?: string;\n\n      // responsive\n      // column span\n      '--hds-layout-grid-column-span-sm'?: string;\n      '--hds-layout-grid-column-span-md'?: string;\n      '--hds-layout-grid-column-span-lg'?: string;\n      '--hds-layout-grid-column-span-xl'?: string;\n      '--hds-layout-grid-column-span-xxl'?: string;\n\n      // row span\n      '--hds-layout-grid-row-span-sm'?: string;\n      '--hds-layout-grid-row-span-md'?: string;\n      '--hds-layout-grid-row-span-lg'?: string;\n      '--hds-layout-grid-row-span-xl'?: string;\n      '--hds-layout-grid-row-span-xxl'?: string;\n    } = {};\n\n    if (this.args.colspan) {\n      if (typeof this.args.colspan === 'number') {\n        inlineStyles['--hds-layout-grid-column-span'] =\n          this.args.colspan.toString();\n      } else if (typeof this.args.colspan === 'object') {\n        // Responsive column spans\n        if (this.args.colspan.sm) {\n          inlineStyles['--hds-layout-grid-column-span-sm'] =\n            this.args.colspan.sm.toString();\n        }\n        if (this.args.colspan.md) {\n          inlineStyles['--hds-layout-grid-column-span-md'] =\n            this.args.colspan.md.toString();\n        }\n        if (this.args.colspan.lg) {\n          inlineStyles['--hds-layout-grid-column-span-lg'] =\n            this.args.colspan.lg.toString();\n        }\n        if (this.args.colspan.xl) {\n          inlineStyles['--hds-layout-grid-column-span-xl'] =\n            this.args.colspan.xl.toString();\n        }\n        if (this.args.colspan.xxl) {\n          inlineStyles['--hds-layout-grid-column-span-xxl'] =\n            this.args.colspan.xxl.toString();\n        }\n      }\n    }\n\n    if (this.args.rowspan) {\n      if (typeof this.args.rowspan === 'number') {\n        inlineStyles['--hds-layout-grid-row-span'] =\n          this.args.rowspan.toString();\n      } else if (typeof this.args.rowspan === 'object') {\n        // Responsive row spans\n        if (this.args.rowspan.sm) {\n          inlineStyles['--hds-layout-grid-row-span-sm'] =\n            this.args.rowspan.sm.toString();\n        }\n        if (this.args.rowspan.md) {\n          inlineStyles['--hds-layout-grid-row-span-md'] =\n            this.args.rowspan.md.toString();\n        }\n        if (this.args.rowspan.lg) {\n          inlineStyles['--hds-layout-grid-row-span-lg'] =\n            this.args.rowspan.lg.toString();\n        }\n        if (this.args.rowspan.xl) {\n          inlineStyles['--hds-layout-grid-row-span-xl'] =\n            this.args.rowspan.xl.toString();\n        }\n        if (this.args.rowspan.xxl) {\n          inlineStyles['--hds-layout-grid-row-span-xxl'] =\n            this.args.rowspan.xxl.toString();\n        }\n      }\n    }\n\n    return inlineStyles;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-layout-grid-item'];\n\n    // add classes based on responsive colspan\n    if (typeof this.args.colspan === 'object') {\n      if (this.args.colspan.sm) {\n        classes.push(`hds-layout-grid--col-span-view-sm`);\n      }\n      if (this.args.colspan.md) {\n        classes.push(`hds-layout-grid--col-span-view-md`);\n      }\n      if (this.args.colspan.lg) {\n        classes.push(`hds-layout-grid--col-span-view-lg`);\n      }\n      if (this.args.colspan.xl) {\n        classes.push(`hds-layout-grid--col-span-view-xl`);\n      }\n      if (this.args.colspan.xxl) {\n        classes.push(`hds-layout-grid--col-span-view-xxl`);\n      }\n    }\n\n    // add classes based on responsive rowspan\n    if (typeof this.args.rowspan === 'object') {\n      if (this.args.rowspan.sm) {\n        classes.push(`hds-layout-grid--row-span-view-sm`);\n      }\n      if (this.args.rowspan.md) {\n        classes.push(`hds-layout-grid--row-span-view-md`);\n      }\n      if (this.args.rowspan.lg) {\n        classes.push(`hds-layout-grid--row-span-view-lg`);\n      }\n      if (this.args.rowspan.xl) {\n        classes.push(`hds-layout-grid--row-span-view-xl`);\n      }\n      if (this.args.rowspan.xxl) {\n        classes.push(`hds-layout-grid--row-span-view-xxl`);\n      }\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    {{#let (element this.componentTag) as |Tag|}}\n      <Tag\n        class={{this.classNames}}\n        {{style this.inlineStyles}}\n        ...attributes\n      >{{yield}}</Tag>\n    {{/let}}\n  </template>\n}\n","/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n */\n\nimport { isBrowserBundle } from './env';\n\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\nexport function isNodeEnv(): boolean {\n  // explicitly check for browser bundles as those can be optimized statically\n  // by terser/rollup.\n  return (\n    !isBrowserBundle() &&\n    Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]'\n  );\n}\n\n/**\n * Requires a module which is protected against bundler minification.\n *\n * @param request The module path to resolve\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction dynamicRequire(mod: any, request: string): any {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return mod.require(request);\n}\n\n/**\n * Helper for dynamically loading module that should work with linked dependencies.\n * The problem is that we _should_ be using `require(require.resolve(moduleName, { paths: [cwd()] }))`\n * However it's _not possible_ to do that with Webpack, as it has to know all the dependencies during\n * build time. `require.resolve` is also not available in any other way, so we cannot create,\n * a fake helper like we do with `dynamicRequire`.\n *\n * We always prefer to use local package, thus the value is not returned early from each `try/catch` block.\n * That is to mimic the behavior of `require.resolve` exactly.\n *\n * @param moduleName module name to require\n * @param existingModule module to use for requiring\n * @returns possibly required module\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function loadModule<T>(moduleName: string, existingModule: any = module): T | undefined {\n  let mod: T | undefined;\n\n  try {\n    mod = dynamicRequire(existingModule, moduleName);\n  } catch (e) {\n    // no-empty\n  }\n\n  if (!mod) {\n    try {\n      const { cwd } = dynamicRequire(existingModule, 'process');\n      mod = dynamicRequire(existingModule, `${cwd()}/node_modules/${moduleName}`) as T;\n    } catch (e) {\n      // no-empty\n    }\n  }\n\n  return mod;\n}\n","function hex2rgba (hex) {\n  if (typeof hex === 'number') {\n    hex = hex.toString()\n  }\n\n  if (typeof hex !== 'string') {\n    throw new Error('Color should be defined as hex string')\n  }\n\n  let hexCode = hex.slice().replace('#', '').split('')\n  if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {\n    throw new Error('Invalid hex color: ' + hex)\n  }\n\n  // Convert from short to long form (fff -> ffffff)\n  if (hexCode.length === 3 || hexCode.length === 4) {\n    hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {\n      return [c, c]\n    }))\n  }\n\n  // Add default alpha value\n  if (hexCode.length === 6) hexCode.push('F', 'F')\n\n  const hexValue = parseInt(hexCode.join(''), 16)\n\n  return {\n    r: (hexValue >> 24) & 255,\n    g: (hexValue >> 16) & 255,\n    b: (hexValue >> 8) & 255,\n    a: hexValue & 255,\n    hex: '#' + hexCode.slice(0, 6).join('')\n  }\n}\n\nexports.getOptions = function getOptions (options) {\n  if (!options) options = {}\n  if (!options.color) options.color = {}\n\n  const margin = typeof options.margin === 'undefined' ||\n    options.margin === null ||\n    options.margin < 0\n    ? 4\n    : options.margin\n\n  const width = options.width && options.width >= 21 ? options.width : undefined\n  const scale = options.scale || 4\n\n  return {\n    width: width,\n    scale: width ? 4 : scale,\n    margin: margin,\n    color: {\n      dark: hex2rgba(options.color.dark || '#000000ff'),\n      light: hex2rgba(options.color.light || '#ffffffff')\n    },\n    type: options.type,\n    rendererOpts: options.rendererOpts || {}\n  }\n}\n\nexports.getScale = function getScale (qrSize, opts) {\n  return opts.width && opts.width >= qrSize + opts.margin * 2\n    ? opts.width / (qrSize + opts.margin * 2)\n    : opts.scale\n}\n\nexports.getImageWidth = function getImageWidth (qrSize, opts) {\n  const scale = exports.getScale(qrSize, opts)\n  return Math.floor((qrSize + opts.margin * 2) * scale)\n}\n\nexports.qrToImageData = function qrToImageData (imgData, qr, opts) {\n  const size = qr.modules.size\n  const data = qr.modules.data\n  const scale = exports.getScale(size, opts)\n  const symbolSize = Math.floor((size + opts.margin * 2) * scale)\n  const scaledMargin = opts.margin * scale\n  const palette = [opts.color.light, opts.color.dark]\n\n  for (let i = 0; i < symbolSize; i++) {\n    for (let j = 0; j < symbolSize; j++) {\n      let posDst = (i * symbolSize + j) * 4\n      let pxColor = opts.color.light\n\n      if (i >= scaledMargin && j >= scaledMargin &&\n        i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {\n        const iSrc = Math.floor((i - scaledMargin) / scale)\n        const jSrc = Math.floor((j - scaledMargin) / scale)\n        pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]\n      }\n\n      imgData[posDst++] = pxColor.r\n      imgData[posDst++] = pxColor.g\n      imgData[posDst++] = pxColor.b\n      imgData[posDst] = pxColor.a\n    }\n  }\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nimport HdsIcon from '../../icon/index.gts';\n\nexport interface HdsDropdownToggleChevronSignature {\n  Element: HTMLDivElement;\n}\n\nconst HdsDropdownToggleChevron: TemplateOnlyComponent<HdsDropdownToggleChevronSignature> =\n  <template>\n    <div class=\"hds-dropdown-toggle-chevron\">\n      <HdsIcon @name=\"chevron-down\" />\n    </div>\n  </template>;\n\nexport default HdsDropdownToggleChevron;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { helper } from '@ember/component/helper';\nimport { assert } from '@ember/debug';\n\n/*\n * This helper can be used to support both @model and @models arguments when wrapping\n * the `<LinkTo>` component without it triggering assertions or having to use the component helper.\n *\n * The result of this helper should be passed into the `@models` argument of the `<LinkTo>` component:\n *\n * ```hbs\n * <LinkTo @models={{hds-link-to-models @model @models}} />\n * ```\n */\n\nexport function hdsLinkToModels<T>([model, models]: [\n  T | undefined,\n  T[] | undefined,\n]) {\n  assert(\n    'You cannot provide both the `@model` and `@models` arguments to the component.',\n    !model || !models\n  );\n\n  if (model) {\n    return [model];\n  } else if (models) {\n    return models;\n  } else {\n    return [];\n  }\n}\n\nconst hdsLinkToModelsHelper = helper(hdsLinkToModels);\nexport default hdsLinkToModelsHelper;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { helper } from '@ember/component/helper';\n\n/*\n * This helper can be used to safely pass a @query argument to the `<LinkTo>` component\n * without the risk of triggering an assertion if the argument is undefined\n *\n * The result of this helper should be passed into the `@query` argument of the `<LinkTo>` component:\n *\n * ```hbs\n * <LinkTo @query={{hds-link-to-query @query}} />\n * ```\n */\n\n// this is a workaround for https://github.com/emberjs/ember.js/issues/19693\n\nexport function hdsLinkToQuery([query]: [\n  Record<string, unknown> | undefined,\n]): Record<string, unknown> {\n  return query ?? {};\n}\n\nconst hdsLinkToQueryHelper = helper(hdsLinkToQuery);\nexport default hdsLinkToQueryHelper;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { modifier } from 'ember-modifier';\nimport { assert, warn } from '@ember/debug';\n\ntype TextToCopy = string | number | bigint;\ntype TargetToCopy = HTMLElement | string;\n\nexport interface HdsClipboardModifierSignature {\n  Element: HTMLElement;\n  Args: {\n    Named: {\n      text?: TextToCopy;\n      target?: TargetToCopy;\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      onSuccess?: (...args: any[]) => void;\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      onError?: (...args: any[]) => void;\n    };\n  };\n}\n\nexport const getTextToCopy = (text: TextToCopy): string => {\n  let textToCopy: string = '';\n\n  if (typeof text === 'string') {\n    textToCopy = text;\n  } else if (\n    // context: https://github.com/hashicorp/design-system/pull/1564\n    typeof text === 'number' ||\n    typeof text === 'bigint'\n  ) {\n    textToCopy = text.toString();\n  } else {\n    assert(\n      `\\`hds-clipboard\\` modifier - \\`text\\` argument must be a string or number - provided: ${typeof text}`\n    );\n  }\n\n  return textToCopy;\n};\n\nexport const getTargetElement = (\n  target: string | Node\n): HTMLElement | undefined => {\n  let targetElement: HTMLElement | null;\n\n  if (typeof target === 'string') {\n    targetElement = document.querySelector(target);\n\n    if (!targetElement) {\n      console.error(\n        '`hds-clipboard` modifier - `target` selector provided does not point to an existing DOM node, check your selector string',\n        targetElement\n      );\n      return;\n    }\n  } else if (target instanceof HTMLElement) {\n    targetElement = target;\n  } else {\n    if (target instanceof NodeList) {\n      assert(\n        '`hds-clipboard` modifier - `target` argument must be a string or a DOM node - provided: a list of DOM nodes'\n      );\n    } else {\n      assert(\n        `\\`hds-clipboard\\` modifier - \\`target\\` argument must be a string or a DOM node - provided: ${typeof target}`\n      );\n    }\n  }\n  return targetElement;\n};\n\nexport const getTextToCopyFromTargetElement = (\n  targetElement: TargetToCopy\n): string => {\n  let textToCopy: string = '';\n\n  if (targetElement instanceof HTMLElement) {\n    if (\n      targetElement instanceof HTMLInputElement || // targetElement.nodeName === 'INPUT' ||\n      targetElement instanceof HTMLTextAreaElement || // targetElement.nodeName === 'TEXTAREA' ||\n      targetElement instanceof HTMLSelectElement // targetElement.nodeName === 'SELECT'\n    ) {\n      textToCopy = targetElement.value;\n    } else {\n      // Hide any screen reader only text from the innerText calculation\n      const srOnlyTexts = targetElement.querySelectorAll('.sr-only');\n      srOnlyTexts.forEach((el: Element) => {\n        if (el instanceof HTMLElement) {\n          el.style.setProperty('display', 'none');\n        }\n      });\n\n      // simplest approach\n      textToCopy = targetElement.innerText;\n\n      // Restore visibility of screen reader only text\n      srOnlyTexts.forEach((el: Element) => {\n        if (el instanceof HTMLElement) {\n          el.style.removeProperty('display');\n        }\n      });\n\n      // approach based on text selection (left for backup just in case)\n      // var selection = window.getSelection();\n      // var range = document.createRange();\n      // selection.removeAllRanges();\n      // range.selectNodeContents(targetElement);\n      // selection.addRange(range);\n      // textToCopy = selection.toString();\n      // selection.removeAllRanges();\n    }\n  }\n  return textToCopy;\n};\n\nexport const writeTextToClipboard = async (\n  textToCopy: string\n): Promise<boolean> => {\n  // finally copy the text to the clipboard using the Clipboard API\n  // https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API\n  try {\n    // notice: the \"clipboard-write\" permission is granted automatically to pages when they are in the active tab\n    // https://developer.mozilla.org/en-US/docs/Web/API/Clipboard/write\n    await navigator.clipboard.writeText(textToCopy);\n    // DEBUG uncomment this for easy debugging\n    // console.log('success', textToCopy);\n    return true;\n  } catch {\n    // if it is not a secure context, use the polyfill\n    // to test that this works in a non-secure context, access the port through your IP address (ie. XXX.XXX.X.XXX:4200/)\n    if (!navigator.clipboard) {\n      try {\n        const clipboard = await import('clipboard-polyfill');\n        await clipboard.writeText(textToCopy);\n        return true;\n      } catch (error) {\n        warn(\n          `copy action failed, unable to use clipboard-polyfill: ${JSON.stringify(\n            error\n          )}`,\n          {\n            id: 'hds-clipboard.write-text-to-clipboard.catch-error',\n          }\n        );\n        return false;\n      }\n    }\n\n    return false;\n  }\n};\n\nexport const copyToClipboard = async (\n  text?: TextToCopy,\n  target?: TargetToCopy\n): Promise<boolean> => {\n  let textToCopy: string = '';\n\n  if (text !== undefined) {\n    textToCopy = getTextToCopy(text);\n  } else if (target) {\n    const targetElement = getTargetElement(target);\n    if (targetElement) {\n      textToCopy = getTextToCopyFromTargetElement(targetElement);\n    }\n  } else {\n    assert(\n      '`hds-clipboard` modifier - either a `text` or a `target` argument is required'\n    );\n  }\n  const success = await writeTextToClipboard(textToCopy);\n  return success;\n};\n\n// Notice: we use a function-based modifier here instead of a class-based one\n// because it's quite simple in its logic, and doesn't require injecting services\n// see: https://github.com/ember-modifier/ember-modifier#function-based-modifiers\n\nexport default modifier<HdsClipboardModifierSignature>(\n  (element, _positional, named): (() => void) => {\n    assert(\n      '`hds-clipboard` modifier - the modifier must be applied to an element',\n      element\n    );\n\n    const { text, target, onSuccess, onError } = named;\n\n    const onClick = async (event: MouseEvent): Promise<void> => {\n      const trigger = event.currentTarget;\n      const success = await copyToClipboard(text, target);\n\n      // fire the `onSuccess/onError` callbacks (if provided)\n      if (success) {\n        if (typeof onSuccess === 'function') {\n          onSuccess({ trigger, text, target });\n        }\n      } else {\n        if (typeof onError === 'function') {\n          onError({ trigger, text, target });\n        }\n      }\n    };\n\n    // add the \"onClick\" event listener to the element\n    // eslint-disable-next-line @typescript-eslint/no-misused-promises\n    element.addEventListener('click', onClick);\n\n    // this (teardown) function is run when the element is removed\n    return (): void => {\n      // eslint-disable-next-line @typescript-eslint/no-misused-promises\n      element.removeEventListener('click', onClick);\n    };\n  }\n);\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsLinkIconPositionValues {\n  Leading = 'leading',\n  Trailing = 'trailing',\n}\n\nexport type HdsLinkIconPositions = `${HdsLinkIconPositionValues}`;\n\nexport enum HdsLinkColorValues {\n  Primary = 'primary',\n  Secondary = 'secondary',\n}\n\nexport type HdsLinkColors = `${HdsLinkColorValues}`;\n\nexport enum HdsLinkStandaloneSizeValues {\n  Small = 'small',\n  Medium = 'medium',\n  Large = 'large',\n}\n\nexport type HdsLinkStandaloneSizes = `${HdsLinkStandaloneSizeValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { cached } from '@glimmer/tracking';\nimport { modifier } from 'ember-modifier';\nimport { TrackedMap } from 'tracked-built-ins';\nimport { hash } from '@ember/helper';\n\nimport HdsAdvancedTableColumnManagerWidth from './width.gts';\nimport HdsAdvancedTableColumnManagerOrder from './order.gts';\n\nimport type { ModifierLike } from '@glint/template';\nimport type { HdsAdvancedTableSyncWidthValuesSignature } from './width.gts';\nimport type { HdsAdvancedTableSyncColumnOrderSignature } from './order.gts';\nimport type {\n  HdsAdvancedTableColumn,\n  HdsAdvancedTableColumnReorderSide,\n  HdsAdvancedTableNormalizedColumn,\n  HdsAdvancedTablePixelString,\n} from '../types.ts';\nimport type { HdsAdvancedTableSignature } from '../index.gts';\n\nexport interface HdsAdvancedTableSyncThElementsSignature {\n  Element: HTMLDivElement;\n  Args: {\n    Positional: [HdsAdvancedTableColumn['key']];\n  };\n}\n\nexport interface HdsAdvancedTableColumnManagerSignature {\n  Args: {\n    columns: HdsAdvancedTableColumn[];\n    columnOrder: HdsAdvancedTableSignature['Args']['columnOrder'];\n    hasReorderableColumns?: HdsAdvancedTableSignature['Args']['hasReorderableColumns'];\n    hasStickyFirstColumn?: HdsAdvancedTableSignature['Args']['hasStickyFirstColumn'];\n    isSelectable?: HdsAdvancedTableSignature['Args']['isSelectable'];\n    onColumnReorder: HdsAdvancedTableSignature['Args']['onColumnReorder'];\n  };\n  Blocks: {\n    default: [\n      {\n        columns: HdsAdvancedTableNormalizedColumn[];\n        columnOrder: HdsAdvancedTableSignature['Args']['columnOrder'];\n        draggedColumnKey: HdsAdvancedTableNormalizedColumn['key'] | null;\n        firstColumnKey: HdsAdvancedTableNormalizedColumn['key'] | undefined;\n        firstNonStickyColumnKey:\n          | HdsAdvancedTableNormalizedColumn['key']\n          | undefined;\n        gridTemplateColumns: string;\n        lastColumnKey: HdsAdvancedTableNormalizedColumn['key'] | undefined;\n        orderedColumns: HdsAdvancedTableNormalizedColumn[];\n        reorderHoveredColumnKey: HdsAdvancedTableNormalizedColumn['key'] | null;\n        syncColumnOrder: ModifierLike<HdsAdvancedTableSyncColumnOrderSignature>;\n        syncThElements: ModifierLike<HdsAdvancedTableSyncThElementsSignature>;\n        syncWidthValues: ModifierLike<HdsAdvancedTableSyncWidthValuesSignature>;\n        beginColumnResize: () => void;\n        commitColumnWidths: () => void;\n        getAppliedWidth: (\n          columnKey: HdsAdvancedTableNormalizedColumn['key']\n        ) => HdsAdvancedTableNormalizedColumn['width'];\n        getColumnByKey: (\n          columnKey: HdsAdvancedTableNormalizedColumn['key']\n        ) => HdsAdvancedTableNormalizedColumn | undefined;\n        getRenderedWidth: (\n          columnKey: HdsAdvancedTableNormalizedColumn['key']\n        ) => HdsAdvancedTablePixelString | undefined;\n        getSiblingColumnKeys: (\n          columnKey: HdsAdvancedTableNormalizedColumn['key']\n        ) => {\n          previous?: HdsAdvancedTableNormalizedColumn['key'];\n          next?: HdsAdvancedTableNormalizedColumn['key'];\n        };\n        moveColumnToDropTarget: (\n          columnKey: HdsAdvancedTableNormalizedColumn['key'],\n          side: HdsAdvancedTableColumnReorderSide\n        ) => void;\n        moveColumnToTarget: (\n          columnKey: HdsAdvancedTableNormalizedColumn['key'],\n          targetColumnKey: HdsAdvancedTableNormalizedColumn['key'],\n          side: HdsAdvancedTableColumnReorderSide\n        ) => void;\n        moveColumnToTerminalPosition: (\n          columnKey: HdsAdvancedTableNormalizedColumn['key'],\n          position: 'start' | 'end'\n        ) => void;\n        resizeColumnByDelta: (\n          columnKey: HdsAdvancedTableNormalizedColumn['key'],\n          deltaPx: number\n        ) => number;\n        restoreColumnWidth: (\n          columnKey: HdsAdvancedTableNormalizedColumn['key']\n        ) => void;\n        setDraggedColumnKey: (\n          columnKey: HdsAdvancedTableNormalizedColumn['key'] | null\n        ) => void;\n        setReorderHoveredColumnKey: (\n          key: HdsAdvancedTableNormalizedColumn['key'] | null\n        ) => void;\n        resetTransientColumnWidths: () => void;\n        stepColumn: (\n          columnKey: HdsAdvancedTableNormalizedColumn['key'],\n          step: number\n        ) => void;\n      },\n    ];\n  };\n}\n\nexport default class HdsAdvancedTableColumnManager extends Component<HdsAdvancedTableColumnManagerSignature> {\n  thElements = new TrackedMap<string, HTMLDivElement>();\n\n  syncThElements = modifier<HdsAdvancedTableSyncThElementsSignature>(\n    (element, [key]) => {\n      if (key !== undefined) {\n        this.thElements.set(key, element);\n      }\n    }\n  );\n\n  @cached\n  get normalizedColumns(): HdsAdvancedTableNormalizedColumn[] {\n    return this.args.columns.map((column) => {\n      return column.key !== undefined\n        ? (column as HdsAdvancedTableNormalizedColumn)\n        : { ...column, key: guidFor(column) };\n    });\n  }\n\n  getColumnByKey = (\n    key: HdsAdvancedTableColumn['key']\n  ): HdsAdvancedTableNormalizedColumn | undefined => {\n    if (key === undefined) {\n      return;\n    }\n\n    return this.normalizedColumns.find((column) => column.key === key);\n  };\n\n  <template>\n    <HdsAdvancedTableColumnManagerOrder\n      @columns={{this.normalizedColumns}}\n      @columnOrder={{@columnOrder}}\n      @hasReorderableColumns={{@hasReorderableColumns}}\n      @hasStickyFirstColumn={{@hasStickyFirstColumn}}\n      @onColumnReorder={{@onColumnReorder}}\n      @getColumnByKey={{this.getColumnByKey}}\n      @thElements={{this.thElements}}\n      as |Order|\n    >\n      <HdsAdvancedTableColumnManagerWidth\n        @columns={{this.normalizedColumns}}\n        @orderedColumns={{Order.orderedColumns}}\n        @columnOrder={{Order.columnOrder}}\n        @isSelectable={{@isSelectable}}\n        @getColumnByKey={{this.getColumnByKey}}\n        @thElements={{this.thElements}}\n        as |Width|\n      >\n        {{yield\n          (hash\n            columns=this.normalizedColumns\n            columnOrder=Order.columnOrder\n            draggedColumnKey=Order.draggedColumnKey\n            firstColumnKey=Order.firstColumnKey\n            firstNonStickyColumnKey=Order.firstNonStickyColumnKey\n            gridTemplateColumns=Width.gridTemplateColumns\n            lastColumnKey=Order.lastColumnKey\n            orderedColumns=Order.orderedColumns\n            syncColumnOrder=Order.syncColumnOrder\n            syncThElements=this.syncThElements\n            syncWidthValues=Width.syncWidthValues\n            beginColumnResize=Width.beginColumnResize\n            resizeColumnByDelta=Width.resizeColumnByDelta\n            commitColumnWidths=Width.commitColumnWidths\n            getAppliedWidth=Width.getAppliedWidth\n            getColumnByKey=this.getColumnByKey\n            getSiblingColumnKeys=Width.getSiblingColumnKeys\n            getRenderedWidth=Width.getRenderedWidth\n            reorderHoveredColumnKey=Order.reorderHoveredColumnKey\n            restoreColumnWidth=Width.restoreColumnWidth\n            moveColumnToDropTarget=Order.moveColumnToDropTarget\n            moveColumnToTarget=Order.moveColumnToTarget\n            moveColumnToTerminalPosition=Order.moveColumnToTerminalPosition\n            resetTransientColumnWidths=Width.resetTransientColumnWidths\n            stepColumn=Order.stepColumn\n            setDraggedColumnKey=Order.setDraggedColumnKey\n            setReorderHoveredColumnKey=Order.setReorderHoveredColumnKey\n          )\n        }}\n      </HdsAdvancedTableColumnManagerWidth>\n    </HdsAdvancedTableColumnManagerOrder>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport { scheduleOnce } from '@ember/runloop';\nimport { modifier } from 'ember-modifier';\nimport { concat, fn } from '@ember/helper';\nimport { gt, eq } from 'ember-truth-helpers';\nimport { on } from '@ember/modifier';\n\nimport HdsDropdown from '../dropdown/index.gts';\nimport hdsT from '../../../helpers/hds-t.ts';\nimport { requestAnimationFrameWaiter } from './utils.ts';\n\nimport type { HdsDropdownSignature } from '../dropdown/index.gts';\nimport type { HdsDropdownToggleIconSignature } from '../dropdown/toggle/icon.gts';\nimport type { HdsAdvancedTableSignature } from './index.gts';\nimport type { HdsAdvancedTableThReorderHandleSignature } from './th-reorder-handle.gts';\nimport type { HdsAdvancedTableThResizeHandleSignature } from './th-resize-handle.gts';\nimport type { HdsDropdownToggleButtonSignature } from '../dropdown/toggle/button.gts';\nimport type HdsIntlService from '../../../services/hds-intl.ts';\nimport type {\n  HdsAdvancedTableNormalizedColumn,\n  HdsAdvancedTablePixelString,\n} from './types.ts';\n\ninterface HdsAdvancedTableThContextMenuOption {\n  key: string;\n  icon?: HdsDropdownToggleIconSignature['Args']['icon'];\n  label?: string;\n  action?: (dropdownCloseCallback: () => void) => void;\n}\n\nexport interface HdsAdvancedTableThContextMenuSignature {\n  Args: {\n    column: HdsAdvancedTableNormalizedColumn;\n    isFirstColumn: boolean;\n    isFirstNonStickyColumn: boolean;\n    isLastColumn: boolean;\n    hasResizableColumns?: boolean;\n    hasReorderableColumns?: boolean;\n    isStickyColumn?: boolean;\n    reorderHandleElement?: HdsAdvancedTableThReorderHandleSignature['Element'];\n    resizeHandleElement?: HdsAdvancedTableThResizeHandleSignature['Element'];\n    onColumnResize?: HdsAdvancedTableSignature['Args']['onColumnResize'];\n    onFocusReorderHandle?: () => void;\n    onGetRenderedWidth?: (\n      columnKey: HdsAdvancedTableNormalizedColumn['key']\n    ) => HdsAdvancedTablePixelString | undefined;\n    onMoveColumnToTerminalPosition?: (\n      columnKey: HdsAdvancedTableNormalizedColumn['key'],\n      position: 'start' | 'end'\n    ) => void;\n    onPinFirstColumn?: () => void;\n    onRestoreColumnWidth?: (\n      columnKey: HdsAdvancedTableNormalizedColumn['key']\n    ) => void;\n  };\n  Element: HdsDropdownSignature['Element'];\n}\n\nexport default class HdsAdvancedTableThContextMenu extends Component<HdsAdvancedTableThContextMenuSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  @tracked private _toggleElement:\n    | HdsDropdownToggleButtonSignature['Element']\n    | null = null;\n\n  get _resizeOptions(): HdsAdvancedTableThContextMenuOption[] {\n    const { isLastColumn } = this.args;\n\n    const translatedResetWidthLabel = this.hdsIntl.t(\n      'hds.advanced-table.th-context-menu.reset-width',\n      { default: 'Reset column width' }\n    );\n\n    let resizeOptions: HdsAdvancedTableThContextMenuOption[] = [\n      {\n        key: 'reset-column-width',\n        label: translatedResetWidthLabel,\n        icon: 'rotate-ccw',\n        action: this._resetColumnWidth.bind(this),\n      },\n    ];\n\n    if (!isLastColumn) {\n      const translatedResizeLabel = this.hdsIntl.t(\n        'hds.advanced-table.th-context-menu.resize',\n        { default: 'Resize column' }\n      );\n\n      resizeOptions = [\n        {\n          key: 'resize-column',\n          label: translatedResizeLabel,\n          icon: 'resize-column',\n          action: this._resizeColumn.bind(this),\n        },\n        ...resizeOptions,\n      ];\n    }\n\n    return resizeOptions;\n  }\n\n  get _reorderOptions(): HdsAdvancedTableThContextMenuOption[] {\n    const { isFirstNonStickyColumn, isLastColumn } = this.args;\n\n    const translatedMoveColumnLabel = this.hdsIntl.t(\n      'hds.advanced-table.th-context-menu.move-column',\n      { default: 'Move column' }\n    );\n\n    let reorderOptions: HdsAdvancedTableThContextMenuOption[] = [\n      {\n        key: 'reorder-column',\n        label: translatedMoveColumnLabel,\n        icon: 'move-horizontal',\n        action: () => this._moveColumn(),\n      },\n    ];\n\n    if (!isFirstNonStickyColumn) {\n      const translatedMoveColumnToStartLabel = this.hdsIntl.t(\n        'hds.advanced-table.th-context-menu.move-column-to-start',\n        { default: 'Move column to start' }\n      );\n      reorderOptions = [\n        ...reorderOptions,\n        {\n          key: 'move-column-to-start',\n          label: translatedMoveColumnToStartLabel,\n          icon: 'start',\n          action: (close) => this._moveColumnToPosition('start', close),\n        },\n      ];\n    }\n\n    if (!isLastColumn) {\n      const translatedMoveColumnToEndLabel = this.hdsIntl.t(\n        'hds.advanced-table.th-context-menu.move-column-to-end',\n        { default: 'Move column to end' }\n      );\n      reorderOptions = [\n        ...reorderOptions,\n        {\n          key: 'move-column-to-end',\n          label: translatedMoveColumnToEndLabel,\n          icon: 'end',\n          action: (close) => this._moveColumnToPosition('end', close),\n        },\n      ];\n    }\n\n    return reorderOptions;\n  }\n\n  get _stickyColumnOptions(): HdsAdvancedTableThContextMenuOption[] {\n    const { isStickyColumn } = this.args;\n\n    const translatedPinLabel = this.hdsIntl.t(\n      'hds.advanced-table.th-context-menu.pin',\n      { default: 'Pin column' }\n    );\n    const translatedUnpinLabel = this.hdsIntl.t(\n      'hds.advanced-table.th-context-menu.unpin',\n      { default: 'Unpin column' }\n    );\n\n    return [\n      {\n        key: 'pin-first-column',\n        label: isStickyColumn ? translatedUnpinLabel : translatedPinLabel,\n        icon: isStickyColumn ? 'pin-off' : 'pin',\n        action: this._pinFirstColumn.bind(this),\n      },\n    ];\n  }\n\n  get _options(): HdsAdvancedTableThContextMenuOption[] {\n    const {\n      hasReorderableColumns,\n      hasResizableColumns,\n      isFirstColumn,\n      isStickyColumn,\n    } = this.args;\n\n    let allGroups: HdsAdvancedTableThContextMenuOption[][] = [];\n\n    if (hasResizableColumns) {\n      allGroups = [...allGroups, this._resizeOptions];\n    }\n\n    if (hasReorderableColumns && isStickyColumn !== true) {\n      allGroups = [...allGroups, this._reorderOptions];\n    }\n\n    if (isFirstColumn && isStickyColumn !== undefined) {\n      allGroups = [...allGroups, this._stickyColumnOptions];\n    }\n\n    return allGroups.reduce<HdsAdvancedTableThContextMenuOption[]>(\n      (options, group, index) => {\n        // Add a separator before each group except the first\n        if (index > 0) {\n          return [...options, { key: 'separator' }, ...group];\n        }\n        return [...options, ...group];\n      },\n      []\n    );\n  }\n\n  private _registerDropdownToggleElement = modifier(\n    (element: HdsDropdownToggleButtonSignature['Element']) => {\n      this._toggleElement = element;\n    }\n  );\n\n  private _resizeColumn() {\n    this.args.resizeHandleElement?.focus();\n  }\n\n  private _resetColumnWidth(dropdownCloseCallback: () => void): void {\n    const { column, onColumnResize, onGetRenderedWidth, onRestoreColumnWidth } =\n      this.args;\n\n    if (\n      typeof onRestoreColumnWidth !== 'function' ||\n      column.key === undefined\n    ) {\n      return;\n    }\n\n    onRestoreColumnWidth(column.key);\n\n    if (typeof onColumnResize === 'function') {\n      // restoring re-flows every flexible column, so the resulting width is only\n      // knowable after the grid has re-laid-out\n      requestAnimationFrameWaiter(() => {\n        onColumnResize(column.key, onGetRenderedWidth?.(column.key));\n      });\n    }\n\n    dropdownCloseCallback();\n  }\n\n  private _moveColumn() {\n    const { onFocusReorderHandle } = this.args;\n\n    if (typeof onFocusReorderHandle === 'function') {\n      // eslint-disable-next-line ember/no-runloop\n      scheduleOnce('afterRender', this, onFocusReorderHandle);\n    }\n  }\n\n  private _moveColumnToPosition(\n    position: 'start' | 'end',\n    dropdownCloseCallback?: () => void\n  ): void {\n    const { column, onMoveColumnToTerminalPosition } = this.args;\n\n    onMoveColumnToTerminalPosition?.(column.key, position);\n\n    requestAnimationFrameWaiter(() => {\n      dropdownCloseCallback?.();\n\n      this._toggleElement?.focus();\n    });\n  }\n\n  private _pinFirstColumn(dropdownCloseCallback: () => void): void {\n    const { onPinFirstColumn } = this.args;\n\n    if (typeof onPinFirstColumn === 'function') {\n      onPinFirstColumn();\n    }\n\n    dropdownCloseCallback();\n  }\n\n  <template>\n    {{#if (gt this._options.length 0)}}\n      <HdsDropdown\n        class=\"hds-advanced-table__th-context-menu\"\n        @enableCollisionDetection={{true}}\n        ...attributes\n        as |D|\n      >\n        <D.ToggleIcon\n          @icon=\"more-vertical\"\n          @text={{hdsT\n            \"hds.components.advanced-table.th-context-menu.actions\"\n            columnLabel=@column.label\n            default=(concat \"Additional actions for \" @column.label)\n          }}\n          @hasChevron={{false}}\n          @size=\"small\"\n          {{this._registerDropdownToggleElement}}\n        />\n\n        {{#each this._options as |option|}}\n          {{#if (eq option.key \"separator\")}}\n            <D.Separator />\n          {{else if option.action}}\n            <D.Interactive\n              @icon={{option.icon}}\n              data-test-context-option-key={{option.key}}\n              {{on \"click\" (fn option.action D.close)}}\n            >\n              {{option.label}}\n            </D.Interactive>\n          {{/if}}\n        {{/each}}\n      </HdsDropdown>\n    {{/if}}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { scheduleOnce } from '@ember/runloop';\nimport { concat, fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\n\nimport HdsIcon from '../icon/index.gts';\nimport hdsT from '../../../helpers/hds-t.ts';\n\nimport type { HdsAdvancedTableNormalizedColumn } from './types';\n\nexport interface HdsAdvancedTableThReorderHandleSignature {\n  Args: {\n    column: HdsAdvancedTableNormalizedColumn;\n    tableHeight?: number;\n    thElement?: HTMLDivElement;\n    onFocusReorderHandle: () => void;\n    onSetDraggedColumnKey: (\n      columnKey: HdsAdvancedTableNormalizedColumn['key'] | null\n    ) => void;\n    onStepColumn: (step: number) => void;\n  };\n  Blocks: {\n    default?: [];\n  };\n  Element: HTMLDivElement;\n}\n\nfunction constructDragPreview(width: number, height?: number): HTMLDivElement {\n  const dragPreviewElement = document.createElement('div');\n\n  dragPreviewElement.className = 'hds-advanced-table__th-reorder-drag-preview';\n\n  dragPreviewElement.style.width = `${width}px`;\n\n  if (height) {\n    dragPreviewElement.style.height = `${height}px`;\n  }\n\n  document.body.appendChild(dragPreviewElement);\n\n  return dragPreviewElement;\n}\n\nexport default class HdsAdvancedTableThReorderHandle extends Component<HdsAdvancedTableThReorderHandleSignature> {\n  @action\n  handleDragStart(event: DragEvent): void {\n    const { column, tableHeight, thElement, onSetDraggedColumnKey } = this.args;\n    const { key } = column;\n\n    if (thElement === undefined) {\n      return;\n    }\n\n    onSetDraggedColumnKey(key);\n\n    const thElementWidth = thElement.offsetWidth;\n\n    event.dataTransfer?.setData('text/plain', key);\n\n    if (event.dataTransfer) {\n      event.dataTransfer.effectAllowed = 'move';\n    }\n\n    const dragPreview = constructDragPreview(thElementWidth, tableHeight);\n\n    document.body.appendChild(dragPreview);\n\n    // set the drag image, center it, and offset it vertically by 10px\n    event.dataTransfer?.setDragImage(dragPreview, thElementWidth / 2, 10);\n\n    setTimeout(() => document.body.removeChild(dragPreview), 0);\n  }\n\n  @action\n  handleKeydown(event: KeyboardEvent): void {\n    switch (event.key) {\n      case 'ArrowLeft':\n      case 'ArrowRight': {\n        event.preventDefault();\n        event.stopPropagation();\n\n        const { onStepColumn } = this.args;\n        const direction = event.key === 'ArrowLeft' ? -1 : 1;\n        onStepColumn(direction);\n\n        // we need to wait for the next run loop to ensure that the element has been registered with the column after moving\n        // eslint-disable-next-line ember/no-runloop\n        scheduleOnce('afterRender', this, this.args.onFocusReorderHandle);\n        break;\n      }\n\n      case ' ': {\n        event.preventDefault();\n        event.stopPropagation();\n        break;\n      }\n\n      default:\n        break;\n    }\n  }\n\n  <template>\n    {{! template-lint-disable no-unsupported-role-attributes require-presentational-children }}\n    <div\n      role=\"button\"\n      draggable=\"true\"\n      class=\"hds-advanced-table__th-reorder-handle\"\n      tabindex=\"0\"\n      aria-description={{hdsT\n        \"hds.components.advanced-table.th-reorder-handle.aria-description\"\n        default=\"Use left and right arrow keys while focused on this button to move the column to a new position.\"\n      }}\n      aria-label={{hdsT\n        \"hds.components.advanced-table.th-reorder-handle.aria-label\"\n        columnLabel=@column.label\n        default=(concat \"Reorder \" @column.label \" column\")\n      }}\n      {{on \"dragstart\" this.handleDragStart}}\n      {{on \"dragend\" (fn @onSetDraggedColumnKey null)}}\n      {{on \"keydown\" this.handleKeydown}}\n      ...attributes\n    >\n      <div class=\"hds-advanced-table__th-reorder-handle__inner\">\n        <HdsIcon @name=\"move-horizontal\" />\n      </div>\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { cached } from '@glimmer/tracking';\nimport { guidFor } from '@ember/object/internals';\nimport { hash } from '@ember/helper';\n\ntype HdsAdvancedTableRowWrapper<T> = {\n  id: string;\n  source: T;\n  depth: number;\n  isExpanded: boolean;\n  isVisible: boolean;\n  hasChildren: boolean;\n};\n\nexport interface HdsAdvancedTableBodySignature<T> {\n  Args: {\n    childrenKey: string;\n    expandedRowIds: Set<string>;\n    sortedModel: T[];\n  };\n  Blocks: {\n    default: [\n      {\n        lastVisibleRowId: string | undefined;\n        rows: HdsAdvancedTableRowWrapper<T>[];\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsAdvancedTableBody<\n  T extends Record<string, unknown>,\n> extends Component<HdsAdvancedTableBodySignature<T>> {\n  @cached\n  get rows(): HdsAdvancedTableRowWrapper<T>[] {\n    const { sortedModel, childrenKey, expandedRowIds } = this.args;\n    const rows: HdsAdvancedTableRowWrapper<T>[] = [];\n\n    const traverse = (\n      items: T[],\n      depth: number,\n      ancestorsExpanded: boolean\n    ) => {\n      for (const item of items) {\n        const id = guidFor(item);\n        const isExpanded = expandedRowIds.has(id);\n        const children = item[childrenKey] as T[] | undefined;\n        const hasChildren = Array.isArray(children) && children.length > 0;\n        const isVisible = depth === 0 || ancestorsExpanded;\n\n        rows.push({\n          id,\n          source: item,\n          depth,\n          isExpanded,\n          isVisible,\n          hasChildren,\n        });\n\n        if (hasChildren) {\n          traverse(children, depth + 1, isVisible && isExpanded);\n        }\n      }\n    };\n\n    traverse(sortedModel, 0, false);\n\n    return rows;\n  }\n\n  get lastVisibleRowId(): string | undefined {\n    const visibleRows = this.rows.filter((row) => row.isVisible);\n    const lastVisibleRow = visibleRows[visibleRows.length - 1];\n\n    return lastVisibleRow?.id;\n  }\n\n  <template>\n    <div class=\"hds-advanced-table__tbody\" role=\"rowgroup\" ...attributes>\n      {{yield (hash lastVisibleRowId=this.lastVisibleRowId rows=this.rows)}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsAlertTypeValues {\n  Page = 'page',\n  Inline = 'inline',\n  Compact = 'compact',\n}\nexport type HdsAlertTypes = `${HdsAlertTypeValues}`;\n\nexport enum HdsAlertColorValues {\n  Neutral = 'neutral',\n  Highlight = 'highlight',\n  Success = 'success',\n  Warning = 'warning',\n  Critical = 'critical',\n}\nexport type HdsAlertColors = `${HdsAlertColorValues}`;\n\nexport enum HdsAlertTitleTagValues {\n  Div = 'div',\n  H1 = 'h1',\n  H2 = 'h2',\n  H3 = 'h3',\n  H4 = 'h4',\n  H5 = 'h5',\n  H6 = 'h6',\n}\n\nexport type HdsAlertTitleTags = `${HdsAlertTitleTagValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\nimport type { HdsIconSignature } from '../icon/index.gts';\nimport type HdsIntlService from '../../../services/hds-intl';\n\nexport enum HdsAppFooterStatusValues {\n  Operational = 'operational',\n  Degraded = 'degraded',\n  Maintenance = 'maintenance',\n  Outage = 'outage',\n}\n\nexport type HdsAppFooterStatusTypes = `${HdsAppFooterStatusValues}`;\n\nexport function HdsAppFooterStatusLinkStatusValues(\n  hdsIntl: HdsIntlService\n): Record<\n  HdsAppFooterStatusValues,\n  {\n    text: string;\n    iconName: HdsIconSignature['Args']['name'];\n  }\n> {\n  return {\n    [HdsAppFooterStatusValues.Operational]: {\n      text: hdsIntl.t(\n        'hds.components.app-footer.status-link.status.operational',\n        {\n          default: 'System operational',\n        }\n      ),\n      iconName: 'check-circle',\n    },\n    [HdsAppFooterStatusValues.Degraded]: {\n      text: hdsIntl.t('hds.components.app-footer.status-link.status.degraded', {\n        default: 'System degraded',\n      }),\n      iconName: 'alert-triangle',\n    },\n    [HdsAppFooterStatusValues.Maintenance]: {\n      text: hdsIntl.t(\n        'hds.components.app-footer.status-link.status.maintenance',\n        {\n          default: 'System maintenance',\n        }\n      ),\n      iconName: 'alert-triangle',\n    },\n    [HdsAppFooterStatusValues.Outage]: {\n      text: hdsIntl.t('hds.components.app-footer.status-link.status.outage', {\n        default: 'System outage',\n      }),\n      iconName: 'x-circle',\n    },\n  };\n}\n\nexport enum HdsAppFooterThemeValues {\n  Light = 'light',\n  Dark = 'dark',\n}\n\nexport type HdsAppFooterThemeTypes = `${HdsAppFooterThemeValues}`;\n","import { tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\n\nexport class ReadonlyCell<Value> implements Reactive<Value> {\n  #getter: () => Value;\n\n  constructor(getter: () => Value) {\n    this.#getter = getter;\n  }\n\n  toHTML(): string {\n    assert(\n      'Not a valid API. Please access either .current or .read() if the value of this Cell is needed',\n    );\n  }\n\n  get [CURRENT](): Value {\n    return this.current;\n  }\n\n  get current(): Value {\n    return this.#getter();\n  }\n}\n\nexport class Cell<Value = unknown> implements Reactive<Value> {\n  @tracked declare current: Value;\n\n  get [CURRENT](): Value {\n    return this.current;\n  }\n\n  toHTML(): string {\n    assert(\n      'Not a valid API. Please access either .current or .read() if the value of this Cell is needed',\n    );\n  }\n\n  constructor();\n  constructor(initialValue: Value);\n  constructor(initialValue?: Value) {\n    if (initialValue !== undefined) {\n      this.current = initialValue;\n    }\n  }\n\n  /**\n   * Toggles the value of `current` only if\n   * `current` is a boolean -- errors otherwise\n   */\n  toggle = () => {\n    assert(\n      `toggle can only be used when 'current' is a boolean type`,\n      typeof this.current === 'boolean' || this.current === undefined,\n    );\n\n    (this.current as boolean) = !this.current;\n  };\n\n  /**\n   * Updates the value of `current`\n   * by calling a function that receives the previous value.\n   */\n  update = (updater: (prevValue: Value) => Value) => {\n    this.current = updater(this.current);\n  };\n\n  /**\n   * Updates the value of `current`\n   */\n  set = (nextValue: Value) => {\n    this.current = nextValue;\n  };\n\n  /**\n   * Returns the current value.\n   */\n  read = () => this.current;\n}\n\n/**\n * <div class=\"callout note\">\n *\n * This is not a core part of ember-resources, but is a useful utility when working with Resources. This utility is still under the broader library's SemVer policy. Additionally, the \"Cell\" is a core concept in Starbeam. See [Cells in Starbeam](https://www.starbeamjs.com/guides/fundamentals/cells.html)\n *\n * </div>\n *\n *\n * Small state utility for helping reduce the number of imports\n * when working with resources in isolation.\n *\n * The return value is an instance of a class with a single\n * `@tracked` property, `current`. If `current` is a boolean,\n * there is a `toggle` method available as well.\n *\n * For example, a Clock:\n *\n * ```js\n * import { resource, cell } from 'ember-resources';\n *\n * const Clock = resource(({ on }) => {\n *   let time = cell(new Date());\n *   let interval = setInterval(() => time.current = new Date(), 1000);\n *\n *   on.cleanup(() => clearInterval(interval));\n *\n *   let formatter = new Intl.DateTimeFormat('en-US', {\n *     hour: 'numeric',\n *     minute: 'numeric',\n *     second: 'numeric',\n *     hour12: true,\n *   });\n *\n *   return () => formatter.format(time.current);\n * });\n *\n * <template>\n *   It is: <time>{{Clock}}</time>\n * </template>\n * ```\n *\n * Additionally, cells can be directly rendered:\n * ```js\n * import { resource, cell } from 'ember-resources';\n *\n * const value = cell(0);\n *\n * <template>\n *    {{value}}\n * </template>\n * ```\n *\n */\nexport function cell<Value = unknown>(initialValue?: Value): Cell<Value> {\n  if (initialValue !== undefined) {\n    return new Cell(initialValue as Value);\n  }\n\n  return new Cell();\n}\n\n// @ts-ignore\nimport { capabilities as helperCapabilities, setHelperManager } from '@ember/helper';\n\nimport { CURRENT } from './types.ts';\n\nimport type { GlintRenderable, Reactive } from './types.ts';\n\nclass CellManager {\n  capabilities = helperCapabilities('3.23', {\n    hasValue: true,\n  });\n\n  createHelper(cell: Cell) {\n    return cell;\n  }\n\n  getValue(cell: Cell) {\n    return cell.current;\n  }\n}\n\nconst cellEvaluator = new CellManager();\n\nsetHelperManager(() => cellEvaluator, Cell.prototype);\nsetHelperManager(() => cellEvaluator, ReadonlyCell.prototype);\n","import { appEmberSatisfies, importSync, macroCondition } from '@embroider/macros';\n\nimport type Owner from '@ember/owner';\n\ninterface CompatOwner {\n  getOwner: (context: unknown) => Owner | undefined;\n  setOwner: (context: unknown, owner: Owner) => void;\n}\n\nexport const compatOwner = {} as CompatOwner;\n\nif (macroCondition(appEmberSatisfies('>=4.12.0'))) {\n  // In no version of ember where `@ember/owner` tried to be imported did it exist\n  // if (macroCondition(false)) {\n  // Using 'any' here because importSync can't lookup types correctly\n  compatOwner.getOwner = (importSync('@ember/owner') as any).getOwner;\n  compatOwner.setOwner = (importSync('@ember/owner') as any).setOwner;\n} else {\n  // Using 'any' here because importSync can't lookup types correctly\n  compatOwner.getOwner = (importSync('@ember/application') as any).getOwner;\n  compatOwner.setOwner = (importSync('@ember/application') as any).setOwner;\n}\n","// @ts-ignore\nimport { createCache, getValue } from '@glimmer/tracking/primitives/cache';\nimport { assert } from '@ember/debug';\nimport { associateDestroyableChild, destroy } from '@ember/destroyable';\n// @ts-ignore\nimport { capabilities as helperCapabilities, invokeHelper, setHelperManager } from '@ember/helper';\n\nimport type { resource } from './resource.ts';\nimport type Owner from '@ember/owner';\n\ntype SpreadFor<T> = T extends Array<any> ? T : [T];\ntype ResourceFactory<Value = any, Args = any> = (...args: SpreadFor<Args>) => Value;\n\ninterface State {\n  cache: ReturnType<typeof invokeHelper>;\n}\n\nimport { compatOwner } from './ember-compat.ts';\n\nconst setOwner = compatOwner.setOwner;\n\nclass ResourceInvokerManager {\n  capabilities = helperCapabilities('3.23', {\n    hasValue: true,\n    hasDestroyable: true,\n  });\n\n  constructor(protected owner: Owner) {}\n\n  createHelper(fn: ResourceFactory, args: any): State {\n    let previous: object | undefined;\n    /**\n     * This cache is for args passed to the ResourceInvoker/Factory\n     *\n     * We want to cache the helper result, and only re-inoke when the args\n     * change.\n     */\n    const cache: State['cache'] = createCache(() => {\n      let resource = fn(...[...args.positional, args.named]) as object;\n\n      setOwner(resource, this.owner);\n\n      let result = invokeHelper(cache, resource);\n\n      if (previous) {\n        destroy(previous);\n      }\n\n      previous = result;\n\n      return result;\n    });\n\n    setOwner(cache, this.owner);\n\n    return { cache };\n  }\n\n  /**\n   * getValue is re-called when args change\n   */\n  getValue({ cache }: State) {\n    // SAFETY: we have a nested cache here\n    let resource = getValue(cache) as ReturnType<typeof invokeHelper>;\n\n    associateDestroyableChild(cache, resource);\n\n    return getValue(resource);\n  }\n\n  getDestroyable({ cache }: State) {\n    /**\n     * This is the parent cache, from `createHelper`\n     */\n    return cache;\n  }\n}\n\n/**\n * Allows wrapper functions to provide a [[resource]] for use in templates.\n *\n * Only library authors may care about this, but helper function is needed to \"register\"\n * the wrapper function with a helper manager that specifically handles invoking both the\n * resource wrapper function as well as the underlying resource.\n *\n * _App-devs / consumers may not ever need to know this utility function exists_\n *\n *  Example using strict mode + `<template>` syntax and a template-only component:\n *  ```js\n *  import { resource, resourceFactory } from 'ember-resources';\n *\n *  function RemoteData(url) {\n *    return resource(({ on }) => {\n *      let state = new TrackedObject({});\n *      let controller = new AbortController();\n *\n *      on.cleanup(() => controller.abort());\n *\n *      fetch(url, { signal: controller.signal })\n *        .then(response => response.json())\n *        .then(data => {\n *          state.value = data;\n *        })\n *        .catch(error => {\n *          state.error = error;\n *        });\n *\n *      return state;\n *    })\n * }\n *\n * resourceFactory(RemoteData);\n *\n *  <template>\n *    {{#let (RemoteData \"http://....\") as |state|}}\n *      {{#if state.value}}\n *        ...\n *      {{else if state.error}}\n *        {{state.error}}\n *      {{/if}}\n *    {{/let}}\n *  </template>\n *  ```\n *\n *  Alternatively, `resourceFactory` can wrap the wrapper function.\n *\n *  ```js\n *  const RemoteData = resourceFactory((url) => {\n *    return resource(({ on }) => {\n *      ...\n *    });\n *  })\n *  ```\n */\nexport function resourceFactory<Value = unknown, Args extends any[] = any[]>(\n  wrapperFn: (...args: Args) => ReturnType<typeof resource<Value>>,\n  /**\n   * This is a bonkers return type.\n   * Here are the scenarios:\n   *   const A = resourceFactory((...args) => {\n   *     return resource(({ on }) => {\n   *       ...\n   *     })\n   *   })\n   *\n   * Invocation styles need to be type-correct:\n   *   @use a = A(() => [b, c, d])\n   *   => single argument which is a function where the return type is the args\n   *\n   *   {{#let (A b c d) as |a|}}\n   *      {{a}}\n   *   {{/let}}\n   *   => args are passed directly as positional arguments\n   */\n) {\n  setHelperManager(ResourceInvokerFactory, wrapperFn);\n\n  return wrapperFn as ResourceBlueprint<Value, Args>;\n}\n\ntype ResourceBlueprint<Value, Args> =\n  /**\n   * Type for template invocation\n   *  {{#let (A b c d) as |a|}}\n   *     {{a}}\n   *  {{/let}}\n   *\n   * This could also be used in JS w/ invocation with @use\n   *   @use a = A(() => b)\n   *\n   * NOTE: it is up to the function passed to resourceFactory to handle some of the parameter ambiguity\n   */\n  | ((...args: SpreadFor<Args>) => ReturnType<typeof resource<Value>>)\n  /**\n   * Not passing args is allowed, too\n   *   @use a = A()\n   *\n   *   {{A}}\n   */\n  | (() => ReturnType<typeof resource<Value>>);\n// semicolon\n\n// Provide a singleton manager.\nconst ResourceInvokerFactory = (owner: Owner | undefined) => {\n  assert(`Cannot create resource without an owner`, owner);\n\n  return new ResourceInvokerManager(owner);\n};\n","// @ts-ignore\nimport { createCache, getValue } from '@glimmer/tracking/primitives/cache';\nimport { assert } from '@ember/debug';\nimport { associateDestroyableChild, destroy, registerDestructor } from '@ember/destroyable';\n// @ts-ignore\nimport { invokeHelper } from '@ember/helper';\n// @ts-ignore\nimport { capabilities as helperCapabilities } from '@ember/helper';\nimport { appEmberSatisfies, importSync, macroCondition } from '@embroider/macros';\n\nimport { ReadonlyCell } from './cell.ts';\nimport { compatOwner } from './ember-compat.ts';\nimport { CURRENT, INTERNAL } from './types.ts';\n\nimport type {\n  Destructor,\n  InternalFunctionResourceConfig,\n  Reactive,\n  ResourceFunction,\n} from './types.ts';\nimport type Owner from '@ember/owner';\n\nconst setOwner = compatOwner.setOwner;\n\n/**\n * `tracked(initialValue)` from `@glimmer/tracking` creates a standalone\n * reactive value -- an instance of `TrackedValue` from `@glimmer/validator`.\n * These unwrap when returned from a resource, the same way `Cell`s do.\n */\nlet TrackedValue: undefined | (new (...args: never[]) => { value: unknown });\n\nif (macroCondition(appEmberSatisfies('>=7.3.0-alpha.2'))) {\n  TrackedValue = (importSync('@glimmer/validator') as any).TrackedValue;\n}\n\n/**\n * Note, a function-resource receives on object, hooks.\n *    We have to build that manually in this helper manager\n */\nclass FunctionResourceManager {\n  capabilities: ReturnType<typeof helperCapabilities> = helperCapabilities('3.23', {\n    hasValue: true,\n    hasDestroyable: true,\n  });\n\n  constructor(protected owner: Owner) {}\n\n  /**\n   * Resources do not take args.\n   * However, they can access tracked data\n   */\n  createHelper(config: InternalFunctionResourceConfig): {\n    fn: InternalFunctionResourceConfig['definition'];\n    cache: ReturnType<typeof invokeHelper>;\n  } {\n    let { definition: fn } = config;\n    /**\n     * We have to copy the `fn` in case there are multiple\n     * usages or invocations of the function.\n     *\n     * This copy is what we'll ultimately work with and eventually\n     * destroy.\n     */\n    let thisFn = fn.bind(null);\n    let previousFn: object;\n    let usableCache = new WeakMap<object, ReturnType<typeof invokeHelper>>();\n    let owner = this.owner;\n\n    let cache = createCache(() => {\n      if (previousFn) {\n        destroy(previousFn);\n      }\n\n      let currentFn = thisFn.bind(null);\n\n      associateDestroyableChild(thisFn, currentFn);\n      previousFn = currentFn;\n\n      let maybeValue = currentFn({\n        on: {\n          cleanup: (destroyer: Destructor) => {\n            registerDestructor(currentFn, destroyer);\n          },\n        },\n        use: (usable) => {\n          assert(\n            `Expected the resource's \\`use(...)\\` utility to have been passed an object, but a \\`${typeof usable}\\` was passed.`,\n            typeof usable === 'object',\n          );\n          assert(\n            `Expected the resource's \\`use(...)\\` utility to have been passed a truthy value, instead was passed: ${usable}.`,\n            usable,\n          );\n          assert(\n            `Expected the resource's \\`use(...)\\` utility to have been passed another resource, but something else was passed.`,\n            INTERNAL in usable,\n          );\n\n          let previousCache = usableCache.get(usable);\n\n          if (previousCache) {\n            destroy(previousCache);\n          }\n\n          let nestedCache = invokeHelper(cache, usable);\n\n          associateDestroyableChild(currentFn, nestedCache as object);\n\n          usableCache.set(usable, nestedCache);\n\n          return new ReadonlyCell<any>(() => {\n            let cache = usableCache.get(usable);\n\n            assert(`Cache went missing while evaluating the result of a resource.`, cache);\n\n            return getValue(cache);\n          });\n        },\n        owner: this.owner,\n      });\n\n      return maybeValue;\n    });\n\n    setOwner(cache, owner);\n\n    return { fn: thisFn, cache };\n  }\n\n  getValue({ cache }: { fn: ResourceFunction; cache: ReturnType<typeof invokeHelper> }) {\n    let maybeValue = getValue(cache);\n\n    if (typeof maybeValue === 'function') {\n      return maybeValue();\n    }\n\n    if (isReactive(maybeValue)) {\n      return maybeValue[CURRENT];\n    }\n\n    if (TrackedValue && maybeValue instanceof TrackedValue) {\n      return maybeValue.value;\n    }\n\n    return maybeValue;\n  }\n\n  getDestroyable({ fn }: { fn: ResourceFunction }) {\n    return fn;\n  }\n}\n\nfunction isReactive<Value>(maybe: unknown): maybe is Reactive<Value> {\n  return typeof maybe === 'object' && maybe !== null && CURRENT in maybe;\n}\n\nexport const ResourceManagerFactory = (owner: Owner | undefined) => {\n  assert(`Cannot create resource without an owner`, owner);\n\n  return new FunctionResourceManager(owner);\n};\n","// NOTE: https://2ality.com/2022/10/javascript-decorators.html#class-getter-decorators%2C-class-setter-decorators\n// (for spec decorators, when it comes time to implement those)\n//\n// @ts-ignore\nimport { getValue } from '@glimmer/tracking/primitives/cache';\nimport { assert } from '@ember/debug';\nimport { associateDestroyableChild } from '@ember/destroyable';\n// @ts-ignore\nimport { invokeHelper } from '@ember/helper';\n\nimport { ReadonlyCell } from './cell.ts';\n\nimport type {\n  INTERNAL,\n  InternalFunctionResourceConfig,\n  Reactive,\n  Stage1DecoratorDescriptor,\n} from './types.ts';\n\ntype Config =\n  | { [INTERNAL]: true; type: string; definition: unknown }\n  | InternalFunctionResourceConfig;\n\ntype NonInstanceType<K> = K extends InstanceType<any> ? object : K;\ntype DecoratorKey<K> = K extends string | symbol ? K : never;\n\n/**\n * The `@use(...)` decorator can be used to use a Resource in javascript classes\n *\n * ```js\n * import { resource, use } from 'ember-resources';\n *\n * const Clock = resource( ... );\n *\n * class Demo {\n *   @use(Clock) time;\n * }\n * ```\n */\nexport function use<Value>(definition: Value | (() => Value)): PropertyDecorator;\n\n/**\n * The `@use` decorator can be used to use a Resource in javascript classes\n *\n * ```js\n * import { resource, use } from 'ember-resources';\n *\n * const Clock = resource(() => 2);\n *\n * class MyClass {\n *   @use data = Clock;\n * }\n *\n * (new MyClass()).data === 2\n * ```\n */\nexport function use<Prototype, Key>(\n  prototype: NonInstanceType<Prototype>,\n  key: DecoratorKey<Key>,\n  descriptor?: Stage1DecoratorDescriptor,\n): void;\n\n/**\n * The `use function can be used to use a Resource in javascript classes\n *\n * Note that when using this version of `use`, the value is only accessible on the `current`\n * property.\n *\n * ```js\n * import { resource, use } from 'ember-resources';\n *\n * const Clock = resource( ... );\n *\n * class Demo {\n *   data = use(this, Clock);\n * }\n *\n * (new Demo()).data.current === 2\n * ```\n */\nexport function use<Value>(\n  parent: object,\n  definition: Value | (() => Value),\n  _?: never,\n): Reactive<Value extends Reactive<any> ? Value['current'] : Value>;\n\nexport function use(\n  ...args:\n    | Parameters<typeof initializerDecorator>\n    | Parameters<typeof argumentToDecorator>\n    | Parameters<typeof classContextLink>\n) {\n  if (args.length === 3) {\n    return initializerDecorator(...args);\n  }\n\n  if (args.length === 2) {\n    if (typeof args[1] !== 'string' && typeof args[1] !== 'symbol') {\n      return classContextLink(args[0], args[1]);\n    }\n  }\n\n  if (args.length === 1) {\n    return argumentToDecorator(args[0]);\n  }\n\n  assert(`Unknown arity for \\`use\\`. Received ${args.length} arguments`, false);\n}\n\nfunction getCurrentValue<Value>(value: Value | Reactive<Value>): Value {\n  /**\n   * If we are working with a cell, forward the '.current' call to it.\n   */\n  if (typeof value === 'object' && value !== null && 'current' in value) {\n    return value.current;\n  }\n\n  return value;\n}\n\nfunction classContextLink<Value>(\n  context: object,\n  definition: Value | (() => Value),\n): Reactive<Value> {\n  let cache: ReturnType<typeof invokeHelper>;\n\n  return new ReadonlyCell<Value>(() => {\n    if (!cache) {\n      cache = invokeHelper(context, definition as object);\n\n      associateDestroyableChild(context, cache);\n    }\n\n    let value = getValue(cache);\n\n    return getCurrentValue(value) as Value;\n  });\n}\n\nfunction argumentToDecorator<Value>(definition: Value | (() => Value)): PropertyDecorator {\n  return (\n    _prototype: object,\n    key: string | symbol,\n    descriptor?: Stage1DecoratorDescriptor,\n  ): void => {\n    // TS's types for decorators use the Stage2 implementation, even though Babel uses Stage 1\n    if (!descriptor) return;\n\n    assert(`@use can only be used with string-keys`, typeof key === 'string');\n\n    assert(\n      `When @use(...) is passed a resource, an initialized value is not allowed. ` +\n        `\\`@use(Clock) time;`,\n      !descriptor.initializer,\n    );\n\n    let newDescriptor = descriptorGetter(definition);\n\n    return newDescriptor as unknown as void /* Thanks, TS and Stage 2 Decorators */;\n  };\n}\n\ninterface UsableConfig {\n  type: string;\n  definition: unknown;\n}\n\nexport type UsableFn<Usable extends UsableConfig> = (\n  context: object,\n  config: Usable,\n  // This return type *would be* ReturnType<typeof invokeHelper>\n  // But the DT types for @ember/helper don't have *any* of the helper-manager things.\n) => unknown;\n\nconst USABLES = new Map<string, UsableFn<any>>();\n\n/**\n * Register with the usable system.\n * This is only needed for for the `@use` decorator, as use(this, Helper) is a concise wrapper\n * around the helper-manager system.\n *\n * The return type must be a \"Cache\" returned from `invokeHelper` so that `@use`'s usage of `getValue` gets the value (as determined by the helper manager you wrote for your usable).\n */\nexport function registerUsable<Usable extends UsableConfig>(\n  /**\n   * The key to register the usable under.\n   *\n   * All usables must have a `type`.\n   *\n   * Any usable matching the registered type will used the passed function to\n   *   create its Cache -- this is typically the return result of `invokeHelper`,\n   *\n   * Any usables must have a `type` property matching this string\n   */\n  type: string,\n  /**\n   * Receives the the parent context and object passed to the `@use` decorator.\n   */\n  useFn: UsableFn<Usable>,\n) {\n  assert(`type may not overlap with an existing usable`, !USABLES.has(type));\n\n  USABLES.set(type, useFn);\n}\n\nfunction descriptorGetter(initializer: unknown | (() => unknown)) {\n  let caches = new WeakMap<object, any>();\n\n  return {\n    get(this: object) {\n      let cache = caches.get(this);\n\n      if (!cache) {\n        let config = (\n          typeof initializer === 'function' ? initializer.call(this) : initializer\n        ) as Config;\n\n        let usable = USABLES.get(config.type);\n\n        assert(\n          `Expected the initialized value with @use to have been a registerd \"usable\". Available usables are: ${[\n            ...USABLES.keys(),\n          ]}`,\n          usable,\n        );\n\n        cache = usable(this, config);\n\n        assert(`Failed to create cache for usable: ${config.type}`, cache);\n\n        caches.set(this as object, cache);\n        associateDestroyableChild(this, cache);\n      }\n\n      let value = getValue(cache);\n\n      return getCurrentValue(value);\n    },\n  };\n}\n\nfunction initializerDecorator(\n  _prototype: object,\n  key: string | symbol,\n  descriptor?: Stage1DecoratorDescriptor,\n): void {\n  // TS's types for decorators use the Stage2 implementation, even though Babel uses Stage 1\n  if (!descriptor) return;\n\n  assert(`@use can only be used with string-keys`, typeof key === 'string');\n\n  let { initializer } = descriptor;\n\n  assert(\n    `@use may only be used on initialized properties. For example, ` +\n      `\\`@use foo = resource(() => { ... })\\` or ` +\n      `\\`@use foo = SomeResource.from(() => { ... });\\``,\n    initializer,\n  );\n\n  return descriptorGetter(initializer) as unknown as void /* Thanks, TS and Stage 2 Decorators */;\n}\n","import { assert } from '@ember/debug';\n// @ts-ignore\nimport { invokeHelper, setHelperManager } from '@ember/helper';\n\nimport { ResourceManagerFactory } from './resource-manager.ts';\nimport { INTERNAL } from './types.ts';\nimport { registerUsable } from './use.ts';\nimport { wrapForPlainUsage } from './utils.ts';\n\nimport type { InternalFunctionResourceConfig, ResourceFn, ResourceFunction } from './types.ts';\n\nconst TYPE = 'function-based';\n\nregisterUsable(TYPE, (context: object, config: InternalFunctionResourceConfig) => {\n  return invokeHelper(context, config);\n});\n\n/**\n * `resource` provides a single reactive read-only value with lifetime and may have cleanup.\n *\n * Arguments passed to the `resource` function:\n * ```js\n *  resource(\n *    ({\n *      // provided callback functions:\n *      //  - `cleanup`\n *      on,\n *\n *      // used for composing other resources\n *      use,\n *\n *      // used for accessing services, etc on the app/engine owner instance\n *      owner\n *    }) => {\n *      // ✂️  resource body ✂️\n *    }\n *  );\n *  ```\n *\n *  Example using `fetch` + `AbortController`\n *  ```js\n *  import { use, resource } from 'ember-resources';\n *  import { TrackedObject } from 'tracked-built-ins';\n *  import { tracked } from '@glimmer/tracking';\n *\n *  class Demo {\n *    @tracked url = '...';\n *\n *    @use myData = resource(({ on }) => {\n *      let state = new TrackedObject({ ... });\n *\n *      let controller = new AbortController();\n *\n *      on.cleanup(() => controller.abort());\n *\n *      // because this.url is tracked, anytime url changes,\n *      // this resource will re-run\n *      fetch(this.url, { signal: controller.signal })\n *        .then(response => response.json())\n *        .then(data => {\n *          state.value = data;\n *          // ...\n *        })\n *        .catch(error => {\n *          state.error = error;\n *          // ...\n *        });\n *      // Note that this fetch request could be written async by wrapping in an\n *      // immediately invoked async function, e.g: (async () => {})()\n *\n *\n *      return state;\n *    })\n *  }\n *  ```\n *\n *\n *\n *  Example using strict mode + `<template>` syntax and a template-only component:\n *\n *  ```js\n *  import { resource } from 'ember-resources';\n *  import { TrackedObject } from 'tracked-built-ins';\n *\n *  const load = resource(({ on }) => {\n *    let state = new TrackedObject({});\n *    let controller = new AbortController();\n *\n *    on.cleanup(() => controller.abort());\n *\n *    fetch(this.url, { signal: controller.signal })\n *      .then(response => response.json())\n *      .then(data => {\n *        state.value = data;\n *      })\n *      .catch(error => {\n *        state.error = error;\n *      });\n *\n *    return state;\n *  })\n *\n *  <template>\n *    {{#let (load) as |state|}}\n *      {{#if state.value}}\n *        ...\n *      {{else if state.error}}\n *        {{state.error}}\n *      {{/if}}\n *    {{/let}}\n *  </template>\n *  ```\n */\nexport function resource<Value>(setup: ResourceFunction<Value>): Value;\n\n/**\n * `resource` is an alternative API to the class-based `Resource`.\n * It may provide a single read-only value and provides a way to optionally cleanup.\n *\n * When would you reach for the class-based `Resource`?\n *  - the capabilities of the function-based resource and class-based resource are identical,\n *    with the exception that function-based resources may represent a single value, rather than\n *    an object with properties/methods (the only option with class-based resources)\n *\n * A function-resource\n *  - _must_ return a value.\n *  - cannot, itself, be async - but can interact with promises and update a value\n *\n *  Example using `fetch` + `AbortController`\n *  ```js\n *  import { resource } from 'ember-resources';\n *  import { TrackedObject } from 'tracked-built-ins';\n *  import { tracked } from '@glimmer/tracking';\n *\n *  class Demo {\n *    @tracked url = '...';\n *\n *    myData = resource(this, ({ on }) => {\n *      let state = new TrackedObject({ isResolved: false, isLoading: true, isError: false });\n *\n *      let controller = new AbortController();\n *\n *      on.cleanup(() => controller.abort());\n *\n *      // because this.url is tracked, anytime url changes,\n *      // this resource will re-run\n *      fetch(this.url, { signal: controller.signal })\n *        .then(response => response.json())\n *        .then(data => {\n *          state.value = data;\n *          state.isResolved = true;\n *          state.isLoading = false;\n *          state.isError = false;\n *        })\n *        .catch(error => {\n *          state.error = error;\n *          state.isResolved = true;\n *          state.isLoading = false;\n *          state.isError = true;\n *        });\n *      // Note that this fetch request could be written async by wrapping in an\n *      // immediately invoked async function, e.g: (async () => {})()\n *\n *\n *      return state;\n *    })\n *  }\n *  ```\n */\nexport function resource<Value>(context: object, setup: ResourceFunction<Value>): Value;\n\n/**\n */\nexport function resource<Value>(\n  context: object | ResourceFunction<Value>,\n  setup?: ResourceFunction<Value>,\n): Value | InternalFunctionResourceConfig<Value> | ResourceFn<Value> {\n  if (!setup) {\n    assert(\n      `When using \\`resource\\` with @use, ` +\n        `the first argument to \\`resource\\` must be a function. ` +\n        `Instead, a ${typeof context} was received.`,\n      typeof context === 'function',\n    );\n\n    let internalConfig: InternalFunctionResourceConfig<Value> = {\n      definition: context as ResourceFunction<Value>,\n      type: 'function-based',\n      name: 'Resource',\n      [INTERNAL]: true,\n    };\n\n    /**\n     * Functions have a different identity every time they are defined.\n     * The primary purpose of the `resource` wrapper is to individually\n     * register each function with our helper manager.\n     */\n    setHelperManager(ResourceManagerFactory, internalConfig);\n\n    /**\n     * With only one argument, we have to do a bunch of lying to\n     * TS, because we need a special object to pass to `@use`\n     *\n     * Add secret key to help @use assert against\n     * using vanilla functions as resources without the resource wrapper\n     *\n     */\n    return internalConfig as unknown as ResourceFn<Value>;\n  }\n\n  assert(\n    `Mismatched argument types passed to \\`resource\\`. ` +\n      `Expected the first arg, the context, to be a type of object. This is usually the \\`this\\`. ` +\n      `Received ${typeof context} instead.`,\n    typeof context === 'object',\n  );\n  assert(\n    `Mismatched argument type passed to \\`resource\\`. ` +\n      `Expected the second arg to be a function but instead received ${typeof setup}.`,\n    typeof setup === 'function',\n  );\n\n  let internalConfig: InternalFunctionResourceConfig<Value> = {\n    definition: setup as ResourceFunction<Value>,\n    type: TYPE,\n    name: getDebugName(setup),\n    [INTERNAL]: true,\n  };\n\n  setHelperManager(ResourceManagerFactory, internalConfig);\n\n  return wrapForPlainUsage(context, internalConfig);\n}\n\nfunction getDebugName(obj: object) {\n  if ('name' in obj) {\n    return `Resource Function: ${obj.name}`;\n  }\n\n  return `Resource Function`;\n}\n","import { NodeProp, IterMode, Tree, TreeFragment, Parser, NodeType, NodeSet } from '@lezer/common';\nimport { StateEffect, StateField, Facet, EditorState, countColumn, combineConfig, RangeSet, RangeSetBuilder, Prec } from '@codemirror/state';\nimport { ViewPlugin, logException, EditorView, Decoration, WidgetType, gutter, GutterMarker, Direction } from '@codemirror/view';\nimport { tags, tagHighlighter, highlightTree, styleTags } from '@lezer/highlight';\nimport { StyleModule } from 'style-mod';\n\nvar _a;\n/**\nNode prop stored in a parser's top syntax node to provide the\nfacet that stores language-specific data for that language.\n*/\nconst languageDataProp = /*@__PURE__*/new NodeProp();\n/**\nHelper function to define a facet (to be added to the top syntax\nnode(s) for a language via\n[`languageDataProp`](https://codemirror.net/6/docs/ref/#language.languageDataProp)), that will be\nused to associate language data with the language. You\nprobably only need this when subclassing\n[`Language`](https://codemirror.net/6/docs/ref/#language.Language).\n*/\nfunction defineLanguageFacet(baseData) {\n    return Facet.define({\n        combine: baseData ? values => values.concat(baseData) : undefined\n    });\n}\n/**\nSyntax node prop used to register sublanguages. Should be added to\nthe top level node type for the language.\n*/\nconst sublanguageProp = /*@__PURE__*/new NodeProp();\n/**\nA language object manages parsing and per-language\n[metadata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt). Parse data is\nmanaged as a [Lezer](https://lezer.codemirror.net) tree. The class\ncan be used directly, via the [`LRLanguage`](https://codemirror.net/6/docs/ref/#language.LRLanguage)\nsubclass for [Lezer](https://lezer.codemirror.net/) LR parsers, or\nvia the [`StreamLanguage`](https://codemirror.net/6/docs/ref/#language.StreamLanguage) subclass\nfor stream parsers.\n*/\nclass Language {\n    /**\n    Construct a language object. If you need to invoke this\n    directly, first define a data facet with\n    [`defineLanguageFacet`](https://codemirror.net/6/docs/ref/#language.defineLanguageFacet), and then\n    configure your parser to [attach](https://codemirror.net/6/docs/ref/#language.languageDataProp) it\n    to the language's outer syntax node.\n    */\n    constructor(\n    /**\n    The [language data](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt) facet\n    used for this language.\n    */\n    data, parser, extraExtensions = [], \n    /**\n    A language name.\n    */\n    name = \"\") {\n        this.data = data;\n        this.name = name;\n        // Kludge to define EditorState.tree as a debugging helper,\n        // without the EditorState package actually knowing about\n        // languages and lezer trees.\n        if (!EditorState.prototype.hasOwnProperty(\"tree\"))\n            Object.defineProperty(EditorState.prototype, \"tree\", { get() { return syntaxTree(this); } });\n        this.parser = parser;\n        this.extension = [\n            language.of(this),\n            EditorState.languageData.of((state, pos, side) => {\n                let top = topNodeAt(state, pos, side), data = top.type.prop(languageDataProp);\n                if (!data)\n                    return [];\n                let base = state.facet(data), sub = top.type.prop(sublanguageProp);\n                if (sub) {\n                    let innerNode = top.resolve(pos - top.from, side);\n                    for (let sublang of sub)\n                        if (sublang.test(innerNode, state)) {\n                            let data = state.facet(sublang.facet);\n                            return sublang.type == \"replace\" ? data : data.concat(base);\n                        }\n                }\n                return base;\n            })\n        ].concat(extraExtensions);\n    }\n    /**\n    Query whether this language is active at the given position.\n    */\n    isActiveAt(state, pos, side = -1) {\n        return topNodeAt(state, pos, side).type.prop(languageDataProp) == this.data;\n    }\n    /**\n    Find the document regions that were parsed using this language.\n    The returned regions will _include_ any nested languages rooted\n    in this language, when those exist.\n    */\n    findRegions(state) {\n        let lang = state.facet(language);\n        if ((lang === null || lang === void 0 ? void 0 : lang.data) == this.data)\n            return [{ from: 0, to: state.doc.length }];\n        if (!lang || !lang.allowsNesting)\n            return [];\n        let result = [];\n        let explore = (tree, from) => {\n            if (tree.prop(languageDataProp) == this.data) {\n                result.push({ from, to: from + tree.length });\n                return;\n            }\n            let mount = tree.prop(NodeProp.mounted);\n            if (mount) {\n                if (mount.tree.prop(languageDataProp) == this.data) {\n                    if (mount.overlay)\n                        for (let r of mount.overlay)\n                            result.push({ from: r.from + from, to: r.to + from });\n                    else\n                        result.push({ from: from, to: from + tree.length });\n                    return;\n                }\n                else if (mount.overlay) {\n                    let size = result.length;\n                    explore(mount.tree, mount.overlay[0].from + from);\n                    if (result.length > size)\n                        return;\n                }\n            }\n            for (let i = 0; i < tree.children.length; i++) {\n                let ch = tree.children[i];\n                if (ch instanceof Tree)\n                    explore(ch, tree.positions[i] + from);\n            }\n        };\n        explore(syntaxTree(state), 0);\n        return result;\n    }\n    /**\n    Indicates whether this language allows nested languages. The\n    default implementation returns true.\n    */\n    get allowsNesting() { return true; }\n}\n/**\n@internal\n*/\nLanguage.setState = /*@__PURE__*/StateEffect.define();\nfunction topNodeAt(state, pos, side) {\n    let topLang = state.facet(language), tree = syntaxTree(state).topNode;\n    if (!topLang || topLang.allowsNesting) {\n        for (let node = tree; node; node = node.enter(pos, side, IterMode.ExcludeBuffers | IterMode.EnterBracketed))\n            if (node.type.isTop)\n                tree = node;\n    }\n    return tree;\n}\n/**\nA subclass of [`Language`](https://codemirror.net/6/docs/ref/#language.Language) for use with Lezer\n[LR parsers](https://lezer.codemirror.net/docs/ref#lr.LRParser).\n*/\nclass LRLanguage extends Language {\n    constructor(data, parser, name) {\n        super(data, parser, [], name);\n        this.parser = parser;\n    }\n    /**\n    Define a language from a parser.\n    */\n    static define(spec) {\n        let data = defineLanguageFacet(spec.languageData);\n        return new LRLanguage(data, spec.parser.configure({\n            props: [languageDataProp.add(type => type.isTop ? data : undefined)]\n        }), spec.name);\n    }\n    /**\n    Create a new instance of this language with a reconfigured\n    version of its parser and optionally a new name.\n    */\n    configure(options, name) {\n        return new LRLanguage(this.data, this.parser.configure(options), name || this.name);\n    }\n    get allowsNesting() { return this.parser.hasWrappers(); }\n}\n/**\nGet the syntax tree for a state, which is the current (possibly\nincomplete) parse tree of the active\n[language](https://codemirror.net/6/docs/ref/#language.Language), or the empty tree if there is no\nlanguage available.\n*/\nfunction syntaxTree(state) {\n    let field = state.field(Language.state, false);\n    return field ? field.tree : Tree.empty;\n}\n/**\nTry to get a parse tree that spans at least up to `upto`. The\nmethod will do at most `timeout` milliseconds of work to parse\nup to that point if the tree isn't already available.\n*/\nfunction ensureSyntaxTree(state, upto, timeout = 50) {\n    var _a;\n    let parse = (_a = state.field(Language.state, false)) === null || _a === void 0 ? void 0 : _a.context;\n    if (!parse)\n        return null;\n    let oldVieport = parse.viewport;\n    parse.updateViewport({ from: 0, to: upto });\n    let result = parse.isDone(upto) || parse.work(timeout, upto) ? parse.tree : null;\n    parse.updateViewport(oldVieport);\n    return result;\n}\n/**\nQueries whether there is a full syntax tree available up to the\ngiven document position. If there isn't, the background parse\nprocess _might_ still be working and update the tree further, but\nthere is no guarantee of that—the parser will [stop\nworking](https://codemirror.net/6/docs/ref/#language.syntaxParserRunning) when it has spent a\ncertain amount of time or has moved beyond the visible viewport.\nAlways returns false if no language has been enabled.\n*/\nfunction syntaxTreeAvailable(state, upto = state.doc.length) {\n    var _a;\n    return ((_a = state.field(Language.state, false)) === null || _a === void 0 ? void 0 : _a.context.isDone(upto)) || false;\n}\n/**\nMove parsing forward, and update the editor state afterwards to\nreflect the new tree. Will work for at most `timeout`\nmilliseconds. Returns true if the parser managed get to the given\nposition in that time.\n*/\nfunction forceParsing(view, upto = view.viewport.to, timeout = 100) {\n    let success = ensureSyntaxTree(view.state, upto, timeout);\n    if (success != syntaxTree(view.state))\n        view.dispatch({});\n    return !!success;\n}\n/**\nTells you whether the language parser is planning to do more\nparsing work (in a `requestIdleCallback` pseudo-thread) or has\nstopped running, either because it parsed the entire document,\nbecause it spent too much time and was cut off, or because there\nis no language parser enabled.\n*/\nfunction syntaxParserRunning(view) {\n    var _a;\n    return ((_a = view.plugin(parseWorker)) === null || _a === void 0 ? void 0 : _a.isWorking()) || false;\n}\n/**\nLezer-style\n[`Input`](https://lezer.codemirror.net/docs/ref#common.Input)\nobject for a [`Text`](https://codemirror.net/6/docs/ref/#state.Text) object.\n*/\nclass DocInput {\n    /**\n    Create an input object for the given document.\n    */\n    constructor(doc) {\n        this.doc = doc;\n        this.cursorPos = 0;\n        this.string = \"\";\n        this.cursor = doc.iter();\n    }\n    get length() { return this.doc.length; }\n    syncTo(pos) {\n        this.string = this.cursor.next(pos - this.cursorPos).value;\n        this.cursorPos = pos + this.string.length;\n        return this.cursorPos - this.string.length;\n    }\n    chunk(pos) {\n        this.syncTo(pos);\n        return this.string;\n    }\n    get lineChunks() { return true; }\n    read(from, to) {\n        let stringStart = this.cursorPos - this.string.length;\n        if (from < stringStart || to >= this.cursorPos)\n            return this.doc.sliceString(from, to);\n        else\n            return this.string.slice(from - stringStart, to - stringStart);\n    }\n}\nlet currentContext = null;\n/**\nA parse context provided to parsers working on the editor content.\n*/\nclass ParseContext {\n    constructor(parser, \n    /**\n    The current editor state.\n    */\n    state, \n    /**\n    Tree fragments that can be reused by incremental re-parses.\n    */\n    fragments = [], \n    /**\n    @internal\n    */\n    tree, \n    /**\n    @internal\n    */\n    treeLen, \n    /**\n    The current editor viewport (or some overapproximation\n    thereof). Intended to be used for opportunistically avoiding\n    work (in which case\n    [`skipUntilInView`](https://codemirror.net/6/docs/ref/#language.ParseContext.skipUntilInView)\n    should be called to make sure the parser is restarted when the\n    skipped region becomes visible).\n    */\n    viewport, \n    /**\n    @internal\n    */\n    skipped, \n    /**\n    This is where skipping parsers can register a promise that,\n    when resolved, will schedule a new parse. It is cleared when\n    the parse worker picks up the promise. @internal\n    */\n    scheduleOn) {\n        this.parser = parser;\n        this.state = state;\n        this.fragments = fragments;\n        this.tree = tree;\n        this.treeLen = treeLen;\n        this.viewport = viewport;\n        this.skipped = skipped;\n        this.scheduleOn = scheduleOn;\n        this.parse = null;\n        /**\n        @internal\n        */\n        this.tempSkipped = [];\n    }\n    /**\n    @internal\n    */\n    static create(parser, state, viewport) {\n        return new ParseContext(parser, state, [], Tree.empty, 0, viewport, [], null);\n    }\n    startParse() {\n        return this.parser.startParse(new DocInput(this.state.doc), this.fragments);\n    }\n    /**\n    @internal\n    */\n    work(until, upto) {\n        if (upto != null && upto >= this.state.doc.length)\n            upto = undefined;\n        if (this.tree != Tree.empty && this.isDone(upto !== null && upto !== void 0 ? upto : this.state.doc.length)) {\n            this.takeTree();\n            return true;\n        }\n        return this.withContext(() => {\n            var _a;\n            if (typeof until == \"number\") {\n                let endTime = Date.now() + until;\n                until = () => Date.now() > endTime;\n            }\n            if (!this.parse)\n                this.parse = this.startParse();\n            if (upto != null && (this.parse.stoppedAt == null || this.parse.stoppedAt > upto) &&\n                upto < this.state.doc.length)\n                this.parse.stopAt(upto);\n            for (;;) {\n                let done = this.parse.advance();\n                if (done) {\n                    this.fragments = this.withoutTempSkipped(TreeFragment.addTree(done, this.fragments, this.parse.stoppedAt != null));\n                    this.treeLen = (_a = this.parse.stoppedAt) !== null && _a !== void 0 ? _a : this.state.doc.length;\n                    this.tree = done;\n                    this.parse = null;\n                    if (this.treeLen < (upto !== null && upto !== void 0 ? upto : this.state.doc.length))\n                        this.parse = this.startParse();\n                    else\n                        return true;\n                }\n                if (until())\n                    return false;\n            }\n        });\n    }\n    /**\n    @internal\n    */\n    takeTree() {\n        let pos, tree;\n        if (this.parse && (pos = this.parse.parsedPos) >= this.treeLen) {\n            if (this.parse.stoppedAt == null || this.parse.stoppedAt > pos)\n                this.parse.stopAt(pos);\n            this.withContext(() => { while (!(tree = this.parse.advance())) { } });\n            this.treeLen = pos;\n            this.tree = tree;\n            this.fragments = this.withoutTempSkipped(TreeFragment.addTree(this.tree, this.fragments, true));\n            this.parse = null;\n        }\n    }\n    withContext(f) {\n        let prev = currentContext;\n        currentContext = this;\n        try {\n            return f();\n        }\n        finally {\n            currentContext = prev;\n        }\n    }\n    withoutTempSkipped(fragments) {\n        for (let r; r = this.tempSkipped.pop();)\n            fragments = cutFragments(fragments, r.from, r.to);\n        return fragments;\n    }\n    /**\n    @internal\n    */\n    changes(changes, newState) {\n        let { fragments, tree, treeLen, viewport, skipped } = this;\n        this.takeTree();\n        if (!changes.empty) {\n            let ranges = [];\n            changes.iterChangedRanges((fromA, toA, fromB, toB) => ranges.push({ fromA, toA, fromB, toB }));\n            fragments = TreeFragment.applyChanges(fragments, ranges);\n            tree = Tree.empty;\n            treeLen = 0;\n            viewport = { from: changes.mapPos(viewport.from, -1), to: changes.mapPos(viewport.to, 1) };\n            if (this.skipped.length) {\n                skipped = [];\n                for (let r of this.skipped) {\n                    let from = changes.mapPos(r.from, 1), to = changes.mapPos(r.to, -1);\n                    if (from < to)\n                        skipped.push({ from, to });\n                }\n            }\n        }\n        return new ParseContext(this.parser, newState, fragments, tree, treeLen, viewport, skipped, this.scheduleOn);\n    }\n    /**\n    @internal\n    */\n    updateViewport(viewport) {\n        if (this.viewport.from == viewport.from && this.viewport.to == viewport.to)\n            return false;\n        this.viewport = viewport;\n        let startLen = this.skipped.length;\n        for (let i = 0; i < this.skipped.length; i++) {\n            let { from, to } = this.skipped[i];\n            if (from < viewport.to && to > viewport.from) {\n                this.fragments = cutFragments(this.fragments, from, to);\n                this.skipped.splice(i--, 1);\n            }\n        }\n        if (this.skipped.length >= startLen)\n            return false;\n        this.reset();\n        return true;\n    }\n    /**\n    @internal\n    */\n    reset() {\n        if (this.parse) {\n            this.takeTree();\n            this.parse = null;\n        }\n    }\n    /**\n    Notify the parse scheduler that the given region was skipped\n    because it wasn't in view, and the parse should be restarted\n    when it comes into view.\n    */\n    skipUntilInView(from, to) {\n        this.skipped.push({ from, to });\n    }\n    /**\n    Returns a parser intended to be used as placeholder when\n    asynchronously loading a nested parser. It'll skip its input and\n    mark it as not-really-parsed, so that the next update will parse\n    it again.\n    \n    When `until` is given, a reparse will be scheduled when that\n    promise resolves.\n    */\n    static getSkippingParser(until) {\n        return new class extends Parser {\n            createParse(input, fragments, ranges) {\n                let from = ranges[0].from, to = ranges[ranges.length - 1].to;\n                let parser = {\n                    parsedPos: from,\n                    advance() {\n                        let cx = currentContext;\n                        if (cx) {\n                            for (let r of ranges)\n                                cx.tempSkipped.push(r);\n                            if (until)\n                                cx.scheduleOn = cx.scheduleOn ? Promise.all([cx.scheduleOn, until]) : until;\n                        }\n                        this.parsedPos = to;\n                        return new Tree(NodeType.none, [], [], to - from);\n                    },\n                    stoppedAt: null,\n                    stopAt() { }\n                };\n                return parser;\n            }\n        };\n    }\n    /**\n    @internal\n    */\n    isDone(upto) {\n        upto = Math.min(upto, this.state.doc.length);\n        let frags = this.fragments;\n        return this.treeLen >= upto && frags.length && frags[0].from == 0 && frags[0].to >= upto;\n    }\n    /**\n    Get the context for the current parse, or `null` if no editor\n    parse is in progress.\n    */\n    static get() { return currentContext; }\n}\nfunction cutFragments(fragments, from, to) {\n    return TreeFragment.applyChanges(fragments, [{ fromA: from, toA: to, fromB: from, toB: to }]);\n}\nclass LanguageState {\n    constructor(\n    // A mutable parse state that is used to preserve work done during\n    // the lifetime of a state when moving to the next state.\n    context) {\n        this.context = context;\n        this.tree = context.tree;\n    }\n    apply(tr) {\n        if (!tr.docChanged && this.tree == this.context.tree)\n            return this;\n        let newCx = this.context.changes(tr.changes, tr.state);\n        // If the previous parse wasn't done, go forward only up to its\n        // end position or the end of the viewport, to avoid slowing down\n        // state updates with parse work beyond the viewport.\n        let upto = this.context.treeLen == tr.startState.doc.length ? undefined\n            : Math.max(tr.changes.mapPos(this.context.treeLen), newCx.viewport.to);\n        if (!newCx.work(20 /* Work.Apply */, upto))\n            newCx.takeTree();\n        return new LanguageState(newCx);\n    }\n    static init(state) {\n        let vpTo = Math.min(3000 /* Work.InitViewport */, state.doc.length);\n        let parseState = ParseContext.create(state.facet(language).parser, state, { from: 0, to: vpTo });\n        if (!parseState.work(20 /* Work.Apply */, vpTo))\n            parseState.takeTree();\n        return new LanguageState(parseState);\n    }\n}\nLanguage.state = /*@__PURE__*/StateField.define({\n    create: LanguageState.init,\n    update(value, tr) {\n        for (let e of tr.effects)\n            if (e.is(Language.setState))\n                return e.value;\n        if (tr.startState.facet(language) != tr.state.facet(language))\n            return LanguageState.init(tr.state);\n        return value.apply(tr);\n    }\n});\nlet requestIdle = (callback) => {\n    let timeout = setTimeout(() => callback(), 500 /* Work.MaxPause */);\n    return () => clearTimeout(timeout);\n};\nif (typeof requestIdleCallback != \"undefined\")\n    requestIdle = (callback) => {\n        let idle = -1, timeout = setTimeout(() => {\n            idle = requestIdleCallback(callback, { timeout: 500 /* Work.MaxPause */ - 100 /* Work.MinPause */ });\n        }, 100 /* Work.MinPause */);\n        return () => idle < 0 ? clearTimeout(timeout) : cancelIdleCallback(idle);\n    };\nconst isInputPending = typeof navigator != \"undefined\" && ((_a = navigator.scheduling) === null || _a === void 0 ? void 0 : _a.isInputPending)\n    ? () => navigator.scheduling.isInputPending() : null;\nconst parseWorker = /*@__PURE__*/ViewPlugin.fromClass(class ParseWorker {\n    constructor(view) {\n        this.view = view;\n        this.working = null;\n        this.workScheduled = 0;\n        // End of the current time chunk\n        this.chunkEnd = -1;\n        // Milliseconds of budget left for this chunk\n        this.chunkBudget = -1;\n        this.work = this.work.bind(this);\n        this.scheduleWork();\n    }\n    update(update) {\n        let cx = this.view.state.field(Language.state).context;\n        if (cx.updateViewport(update.view.viewport) || this.view.viewport.to > cx.treeLen)\n            this.scheduleWork();\n        if (update.docChanged || update.selectionSet) {\n            if (this.view.hasFocus)\n                this.chunkBudget += 50 /* Work.ChangeBonus */;\n            this.scheduleWork();\n        }\n        this.checkAsyncSchedule(cx);\n    }\n    scheduleWork() {\n        if (this.working)\n            return;\n        let { state } = this.view, field = state.field(Language.state);\n        if (field.tree != field.context.tree || !field.context.isDone(state.doc.length))\n            this.working = requestIdle(this.work);\n    }\n    work(deadline) {\n        this.working = null;\n        let now = Date.now();\n        if (this.chunkEnd < now && (this.chunkEnd < 0 || this.view.hasFocus)) { // Start a new chunk\n            this.chunkEnd = now + 30000 /* Work.ChunkTime */;\n            this.chunkBudget = 3000 /* Work.ChunkBudget */;\n        }\n        if (this.chunkBudget <= 0)\n            return; // No more budget\n        let { state, viewport: { to: vpTo } } = this.view, field = state.field(Language.state);\n        if (field.tree == field.context.tree && field.context.isDone(vpTo + 100000 /* Work.MaxParseAhead */))\n            return;\n        let endTime = Date.now() + Math.min(this.chunkBudget, 100 /* Work.Slice */, deadline && !isInputPending ? Math.max(25 /* Work.MinSlice */, deadline.timeRemaining() - 5) : 1e9);\n        let viewportFirst = field.context.treeLen < vpTo && state.doc.length > vpTo + 1000;\n        let done = field.context.work(() => {\n            return isInputPending && isInputPending() || Date.now() > endTime;\n        }, vpTo + (viewportFirst ? 0 : 100000 /* Work.MaxParseAhead */));\n        this.chunkBudget -= Date.now() - now;\n        if (done || this.chunkBudget <= 0) {\n            field.context.takeTree();\n            this.view.dispatch({ effects: Language.setState.of(new LanguageState(field.context)) });\n        }\n        if (this.chunkBudget > 0 && !(done && !viewportFirst))\n            this.scheduleWork();\n        this.checkAsyncSchedule(field.context);\n    }\n    checkAsyncSchedule(cx) {\n        if (cx.scheduleOn) {\n            this.workScheduled++;\n            cx.scheduleOn\n                .then(() => this.scheduleWork())\n                .catch(err => logException(this.view.state, err))\n                .then(() => this.workScheduled--);\n            cx.scheduleOn = null;\n        }\n    }\n    destroy() {\n        if (this.working)\n            this.working();\n    }\n    isWorking() {\n        return !!(this.working || this.workScheduled > 0);\n    }\n}, {\n    eventHandlers: { focus() { this.scheduleWork(); } }\n});\n/**\nThe facet used to associate a language with an editor state. Used\nby `Language` object's `extension` property (so you don't need to\nmanually wrap your languages in this). Can be used to access the\ncurrent language on a state.\n*/\nconst language = /*@__PURE__*/Facet.define({\n    combine(languages) { return languages.length ? languages[0] : null; },\n    enables: language => [\n        Language.state,\n        parseWorker,\n        EditorView.contentAttributes.compute([language], state => {\n            let lang = state.facet(language);\n            return lang && lang.name ? { \"data-language\": lang.name } : {};\n        })\n    ]\n});\n/**\nThis class bundles a [language](https://codemirror.net/6/docs/ref/#language.Language) with an\noptional set of supporting extensions. Language packages are\nencouraged to export a function that optionally takes a\nconfiguration object and returns a `LanguageSupport` instance, as\nthe main way for client code to use the package.\n*/\nclass LanguageSupport {\n    /**\n    Create a language support object.\n    */\n    constructor(\n    /**\n    The language object.\n    */\n    language, \n    /**\n    An optional set of supporting extensions. When nesting a\n    language in another language, the outer language is encouraged\n    to include the supporting extensions for its inner languages\n    in its own set of support extensions.\n    */\n    support = []) {\n        this.language = language;\n        this.support = support;\n        this.extension = [language, support];\n    }\n}\n/**\nLanguage descriptions are used to store metadata about languages\nand to dynamically load them. Their main role is finding the\nappropriate language for a filename or dynamically loading nested\nparsers.\n*/\nclass LanguageDescription {\n    constructor(\n    /**\n    The name of this language.\n    */\n    name, \n    /**\n    Alternative names for the mode (lowercased, includes `this.name`).\n    */\n    alias, \n    /**\n    File extensions associated with this language.\n    */\n    extensions, \n    /**\n    Optional filename pattern that should be associated with this\n    language.\n    */\n    filename, loadFunc, \n    /**\n    If the language has been loaded, this will hold its value.\n    */\n    support = undefined) {\n        this.name = name;\n        this.alias = alias;\n        this.extensions = extensions;\n        this.filename = filename;\n        this.loadFunc = loadFunc;\n        this.support = support;\n        this.loading = null;\n    }\n    /**\n    Start loading the the language. Will return a promise that\n    resolves to a [`LanguageSupport`](https://codemirror.net/6/docs/ref/#language.LanguageSupport)\n    object when the language successfully loads.\n    */\n    load() {\n        return this.loading || (this.loading = this.loadFunc().then(support => this.support = support, err => { this.loading = null; throw err; }));\n    }\n    /**\n    Create a language description.\n    */\n    static of(spec) {\n        let { load, support } = spec;\n        if (!load) {\n            if (!support)\n                throw new RangeError(\"Must pass either 'load' or 'support' to LanguageDescription.of\");\n            load = () => Promise.resolve(support);\n        }\n        return new LanguageDescription(spec.name, (spec.alias || []).concat(spec.name).map(s => s.toLowerCase()), spec.extensions || [], spec.filename, load, support);\n    }\n    /**\n    Look for a language in the given array of descriptions that\n    matches the filename. Will first match\n    [`filename`](https://codemirror.net/6/docs/ref/#language.LanguageDescription.filename) patterns,\n    and then [extensions](https://codemirror.net/6/docs/ref/#language.LanguageDescription.extensions),\n    and return the first language that matches.\n    */\n    static matchFilename(descs, filename) {\n        for (let d of descs)\n            if (d.filename && d.filename.test(filename))\n                return d;\n        let ext = /\\.([^.]+)$/.exec(filename);\n        if (ext)\n            for (let d of descs)\n                if (d.extensions.indexOf(ext[1]) > -1)\n                    return d;\n        return null;\n    }\n    /**\n    Look for a language whose name or alias matches the the given\n    name (case-insensitively). If `fuzzy` is true, and no direct\n    matchs is found, this'll also search for a language whose name\n    or alias occurs in the string (for names shorter than three\n    characters, only when surrounded by non-word characters).\n    */\n    static matchLanguageName(descs, name, fuzzy = true) {\n        name = name.toLowerCase();\n        for (let d of descs)\n            if (d.alias.some(a => a == name))\n                return d;\n        if (fuzzy)\n            for (let d of descs)\n                for (let a of d.alias) {\n                    let found = name.indexOf(a);\n                    if (found > -1 && (a.length > 2 || !/\\w/.test(name[found - 1]) && !/\\w/.test(name[found + a.length])))\n                        return d;\n                }\n        return null;\n    }\n}\n\n/**\nFacet that defines a way to provide a function that computes the\nappropriate indentation depth, as a column number (see\n[`indentString`](https://codemirror.net/6/docs/ref/#language.indentString)), at the start of a given\nline. A return value of `null` indicates no indentation can be\ndetermined, and the line should inherit the indentation of the one\nabove it. A return value of `undefined` defers to the next indent\nservice.\n*/\nconst indentService = /*@__PURE__*/Facet.define();\n/**\nFacet for overriding the unit by which indentation happens. Should\nbe a string consisting entirely of the same whitespace character.\nWhen not set, this defaults to 2 spaces.\n*/\nconst indentUnit = /*@__PURE__*/Facet.define({\n    combine: values => {\n        if (!values.length)\n            return \"  \";\n        let unit = values[0];\n        if (!unit || /\\S/.test(unit) || Array.from(unit).some(e => e != unit[0]))\n            throw new Error(\"Invalid indent unit: \" + JSON.stringify(values[0]));\n        return unit;\n    }\n});\n/**\nReturn the _column width_ of an indent unit in the state.\nDetermined by the [`indentUnit`](https://codemirror.net/6/docs/ref/#language.indentUnit)\nfacet, and [`tabSize`](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize) when that\ncontains tabs.\n*/\nfunction getIndentUnit(state) {\n    let unit = state.facet(indentUnit);\n    return unit.charCodeAt(0) == 9 ? state.tabSize * unit.length : unit.length;\n}\n/**\nCreate an indentation string that covers columns 0 to `cols`.\nWill use tabs for as much of the columns as possible when the\n[`indentUnit`](https://codemirror.net/6/docs/ref/#language.indentUnit) facet contains\ntabs.\n*/\nfunction indentString(state, cols) {\n    let result = \"\", ts = state.tabSize, ch = state.facet(indentUnit)[0];\n    if (ch == \"\\t\") {\n        while (cols >= ts) {\n            result += \"\\t\";\n            cols -= ts;\n        }\n        ch = \" \";\n    }\n    for (let i = 0; i < cols; i++)\n        result += ch;\n    return result;\n}\n/**\nGet the indentation, as a column number, at the given position.\nWill first consult any [indent services](https://codemirror.net/6/docs/ref/#language.indentService)\nthat are registered, and if none of those return an indentation,\nthis will check the syntax tree for the [indent node\nprop](https://codemirror.net/6/docs/ref/#language.indentNodeProp) and use that if found. Returns a\nnumber when an indentation could be determined, and null\notherwise.\n*/\nfunction getIndentation(context, pos) {\n    if (context instanceof EditorState)\n        context = new IndentContext(context);\n    for (let service of context.state.facet(indentService)) {\n        let result = service(context, pos);\n        if (result !== undefined)\n            return result;\n    }\n    let tree = syntaxTree(context.state);\n    return tree.length >= pos ? syntaxIndentation(context, tree, pos) : null;\n}\n/**\nCreate a change set that auto-indents all lines touched by the\ngiven document range.\n*/\nfunction indentRange(state, from, to) {\n    let updated = Object.create(null);\n    let context = new IndentContext(state, { overrideIndentation: start => { var _a; return (_a = updated[start]) !== null && _a !== void 0 ? _a : -1; } });\n    let changes = [];\n    for (let pos = from; pos <= to;) {\n        let line = state.doc.lineAt(pos);\n        pos = line.to + 1;\n        let indent = getIndentation(context, line.from);\n        if (indent == null)\n            continue;\n        if (!/\\S/.test(line.text))\n            indent = 0;\n        let cur = /^\\s*/.exec(line.text)[0];\n        let norm = indentString(state, indent);\n        if (cur != norm) {\n            updated[line.from] = indent;\n            changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n        }\n    }\n    return state.changes(changes);\n}\n/**\nIndentation contexts are used when calling [indentation\nservices](https://codemirror.net/6/docs/ref/#language.indentService). They provide helper utilities\nuseful in indentation logic, and can selectively override the\nindentation reported for some lines.\n*/\nclass IndentContext {\n    /**\n    Create an indent context.\n    */\n    constructor(\n    /**\n    The editor state.\n    */\n    state, \n    /**\n    @internal\n    */\n    options = {}) {\n        this.state = state;\n        this.options = options;\n        this.unit = getIndentUnit(state);\n    }\n    /**\n    Get a description of the line at the given position, taking\n    [simulated line\n    breaks](https://codemirror.net/6/docs/ref/#language.IndentContext.constructor^options.simulateBreak)\n    into account. If there is such a break at `pos`, the `bias`\n    argument determines whether the part of the line line before or\n    after the break is used.\n    */\n    lineAt(pos, bias = 1) {\n        let line = this.state.doc.lineAt(pos);\n        let { simulateBreak, simulateDoubleBreak } = this.options;\n        if (simulateBreak != null && simulateBreak >= line.from && simulateBreak <= line.to) {\n            if (simulateDoubleBreak && simulateBreak == pos)\n                return { text: \"\", from: pos };\n            else if (bias < 0 ? simulateBreak < pos : simulateBreak <= pos)\n                return { text: line.text.slice(simulateBreak - line.from), from: simulateBreak };\n            else\n                return { text: line.text.slice(0, simulateBreak - line.from), from: line.from };\n        }\n        return line;\n    }\n    /**\n    Get the text directly after `pos`, either the entire line\n    or the next 100 characters, whichever is shorter.\n    */\n    textAfterPos(pos, bias = 1) {\n        if (this.options.simulateDoubleBreak && pos == this.options.simulateBreak)\n            return \"\";\n        let { text, from } = this.lineAt(pos, bias);\n        return text.slice(pos - from, Math.min(text.length, pos + 100 - from));\n    }\n    /**\n    Find the column for the given position.\n    */\n    column(pos, bias = 1) {\n        let { text, from } = this.lineAt(pos, bias);\n        let result = this.countColumn(text, pos - from);\n        let override = this.options.overrideIndentation ? this.options.overrideIndentation(from) : -1;\n        if (override > -1)\n            result += override - this.countColumn(text, text.search(/\\S|$/));\n        return result;\n    }\n    /**\n    Find the column position (taking tabs into account) of the given\n    position in the given string.\n    */\n    countColumn(line, pos = line.length) {\n        return countColumn(line, this.state.tabSize, pos);\n    }\n    /**\n    Find the indentation column of the line at the given point.\n    */\n    lineIndent(pos, bias = 1) {\n        let { text, from } = this.lineAt(pos, bias);\n        let override = this.options.overrideIndentation;\n        if (override) {\n            let overriden = override(from);\n            if (overriden > -1)\n                return overriden;\n        }\n        return this.countColumn(text, text.search(/\\S|$/));\n    }\n    /**\n    Returns the [simulated line\n    break](https://codemirror.net/6/docs/ref/#language.IndentContext.constructor^options.simulateBreak)\n    for this context, if any.\n    */\n    get simulatedBreak() {\n        return this.options.simulateBreak || null;\n    }\n}\n/**\nA syntax tree node prop used to associate indentation strategies\nwith node types. Such a strategy is a function from an indentation\ncontext to a column number (see also\n[`indentString`](https://codemirror.net/6/docs/ref/#language.indentString)) or null, where null\nindicates that no definitive indentation can be determined.\n*/\nconst indentNodeProp = /*@__PURE__*/new NodeProp();\n// Compute the indentation for a given position from the syntax tree.\nfunction syntaxIndentation(cx, ast, pos) {\n    let stack = ast.resolveStack(pos);\n    let inner = ast.resolveInner(pos, -1).resolve(pos, 0).enterUnfinishedNodesBefore(pos);\n    if (inner != stack.node) {\n        let add = [];\n        for (let cur = inner; cur && !(cur.from < stack.node.from || cur.to > stack.node.to ||\n            cur.from == stack.node.from && cur.type == stack.node.type); cur = cur.parent)\n            add.push(cur);\n        for (let i = add.length - 1; i >= 0; i--)\n            stack = { node: add[i], next: stack };\n    }\n    return indentFor(stack, cx, pos);\n}\nfunction indentFor(stack, cx, pos) {\n    for (let cur = stack; cur; cur = cur.next) {\n        let strategy = indentStrategy(cur.node);\n        if (strategy)\n            return strategy(TreeIndentContext.create(cx, pos, cur));\n    }\n    return 0;\n}\nfunction ignoreClosed(cx) {\n    return cx.pos == cx.options.simulateBreak && cx.options.simulateDoubleBreak;\n}\nfunction indentStrategy(tree) {\n    let strategy = tree.type.prop(indentNodeProp);\n    if (strategy)\n        return strategy;\n    let first = tree.firstChild, close;\n    if (first && (close = first.type.prop(NodeProp.closedBy))) {\n        let last = tree.lastChild, closed = last && close.indexOf(last.name) > -1;\n        return cx => delimitedStrategy(cx, true, 1, undefined, closed && !ignoreClosed(cx) ? last.from : undefined);\n    }\n    return tree.parent == null ? topIndent : null;\n}\nfunction topIndent() { return 0; }\n/**\nObjects of this type provide context information and helper\nmethods to indentation functions registered on syntax nodes.\n*/\nclass TreeIndentContext extends IndentContext {\n    constructor(base, \n    /**\n    The position at which indentation is being computed.\n    */\n    pos, \n    /**\n    @internal\n    */\n    context) {\n        super(base.state, base.options);\n        this.base = base;\n        this.pos = pos;\n        this.context = context;\n    }\n    /**\n    The syntax tree node to which the indentation strategy\n    applies.\n    */\n    get node() { return this.context.node; }\n    /**\n    @internal\n    */\n    static create(base, pos, context) {\n        return new TreeIndentContext(base, pos, context);\n    }\n    /**\n    Get the text directly after `this.pos`, either the entire line\n    or the next 100 characters, whichever is shorter.\n    */\n    get textAfter() {\n        return this.textAfterPos(this.pos);\n    }\n    /**\n    Get the indentation at the reference line for `this.node`, which\n    is the line on which it starts, unless there is a node that is\n    _not_ a parent of this node covering the start of that line. If\n    so, the line at the start of that node is tried, again skipping\n    on if it is covered by another such node.\n    */\n    get baseIndent() {\n        return this.baseIndentFor(this.node);\n    }\n    /**\n    Get the indentation for the reference line of the given node\n    (see [`baseIndent`](https://codemirror.net/6/docs/ref/#language.TreeIndentContext.baseIndent)).\n    */\n    baseIndentFor(node) {\n        let line = this.state.doc.lineAt(node.from);\n        // Skip line starts that are covered by a sibling (or cousin, etc)\n        for (;;) {\n            let atBreak = node.resolve(line.from);\n            while (atBreak.parent && atBreak.parent.from == atBreak.from)\n                atBreak = atBreak.parent;\n            if (isParent(atBreak, node))\n                break;\n            line = this.state.doc.lineAt(atBreak.from);\n        }\n        return this.lineIndent(line.from);\n    }\n    /**\n    Continue looking for indentations in the node's parent nodes,\n    and return the result of that.\n    */\n    continue() {\n        return indentFor(this.context.next, this.base, this.pos);\n    }\n}\nfunction isParent(parent, of) {\n    for (let cur = of; cur; cur = cur.parent)\n        if (parent == cur)\n            return true;\n    return false;\n}\n// Check whether a delimited node is aligned (meaning there are\n// non-skipped nodes on the same line as the opening delimiter). And\n// if so, return the opening token.\nfunction bracketedAligned(context) {\n    let tree = context.node;\n    let openToken = tree.childAfter(tree.from), last = tree.lastChild;\n    if (!openToken)\n        return null;\n    let sim = context.options.simulateBreak;\n    let openLine = context.state.doc.lineAt(openToken.from);\n    let lineEnd = sim == null || sim <= openLine.from ? openLine.to : Math.min(openLine.to, sim);\n    for (let pos = openToken.to;;) {\n        let next = tree.childAfter(pos);\n        if (!next || next == last)\n            return null;\n        if (!next.type.isSkipped) {\n            if (next.from >= lineEnd)\n                return null;\n            let space = /^ */.exec(openLine.text.slice(openToken.to - openLine.from))[0].length;\n            return { from: openToken.from, to: openToken.to + space };\n        }\n        pos = next.to;\n    }\n}\n/**\nAn indentation strategy for delimited (usually bracketed) nodes.\nWill, by default, indent one unit more than the parent's base\nindent unless the line starts with a closing token. When `align`\nis true and there are non-skipped nodes on the node's opening\nline, the content of the node will be aligned with the end of the\nopening node, like this:\n\n    foo(bar,\n        baz)\n*/\nfunction delimitedIndent({ closing, align = true, units = 1 }) {\n    return (context) => delimitedStrategy(context, align, units, closing);\n}\nfunction delimitedStrategy(context, align, units, closing, closedAt) {\n    let after = context.textAfter, space = after.match(/^\\s*/)[0].length;\n    let closed = closing && after.slice(space, space + closing.length) == closing || closedAt == context.pos + space;\n    let aligned = align ? bracketedAligned(context) : null;\n    if (aligned)\n        return closed ? context.column(aligned.from) : context.column(aligned.to);\n    return context.baseIndent + (closed ? 0 : context.unit * units);\n}\n/**\nAn indentation strategy that aligns a node's content to its base\nindentation.\n*/\nconst flatIndent = (context) => context.baseIndent;\n/**\nCreates an indentation strategy that, by default, indents\ncontinued lines one unit more than the node's base indentation.\nYou can provide `except` to prevent indentation of lines that\nmatch a pattern (for example `/^else\\b/` in `if`/`else`\nconstructs), and you can change the amount of units used with the\n`units` option.\n*/\nfunction continuedIndent({ except, units = 1 } = {}) {\n    return (context) => {\n        let matchExcept = except && except.test(context.textAfter);\n        return context.baseIndent + (matchExcept ? 0 : units * context.unit);\n    };\n}\nconst DontIndentBeyond = 200;\n/**\nEnables reindentation on input. When a language defines an\n`indentOnInput` field in its [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt), which must hold a regular\nexpression, the line at the cursor will be reindented whenever new\ntext is typed and the input from the start of the line up to the\ncursor matches that regexp.\n\nTo avoid unneccesary reindents, it is recommended to start the\nregexp with `^` (usually followed by `\\s*`), and end it with `$`.\nFor example, `/^\\s*\\}$/` will reindent when a closing brace is\nadded at the start of a line.\n*/\nfunction indentOnInput() {\n    return EditorState.transactionFilter.of(tr => {\n        if (!tr.docChanged || !tr.isUserEvent(\"input.type\") && !tr.isUserEvent(\"input.complete\"))\n            return tr;\n        let rules = tr.startState.languageDataAt(\"indentOnInput\", tr.startState.selection.main.head);\n        if (!rules.length)\n            return tr;\n        let doc = tr.newDoc, { head } = tr.newSelection.main, line = doc.lineAt(head);\n        if (head > line.from + DontIndentBeyond)\n            return tr;\n        let lineStart = doc.sliceString(line.from, head);\n        if (!rules.some(r => r.test(lineStart)))\n            return tr;\n        let { state } = tr, last = -1, changes = [];\n        for (let { head } of state.selection.ranges) {\n            let line = state.doc.lineAt(head);\n            if (line.from == last)\n                continue;\n            last = line.from;\n            let indent = getIndentation(state, line.from);\n            if (indent == null)\n                continue;\n            let cur = /^\\s*/.exec(line.text)[0];\n            let norm = indentString(state, indent);\n            if (cur != norm)\n                changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n        }\n        return changes.length ? [tr, { changes, sequential: true }] : tr;\n    });\n}\n\n/**\nA facet that registers a code folding service. When called with\nthe extent of a line, such a function should return a foldable\nrange that starts on that line (but continues beyond it), if one\ncan be found.\n*/\nconst foldService = /*@__PURE__*/Facet.define();\n/**\nThis node prop is used to associate folding information with\nsyntax node types. Given a syntax node, it should check whether\nthat tree is foldable and return the range that can be collapsed\nwhen it is.\n*/\nconst foldNodeProp = /*@__PURE__*/new NodeProp();\n/**\n[Fold](https://codemirror.net/6/docs/ref/#language.foldNodeProp) function that folds everything but\nthe first and the last child of a syntax node. Useful for nodes\nthat start and end with delimiters.\n*/\nfunction foldInside(node) {\n    let first = node.firstChild, last = node.lastChild;\n    return first && first.to < last.from ? { from: first.to, to: last.type.isError ? node.to : last.from } : null;\n}\nfunction syntaxFolding(state, start, end) {\n    let tree = syntaxTree(state);\n    if (tree.length < end)\n        return null;\n    let stack = tree.resolveStack(end, 1);\n    let found = null;\n    for (let iter = stack; iter; iter = iter.next) {\n        let cur = iter.node;\n        if (cur.to <= end || cur.from > end)\n            continue;\n        if (found && cur.from < start)\n            break;\n        let prop = cur.type.prop(foldNodeProp);\n        if (prop && (cur.to < tree.length - 50 || tree.length == state.doc.length || !isUnfinished(cur))) {\n            let value = prop(cur, state);\n            if (value && value.from <= end && value.from >= start && value.to > end)\n                found = value;\n        }\n    }\n    return found;\n}\nfunction isUnfinished(node) {\n    let ch = node.lastChild;\n    return ch && ch.to == node.to && ch.type.isError;\n}\n/**\nCheck whether the given line is foldable. First asks any fold\nservices registered through\n[`foldService`](https://codemirror.net/6/docs/ref/#language.foldService), and if none of them return\na result, tries to query the [fold node\nprop](https://codemirror.net/6/docs/ref/#language.foldNodeProp) of syntax nodes that cover the end\nof the line.\n*/\nfunction foldable(state, lineStart, lineEnd) {\n    for (let service of state.facet(foldService)) {\n        let result = service(state, lineStart, lineEnd);\n        if (result)\n            return result;\n    }\n    return syntaxFolding(state, lineStart, lineEnd);\n}\nfunction mapRange(range, mapping) {\n    let from = mapping.mapPos(range.from, 1), to = mapping.mapPos(range.to, -1);\n    return from >= to ? undefined : { from, to };\n}\n/**\nState effect that can be attached to a transaction to fold the\ngiven range. (You probably only need this in exceptional\ncircumstances—usually you'll just want to let\n[`foldCode`](https://codemirror.net/6/docs/ref/#language.foldCode) and the [fold\ngutter](https://codemirror.net/6/docs/ref/#language.foldGutter) create the transactions.)\n*/\nconst foldEffect = /*@__PURE__*/StateEffect.define({ map: mapRange });\n/**\nState effect that unfolds the given range (if it was folded).\n*/\nconst unfoldEffect = /*@__PURE__*/StateEffect.define({ map: mapRange });\nfunction selectedLines(view) {\n    let lines = [];\n    for (let { head } of view.state.selection.ranges) {\n        if (lines.some(l => l.from <= head && l.to >= head))\n            continue;\n        lines.push(view.lineBlockAt(head));\n    }\n    return lines;\n}\n/**\nThe state field that stores the folded ranges (as a [decoration\nset](https://codemirror.net/6/docs/ref/#view.DecorationSet)). Can be passed to\n[`EditorState.toJSON`](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) and\n[`fromJSON`](https://codemirror.net/6/docs/ref/#state.EditorState^fromJSON) to serialize the fold\nstate.\n*/\nconst foldState = /*@__PURE__*/StateField.define({\n    create() {\n        return Decoration.none;\n    },\n    update(folded, tr) {\n        if (tr.isUserEvent(\"delete\"))\n            tr.changes.iterChangedRanges((fromA, toA) => folded = clearTouchedFolds(folded, fromA, toA));\n        folded = folded.map(tr.changes);\n        let rangesToFold = [];\n        for (let e of tr.effects) {\n            if (e.is(foldEffect) && !foldExists(folded, e.value.from, e.value.to)) {\n                rangesToFold.push(e.value);\n            }\n            else if (e.is(unfoldEffect)) {\n                folded = folded.update({ filter: (from, to) => e.value.from != from || e.value.to != to,\n                    filterFrom: e.value.from, filterTo: e.value.to });\n            }\n        }\n        if (rangesToFold.length) {\n            let { preparePlaceholder } = tr.state.facet(foldConfig);\n            let decorations = rangesToFold.map(value => {\n                let widget = !preparePlaceholder ? foldWidget :\n                    Decoration.replace({ widget: new PreparedFoldWidget(preparePlaceholder(tr.state, value)) });\n                return widget.range(value.from, value.to);\n            });\n            folded = folded.update({ add: decorations });\n        }\n        // Clear folded ranges that cover the selection head\n        if (tr.selection)\n            folded = clearTouchedFolds(folded, tr.selection.main.head);\n        return folded;\n    },\n    provide: f => EditorView.decorations.from(f),\n    toJSON(folded, state) {\n        let ranges = [];\n        folded.between(0, state.doc.length, (from, to) => { ranges.push(from, to); });\n        return ranges;\n    },\n    fromJSON(value) {\n        if (!Array.isArray(value) || value.length % 2)\n            throw new RangeError(\"Invalid JSON for fold state\");\n        let ranges = [];\n        for (let i = 0; i < value.length;) {\n            let from = value[i++], to = value[i++];\n            if (typeof from != \"number\" || typeof to != \"number\")\n                throw new RangeError(\"Invalid JSON for fold state\");\n            ranges.push(foldWidget.range(from, to));\n        }\n        return Decoration.set(ranges, true);\n    }\n});\nfunction clearTouchedFolds(folded, from, to = from) {\n    let touched = false;\n    folded.between(from, to, (a, b) => { if (a < to && b > from)\n        touched = true; });\n    return !touched ? folded : folded.update({\n        filterFrom: from,\n        filterTo: to,\n        filter: (a, b) => a >= to || b <= from\n    });\n}\n/**\nGet a [range set](https://codemirror.net/6/docs/ref/#state.RangeSet) containing the folded ranges\nin the given state.\n*/\nfunction foldedRanges(state) {\n    return state.field(foldState, false) || RangeSet.empty;\n}\nfunction findFold(state, from, to) {\n    var _a;\n    let found = null;\n    (_a = state.field(foldState, false)) === null || _a === void 0 ? void 0 : _a.between(from, to, (from, to) => {\n        if (!found || found.from > from)\n            found = { from, to };\n    });\n    return found;\n}\nfunction foldExists(folded, from, to) {\n    let found = false;\n    folded.between(from, from, (a, b) => { if (a == from && b == to)\n        found = true; });\n    return found;\n}\nfunction maybeEnable(state, other) {\n    return state.field(foldState, false) ? other : other.concat(StateEffect.appendConfig.of(codeFolding()));\n}\n/**\nFold the lines that are selected, if possible.\n*/\nconst foldCode = view => {\n    for (let line of selectedLines(view)) {\n        let range = foldable(view.state, line.from, line.to);\n        if (range) {\n            view.dispatch({ effects: maybeEnable(view.state, [foldEffect.of(range), announceFold(view, range)]) });\n            return true;\n        }\n    }\n    return false;\n};\n/**\nUnfold folded ranges on selected lines.\n*/\nconst unfoldCode = view => {\n    if (!view.state.field(foldState, false))\n        return false;\n    let effects = [];\n    for (let line of selectedLines(view)) {\n        let folded = findFold(view.state, line.from, line.to);\n        if (folded)\n            effects.push(unfoldEffect.of(folded), announceFold(view, folded, false));\n    }\n    if (effects.length)\n        view.dispatch({ effects });\n    return effects.length > 0;\n};\nfunction announceFold(view, range, fold = true) {\n    let lineFrom = view.state.doc.lineAt(range.from).number, lineTo = view.state.doc.lineAt(range.to).number;\n    return EditorView.announce.of(`${view.state.phrase(fold ? \"Folded lines\" : \"Unfolded lines\")} ${lineFrom} ${view.state.phrase(\"to\")} ${lineTo}.`);\n}\n/**\nFold all top-level foldable ranges. Note that, in most cases,\nfolding information will depend on the [syntax\ntree](https://codemirror.net/6/docs/ref/#language.syntaxTree), and folding everything may not work\nreliably when the document hasn't been fully parsed (either\nbecause the editor state was only just initialized, or because the\ndocument is so big that the parser decided not to parse it\nentirely).\n*/\nconst foldAll = view => {\n    let { state } = view, effects = [];\n    for (let pos = 0; pos < state.doc.length;) {\n        let line = view.lineBlockAt(pos), range = foldable(state, line.from, line.to);\n        if (range)\n            effects.push(foldEffect.of(range));\n        pos = (range ? view.lineBlockAt(range.to) : line).to + 1;\n    }\n    if (effects.length)\n        view.dispatch({ effects: maybeEnable(view.state, effects) });\n    return !!effects.length;\n};\n/**\nUnfold all folded code.\n*/\nconst unfoldAll = view => {\n    let field = view.state.field(foldState, false);\n    if (!field || !field.size)\n        return false;\n    let effects = [];\n    field.between(0, view.state.doc.length, (from, to) => { effects.push(unfoldEffect.of({ from, to })); });\n    view.dispatch({ effects });\n    return true;\n};\n// Find the foldable region containing the given line, if one exists\nfunction foldableContainer(view, lineBlock) {\n    // Look backwards through line blocks until we find a foldable region that\n    // intersects with the line\n    for (let line = lineBlock;;) {\n        let foldableRegion = foldable(view.state, line.from, line.to);\n        if (foldableRegion && foldableRegion.to > lineBlock.from)\n            return foldableRegion;\n        if (!line.from)\n            return null;\n        line = view.lineBlockAt(line.from - 1);\n    }\n}\n/**\nToggle folding at cursors. Unfolds if there is an existing fold\nstarting in that line, tries to find a foldable range around it\notherwise.\n*/\nconst toggleFold = (view) => {\n    let effects = [];\n    for (let line of selectedLines(view)) {\n        let folded = findFold(view.state, line.from, line.to);\n        if (folded) {\n            effects.push(unfoldEffect.of(folded), announceFold(view, folded, false));\n        }\n        else {\n            let foldRange = foldableContainer(view, line);\n            if (foldRange)\n                effects.push(foldEffect.of(foldRange), announceFold(view, foldRange));\n        }\n    }\n    if (effects.length > 0)\n        view.dispatch({ effects: maybeEnable(view.state, effects) });\n    return !!effects.length;\n};\n/**\nDefault fold-related key bindings.\n\n - Ctrl-Shift-[ (Cmd-Alt-[ on macOS): [`foldCode`](https://codemirror.net/6/docs/ref/#language.foldCode).\n - Ctrl-Shift-] (Cmd-Alt-] on macOS): [`unfoldCode`](https://codemirror.net/6/docs/ref/#language.unfoldCode).\n - Ctrl-Alt-[: [`foldAll`](https://codemirror.net/6/docs/ref/#language.foldAll).\n - Ctrl-Alt-]: [`unfoldAll`](https://codemirror.net/6/docs/ref/#language.unfoldAll).\n*/\nconst foldKeymap = [\n    { key: \"Ctrl-Shift-[\", mac: \"Cmd-Alt-[\", run: foldCode },\n    { key: \"Ctrl-Shift-]\", mac: \"Cmd-Alt-]\", run: unfoldCode },\n    { key: \"Ctrl-Alt-[\", run: foldAll },\n    { key: \"Ctrl-Alt-]\", run: unfoldAll }\n];\nconst defaultConfig = {\n    placeholderDOM: null,\n    preparePlaceholder: null,\n    placeholderText: \"…\"\n};\nconst foldConfig = /*@__PURE__*/Facet.define({\n    combine(values) { return combineConfig(values, defaultConfig); }\n});\n/**\nCreate an extension that configures code folding.\n*/\nfunction codeFolding(config) {\n    let result = [foldState, baseTheme$1];\n    if (config)\n        result.push(foldConfig.of(config));\n    return result;\n}\nfunction widgetToDOM(view, prepared) {\n    let { state } = view, conf = state.facet(foldConfig);\n    let onclick = (event) => {\n        let line = view.lineBlockAt(view.posAtDOM(event.target));\n        let folded = findFold(view.state, line.from, line.to);\n        if (folded)\n            view.dispatch({ effects: unfoldEffect.of(folded) });\n        event.preventDefault();\n    };\n    if (conf.placeholderDOM)\n        return conf.placeholderDOM(view, onclick, prepared);\n    let element = document.createElement(\"span\");\n    element.textContent = conf.placeholderText;\n    element.setAttribute(\"aria-label\", state.phrase(\"folded code\"));\n    element.title = state.phrase(\"unfold\");\n    element.className = \"cm-foldPlaceholder\";\n    element.onclick = onclick;\n    return element;\n}\nconst foldWidget = /*@__PURE__*/Decoration.replace({ widget: /*@__PURE__*/new class extends WidgetType {\n        toDOM(view) { return widgetToDOM(view, null); }\n    } });\nclass PreparedFoldWidget extends WidgetType {\n    constructor(value) {\n        super();\n        this.value = value;\n    }\n    eq(other) { return this.value == other.value; }\n    toDOM(view) { return widgetToDOM(view, this.value); }\n}\nconst foldGutterDefaults = {\n    openText: \"⌄\",\n    closedText: \"›\",\n    markerDOM: null,\n    domEventHandlers: {},\n    foldingChanged: () => false\n};\nclass FoldMarker extends GutterMarker {\n    constructor(config, open) {\n        super();\n        this.config = config;\n        this.open = open;\n    }\n    eq(other) { return this.config == other.config && this.open == other.open; }\n    toDOM(view) {\n        if (this.config.markerDOM)\n            return this.config.markerDOM(this.open);\n        let span = document.createElement(\"span\");\n        span.textContent = this.open ? this.config.openText : this.config.closedText;\n        span.title = view.state.phrase(this.open ? \"Fold line\" : \"Unfold line\");\n        return span;\n    }\n}\n/**\nCreate an extension that registers a fold gutter, which shows a\nfold status indicator before foldable lines (which can be clicked\nto fold or unfold the line).\n*/\nfunction foldGutter(config = {}) {\n    let fullConfig = { ...foldGutterDefaults, ...config };\n    let canFold = new FoldMarker(fullConfig, true), canUnfold = new FoldMarker(fullConfig, false);\n    let markers = ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.from = view.viewport.from;\n            this.markers = this.buildMarkers(view);\n        }\n        update(update) {\n            if (update.docChanged || update.viewportChanged ||\n                update.startState.facet(language) != update.state.facet(language) ||\n                update.startState.field(foldState, false) != update.state.field(foldState, false) ||\n                syntaxTree(update.startState) != syntaxTree(update.state) ||\n                fullConfig.foldingChanged(update))\n                this.markers = this.buildMarkers(update.view);\n        }\n        buildMarkers(view) {\n            let builder = new RangeSetBuilder();\n            for (let line of view.viewportLineBlocks) {\n                let mark = findFold(view.state, line.from, line.to) ? canUnfold\n                    : foldable(view.state, line.from, line.to) ? canFold : null;\n                if (mark)\n                    builder.add(line.from, line.from, mark);\n            }\n            return builder.finish();\n        }\n    });\n    let { domEventHandlers } = fullConfig;\n    return [\n        markers,\n        gutter({\n            class: \"cm-foldGutter\",\n            markers(view) { var _a; return ((_a = view.plugin(markers)) === null || _a === void 0 ? void 0 : _a.markers) || RangeSet.empty; },\n            initialSpacer() {\n                return new FoldMarker(fullConfig, false);\n            },\n            domEventHandlers: {\n                ...domEventHandlers,\n                click: (view, line, event) => {\n                    if (domEventHandlers.click && domEventHandlers.click(view, line, event))\n                        return true;\n                    let folded = findFold(view.state, line.from, line.to);\n                    if (folded) {\n                        view.dispatch({ effects: unfoldEffect.of(folded) });\n                        return true;\n                    }\n                    let range = foldable(view.state, line.from, line.to);\n                    if (range) {\n                        view.dispatch({ effects: foldEffect.of(range) });\n                        return true;\n                    }\n                    return false;\n                }\n            }\n        }),\n        codeFolding()\n    ];\n}\nconst baseTheme$1 = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-foldPlaceholder\": {\n        backgroundColor: \"#eee\",\n        border: \"1px solid #ddd\",\n        color: \"#888\",\n        borderRadius: \".2em\",\n        margin: \"0 1px\",\n        padding: \"0 1px\",\n        cursor: \"pointer\"\n    },\n    \".cm-foldGutter span\": {\n        padding: \"0 1px\",\n        cursor: \"pointer\"\n    }\n});\n\n/**\nA highlight style associates CSS styles with highlighting\n[tags](https://lezer.codemirror.net/docs/ref#highlight.Tag).\n*/\nclass HighlightStyle {\n    constructor(\n    /**\n    The tag styles used to create this highlight style.\n    */\n    specs, options) {\n        this.specs = specs;\n        let modSpec;\n        function def(spec) {\n            let cls = StyleModule.newName();\n            (modSpec || (modSpec = Object.create(null)))[\".\" + cls] = spec;\n            return cls;\n        }\n        const all = typeof options.all == \"string\" ? options.all : options.all ? def(options.all) : undefined;\n        const scopeOpt = options.scope;\n        this.scope = scopeOpt instanceof Language ? (type) => type.prop(languageDataProp) == scopeOpt.data\n            : scopeOpt ? (type) => type == scopeOpt : undefined;\n        this.style = tagHighlighter(specs.map(style => ({\n            tag: style.tag,\n            class: style.class || def(Object.assign({}, style, { tag: null }))\n        })), {\n            all,\n        }).style;\n        this.module = modSpec ? new StyleModule(modSpec) : null;\n        this.themeType = options.themeType;\n    }\n    /**\n    Create a highlighter style that associates the given styles to\n    the given tags. The specs must be objects that hold a style tag\n    or array of tags in their `tag` property, and either a single\n    `class` property providing a static CSS class (for highlighter\n    that rely on external styling), or a\n    [`style-mod`](https://code.haverbeke.berlin/marijn/style-mod#documentation)-style\n    set of CSS properties (which define the styling for those tags).\n    \n    The CSS rules created for a highlighter will be emitted in the\n    order of the spec's properties. That means that for elements that\n    have multiple tags associated with them, styles defined further\n    down in the list will have a higher CSS precedence than styles\n    defined earlier.\n    */\n    static define(specs, options) {\n        return new HighlightStyle(specs, options || {});\n    }\n}\nconst highlighterFacet = /*@__PURE__*/Facet.define();\nconst fallbackHighlighter = /*@__PURE__*/Facet.define({\n    combine(values) { return values.length ? [values[0]] : null; }\n});\nfunction getHighlighters(state) {\n    let main = state.facet(highlighterFacet);\n    return main.length ? main : state.facet(fallbackHighlighter);\n}\n/**\nWrap a highlighter in an editor extension that uses it to apply\nsyntax highlighting to the editor content.\n\nWhen multiple (non-fallback) styles are provided, the styling\napplied is the union of the classes they emit.\n*/\nfunction syntaxHighlighting(highlighter, options) {\n    let ext = [treeHighlighter], themeType;\n    if (highlighter instanceof HighlightStyle) {\n        if (highlighter.module)\n            ext.push(EditorView.styleModule.of(highlighter.module));\n        themeType = highlighter.themeType;\n    }\n    if (options === null || options === void 0 ? void 0 : options.fallback)\n        ext.push(fallbackHighlighter.of(highlighter));\n    else if (themeType)\n        ext.push(highlighterFacet.computeN([EditorView.darkTheme], state => {\n            return state.facet(EditorView.darkTheme) == (themeType == \"dark\") ? [highlighter] : [];\n        }));\n    else\n        ext.push(highlighterFacet.of(highlighter));\n    return ext;\n}\n/**\nReturns the CSS classes (if any) that the highlighters active in\nthe state would assign to the given style\n[tags](https://lezer.codemirror.net/docs/ref#highlight.Tag) and\n(optional) language\n[scope](https://codemirror.net/6/docs/ref/#language.HighlightStyle^define^options.scope).\n*/\nfunction highlightingFor(state, tags, scope) {\n    let highlighters = getHighlighters(state);\n    let result = null;\n    if (highlighters)\n        for (let highlighter of highlighters) {\n            if (!highlighter.scope || scope && highlighter.scope(scope)) {\n                let cls = highlighter.style(tags);\n                if (cls)\n                    result = result ? result + \" \" + cls : cls;\n            }\n        }\n    return result;\n}\nclass TreeHighlighter {\n    constructor(view) {\n        this.markCache = Object.create(null);\n        this.tree = syntaxTree(view.state);\n        this.decorations = this.buildDeco(view, getHighlighters(view.state));\n        this.decoratedTo = view.viewport.to;\n    }\n    update(update) {\n        let tree = syntaxTree(update.state), highlighters = getHighlighters(update.state);\n        let styleChange = highlighters != getHighlighters(update.startState);\n        let { viewport } = update.view, decoratedToMapped = update.changes.mapPos(this.decoratedTo, 1);\n        if (tree.length < viewport.to && !styleChange && tree.type == this.tree.type && decoratedToMapped >= viewport.to) {\n            this.decorations = this.decorations.map(update.changes);\n            this.decoratedTo = decoratedToMapped;\n        }\n        else if (tree != this.tree || update.viewportChanged || styleChange) {\n            this.tree = tree;\n            this.decorations = this.buildDeco(update.view, highlighters);\n            this.decoratedTo = viewport.to;\n        }\n    }\n    buildDeco(view, highlighters) {\n        if (!highlighters || !this.tree.length)\n            return Decoration.none;\n        let builder = new RangeSetBuilder();\n        for (let { from, to } of view.visibleRanges) {\n            highlightTree(this.tree, highlighters, (from, to, style) => {\n                builder.add(from, to, this.markCache[style] || (this.markCache[style] = Decoration.mark({ class: style })));\n            }, from, to);\n        }\n        return builder.finish();\n    }\n}\nconst treeHighlighter = /*@__PURE__*/Prec.high(/*@__PURE__*/ViewPlugin.fromClass(TreeHighlighter, {\n    decorations: v => v.decorations\n}));\n/**\nA default highlight style (works well with light themes).\n*/\nconst defaultHighlightStyle = /*@__PURE__*/HighlightStyle.define([\n    { tag: tags.meta,\n        color: \"#404740\" },\n    { tag: tags.link,\n        textDecoration: \"underline\" },\n    { tag: tags.heading,\n        textDecoration: \"underline\",\n        fontWeight: \"bold\" },\n    { tag: tags.emphasis,\n        fontStyle: \"italic\" },\n    { tag: tags.strong,\n        fontWeight: \"bold\" },\n    { tag: tags.strikethrough,\n        textDecoration: \"line-through\" },\n    { tag: tags.keyword,\n        color: \"#708\" },\n    { tag: [tags.atom, tags.bool, tags.url, tags.contentSeparator, tags.labelName],\n        color: \"#219\" },\n    { tag: [tags.literal, tags.inserted],\n        color: \"#164\" },\n    { tag: [tags.string, tags.deleted],\n        color: \"#a11\" },\n    { tag: [tags.regexp, tags.escape, /*@__PURE__*/tags.special(tags.string)],\n        color: \"#e40\" },\n    { tag: /*@__PURE__*/tags.definition(tags.variableName),\n        color: \"#00f\" },\n    { tag: /*@__PURE__*/tags.local(tags.variableName),\n        color: \"#30a\" },\n    { tag: [tags.typeName, tags.namespace],\n        color: \"#085\" },\n    { tag: tags.className,\n        color: \"#167\" },\n    { tag: [/*@__PURE__*/tags.special(tags.variableName), tags.macroName],\n        color: \"#256\" },\n    { tag: /*@__PURE__*/tags.definition(tags.propertyName),\n        color: \"#00c\" },\n    { tag: tags.comment,\n        color: \"#940\" },\n    { tag: tags.invalid,\n        color: \"#f00\" }\n]);\n\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n    \"&.cm-focused .cm-matchingBracket\": { backgroundColor: \"#328c8252\" },\n    \"&.cm-focused .cm-nonmatchingBracket\": { backgroundColor: \"#bb555544\" }\n});\nconst DefaultScanDist = 10000, DefaultBrackets = \"()[]{}\";\nconst bracketMatchingConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            afterCursor: true,\n            brackets: DefaultBrackets,\n            maxScanDistance: DefaultScanDist,\n            renderMatch: defaultRenderMatch\n        });\n    }\n});\nconst matchingMark = /*@__PURE__*/Decoration.mark({ class: \"cm-matchingBracket\" }), nonmatchingMark = /*@__PURE__*/Decoration.mark({ class: \"cm-nonmatchingBracket\" });\nfunction defaultRenderMatch(match) {\n    let decorations = [];\n    let mark = match.matched ? matchingMark : nonmatchingMark;\n    decorations.push(mark.range(match.start.from, match.start.to));\n    if (match.end)\n        decorations.push(mark.range(match.end.from, match.end.to));\n    return decorations;\n}\nfunction bracketDeco(state) {\n    let decorations = [];\n    let config = state.facet(bracketMatchingConfig);\n    for (let range of state.selection.ranges) {\n        if (!range.empty)\n            continue;\n        let match = matchBrackets(state, range.head, -1, config)\n            || (range.head > 0 && matchBrackets(state, range.head - 1, 1, config))\n            || (config.afterCursor &&\n                (matchBrackets(state, range.head, 1, config) ||\n                    (range.head < state.doc.length && matchBrackets(state, range.head + 1, -1, config))));\n        if (match)\n            decorations = decorations.concat(config.renderMatch(match, state));\n    }\n    return Decoration.set(decorations, true);\n}\nconst bracketMatcher = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.paused = false;\n        this.decorations = bracketDeco(view.state);\n    }\n    update(update) {\n        if (update.docChanged || update.selectionSet || this.paused) {\n            if (update.view.composing) {\n                this.decorations = this.decorations.map(update.changes);\n                this.paused = true;\n            }\n            else {\n                this.decorations = bracketDeco(update.state);\n                this.paused = false;\n            }\n        }\n    }\n}, {\n    decorations: v => v.decorations\n});\nconst bracketMatchingUnique = [\n    bracketMatcher,\n    baseTheme\n];\n/**\nCreate an extension that enables bracket matching. Whenever the\ncursor is next to a bracket, that bracket and the one it matches\nare highlighted. Or, when no matching bracket is found, another\nhighlighting style is used to indicate this.\n*/\nfunction bracketMatching(config = {}) {\n    return [bracketMatchingConfig.of(config), bracketMatchingUnique];\n}\n/**\nWhen larger syntax nodes, such as HTML tags, are marked as\nopening/closing, it can be a bit messy to treat the whole node as\na matchable bracket. This node prop allows you to define, for such\na node, a ‘handle’—the part of the node that is highlighted, and\nthat the cursor must be on to activate highlighting in the first\nplace.\n*/\nconst bracketMatchingHandle = /*@__PURE__*/new NodeProp();\nfunction matchingNodes(node, dir, brackets) {\n    let byProp = node.prop(dir < 0 ? NodeProp.openedBy : NodeProp.closedBy);\n    if (byProp)\n        return byProp;\n    if (node.name.length == 1) {\n        let index = brackets.indexOf(node.name);\n        if (index > -1 && index % 2 == (dir < 0 ? 1 : 0))\n            return [brackets[index + dir]];\n    }\n    return null;\n}\nfunction findHandle(node) {\n    let hasHandle = node.type.prop(bracketMatchingHandle);\n    return hasHandle ? hasHandle(node.node) : node;\n}\n/**\nFind the matching bracket for the token at `pos`, scanning\ndirection `dir`. Only the `brackets` and `maxScanDistance`\nproperties are used from `config`, if given. Returns null if no\nbracket was found at `pos`, or a match result otherwise.\n*/\nfunction matchBrackets(state, pos, dir, config = {}) {\n    let maxScanDistance = config.maxScanDistance || DefaultScanDist, brackets = config.brackets || DefaultBrackets;\n    let tree = syntaxTree(state), node = tree.resolveInner(pos, dir);\n    for (let cur = node; cur; cur = cur.parent) {\n        let matches = matchingNodes(cur.type, dir, brackets);\n        if (matches && cur.from < cur.to) {\n            let handle = findHandle(cur);\n            if (handle && (dir > 0 ? pos >= handle.from && pos < handle.to : pos > handle.from && pos <= handle.to))\n                return matchMarkedBrackets(state, pos, dir, cur, handle, matches, brackets);\n        }\n    }\n    return matchPlainBrackets(state, pos, dir, tree, node.type, maxScanDistance, brackets);\n}\nfunction matchMarkedBrackets(_state, _pos, dir, token, handle, matching, brackets) {\n    let parent = token.parent, firstToken = { from: handle.from, to: handle.to };\n    let depth = 0, cursor = parent === null || parent === void 0 ? void 0 : parent.cursor();\n    if (cursor && (dir < 0 ? cursor.childBefore(token.from) : cursor.childAfter(token.to)))\n        do {\n            if (dir < 0 ? cursor.to <= token.from : cursor.from >= token.to) {\n                if (depth == 0 && matching.indexOf(cursor.type.name) > -1 && cursor.from < cursor.to) {\n                    let endHandle = findHandle(cursor);\n                    return { start: firstToken, end: endHandle ? { from: endHandle.from, to: endHandle.to } : undefined, matched: true };\n                }\n                else if (matchingNodes(cursor.type, dir, brackets)) {\n                    depth++;\n                }\n                else if (matchingNodes(cursor.type, -dir, brackets)) {\n                    if (depth == 0) {\n                        let endHandle = findHandle(cursor);\n                        return {\n                            start: firstToken,\n                            end: endHandle && endHandle.from < endHandle.to ? { from: endHandle.from, to: endHandle.to } : undefined,\n                            matched: false\n                        };\n                    }\n                    depth--;\n                }\n            }\n        } while (dir < 0 ? cursor.prevSibling() : cursor.nextSibling());\n    return { start: firstToken, matched: false };\n}\nfunction matchPlainBrackets(state, pos, dir, tree, tokenType, maxScanDistance, brackets) {\n    if (dir < 0 ? !pos : pos == state.doc.length)\n        return null;\n    let startCh = dir < 0 ? state.sliceDoc(pos - 1, pos) : state.sliceDoc(pos, pos + 1);\n    let bracket = brackets.indexOf(startCh);\n    if (bracket < 0 || (bracket % 2 == 0) != (dir > 0))\n        return null;\n    let startToken = { from: dir < 0 ? pos - 1 : pos, to: dir > 0 ? pos + 1 : pos };\n    let iter = state.doc.iterRange(pos, dir > 0 ? state.doc.length : 0), depth = 0;\n    for (let distance = 0; !(iter.next()).done && distance <= maxScanDistance;) {\n        let text = iter.value;\n        if (dir < 0)\n            distance += text.length;\n        let basePos = pos + distance * dir;\n        for (let pos = dir > 0 ? 0 : text.length - 1, end = dir > 0 ? text.length : -1; pos != end; pos += dir) {\n            let found = brackets.indexOf(text[pos]);\n            if (found < 0 || tree.resolveInner(basePos + pos, 1).type != tokenType)\n                continue;\n            if ((found % 2 == 0) == (dir > 0)) {\n                depth++;\n            }\n            else if (depth == 1) { // Closing\n                return { start: startToken, end: { from: basePos + pos, to: basePos + pos + 1 }, matched: (found >> 1) == (bracket >> 1) };\n            }\n            else {\n                depth--;\n            }\n        }\n        if (dir > 0)\n            distance += text.length;\n    }\n    return iter.done ? { start: startToken, matched: false } : null;\n}\n\n// Counts the column offset in a string, taking tabs into account.\n// Used mostly to find indentation.\nfunction countCol(string, end, tabSize, startIndex = 0, startValue = 0) {\n    if (end == null) {\n        end = string.search(/[^\\s\\u00a0]/);\n        if (end == -1)\n            end = string.length;\n    }\n    let n = startValue;\n    for (let i = startIndex; i < end; i++) {\n        if (string.charCodeAt(i) == 9)\n            n += tabSize - (n % tabSize);\n        else\n            n++;\n    }\n    return n;\n}\n/**\nEncapsulates a single line of input. Given to stream syntax code,\nwhich uses it to tokenize the content.\n*/\nclass StringStream {\n    /**\n    Create a stream.\n    */\n    constructor(\n    /**\n    The line.\n    */\n    string, tabSize, \n    /**\n    The current indent unit size.\n    */\n    indentUnit, overrideIndent) {\n        this.string = string;\n        this.tabSize = tabSize;\n        this.indentUnit = indentUnit;\n        this.overrideIndent = overrideIndent;\n        /**\n        The current position on the line.\n        */\n        this.pos = 0;\n        /**\n        The start position of the current token.\n        */\n        this.start = 0;\n        this.lastColumnPos = 0;\n        this.lastColumnValue = 0;\n    }\n    /**\n    True if we are at the end of the line.\n    */\n    eol() { return this.pos >= this.string.length; }\n    /**\n    True if we are at the start of the line.\n    */\n    sol() { return this.pos == 0; }\n    /**\n    Get the next code unit after the current position, or undefined\n    if we're at the end of the line.\n    */\n    peek() { return this.string.charAt(this.pos) || undefined; }\n    /**\n    Read the next code unit and advance `this.pos`.\n    */\n    next() {\n        if (this.pos < this.string.length)\n            return this.string.charAt(this.pos++);\n    }\n    /**\n    Match the next character against the given string, regular\n    expression, or predicate. Consume and return it if it matches.\n    */\n    eat(match) {\n        let ch = this.string.charAt(this.pos);\n        let ok;\n        if (typeof match == \"string\")\n            ok = ch == match;\n        else\n            ok = ch && (match instanceof RegExp ? match.test(ch) : match(ch));\n        if (ok) {\n            ++this.pos;\n            return ch;\n        }\n    }\n    /**\n    Continue matching characters that match the given string,\n    regular expression, or predicate function. Return true if any\n    characters were consumed.\n    */\n    eatWhile(match) {\n        let start = this.pos;\n        while (this.eat(match)) { }\n        return this.pos > start;\n    }\n    /**\n    Consume whitespace ahead of `this.pos`. Return true if any was\n    found.\n    */\n    eatSpace() {\n        let start = this.pos;\n        while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos)))\n            ++this.pos;\n        return this.pos > start;\n    }\n    /**\n    Move to the end of the line.\n    */\n    skipToEnd() { this.pos = this.string.length; }\n    /**\n    Move to directly before the given character, if found on the\n    current line.\n    */\n    skipTo(ch) {\n        let found = this.string.indexOf(ch, this.pos);\n        if (found > -1) {\n            this.pos = found;\n            return true;\n        }\n    }\n    /**\n    Move back `n` characters.\n    */\n    backUp(n) { this.pos -= n; }\n    /**\n    Get the column position at `this.pos`.\n    */\n    column() {\n        if (this.lastColumnPos < this.start) {\n            this.lastColumnValue = countCol(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n            this.lastColumnPos = this.start;\n        }\n        return this.lastColumnValue;\n    }\n    /**\n    Get the indentation column of the current line.\n    */\n    indentation() {\n        var _a;\n        return (_a = this.overrideIndent) !== null && _a !== void 0 ? _a : countCol(this.string, null, this.tabSize);\n    }\n    /**\n    Match the input against the given string or regular expression\n    (which should start with a `^`). Return true or the regexp match\n    if it matches.\n    \n    Unless `consume` is set to `false`, this will move `this.pos`\n    past the matched text.\n    \n    When matching a string `caseInsensitive` can be set to true to\n    make the match case-insensitive.\n    */\n    match(pattern, consume, caseInsensitive) {\n        if (typeof pattern == \"string\") {\n            let cased = (str) => caseInsensitive ? str.toLowerCase() : str;\n            let substr = this.string.substr(this.pos, pattern.length);\n            if (cased(substr) == cased(pattern)) {\n                if (consume !== false)\n                    this.pos += pattern.length;\n                return true;\n            }\n            else\n                return null;\n        }\n        else {\n            let match = this.string.slice(this.pos).match(pattern);\n            if (match && match.index > 0)\n                return null;\n            if (match && consume !== false)\n                this.pos += match[0].length;\n            return match;\n        }\n    }\n    /**\n    Get the current token.\n    */\n    current() { return this.string.slice(this.start, this.pos); }\n}\n\nfunction fullParser(spec) {\n    return {\n        name: spec.name || \"\",\n        token: spec.token,\n        blankLine: spec.blankLine || (() => { }),\n        startState: spec.startState || (() => true),\n        copyState: spec.copyState || defaultCopyState,\n        indent: spec.indent || (() => null),\n        languageData: spec.languageData || {},\n        tokenTable: spec.tokenTable || noTokens,\n        mergeTokens: spec.mergeTokens !== false\n    };\n}\nfunction defaultCopyState(state) {\n    if (typeof state != \"object\")\n        return state;\n    let newState = {};\n    for (let prop in state) {\n        let val = state[prop];\n        newState[prop] = (val instanceof Array ? val.slice() : val);\n    }\n    return newState;\n}\nconst IndentedFrom = /*@__PURE__*/new WeakMap();\n/**\nA [language](https://codemirror.net/6/docs/ref/#language.Language) class based on a CodeMirror\n5-style [streaming parser](https://codemirror.net/6/docs/ref/#language.StreamParser).\n*/\nclass StreamLanguage extends Language {\n    constructor(parser) {\n        let data = defineLanguageFacet(parser.languageData);\n        let p = fullParser(parser), self;\n        let impl = new class extends Parser {\n            createParse(input, fragments, ranges) {\n                return new Parse(self, input, fragments, ranges);\n            }\n        };\n        super(data, impl, [], parser.name);\n        this.topNode = docID(data, this);\n        self = this;\n        this.streamParser = p;\n        this.stateAfter = new NodeProp({ perNode: true });\n        this.tokenTable = parser.tokenTable ? new TokenTable(p.tokenTable) : defaultTokenTable;\n    }\n    /**\n    Define a stream language.\n    */\n    static define(spec) { return new StreamLanguage(spec); }\n    /**\n    @internal\n    */\n    getIndent(cx) {\n        let from = undefined;\n        let { overrideIndentation } = cx.options;\n        if (overrideIndentation) {\n            from = IndentedFrom.get(cx.state);\n            if (from != null && from < cx.pos - 1e4)\n                from = undefined;\n        }\n        let start = findState(this, cx.node.tree, cx.node.from, cx.node.from, from !== null && from !== void 0 ? from : cx.pos), statePos, state;\n        if (start) {\n            state = start.state;\n            statePos = start.pos + 1;\n        }\n        else {\n            state = this.streamParser.startState(cx.unit);\n            statePos = cx.node.from;\n        }\n        if (cx.pos - statePos > 10000 /* C.MaxIndentScanDist */)\n            return null;\n        while (statePos < cx.pos) {\n            let line = cx.state.doc.lineAt(statePos), end = Math.min(cx.pos, line.to);\n            if (line.length) {\n                let indentation = overrideIndentation ? overrideIndentation(line.from) : -1;\n                let stream = new StringStream(line.text, cx.state.tabSize, cx.unit, indentation < 0 ? undefined : indentation);\n                while (stream.pos < end - line.from)\n                    readToken(this.streamParser.token, stream, state);\n            }\n            else {\n                this.streamParser.blankLine(state, cx.unit);\n            }\n            if (end == cx.pos)\n                break;\n            statePos = line.to + 1;\n        }\n        let line = cx.lineAt(cx.pos);\n        if (overrideIndentation && from == null)\n            IndentedFrom.set(cx.state, line.from);\n        return this.streamParser.indent(state, /^\\s*(.*)/.exec(line.text)[1], cx);\n    }\n    get allowsNesting() { return false; }\n}\nfunction findState(lang, tree, off, startPos, before) {\n    let state = off >= startPos && off + tree.length <= before && tree.prop(lang.stateAfter);\n    if (state)\n        return { state: lang.streamParser.copyState(state), pos: off + tree.length };\n    for (let i = tree.children.length - 1; i >= 0; i--) {\n        let child = tree.children[i], pos = off + tree.positions[i];\n        let found = child instanceof Tree && pos < before && findState(lang, child, pos, startPos, before);\n        if (found)\n            return found;\n    }\n    return null;\n}\nfunction cutTree(lang, tree, from, to, inside) {\n    if (inside && from <= 0 && to >= tree.length)\n        return tree;\n    if (!inside && from == 0 && tree.type == lang.topNode)\n        inside = true;\n    for (let i = tree.children.length - 1; i >= 0; i--) {\n        let pos = tree.positions[i], child = tree.children[i], inner;\n        if (pos < to && child instanceof Tree) {\n            if (!(inner = cutTree(lang, child, from - pos, to - pos, inside)))\n                break;\n            return !inside ? inner\n                : new Tree(tree.type, tree.children.slice(0, i).concat(inner), tree.positions.slice(0, i + 1), pos + inner.length);\n        }\n    }\n    return null;\n}\nfunction findStartInFragments(lang, fragments, startPos, endPos, editorState) {\n    for (let f of fragments) {\n        let from = f.from + (f.openStart ? 25 : 0), to = f.to - (f.openEnd ? 25 : 0);\n        let found = from <= startPos && to > startPos && findState(lang, f.tree, 0 - f.offset, startPos, to), tree;\n        if (found && found.pos <= endPos && (tree = cutTree(lang, f.tree, startPos + f.offset, found.pos + f.offset, false)))\n            return { state: found.state, tree };\n    }\n    return { state: lang.streamParser.startState(editorState ? getIndentUnit(editorState) : 4), tree: Tree.empty };\n}\nclass Parse {\n    constructor(lang, input, fragments, ranges) {\n        this.lang = lang;\n        this.input = input;\n        this.fragments = fragments;\n        this.ranges = ranges;\n        this.stoppedAt = null;\n        this.chunks = [];\n        this.chunkPos = [];\n        this.chunk = [];\n        this.chunkReused = undefined;\n        this.rangeIndex = 0;\n        this.to = ranges[ranges.length - 1].to;\n        let context = ParseContext.get(), from = ranges[0].from;\n        let { state, tree } = findStartInFragments(lang, fragments, from, this.to, context === null || context === void 0 ? void 0 : context.state);\n        this.state = state;\n        this.parsedPos = this.chunkStart = from + tree.length;\n        for (let i = 0; i < tree.children.length; i++) {\n            this.chunks.push(tree.children[i]);\n            this.chunkPos.push(tree.positions[i]);\n        }\n        if (context && this.parsedPos < context.viewport.from - 100000 /* C.MaxDistanceBeforeViewport */ &&\n            ranges.some(r => r.from <= context.viewport.from && r.to >= context.viewport.from)) {\n            this.state = this.lang.streamParser.startState(getIndentUnit(context.state));\n            context.skipUntilInView(this.parsedPos, context.viewport.from);\n            this.parsedPos = context.viewport.from;\n        }\n        this.moveRangeIndex();\n    }\n    advance() {\n        let context = ParseContext.get();\n        let parseEnd = this.stoppedAt == null ? this.to : Math.min(this.to, this.stoppedAt);\n        let end = Math.min(parseEnd, this.chunkStart + 512 /* C.ChunkSize */);\n        if (context)\n            end = Math.min(end, context.viewport.to);\n        while (this.parsedPos < end)\n            this.parseLine(context);\n        if (this.chunkStart < this.parsedPos)\n            this.finishChunk();\n        if (this.parsedPos >= parseEnd)\n            return this.finish();\n        if (context && this.parsedPos >= context.viewport.to) {\n            context.skipUntilInView(this.parsedPos, parseEnd);\n            return this.finish();\n        }\n        return null;\n    }\n    stopAt(pos) {\n        this.stoppedAt = pos;\n    }\n    lineAfter(pos) {\n        let chunk = this.input.chunk(pos);\n        if (!this.input.lineChunks) {\n            let eol = chunk.indexOf(\"\\n\");\n            if (eol > -1)\n                chunk = chunk.slice(0, eol);\n        }\n        else if (chunk == \"\\n\") {\n            chunk = \"\";\n        }\n        return pos + chunk.length <= this.to ? chunk : chunk.slice(0, this.to - pos);\n    }\n    nextLine() {\n        let from = this.parsedPos, line = this.lineAfter(from), end = from + line.length;\n        for (let index = this.rangeIndex;;) {\n            let rangeEnd = this.ranges[index].to;\n            if (rangeEnd >= end)\n                break;\n            line = line.slice(0, rangeEnd - (end - line.length));\n            index++;\n            if (index == this.ranges.length)\n                break;\n            let rangeStart = this.ranges[index].from;\n            let after = this.lineAfter(rangeStart);\n            line += after;\n            end = rangeStart + after.length;\n        }\n        return { line, end };\n    }\n    skipGapsTo(pos, offset, side) {\n        for (;;) {\n            let end = this.ranges[this.rangeIndex].to, offPos = pos + offset;\n            if (side > 0 ? end > offPos : end >= offPos)\n                break;\n            let start = this.ranges[++this.rangeIndex].from;\n            offset += start - end;\n        }\n        return offset;\n    }\n    moveRangeIndex() {\n        while (this.ranges[this.rangeIndex].to < this.parsedPos)\n            this.rangeIndex++;\n    }\n    emitToken(id, from, to, offset) {\n        let size = 4;\n        if (this.ranges.length > 1) {\n            offset = this.skipGapsTo(from, offset, 1);\n            from += offset;\n            let len0 = this.chunk.length;\n            offset = this.skipGapsTo(to, offset, -1);\n            to += offset;\n            size += this.chunk.length - len0;\n        }\n        let last = this.chunk.length - 4;\n        if (this.lang.streamParser.mergeTokens && size == 4 && last >= 0 &&\n            this.chunk[last] == id && this.chunk[last + 2] == from)\n            this.chunk[last + 2] = to;\n        else\n            this.chunk.push(id, from, to, size);\n        return offset;\n    }\n    parseLine(context) {\n        let { line, end } = this.nextLine(), offset = 0, { streamParser } = this.lang;\n        let stream = new StringStream(line, context ? context.state.tabSize : 4, context ? getIndentUnit(context.state) : 2);\n        if (stream.eol()) {\n            streamParser.blankLine(this.state, stream.indentUnit);\n        }\n        else {\n            while (!stream.eol()) {\n                let token = readToken(streamParser.token, stream, this.state);\n                if (token)\n                    offset = this.emitToken(this.lang.tokenTable.resolve(token), this.parsedPos + stream.start, this.parsedPos + stream.pos, offset);\n                if (stream.start > 10000 /* C.MaxLineLength */)\n                    break;\n            }\n        }\n        this.parsedPos = end;\n        this.moveRangeIndex();\n        if (this.parsedPos < this.to)\n            this.parsedPos++;\n    }\n    finishChunk() {\n        let tree = Tree.build({\n            buffer: this.chunk,\n            start: this.chunkStart,\n            length: this.parsedPos - this.chunkStart,\n            nodeSet,\n            topID: 0,\n            maxBufferLength: 512 /* C.ChunkSize */,\n            reused: this.chunkReused\n        });\n        tree = new Tree(tree.type, tree.children, tree.positions, tree.length, [[this.lang.stateAfter, this.lang.streamParser.copyState(this.state)]]);\n        this.chunks.push(tree);\n        this.chunkPos.push(this.chunkStart - this.ranges[0].from);\n        this.chunk = [];\n        this.chunkReused = undefined;\n        this.chunkStart = this.parsedPos;\n    }\n    finish() {\n        return new Tree(this.lang.topNode, this.chunks, this.chunkPos, this.parsedPos - this.ranges[0].from).balance();\n    }\n}\nfunction readToken(token, stream, state) {\n    stream.start = stream.pos;\n    for (let i = 0; i < 10; i++) {\n        let result = token(stream, state);\n        if (stream.pos > stream.start)\n            return result;\n    }\n    throw new Error(\"Stream parser failed to advance stream.\");\n}\nconst noTokens = /*@__PURE__*/Object.create(null);\nconst typeArray = [NodeType.none];\nconst nodeSet = /*@__PURE__*/new NodeSet(typeArray);\nconst warned = [];\n// Cache of node types by name and tags\nconst byTag = /*@__PURE__*/Object.create(null);\nconst defaultTable = /*@__PURE__*/Object.create(null);\nfor (let [legacyName, name] of [\n    [\"variable\", \"variableName\"],\n    [\"variable-2\", \"variableName.special\"],\n    [\"string-2\", \"string.special\"],\n    [\"def\", \"variableName.definition\"],\n    [\"tag\", \"tagName\"],\n    [\"attribute\", \"attributeName\"],\n    [\"type\", \"typeName\"],\n    [\"builtin\", \"variableName.standard\"],\n    [\"qualifier\", \"modifier\"],\n    [\"error\", \"invalid\"],\n    [\"header\", \"heading\"],\n    [\"property\", \"propertyName\"]\n])\n    defaultTable[legacyName] = /*@__PURE__*/createTokenType(noTokens, name);\nclass TokenTable {\n    constructor(extra) {\n        this.extra = extra;\n        this.table = Object.assign(Object.create(null), defaultTable);\n    }\n    resolve(tag) {\n        return !tag ? 0 : this.table[tag] || (this.table[tag] = createTokenType(this.extra, tag));\n    }\n}\nconst defaultTokenTable = /*@__PURE__*/new TokenTable(noTokens);\nfunction warnForPart(part, msg) {\n    if (warned.indexOf(part) > -1)\n        return;\n    warned.push(part);\n    console.warn(msg);\n}\nfunction createTokenType(extra, tagStr) {\n    let tags$1 = [];\n    for (let name of tagStr.split(\" \")) {\n        let found = [];\n        for (let part of name.split(\".\")) {\n            let value = (extra[part] || tags[part]);\n            if (!value) {\n                warnForPart(part, `Unknown highlighting tag ${part}`);\n            }\n            else if (typeof value == \"function\") {\n                if (!found.length)\n                    warnForPart(part, `Modifier ${part} used at start of tag`);\n                else\n                    found = found.map(value);\n            }\n            else {\n                if (found.length)\n                    warnForPart(part, `Tag ${part} used as modifier`);\n                else\n                    found = Array.isArray(value) ? value : [value];\n            }\n        }\n        for (let tag of found)\n            tags$1.push(tag);\n    }\n    if (!tags$1.length)\n        return 0;\n    let name = tagStr.replace(/ /g, \"_\"), key = name + \" \" + tags$1.map(t => t.id);\n    let known = byTag[key];\n    if (known)\n        return known.id;\n    let type = byTag[key] = NodeType.define({\n        id: typeArray.length,\n        name,\n        props: [styleTags({ [name]: tags$1 })]\n    });\n    typeArray.push(type);\n    return type.id;\n}\nfunction docID(data, lang) {\n    let type = NodeType.define({ id: typeArray.length, name: \"Document\", props: [\n            languageDataProp.add(() => data),\n            indentNodeProp.add(() => cx => lang.getIndent(cx))\n        ], top: true });\n    typeArray.push(type);\n    return type;\n}\n\nfunction buildForLine(line) {\n    return line.length <= 4096 && /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\ufb50-\\ufdff]/.test(line);\n}\nfunction textHasRTL(text) {\n    for (let i = text.iter(); !i.next().done;)\n        if (buildForLine(i.value))\n            return true;\n    return false;\n}\nfunction changeAddsRTL(change) {\n    let added = false;\n    change.iterChanges((fA, tA, fB, tB, ins) => {\n        if (!added && textHasRTL(ins))\n            added = true;\n    });\n    return added;\n}\nconst alwaysIsolate = /*@__PURE__*/Facet.define({ combine: values => values.some(x => x) });\n/**\nMake sure nodes\n[marked](https://lezer.codemirror.net/docs/ref/#common.NodeProp^isolate)\nas isolating for bidirectional text are rendered in a way that\nisolates them from the surrounding text.\n*/\nfunction bidiIsolates(options = {}) {\n    let extensions = [isolateMarks];\n    if (options.alwaysIsolate)\n        extensions.push(alwaysIsolate.of(true));\n    return extensions;\n}\nconst isolateMarks = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.always = view.state.facet(alwaysIsolate) ||\n            view.textDirection != Direction.LTR ||\n            view.state.facet(EditorView.perLineTextDirection);\n        this.hasRTL = !this.always && textHasRTL(view.state.doc);\n        this.tree = syntaxTree(view.state);\n        this.decorations = this.always || this.hasRTL ? buildDeco(view, this.tree, this.always) : Decoration.none;\n    }\n    update(update) {\n        let always = update.state.facet(alwaysIsolate) ||\n            update.view.textDirection != Direction.LTR ||\n            update.state.facet(EditorView.perLineTextDirection);\n        if (!always && !this.hasRTL && changeAddsRTL(update.changes))\n            this.hasRTL = true;\n        if (!always && !this.hasRTL)\n            return;\n        let tree = syntaxTree(update.state);\n        if (always != this.always || tree != this.tree || update.docChanged || update.viewportChanged) {\n            this.tree = tree;\n            this.always = always;\n            this.decorations = buildDeco(update.view, tree, always);\n        }\n    }\n}, {\n    provide: plugin => {\n        function access(view) {\n            var _a, _b;\n            return (_b = (_a = view.plugin(plugin)) === null || _a === void 0 ? void 0 : _a.decorations) !== null && _b !== void 0 ? _b : Decoration.none;\n        }\n        return [EditorView.outerDecorations.of(access),\n            Prec.lowest(EditorView.bidiIsolatedRanges.of(access))];\n    }\n});\nfunction buildDeco(view, tree, always) {\n    let deco = new RangeSetBuilder();\n    let ranges = view.visibleRanges;\n    if (!always)\n        ranges = clipRTLLines(ranges, view.state.doc);\n    for (let { from, to } of ranges) {\n        tree.iterate({\n            enter: node => {\n                let iso = node.type.prop(NodeProp.isolate);\n                if (iso)\n                    deco.add(node.from, node.to, marks[iso]);\n            },\n            from, to\n        });\n    }\n    return deco.finish();\n}\nfunction clipRTLLines(ranges, doc) {\n    let cur = doc.iter(), pos = 0, result = [], last = null;\n    for (let { from, to } of ranges) {\n        if (last && last.to > from) {\n            from = last.to;\n            if (from >= to)\n                continue;\n        }\n        if (pos + cur.value.length < from) {\n            cur.next(from - (pos + cur.value.length));\n            pos = from;\n        }\n        for (;;) {\n            let start = pos, end = pos + cur.value.length;\n            if (!cur.lineBreak && buildForLine(cur.value)) {\n                if (last && last.to > start - 10)\n                    last.to = Math.min(to, end);\n                else\n                    result.push(last = { from: start, to: Math.min(to, end) });\n            }\n            if (end >= to)\n                break;\n            pos = end;\n            cur.next();\n        }\n    }\n    return result;\n}\nconst marks = {\n    rtl: /*@__PURE__*/Decoration.mark({ class: \"cm-iso\", inclusive: true, attributes: { dir: \"rtl\" }, bidiIsolate: Direction.RTL }),\n    ltr: /*@__PURE__*/Decoration.mark({ class: \"cm-iso\", inclusive: true, attributes: { dir: \"ltr\" }, bidiIsolate: Direction.LTR }),\n    auto: /*@__PURE__*/Decoration.mark({ class: \"cm-iso\", inclusive: true, attributes: { dir: \"auto\" }, bidiIsolate: null })\n};\n\nexport { DocInput, HighlightStyle, IndentContext, LRLanguage, Language, LanguageDescription, LanguageSupport, ParseContext, StreamLanguage, StringStream, TreeIndentContext, bidiIsolates, bracketMatching, bracketMatchingHandle, codeFolding, continuedIndent, defaultHighlightStyle, defineLanguageFacet, delimitedIndent, ensureSyntaxTree, flatIndent, foldAll, foldCode, foldEffect, foldGutter, foldInside, foldKeymap, foldNodeProp, foldService, foldState, foldable, foldedRanges, forceParsing, getIndentUnit, getIndentation, highlightingFor, indentNodeProp, indentOnInput, indentRange, indentService, indentString, indentUnit, language, languageDataProp, matchBrackets, sublanguageProp, syntaxHighlighting, syntaxParserRunning, syntaxTree, syntaxTreeAvailable, toggleFold, unfoldAll, unfoldCode, unfoldEffect };\n","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action, get } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\nimport { addObserver, removeObserver } from '@ember/object/observers';\nimport { isEqual, isNone } from '@ember/utils';\nimport { assert, deprecate } from '@ember/debug';\nimport {\n  indexOfOption,\n  filterOptions,\n  findOptionWithOffset,\n  countOptions,\n  defaultHighlighted,\n  advanceSelectableOption,\n  defaultMatcher,\n  defaultTypeAheadMatcher,\n  pathForOption,\n  type MatcherFn,\n} from '../utils/group-utils.ts';\nimport { restartableTask, timeout } from 'ember-concurrency';\nimport { modifier } from 'ember-modifier';\nimport type {\n  Dropdown,\n  DropdownActions,\n  TRootEventType,\n} from 'ember-basic-dropdown/components/basic-dropdown';\nimport type Owner from '@ember/owner';\nimport type { CalculatePosition } from 'ember-basic-dropdown/utils/calculate-position';\nimport { isArray } from '@ember/array';\nimport type { ComponentLike } from '@glint/template';\n\ninterface SelectActions extends DropdownActions {\n  search: (term: string) => void;\n  highlight: (option: any) => void;\n  select: (selected: any, e?: Event) => void;\n  choose: (selected: any, e?: Event) => void;\n  scrollTo: (option: any) => void;\n  labelClick: (e: MouseEvent) => void;\n}\nexport interface Select extends Dropdown {\n  selected: any;\n  multiple: boolean;\n  highlighted: any;\n  options: readonly any[];\n  results: readonly any[];\n  resultsCount: number;\n  loading: boolean;\n  isActive: boolean;\n  searchText: string;\n  lastSearchedText: string;\n  actions: SelectActions;\n}\ninterface PromiseProxy<T> extends Promise<T> {\n  content: any;\n}\ninterface CancellablePromise<T> extends Promise<T> {\n  cancel: () => void;\n}\ninterface Sliceable<T> {\n  slice(): T[];\n}\n// Some args are not listed here because they are only accessed from the template. Should I list them?\nexport interface PowerSelectArgs {\n  highlightOnHover?: boolean;\n  placeholderComponent?: string | ComponentLike<any>;\n  searchMessage?: string;\n  searchMessageComponent?: string | ComponentLike<any>;\n  noMatchesMessage?: string;\n  noMatchesMessageComponent?: string | ComponentLike<any>;\n  matchTriggerWidth?: boolean;\n  resultCountMessage?: (resultCount: number) => string;\n  options?: readonly any[] | Promise<readonly any[]>;\n  selected?: any | PromiseProxy<any>;\n  multiple?: boolean;\n  legacyMultiple?: boolean; // Don't use this inside app, internal usage!\n  destination?: string;\n  destinationElement?: HTMLElement;\n  closeOnSelect?: boolean;\n  renderInPlace?: boolean;\n  preventScroll?: boolean;\n  defaultHighlighted?: any;\n  searchField?: string;\n  labelClass?: string;\n  labelText?: string;\n  labelTag?: keyof HTMLElementTagNameMap;\n  labelClickAction?: TLabelClickAction;\n  ariaLabel?: string;\n  ariaLabelledBy?: string;\n  loadingMessage?: string;\n  placeholder?: string;\n  dropdownClass?: string;\n  allowClear?: boolean;\n  searchEnabled?: boolean;\n  animationEnabled?: boolean;\n  tabindex?: number | string;\n  searchPlaceholder?: string;\n  searchFieldPosition?: TSearchFieldPosition;\n  verticalPosition?: string;\n  horizontalPosition?: string;\n  triggerId?: string;\n  disabled?: boolean;\n  title?: string;\n  triggerRole?: string;\n  required?: string;\n  triggerClass?: string;\n  ariaInvalid?: string;\n  eventType?: string;\n  rootEventType?: TRootEventType;\n  ariaDescribedBy?: string;\n  calculatePosition?: CalculatePosition;\n  ebdTriggerComponent?: string | ComponentLike<any>;\n  ebdContentComponent?: string | ComponentLike<any>;\n  labelComponent?: string | ComponentLike<any>;\n  triggerComponent?: string | ComponentLike<any>;\n  selectedItemComponent?: string | ComponentLike<any>;\n  beforeOptionsComponent?: string | ComponentLike<any>;\n  optionsComponent?: string | ComponentLike<any>;\n  groupComponent?: string | ComponentLike<any>;\n  afterOptionsComponent?: string | ComponentLike<any>;\n  extra?: any;\n  matcher?: MatcherFn;\n  initiallyOpened?: boolean;\n  typeAheadOptionMatcher?: MatcherFn;\n  buildSelection?: (selected: any, select: Select) => any;\n  onChange: (selection: any, select: Select, event?: Event) => void;\n  search?: (\n    term: string,\n    select: Select,\n  ) => readonly any[] | Promise<readonly any[]>;\n  onOpen?: (select: Select, e: Event) => boolean | void | undefined;\n  onClose?: (select: Select, e: Event) => boolean | void | undefined;\n  onInput?: (term: string, select: Select, e: Event) => string | boolean | void;\n  onKeydown?: (select: Select, e: KeyboardEvent) => boolean | void | undefined;\n  onFocus?: (select: Select, event: FocusEvent) => void;\n  onBlur?: (select: Select, event: FocusEvent) => void;\n  scrollTo?: (option: any, select: Select) => void;\n  registerAPI?: (select: Select) => void;\n}\n\nexport type TLabelClickAction = 'focus' | 'open';\nexport type TSearchFieldPosition = 'before-options' | 'trigger';\n\nexport interface PowerSelectSignature {\n  Element: HTMLElement;\n  Args: PowerSelectArgs;\n  Blocks: {\n    default: [option: any, select: Select];\n  };\n}\n\nconst isSliceable = <T>(coll: any): coll is Sliceable<T> => {\n  return isArray(coll);\n};\n\nconst isPromiseLike = <T>(thing: any): thing is Promise<T> => {\n  return typeof thing.then === 'function';\n};\n\nconst isPromiseProxyLike = <T>(thing: any): thing is PromiseProxy<T> => {\n  return isPromiseLike(thing) && Object.hasOwnProperty.call(thing, 'content');\n};\n\nconst isCancellablePromise = <T>(\n  thing: any,\n): thing is CancellablePromise<T> => {\n  return typeof thing.cancel === 'function';\n};\n\nexport default class PowerSelectComponent extends Component<PowerSelectSignature> {\n  // Untracked properties\n  _publicAPIActions = {\n    search: this._search,\n    highlight: this._highlight,\n    select: this._select,\n    choose: this._choose,\n    scrollTo: this._scrollTo,\n    labelClick: this._labelClick,\n  };\n\n  // Tracked properties\n  @tracked private _resolvedOptions?: readonly any[];\n  @tracked private _resolvedSelected?: any;\n  @tracked private _repeatingChar = '';\n  @tracked private _expirableSearchText = '';\n  @tracked private _searchResult?: readonly any[];\n  @tracked isActive = false;\n  @tracked loading = false;\n  @tracked searchText = '';\n  @tracked lastSearchedText = '';\n  @tracked highlighted?: any;\n  storedAPI!: Select;\n\n  private _uid = guidFor(this);\n  private _lastOptionsPromise?: Promise<readonly any[]>;\n  private _lastSelectedPromise?: PromiseProxy<any>;\n  private _lastSearchPromise?:\n    | Promise<readonly any[]>\n    | CancellablePromise<readonly any[]>;\n  private _filterResultsCache: {\n    results: any[];\n    options: any[];\n    searchText: string;\n  } = { results: [], options: [], searchText: this.searchText };\n\n  // Lifecycle hooks\n  constructor(owner: Owner, args: PowerSelectArgs) {\n    super(owner, args);\n    assert(\n      '<PowerSelect> requires an `@onChange` function',\n      this.args.onChange && typeof this.args.onChange === 'function',\n    );\n  }\n\n  willDestroy() {\n    if (\n      this._lastSelectedPromise &&\n      isPromiseProxyLike(this._lastSelectedPromise)\n    ) {\n      try {\n        removeObserver(\n          this._lastSelectedPromise,\n          'content',\n          this,\n          this._selectedObserverCallback,\n        );\n        // eslint-disable-next-line no-empty\n      } catch {}\n      this._lastSelectedPromise = undefined;\n    }\n    super.willDestroy();\n  }\n\n  // Getters\n  get highlightOnHover(): boolean {\n    return this.args.highlightOnHover === undefined\n      ? true\n      : this.args.highlightOnHover;\n  }\n\n  get labelClickAction(): TLabelClickAction {\n    return this.args.labelClickAction === undefined\n      ? 'focus'\n      : this.args.labelClickAction;\n  }\n\n  get highlightedIndex(): string {\n    const results = this.results;\n    const highlighted = this.highlighted;\n    return pathForOption(results, highlighted);\n  }\n\n  get searchMessage(): string {\n    return this.args.searchMessage === undefined\n      ? 'Type to search'\n      : this.args.searchMessage;\n  }\n\n  get noMatchesMessage(): string {\n    return this.args.noMatchesMessage === undefined\n      ? 'No results found'\n      : this.args.noMatchesMessage;\n  }\n\n  get resultCountMessage(): string {\n    if (typeof this.args.resultCountMessage === 'function') {\n      return this.args.resultCountMessage(this.resultsCount);\n    }\n\n    if (this.resultsCount === 1) {\n      return `${this.resultsCount} result`;\n    }\n\n    return `${this.resultsCount} results`;\n  }\n\n  get matchTriggerWidth() {\n    return this.args.matchTriggerWidth === undefined\n      ? true\n      : this.args.matchTriggerWidth;\n  }\n\n  get mustShowSearchMessage(): boolean {\n    return (\n      !this.loading &&\n      this.searchText.length === 0 &&\n      !!this.args.search &&\n      !!this.searchMessage &&\n      this.resultsCount === 0\n    );\n  }\n\n  get mustShowNoMessages(): boolean {\n    return (\n      !this.loading &&\n      this.resultsCount === 0 &&\n      (!this.args.search || this.lastSearchedText.length > 0)\n    );\n  }\n\n  get results(): any[] {\n    if (this.searchText.length > 0) {\n      if (this.args.search) {\n        return toPlainArray(this._searchResult || this.options);\n      } else {\n        if (\n          this._filterResultsCache.options === this.options &&\n          this._filterResultsCache.searchText === this.searchText\n        ) {\n          // This is an optimization to avoid filtering several times, which may be a bit expensive\n          // if there are many options, if neither the options nor the searchtext have changed\n          return this._filterResultsCache.results;\n        }\n        const results = this._filter(this.options, this.searchText);\n        // eslint-disable-next-line ember/no-side-effects\n        this._filterResultsCache = {\n          results,\n          options: this.options,\n          searchText: this.searchText,\n        };\n        return results;\n      }\n    } else {\n      return this.options;\n    }\n  }\n\n  get options(): any[] {\n    if (this._resolvedOptions) return toPlainArray(this._resolvedOptions);\n    if (this.args.options) {\n      return toPlainArray(this.args.options as any[]);\n    } else {\n      return [];\n    }\n  }\n\n  get resultsCount(): number {\n    return countOptions(this.results);\n  }\n\n  get selected(): any {\n    if (this._resolvedSelected) {\n      return toPlainArray(this._resolvedSelected);\n    } else if (\n      !isNone(this.args.selected) &&\n      typeof this.args.selected.then !== 'function'\n    ) {\n      return toPlainArray(this.args.selected);\n    }\n    return undefined;\n  }\n\n  get ariaMultiSelectable(): boolean {\n    return isArray(this.args.selected);\n  }\n\n  get triggerId(): string {\n    return this.args.triggerId || `${this._uid}-trigger`;\n  }\n\n  get labelId(): string {\n    return `${this._uid}-label`;\n  }\n\n  get ariaLabelledBy(): string | undefined {\n    if (this.args.ariaLabelledBy) {\n      return this.args.ariaLabelledBy;\n    }\n\n    if (this.args.labelText || this.args.labelComponent) {\n      return this.labelId;\n    }\n  }\n\n  get searchFieldPosition(): TSearchFieldPosition {\n    if (this.args.searchFieldPosition !== undefined) {\n      return this.args.searchFieldPosition;\n    }\n\n    if (this.args.multiple) {\n      return 'trigger';\n    }\n\n    return 'before-options';\n  }\n\n  get tabindex(): string | number {\n    if (this.args.multiple) {\n      if (this.args.triggerComponent === undefined && this.args.searchEnabled) {\n        return '-1';\n      } else {\n        return this.args.tabindex || '0';\n      }\n    }\n\n    if (\n      this.args.searchEnabled &&\n      this.args.tabindex === undefined &&\n      this.searchFieldPosition === 'trigger'\n    ) {\n      return '-1';\n    }\n\n    return this.args.tabindex || '0';\n  }\n\n  get buildSelection(): ((selected: any, select: Select) => any) | undefined {\n    if (this.args.buildSelection) {\n      return this.args.buildSelection;\n    }\n\n    if (this.args.multiple) {\n      return this._defaultMultipleBuildSelection;\n    }\n  }\n\n  // Actions\n  @action\n  handleOpen(_select: Select, e: Event): boolean | void {\n    if (this.args.onOpen && this.args.onOpen(this.storedAPI, e) === false) {\n      return false;\n    }\n\n    this.focusInput(this.storedAPI);\n\n    if (e) {\n      if (\n        e instanceof KeyboardEvent &&\n        e.type === 'keydown' &&\n        (e.keyCode === 38 || e.keyCode === 40)\n      ) {\n        e.preventDefault();\n      }\n    }\n    this._resetHighlighted();\n  }\n\n  @action\n  handleClose(_select: Select, e: Event): boolean | void {\n    if (this.args.onClose && this.args.onClose(this.storedAPI, e) === false) {\n      return false;\n    }\n    this._highlight(undefined);\n  }\n\n  @action\n  handleInput(e: InputEvent): void {\n    if (e.target === null) return;\n    const term = (e.target as HTMLInputElement).value;\n    let correctedTerm;\n    if (this.args.onInput) {\n      correctedTerm = this.args.onInput(term, this.storedAPI, e);\n      if (correctedTerm === false) {\n        return;\n      }\n    }\n    this._publicAPIActions.search(\n      typeof correctedTerm === 'string' ? correctedTerm : term,\n    );\n  }\n\n  @action\n  handleKeydown(e: KeyboardEvent) {\n    if (\n      this.args.onKeydown &&\n      this.args.onKeydown(this.storedAPI, e) === false\n    ) {\n      return false;\n    }\n\n    if (this.args.multiple && e.keyCode === 13 && this.storedAPI.isOpen) {\n      e.stopPropagation();\n      if (this.storedAPI.highlighted !== undefined) {\n        if (\n          !this.storedAPI.selected ||\n          this.storedAPI.selected.indexOf(this.storedAPI.highlighted) === -1\n        ) {\n          this.storedAPI.actions.choose(this.storedAPI.highlighted, e);\n          return false;\n        } else {\n          this.storedAPI.actions.close(e);\n          return false;\n        }\n      } else {\n        this.storedAPI.actions.close(e);\n        return false;\n      }\n    }\n\n    if (\n      this.searchFieldPosition === 'trigger' &&\n      !this.storedAPI.isOpen &&\n      e.keyCode !== 9 && // TAB\n      e.keyCode !== 13 && // ENTER\n      e.keyCode !== 27 // ESC\n    ) {\n      this.storedAPI.actions.open(e);\n    }\n    return this._routeKeydown(this.storedAPI, e);\n  }\n\n  @action\n  handleTriggerKeydown(e: KeyboardEvent) {\n    if (\n      this.args.onKeydown &&\n      this.args.onKeydown(this.storedAPI, e) === false\n    ) {\n      e.stopImmediatePropagation();\n      return;\n    }\n    if (e.ctrlKey || e.metaKey) {\n      e.stopImmediatePropagation();\n      return;\n    }\n    if ((e.keyCode >= 48 && e.keyCode <= 90) || isNumpadKeyEvent(e)) {\n      // Keys 0-9, a-z or numpad keys\n      this.triggerTypingTask.perform(e);\n    } else if (e.keyCode === 32) {\n      // Space\n      this._handleKeySpace(this.storedAPI, e);\n    } else {\n      return this._routeKeydown(this.storedAPI, e);\n    }\n  }\n\n  @action\n  _labelClick(event: MouseEvent) {\n    if (!this.storedAPI) {\n      return;\n    }\n\n    // Double-click, do nothing\n    if (event.detail > 1) {\n      return;\n    }\n\n    if (this.labelClickAction === 'open') {\n      this.storedAPI.actions.open();\n      return;\n    } else if (this.labelClickAction === 'focus') {\n      const trigger = this.storedAPI.actions.getTriggerElement();\n\n      if (!trigger) {\n        return;\n      }\n\n      trigger.focus();\n    }\n\n    return true;\n  }\n\n  @action\n  handleFocus(event: FocusEvent): void {\n    if (!this.isDestroying) {\n      Promise.resolve().then(() => {\n        this._updateIsActive(true);\n      });\n    }\n    if (this.searchFieldPosition === 'trigger') {\n      if (event.target) {\n        const target = event.target as HTMLElement;\n        const input = target.querySelector(\n          'input[type=\"search\"]',\n        ) as HTMLInputElement | null;\n        input?.focus();\n      }\n    }\n    if (this.args.onFocus) {\n      this.args.onFocus(this.storedAPI, event);\n    }\n  }\n\n  @action\n  handleBlur(event: FocusEvent): void {\n    if (!this.isDestroying) {\n      Promise.resolve().then(() => {\n        this._updateIsActive(false);\n      });\n    }\n    if (this.args.onBlur) {\n      this.args.onBlur(this.storedAPI, event);\n    }\n  }\n\n  // Methods\n  @action\n  _search(term: string): void {\n    if (this.searchText === term) return;\n    this.searchText = term;\n    if (!this.args.search) {\n      this.lastSearchedText = term;\n      this._resetHighlighted();\n    }\n  }\n\n  @action\n  _updateOptions(): void {\n    deprecate(\n      'You are using power-select with ember/render-modifier. Replace {{did-insert this._updateOptions @options}} and {{did-update this._updateOptions @options}} with {{this.updateOptions @options}}.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.no-at-ember-render-modifiers',\n        since: {\n          enabled: '8.1',\n          available: '8.1',\n        },\n        until: '9.0.0',\n      },\n    );\n\n    this.__updateOptions();\n  }\n\n  @action\n  _updateHighlighted(): void {\n    if (this.storedAPI.isOpen) {\n      this._resetHighlighted();\n    }\n  }\n\n  @action\n  _updateSelected(): void {\n    deprecate(\n      'You are using power-select with ember/render-modifier. Replace {{did-insert this._updateSelected @selected}} and {{did-update this._updateSelected @selected}} with {{this.updateSelected @selected}}.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.no-at-ember-render-modifiers',\n        since: {\n          enabled: '8.1',\n          available: '8.1',\n        },\n        until: '9.0.0',\n      },\n    );\n\n    this.__updateSelected();\n  }\n\n  _selectedObserverCallback(): void {\n    this._resolvedSelected = this._lastSelectedPromise;\n    this._highlight(this._resolvedSelected);\n  }\n\n  @action\n  _highlight(opt: any): void {\n    if (!isNone(opt) && opt.disabled) {\n      return;\n    }\n    this.highlighted = opt;\n  }\n\n  @action\n  _select(selected: any, e?: Event): void {\n    if (!isEqual(this.storedAPI.selected, selected)) {\n      this.args.onChange(selected, this.storedAPI, e);\n    }\n  }\n\n  @action\n  _choose(selected: any, e?: Event): void {\n    const buildSelection = this.buildSelection;\n    const selection = buildSelection\n      ? buildSelection(selected, this.storedAPI)\n      : selected;\n    this.storedAPI.actions.select(selection, e);\n    if (this.args.closeOnSelect !== false) {\n      this.storedAPI.actions.close(e);\n      if (this.searchFieldPosition === 'trigger') {\n        this.searchText = '';\n      }\n      // return false;\n    }\n  }\n\n  @action\n  _scrollTo(option: any): void {\n    const select = this.storedAPI;\n    if (!document || !option) {\n      return;\n    }\n    if (this.args.scrollTo) {\n      return this.args.scrollTo(option, select);\n    }\n\n    let root: Document | HTMLElement;\n\n    const triggerElement = select.actions.getTriggerElement();\n    if (triggerElement && triggerElement.getRootNode() instanceof ShadowRoot) {\n      root = triggerElement.getRootNode() as HTMLElement;\n    } else {\n      root = document;\n    }\n\n    const optionsList = root.querySelector(\n      `#ember-power-select-options-${select.uniqueId}`,\n    ) as HTMLElement;\n    if (!optionsList) {\n      return;\n    }\n    const index = indexOfOption(select.results, option);\n    if (index === -1) {\n      return;\n    }\n    const optionElement = optionsList.querySelector(\n      `[data-option-index='${index}']`,\n    ) as HTMLElement;\n    if (!optionElement) {\n      return;\n    }\n    const optionTopScroll = optionElement.offsetTop - optionsList.offsetTop;\n    const optionBottomScroll = optionTopScroll + optionElement.offsetHeight;\n    if (optionBottomScroll > optionsList.offsetHeight + optionsList.scrollTop) {\n      optionsList.scrollTop = optionBottomScroll - optionsList.offsetHeight;\n    } else if (optionTopScroll < optionsList.scrollTop) {\n      optionsList.scrollTop = optionTopScroll;\n    }\n  }\n\n  @action\n  _registerAPI(triggerElement: Element, [publicAPI]: [Select]): void {\n    deprecate(\n      'You are using power-select with ember/render-modifier. Replace {{did-insert this._registerAPI publicAPI}} and {{did-update this._registerAPI publicAPI}} with {{this.updateRegisterAPI publicAPI}}.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.no-at-ember-render-modifiers',\n        since: {\n          enabled: '8.1',\n          available: '8.1',\n        },\n        until: '9.0.0',\n      },\n    );\n\n    this.__registerAPI(triggerElement, [publicAPI]);\n  }\n\n  @action\n  _performSearch(triggerElement: Element, [term]: [string]): void {\n    deprecate(\n      'You are using power-select with ember/render-modifier. Replace {{did-update this._performSearch this.searchText}} with {{this.updatePerformSearch this.searchText}}.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.no-at-ember-render-modifiers',\n        since: {\n          enabled: '8.1',\n          available: '8.1',\n        },\n        until: '9.0.0',\n      },\n    );\n\n    this.__performSearch(triggerElement, [term]);\n  }\n\n  updateOptions = modifier(\n    () => {\n      this.__updateOptions();\n    },\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    { eager: false },\n  );\n\n  updateSelected = modifier(\n    () => {\n      this.__updateSelected();\n    },\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    { eager: false },\n  );\n\n  updateRegisterAPI = modifier(\n    (triggerElement: Element, [publicAPI]: [Select]) => {\n      this.__registerAPI(triggerElement, [publicAPI]);\n    },\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    { eager: false },\n  );\n\n  updatePerformSearch = modifier(\n    (triggerElement: Element, [term]: [string]) => {\n      this.__performSearch(triggerElement, [term]);\n    },\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    { eager: false },\n  );\n\n  private __updateOptions() {\n    if (!this.args.options) return;\n    if (isPromiseLike(this.args.options)) {\n      if (this._lastOptionsPromise === this.args.options) return; // promise is still the same\n      const currentOptionsPromise = this.args.options;\n      this._lastOptionsPromise = currentOptionsPromise;\n      this.loading = true;\n      this._lastOptionsPromise\n        .then((resolvedOptions) => {\n          if (this._lastOptionsPromise === currentOptionsPromise) {\n            this.loading = false;\n            this._resolvedOptions = resolvedOptions;\n            this._resetHighlighted();\n          }\n        })\n        .catch(() => {\n          if (this._lastOptionsPromise === currentOptionsPromise) {\n            this.loading = false;\n          }\n        });\n    } else {\n      Promise.resolve().then(() => {\n        this._resetHighlighted();\n      });\n    }\n  }\n\n  private __updateSelected(): void {\n    if (isNone(this.args.selected)) return;\n    if (typeof this.args.selected.then === 'function') {\n      if (this._lastSelectedPromise === this.args.selected) return; // promise is still the same\n      if (\n        this._lastSelectedPromise &&\n        isPromiseProxyLike(this._lastSelectedPromise)\n      ) {\n        removeObserver(\n          this._lastSelectedPromise,\n          'content',\n          this,\n          this._selectedObserverCallback,\n        );\n      }\n\n      const currentSelectedPromise: PromiseProxy<any> = this.args.selected;\n      currentSelectedPromise.then(() => {\n        if (this.isDestroyed || this.isDestroying) return;\n        if (isPromiseProxyLike(currentSelectedPromise)) {\n          // eslint-disable-next-line ember/no-observers\n          addObserver(\n            currentSelectedPromise,\n            'content',\n            this,\n            this._selectedObserverCallback,\n          );\n        }\n      });\n\n      this._lastSelectedPromise = currentSelectedPromise;\n      this._lastSelectedPromise.then((resolvedSelected) => {\n        if (this._lastSelectedPromise === currentSelectedPromise) {\n          this._resolvedSelected = resolvedSelected;\n          this._highlight(resolvedSelected);\n        }\n      });\n    } else {\n      this._resolvedSelected = undefined;\n      // Don't highlight args.selected array on multi-select\n      if (!Array.isArray(this.args.selected)) {\n        this._highlight(this.args.selected);\n      }\n    }\n  }\n\n  private __registerAPI(_: Element, [publicAPI]: [Select]): void {\n    this.storedAPI = publicAPI;\n    if (this.args.registerAPI) {\n      Promise.resolve().then(() => {\n        if (this.args.registerAPI) {\n          this.args.registerAPI(publicAPI);\n        }\n      });\n    }\n  }\n\n  private __performSearch(_: Element, [term]: [string]): void {\n    if (!this.args.search) return;\n    if (term === '') {\n      this.loading = false;\n      this.lastSearchedText = term;\n      if (this._lastSearchPromise !== undefined) {\n        if (isCancellablePromise(this._lastSearchPromise)) {\n          this._lastSearchPromise.cancel(); // Cancel ember-concurrency tasks\n        }\n        this._lastSearchPromise = undefined;\n      }\n      return;\n    }\n    const searchResult = this.args.search(term, this.storedAPI);\n    if (searchResult && isPromiseLike(searchResult)) {\n      this.loading = true;\n      if (\n        this._lastSearchPromise !== undefined &&\n        isCancellablePromise(this._lastSearchPromise)\n      ) {\n        this._lastSearchPromise.cancel(); // Cancel ember-concurrency tasks\n      }\n      this._lastSearchPromise = searchResult;\n      searchResult\n        .then((results) => {\n          if (this._lastSearchPromise === searchResult) {\n            this._searchResult = results;\n            this.loading = false;\n            this.lastSearchedText = term;\n            Promise.resolve().then(() => {\n              this._resetHighlighted();\n            });\n          }\n        })\n        .catch(() => {\n          if (this._lastSearchPromise === searchResult) {\n            this.loading = false;\n            this.lastSearchedText = term;\n          }\n        });\n    } else {\n      this.lastSearchedText = term;\n      this._searchResult = searchResult;\n      Promise.resolve().then(() => {\n        this._resetHighlighted();\n      });\n    }\n  }\n\n  _defaultBuildSelection(option: any): any {\n    return option;\n  }\n\n  @action\n  private _defaultMultipleBuildSelection(option: any, select: Select): any[] {\n    if (!this.args.multiple) {\n      throw new Error(\n        'The _defaultMultipleBuildSelection is only allowed for multiple',\n      );\n    }\n\n    const newSelection = Array.isArray(select.selected)\n      ? select.selected.slice(0)\n      : [];\n    let idx = -1;\n    for (let i = 0; i < newSelection.length; i++) {\n      if (isEqual(newSelection[i], option)) {\n        idx = i;\n        break;\n      }\n    }\n    if (idx > -1) {\n      newSelection.splice(idx, 1);\n    } else {\n      newSelection.push(option);\n    }\n    return newSelection;\n  }\n\n  focusInput(select: Select) {\n    if (select) {\n      const triggerElement = select.actions.getTriggerElement();\n      let root: Document | HTMLElement;\n\n      if (\n        triggerElement &&\n        triggerElement.getRootNode() instanceof ShadowRoot\n      ) {\n        root = triggerElement.getRootNode() as HTMLElement;\n      } else {\n        root = document;\n      }\n\n      const input = root.querySelector(\n        `#ember-power-select-trigger-input-${select.uniqueId}`,\n      ) as HTMLElement;\n\n      if (input) {\n        input.focus();\n      }\n    }\n  }\n\n  _routeKeydown(select: Select, e: KeyboardEvent): boolean | void {\n    if (e.keyCode === 38 || e.keyCode === 40) {\n      // Up & Down\n      return this._handleKeyUpDown(select, e);\n    } else if (e.keyCode === 13) {\n      // ENTER\n      return this._handleKeyEnter(select, e);\n    } else if (e.keyCode === 9) {\n      // Tab\n      return this._handleKeyTab(select, e);\n    } else if (e.keyCode === 27) {\n      // ESC\n      return this._handleKeyESC(select, e);\n    }\n  }\n\n  _handleKeyTab(select: Select, e: KeyboardEvent): void {\n    select.actions.close(e);\n  }\n\n  _handleKeyESC(select: Select, e: KeyboardEvent): void {\n    select.actions.close(e);\n  }\n\n  _handleKeyEnter(select: Select, e: KeyboardEvent): boolean | void {\n    if (select.isOpen && select.highlighted !== undefined) {\n      select.actions.choose(select.highlighted, e);\n      e.stopImmediatePropagation();\n      return false;\n    }\n  }\n\n  _handleKeySpace(select: Select, e: KeyboardEvent): void {\n    if (\n      e.target !== null &&\n      ['TEXTAREA', 'INPUT'].includes((e.target as Element).nodeName)\n    ) {\n      e.stopImmediatePropagation();\n    } else if (select.isOpen && select.highlighted !== undefined) {\n      e.stopImmediatePropagation();\n      e.preventDefault(); // Prevents scrolling of the page.\n      select.actions.choose(select.highlighted, e);\n    }\n  }\n\n  _handleKeyUpDown(select: Select, e: KeyboardEvent): void {\n    if (select.isOpen) {\n      e.preventDefault();\n      e.stopPropagation();\n      const step: 1 | -1 = e.keyCode === 40 ? 1 : -1;\n      const newHighlighted = advanceSelectableOption(\n        select.results,\n        select.highlighted,\n        step,\n      );\n      select.actions.highlight(newHighlighted);\n      select.actions.scrollTo(newHighlighted);\n    } else {\n      select.actions.open(e);\n    }\n  }\n\n  _resetHighlighted(): void {\n    let highlighted;\n    const defHighlighted = this.args.defaultHighlighted || defaultHighlighted;\n    if (typeof defHighlighted === 'function') {\n      highlighted = defHighlighted({\n        results: this.results,\n        highlighted: this.highlighted,\n        selected: this.selected,\n      });\n    } else {\n      highlighted = defHighlighted;\n    }\n    this._highlight(highlighted);\n  }\n\n  _filter(options: any[], term: string, skipDisabled = false): any[] {\n    const matcher = this.args.matcher || defaultMatcher;\n    const optionMatcher = getOptionMatcher(\n      matcher,\n      defaultMatcher,\n      this.args.searchField,\n    );\n    return filterOptions(options || [], term, optionMatcher, skipDisabled);\n  }\n\n  _updateIsActive(value: boolean) {\n    this.isActive = value;\n  }\n\n  findWithOffset(\n    options: readonly any[],\n    term: string,\n    offset: number,\n    skipDisabled = false,\n  ): any {\n    const typeAheadOptionMatcher = getOptionMatcher(\n      this.args.typeAheadOptionMatcher || defaultTypeAheadMatcher,\n      defaultTypeAheadMatcher,\n      this.args.searchField,\n    );\n    return findOptionWithOffset(\n      options || [],\n      term,\n      typeAheadOptionMatcher,\n      offset,\n      skipDisabled,\n    );\n  }\n\n  // Tasks\n  triggerTypingTask = restartableTask(async (e: KeyboardEvent) => {\n    // In general, a user doing this interaction means to have a different result.\n    let searchStartOffset = 1;\n    let repeatingChar = this._repeatingChar;\n    let charCode = e.keyCode;\n    if (isNumpadKeyEvent(e)) {\n      charCode -= 48; // Adjust char code offset for Numpad key codes. Check here for numapd key code behavior: https://goo.gl/Qwc9u4\n    }\n    let term;\n\n    // Check if user intends to cycle through results. _repeatingChar can only be the first character.\n    const c = String.fromCharCode(charCode);\n    if (c === this._repeatingChar) {\n      term = c;\n    } else {\n      term = this._expirableSearchText + c;\n    }\n\n    if (term.length > 1) {\n      // If the term is longer than one char, the user is in the middle of a non-cycling interaction\n      // so the offset is just zero (the current selection is a valid match).\n      searchStartOffset = 0;\n      repeatingChar = '';\n    } else {\n      repeatingChar = c;\n    }\n\n    // When the select is open, the \"selection\" is just highlighted.\n    if (this.storedAPI.isOpen && this.storedAPI.highlighted) {\n      searchStartOffset += indexOfOption(\n        this.storedAPI.options,\n        this.storedAPI.highlighted,\n      );\n    } else if (!this.storedAPI.isOpen && !isNone(this.selected)) {\n      searchStartOffset += indexOfOption(this.storedAPI.options, this.selected);\n    } else {\n      searchStartOffset = 0;\n    }\n\n    // The char is always appended. That way, searching for words like \"Aaron\" will work even\n    // if \"Aa\" would cycle through the results.\n    this._expirableSearchText = this._expirableSearchText + c;\n    this._repeatingChar = repeatingChar;\n    let match = this.findWithOffset(\n      this.storedAPI.options,\n      term,\n      searchStartOffset,\n      true,\n    );\n    if (match !== undefined) {\n      if (this.storedAPI.isOpen) {\n        this.storedAPI.actions.highlight(match);\n        this.storedAPI.actions.scrollTo(match);\n      } else {\n        if (this.args.multiple || this.args.legacyMultiple) {\n          match = [match];\n        }\n        this.storedAPI.actions.select(match, e);\n      }\n    }\n    await timeout(1000);\n    this._expirableSearchText = '';\n    this._repeatingChar = '';\n  });\n}\n\nfunction getOptionMatcher(\n  matcher: MatcherFn,\n  defaultMatcher: MatcherFn,\n  searchField: string | undefined,\n): MatcherFn {\n  if (searchField && matcher === defaultMatcher) {\n    return (option: any, text: string) =>\n      matcher(get(option, searchField), text);\n  } else {\n    return (option: any, text: string) => {\n      assert(\n        '<PowerSelect> If you want the default filtering to work on options that are not plain strings, you need to provide `@searchField`',\n        matcher !== defaultMatcher || typeof option === 'string',\n      );\n      return matcher(option, text);\n    };\n  }\n}\n\nfunction isNumpadKeyEvent(e: KeyboardEvent): boolean {\n  return e.keyCode >= 96 && e.keyCode <= 105;\n}\n\nconst toPlainArray = <T>(collection: T[] | Sliceable<T>): T[] => {\n  if (isSliceable<T>(collection)) {\n    return collection.slice();\n  } else {\n    return collection;\n  }\n};\n","import { DEBUG_BUILD } from '../debug-build';\nimport { addGlobalErrorInstrumentationHandler } from '../utils-hoist/instrument/globalError';\nimport { addGlobalUnhandledRejectionInstrumentationHandler } from '../utils-hoist/instrument/globalUnhandledRejection';\nimport { logger } from '../utils-hoist/logger';\nimport { getActiveSpan, getRootSpan } from '../utils/spanUtils';\nimport { SPAN_STATUS_ERROR } from './spanstatus';\n\nlet errorsInstrumented = false;\n\n/**  Only exposed for testing */\nexport function _resetErrorsInstrumented(): void {\n  errorsInstrumented = false;\n}\n\n/**\n * Ensure that global errors automatically set the active span status.\n */\nexport function registerSpanErrorInstrumentation(): void {\n  if (errorsInstrumented) {\n    return;\n  }\n\n  errorsInstrumented = true;\n  addGlobalErrorInstrumentationHandler(errorCallback);\n  addGlobalUnhandledRejectionInstrumentationHandler(errorCallback);\n}\n\n/**\n * If an error or unhandled promise occurs, we mark the active root span as failed\n */\nfunction errorCallback(): void {\n  const activeSpan = getActiveSpan();\n  const rootSpan = activeSpan && getRootSpan(activeSpan);\n  if (rootSpan) {\n    const message = 'internal_error';\n    DEBUG_BUILD && logger.log(`[Tracing] Root span: ${message} -> Global error occurred`);\n    rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message });\n  }\n}\n\n// The function name will be lost when bundling but we need to be able to identify this listener later to maintain the\n// node.js default exit behaviour\nerrorCallback.tag = 'sentry_tracingErrorCallback';\n","import type { HandlerDataError } from '../../types-hoist';\n\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers';\n\nlet _oldOnErrorHandler: (typeof GLOBAL_OBJ)['onerror'] | null = null;\n\n/**\n * Add an instrumentation handler for when an error is captured by the global error handler.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addGlobalErrorInstrumentationHandler(handler: (data: HandlerDataError) => void): void {\n  const type = 'error';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentError);\n}\n\nfunction instrumentError(): void {\n  _oldOnErrorHandler = GLOBAL_OBJ.onerror;\n\n  // Note: The reason we are doing window.onerror instead of window.addEventListener('error')\n  // is that we are using this handler in the Loader Script, to handle buffered errors consistently\n  GLOBAL_OBJ.onerror = function (\n    msg: string | object,\n    url?: string,\n    line?: number,\n    column?: number,\n    error?: Error,\n  ): boolean {\n    const handlerData: HandlerDataError = {\n      column,\n      error,\n      line,\n      msg,\n      url,\n    };\n    triggerHandlers('error', handlerData);\n\n    if (_oldOnErrorHandler) {\n      // eslint-disable-next-line prefer-rest-params\n      return _oldOnErrorHandler.apply(this, arguments);\n    }\n\n    return false;\n  };\n\n  GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = true;\n}\n","import type { HandlerDataUnhandledRejection } from '../../types-hoist';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers';\n\nlet _oldOnUnhandledRejectionHandler: (typeof GLOBAL_OBJ)['onunhandledrejection'] | null = null;\n\n/**\n * Add an instrumentation handler for when an unhandled promise rejection is captured.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addGlobalUnhandledRejectionInstrumentationHandler(\n  handler: (data: HandlerDataUnhandledRejection) => void,\n): void {\n  const type = 'unhandledrejection';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentUnhandledRejection);\n}\n\nfunction instrumentUnhandledRejection(): void {\n  _oldOnUnhandledRejectionHandler = GLOBAL_OBJ.onunhandledrejection;\n\n  // Note: The reason we are doing window.onunhandledrejection instead of window.addEventListener('unhandledrejection')\n  // is that we are using this handler in the Loader Script, to handle buffered rejections consistently\n  GLOBAL_OBJ.onunhandledrejection = function (e: unknown): boolean {\n    const handlerData: HandlerDataUnhandledRejection = e;\n    triggerHandlers('unhandledrejection', handlerData);\n\n    if (_oldOnUnhandledRejectionHandler) {\n      // eslint-disable-next-line prefer-rest-params\n      return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n    }\n\n    return true;\n  };\n\n  GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true;\n}\n","import { getGlobalSingleton } from './carrier';\nimport { Scope } from './scope';\n\n/** Get the default current scope. */\nexport function getDefaultCurrentScope(): Scope {\n  return getGlobalSingleton('defaultCurrentScope', () => new Scope());\n}\n\n/** Get the default isolation scope. */\nexport function getDefaultIsolationScope(): Scope {\n  return getGlobalSingleton('defaultIsolationScope', () => new Scope());\n}\n","import { isString } from './is';\nimport { GLOBAL_OBJ } from './worldwide';\n\nconst WINDOW = GLOBAL_OBJ as unknown as Window;\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\n\ntype SimpleNode = {\n  parentNode: SimpleNode;\n} | null;\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nexport function htmlTreeAsString(\n  elem: unknown,\n  options: string[] | { keyAttrs?: string[]; maxStringLength?: number } = {},\n): string {\n  if (!elem) {\n    return '<unknown>';\n  }\n\n  // try/catch both:\n  // - accessing event.target (see getsentry/raven-js#838, #768)\n  // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n  // - can throw an exception in some circumstances.\n  try {\n    let currentElem = elem as SimpleNode;\n    const MAX_TRAVERSE_HEIGHT = 5;\n    const out = [];\n    let height = 0;\n    let len = 0;\n    const separator = ' > ';\n    const sepLength = separator.length;\n    let nextStr;\n    const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n    const maxStringLength = (!Array.isArray(options) && options.maxStringLength) || DEFAULT_MAX_STRING_LENGTH;\n\n    while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n      nextStr = _htmlElementAsString(currentElem, keyAttrs);\n      // bail out if\n      // - nextStr is the 'html' element\n      // - the length of the string that would be created exceeds maxStringLength\n      //   (ignore this limit if we are on the first iteration)\n      if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength)) {\n        break;\n      }\n\n      out.push(nextStr);\n\n      len += nextStr.length;\n      currentElem = currentElem.parentNode;\n    }\n\n    return out.reverse().join(separator);\n  } catch (_oO) {\n    return '<unknown>';\n  }\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el: unknown, keyAttrs?: string[]): string {\n  const elem = el as {\n    tagName?: string;\n    id?: string;\n    className?: string;\n    getAttribute(key: string): string;\n  };\n\n  const out = [];\n\n  if (!elem?.tagName) {\n    return '';\n  }\n\n  // @ts-expect-error WINDOW has HTMLElement\n  if (WINDOW.HTMLElement) {\n    // If using the component name annotation plugin, this value may be available on the DOM node\n    if (elem instanceof HTMLElement && elem.dataset) {\n      if (elem.dataset['sentryComponent']) {\n        return elem.dataset['sentryComponent'];\n      }\n      if (elem.dataset['sentryElement']) {\n        return elem.dataset['sentryElement'];\n      }\n    }\n  }\n\n  out.push(elem.tagName.toLowerCase());\n\n  // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n  const keyAttrPairs = keyAttrs?.length\n    ? keyAttrs.filter(keyAttr => elem.getAttribute(keyAttr)).map(keyAttr => [keyAttr, elem.getAttribute(keyAttr)])\n    : null;\n\n  if (keyAttrPairs?.length) {\n    keyAttrPairs.forEach(keyAttrPair => {\n      out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n    });\n  } else {\n    if (elem.id) {\n      out.push(`#${elem.id}`);\n    }\n\n    const className = elem.className;\n    if (className && isString(className)) {\n      const classes = className.split(/\\s+/);\n      for (const c of classes) {\n        out.push(`.${c}`);\n      }\n    }\n  }\n  const allowedAttrs = ['aria-label', 'type', 'name', 'title', 'alt'];\n  for (const k of allowedAttrs) {\n    const attr = elem.getAttribute(k);\n    if (attr) {\n      out.push(`[${k}=\"${attr}\"]`);\n    }\n  }\n\n  return out.join('');\n}\n\n/**\n * A safe form of location.href\n */\nexport function getLocationHref(): string {\n  try {\n    return WINDOW.document.location.href;\n  } catch (oO) {\n    return '';\n  }\n}\n\n/**\n * Given a DOM element, traverses up the tree until it finds the first ancestor node\n * that has the `data-sentry-component` or `data-sentry-element` attribute with `data-sentry-component` taking\n * precedence. This attribute is added at build-time by projects that have the component name annotation plugin installed.\n *\n * @returns a string representation of the component for the provided DOM element, or `null` if not found\n */\nexport function getComponentName(elem: unknown): string | null {\n  // @ts-expect-error WINDOW has HTMLElement\n  if (!WINDOW.HTMLElement) {\n    return null;\n  }\n\n  let currentElem = elem as SimpleNode;\n  const MAX_TRAVERSE_HEIGHT = 5;\n  for (let i = 0; i < MAX_TRAVERSE_HEIGHT; i++) {\n    if (!currentElem) {\n      return null;\n    }\n\n    if (currentElem instanceof HTMLElement) {\n      if (currentElem.dataset['sentryComponent']) {\n        return currentElem.dataset['sentryComponent'];\n      }\n      if (currentElem.dataset['sentryElement']) {\n        return currentElem.dataset['sentryElement'];\n      }\n    }\n\n    currentElem = currentElem.parentNode;\n  }\n\n  return null;\n}\n","import { isThenable } from '../utils-hoist/is';\n\n/**\n * Wrap a callback function with error handling.\n * If an error is thrown, it will be passed to the `onError` callback and re-thrown.\n *\n * If the return value of the function is a promise, it will be handled with `maybeHandlePromiseRejection`.\n *\n * If an `onFinally` callback is provided, this will be called when the callback has finished\n * - so if it returns a promise, once the promise resolved/rejected,\n * else once the callback has finished executing.\n * The `onFinally` callback will _always_ be called, no matter if an error was thrown or not.\n */\nexport function handleCallbackErrors<\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  Fn extends () => any,\n>(\n  fn: Fn,\n  onError: (error: unknown) => void,\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onFinally: () => void = () => {},\n): ReturnType<Fn> {\n  let maybePromiseResult: ReturnType<Fn>;\n  try {\n    maybePromiseResult = fn();\n  } catch (e) {\n    onError(e);\n    onFinally();\n    throw e;\n  }\n\n  return maybeHandlePromiseRejection(maybePromiseResult, onError, onFinally);\n}\n\n/**\n * Maybe handle a promise rejection.\n * This expects to be given a value that _may_ be a promise, or any other value.\n * If it is a promise, and it rejects, it will call the `onError` callback.\n * Other than this, it will generally return the given value as-is.\n */\nfunction maybeHandlePromiseRejection<MaybePromise>(\n  value: MaybePromise,\n  onError: (error: unknown) => void,\n  onFinally: () => void,\n): MaybePromise {\n  if (isThenable(value)) {\n    // @ts-expect-error - the isThenable check returns the \"wrong\" type here\n    return value.then(\n      res => {\n        onFinally();\n        return res;\n      },\n      e => {\n        onError(e);\n        onFinally();\n        throw e;\n      },\n    );\n  }\n\n  onFinally();\n  return value;\n}\n","import type { Options, SamplingContext } from '../types-hoist';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { logger } from '../utils-hoist/logger';\nimport { hasSpansEnabled } from '../utils/hasSpansEnabled';\nimport { parseSampleRate } from '../utils/parseSampleRate';\n\n/**\n * Makes a sampling decision for the given options.\n *\n * Called every time a root span is created. Only root spans which emerge with a `sampled` value of `true` will be\n * sent to Sentry.\n */\nexport function sampleSpan(\n  options: Pick<Options, 'tracesSampleRate' | 'tracesSampler'>,\n  samplingContext: SamplingContext,\n  sampleRand: number,\n): [sampled: boolean, sampleRate?: number, localSampleRateWasApplied?: boolean] {\n  // nothing to do if span recording is not enabled\n  if (!hasSpansEnabled(options)) {\n    return [false];\n  }\n\n  let localSampleRateWasApplied = undefined;\n\n  // we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` were defined, so one of these should\n  // work; prefer the hook if so\n  let sampleRate;\n  if (typeof options.tracesSampler === 'function') {\n    sampleRate = options.tracesSampler({\n      ...samplingContext,\n      inheritOrSampleWith: fallbackSampleRate => {\n        // If we have an incoming parent sample rate, we'll just use that one.\n        // The sampling decision will be inherited because of the sample_rand that was generated when the trace reached the incoming boundaries of the SDK.\n        if (typeof samplingContext.parentSampleRate === 'number') {\n          return samplingContext.parentSampleRate;\n        }\n\n        // Fallback if parent sample rate is not on the incoming trace (e.g. if there is no baggage)\n        // This is to provide backwards compatibility if there are incoming traces from older SDKs that don't send a parent sample rate or a sample rand. In these cases we just want to force either a sampling decision on the downstream traces via the sample rate.\n        if (typeof samplingContext.parentSampled === 'boolean') {\n          return Number(samplingContext.parentSampled);\n        }\n\n        return fallbackSampleRate;\n      },\n    });\n    localSampleRateWasApplied = true;\n  } else if (samplingContext.parentSampled !== undefined) {\n    sampleRate = samplingContext.parentSampled;\n  } else if (typeof options.tracesSampleRate !== 'undefined') {\n    sampleRate = options.tracesSampleRate;\n    localSampleRateWasApplied = true;\n  }\n\n  // Since this is coming from the user (or from a function provided by the user), who knows what we might get.\n  // (The only valid values are booleans or numbers between 0 and 1.)\n  const parsedSampleRate = parseSampleRate(sampleRate);\n\n  if (parsedSampleRate === undefined) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `[Tracing] Discarding root span because of invalid sample rate. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n          sampleRate,\n        )} of type ${JSON.stringify(typeof sampleRate)}.`,\n      );\n    return [false];\n  }\n\n  // if the function returned 0 (or false), or if `tracesSampleRate` is 0, it's a sign the transaction should be dropped\n  if (!parsedSampleRate) {\n    DEBUG_BUILD &&\n      logger.log(\n        `[Tracing] Discarding transaction because ${\n          typeof options.tracesSampler === 'function'\n            ? 'tracesSampler returned 0 or false'\n            : 'a negative sampling decision was inherited or tracesSampleRate is set to 0'\n        }`,\n      );\n    return [false, parsedSampleRate, localSampleRateWasApplied];\n  }\n\n  // We always compare the sample rand for the current execution context against the chosen sample rate.\n  // Read more: https://develop.sentry.dev/sdk/telemetry/traces/#propagated-random-value\n  const shouldSample = sampleRand < parsedSampleRate;\n\n  // if we're not going to keep it, we're done\n  if (!shouldSample) {\n    DEBUG_BUILD &&\n      logger.log(\n        `[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(\n          sampleRate,\n        )})`,\n      );\n  }\n\n  return [shouldSample, parsedSampleRate, localSampleRateWasApplied];\n}\n","import { getClient, getCurrentScope } from '../currentScopes';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { createSpanEnvelope } from '../envelope';\nimport {\n  SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME,\n  SEMANTIC_ATTRIBUTE_PROFILE_ID,\n  SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n} from '../semanticAttributes';\nimport type {\n  SentrySpanArguments,\n  Span,\n  SpanAttributeValue,\n  SpanAttributes,\n  SpanContextData,\n  SpanEnvelope,\n  SpanJSON,\n  SpanOrigin,\n  SpanStatus,\n  SpanTimeInput,\n  TimedEvent,\n  TransactionEvent,\n  TransactionSource,\n} from '../types-hoist';\nimport type { SpanLink } from '../types-hoist/link';\nimport { logger } from '../utils-hoist/logger';\nimport { dropUndefinedKeys } from '../utils-hoist/object';\nimport { generateSpanId, generateTraceId } from '../utils-hoist/propagationContext';\nimport { timestampInSeconds } from '../utils-hoist/time';\nimport {\n  TRACE_FLAG_NONE,\n  TRACE_FLAG_SAMPLED,\n  convertSpanLinksForEnvelope,\n  getRootSpan,\n  getSpanDescendants,\n  getStatusMessage,\n  spanTimeInputToSeconds,\n  spanToJSON,\n  spanToTransactionTraceContext,\n} from '../utils/spanUtils';\nimport { getDynamicSamplingContextFromSpan } from './dynamicSamplingContext';\nimport { logSpanEnd } from './logSpans';\nimport { timedEventsToMeasurements } from './measurement';\nimport { getCapturedScopesOnSpan } from './utils';\n\nconst MAX_SPAN_COUNT = 1000;\n\n/**\n * Span contains all data about a span\n */\nexport class SentrySpan implements Span {\n  protected _traceId: string;\n  protected _spanId: string;\n  protected _parentSpanId?: string | undefined;\n  protected _sampled: boolean | undefined;\n  protected _name?: string | undefined;\n  protected _attributes: SpanAttributes;\n  protected _links?: SpanLink[];\n  /** Epoch timestamp in seconds when the span started. */\n  protected _startTime: number;\n  /** Epoch timestamp in seconds when the span ended. */\n  protected _endTime?: number | undefined;\n  /** Internal keeper of the status */\n  protected _status?: SpanStatus;\n  /** The timed events added to this span. */\n  protected _events: TimedEvent[];\n\n  /** if true, treat span as a standalone span (not part of a transaction) */\n  private _isStandaloneSpan?: boolean;\n\n  /**\n   * You should never call the constructor manually, always use `Sentry.startSpan()`\n   * or other span methods.\n   * @internal\n   * @hideconstructor\n   * @hidden\n   */\n  public constructor(spanContext: SentrySpanArguments = {}) {\n    this._traceId = spanContext.traceId || generateTraceId();\n    this._spanId = spanContext.spanId || generateSpanId();\n    this._startTime = spanContext.startTimestamp || timestampInSeconds();\n    this._links = spanContext.links;\n\n    this._attributes = {};\n    this.setAttributes({\n      [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'manual',\n      [SEMANTIC_ATTRIBUTE_SENTRY_OP]: spanContext.op,\n      ...spanContext.attributes,\n    });\n\n    this._name = spanContext.name;\n\n    if (spanContext.parentSpanId) {\n      this._parentSpanId = spanContext.parentSpanId;\n    }\n    // We want to include booleans as well here\n    if ('sampled' in spanContext) {\n      this._sampled = spanContext.sampled;\n    }\n    if (spanContext.endTimestamp) {\n      this._endTime = spanContext.endTimestamp;\n    }\n\n    this._events = [];\n\n    this._isStandaloneSpan = spanContext.isStandalone;\n\n    // If the span is already ended, ensure we finalize the span immediately\n    if (this._endTime) {\n      this._onSpanEnded();\n    }\n  }\n\n  /** @inheritDoc */\n  public addLink(link: SpanLink): this {\n    if (this._links) {\n      this._links.push(link);\n    } else {\n      this._links = [link];\n    }\n    return this;\n  }\n\n  /** @inheritDoc */\n  public addLinks(links: SpanLink[]): this {\n    if (this._links) {\n      this._links.push(...links);\n    } else {\n      this._links = links;\n    }\n    return this;\n  }\n\n  /**\n   * This should generally not be used,\n   * but it is needed for being compliant with the OTEL Span interface.\n   *\n   * @hidden\n   * @internal\n   */\n  public recordException(_exception: unknown, _time?: number | undefined): void {\n    // noop\n  }\n\n  /** @inheritdoc */\n  public spanContext(): SpanContextData {\n    const { _spanId: spanId, _traceId: traceId, _sampled: sampled } = this;\n    return {\n      spanId,\n      traceId,\n      traceFlags: sampled ? TRACE_FLAG_SAMPLED : TRACE_FLAG_NONE,\n    };\n  }\n\n  /** @inheritdoc */\n  public setAttribute(key: string, value: SpanAttributeValue | undefined): this {\n    if (value === undefined) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._attributes[key];\n    } else {\n      this._attributes[key] = value;\n    }\n\n    return this;\n  }\n\n  /** @inheritdoc */\n  public setAttributes(attributes: SpanAttributes): this {\n    Object.keys(attributes).forEach(key => this.setAttribute(key, attributes[key]));\n    return this;\n  }\n\n  /**\n   * This should generally not be used,\n   * but we need it for browser tracing where we want to adjust the start time afterwards.\n   * USE THIS WITH CAUTION!\n   *\n   * @hidden\n   * @internal\n   */\n  public updateStartTime(timeInput: SpanTimeInput): void {\n    this._startTime = spanTimeInputToSeconds(timeInput);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setStatus(value: SpanStatus): this {\n    this._status = value;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public updateName(name: string): this {\n    this._name = name;\n    this.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, 'custom');\n    return this;\n  }\n\n  /** @inheritdoc */\n  public end(endTimestamp?: SpanTimeInput): void {\n    // If already ended, skip\n    if (this._endTime) {\n      return;\n    }\n\n    this._endTime = spanTimeInputToSeconds(endTimestamp);\n    logSpanEnd(this);\n\n    this._onSpanEnded();\n  }\n\n  /**\n   * Get JSON representation of this span.\n   *\n   * @hidden\n   * @internal This method is purely for internal purposes and should not be used outside\n   * of SDK code. If you need to get a JSON representation of a span,\n   * use `spanToJSON(span)` instead.\n   */\n  public getSpanJSON(): SpanJSON {\n    return dropUndefinedKeys({\n      data: this._attributes,\n      description: this._name,\n      op: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP],\n      parent_span_id: this._parentSpanId,\n      span_id: this._spanId,\n      start_timestamp: this._startTime,\n      status: getStatusMessage(this._status),\n      timestamp: this._endTime,\n      trace_id: this._traceId,\n      origin: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] as SpanOrigin | undefined,\n      profile_id: this._attributes[SEMANTIC_ATTRIBUTE_PROFILE_ID] as string | undefined,\n      exclusive_time: this._attributes[SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME] as number | undefined,\n      measurements: timedEventsToMeasurements(this._events),\n      is_segment: (this._isStandaloneSpan && getRootSpan(this) === this) || undefined,\n      segment_id: this._isStandaloneSpan ? getRootSpan(this).spanContext().spanId : undefined,\n      links: convertSpanLinksForEnvelope(this._links),\n    });\n  }\n\n  /** @inheritdoc */\n  public isRecording(): boolean {\n    return !this._endTime && !!this._sampled;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public addEvent(\n    name: string,\n    attributesOrStartTime?: SpanAttributes | SpanTimeInput,\n    startTime?: SpanTimeInput,\n  ): this {\n    DEBUG_BUILD && logger.log('[Tracing] Adding an event to span:', name);\n\n    const time = isSpanTimeInput(attributesOrStartTime) ? attributesOrStartTime : startTime || timestampInSeconds();\n    const attributes = isSpanTimeInput(attributesOrStartTime) ? {} : attributesOrStartTime || {};\n\n    const event: TimedEvent = {\n      name,\n      time: spanTimeInputToSeconds(time),\n      attributes,\n    };\n\n    this._events.push(event);\n\n    return this;\n  }\n\n  /**\n   * This method should generally not be used,\n   * but for now we need a way to publicly check if the `_isStandaloneSpan` flag is set.\n   * USE THIS WITH CAUTION!\n   * @internal\n   * @hidden\n   * @experimental\n   */\n  public isStandaloneSpan(): boolean {\n    return !!this._isStandaloneSpan;\n  }\n\n  /** Emit `spanEnd` when the span is ended. */\n  private _onSpanEnded(): void {\n    const client = getClient();\n    if (client) {\n      client.emit('spanEnd', this);\n    }\n\n    // A segment span is basically the root span of a local span tree.\n    // So for now, this is either what we previously refer to as the root span,\n    // or a standalone span.\n    const isSegmentSpan = this._isStandaloneSpan || this === getRootSpan(this);\n\n    if (!isSegmentSpan) {\n      return;\n    }\n\n    // if this is a standalone span, we send it immediately\n    if (this._isStandaloneSpan) {\n      if (this._sampled) {\n        sendSpanEnvelope(createSpanEnvelope([this], client));\n      } else {\n        DEBUG_BUILD &&\n          logger.log('[Tracing] Discarding standalone span because its trace was not chosen to be sampled.');\n        if (client) {\n          client.recordDroppedEvent('sample_rate', 'span');\n        }\n      }\n      return;\n    }\n\n    const transactionEvent = this._convertSpanToTransaction();\n    if (transactionEvent) {\n      const scope = getCapturedScopesOnSpan(this).scope || getCurrentScope();\n      scope.captureEvent(transactionEvent);\n    }\n  }\n\n  /**\n   * Finish the transaction & prepare the event to send to Sentry.\n   */\n  private _convertSpanToTransaction(): TransactionEvent | undefined {\n    // We can only convert finished spans\n    if (!isFullFinishedSpan(spanToJSON(this))) {\n      return undefined;\n    }\n\n    if (!this._name) {\n      DEBUG_BUILD && logger.warn('Transaction has no name, falling back to `<unlabeled transaction>`.');\n      this._name = '<unlabeled transaction>';\n    }\n\n    const { scope: capturedSpanScope, isolationScope: capturedSpanIsolationScope } = getCapturedScopesOnSpan(this);\n\n    if (this._sampled !== true) {\n      return undefined;\n    }\n\n    // The transaction span itself as well as any potential standalone spans should be filtered out\n    const finishedSpans = getSpanDescendants(this).filter(span => span !== this && !isStandaloneSpan(span));\n\n    const spans = finishedSpans.map(span => spanToJSON(span)).filter(isFullFinishedSpan);\n\n    const source = this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] as TransactionSource | undefined;\n\n    // remove internal root span attributes we don't need to send.\n    /* eslint-disable @typescript-eslint/no-dynamic-delete */\n    delete this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n    spans.forEach(span => {\n      delete span.data[SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n    });\n    // eslint-enabled-next-line @typescript-eslint/no-dynamic-delete\n\n    const transaction: TransactionEvent = {\n      contexts: {\n        trace: spanToTransactionTraceContext(this),\n      },\n      spans:\n        // spans.sort() mutates the array, but `spans` is already a copy so we can safely do this here\n        // we do not use spans anymore after this point\n        spans.length > MAX_SPAN_COUNT\n          ? spans.sort((a, b) => a.start_timestamp - b.start_timestamp).slice(0, MAX_SPAN_COUNT)\n          : spans,\n      start_timestamp: this._startTime,\n      timestamp: this._endTime,\n      transaction: this._name,\n      type: 'transaction',\n      sdkProcessingMetadata: {\n        capturedSpanScope,\n        capturedSpanIsolationScope,\n        ...dropUndefinedKeys({\n          dynamicSamplingContext: getDynamicSamplingContextFromSpan(this),\n        }),\n      },\n      ...(source && {\n        transaction_info: {\n          source,\n        },\n      }),\n    };\n\n    const measurements = timedEventsToMeasurements(this._events);\n    const hasMeasurements = measurements && Object.keys(measurements).length;\n\n    if (hasMeasurements) {\n      DEBUG_BUILD &&\n        logger.log(\n          '[Measurements] Adding measurements to transaction event',\n          JSON.stringify(measurements, undefined, 2),\n        );\n      transaction.measurements = measurements;\n    }\n\n    return transaction;\n  }\n}\n\nfunction isSpanTimeInput(value: undefined | SpanAttributes | SpanTimeInput): value is SpanTimeInput {\n  return (value && typeof value === 'number') || value instanceof Date || Array.isArray(value);\n}\n\n// We want to filter out any incomplete SpanJSON objects\nfunction isFullFinishedSpan(input: Partial<SpanJSON>): input is SpanJSON {\n  return !!input.start_timestamp && !!input.timestamp && !!input.span_id && !!input.trace_id;\n}\n\n/** `SentrySpan`s can be sent as a standalone span rather than belonging to a transaction */\nfunction isStandaloneSpan(span: Span): boolean {\n  return span instanceof SentrySpan && span.isStandaloneSpan();\n}\n\n/**\n * Sends a `SpanEnvelope`.\n *\n * Note: If the envelope's spans are dropped, e.g. via `beforeSendSpan`,\n * the envelope will not be sent either.\n */\nfunction sendSpanEnvelope(envelope: SpanEnvelope): void {\n  const client = getClient();\n  if (!client) {\n    return;\n  }\n\n  const spanItems = envelope[1];\n  if (!spanItems || spanItems.length === 0) {\n    client.recordDroppedEvent('before_send', 'span');\n    return;\n  }\n\n  // sendEnvelope should not throw\n  // eslint-disable-next-line @typescript-eslint/no-floating-promises\n  client.sendEnvelope(envelope);\n}\n","import { DEBUG_BUILD } from '../debug-build';\nimport {\n  SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT,\n  SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE,\n} from '../semanticAttributes';\nimport type { MeasurementUnit, Measurements, TimedEvent } from '../types-hoist';\nimport { logger } from '../utils-hoist/logger';\nimport { getActiveSpan, getRootSpan } from '../utils/spanUtils';\n\n/**\n * Adds a measurement to the active transaction on the current global scope. You can optionally pass in a different span\n * as the 4th parameter.\n */\nexport function setMeasurement(name: string, value: number, unit: MeasurementUnit, activeSpan = getActiveSpan()): void {\n  const rootSpan = activeSpan && getRootSpan(activeSpan);\n\n  if (rootSpan) {\n    DEBUG_BUILD && logger.log(`[Measurement] Setting measurement on root span: ${name} = ${value} ${unit}`);\n    rootSpan.addEvent(name, {\n      [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: value,\n      [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: unit as string,\n    });\n  }\n}\n\n/**\n * Convert timed events to measurements.\n */\nexport function timedEventsToMeasurements(events: TimedEvent[]): Measurements | undefined {\n  if (!events || events.length === 0) {\n    return undefined;\n  }\n\n  const measurements: Measurements = {};\n  events.forEach(event => {\n    const attributes = event.attributes || {};\n    const unit = attributes[SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT] as MeasurementUnit | undefined;\n    const value = attributes[SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE] as number | undefined;\n\n    if (typeof unit === 'string' && typeof value === 'number') {\n      measurements[event.name] = { value, unit };\n    }\n  });\n\n  return measurements;\n}\n","import { DEBUG_BUILD } from './debug-build';\nimport type { Event, EventHint, EventProcessor } from './types-hoist';\nimport { isThenable } from './utils-hoist/is';\nimport { logger } from './utils-hoist/logger';\nimport { SyncPromise } from './utils-hoist/syncpromise';\n\n/**\n * Process an array of event processors, returning the processed event (or `null` if the event was dropped).\n */\nexport function notifyEventProcessors(\n  processors: EventProcessor[],\n  event: Event | null,\n  hint: EventHint,\n  index: number = 0,\n): PromiseLike<Event | null> {\n  return new SyncPromise<Event | null>((resolve, reject) => {\n    const processor = processors[index];\n    if (event === null || typeof processor !== 'function') {\n      resolve(event);\n    } else {\n      const result = processor({ ...event }, hint) as Event | null;\n\n      DEBUG_BUILD && processor.id && result === null && logger.log(`Event processor \"${processor.id}\" dropped event`);\n\n      if (isThenable(result)) {\n        void result\n          .then(final => notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n          .then(null, reject);\n      } else {\n        void notifyEventProcessors(processors, result, hint, index + 1)\n          .then(resolve)\n          .then(null, reject);\n      }\n    }\n  });\n}\n","import type { DebugImage, StackParser } from '../types-hoist';\nimport { GLOBAL_OBJ } from './worldwide';\n\ntype StackString = string;\ntype CachedResult = [string, string];\n\nlet parsedStackResults: Record<StackString, CachedResult> | undefined;\nlet lastKeysCount: number | undefined;\nlet cachedFilenameDebugIds: Record<string, string> | undefined;\n\n/**\n * Returns a map of filenames to debug identifiers.\n */\nexport function getFilenameToDebugIdMap(stackParser: StackParser): Record<string, string> {\n  const debugIdMap = GLOBAL_OBJ._sentryDebugIds;\n  if (!debugIdMap) {\n    return {};\n  }\n\n  const debugIdKeys = Object.keys(debugIdMap);\n\n  // If the count of registered globals hasn't changed since the last call, we\n  // can just return the cached result.\n  if (cachedFilenameDebugIds && debugIdKeys.length === lastKeysCount) {\n    return cachedFilenameDebugIds;\n  }\n\n  lastKeysCount = debugIdKeys.length;\n\n  // Build a map of filename -> debug_id.\n  cachedFilenameDebugIds = debugIdKeys.reduce<Record<string, string>>((acc, stackKey) => {\n    if (!parsedStackResults) {\n      parsedStackResults = {};\n    }\n\n    const result = parsedStackResults[stackKey];\n\n    if (result) {\n      acc[result[0]] = result[1];\n    } else {\n      const parsedStack = stackParser(stackKey);\n\n      for (let i = parsedStack.length - 1; i >= 0; i--) {\n        const stackFrame = parsedStack[i];\n        const filename = stackFrame?.filename;\n        const debugId = debugIdMap[stackKey];\n\n        if (filename && debugId) {\n          acc[filename] = debugId;\n          parsedStackResults[stackKey] = [filename, debugId];\n          break;\n        }\n      }\n    }\n\n    return acc;\n  }, {});\n\n  return cachedFilenameDebugIds;\n}\n\n/**\n * Returns a list of debug images for the given resources.\n */\nexport function getDebugImagesForResources(\n  stackParser: StackParser,\n  resource_paths: ReadonlyArray<string>,\n): DebugImage[] {\n  const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser);\n\n  if (!filenameDebugIdMap) {\n    return [];\n  }\n\n  const images: DebugImage[] = [];\n  for (const path of resource_paths) {\n    if (path && filenameDebugIdMap[path]) {\n      images.push({\n        type: 'sourcemap',\n        code_file: path,\n        debug_id: filenameDebugIdMap[path] as string,\n      });\n    }\n  }\n\n  return images;\n}\n","import type { ScopeData } from '../scope';\nimport { getDynamicSamplingContextFromSpan } from '../tracing/dynamicSamplingContext';\nimport type { Breadcrumb, Event, Span } from '../types-hoist';\nimport { dropUndefinedKeys } from '../utils-hoist/object';\nimport { merge } from './merge';\nimport { getRootSpan, spanToJSON, spanToTraceContext } from './spanUtils';\n\n/**\n * Applies data from the scope to the event and runs all event processors on it.\n */\nexport function applyScopeDataToEvent(event: Event, data: ScopeData): void {\n  const { fingerprint, span, breadcrumbs, sdkProcessingMetadata } = data;\n\n  // Apply general data\n  applyDataToEvent(event, data);\n\n  // We want to set the trace context for normal events only if there isn't already\n  // a trace context on the event. There is a product feature in place where we link\n  // errors with transaction and it relies on that.\n  if (span) {\n    applySpanToEvent(event, span);\n  }\n\n  applyFingerprintToEvent(event, fingerprint);\n  applyBreadcrumbsToEvent(event, breadcrumbs);\n  applySdkMetadataToEvent(event, sdkProcessingMetadata);\n}\n\n/** Merge data of two scopes together. */\nexport function mergeScopeData(data: ScopeData, mergeData: ScopeData): void {\n  const {\n    extra,\n    tags,\n    user,\n    contexts,\n    level,\n    sdkProcessingMetadata,\n    breadcrumbs,\n    fingerprint,\n    eventProcessors,\n    attachments,\n    propagationContext,\n    transactionName,\n    span,\n  } = mergeData;\n\n  mergeAndOverwriteScopeData(data, 'extra', extra);\n  mergeAndOverwriteScopeData(data, 'tags', tags);\n  mergeAndOverwriteScopeData(data, 'user', user);\n  mergeAndOverwriteScopeData(data, 'contexts', contexts);\n\n  data.sdkProcessingMetadata = merge(data.sdkProcessingMetadata, sdkProcessingMetadata, 2);\n\n  if (level) {\n    data.level = level;\n  }\n\n  if (transactionName) {\n    data.transactionName = transactionName;\n  }\n\n  if (span) {\n    data.span = span;\n  }\n\n  if (breadcrumbs.length) {\n    data.breadcrumbs = [...data.breadcrumbs, ...breadcrumbs];\n  }\n\n  if (fingerprint.length) {\n    data.fingerprint = [...data.fingerprint, ...fingerprint];\n  }\n\n  if (eventProcessors.length) {\n    data.eventProcessors = [...data.eventProcessors, ...eventProcessors];\n  }\n\n  if (attachments.length) {\n    data.attachments = [...data.attachments, ...attachments];\n  }\n\n  data.propagationContext = { ...data.propagationContext, ...propagationContext };\n}\n\n/**\n * Merges certain scope data. Undefined values will overwrite any existing values.\n * Exported only for tests.\n */\nexport function mergeAndOverwriteScopeData<\n  Prop extends 'extra' | 'tags' | 'user' | 'contexts' | 'sdkProcessingMetadata',\n  Data extends ScopeData,\n>(data: Data, prop: Prop, mergeVal: Data[Prop]): void {\n  data[prop] = merge(data[prop], mergeVal, 1);\n}\n\n/** Exported only for tests */\nexport function mergeArray<Prop extends 'breadcrumbs' | 'fingerprint'>(\n  event: Event,\n  prop: Prop,\n  mergeVal: ScopeData[Prop],\n): void {\n  const prevVal = event[prop];\n  // If we are not merging any new values,\n  // we only need to proceed if there was an empty array before (as we want to replace it with undefined)\n  if (!mergeVal.length && (!prevVal || prevVal.length)) {\n    return;\n  }\n\n  const merged = [...(prevVal || []), ...mergeVal] as ScopeData[Prop];\n  event[prop] = merged.length ? merged : undefined;\n}\n\nfunction applyDataToEvent(event: Event, data: ScopeData): void {\n  const { extra, tags, user, contexts, level, transactionName } = data;\n\n  const cleanedExtra = dropUndefinedKeys(extra);\n  if (Object.keys(cleanedExtra).length) {\n    event.extra = { ...cleanedExtra, ...event.extra };\n  }\n\n  const cleanedTags = dropUndefinedKeys(tags);\n  if (Object.keys(cleanedTags).length) {\n    event.tags = { ...cleanedTags, ...event.tags };\n  }\n\n  const cleanedUser = dropUndefinedKeys(user);\n  if (Object.keys(cleanedUser).length) {\n    event.user = { ...cleanedUser, ...event.user };\n  }\n\n  const cleanedContexts = dropUndefinedKeys(contexts);\n  if (Object.keys(cleanedContexts).length) {\n    event.contexts = { ...cleanedContexts, ...event.contexts };\n  }\n\n  if (level) {\n    event.level = level;\n  }\n\n  // transaction events get their `transaction` from the root span name\n  if (transactionName && event.type !== 'transaction') {\n    event.transaction = transactionName;\n  }\n}\n\nfunction applyBreadcrumbsToEvent(event: Event, breadcrumbs: Breadcrumb[]): void {\n  const mergedBreadcrumbs = [...(event.breadcrumbs || []), ...breadcrumbs];\n  event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : undefined;\n}\n\nfunction applySdkMetadataToEvent(event: Event, sdkProcessingMetadata: ScopeData['sdkProcessingMetadata']): void {\n  event.sdkProcessingMetadata = {\n    ...event.sdkProcessingMetadata,\n    ...sdkProcessingMetadata,\n  };\n}\n\nfunction applySpanToEvent(event: Event, span: Span): void {\n  event.contexts = {\n    trace: spanToTraceContext(span),\n    ...event.contexts,\n  };\n\n  event.sdkProcessingMetadata = {\n    dynamicSamplingContext: getDynamicSamplingContextFromSpan(span),\n    ...event.sdkProcessingMetadata,\n  };\n\n  const rootSpan = getRootSpan(span);\n  const transactionName = spanToJSON(rootSpan).description;\n  if (transactionName && !event.transaction && event.type === 'transaction') {\n    event.transaction = transactionName;\n  }\n}\n\n/**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\nfunction applyFingerprintToEvent(event: Event, fingerprint: ScopeData['fingerprint'] | undefined): void {\n  // Make sure it's an array first and we actually have something in place\n  event.fingerprint = event.fingerprint\n    ? Array.isArray(event.fingerprint)\n      ? event.fingerprint\n      : [event.fingerprint]\n    : [];\n\n  // If we have something on the scope, then merge it with event\n  if (fingerprint) {\n    event.fingerprint = event.fingerprint.concat(fingerprint);\n  }\n\n  // If we have no data at all, remove empty array default\n  if (!event.fingerprint.length) {\n    delete event.fingerprint;\n  }\n}\n","/* eslint-disable max-lines */\nimport type {\n  Breadcrumb,\n  BreadcrumbHint,\n  CheckIn,\n  ClientOptions,\n  DataCategory,\n  DsnComponents,\n  DynamicSamplingContext,\n  Envelope,\n  ErrorEvent,\n  Event,\n  EventDropReason,\n  EventHint,\n  EventProcessor,\n  FeedbackEvent,\n  FetchBreadcrumbHint,\n  Integration,\n  MonitorConfig,\n  Outcome,\n  ParameterizedString,\n  SdkMetadata,\n  Session,\n  SessionAggregates,\n  SeverityLevel,\n  Span,\n  SpanAttributes,\n  SpanContextData,\n  SpanJSON,\n  StartSpanOptions,\n  TransactionEvent,\n  Transport,\n  TransportMakeRequestResponse,\n  XhrBreadcrumbHint,\n} from './types-hoist';\n\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from './api';\nimport { DEFAULT_ENVIRONMENT } from './constants';\nimport { getCurrentScope, getIsolationScope, getTraceContextFromScope } from './currentScopes';\nimport { DEBUG_BUILD } from './debug-build';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope';\nimport type { IntegrationIndex } from './integration';\nimport { afterSetupIntegrations } from './integration';\nimport { setupIntegration, setupIntegrations } from './integration';\nimport type { Scope } from './scope';\nimport { updateSession } from './session';\nimport { getDynamicSamplingContextFromScope } from './tracing/dynamicSamplingContext';\nimport { createClientReportEnvelope } from './utils-hoist/clientreport';\nimport { dsnToString, makeDsn } from './utils-hoist/dsn';\nimport { addItemToEnvelope, createAttachmentEnvelopeItem } from './utils-hoist/envelope';\nimport { SentryError } from './utils-hoist/error';\nimport { isParameterizedString, isPlainObject, isPrimitive, isThenable } from './utils-hoist/is';\nimport { logger } from './utils-hoist/logger';\nimport { checkOrSetAlreadyCaught, uuid4 } from './utils-hoist/misc';\nimport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise } from './utils-hoist/syncpromise';\nimport { getPossibleEventMessages } from './utils/eventUtils';\nimport { merge } from './utils/merge';\nimport { parseSampleRate } from './utils/parseSampleRate';\nimport { prepareEvent } from './utils/prepareEvent';\nimport { showSpanDropWarning } from './utils/spanUtils';\nimport { convertSpanJsonToTransactionEvent, convertTransactionEventToSpanJson } from './utils/transactionEvent';\n\nconst ALREADY_SEEN_ERROR = \"Not capturing exception because it's already been captured.\";\nconst MISSING_RELEASE_FOR_SESSION_ERROR = 'Discarded session because of missing or non-string release';\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}.\n *\n * If a Dsn is specified in the options, it will be parsed and stored. Use\n * {@link Client.getDsn} to retrieve the Dsn at any moment. In case the Dsn is\n * invalid, the constructor will throw a {@link SentryException}. Note that\n * without a valid Dsn, the SDK will not send any events to Sentry.\n *\n * Before sending an event, it is passed through\n * {@link Client._prepareEvent} to add SDK information and scope data\n * (breadcrumbs and context). To add more custom information, override this\n * method and extend the resulting prepared event.\n *\n * To issue automatically created events (e.g. via instrumentation), use\n * {@link Client.captureEvent}. It will prepare the event and pass it through\n * the callback lifecycle. To issue auto-breadcrumbs, use\n * {@link Client.addBreadcrumb}.\n *\n * @example\n * class NodeClient extends Client<NodeOptions> {\n *   public constructor(options: NodeOptions) {\n *     super(options);\n *   }\n *\n *   // ...\n * }\n */\nexport abstract class Client<O extends ClientOptions = ClientOptions> {\n  /** Options passed to the SDK. */\n  protected readonly _options: O;\n\n  /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n  protected readonly _dsn?: DsnComponents;\n\n  protected readonly _transport?: Transport;\n\n  /** Array of set up integrations. */\n  protected _integrations: IntegrationIndex;\n\n  /** Number of calls being processed */\n  protected _numProcessing: number;\n\n  protected _eventProcessors: EventProcessor[];\n\n  /** Holds flushable  */\n  private _outcomes: { [key: string]: number };\n\n  // eslint-disable-next-line @typescript-eslint/ban-types\n  private _hooks: Record<string, Function[]>;\n\n  /**\n   * Initializes this client instance.\n   *\n   * @param options Options for the client.\n   */\n  protected constructor(options: O) {\n    this._options = options;\n    this._integrations = {};\n    this._numProcessing = 0;\n    this._outcomes = {};\n    this._hooks = {};\n    this._eventProcessors = [];\n\n    if (options.dsn) {\n      this._dsn = makeDsn(options.dsn);\n    } else {\n      DEBUG_BUILD && logger.warn('No DSN provided, client will not send events.');\n    }\n\n    if (this._dsn) {\n      const url = getEnvelopeEndpointWithUrlEncodedAuth(\n        this._dsn,\n        options.tunnel,\n        options._metadata ? options._metadata.sdk : undefined,\n      );\n      this._transport = options.transport({\n        tunnel: this._options.tunnel,\n        recordDroppedEvent: this.recordDroppedEvent.bind(this),\n        ...options.transportOptions,\n        url,\n      });\n    }\n  }\n\n  /**\n   * Captures an exception event and sends it to Sentry.\n   *\n   * Unlike `captureException` exported from every SDK, this method requires that you pass it the current scope.\n   */\n  public captureException(exception: unknown, hint?: EventHint, scope?: Scope): string {\n    const eventId = uuid4();\n\n    // ensure we haven't captured this very object before\n    if (checkOrSetAlreadyCaught(exception)) {\n      DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n      return eventId;\n    }\n\n    const hintWithEventId = {\n      event_id: eventId,\n      ...hint,\n    };\n\n    this._process(\n      this.eventFromException(exception, hintWithEventId).then(event =>\n        this._captureEvent(event, hintWithEventId, scope),\n      ),\n    );\n\n    return hintWithEventId.event_id;\n  }\n\n  /**\n   * Captures a message event and sends it to Sentry.\n   *\n   * Unlike `captureMessage` exported from every SDK, this method requires that you pass it the current scope.\n   */\n  public captureMessage(\n    message: ParameterizedString,\n    level?: SeverityLevel,\n    hint?: EventHint,\n    currentScope?: Scope,\n  ): string {\n    const hintWithEventId = {\n      event_id: uuid4(),\n      ...hint,\n    };\n\n    const eventMessage = isParameterizedString(message) ? message : String(message);\n\n    const promisedEvent = isPrimitive(message)\n      ? this.eventFromMessage(eventMessage, level, hintWithEventId)\n      : this.eventFromException(message, hintWithEventId);\n\n    this._process(promisedEvent.then(event => this._captureEvent(event, hintWithEventId, currentScope)));\n\n    return hintWithEventId.event_id;\n  }\n\n  /**\n   * Captures a manually created event and sends it to Sentry.\n   *\n   * Unlike `captureEvent` exported from every SDK, this method requires that you pass it the current scope.\n   */\n  public captureEvent(event: Event, hint?: EventHint, currentScope?: Scope): string {\n    const eventId = uuid4();\n\n    // ensure we haven't captured this very object before\n    if (hint?.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n      DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n      return eventId;\n    }\n\n    const hintWithEventId = {\n      event_id: eventId,\n      ...hint,\n    };\n\n    const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n    const capturedSpanScope: Scope | undefined = sdkProcessingMetadata.capturedSpanScope;\n    const capturedSpanIsolationScope: Scope | undefined = sdkProcessingMetadata.capturedSpanIsolationScope;\n\n    this._process(\n      this._captureEvent(event, hintWithEventId, capturedSpanScope || currentScope, capturedSpanIsolationScope),\n    );\n\n    return hintWithEventId.event_id;\n  }\n\n  /**\n   * Captures a session.\n   */\n  public captureSession(session: Session): void {\n    this.sendSession(session);\n    // After sending, we set init false to indicate it's not the first occurrence\n    updateSession(session, { init: false });\n  }\n\n  /**\n   * Create a cron monitor check in and send it to Sentry. This method is not available on all clients.\n   *\n   * @param checkIn An object that describes a check in.\n   * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n   * to create a monitor automatically when sending a check in.\n   * @param scope An optional scope containing event metadata.\n   * @returns A string representing the id of the check in.\n   */\n  public captureCheckIn?(checkIn: CheckIn, monitorConfig?: MonitorConfig, scope?: Scope): string;\n\n  /**\n   * Get the current Dsn.\n   */\n  public getDsn(): DsnComponents | undefined {\n    return this._dsn;\n  }\n\n  /**\n   * Get the current options.\n   */\n  public getOptions(): O {\n    return this._options;\n  }\n\n  /**\n   * Get the SDK metadata.\n   * @see SdkMetadata\n   */\n  public getSdkMetadata(): SdkMetadata | undefined {\n    return this._options._metadata;\n  }\n\n  /**\n   * Returns the transport that is used by the client.\n   * Please note that the transport gets lazy initialized so it will only be there once the first event has been sent.\n   */\n  public getTransport(): Transport | undefined {\n    return this._transport;\n  }\n\n  /**\n   * Wait for all events to be sent or the timeout to expire, whichever comes first.\n   *\n   * @param timeout Maximum time in ms the client should wait for events to be flushed. Omitting this parameter will\n   *   cause the client to wait until all events are sent before resolving the promise.\n   * @returns A promise that will resolve with `true` if all events are sent before the timeout, or `false` if there are\n   * still events in the queue when the timeout is reached.\n   */\n  public flush(timeout?: number): PromiseLike<boolean> {\n    const transport = this._transport;\n    if (transport) {\n      this.emit('flush');\n      return this._isClientDoneProcessing(timeout).then(clientFinished => {\n        return transport.flush(timeout).then(transportFlushed => clientFinished && transportFlushed);\n      });\n    } else {\n      return resolvedSyncPromise(true);\n    }\n  }\n\n  /**\n   * Flush the event queue and set the client to `enabled = false`. See {@link Client.flush}.\n   *\n   * @param {number} timeout Maximum time in ms the client should wait before shutting down. Omitting this parameter will cause\n   *   the client to wait until all events are sent before disabling itself.\n   * @returns {Promise<boolean>} A promise which resolves to `true` if the flush completes successfully before the timeout, or `false` if\n   * it doesn't.\n   */\n  public close(timeout?: number): PromiseLike<boolean> {\n    return this.flush(timeout).then(result => {\n      this.getOptions().enabled = false;\n      this.emit('close');\n      return result;\n    });\n  }\n\n  /**\n   * Get all installed event processors.\n   */\n  public getEventProcessors(): EventProcessor[] {\n    return this._eventProcessors;\n  }\n\n  /**\n   * Adds an event processor that applies to any event processed by this client.\n   */\n  public addEventProcessor(eventProcessor: EventProcessor): void {\n    this._eventProcessors.push(eventProcessor);\n  }\n\n  /**\n   * Initialize this client.\n   * Call this after the client was set on a scope.\n   */\n  public init(): void {\n    if (\n      this._isEnabled() ||\n      // Force integrations to be setup even if no DSN was set when we have\n      // Spotlight enabled. This is particularly important for browser as we\n      // don't support the `spotlight` option there and rely on the users\n      // adding the `spotlightBrowserIntegration()` to their integrations which\n      // wouldn't get initialized with the check below when there's no DSN set.\n      this._options.integrations.some(({ name }) => name.startsWith('Spotlight'))\n    ) {\n      this._setupIntegrations();\n    }\n  }\n\n  /**\n   * Gets an installed integration by its name.\n   *\n   * @returns {Integration|undefined} The installed integration or `undefined` if no integration with that `name` was installed.\n   */\n  public getIntegrationByName<T extends Integration = Integration>(integrationName: string): T | undefined {\n    return this._integrations[integrationName] as T | undefined;\n  }\n\n  /**\n   * Add an integration to the client.\n   * This can be used to e.g. lazy load integrations.\n   * In most cases, this should not be necessary,\n   * and you're better off just passing the integrations via `integrations: []` at initialization time.\n   * However, if you find the need to conditionally load & add an integration, you can use `addIntegration` to do so.\n   */\n  public addIntegration(integration: Integration): void {\n    const isAlreadyInstalled = this._integrations[integration.name];\n\n    // This hook takes care of only installing if not already installed\n    setupIntegration(this, integration, this._integrations);\n    // Here we need to check manually to make sure to not run this multiple times\n    if (!isAlreadyInstalled) {\n      afterSetupIntegrations(this, [integration]);\n    }\n  }\n\n  /**\n   * Send a fully prepared event to Sentry.\n   */\n  public sendEvent(event: Event, hint: EventHint = {}): void {\n    this.emit('beforeSendEvent', event, hint);\n\n    let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel);\n\n    for (const attachment of hint.attachments || []) {\n      env = addItemToEnvelope(env, createAttachmentEnvelopeItem(attachment));\n    }\n\n    const promise = this.sendEnvelope(env);\n    if (promise) {\n      promise.then(sendResponse => this.emit('afterSendEvent', event, sendResponse), null);\n    }\n  }\n\n  /**\n   * Send a session or session aggregrates to Sentry.\n   */\n  public sendSession(session: Session | SessionAggregates): void {\n    // Backfill release and environment on session\n    const { release: clientReleaseOption, environment: clientEnvironmentOption = DEFAULT_ENVIRONMENT } = this._options;\n    if ('aggregates' in session) {\n      const sessionAttrs = session.attrs || {};\n      if (!sessionAttrs.release && !clientReleaseOption) {\n        DEBUG_BUILD && logger.warn(MISSING_RELEASE_FOR_SESSION_ERROR);\n        return;\n      }\n      sessionAttrs.release = sessionAttrs.release || clientReleaseOption;\n      sessionAttrs.environment = sessionAttrs.environment || clientEnvironmentOption;\n      session.attrs = sessionAttrs;\n    } else {\n      if (!session.release && !clientReleaseOption) {\n        DEBUG_BUILD && logger.warn(MISSING_RELEASE_FOR_SESSION_ERROR);\n        return;\n      }\n      session.release = session.release || clientReleaseOption;\n      session.environment = session.environment || clientEnvironmentOption;\n    }\n\n    this.emit('beforeSendSession', session);\n\n    const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);\n\n    // sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this.sendEnvelope(env);\n  }\n\n  /**\n   * Record on the client that an event got dropped (ie, an event that will not be sent to Sentry).\n   */\n  public recordDroppedEvent(reason: EventDropReason, category: DataCategory, count: number = 1): void {\n    if (this._options.sendClientReports) {\n      // We want to track each category (error, transaction, session, replay_event) separately\n      // but still keep the distinction between different type of outcomes.\n      // We could use nested maps, but it's much easier to read and type this way.\n      // A correct type for map-based implementation if we want to go that route\n      // would be `Partial<Record<SentryRequestType, Partial<Record<Outcome, number>>>>`\n      // With typescript 4.1 we could even use template literal types\n      const key = `${reason}:${category}`;\n      DEBUG_BUILD && logger.log(`Recording outcome: \"${key}\"${count > 1 ? ` (${count} times)` : ''}`);\n      this._outcomes[key] = (this._outcomes[key] || 0) + count;\n    }\n  }\n\n  /* eslint-disable @typescript-eslint/unified-signatures */\n  /**\n   * Register a callback for whenever a span is started.\n   * Receives the span as argument.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'spanStart', callback: (span: Span) => void): () => void;\n\n  /**\n   * Register a callback before span sampling runs. Receives a `samplingDecision` object argument with a `decision`\n   * property that can be used to make a sampling decision that will be enforced, before any span sampling runs.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(\n    hook: 'beforeSampling',\n    callback: (\n      samplingData: {\n        spanAttributes: SpanAttributes;\n        spanName: string;\n        parentSampled?: boolean;\n        parentContext?: SpanContextData;\n      },\n      samplingDecision: { decision: boolean },\n    ) => void,\n  ): void;\n\n  /**\n   * Register a callback for whenever a span is ended.\n   * Receives the span as argument.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'spanEnd', callback: (span: Span) => void): () => void;\n\n  /**\n   * Register a callback for when an idle span is allowed to auto-finish.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'idleSpanEnableAutoFinish', callback: (span: Span) => void): () => void;\n\n  /**\n   * Register a callback for transaction start and finish.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'beforeEnvelope', callback: (envelope: Envelope) => void): () => void;\n\n  /**\n   * Register a callback that runs when stack frame metadata should be applied to an event.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'applyFrameMetadata', callback: (event: Event) => void): () => void;\n\n  /**\n   * Register a callback for before sending an event.\n   * This is called right before an event is sent and should not be used to mutate the event.\n   * Receives an Event & EventHint as arguments.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'beforeSendEvent', callback: (event: Event, hint?: EventHint | undefined) => void): () => void;\n\n  /**\n   * Register a callback for before sending a session or session aggregrates..\n   * Receives the session/aggregate as second argument.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'beforeSendSession', callback: (session: Session | SessionAggregates) => void): () => void;\n\n  /**\n   * Register a callback for preprocessing an event,\n   * before it is passed to (global) event processors.\n   * Receives an Event & EventHint as arguments.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'preprocessEvent', callback: (event: Event, hint?: EventHint | undefined) => void): () => void;\n\n  /**\n   * Register a callback for postprocessing an event,\n   * after it was passed to (global) event processors, before it is being sent.\n   * Receives an Event & EventHint as arguments.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'postprocessEvent', callback: (event: Event, hint?: EventHint | undefined) => void): () => void;\n\n  /**\n   * Register a callback for when an event has been sent.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(\n    hook: 'afterSendEvent',\n    callback: (event: Event, sendResponse: TransportMakeRequestResponse) => void,\n  ): () => void;\n\n  /**\n   * Register a callback before a breadcrumb is added.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'beforeAddBreadcrumb', callback: (breadcrumb: Breadcrumb, hint?: BreadcrumbHint) => void): () => void;\n\n  /**\n   * Register a callback when a DSC (Dynamic Sampling Context) is created.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'createDsc', callback: (dsc: DynamicSamplingContext, rootSpan?: Span) => void): () => void;\n\n  /**\n   * Register a callback when a Feedback event has been prepared.\n   * This should be used to mutate the event. The options argument can hint\n   * about what kind of mutation it expects.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(\n    hook: 'beforeSendFeedback',\n    callback: (feedback: FeedbackEvent, options?: { includeReplay?: boolean }) => void,\n  ): () => void;\n\n  /**\n   * Register a callback when the feedback widget is opened in a user's browser\n   */\n  public on(hook: 'openFeedbackWidget', callback: () => void): () => void;\n\n  /**\n   * A hook for the browser tracing integrations to trigger a span start for a page load.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(\n    hook: 'startPageLoadSpan',\n    callback: (\n      options: StartSpanOptions,\n      traceOptions?: { sentryTrace?: string | undefined; baggage?: string | undefined },\n    ) => void,\n  ): () => void;\n\n  /**\n   * A hook for browser tracing integrations to trigger a span for a navigation.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'startNavigationSpan', callback: (options: StartSpanOptions) => void): () => void;\n\n  /**\n   * A hook for GraphQL client integration to enhance a span with request data.\n   * @returns A function that, when executed, removes the registered callback.\n   */\n  public on(\n    hook: 'beforeOutgoingRequestSpan',\n    callback: (span: Span, hint: XhrBreadcrumbHint | FetchBreadcrumbHint) => void,\n  ): () => void;\n\n  /**\n   * A hook for GraphQL client integration to enhance a breadcrumb with request data.\n   * @returns A function that, when executed, removes the registered callback.\n   */\n  public on(\n    hook: 'beforeOutgoingRequestBreadcrumb',\n    callback: (breadcrumb: Breadcrumb, hint: XhrBreadcrumbHint | FetchBreadcrumbHint) => void,\n  ): () => void;\n\n  /**\n   * A hook that is called when the client is flushing\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'flush', callback: () => void): () => void;\n\n  /**\n   * A hook that is called when the client is closing\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n  public on(hook: 'close', callback: () => void): () => void;\n\n  /**\n   * Register a hook oin this client.\n   */\n  public on(hook: string, callback: unknown): () => void {\n    const hooks = (this._hooks[hook] = this._hooks[hook] || []);\n\n    // @ts-expect-error We assume the types are correct\n    hooks.push(callback);\n\n    // This function returns a callback execution handler that, when invoked,\n    // deregisters a callback. This is crucial for managing instances where callbacks\n    // need to be unregistered to prevent self-referencing in callback closures,\n    // ensuring proper garbage collection.\n    return () => {\n      // @ts-expect-error We assume the types are correct\n      const cbIndex = hooks.indexOf(callback);\n      if (cbIndex > -1) {\n        hooks.splice(cbIndex, 1);\n      }\n    };\n  }\n\n  /** Fire a hook whenever a span starts. */\n  public emit(hook: 'spanStart', span: Span): void;\n\n  /** A hook that is called every time before a span is sampled. */\n  public emit(\n    hook: 'beforeSampling',\n    samplingData: {\n      spanAttributes: SpanAttributes;\n      spanName: string;\n      parentSampled?: boolean;\n      parentContext?: SpanContextData;\n    },\n    samplingDecision: { decision: boolean },\n  ): void;\n\n  /** Fire a hook whenever a span ends. */\n  public emit(hook: 'spanEnd', span: Span): void;\n\n  /**\n   * Fire a hook indicating that an idle span is allowed to auto finish.\n   */\n  public emit(hook: 'idleSpanEnableAutoFinish', span: Span): void;\n\n  /*\n   * Fire a hook event for envelope creation and sending. Expects to be given an envelope as the\n   * second argument.\n   */\n  public emit(hook: 'beforeEnvelope', envelope: Envelope): void;\n\n  /*\n   * Fire a hook indicating that stack frame metadata should be applied to the event passed to the hook.\n   */\n  public emit(hook: 'applyFrameMetadata', event: Event): void;\n\n  /**\n   * Fire a hook event before sending an event.\n   * This is called right before an event is sent and should not be used to mutate the event.\n   * Expects to be given an Event & EventHint as the second/third argument.\n   */\n  public emit(hook: 'beforeSendEvent', event: Event, hint?: EventHint): void;\n\n  /**\n   * Fire a hook event before sending a session/aggregates.\n   * Expects to be given the prepared session/aggregates as second argument.\n   */\n  public emit(hook: 'beforeSendSession', session: Session | SessionAggregates): void;\n\n  /**\n   * Fire a hook event to process events before they are passed to (global) event processors.\n   * Expects to be given an Event & EventHint as the second/third argument.\n   */\n  public emit(hook: 'preprocessEvent', event: Event, hint?: EventHint): void;\n\n  /**\n   * Fire a hook event to process a user on an event before it is sent to Sentry, after all other processors have run.\n   * Expects to be given an Event & EventHint as the second/third argument.\n   */\n  public emit(hook: 'postprocessEvent', event: Event, hint?: EventHint): void;\n\n  /*\n   * Fire a hook event after sending an event. Expects to be given an Event as the\n   * second argument.\n   */\n  public emit(hook: 'afterSendEvent', event: Event, sendResponse: TransportMakeRequestResponse): void;\n\n  /**\n   * Fire a hook for when a breadcrumb is added. Expects the breadcrumb as second argument.\n   */\n  public emit(hook: 'beforeAddBreadcrumb', breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void;\n\n  /**\n   * Fire a hook for when a DSC (Dynamic Sampling Context) is created. Expects the DSC as second argument.\n   */\n  public emit(hook: 'createDsc', dsc: DynamicSamplingContext, rootSpan?: Span): void;\n\n  /**\n   * Fire a hook event for after preparing a feedback event. Events to be given\n   * a feedback event as the second argument, and an optional options object as\n   * third argument.\n   */\n  public emit(hook: 'beforeSendFeedback', feedback: FeedbackEvent, options?: { includeReplay?: boolean }): void;\n\n  /**\n   * Fire a hook event for when the feedback widget is opened in a user's browser\n   */\n  public emit(hook: 'openFeedbackWidget'): void;\n\n  /**\n   * Emit a hook event for browser tracing integrations to trigger a span start for a page load.\n   */\n  public emit(\n    hook: 'startPageLoadSpan',\n    options: StartSpanOptions,\n    traceOptions?: { sentryTrace?: string | undefined; baggage?: string | undefined },\n  ): void;\n\n  /**\n   * Emit a hook event for browser tracing integrations to trigger a span for a navigation.\n   */\n  public emit(hook: 'startNavigationSpan', options: StartSpanOptions): void;\n\n  /**\n   * Emit a hook event for GraphQL client integration to enhance a span with request data.\n   */\n  public emit(hook: 'beforeOutgoingRequestSpan', span: Span, hint: XhrBreadcrumbHint | FetchBreadcrumbHint): void;\n\n  /**\n   * Emit a hook event for GraphQL client integration to enhance a breadcrumb with request data.\n   */\n  public emit(\n    hook: 'beforeOutgoingRequestBreadcrumb',\n    breadcrumb: Breadcrumb,\n    hint: XhrBreadcrumbHint | FetchBreadcrumbHint,\n  ): void;\n\n  /**\n   * Emit a hook event for client flush\n   */\n  public emit(hook: 'flush'): void;\n\n  /**\n   * Emit a hook event for client close\n   */\n  public emit(hook: 'close'): void;\n\n  /**\n   * Emit a hook that was previously registered via `on()`.\n   */\n  public emit(hook: string, ...rest: unknown[]): void {\n    const callbacks = this._hooks[hook];\n    if (callbacks) {\n      callbacks.forEach(callback => callback(...rest));\n    }\n  }\n\n  /**\n   * Send an envelope to Sentry.\n   */\n  public sendEnvelope(envelope: Envelope): PromiseLike<TransportMakeRequestResponse> {\n    this.emit('beforeEnvelope', envelope);\n\n    if (this._isEnabled() && this._transport) {\n      return this._transport.send(envelope).then(null, reason => {\n        DEBUG_BUILD && logger.error('Error while sending envelope:', reason);\n        return reason;\n      });\n    }\n\n    DEBUG_BUILD && logger.error('Transport disabled');\n\n    return resolvedSyncPromise({});\n  }\n\n  /* eslint-enable @typescript-eslint/unified-signatures */\n\n  /** Setup integrations for this client. */\n  protected _setupIntegrations(): void {\n    const { integrations } = this._options;\n    this._integrations = setupIntegrations(this, integrations);\n    afterSetupIntegrations(this, integrations);\n  }\n\n  /** Updates existing session based on the provided event */\n  protected _updateSessionFromEvent(session: Session, event: Event): void {\n    let crashed = event.level === 'fatal';\n    let errored = false;\n    const exceptions = event.exception?.values;\n\n    if (exceptions) {\n      errored = true;\n\n      for (const ex of exceptions) {\n        const mechanism = ex.mechanism;\n        if (mechanism?.handled === false) {\n          crashed = true;\n          break;\n        }\n      }\n    }\n\n    // A session is updated and that session update is sent in only one of the two following scenarios:\n    // 1. Session with non terminal status and 0 errors + an error occurred -> Will set error count to 1 and send update\n    // 2. Session with non terminal status and 1 error + a crash occurred -> Will set status crashed and send update\n    const sessionNonTerminal = session.status === 'ok';\n    const shouldUpdateAndSend = (sessionNonTerminal && session.errors === 0) || (sessionNonTerminal && crashed);\n\n    if (shouldUpdateAndSend) {\n      updateSession(session, {\n        ...(crashed && { status: 'crashed' }),\n        errors: session.errors || Number(errored || crashed),\n      });\n      this.captureSession(session);\n    }\n  }\n\n  /**\n   * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying\n   * \"no\" (resolving to `false`) in order to give the client a chance to potentially finish first.\n   *\n   * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not\n   * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to\n   * `true`.\n   * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and\n   * `false` otherwise\n   */\n  protected _isClientDoneProcessing(timeout?: number): PromiseLike<boolean> {\n    return new SyncPromise(resolve => {\n      let ticked: number = 0;\n      const tick: number = 1;\n\n      const interval = setInterval(() => {\n        if (this._numProcessing == 0) {\n          clearInterval(interval);\n          resolve(true);\n        } else {\n          ticked += tick;\n          if (timeout && ticked >= timeout) {\n            clearInterval(interval);\n            resolve(false);\n          }\n        }\n      }, tick);\n    });\n  }\n\n  /** Determines whether this SDK is enabled and a transport is present. */\n  protected _isEnabled(): boolean {\n    return this.getOptions().enabled !== false && this._transport !== undefined;\n  }\n\n  /**\n   * Adds common information to events.\n   *\n   * The information includes release and environment from `options`,\n   * breadcrumbs and context (extra, tags and user) from the scope.\n   *\n   * Information that is already present in the event is never overwritten. For\n   * nested objects, such as the context, keys are merged.\n   *\n   * @param event The original event.\n   * @param hint May contain additional information about the original exception.\n   * @param currentScope A scope containing event metadata.\n   * @returns A new event with more information.\n   */\n  protected _prepareEvent(\n    event: Event,\n    hint: EventHint,\n    currentScope: Scope,\n    isolationScope: Scope,\n  ): PromiseLike<Event | null> {\n    const options = this.getOptions();\n    const integrations = Object.keys(this._integrations);\n    if (!hint.integrations && integrations?.length) {\n      hint.integrations = integrations;\n    }\n\n    this.emit('preprocessEvent', event, hint);\n\n    if (!event.type) {\n      isolationScope.setLastEventId(event.event_id || hint.event_id);\n    }\n\n    return prepareEvent(options, event, hint, currentScope, this, isolationScope).then(evt => {\n      if (evt === null) {\n        return evt;\n      }\n\n      this.emit('postprocessEvent', evt, hint);\n\n      evt.contexts = {\n        trace: getTraceContextFromScope(currentScope),\n        ...evt.contexts,\n      };\n\n      const dynamicSamplingContext = getDynamicSamplingContextFromScope(this, currentScope);\n\n      evt.sdkProcessingMetadata = {\n        dynamicSamplingContext,\n        ...evt.sdkProcessingMetadata,\n      };\n\n      return evt;\n    });\n  }\n\n  /**\n   * Processes the event and logs an error in case of rejection\n   * @param event\n   * @param hint\n   * @param scope\n   */\n  protected _captureEvent(\n    event: Event,\n    hint: EventHint = {},\n    currentScope = getCurrentScope(),\n    isolationScope = getIsolationScope(),\n  ): PromiseLike<string | undefined> {\n    if (DEBUG_BUILD && isErrorEvent(event)) {\n      logger.log(`Captured error event \\`${getPossibleEventMessages(event)[0] || '<unknown>'}\\``);\n    }\n\n    return this._processEvent(event, hint, currentScope, isolationScope).then(\n      finalEvent => {\n        return finalEvent.event_id;\n      },\n      reason => {\n        if (DEBUG_BUILD) {\n          // If something's gone wrong, log the error as a warning. If it's just us having used a `SentryError` for\n          // control flow, log just the message (no stack) as a log-level log.\n          if (reason instanceof SentryError && reason.logLevel === 'log') {\n            logger.log(reason.message);\n          } else {\n            logger.warn(reason);\n          }\n        }\n        return undefined;\n      },\n    );\n  }\n\n  /**\n   * Processes an event (either error or message) and sends it to Sentry.\n   *\n   * This also adds breadcrumbs and context information to the event. However,\n   * platform specific meta data (such as the User's IP address) must be added\n   * by the SDK implementor.\n   *\n   *\n   * @param event The event to send to Sentry.\n   * @param hint May contain additional information about the original exception.\n   * @param currentScope A scope containing event metadata.\n   * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n   */\n  protected _processEvent(\n    event: Event,\n    hint: EventHint,\n    currentScope: Scope,\n    isolationScope: Scope,\n  ): PromiseLike<Event> {\n    const options = this.getOptions();\n    const { sampleRate } = options;\n\n    const isTransaction = isTransactionEvent(event);\n    const isError = isErrorEvent(event);\n    const eventType = event.type || 'error';\n    const beforeSendLabel = `before send for type \\`${eventType}\\``;\n\n    // 1.0 === 100% events are sent\n    // 0.0 === 0% events are sent\n    // Sampling for transaction happens somewhere else\n    const parsedSampleRate = typeof sampleRate === 'undefined' ? undefined : parseSampleRate(sampleRate);\n    if (isError && typeof parsedSampleRate === 'number' && Math.random() > parsedSampleRate) {\n      this.recordDroppedEvent('sample_rate', 'error');\n      return rejectedSyncPromise(\n        new SentryError(\n          `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`,\n          'log',\n        ),\n      );\n    }\n\n    const dataCategory = (eventType === 'replay_event' ? 'replay' : eventType) satisfies DataCategory;\n\n    return this._prepareEvent(event, hint, currentScope, isolationScope)\n      .then(prepared => {\n        if (prepared === null) {\n          this.recordDroppedEvent('event_processor', dataCategory);\n          throw new SentryError('An event processor returned `null`, will not send event.', 'log');\n        }\n\n        const isInternalException = hint.data && (hint.data as { __sentry__: boolean }).__sentry__ === true;\n        if (isInternalException) {\n          return prepared;\n        }\n\n        const result = processBeforeSend(this, options, prepared, hint);\n        return _validateBeforeSendResult(result, beforeSendLabel);\n      })\n      .then(processedEvent => {\n        if (processedEvent === null) {\n          this.recordDroppedEvent('before_send', dataCategory);\n          if (isTransaction) {\n            const spans = event.spans || [];\n            // the transaction itself counts as one span, plus all the child spans that are added\n            const spanCount = 1 + spans.length;\n            this.recordDroppedEvent('before_send', 'span', spanCount);\n          }\n          throw new SentryError(`${beforeSendLabel} returned \\`null\\`, will not send event.`, 'log');\n        }\n\n        const session = currentScope.getSession() || isolationScope.getSession();\n        if (isError && session) {\n          this._updateSessionFromEvent(session, processedEvent);\n        }\n\n        if (isTransaction) {\n          const spanCountBefore = processedEvent.sdkProcessingMetadata?.spanCountBeforeProcessing || 0;\n          const spanCountAfter = processedEvent.spans ? processedEvent.spans.length : 0;\n\n          const droppedSpanCount = spanCountBefore - spanCountAfter;\n          if (droppedSpanCount > 0) {\n            this.recordDroppedEvent('before_send', 'span', droppedSpanCount);\n          }\n        }\n\n        // None of the Sentry built event processor will update transaction name,\n        // so if the transaction name has been changed by an event processor, we know\n        // it has to come from custom event processor added by a user\n        const transactionInfo = processedEvent.transaction_info;\n        if (isTransaction && transactionInfo && processedEvent.transaction !== event.transaction) {\n          const source = 'custom';\n          processedEvent.transaction_info = {\n            ...transactionInfo,\n            source,\n          };\n        }\n\n        this.sendEvent(processedEvent, hint);\n        return processedEvent;\n      })\n      .then(null, reason => {\n        if (reason instanceof SentryError) {\n          throw reason;\n        }\n\n        this.captureException(reason, {\n          data: {\n            __sentry__: true,\n          },\n          originalException: reason,\n        });\n        throw new SentryError(\n          `Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\\nReason: ${reason}`,\n        );\n      });\n  }\n\n  /**\n   * Occupies the client with processing and event\n   */\n  protected _process<T>(promise: PromiseLike<T>): void {\n    this._numProcessing++;\n    void promise.then(\n      value => {\n        this._numProcessing--;\n        return value;\n      },\n      reason => {\n        this._numProcessing--;\n        return reason;\n      },\n    );\n  }\n\n  /**\n   * Clears outcomes on this client and returns them.\n   */\n  protected _clearOutcomes(): Outcome[] {\n    const outcomes = this._outcomes;\n    this._outcomes = {};\n    return Object.entries(outcomes).map(([key, quantity]) => {\n      const [reason, category] = key.split(':') as [EventDropReason, DataCategory];\n      return {\n        reason,\n        category,\n        quantity,\n      };\n    });\n  }\n\n  /**\n   * Sends client reports as an envelope.\n   */\n  protected _flushOutcomes(): void {\n    DEBUG_BUILD && logger.log('Flushing outcomes...');\n\n    const outcomes = this._clearOutcomes();\n\n    if (outcomes.length === 0) {\n      DEBUG_BUILD && logger.log('No outcomes to send');\n      return;\n    }\n\n    // This is really the only place where we want to check for a DSN and only send outcomes then\n    if (!this._dsn) {\n      DEBUG_BUILD && logger.log('No dsn provided, will not send outcomes');\n      return;\n    }\n\n    DEBUG_BUILD && logger.log('Sending outcomes:', outcomes);\n\n    const envelope = createClientReportEnvelope(outcomes, this._options.tunnel && dsnToString(this._dsn));\n\n    // sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this.sendEnvelope(envelope);\n  }\n\n  /**\n   * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n   */\n  public abstract eventFromException(_exception: unknown, _hint?: EventHint): PromiseLike<Event>;\n\n  /**\n   * Creates an {@link Event} from primitive inputs to `captureMessage`.\n   */\n  public abstract eventFromMessage(\n    _message: ParameterizedString,\n    _level?: SeverityLevel,\n    _hint?: EventHint,\n  ): PromiseLike<Event>;\n}\n\n/**\n * @deprecated Use `Client` instead. This alias may be removed in a future major version.\n */\n// TODO(v10): Remove\nexport type BaseClient = Client;\n\n/**\n * @deprecated Use `Client` instead. This alias may be removed in a future major version.\n */\n// TODO(v10): Remove\nexport const BaseClient = Client;\n\n/**\n * Verifies that return value of configured `beforeSend` or `beforeSendTransaction` is of expected type, and returns the value if so.\n */\nfunction _validateBeforeSendResult(\n  beforeSendResult: PromiseLike<Event | null> | Event | null,\n  beforeSendLabel: string,\n): PromiseLike<Event | null> | Event | null {\n  const invalidValueError = `${beforeSendLabel} must return \\`null\\` or a valid event.`;\n  if (isThenable(beforeSendResult)) {\n    return beforeSendResult.then(\n      event => {\n        if (!isPlainObject(event) && event !== null) {\n          throw new SentryError(invalidValueError);\n        }\n        return event;\n      },\n      e => {\n        throw new SentryError(`${beforeSendLabel} rejected with ${e}`);\n      },\n    );\n  } else if (!isPlainObject(beforeSendResult) && beforeSendResult !== null) {\n    throw new SentryError(invalidValueError);\n  }\n  return beforeSendResult;\n}\n\n/**\n * Process the matching `beforeSendXXX` callback.\n */\nfunction processBeforeSend(\n  client: Client,\n  options: ClientOptions,\n  event: Event,\n  hint: EventHint,\n): PromiseLike<Event | null> | Event | null {\n  const { beforeSend, beforeSendTransaction, beforeSendSpan } = options;\n  let processedEvent = event;\n\n  if (isErrorEvent(processedEvent) && beforeSend) {\n    return beforeSend(processedEvent, hint);\n  }\n\n  if (isTransactionEvent(processedEvent)) {\n    if (beforeSendSpan) {\n      // process root span\n      const processedRootSpanJson = beforeSendSpan(convertTransactionEventToSpanJson(processedEvent));\n      if (!processedRootSpanJson) {\n        showSpanDropWarning();\n      } else {\n        // update event with processed root span values\n        processedEvent = merge(event, convertSpanJsonToTransactionEvent(processedRootSpanJson));\n      }\n\n      // process child spans\n      if (processedEvent.spans) {\n        const processedSpans: SpanJSON[] = [];\n        for (const span of processedEvent.spans) {\n          const processedSpan = beforeSendSpan(span);\n          if (!processedSpan) {\n            showSpanDropWarning();\n            processedSpans.push(span);\n          } else {\n            processedSpans.push(processedSpan);\n          }\n        }\n        processedEvent.spans = processedSpans;\n      }\n    }\n\n    if (beforeSendTransaction) {\n      if (processedEvent.spans) {\n        // We store the # of spans before processing in SDK metadata,\n        // so we can compare it afterwards to determine how many spans were dropped\n        const spanCountBefore = processedEvent.spans.length;\n        processedEvent.sdkProcessingMetadata = {\n          ...event.sdkProcessingMetadata,\n          spanCountBeforeProcessing: spanCountBefore,\n        };\n      }\n      return beforeSendTransaction(processedEvent as TransactionEvent, hint);\n    }\n  }\n\n  return processedEvent;\n}\n\nfunction isErrorEvent(event: Event): event is ErrorEvent {\n  return event.type === undefined;\n}\n\nfunction isTransactionEvent(event: Event): event is TransactionEvent {\n  return event.type === 'transaction';\n}\n","import type { ClientReport, ClientReportEnvelope, ClientReportItem } from '../types-hoist';\n\nimport { createEnvelope } from './envelope';\nimport { dateTimestampInSeconds } from './time';\n\n/**\n * Creates client report envelope\n * @param discarded_events An array of discard events\n * @param dsn A DSN that can be set on the header. Optional.\n */\nexport function createClientReportEnvelope(\n  discarded_events: ClientReport['discarded_events'],\n  dsn?: string,\n  timestamp?: number,\n): ClientReportEnvelope {\n  const clientReportItem: ClientReportItem = [\n    { type: 'client_report' },\n    {\n      timestamp: timestamp || dateTimestampInSeconds(),\n      discarded_events,\n    },\n  ];\n  return createEnvelope<ClientReportEnvelope>(dsn ? { dsn } : {}, [clientReportItem]);\n}\n","import type { Event } from '../types-hoist';\n\n/**\n * Get a list of possible event messages from a Sentry event.\n */\nexport function getPossibleEventMessages(event: Event): string[] {\n  const possibleMessages: string[] = [];\n\n  if (event.message) {\n    possibleMessages.push(event.message);\n  }\n\n  try {\n    // @ts-expect-error Try catching to save bundle size\n    const lastException = event.exception.values[event.exception.values.length - 1];\n    if (lastException?.value) {\n      possibleMessages.push(lastException.value);\n      if (lastException.type) {\n        possibleMessages.push(`${lastException.type}: ${lastException.value}`);\n      }\n    }\n  } catch (e) {\n    // ignore errors here\n  }\n\n  return possibleMessages;\n}\n","import type {\n  CheckInEnvelope,\n  CheckInItem,\n  DsnComponents,\n  DynamicSamplingContext,\n  SdkMetadata,\n  SerializedCheckIn,\n} from './types-hoist';\nimport { dsnToString } from './utils-hoist/dsn';\nimport { createEnvelope } from './utils-hoist/envelope';\nimport { dropUndefinedKeys } from './utils-hoist/object';\n\n/**\n * Create envelope from check in item.\n */\nexport function createCheckInEnvelope(\n  checkIn: SerializedCheckIn,\n  dynamicSamplingContext?: Partial<DynamicSamplingContext>,\n  metadata?: SdkMetadata,\n  tunnel?: string,\n  dsn?: DsnComponents,\n): CheckInEnvelope {\n  const headers: CheckInEnvelope[0] = {\n    sent_at: new Date().toISOString(),\n  };\n\n  if (metadata?.sdk) {\n    headers.sdk = {\n      name: metadata.sdk.name,\n      version: metadata.sdk.version,\n    };\n  }\n\n  if (!!tunnel && !!dsn) {\n    headers.dsn = dsnToString(dsn);\n  }\n\n  if (dynamicSamplingContext) {\n    headers.trace = dropUndefinedKeys(dynamicSamplingContext) as DynamicSamplingContext;\n  }\n\n  const item = createCheckInEnvelopeItem(checkIn);\n  return createEnvelope<CheckInEnvelope>(headers, [item]);\n}\n\nfunction createCheckInEnvelopeItem(checkIn: SerializedCheckIn): CheckInItem {\n  const checkInHeaders: CheckInItem[0] = {\n    type: 'check_in',\n  };\n  return [checkInHeaders, checkIn];\n}\n","import { SentryError } from './error';\nimport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise } from './syncpromise';\n\nexport interface PromiseBuffer<T> {\n  // exposes the internal array so tests can assert on the state of it.\n  // XXX: this really should not be public api.\n  $: Array<PromiseLike<T>>;\n  add(taskProducer: () => PromiseLike<T>): PromiseLike<T>;\n  drain(timeout?: number): PromiseLike<boolean>;\n}\n\n/**\n * Creates an new PromiseBuffer object with the specified limit\n * @param limit max number of promises that can be stored in the buffer\n */\nexport function makePromiseBuffer<T>(limit?: number): PromiseBuffer<T> {\n  const buffer: Array<PromiseLike<T>> = [];\n\n  function isReady(): boolean {\n    return limit === undefined || buffer.length < limit;\n  }\n\n  /**\n   * Remove a promise from the queue.\n   *\n   * @param task Can be any PromiseLike<T>\n   * @returns Removed promise.\n   */\n  function remove(task: PromiseLike<T>): PromiseLike<T | void> {\n    return buffer.splice(buffer.indexOf(task), 1)[0] || Promise.resolve(undefined);\n  }\n\n  /**\n   * Add a promise (representing an in-flight action) to the queue, and set it to remove itself on fulfillment.\n   *\n   * @param taskProducer A function producing any PromiseLike<T>; In previous versions this used to be `task:\n   *        PromiseLike<T>`, but under that model, Promises were instantly created on the call-site and their executor\n   *        functions therefore ran immediately. Thus, even if the buffer was full, the action still happened. By\n   *        requiring the promise to be wrapped in a function, we can defer promise creation until after the buffer\n   *        limit check.\n   * @returns The original promise.\n   */\n  function add(taskProducer: () => PromiseLike<T>): PromiseLike<T> {\n    if (!isReady()) {\n      return rejectedSyncPromise(new SentryError('Not adding Promise because buffer limit was reached.'));\n    }\n\n    // start the task and add its promise to the queue\n    const task = taskProducer();\n    if (buffer.indexOf(task) === -1) {\n      buffer.push(task);\n    }\n    void task\n      .then(() => remove(task))\n      // Use `then(null, rejectionHandler)` rather than `catch(rejectionHandler)` so that we can use `PromiseLike`\n      // rather than `Promise`. `PromiseLike` doesn't have a `.catch` method, making its polyfill smaller. (ES5 didn't\n      // have promises, so TS has to polyfill when down-compiling.)\n      .then(null, () =>\n        remove(task).then(null, () => {\n          // We have to add another catch here because `remove()` starts a new promise chain.\n        }),\n      );\n    return task;\n  }\n\n  /**\n   * Wait for all promises in the queue to resolve or for timeout to expire, whichever comes first.\n   *\n   * @param timeout The time, in ms, after which to resolve to `false` if the queue is still non-empty. Passing `0` (or\n   * not passing anything) will make the promise wait as long as it takes for the queue to drain before resolving to\n   * `true`.\n   * @returns A promise which will resolve to `true` if the queue is already empty or drains before the timeout, and\n   * `false` otherwise\n   */\n  function drain(timeout?: number): PromiseLike<boolean> {\n    return new SyncPromise<boolean>((resolve, reject) => {\n      let counter = buffer.length;\n\n      if (!counter) {\n        return resolve(true);\n      }\n\n      // wait for `timeout` ms and then resolve to `false` (if not cancelled first)\n      const capturedSetTimeout = setTimeout(() => {\n        if (timeout && timeout > 0) {\n          resolve(false);\n        }\n      }, timeout);\n\n      // if all promises resolve in time, cancel the timer and resolve to `true`\n      buffer.forEach(item => {\n        void resolvedSyncPromise(item).then(() => {\n          if (!--counter) {\n            clearTimeout(capturedSetTimeout);\n            resolve(true);\n          }\n        }, reject);\n      });\n    });\n  }\n\n  return {\n    $: buffer,\n    add,\n    drain,\n  };\n}\n","import type { Event, EventHint, Exception, ExtendedError, StackParser } from '../types-hoist';\n\nimport { isInstanceOf } from './is';\nimport { truncate } from './string';\n\n/**\n * Creates exceptions inside `event.exception.values` for errors that are nested on properties based on the `key` parameter.\n */\nexport function applyAggregateErrorsToEvent(\n  exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception,\n  parser: StackParser,\n  maxValueLimit: number = 250,\n  key: string,\n  limit: number,\n  event: Event,\n  hint?: EventHint,\n): void {\n  if (!event.exception?.values || !hint || !isInstanceOf(hint.originalException, Error)) {\n    return;\n  }\n\n  // Generally speaking the last item in `event.exception.values` is the exception originating from the original Error\n  const originalException: Exception | undefined =\n    event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : undefined;\n\n  // We only create exception grouping if there is an exception in the event.\n  if (originalException) {\n    event.exception.values = truncateAggregateExceptions(\n      aggregateExceptionsFromError(\n        exceptionFromErrorImplementation,\n        parser,\n        limit,\n        hint.originalException as ExtendedError,\n        key,\n        event.exception.values,\n        originalException,\n        0,\n      ),\n      maxValueLimit,\n    );\n  }\n}\n\nfunction aggregateExceptionsFromError(\n  exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception,\n  parser: StackParser,\n  limit: number,\n  error: ExtendedError,\n  key: string,\n  prevExceptions: Exception[],\n  exception: Exception,\n  exceptionId: number,\n): Exception[] {\n  if (prevExceptions.length >= limit + 1) {\n    return prevExceptions;\n  }\n\n  let newExceptions = [...prevExceptions];\n\n  // Recursively call this function in order to walk down a chain of errors\n  if (isInstanceOf(error[key], Error)) {\n    applyExceptionGroupFieldsForParentException(exception, exceptionId);\n    const newException = exceptionFromErrorImplementation(parser, error[key]);\n    const newExceptionId = newExceptions.length;\n    applyExceptionGroupFieldsForChildException(newException, key, newExceptionId, exceptionId);\n    newExceptions = aggregateExceptionsFromError(\n      exceptionFromErrorImplementation,\n      parser,\n      limit,\n      error[key],\n      key,\n      [newException, ...newExceptions],\n      newException,\n      newExceptionId,\n    );\n  }\n\n  // This will create exception grouping for AggregateErrors\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError\n  if (Array.isArray(error.errors)) {\n    error.errors.forEach((childError, i) => {\n      if (isInstanceOf(childError, Error)) {\n        applyExceptionGroupFieldsForParentException(exception, exceptionId);\n        const newException = exceptionFromErrorImplementation(parser, childError);\n        const newExceptionId = newExceptions.length;\n        applyExceptionGroupFieldsForChildException(newException, `errors[${i}]`, newExceptionId, exceptionId);\n        newExceptions = aggregateExceptionsFromError(\n          exceptionFromErrorImplementation,\n          parser,\n          limit,\n          childError,\n          key,\n          [newException, ...newExceptions],\n          newException,\n          newExceptionId,\n        );\n      }\n    });\n  }\n\n  return newExceptions;\n}\n\nfunction applyExceptionGroupFieldsForParentException(exception: Exception, exceptionId: number): void {\n  // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n  exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n  exception.mechanism = {\n    ...exception.mechanism,\n    ...(exception.type === 'AggregateError' && { is_exception_group: true }),\n    exception_id: exceptionId,\n  };\n}\n\nfunction applyExceptionGroupFieldsForChildException(\n  exception: Exception,\n  source: string,\n  exceptionId: number,\n  parentId: number | undefined,\n): void {\n  // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n  exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n  exception.mechanism = {\n    ...exception.mechanism,\n    type: 'chained',\n    source,\n    exception_id: exceptionId,\n    parent_id: parentId,\n  };\n}\n\n/**\n * Truncate the message (exception.value) of all exceptions in the event.\n * Because this event processor is ran after `applyClientOptions`,\n * we need to truncate the message of the added exceptions here.\n */\nfunction truncateAggregateExceptions(exceptions: Exception[], maxValueLength: number): Exception[] {\n  return exceptions.map(exception => {\n    if (exception.value) {\n      exception.value = truncate(exception.value, maxValueLength);\n    }\n    return exception;\n  });\n}\n","import type { Event, StackParser } from './types-hoist';\nimport { GLOBAL_OBJ } from './utils-hoist/worldwide';\n\n/** Keys are source filename/url, values are metadata objects. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst filenameMetadataMap = new Map<string, any>();\n/** Set of stack strings that have already been parsed. */\nconst parsedStacks = new Set<string>();\n\nfunction ensureMetadataStacksAreParsed(parser: StackParser): void {\n  if (!GLOBAL_OBJ._sentryModuleMetadata) {\n    return;\n  }\n\n  for (const stack of Object.keys(GLOBAL_OBJ._sentryModuleMetadata)) {\n    const metadata = GLOBAL_OBJ._sentryModuleMetadata[stack];\n\n    if (parsedStacks.has(stack)) {\n      continue;\n    }\n\n    // Ensure this stack doesn't get parsed again\n    parsedStacks.add(stack);\n\n    const frames = parser(stack);\n\n    // Go through the frames starting from the top of the stack and find the first one with a filename\n    for (const frame of frames.reverse()) {\n      if (frame.filename) {\n        // Save the metadata for this filename\n        filenameMetadataMap.set(frame.filename, metadata);\n        break;\n      }\n    }\n  }\n}\n\n/**\n * Retrieve metadata for a specific JavaScript file URL.\n *\n * Metadata is injected by the Sentry bundler plugins using the `_experiments.moduleMetadata` config option.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getMetadataForUrl(parser: StackParser, filename: string): any | undefined {\n  ensureMetadataStacksAreParsed(parser);\n  return filenameMetadataMap.get(filename);\n}\n\n/**\n * Adds metadata to stack frames.\n *\n * Metadata is injected by the Sentry bundler plugins using the `_experiments.moduleMetadata` config option.\n */\nexport function addMetadataToStackFrames(parser: StackParser, event: Event): void {\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event.exception!.values!.forEach(exception => {\n      if (!exception.stacktrace) {\n        return;\n      }\n\n      for (const frame of exception.stacktrace.frames || []) {\n        if (!frame.filename || frame.module_metadata) {\n          continue;\n        }\n\n        const metadata = getMetadataForUrl(parser, frame.filename);\n\n        if (metadata) {\n          frame.module_metadata = metadata;\n        }\n      }\n    });\n  } catch (_) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n}\n\n/**\n * Strips metadata from stack frames.\n */\nexport function stripMetadataFromStackFrames(event: Event): void {\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event.exception!.values!.forEach(exception => {\n      if (!exception.stacktrace) {\n        return;\n      }\n\n      for (const frame of exception.stacktrace.frames || []) {\n        delete frame.module_metadata;\n      }\n    });\n  } catch (_) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { ConsoleLevel, HandlerDataConsole } from '../../types-hoist';\n\nimport { CONSOLE_LEVELS, originalConsoleMethods } from '../logger';\nimport { fill } from '../object';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers';\n\n/**\n * Add an instrumentation handler for when a console.xxx method is called.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addConsoleInstrumentationHandler(handler: (data: HandlerDataConsole) => void): void {\n  const type = 'console';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentConsole);\n}\n\nfunction instrumentConsole(): void {\n  if (!('console' in GLOBAL_OBJ)) {\n    return;\n  }\n\n  CONSOLE_LEVELS.forEach(function (level: ConsoleLevel): void {\n    if (!(level in GLOBAL_OBJ.console)) {\n      return;\n    }\n\n    fill(GLOBAL_OBJ.console, level, function (originalConsoleMethod: () => any): Function {\n      originalConsoleMethods[level] = originalConsoleMethod;\n\n      return function (...args: any[]): void {\n        const handlerData: HandlerDataConsole = { args, level };\n        triggerHandlers('console', handlerData);\n\n        const log = originalConsoleMethods[level];\n        log?.apply(GLOBAL_OBJ.console, args);\n      };\n    });\n  });\n}\n","import type { SeverityLevel } from '../types-hoist';\n\n/**\n * Converts a string-based level into a `SeverityLevel`, normalizing it along the way.\n *\n * @param level String representation of desired `SeverityLevel`.\n * @returns The `SeverityLevel` corresponding to the given string, or 'log' if the string isn't a valid level.\n */\nexport function severityLevelFromString(level: SeverityLevel | string): SeverityLevel {\n  return (\n    level === 'warn' ? 'warning' : ['fatal', 'error', 'warning', 'log', 'info', 'debug'].includes(level) ? level : 'log'\n  ) as SeverityLevel;\n}\n","// Slightly modified (no IE8 support, ES6) and transcribed to TypeScript\n// https://github.com/calvinmetcalf/rollup-plugin-node-builtins/blob/63ab8aacd013767445ca299e468d9a60a95328d7/src/es6/path.js\n//\n// Copyright Joyent, Inc.and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n/** JSDoc */\nfunction normalizeArray(parts: string[], allowAboveRoot?: boolean): string[] {\n  // if the path tries to go above the root, `up` ends up > 0\n  let up = 0;\n  for (let i = parts.length - 1; i >= 0; i--) {\n    const last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nconst splitPathRe = /^(\\S+:\\\\|\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^/\\\\]+?|)(\\.[^./\\\\]*|))(?:[/\\\\]*)$/;\n/** JSDoc */\nfunction splitPath(filename: string): string[] {\n  // Truncate files names greater than 1024 characters to avoid regex dos\n  // https://github.com/getsentry/sentry-javascript/pull/8737#discussion_r1285719172\n  const truncated = filename.length > 1024 ? `<truncated>${filename.slice(-1024)}` : filename;\n  const parts = splitPathRe.exec(truncated);\n  return parts ? parts.slice(1) : [];\n}\n\n// path.resolve([from ...], to)\n// posix version\n/** JSDoc */\nexport function resolve(...args: string[]): string {\n  let resolvedPath = '';\n  let resolvedAbsolute = false;\n\n  for (let i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    const path = i >= 0 ? args[i] : '/';\n\n    // Skip empty entries\n    if (!path) {\n      continue;\n    }\n\n    resolvedPath = `${path}/${resolvedPath}`;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(\n    resolvedPath.split('/').filter(p => !!p),\n    !resolvedAbsolute,\n  ).join('/');\n\n  return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n}\n\n/** JSDoc */\nfunction trim(arr: string[]): string[] {\n  let start = 0;\n  for (; start < arr.length; start++) {\n    if (arr[start] !== '') {\n      break;\n    }\n  }\n\n  let end = arr.length - 1;\n  for (; end >= 0; end--) {\n    if (arr[end] !== '') {\n      break;\n    }\n  }\n\n  if (start > end) {\n    return [];\n  }\n  return arr.slice(start, end - start + 1);\n}\n\n// path.relative(from, to)\n// posix version\n/** JSDoc */\nexport function relative(from: string, to: string): string {\n  /* eslint-disable no-param-reassign */\n  from = resolve(from).slice(1);\n  to = resolve(to).slice(1);\n  /* eslint-enable no-param-reassign */\n\n  const fromParts = trim(from.split('/'));\n  const toParts = trim(to.split('/'));\n\n  const length = Math.min(fromParts.length, toParts.length);\n  let samePartsLength = length;\n  for (let i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  let outputParts = [];\n  for (let i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n}\n\n// path.normalize(path)\n// posix version\n/** JSDoc */\nexport function normalizePath(path: string): string {\n  const isPathAbsolute = isAbsolute(path);\n  const trailingSlash = path.slice(-1) === '/';\n\n  // Normalize the path\n  let normalizedPath = normalizeArray(\n    path.split('/').filter(p => !!p),\n    !isPathAbsolute,\n  ).join('/');\n\n  if (!normalizedPath && !isPathAbsolute) {\n    normalizedPath = '.';\n  }\n  if (normalizedPath && trailingSlash) {\n    normalizedPath += '/';\n  }\n\n  return (isPathAbsolute ? '/' : '') + normalizedPath;\n}\n\n// posix version\n/** JSDoc */\nexport function isAbsolute(path: string): boolean {\n  return path.charAt(0) === '/';\n}\n\n// posix version\n/** JSDoc */\nexport function join(...args: string[]): string {\n  return normalizePath(args.join('/'));\n}\n\n/** JSDoc */\nexport function dirname(path: string): string {\n  const result = splitPath(path);\n  const root = result[0] || '';\n  let dir = result[1];\n\n  if (!root && !dir) {\n    // No dirname whatsoever\n    return '.';\n  }\n\n  if (dir) {\n    // It has a dirname, strip trailing slash\n    dir = dir.slice(0, dir.length - 1);\n  }\n\n  return root + dir;\n}\n\n/** JSDoc */\nexport function basename(path: string, ext?: string): string {\n  let f = splitPath(path)[2] || '';\n  if (ext && f.slice(ext.length * -1) === ext) {\n    f = f.slice(0, f.length - ext.length);\n  }\n  return f;\n}\n","type PartialURL = {\n  host?: string;\n  path?: string;\n  protocol?: string;\n  relative?: string;\n  search?: string;\n  hash?: string;\n};\n\n/**\n * Parses string form of URL into an object\n * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n * // intentionally using regex and not <a/> href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\nexport function parseUrl(url: string): PartialURL {\n  if (!url) {\n    return {};\n  }\n\n  const match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n  if (!match) {\n    return {};\n  }\n\n  // coerce to undefined values to empty string so we don't get 'undefined'\n  const query = match[6] || '';\n  const fragment = match[8] || '';\n  return {\n    host: match[4],\n    path: match[5],\n    protocol: match[2],\n    search: query,\n    hash: fragment,\n    relative: match[5] + query + fragment, // everything minus origin\n  };\n}\n\n/**\n * Strip the query string and fragment off of a given URL or path (if present)\n *\n * @param urlPath Full URL or path, including possible query string and/or fragment\n * @returns URL or path without query string or fragment\n */\nexport function stripUrlQueryAndFragment(urlPath: string): string {\n  return (urlPath.split(/[?#]/, 1) as [string, ...string[]])[0];\n}\n\n/**\n * Takes a URL object and returns a sanitized string which is safe to use as span name\n * see: https://develop.sentry.dev/sdk/data-handling/#structuring-data\n */\nexport function getSanitizedUrlString(url: PartialURL): string {\n  const { protocol, host, path } = url;\n\n  const filteredHost =\n    host\n      // Always filter out authority\n      ?.replace(/^.*@/, '[filtered]:[filtered]@')\n      // Don't show standard :80 (http) and :443 (https) ports to reduce the noise\n      // TODO: Use new URL global if it exists\n      .replace(/(:80)$/, '')\n      .replace(/(:443)$/, '') || '';\n\n  return `${protocol ? `${protocol}://` : ''}${filteredHost}${path}`;\n}\n","import { DEBUG_BUILD } from './debug-build';\nimport { logger } from './logger';\nimport { GLOBAL_OBJ } from './worldwide';\n\nconst WINDOW = GLOBAL_OBJ as unknown as Window;\n\ndeclare const EdgeRuntime: string | undefined;\n\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsErrorEvent(): boolean {\n  try {\n    new ErrorEvent('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports DOMError objects\n * {@link supportsDOMError}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMError(): boolean {\n  try {\n    // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n    // 1 argument required, but only 0 present.\n    // @ts-expect-error It really needs 1 argument, not 0.\n    new DOMError('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports DOMException objects\n * {@link supportsDOMException}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMException(): boolean {\n  try {\n    new DOMException('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports History API\n * {@link supportsHistory}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsHistory(): boolean {\n  return 'history' in WINDOW && !!WINDOW.history;\n}\n\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsFetch(): boolean {\n  if (!('fetch' in WINDOW)) {\n    return false;\n  }\n\n  try {\n    new Headers();\n    new Request('http://www.example.com');\n    new Response();\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * isNative checks if the given function is a native implementation\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isNativeFunction(func: Function): boolean {\n  return func && /^function\\s+\\w+\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\n\n/**\n * Tells whether current environment supports Fetch API natively\n * {@link supportsNativeFetch}.\n *\n * @returns true if `window.fetch` is natively implemented, false otherwise\n */\nexport function supportsNativeFetch(): boolean {\n  if (typeof EdgeRuntime === 'string') {\n    return true;\n  }\n\n  if (!supportsFetch()) {\n    return false;\n  }\n\n  // Fast path to avoid DOM I/O\n  // eslint-disable-next-line @typescript-eslint/unbound-method\n  if (isNativeFunction(WINDOW.fetch)) {\n    return true;\n  }\n\n  // window.fetch is implemented, but is polyfilled or already wrapped (e.g: by a chrome extension)\n  // so create a \"pure\" iframe to see if that has native fetch\n  let result = false;\n  const doc = WINDOW.document;\n  // eslint-disable-next-line deprecation/deprecation\n  if (doc && typeof (doc.createElement as unknown) === 'function') {\n    try {\n      const sandbox = doc.createElement('iframe');\n      sandbox.hidden = true;\n      doc.head.appendChild(sandbox);\n      if (sandbox.contentWindow?.fetch) {\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        result = isNativeFunction(sandbox.contentWindow.fetch);\n      }\n      doc.head.removeChild(sandbox);\n    } catch (err) {\n      DEBUG_BUILD &&\n        logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err);\n    }\n  }\n\n  return result;\n}\n\n/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReportingObserver(): boolean {\n  return 'ReportingObserver' in WINDOW;\n}\n\n/**\n * Tells whether current environment supports Referrer Policy API\n * {@link supportsReferrerPolicy}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReferrerPolicy(): boolean {\n  // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default'\n  // (see https://caniuse.com/#feat=referrer-policy),\n  // it doesn't. And it throws an exception instead of ignoring this parameter...\n  // REF: https://github.com/getsentry/raven-js/issues/1233\n\n  if (!supportsFetch()) {\n    return false;\n  }\n\n  try {\n    new Request('_', {\n      referrerPolicy: 'origin' as ReferrerPolicy,\n    });\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n","/*\n * This module exists for optimizations in the build process through rollup and terser.  We define some global\n * constants, which can be overridden during build. By guarding certain pieces of code with functions that return these\n * constants, we can control whether or not they appear in the final bundle. (Any code guarded by a false condition will\n * never run, and will hence be dropped during treeshaking.) The two primary uses for this are stripping out calls to\n * `logger` and preventing node-related code from appearing in browser bundles.\n *\n * Attention:\n * This file should not be used to define constants/flags that are intended to be used for tree-shaking conducted by\n * users. These flags should live in their respective packages, as we identified user tooling (specifically webpack)\n * having issues tree-shaking these constants across package boundaries.\n * An example for this is the __SENTRY_DEBUG__ constant. It is declared in each package individually because we want\n * users to be able to shake away expressions that it guards.\n */\n\ndeclare const __SENTRY_BROWSER_BUNDLE__: boolean | undefined;\n\nexport type SdkSource = 'npm' | 'cdn' | 'loader';\n\n/**\n * Figures out if we're building a browser bundle.\n *\n * @returns true if this is a browser bundle build.\n */\nexport function isBrowserBundle(): boolean {\n  return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;\n}\n\n/**\n * Get source of SDK.\n */\nexport function getSDKSource(): SdkSource {\n  // This comment is used to identify this line in the CDN bundle build step and replace this with \"return 'cdn';\"\n  /* __SENTRY_SDK_SOURCE__ */ return 'npm';\n}\n","// This code was originally forked from https://github.com/felixge/node-stack-trace\n// Since then it has been highly modified to fit our needs.\n\n// Copyright (c) 2011 Felix Geisendörfer (felix@debuggable.com)//\n//\n//  Permission is hereby granted, free of charge, to any person obtaining a copy\n//  of this software and associated documentation files (the \"Software\"), to deal\n//  in the Software without restriction, including without limitation the rights\n//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n//  copies of the Software, and to permit persons to whom the Software is\n//  furnished to do so, subject to the following conditions://\n//\n//  The above copyright notice and this permission notice shall be included in\n//  all copies or substantial portions of the Software.//\n//\n//  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n//  THE SOFTWARE.\n\nimport type { StackLineParser, StackLineParserFn } from '../types-hoist';\nimport { UNKNOWN_FUNCTION } from './stacktrace';\n\nexport type GetModuleFn = (filename: string | undefined) => string | undefined;\n\n/**\n * Does this filename look like it's part of the app code?\n */\nexport function filenameIsInApp(filename: string, isNative: boolean = false): boolean {\n  const isInternal =\n    isNative ||\n    (filename &&\n      // It's not internal if it's an absolute linux path\n      !filename.startsWith('/') &&\n      // It's not internal if it's an absolute windows path\n      !filename.match(/^[A-Z]:/) &&\n      // It's not internal if the path is starting with a dot\n      !filename.startsWith('.') &&\n      // It's not internal if the frame has a protocol. In node, this is usually the case if the file got pre-processed with a bundler like webpack\n      !filename.match(/^[a-zA-Z]([a-zA-Z0-9.\\-+])*:\\/\\//)); // Schema from: https://stackoverflow.com/a/3641782\n\n  // in_app is all that's not an internal Node function or a module within node_modules\n  // note that isNative appears to return true even for node core libraries\n  // see https://github.com/getsentry/raven-node/issues/176\n\n  return !isInternal && filename !== undefined && !filename.includes('node_modules/');\n}\n\n/** Node Stack line parser */\nexport function node(getModule?: GetModuleFn): StackLineParserFn {\n  const FILENAME_MATCH = /^\\s*[-]{4,}$/;\n  const FULL_MATCH = /at (?:async )?(?:(.+?)\\s+\\()?(?:(.+):(\\d+):(\\d+)?|([^)]+))\\)?/;\n\n  // eslint-disable-next-line complexity\n  return (line: string) => {\n    const lineMatch = line.match(FULL_MATCH);\n\n    if (lineMatch) {\n      let object: string | undefined;\n      let method: string | undefined;\n      let functionName: string | undefined;\n      let typeName: string | undefined;\n      let methodName: string | undefined;\n\n      if (lineMatch[1]) {\n        functionName = lineMatch[1];\n\n        let methodStart = functionName.lastIndexOf('.');\n        if (functionName[methodStart - 1] === '.') {\n          methodStart--;\n        }\n\n        if (methodStart > 0) {\n          object = functionName.slice(0, methodStart);\n          method = functionName.slice(methodStart + 1);\n          const objectEnd = object.indexOf('.Module');\n          if (objectEnd > 0) {\n            functionName = functionName.slice(objectEnd + 1);\n            object = object.slice(0, objectEnd);\n          }\n        }\n        typeName = undefined;\n      }\n\n      if (method) {\n        typeName = object;\n        methodName = method;\n      }\n\n      if (method === '<anonymous>') {\n        methodName = undefined;\n        functionName = undefined;\n      }\n\n      if (functionName === undefined) {\n        methodName = methodName || UNKNOWN_FUNCTION;\n        functionName = typeName ? `${typeName}.${methodName}` : methodName;\n      }\n\n      let filename = lineMatch[2]?.startsWith('file://') ? lineMatch[2].slice(7) : lineMatch[2];\n      const isNative = lineMatch[5] === 'native';\n\n      // If it's a Windows path, trim the leading slash so that `/C:/foo` becomes `C:/foo`\n      if (filename?.match(/\\/[A-Z]:/)) {\n        filename = filename.slice(1);\n      }\n\n      if (!filename && lineMatch[5] && !isNative) {\n        filename = lineMatch[5];\n      }\n\n      return {\n        filename: filename ? decodeURI(filename) : undefined,\n        module: getModule ? getModule(filename) : undefined,\n        function: functionName,\n        lineno: _parseIntOrUndefined(lineMatch[3]),\n        colno: _parseIntOrUndefined(lineMatch[4]),\n        in_app: filenameIsInApp(filename || '', isNative),\n      };\n    }\n\n    if (line.match(FILENAME_MATCH)) {\n      return {\n        filename: line,\n      };\n    }\n\n    return undefined;\n  };\n}\n\n/**\n * Node.js stack line parser\n *\n * This is in @sentry/core so it can be used from the Electron SDK in the browser for when `nodeIntegration == true`.\n * This allows it to be used without referencing or importing any node specific code which causes bundlers to complain\n */\nexport function nodeStackLineParser(getModule?: GetModuleFn): StackLineParser {\n  return [90, node(getModule)];\n}\n\nfunction _parseIntOrUndefined(input: string | undefined): number | undefined {\n  return parseInt(input || '', 10) || undefined;\n}\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://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,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { observe } from '../observe';\n\ndeclare global {\n  interface Performance {\n    interactionCount: number;\n  }\n}\n\nlet interactionCountEstimate = 0;\nlet minKnownInteractionId = Infinity;\nlet maxKnownInteractionId = 0;\n\nconst updateEstimate = (entries: PerformanceEventTiming[]) => {\n  entries.forEach(e => {\n    if (e.interactionId) {\n      minKnownInteractionId = Math.min(minKnownInteractionId, e.interactionId);\n      maxKnownInteractionId = Math.max(maxKnownInteractionId, e.interactionId);\n\n      interactionCountEstimate = maxKnownInteractionId ? (maxKnownInteractionId - minKnownInteractionId) / 7 + 1 : 0;\n    }\n  });\n};\n\nlet po: PerformanceObserver | undefined;\n\n/**\n * Returns the `interactionCount` value using the native API (if available)\n * or the polyfill estimate in this module.\n */\nexport const getInteractionCount = (): number => {\n  return po ? interactionCountEstimate : performance.interactionCount || 0;\n};\n\n/**\n * Feature detects native support or initializes the polyfill if needed.\n */\nexport const initInteractionCountPolyfill = (): void => {\n  if ('interactionCount' in performance || po) return;\n\n  po = observe('event', updateEstimate, {\n    type: 'event',\n    buffered: true,\n    durationThreshold: 0,\n  } as PerformanceObserverInit);\n};\n","/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://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,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../../types';\nimport { onHidden } from './onHidden';\nimport { runOnce } from './runOnce';\n\n/**\n * Runs the passed callback during the next idle period, or immediately\n * if the browser's visibility state is (or becomes) hidden.\n */\nexport const whenIdle = (cb: () => void): number => {\n  const rIC = WINDOW.requestIdleCallback || WINDOW.setTimeout;\n\n  let handle = -1;\n  // eslint-disable-next-line no-param-reassign\n  cb = runOnce(cb) as () => void;\n  // If the document is hidden, run the callback immediately, otherwise\n  // race an idle callback with the next `visibilitychange` event.\n  if (WINDOW.document?.visibilityState === 'hidden') {\n    cb();\n  } else {\n    handle = rIC(cb);\n    onHidden(cb);\n  }\n  return handle;\n};\n","// This was originally forked from https://github.com/csnover/TraceKit, and was largely\n// re - written as part of raven - js.\n//\n// This code was later copied to the JavaScript mono - repo and further modified and\n// refactored over the years.\n\n// Copyright (c) 2013 Onur Can Cakmak onur.cakmak@gmail.com and all TraceKit contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this\n// software and associated documentation files(the 'Software'), to deal in the Software\n// without restriction, including without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and / or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to the following\n// conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies\n// or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\n// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport { UNKNOWN_FUNCTION, createStackParser } from '@sentry/core';\nimport type { StackFrame, StackLineParser, StackLineParserFn } from '@sentry/core';\n\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\n\nfunction createFrame(filename: string, func: string, lineno?: number, colno?: number): StackFrame {\n  const frame: StackFrame = {\n    filename,\n    function: func === '<anonymous>' ? UNKNOWN_FUNCTION : func,\n    in_app: true, // All browser frames are considered in_app\n  };\n\n  if (lineno !== undefined) {\n    frame.lineno = lineno;\n  }\n\n  if (colno !== undefined) {\n    frame.colno = colno;\n  }\n\n  return frame;\n}\n\n// This regex matches frames that have no function name (ie. are at the top level of a module).\n// For example \"at http://localhost:5000//script.js:1:126\"\n// Frames _with_ function names usually look as follows: \"at commitLayoutEffects (react-dom.development.js:23426:1)\"\nconst chromeRegexNoFnName = /^\\s*at (\\S+?)(?::(\\d+))(?::(\\d+))\\s*$/i;\n\n// This regex matches all the frames that have a function name.\nconst chromeRegex =\n  /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\n// We cannot call this variable `chrome` because it can conflict with global `chrome` variable in certain environments\n// See: https://github.com/getsentry/sentry-javascript/issues/6880\nconst chromeStackParserFn: StackLineParserFn = line => {\n  // If the stack line has no function name, we need to parse it differently\n  const noFnParts = chromeRegexNoFnName.exec(line) as null | [string, string, string, string];\n\n  if (noFnParts) {\n    const [, filename, line, col] = noFnParts;\n    return createFrame(filename, UNKNOWN_FUNCTION, +line, +col);\n  }\n\n  const parts = chromeRegex.exec(line) as null | [string, string, string, string, string];\n\n  if (parts) {\n    const isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n    if (isEval) {\n      const subMatch = chromeEvalRegex.exec(parts[2]) as null | [string, string, string, string];\n\n      if (subMatch) {\n        // throw out eval line/column and use top-most line/column number\n        parts[2] = subMatch[1]; // url\n        parts[3] = subMatch[2]; // line\n        parts[4] = subMatch[3]; // column\n      }\n    }\n\n    // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now\n    // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)\n    const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n\n    return createFrame(filename, func, parts[3] ? +parts[3] : undefined, parts[4] ? +parts[4] : undefined);\n  }\n\n  return;\n};\n\nexport const chromeStackLineParser: StackLineParser = [CHROME_PRIORITY, chromeStackParserFn];\n\n// gecko regex: `(?:bundle|\\d+\\.js)`: `bundle` is for react native, `\\d+\\.js` also but specifically for ram bundles because it\n// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js\n// We need this specific case for now because we want no other regex to match.\nconst geckoREgex =\n  /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nconst gecko: StackLineParserFn = line => {\n  const parts = geckoREgex.exec(line) as null | [string, string, string, string, string, string];\n\n  if (parts) {\n    const isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n    if (isEval) {\n      const subMatch = geckoEvalRegex.exec(parts[3]) as null | [string, string, string];\n\n      if (subMatch) {\n        // throw out eval line/column and use top-most line number\n        parts[1] = parts[1] || 'eval';\n        parts[3] = subMatch[1];\n        parts[4] = subMatch[2];\n        parts[5] = ''; // no column when eval\n      }\n    }\n\n    let filename = parts[3];\n    let func = parts[1] || UNKNOWN_FUNCTION;\n    [func, filename] = extractSafariExtensionDetails(func, filename);\n\n    return createFrame(filename, func, parts[4] ? +parts[4] : undefined, parts[5] ? +parts[5] : undefined);\n  }\n\n  return;\n};\n\nexport const geckoStackLineParser: StackLineParser = [GECKO_PRIORITY, gecko];\n\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nconst winjs: StackLineParserFn = line => {\n  const parts = winjsRegex.exec(line) as null | [string, string, string, string, string];\n\n  return parts\n    ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : undefined)\n    : undefined;\n};\n\nexport const winjsStackLineParser: StackLineParser = [WINJS_PRIORITY, winjs];\n\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n\nconst opera10: StackLineParserFn = line => {\n  const parts = opera10Regex.exec(line) as null | [string, string, string, string];\n  return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined;\n};\n\nexport const opera10StackLineParser: StackLineParser = [OPERA10_PRIORITY, opera10];\n\nconst opera11Regex =\n  / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\nconst opera11: StackLineParserFn = line => {\n  const parts = opera11Regex.exec(line) as null | [string, string, string, string, string, string];\n  return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined;\n};\n\nexport const opera11StackLineParser: StackLineParser = [OPERA11_PRIORITY, opera11];\n\nexport const defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser];\n\nexport const defaultStackParser = createStackParser(...defaultStackLineParsers);\n\n/**\n * Safari web extensions, starting version unknown, can produce \"frames-only\" stacktraces.\n * What it means, is that instead of format like:\n *\n * Error: wat\n *   at function@url:row:col\n *   at function@url:row:col\n *   at function@url:row:col\n *\n * it produces something like:\n *\n *   function@url:row:col\n *   function@url:row:col\n *   function@url:row:col\n *\n * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.\n * This function is extracted so that we can use it in both places without duplicating the logic.\n * Unfortunately \"just\" changing RegExp is too complicated now and making it pass all tests\n * and fix this case seems like an impossible, or at least way too time-consuming task.\n */\nconst extractSafariExtensionDetails = (func: string, filename: string): [string, string] => {\n  const isSafariExtension = func.indexOf('safari-extension') !== -1;\n  const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;\n\n  return isSafariExtension || isSafariWebExtension\n    ? [\n        func.indexOf('@') !== -1 ? (func.split('@')[0] as string) : UNKNOWN_FUNCTION,\n        isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,\n      ]\n    : [func, filename];\n};\n","/* eslint-disable max-lines */\n\nimport {\n  SENTRY_XHR_DATA_KEY,\n  addClickKeypressInstrumentationHandler,\n  addHistoryInstrumentationHandler,\n  addXhrInstrumentationHandler,\n} from '@sentry-internal/browser-utils';\nimport type { FetchHint, XhrHint } from '@sentry-internal/browser-utils';\nimport type {\n  Breadcrumb,\n  Client,\n  Event as SentryEvent,\n  FetchBreadcrumbData,\n  FetchBreadcrumbHint,\n  HandlerDataConsole,\n  HandlerDataDom,\n  HandlerDataFetch,\n  HandlerDataHistory,\n  HandlerDataXhr,\n  IntegrationFn,\n  XhrBreadcrumbData,\n  XhrBreadcrumbHint,\n} from '@sentry/core';\nimport {\n  addBreadcrumb,\n  addConsoleInstrumentationHandler,\n  addFetchInstrumentationHandler,\n  defineIntegration,\n  getBreadcrumbLogLevelFromHttpStatusCode,\n  getClient,\n  getComponentName,\n  getEventDescription,\n  htmlTreeAsString,\n  logger,\n  parseUrl,\n  safeJoin,\n  severityLevelFromString,\n} from '@sentry/core';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\n\ninterface BreadcrumbsOptions {\n  console: boolean;\n  dom:\n    | boolean\n    | {\n        serializeAttribute?: string | string[];\n        maxStringLength?: number;\n      };\n  fetch: boolean;\n  history: boolean;\n  sentry: boolean;\n  xhr: boolean;\n}\n\n/** maxStringLength gets capped to prevent 100 breadcrumbs exceeding 1MB event payload size */\nconst MAX_ALLOWED_STRING_LENGTH = 1024;\n\nconst INTEGRATION_NAME = 'Breadcrumbs';\n\nconst _breadcrumbsIntegration = ((options: Partial<BreadcrumbsOptions> = {}) => {\n  const _options = {\n    console: true,\n    dom: true,\n    fetch: true,\n    history: true,\n    sentry: true,\n    xhr: true,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      if (_options.console) {\n        addConsoleInstrumentationHandler(_getConsoleBreadcrumbHandler(client));\n      }\n      if (_options.dom) {\n        addClickKeypressInstrumentationHandler(_getDomBreadcrumbHandler(client, _options.dom));\n      }\n      if (_options.xhr) {\n        addXhrInstrumentationHandler(_getXhrBreadcrumbHandler(client));\n      }\n      if (_options.fetch) {\n        addFetchInstrumentationHandler(_getFetchBreadcrumbHandler(client));\n      }\n      if (_options.history) {\n        addHistoryInstrumentationHandler(_getHistoryBreadcrumbHandler(client));\n      }\n      if (_options.sentry) {\n        client.on('beforeSendEvent', _getSentryBreadcrumbHandler(client));\n      }\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const breadcrumbsIntegration = defineIntegration(_breadcrumbsIntegration);\n\n/**\n * Adds a breadcrumb for Sentry events or transactions if this option is enabled.\n */\nfunction _getSentryBreadcrumbHandler(client: Client): (event: SentryEvent) => void {\n  return function addSentryBreadcrumb(event: SentryEvent): void {\n    if (getClient() !== client) {\n      return;\n    }\n\n    addBreadcrumb(\n      {\n        category: `sentry.${event.type === 'transaction' ? 'transaction' : 'event'}`,\n        event_id: event.event_id,\n        level: event.level,\n        message: getEventDescription(event),\n      },\n      {\n        event,\n      },\n    );\n  };\n}\n\n/**\n * A HOC that creates a function that creates breadcrumbs from DOM API calls.\n * This is a HOC so that we get access to dom options in the closure.\n */\nfunction _getDomBreadcrumbHandler(\n  client: Client,\n  dom: BreadcrumbsOptions['dom'],\n): (handlerData: HandlerDataDom) => void {\n  return function _innerDomBreadcrumb(handlerData: HandlerDataDom): void {\n    if (getClient() !== client) {\n      return;\n    }\n\n    let target;\n    let componentName;\n    let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;\n\n    let maxStringLength =\n      typeof dom === 'object' && typeof dom.maxStringLength === 'number' ? dom.maxStringLength : undefined;\n    if (maxStringLength && maxStringLength > MAX_ALLOWED_STRING_LENGTH) {\n      DEBUG_BUILD &&\n        logger.warn(\n          `\\`dom.maxStringLength\\` cannot exceed ${MAX_ALLOWED_STRING_LENGTH}, but a value of ${maxStringLength} was configured. Sentry will use ${MAX_ALLOWED_STRING_LENGTH} instead.`,\n        );\n      maxStringLength = MAX_ALLOWED_STRING_LENGTH;\n    }\n\n    if (typeof keyAttrs === 'string') {\n      keyAttrs = [keyAttrs];\n    }\n\n    // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n    try {\n      const event = handlerData.event as Event | Node;\n      const element = _isEvent(event) ? event.target : event;\n\n      target = htmlTreeAsString(element, { keyAttrs, maxStringLength });\n      componentName = getComponentName(element);\n    } catch (e) {\n      target = '<unknown>';\n    }\n\n    if (target.length === 0) {\n      return;\n    }\n\n    const breadcrumb: Breadcrumb = {\n      category: `ui.${handlerData.name}`,\n      message: target,\n    };\n\n    if (componentName) {\n      breadcrumb.data = { 'ui.component_name': componentName };\n    }\n\n    addBreadcrumb(breadcrumb, {\n      event: handlerData.event,\n      name: handlerData.name,\n      global: handlerData.global,\n    });\n  };\n}\n\n/**\n * Creates breadcrumbs from console API calls\n */\nfunction _getConsoleBreadcrumbHandler(client: Client): (handlerData: HandlerDataConsole) => void {\n  return function _consoleBreadcrumb(handlerData: HandlerDataConsole): void {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const breadcrumb = {\n      category: 'console',\n      data: {\n        arguments: handlerData.args,\n        logger: 'console',\n      },\n      level: severityLevelFromString(handlerData.level),\n      message: safeJoin(handlerData.args, ' '),\n    };\n\n    if (handlerData.level === 'assert') {\n      if (handlerData.args[0] === false) {\n        breadcrumb.message = `Assertion failed: ${safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'}`;\n        breadcrumb.data.arguments = handlerData.args.slice(1);\n      } else {\n        // Don't capture a breadcrumb for passed assertions\n        return;\n      }\n    }\n\n    addBreadcrumb(breadcrumb, {\n      input: handlerData.args,\n      level: handlerData.level,\n    });\n  };\n}\n\n/**\n * Creates breadcrumbs from XHR API calls\n */\nfunction _getXhrBreadcrumbHandler(client: Client): (handlerData: HandlerDataXhr) => void {\n  return function _xhrBreadcrumb(handlerData: HandlerDataXhr): void {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const { startTimestamp, endTimestamp } = handlerData;\n\n    const sentryXhrData = handlerData.xhr[SENTRY_XHR_DATA_KEY];\n\n    // We only capture complete, non-sentry requests\n    if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n      return;\n    }\n\n    const { method, url, status_code, body } = sentryXhrData;\n\n    const data: XhrBreadcrumbData = {\n      method,\n      url,\n      status_code,\n    };\n\n    const hint: XhrBreadcrumbHint = {\n      xhr: handlerData.xhr,\n      input: body,\n      startTimestamp,\n      endTimestamp,\n    };\n\n    const breadcrumb = {\n      category: 'xhr',\n      data,\n      type: 'http',\n      level: getBreadcrumbLogLevelFromHttpStatusCode(status_code),\n    };\n\n    client.emit('beforeOutgoingRequestBreadcrumb', breadcrumb, hint as XhrHint);\n\n    addBreadcrumb(breadcrumb, hint);\n  };\n}\n\n/**\n * Creates breadcrumbs from fetch API calls\n */\nfunction _getFetchBreadcrumbHandler(client: Client): (handlerData: HandlerDataFetch) => void {\n  return function _fetchBreadcrumb(handlerData: HandlerDataFetch): void {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const { startTimestamp, endTimestamp } = handlerData;\n\n    // We only capture complete fetch requests\n    if (!endTimestamp) {\n      return;\n    }\n\n    if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {\n      // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)\n      return;\n    }\n\n    const breadcrumbData: FetchBreadcrumbData = {\n      method: handlerData.fetchData.method,\n      url: handlerData.fetchData.url,\n    };\n\n    if (handlerData.error) {\n      const data: FetchBreadcrumbData = handlerData.fetchData;\n      const hint: FetchBreadcrumbHint = {\n        data: handlerData.error,\n        input: handlerData.args,\n        startTimestamp,\n        endTimestamp,\n      };\n\n      const breadcrumb = {\n        category: 'fetch',\n        data,\n        level: 'error',\n        type: 'http',\n      } satisfies Breadcrumb;\n\n      client.emit('beforeOutgoingRequestBreadcrumb', breadcrumb, hint as FetchHint);\n\n      addBreadcrumb(breadcrumb, hint);\n    } else {\n      const response = handlerData.response as Response | undefined;\n      const data: FetchBreadcrumbData = {\n        ...handlerData.fetchData,\n        status_code: response?.status,\n      };\n\n      breadcrumbData.request_body_size = handlerData.fetchData.request_body_size;\n      breadcrumbData.response_body_size = handlerData.fetchData.response_body_size;\n      breadcrumbData.status_code = response?.status;\n\n      const hint: FetchBreadcrumbHint = {\n        input: handlerData.args,\n        response,\n        startTimestamp,\n        endTimestamp,\n      };\n\n      const breadcrumb = {\n        category: 'fetch',\n        data,\n        type: 'http',\n        level: getBreadcrumbLogLevelFromHttpStatusCode(data.status_code),\n      };\n\n      client.emit('beforeOutgoingRequestBreadcrumb', breadcrumb, hint as FetchHint);\n\n      addBreadcrumb(breadcrumb, hint);\n    }\n  };\n}\n\n/**\n * Creates breadcrumbs from history API calls\n */\nfunction _getHistoryBreadcrumbHandler(client: Client): (handlerData: HandlerDataHistory) => void {\n  return function _historyBreadcrumb(handlerData: HandlerDataHistory): void {\n    if (getClient() !== client) {\n      return;\n    }\n\n    let from: string | undefined = handlerData.from;\n    let to: string | undefined = handlerData.to;\n    const parsedLoc = parseUrl(WINDOW.location.href);\n    let parsedFrom = from ? parseUrl(from) : undefined;\n    const parsedTo = parseUrl(to);\n\n    // Initial pushState doesn't provide `from` information\n    if (!parsedFrom?.path) {\n      parsedFrom = parsedLoc;\n    }\n\n    // Use only the path component of the URL if the URL matches the current\n    // document (almost all the time when using pushState)\n    if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n      to = parsedTo.relative;\n    }\n    if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n      from = parsedFrom.relative;\n    }\n\n    addBreadcrumb({\n      category: 'navigation',\n      data: {\n        from,\n        to,\n      },\n    });\n  };\n}\n\nfunction _isEvent(event: unknown): event is Event {\n  return !!event && !!(event as Record<string, unknown>).target;\n}\n","import type { IntegrationFn, WrappedFunction } from '@sentry/core';\nimport { defineIntegration, fill, getFunctionName, getOriginalFunction } from '@sentry/core';\n\nimport { WINDOW, wrap } from '../helpers';\n\nconst DEFAULT_EVENT_TARGET = [\n  'EventTarget',\n  'Window',\n  'Node',\n  'ApplicationCache',\n  'AudioTrackList',\n  'BroadcastChannel',\n  'ChannelMergerNode',\n  'CryptoOperation',\n  'EventSource',\n  'FileReader',\n  'HTMLUnknownElement',\n  'IDBDatabase',\n  'IDBRequest',\n  'IDBTransaction',\n  'KeyOperation',\n  'MediaController',\n  'MessagePort',\n  'ModalWindow',\n  'Notification',\n  'SVGElementInstance',\n  'Screen',\n  'SharedWorker',\n  'TextTrack',\n  'TextTrackCue',\n  'TextTrackList',\n  'WebSocket',\n  'WebSocketWorker',\n  'Worker',\n  'XMLHttpRequest',\n  'XMLHttpRequestEventTarget',\n  'XMLHttpRequestUpload',\n];\n\nconst INTEGRATION_NAME = 'BrowserApiErrors';\n\ntype XMLHttpRequestProp = 'onload' | 'onerror' | 'onprogress' | 'onreadystatechange';\n\ninterface BrowserApiErrorsOptions {\n  setTimeout: boolean;\n  setInterval: boolean;\n  requestAnimationFrame: boolean;\n  XMLHttpRequest: boolean;\n  eventTarget: boolean | string[];\n}\n\nconst _browserApiErrorsIntegration = ((options: Partial<BrowserApiErrorsOptions> = {}) => {\n  const _options = {\n    XMLHttpRequest: true,\n    eventTarget: true,\n    requestAnimationFrame: true,\n    setInterval: true,\n    setTimeout: true,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO: This currently only works for the first client this is setup\n    // We may want to adjust this to check for client etc.\n    setupOnce() {\n      if (_options.setTimeout) {\n        fill(WINDOW, 'setTimeout', _wrapTimeFunction);\n      }\n\n      if (_options.setInterval) {\n        fill(WINDOW, 'setInterval', _wrapTimeFunction);\n      }\n\n      if (_options.requestAnimationFrame) {\n        fill(WINDOW, 'requestAnimationFrame', _wrapRAF);\n      }\n\n      if (_options.XMLHttpRequest && 'XMLHttpRequest' in WINDOW) {\n        fill(XMLHttpRequest.prototype, 'send', _wrapXHR);\n      }\n\n      const eventTargetOption = _options.eventTarget;\n      if (eventTargetOption) {\n        const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;\n        eventTarget.forEach(_wrapEventTarget);\n      }\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Wrap timer functions and event targets to catch errors and provide better meta data.\n */\nexport const browserApiErrorsIntegration = defineIntegration(_browserApiErrorsIntegration);\n\nfunction _wrapTimeFunction(original: () => void): () => number {\n  return function (this: unknown, ...args: unknown[]): number {\n    const originalCallback = args[0];\n    args[0] = wrap(originalCallback, {\n      mechanism: {\n        data: { function: getFunctionName(original) },\n        handled: false,\n        type: 'instrument',\n      },\n    });\n    return original.apply(this, args);\n  };\n}\n\nfunction _wrapRAF(original: () => void): (callback: () => void) => unknown {\n  return function (this: unknown, callback: () => void): () => void {\n    return original.apply(this, [\n      wrap(callback, {\n        mechanism: {\n          data: {\n            function: 'requestAnimationFrame',\n            handler: getFunctionName(original),\n          },\n          handled: false,\n          type: 'instrument',\n        },\n      }),\n    ]);\n  };\n}\n\nfunction _wrapXHR(originalSend: () => void): () => void {\n  return function (this: XMLHttpRequest, ...args: unknown[]): void {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const xhr = this;\n    const xmlHttpRequestProps: XMLHttpRequestProp[] = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n\n    xmlHttpRequestProps.forEach(prop => {\n      if (prop in xhr && typeof xhr[prop] === 'function') {\n        fill(xhr, prop, function (original) {\n          const wrapOptions = {\n            mechanism: {\n              data: {\n                function: prop,\n                handler: getFunctionName(original),\n              },\n              handled: false,\n              type: 'instrument',\n            },\n          };\n\n          // If Instrument integration has been called before BrowserApiErrors, get the name of original function\n          const originalFunction = getOriginalFunction(original);\n          if (originalFunction) {\n            wrapOptions.mechanism.data.handler = getFunctionName(originalFunction);\n          }\n\n          // Otherwise wrap directly\n          return wrap(original, wrapOptions);\n        });\n      }\n    });\n\n    return originalSend.apply(this, args);\n  };\n}\n\nfunction _wrapEventTarget(target: string): void {\n  const globalObject = WINDOW as unknown as Record<string, { prototype?: object }>;\n  const proto = globalObject[target]?.prototype;\n\n  // eslint-disable-next-line no-prototype-builtins\n  if (!proto?.hasOwnProperty?.('addEventListener')) {\n    return;\n  }\n\n  fill(proto, 'addEventListener', function (original: VoidFunction): (\n    ...args: Parameters<typeof WINDOW.addEventListener>\n  ) => ReturnType<typeof WINDOW.addEventListener> {\n    return function (this: unknown, eventName, fn, options): VoidFunction {\n      try {\n        if (isEventListenerObject(fn)) {\n          // ESlint disable explanation:\n          //  First, it is generally safe to call `wrap` with an unbound function. Furthermore, using `.bind()` would\n          //  introduce a bug here, because bind returns a new function that doesn't have our\n          //  flags(like __sentry_original__) attached. `wrap` checks for those flags to avoid unnecessary wrapping.\n          //  Without those flags, every call to addEventListener wraps the function again, causing a memory leak.\n          // eslint-disable-next-line @typescript-eslint/unbound-method\n          fn.handleEvent = wrap(fn.handleEvent, {\n            mechanism: {\n              data: {\n                function: 'handleEvent',\n                handler: getFunctionName(fn),\n                target,\n              },\n              handled: false,\n              type: 'instrument',\n            },\n          });\n        }\n      } catch {\n        // can sometimes get 'Permission denied to access property \"handle Event'\n      }\n\n      return original.apply(this, [\n        eventName,\n        wrap(fn, {\n          mechanism: {\n            data: {\n              function: 'addEventListener',\n              handler: getFunctionName(fn),\n              target,\n            },\n            handled: false,\n            type: 'instrument',\n          },\n        }),\n        options,\n      ]);\n    };\n  });\n\n  fill(proto, 'removeEventListener', function (originalRemoveEventListener: VoidFunction): (\n    this: unknown,\n    ...args: Parameters<typeof WINDOW.removeEventListener>\n  ) => ReturnType<typeof WINDOW.removeEventListener> {\n    return function (this: unknown, eventName, fn, options): VoidFunction {\n      /**\n       * There are 2 possible scenarios here:\n       *\n       * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified\n       * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function\n       * as a pass-through, and call original `removeEventListener` with it.\n       *\n       * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using\n       * our wrapped version of `addEventListener`, which internally calls `wrap` helper.\n       * This helper \"wraps\" whole callback inside a try/catch statement, and attached appropriate metadata to it,\n       * in order for us to make a distinction between wrapped/non-wrapped functions possible.\n       * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.\n       *\n       * When someone adds a handler prior to initialization, and then do it again, but after,\n       * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible\n       * to get rid of the initial handler and it'd stick there forever.\n       */\n      try {\n        const originalEventHandler = (fn as WrappedFunction).__sentry_wrapped__;\n        if (originalEventHandler) {\n          originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n        }\n      } catch (e) {\n        // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n      }\n      return originalRemoveEventListener.call(this, eventName, fn, options);\n    };\n  });\n}\n\nfunction isEventListenerObject(obj: unknown): obj is EventListenerObject {\n  return typeof (obj as EventListenerObject).handleEvent === 'function';\n}\n","import { addHistoryInstrumentationHandler } from '@sentry-internal/browser-utils';\nimport { captureSession, defineIntegration, logger, startSession } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\n\n/**\n * When added, automatically creates sessions which allow you to track adoption and crashes (crash free rate) in your Releases in Sentry.\n * More information: https://docs.sentry.io/product/releases/health/\n *\n * Note: In order for session tracking to work, you need to set up Releases: https://docs.sentry.io/product/releases/\n */\nexport const browserSessionIntegration = defineIntegration(() => {\n  return {\n    name: 'BrowserSession',\n    setupOnce() {\n      if (typeof WINDOW.document === 'undefined') {\n        DEBUG_BUILD &&\n          logger.warn('Using the `browserSessionIntegration` in non-browser environments is not supported.');\n        return;\n      }\n\n      // The session duration for browser sessions does not track a meaningful\n      // concept that can be used as a metric.\n      // Automatically captured sessions are akin to page views, and thus we\n      // discard their duration.\n      startSession({ ignoreDuration: true });\n      captureSession();\n\n      // We want to create a session for every navigation as well\n      addHistoryInstrumentationHandler(({ from, to }) => {\n        // Don't create an additional session for the initial route or if the location did not change\n        if (from !== undefined && from !== to) {\n          startSession({ ignoreDuration: true });\n          captureSession();\n        }\n      });\n    },\n  };\n});\n","import type { Client, Event, IntegrationFn, Primitive, StackParser } from '@sentry/core';\nimport {\n  UNKNOWN_FUNCTION,\n  addGlobalErrorInstrumentationHandler,\n  addGlobalUnhandledRejectionInstrumentationHandler,\n  captureEvent,\n  defineIntegration,\n  getClient,\n  getLocationHref,\n  isPrimitive,\n  isString,\n  logger,\n} from '@sentry/core';\n\nimport type { BrowserClient } from '../client';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { eventFromUnknownInput } from '../eventbuilder';\nimport { shouldIgnoreOnError } from '../helpers';\n\ntype GlobalHandlersIntegrationsOptionKeys = 'onerror' | 'onunhandledrejection';\n\ntype GlobalHandlersIntegrations = Record<GlobalHandlersIntegrationsOptionKeys, boolean>;\n\nconst INTEGRATION_NAME = 'GlobalHandlers';\n\nconst _globalHandlersIntegration = ((options: Partial<GlobalHandlersIntegrations> = {}) => {\n  const _options = {\n    onerror: true,\n    onunhandledrejection: true,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      Error.stackTraceLimit = 50;\n    },\n    setup(client) {\n      if (_options.onerror) {\n        _installGlobalOnErrorHandler(client);\n        globalHandlerLog('onerror');\n      }\n      if (_options.onunhandledrejection) {\n        _installGlobalOnUnhandledRejectionHandler(client);\n        globalHandlerLog('onunhandledrejection');\n      }\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const globalHandlersIntegration = defineIntegration(_globalHandlersIntegration);\n\nfunction _installGlobalOnErrorHandler(client: Client): void {\n  addGlobalErrorInstrumentationHandler(data => {\n    const { stackParser, attachStacktrace } = getOptions();\n\n    if (getClient() !== client || shouldIgnoreOnError()) {\n      return;\n    }\n\n    const { msg, url, line, column, error } = data;\n\n    const event = _enhanceEventWithInitialFrame(\n      eventFromUnknownInput(stackParser, error || msg, undefined, attachStacktrace, false),\n      url,\n      line,\n      column,\n    );\n\n    event.level = 'error';\n\n    captureEvent(event, {\n      originalException: error,\n      mechanism: {\n        handled: false,\n        type: 'onerror',\n      },\n    });\n  });\n}\n\nfunction _installGlobalOnUnhandledRejectionHandler(client: Client): void {\n  addGlobalUnhandledRejectionInstrumentationHandler(e => {\n    const { stackParser, attachStacktrace } = getOptions();\n\n    if (getClient() !== client || shouldIgnoreOnError()) {\n      return;\n    }\n\n    const error = _getUnhandledRejectionError(e as unknown);\n\n    const event = isPrimitive(error)\n      ? _eventFromRejectionWithPrimitive(error)\n      : eventFromUnknownInput(stackParser, error, undefined, attachStacktrace, true);\n\n    event.level = 'error';\n\n    captureEvent(event, {\n      originalException: error,\n      mechanism: {\n        handled: false,\n        type: 'onunhandledrejection',\n      },\n    });\n  });\n}\n\nfunction _getUnhandledRejectionError(error: unknown): unknown {\n  if (isPrimitive(error)) {\n    return error;\n  }\n\n  // dig the object of the rejection out of known event types\n  try {\n    type ErrorWithReason = { reason: unknown };\n    // PromiseRejectionEvents store the object of the rejection under 'reason'\n    // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent\n    if ('reason' in (error as ErrorWithReason)) {\n      return (error as ErrorWithReason).reason;\n    }\n\n    type CustomEventWithDetail = { detail: { reason: unknown } };\n    // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents\n    // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into\n    // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec\n    // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and\n    // https://github.com/getsentry/sentry-javascript/issues/2380\n    if ('detail' in (error as CustomEventWithDetail) && 'reason' in (error as CustomEventWithDetail).detail) {\n      return (error as CustomEventWithDetail).detail.reason;\n    }\n  } catch {} // eslint-disable-line no-empty\n\n  return error;\n}\n\n/**\n * Create an event from a promise rejection where the `reason` is a primitive.\n *\n * @param reason: The `reason` property of the promise rejection\n * @returns An Event object with an appropriate `exception` value\n */\nfunction _eventFromRejectionWithPrimitive(reason: Primitive): Event {\n  return {\n    exception: {\n      values: [\n        {\n          type: 'UnhandledRejection',\n          // String() is needed because the Primitive type includes symbols (which can't be automatically stringified)\n          value: `Non-Error promise rejection captured with value: ${String(reason)}`,\n        },\n      ],\n    },\n  };\n}\n\nfunction _enhanceEventWithInitialFrame(\n  event: Event,\n  url: string | undefined,\n  line: number | undefined,\n  column: number | undefined,\n): Event {\n  // event.exception\n  const e = (event.exception = event.exception || {});\n  // event.exception.values\n  const ev = (e.values = e.values || []);\n  // event.exception.values[0]\n  const ev0 = (ev[0] = ev[0] || {});\n  // event.exception.values[0].stacktrace\n  const ev0s = (ev0.stacktrace = ev0.stacktrace || {});\n  // event.exception.values[0].stacktrace.frames\n  const ev0sf = (ev0s.frames = ev0s.frames || []);\n\n  const colno = column;\n  const lineno = line;\n  const filename = isString(url) && url.length > 0 ? url : getLocationHref();\n\n  // event.exception.values[0].stacktrace.frames\n  if (ev0sf.length === 0) {\n    ev0sf.push({\n      colno,\n      filename,\n      function: UNKNOWN_FUNCTION,\n      in_app: true,\n      lineno,\n    });\n  }\n\n  return event;\n}\n\nfunction globalHandlerLog(type: string): void {\n  DEBUG_BUILD && logger.log(`Global Handler attached: ${type}`);\n}\n\nfunction getOptions(): { stackParser: StackParser; attachStacktrace?: boolean } {\n  const client = getClient<BrowserClient>();\n  const options = client?.getOptions() || {\n    stackParser: () => [],\n    attachStacktrace: false,\n  };\n  return options;\n}\n","import { defineIntegration, getLocationHref } from '@sentry/core';\nimport { WINDOW } from '../helpers';\n\n/**\n * Collects information about HTTP request headers and\n * attaches them to the event.\n */\nexport const httpContextIntegration = defineIntegration(() => {\n  return {\n    name: 'HttpContext',\n    preprocessEvent(event) {\n      // if none of the information we want exists, don't bother\n      if (!WINDOW.navigator && !WINDOW.location && !WINDOW.document) {\n        return;\n      }\n\n      // grab as much info as exists and add it to the event\n      const url = event.request?.url || getLocationHref();\n      const { referrer } = WINDOW.document || {};\n      const { userAgent } = WINDOW.navigator || {};\n\n      const headers = {\n        ...event.request?.headers,\n        ...(referrer && { Referer: referrer }),\n        ...(userAgent && { 'User-Agent': userAgent }),\n      };\n      const request = {\n        ...event.request,\n        ...(url && { url }),\n        headers,\n      };\n\n      event.request = request;\n    },\n  };\n});\n","import type { IntegrationFn } from '@sentry/core';\nimport { applyAggregateErrorsToEvent, defineIntegration } from '@sentry/core';\nimport { exceptionFromError } from '../eventbuilder';\n\ninterface LinkedErrorsOptions {\n  key?: string;\n  limit?: number;\n}\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\nconst INTEGRATION_NAME = 'LinkedErrors';\n\nconst _linkedErrorsIntegration = ((options: LinkedErrorsOptions = {}) => {\n  const limit = options.limit || DEFAULT_LIMIT;\n  const key = options.key || DEFAULT_KEY;\n\n  return {\n    name: INTEGRATION_NAME,\n    preprocessEvent(event, hint, client) {\n      const options = client.getOptions();\n\n      applyAggregateErrorsToEvent(\n        // This differs from the LinkedErrors integration in core by using a different exceptionFromError function\n        exceptionFromError,\n        options.stackParser,\n        options.maxValueLength,\n        key,\n        limit,\n        event,\n        hint,\n      );\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Aggregrate linked errors in an event.\n */\nexport const linkedErrorsIntegration = defineIntegration(_linkedErrorsIntegration);\n","import { SDK_VERSION, getClient } from '@sentry/core';\nimport type { IntegrationFn } from '@sentry/core';\nimport type { BrowserClient } from '../client';\nimport { WINDOW } from '../helpers';\n\n// This is a map of integration function method to bundle file name.\nconst LazyLoadableIntegrations = {\n  replayIntegration: 'replay',\n  replayCanvasIntegration: 'replay-canvas',\n  feedbackIntegration: 'feedback',\n  feedbackModalIntegration: 'feedback-modal',\n  feedbackScreenshotIntegration: 'feedback-screenshot',\n  captureConsoleIntegration: 'captureconsole',\n  contextLinesIntegration: 'contextlines',\n  linkedErrorsIntegration: 'linkederrors',\n  dedupeIntegration: 'dedupe',\n  extraErrorDataIntegration: 'extraerrordata',\n  graphqlClientIntegration: 'graphqlclient',\n  httpClientIntegration: 'httpclient',\n  reportingObserverIntegration: 'reportingobserver',\n  rewriteFramesIntegration: 'rewriteframes',\n  browserProfilingIntegration: 'browserprofiling',\n  moduleMetadataIntegration: 'modulemetadata',\n} as const;\n\nconst WindowWithMaybeIntegration = WINDOW as {\n  Sentry?: Partial<Record<keyof typeof LazyLoadableIntegrations, IntegrationFn>>;\n};\n\n/**\n * Lazy load an integration from the CDN.\n * Rejects if the integration cannot be loaded.\n */\nexport async function lazyLoadIntegration(\n  name: keyof typeof LazyLoadableIntegrations,\n  scriptNonce?: string,\n): Promise<IntegrationFn> {\n  const bundle = LazyLoadableIntegrations[name];\n\n  // `window.Sentry` is only set when using a CDN bundle, but this method can also be used via the NPM package\n  const sentryOnWindow = (WindowWithMaybeIntegration.Sentry = WindowWithMaybeIntegration.Sentry || {});\n\n  if (!bundle) {\n    throw new Error(`Cannot lazy load integration: ${name}`);\n  }\n\n  // Bail if the integration already exists\n  const existing = sentryOnWindow[name];\n  // The `feedbackIntegration` is loaded by default in the CDN bundles,\n  // so we need to differentiate between the real integration and the shim.\n  // if only the shim exists, we still want to lazy load the real integration.\n  if (typeof existing === 'function' && !('_isShim' in existing)) {\n    return existing;\n  }\n\n  const url = getScriptURL(bundle);\n  const script = WINDOW.document.createElement('script');\n  script.src = url;\n  script.crossOrigin = 'anonymous';\n  script.referrerPolicy = 'strict-origin';\n\n  if (scriptNonce) {\n    script.setAttribute('nonce', scriptNonce);\n  }\n\n  const waitForLoad = new Promise<void>((resolve, reject) => {\n    script.addEventListener('load', () => resolve());\n    script.addEventListener('error', reject);\n  });\n\n  const currentScript = WINDOW.document.currentScript;\n  const parent = WINDOW.document.body || WINDOW.document.head || currentScript?.parentElement;\n\n  if (parent) {\n    parent.appendChild(script);\n  } else {\n    throw new Error(`Could not find parent element to insert lazy-loaded ${name} script`);\n  }\n\n  try {\n    await waitForLoad;\n  } catch {\n    throw new Error(`Error when loading integration: ${name}`);\n  }\n\n  const integrationFn = sentryOnWindow[name];\n\n  if (typeof integrationFn !== 'function') {\n    throw new Error(`Could not load integration: ${name}`);\n  }\n\n  return integrationFn;\n}\n\nfunction getScriptURL(bundle: string): string {\n  const client = getClient<BrowserClient>();\n  const baseURL = client?.getOptions()?.cdnBaseUrl || 'https://browser.sentry-cdn.com';\n\n  return new URL(`/${SDK_VERSION}/${bundle}.min.js`, baseURL).toString();\n}\n","import {\n  SENTRY_XHR_DATA_KEY,\n  addPerformanceInstrumentationHandler,\n  addXhrInstrumentationHandler,\n  extractNetworkProtocol,\n} from '@sentry-internal/browser-utils';\nimport type { XhrHint } from '@sentry-internal/browser-utils';\nimport type { Client, HandlerDataXhr, SentryWrappedXMLHttpRequest, Span } from '@sentry/core';\nimport {\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SentryNonRecordingSpan,\n  addFetchEndInstrumentationHandler,\n  addFetchInstrumentationHandler,\n  browserPerformanceTimeOrigin,\n  getActiveSpan,\n  getClient,\n  getLocationHref,\n  getTraceData,\n  hasSpansEnabled,\n  instrumentFetchRequest,\n  parseUrl,\n  setHttpStatus,\n  spanToJSON,\n  startInactiveSpan,\n  stringMatchesSomePattern,\n  stripUrlQueryAndFragment,\n} from '@sentry/core';\nimport { WINDOW } from '../helpers';\n\n/** Options for Request Instrumentation */\nexport interface RequestInstrumentationOptions {\n  /**\n   * List of strings and/or Regular Expressions used to determine which outgoing requests will have `sentry-trace` and `baggage`\n   * headers attached.\n   *\n   * **Default:** If this option is not provided, tracing headers will be attached to all outgoing requests.\n   * If you are using a browser SDK, by default, tracing headers will only be attached to outgoing requests to the same origin.\n   *\n   * **Disclaimer:** Carelessly setting this option in browser environments may result into CORS errors!\n   * Only attach tracing headers to requests to the same origin, or to requests to services you can control CORS headers of.\n   * Cross-origin requests, meaning requests to a different domain, for example a request to `https://api.example.com/` while you're on `https://example.com/`, take special care.\n   * If you are attaching headers to cross-origin requests, make sure the backend handling the request returns a `\"Access-Control-Allow-Headers: sentry-trace, baggage\"` header to ensure your requests aren't blocked.\n   *\n   * If you provide a `tracePropagationTargets` array, the entries you provide will be matched against the entire URL of the outgoing request.\n   * If you are using a browser SDK, the entries will also be matched against the pathname of the outgoing requests.\n   * This is so you can have matchers for relative requests, for example, `/^\\/api/` if you want to trace requests to your `/api` routes on the same domain.\n   *\n   * If any of the two match any of the provided values, tracing headers will be attached to the outgoing request.\n   * Both, the string values, and the RegExes you provide in the array will match if they partially match the URL or pathname.\n   *\n   * Examples:\n   * - `tracePropagationTargets: [/^\\/api/]` and request to `https://same-origin.com/api/posts`:\n   *   - Tracing headers will be attached because the request is sent to the same origin and the regex matches the pathname \"/api/posts\".\n   * - `tracePropagationTargets: [/^\\/api/]` and request to `https://different-origin.com/api/posts`:\n   *   - Tracing headers will not be attached because the pathname will only be compared when the request target lives on the same origin.\n   * - `tracePropagationTargets: [/^\\/api/, 'https://external-api.com']` and request to `https://external-api.com/v1/data`:\n   *   - Tracing headers will be attached because the request URL matches the string `'https://external-api.com'`.\n   */\n  tracePropagationTargets?: Array<string | RegExp>;\n\n  /**\n   * Flag to disable patching all together for fetch requests.\n   *\n   * Default: true\n   */\n  traceFetch: boolean;\n\n  /**\n   * Flag to disable patching all together for xhr requests.\n   *\n   * Default: true\n   */\n  traceXHR: boolean;\n\n  /**\n   * Flag to disable tracking of long-lived streams, like server-sent events (SSE) via fetch.\n   * Do not enable this in case you have live streams or very long running streams.\n   *\n   * Disabled by default since it can lead to issues with streams using the `cancel()` api\n   * (https://github.com/getsentry/sentry-javascript/issues/13950)\n   *\n   * Default: false\n   */\n  trackFetchStreamPerformance: boolean;\n\n  /**\n   * If true, Sentry will capture http timings and add them to the corresponding http spans.\n   *\n   * Default: true\n   */\n  enableHTTPTimings: boolean;\n\n  /**\n   * This function will be called before creating a span for a request with the given url.\n   * Return false if you don't want a span for the given url.\n   *\n   * Default: (url: string) => true\n   */\n  shouldCreateSpanForRequest?(this: void, url: string): boolean;\n}\n\nconst responseToSpanId = new WeakMap<object, string>();\nconst spanIdToEndTimestamp = new Map<string, number>();\n\nexport const defaultRequestInstrumentationOptions: RequestInstrumentationOptions = {\n  traceFetch: true,\n  traceXHR: true,\n  enableHTTPTimings: true,\n  trackFetchStreamPerformance: false,\n};\n\n/** Registers span creators for xhr and fetch requests  */\nexport function instrumentOutgoingRequests(client: Client, _options?: Partial<RequestInstrumentationOptions>): void {\n  const {\n    traceFetch,\n    traceXHR,\n    trackFetchStreamPerformance,\n    shouldCreateSpanForRequest,\n    enableHTTPTimings,\n    tracePropagationTargets,\n  } = {\n    traceFetch: defaultRequestInstrumentationOptions.traceFetch,\n    traceXHR: defaultRequestInstrumentationOptions.traceXHR,\n    trackFetchStreamPerformance: defaultRequestInstrumentationOptions.trackFetchStreamPerformance,\n    ..._options,\n  };\n\n  const shouldCreateSpan =\n    typeof shouldCreateSpanForRequest === 'function' ? shouldCreateSpanForRequest : (_: string) => true;\n\n  const shouldAttachHeadersWithTargets = (url: string): boolean => shouldAttachHeaders(url, tracePropagationTargets);\n\n  const spans: Record<string, Span> = {};\n\n  if (traceFetch) {\n    // Keeping track of http requests, whose body payloads resolved later than the initial resolved request\n    // e.g. streaming using server sent events (SSE)\n    client.addEventProcessor(event => {\n      if (event.type === 'transaction' && event.spans) {\n        event.spans.forEach(span => {\n          if (span.op === 'http.client') {\n            const updatedTimestamp = spanIdToEndTimestamp.get(span.span_id);\n            if (updatedTimestamp) {\n              span.timestamp = updatedTimestamp / 1000;\n              spanIdToEndTimestamp.delete(span.span_id);\n            }\n          }\n        });\n      }\n      return event;\n    });\n\n    if (trackFetchStreamPerformance) {\n      addFetchEndInstrumentationHandler(handlerData => {\n        if (handlerData.response) {\n          const span = responseToSpanId.get(handlerData.response);\n          if (span && handlerData.endTimestamp) {\n            spanIdToEndTimestamp.set(span, handlerData.endTimestamp);\n          }\n        }\n      });\n    }\n\n    addFetchInstrumentationHandler(handlerData => {\n      const createdSpan = instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n\n      if (handlerData.response && handlerData.fetchData.__span) {\n        responseToSpanId.set(handlerData.response, handlerData.fetchData.__span);\n      }\n\n      // We cannot use `window.location` in the generic fetch instrumentation,\n      // but we need it for reliable `server.address` attribute.\n      // so we extend this in here\n      if (createdSpan) {\n        const fullUrl = getFullURL(handlerData.fetchData.url);\n        const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n        createdSpan.setAttributes({\n          'http.url': fullUrl,\n          'server.address': host,\n        });\n      }\n\n      if (enableHTTPTimings && createdSpan) {\n        addHTTPTimings(createdSpan);\n      }\n    });\n  }\n\n  if (traceXHR) {\n    addXhrInstrumentationHandler(handlerData => {\n      const createdSpan = xhrCallback(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n      if (enableHTTPTimings && createdSpan) {\n        addHTTPTimings(createdSpan);\n      }\n    });\n  }\n}\n\nfunction isPerformanceResourceTiming(entry: PerformanceEntry): entry is PerformanceResourceTiming {\n  return (\n    entry.entryType === 'resource' &&\n    'initiatorType' in entry &&\n    typeof (entry as PerformanceResourceTiming).nextHopProtocol === 'string' &&\n    (entry.initiatorType === 'fetch' || entry.initiatorType === 'xmlhttprequest')\n  );\n}\n\n/**\n * Creates a temporary observer to listen to the next fetch/xhr resourcing timings,\n * so that when timings hit their per-browser limit they don't need to be removed.\n *\n * @param span A span that has yet to be finished, must contain `url` on data.\n */\nfunction addHTTPTimings(span: Span): void {\n  const { url } = spanToJSON(span).data;\n\n  if (!url || typeof url !== 'string') {\n    return;\n  }\n\n  const cleanup = addPerformanceInstrumentationHandler('resource', ({ entries }) => {\n    entries.forEach(entry => {\n      if (isPerformanceResourceTiming(entry) && entry.name.endsWith(url)) {\n        const spanData = resourceTimingEntryToSpanData(entry);\n        spanData.forEach(data => span.setAttribute(...data));\n        // In the next tick, clean this handler up\n        // We have to wait here because otherwise this cleans itself up before it is fully done\n        setTimeout(cleanup);\n      }\n    });\n  });\n}\n\nfunction getAbsoluteTime(time: number = 0): number {\n  return ((browserPerformanceTimeOrigin() || performance.timeOrigin) + time) / 1000;\n}\n\nfunction resourceTimingEntryToSpanData(resourceTiming: PerformanceResourceTiming): [string, string | number][] {\n  const { name, version } = extractNetworkProtocol(resourceTiming.nextHopProtocol);\n\n  const timingSpanData: [string, string | number][] = [];\n\n  timingSpanData.push(['network.protocol.version', version], ['network.protocol.name', name]);\n\n  if (!browserPerformanceTimeOrigin()) {\n    return timingSpanData;\n  }\n  return [\n    ...timingSpanData,\n    ['http.request.redirect_start', getAbsoluteTime(resourceTiming.redirectStart)],\n    ['http.request.fetch_start', getAbsoluteTime(resourceTiming.fetchStart)],\n    ['http.request.domain_lookup_start', getAbsoluteTime(resourceTiming.domainLookupStart)],\n    ['http.request.domain_lookup_end', getAbsoluteTime(resourceTiming.domainLookupEnd)],\n    ['http.request.connect_start', getAbsoluteTime(resourceTiming.connectStart)],\n    ['http.request.secure_connection_start', getAbsoluteTime(resourceTiming.secureConnectionStart)],\n    ['http.request.connection_end', getAbsoluteTime(resourceTiming.connectEnd)],\n    ['http.request.request_start', getAbsoluteTime(resourceTiming.requestStart)],\n    ['http.request.response_start', getAbsoluteTime(resourceTiming.responseStart)],\n    ['http.request.response_end', getAbsoluteTime(resourceTiming.responseEnd)],\n  ];\n}\n\n/**\n * A function that determines whether to attach tracing headers to a request.\n * We only export this function for testing purposes.\n */\nexport function shouldAttachHeaders(\n  targetUrl: string,\n  tracePropagationTargets: (string | RegExp)[] | undefined,\n): boolean {\n  // window.location.href not being defined is an edge case in the browser but we need to handle it.\n  // Potentially dangerous situations where it may not be defined: Browser Extensions, Web Workers, patching of the location obj\n  const href = getLocationHref();\n\n  if (!href) {\n    // If there is no window.location.origin, we default to only attaching tracing headers to relative requests, i.e. ones that start with `/`\n    // BIG DISCLAIMER: Users can call URLs with a double slash (fetch(\"//example.com/api\")), this is a shorthand for \"send to the same protocol\",\n    // so we need a to exclude those requests, because they might be cross origin.\n    const isRelativeSameOriginRequest = !!targetUrl.match(/^\\/(?!\\/)/);\n    if (!tracePropagationTargets) {\n      return isRelativeSameOriginRequest;\n    } else {\n      return stringMatchesSomePattern(targetUrl, tracePropagationTargets);\n    }\n  } else {\n    let resolvedUrl;\n    let currentOrigin;\n\n    // URL parsing may fail, we default to not attaching trace headers in that case.\n    try {\n      resolvedUrl = new URL(targetUrl, href);\n      currentOrigin = new URL(href).origin;\n    } catch (e) {\n      return false;\n    }\n\n    const isSameOriginRequest = resolvedUrl.origin === currentOrigin;\n    if (!tracePropagationTargets) {\n      return isSameOriginRequest;\n    } else {\n      return (\n        stringMatchesSomePattern(resolvedUrl.toString(), tracePropagationTargets) ||\n        (isSameOriginRequest && stringMatchesSomePattern(resolvedUrl.pathname, tracePropagationTargets))\n      );\n    }\n  }\n}\n\n/**\n * Create and track xhr request spans\n *\n * @returns Span if a span was created, otherwise void.\n */\nexport function xhrCallback(\n  handlerData: HandlerDataXhr,\n  shouldCreateSpan: (url: string) => boolean,\n  shouldAttachHeaders: (url: string) => boolean,\n  spans: Record<string, Span>,\n): Span | undefined {\n  const xhr = handlerData.xhr;\n  const sentryXhrData = xhr?.[SENTRY_XHR_DATA_KEY];\n\n  if (!xhr || xhr.__sentry_own_request__ || !sentryXhrData) {\n    return undefined;\n  }\n\n  const { url, method } = sentryXhrData;\n\n  const shouldCreateSpanResult = hasSpansEnabled() && shouldCreateSpan(url);\n\n  // check first if the request has finished and is tracked by an existing span which should now end\n  if (handlerData.endTimestamp && shouldCreateSpanResult) {\n    const spanId = xhr.__sentry_xhr_span_id__;\n    if (!spanId) return;\n\n    const span = spans[spanId];\n    if (span && sentryXhrData.status_code !== undefined) {\n      setHttpStatus(span, sentryXhrData.status_code);\n      span.end();\n\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete spans[spanId];\n    }\n    return undefined;\n  }\n\n  const fullUrl = getFullURL(url);\n  const parsedUrl = fullUrl ? parseUrl(fullUrl) : parseUrl(url);\n\n  const urlForSpanName = stripUrlQueryAndFragment(url);\n\n  const hasParent = !!getActiveSpan();\n\n  const span =\n    shouldCreateSpanResult && hasParent\n      ? startInactiveSpan({\n          name: `${method} ${urlForSpanName}`,\n          attributes: {\n            url,\n            type: 'xhr',\n            'http.method': method,\n            'http.url': fullUrl,\n            'server.address': parsedUrl?.host,\n            [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser',\n            [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.client',\n            ...(parsedUrl?.search && { 'http.query': parsedUrl?.search }),\n            ...(parsedUrl?.hash && { 'http.fragment': parsedUrl?.hash }),\n          },\n        })\n      : new SentryNonRecordingSpan();\n\n  xhr.__sentry_xhr_span_id__ = span.spanContext().spanId;\n  spans[xhr.__sentry_xhr_span_id__] = span;\n\n  if (shouldAttachHeaders(url)) {\n    addTracingHeadersToXhrRequest(\n      xhr,\n      // If performance is disabled (TWP) or there's no active root span (pageload/navigation/interaction),\n      // we do not want to use the span as base for the trace headers,\n      // which means that the headers will be generated from the scope and the sampling decision is deferred\n      hasSpansEnabled() && hasParent ? span : undefined,\n    );\n  }\n\n  const client = getClient();\n  if (client) {\n    client.emit('beforeOutgoingRequestSpan', span, handlerData as XhrHint);\n  }\n\n  return span;\n}\n\nfunction addTracingHeadersToXhrRequest(xhr: SentryWrappedXMLHttpRequest, span?: Span): void {\n  const { 'sentry-trace': sentryTrace, baggage } = getTraceData({ span });\n\n  if (sentryTrace) {\n    setHeaderOnXhr(xhr, sentryTrace, baggage);\n  }\n}\n\nfunction setHeaderOnXhr(\n  xhr: SentryWrappedXMLHttpRequest,\n  sentryTraceHeader: string,\n  sentryBaggageHeader: string | undefined,\n): void {\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    xhr.setRequestHeader!('sentry-trace', sentryTraceHeader);\n    if (sentryBaggageHeader) {\n      // From MDN: \"If this method is called several times with the same header, the values are merged into one single request header.\"\n      // We can therefore simply set a baggage header without checking what was there before\n      // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      xhr.setRequestHeader!('baggage', sentryBaggageHeader);\n    }\n  } catch (_) {\n    // Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.\n  }\n}\n\nfunction getFullURL(url: string): string | undefined {\n  try {\n    // By adding a base URL to new URL(), this will also work for relative urls\n    // If `url` is a full URL, the base URL is ignored anyhow\n    const parsed = new URL(url, WINDOW.location.origin);\n    return parsed.href;\n  } catch {\n    return undefined;\n  }\n}\n","/* eslint-disable max-lines */\nimport type { DebugImage, Envelope, Event, EventEnvelope, Profile, Span, ThreadCpuProfile } from '@sentry/core';\nimport {\n  DEFAULT_ENVIRONMENT,\n  browserPerformanceTimeOrigin,\n  forEachEnvelopeItem,\n  getClient,\n  getDebugImagesForResources,\n  logger,\n  spanToJSON,\n  timestampInSeconds,\n  uuid4,\n} from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\nimport type { JSSelfProfile, JSSelfProfileStack, JSSelfProfiler, JSSelfProfilerConstructor } from './jsSelfProfiling';\n\nconst MS_TO_NS = 1e6;\n// Use 0 as main thread id which is identical to threadId in node:worker_threads\n// where main logs 0 and workers seem to log in increments of 1\nconst THREAD_ID_STRING = String(0);\nconst THREAD_NAME = 'main';\n\n// We force make this optional to be on the safe side...\nconst navigator = WINDOW.navigator as typeof WINDOW.navigator | undefined;\n\n// Machine properties (eval only once)\nlet OS_PLATFORM = '';\nlet OS_PLATFORM_VERSION = '';\nlet OS_ARCH = '';\nlet OS_BROWSER = navigator?.userAgent || '';\nlet OS_MODEL = '';\nconst OS_LOCALE = navigator?.language || navigator?.languages?.[0] || '';\n\ntype UAData = {\n  platform?: string;\n  architecture?: string;\n  model?: string;\n  platformVersion?: string;\n  fullVersionList?: {\n    brand: string;\n    version: string;\n  }[];\n};\n\ninterface UserAgentData {\n  getHighEntropyValues: (keys: string[]) => Promise<UAData>;\n}\n\nfunction isUserAgentData(data: unknown): data is UserAgentData {\n  return typeof data === 'object' && data !== null && 'getHighEntropyValues' in data;\n}\n\n// @ts-expect-error userAgentData is not part of the navigator interface yet\nconst userAgentData = navigator?.userAgentData;\n\nif (isUserAgentData(userAgentData)) {\n  userAgentData\n    .getHighEntropyValues(['architecture', 'model', 'platform', 'platformVersion', 'fullVersionList'])\n    .then((ua: UAData) => {\n      OS_PLATFORM = ua.platform || '';\n      OS_ARCH = ua.architecture || '';\n      OS_MODEL = ua.model || '';\n      OS_PLATFORM_VERSION = ua.platformVersion || '';\n\n      if (ua.fullVersionList?.length) {\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        const firstUa = ua.fullVersionList[ua.fullVersionList.length - 1]!;\n        OS_BROWSER = `${firstUa.brand} ${firstUa.version}`;\n      }\n    })\n    .catch(e => void e);\n}\n\nfunction isProcessedJSSelfProfile(profile: ThreadCpuProfile | JSSelfProfile): profile is JSSelfProfile {\n  return !('thread_metadata' in profile);\n}\n\n// Enriches the profile with threadId of the current thread.\n// This is done in node as we seem to not be able to get the info from C native code.\n/**\n *\n */\nexport function enrichWithThreadInformation(profile: ThreadCpuProfile | JSSelfProfile): ThreadCpuProfile {\n  if (!isProcessedJSSelfProfile(profile)) {\n    return profile;\n  }\n\n  return convertJSSelfProfileToSampledFormat(profile);\n}\n\n// Profile is marked as optional because it is deleted from the metadata\n// by the integration before the event is processed by other integrations.\nexport interface ProfiledEvent extends Event {\n  sdkProcessingMetadata: {\n    profile?: JSSelfProfile;\n  };\n}\n\nfunction getTraceId(event: Event): string {\n  const traceId: unknown = event.contexts?.trace?.['trace_id'];\n  // Log a warning if the profile has an invalid traceId (should be uuidv4).\n  // All profiles and transactions are rejected if this is the case and we want to\n  // warn users that this is happening if they enable debug flag\n  if (typeof traceId === 'string' && traceId.length !== 32) {\n    if (DEBUG_BUILD) {\n      logger.log(`[Profiling] Invalid traceId: ${traceId} on profiled event`);\n    }\n  }\n  if (typeof traceId !== 'string') {\n    return '';\n  }\n\n  return traceId;\n}\n/**\n * Creates a profiling event envelope from a Sentry event. If profile does not pass\n * validation, returns null.\n * @param event\n * @param dsn\n * @param metadata\n * @param tunnel\n * @returns {EventEnvelope | null}\n */\n\n/**\n * Creates a profiling event envelope from a Sentry event.\n */\nexport function createProfilePayload(\n  profile_id: string,\n  start_timestamp: number | undefined,\n  processed_profile: JSSelfProfile,\n  event: ProfiledEvent,\n): Profile {\n  if (event.type !== 'transaction') {\n    // createProfilingEventEnvelope should only be called for transactions,\n    // we type guard this behavior with isProfiledTransactionEvent.\n    throw new TypeError('Profiling events may only be attached to transactions, this should never occur.');\n  }\n\n  if (processed_profile === undefined || processed_profile === null) {\n    throw new TypeError(\n      `Cannot construct profiling event envelope without a valid profile. Got ${processed_profile} instead.`,\n    );\n  }\n\n  const traceId = getTraceId(event);\n  const enrichedThreadProfile = enrichWithThreadInformation(processed_profile);\n  const transactionStartMs = start_timestamp\n    ? start_timestamp\n    : typeof event.start_timestamp === 'number'\n      ? event.start_timestamp * 1000\n      : timestampInSeconds() * 1000;\n  const transactionEndMs = typeof event.timestamp === 'number' ? event.timestamp * 1000 : timestampInSeconds() * 1000;\n\n  const profile: Profile = {\n    event_id: profile_id,\n    timestamp: new Date(transactionStartMs).toISOString(),\n    platform: 'javascript',\n    version: '1',\n    release: event.release || '',\n    environment: event.environment || DEFAULT_ENVIRONMENT,\n    runtime: {\n      name: 'javascript',\n      version: WINDOW.navigator.userAgent,\n    },\n    os: {\n      name: OS_PLATFORM,\n      version: OS_PLATFORM_VERSION,\n      build_number: OS_BROWSER,\n    },\n    device: {\n      locale: OS_LOCALE,\n      model: OS_MODEL,\n      manufacturer: OS_BROWSER,\n      architecture: OS_ARCH,\n      is_emulator: false,\n    },\n    debug_meta: {\n      images: applyDebugMetadata(processed_profile.resources),\n    },\n    profile: enrichedThreadProfile,\n    transactions: [\n      {\n        name: event.transaction || '',\n        id: event.event_id || uuid4(),\n        trace_id: traceId,\n        active_thread_id: THREAD_ID_STRING,\n        relative_start_ns: '0',\n        relative_end_ns: ((transactionEndMs - transactionStartMs) * 1e6).toFixed(0),\n      },\n    ],\n  };\n\n  return profile;\n}\n\n/**\n *\n */\nexport function isProfiledTransactionEvent(event: Event): event is ProfiledEvent {\n  return !!event.sdkProcessingMetadata?.profile;\n}\n\n/*\n  See packages/browser-utils/src/browser/router.ts\n*/\n/**\n *\n */\nexport function isAutomatedPageLoadSpan(span: Span): boolean {\n  return spanToJSON(span).op === 'pageload';\n}\n\n/**\n * Converts a JSSelfProfile to a our sampled format.\n * Does not currently perform stack indexing.\n */\nexport function convertJSSelfProfileToSampledFormat(input: JSSelfProfile): Profile['profile'] {\n  let EMPTY_STACK_ID: undefined | number = undefined;\n  let STACK_ID = 0;\n\n  // Initialize the profile that we will fill with data\n  const profile: Profile['profile'] = {\n    samples: [],\n    stacks: [],\n    frames: [],\n    thread_metadata: {\n      [THREAD_ID_STRING]: { name: THREAD_NAME },\n    },\n  };\n\n  const firstSample = input.samples[0];\n  if (!firstSample) {\n    return profile;\n  }\n\n  // We assert samples.length > 0 above and timestamp should always be present\n  const start = firstSample.timestamp;\n  // The JS SDK might change it's time origin based on some heuristic (see See packages/utils/src/time.ts)\n  // when that happens, we need to ensure we are correcting the profile timings so the two timelines stay in sync.\n  // Since JS self profiling time origin is always initialized to performance.timeOrigin, we need to adjust for\n  // the drift between the SDK selected value and our profile time origin.\n  const perfOrigin = browserPerformanceTimeOrigin();\n  const origin = typeof performance.timeOrigin === 'number' ? performance.timeOrigin : perfOrigin || 0;\n  const adjustForOriginChange = origin - (perfOrigin || origin);\n\n  input.samples.forEach((jsSample, i) => {\n    // If sample has no stack, add an empty sample\n    if (jsSample.stackId === undefined) {\n      if (EMPTY_STACK_ID === undefined) {\n        EMPTY_STACK_ID = STACK_ID;\n        profile.stacks[EMPTY_STACK_ID] = [];\n        STACK_ID++;\n      }\n\n      profile['samples'][i] = {\n        // convert ms timestamp to ns\n        elapsed_since_start_ns: ((jsSample.timestamp + adjustForOriginChange - start) * MS_TO_NS).toFixed(0),\n        stack_id: EMPTY_STACK_ID,\n        thread_id: THREAD_ID_STRING,\n      };\n      return;\n    }\n\n    let stackTop: JSSelfProfileStack | undefined = input.stacks[jsSample.stackId];\n\n    // Functions in top->down order (root is last)\n    // We follow the stackTop.parentId trail and collect each visited frameId\n    const stack: number[] = [];\n\n    while (stackTop) {\n      stack.push(stackTop.frameId);\n\n      const frame = input.frames[stackTop.frameId];\n\n      // If our frame has not been indexed yet, index it\n      if (frame && profile.frames[stackTop.frameId] === undefined) {\n        profile.frames[stackTop.frameId] = {\n          function: frame.name,\n          abs_path: typeof frame.resourceId === 'number' ? input.resources[frame.resourceId] : undefined,\n          lineno: frame.line,\n          colno: frame.column,\n        };\n      }\n\n      stackTop = stackTop.parentId === undefined ? undefined : input.stacks[stackTop.parentId];\n    }\n\n    const sample: Profile['profile']['samples'][0] = {\n      // convert ms timestamp to ns\n      elapsed_since_start_ns: ((jsSample.timestamp + adjustForOriginChange - start) * MS_TO_NS).toFixed(0),\n      stack_id: STACK_ID,\n      thread_id: THREAD_ID_STRING,\n    };\n\n    profile['stacks'][STACK_ID] = stack;\n    profile['samples'][i] = sample;\n    STACK_ID++;\n  });\n\n  return profile;\n}\n\n/**\n * Adds items to envelope if they are not already present - mutates the envelope.\n * @param envelope\n */\nexport function addProfilesToEnvelope(envelope: EventEnvelope, profiles: Profile[]): Envelope {\n  if (!profiles.length) {\n    return envelope;\n  }\n\n  for (const profile of profiles) {\n    envelope[1].push([{ type: 'profile' }, profile]);\n  }\n  return envelope;\n}\n\n/**\n * Finds transactions with profile_id context in the envelope\n * @param envelope\n * @returns\n */\nexport function findProfiledTransactionsFromEnvelope(envelope: Envelope): Event[] {\n  const events: Event[] = [];\n\n  forEachEnvelopeItem(envelope, (item, type) => {\n    if (type !== 'transaction') {\n      return;\n    }\n\n    for (let j = 1; j < item.length; j++) {\n      const event = item[j] as Event;\n\n      if (event?.contexts && event.contexts['profile'] && event.contexts['profile']['profile_id']) {\n        events.push(item[j] as Event);\n      }\n    }\n  });\n\n  return events;\n}\n\n/**\n * Applies debug meta data to an event from a list of paths to resources (sourcemaps)\n */\nexport function applyDebugMetadata(resource_paths: ReadonlyArray<string>): DebugImage[] {\n  const client = getClient();\n  const options = client?.getOptions();\n  const stackParser = options?.stackParser;\n\n  if (!stackParser) {\n    return [];\n  }\n\n  return getDebugImagesForResources(stackParser, resource_paths);\n}\n\n/**\n * Checks the given sample rate to make sure it is valid type and value (a boolean, or a number between 0 and 1).\n */\nexport function isValidSampleRate(rate: unknown): boolean {\n  // we need to check NaN explicitly because it's of type 'number' and therefore wouldn't get caught by this typecheck\n  if ((typeof rate !== 'number' && typeof rate !== 'boolean') || (typeof rate === 'number' && isNaN(rate))) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `[Profiling] Invalid sample rate. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n          rate,\n        )} of type ${JSON.stringify(typeof rate)}.`,\n      );\n    return false;\n  }\n\n  // Boolean sample rates are always valid\n  if (rate === true || rate === false) {\n    return true;\n  }\n\n  // in case sampleRate is a boolean, it will get automatically cast to 1 if it's true and 0 if it's false\n  if (rate < 0 || rate > 1) {\n    DEBUG_BUILD && logger.warn(`[Profiling] Invalid sample rate. Sample rate must be between 0 and 1. Got ${rate}.`);\n    return false;\n  }\n  return true;\n}\n\nfunction isValidProfile(profile: JSSelfProfile): profile is JSSelfProfile & { profile_id: string } {\n  if (profile.samples.length < 2) {\n    if (DEBUG_BUILD) {\n      // Log a warning if the profile has less than 2 samples so users can know why\n      // they are not seeing any profiling data and we cant avoid the back and forth\n      // of asking them to provide us with a dump of the profile data.\n      logger.log('[Profiling] Discarding profile because it contains less than 2 samples');\n    }\n    return false;\n  }\n\n  if (!profile.frames.length) {\n    if (DEBUG_BUILD) {\n      logger.log('[Profiling] Discarding profile because it contains no frames');\n    }\n    return false;\n  }\n\n  return true;\n}\n\n// Keep a flag value to avoid re-initializing the profiler constructor. If it fails\n// once, it will always fail and this allows us to early return.\nlet PROFILING_CONSTRUCTOR_FAILED: boolean = false;\nexport const MAX_PROFILE_DURATION_MS = 30_000;\n\n/**\n * Check if profiler constructor is available.\n * @param maybeProfiler\n */\nfunction isJSProfilerSupported(maybeProfiler: unknown): maybeProfiler is typeof JSSelfProfilerConstructor {\n  return typeof maybeProfiler === 'function';\n}\n\n/**\n * Starts the profiler and returns the profiler instance.\n */\nexport function startJSSelfProfile(): JSSelfProfiler | undefined {\n  // Feature support check first\n  const JSProfilerConstructor = WINDOW.Profiler;\n\n  if (!isJSProfilerSupported(JSProfilerConstructor)) {\n    if (DEBUG_BUILD) {\n      logger.log(\n        '[Profiling] Profiling is not supported by this browser, Profiler interface missing on window object.',\n      );\n    }\n    return;\n  }\n\n  // From initial testing, it seems that the minimum value for sampleInterval is 10ms.\n  const samplingIntervalMS = 10;\n  // Start the profiler\n  const maxSamples = Math.floor(MAX_PROFILE_DURATION_MS / samplingIntervalMS);\n\n  // Attempt to initialize the profiler constructor, if it fails, we disable profiling for the current user session.\n  // This is likely due to a missing 'Document-Policy': 'js-profiling' header. We do not want to throw an error if this happens\n  // as we risk breaking the user's application, so just disable profiling and log an error.\n  try {\n    return new JSProfilerConstructor({ sampleInterval: samplingIntervalMS, maxBufferSize: maxSamples });\n  } catch (e) {\n    if (DEBUG_BUILD) {\n      logger.log(\n        \"[Profiling] Failed to initialize the Profiling constructor, this is likely due to a missing 'Document-Policy': 'js-profiling' header.\",\n      );\n      logger.log('[Profiling] Disabling profiling for current user session.');\n    }\n    PROFILING_CONSTRUCTOR_FAILED = true;\n  }\n\n  return;\n}\n\n/**\n * Determine if a profile should be profiled.\n */\nexport function shouldProfileSpan(span: Span): boolean {\n  // If constructor failed once, it will always fail, so we can early return.\n  if (PROFILING_CONSTRUCTOR_FAILED) {\n    if (DEBUG_BUILD) {\n      logger.log('[Profiling] Profiling has been disabled for the duration of the current user session.');\n    }\n    return false;\n  }\n\n  if (!span.isRecording()) {\n    if (DEBUG_BUILD) {\n      logger.log('[Profiling] Discarding profile because transaction was not sampled.');\n    }\n    return false;\n  }\n\n  const client = getClient();\n  const options = client?.getOptions();\n  if (!options) {\n    DEBUG_BUILD && logger.log('[Profiling] Profiling disabled, no options found.');\n    return false;\n  }\n\n  // @ts-expect-error profilesSampleRate is not part of the browser options yet\n  const profilesSampleRate: number | boolean | undefined = options.profilesSampleRate;\n\n  // Since this is coming from the user (or from a function provided by the user), who knows what we might get. (The\n  // only valid values are booleans or numbers between 0 and 1.)\n  if (!isValidSampleRate(profilesSampleRate)) {\n    DEBUG_BUILD && logger.warn('[Profiling] Discarding profile because of invalid sample rate.');\n    return false;\n  }\n\n  // if the function returned 0 (or false), or if `profileSampleRate` is 0, it's a sign the profile should be dropped\n  if (!profilesSampleRate) {\n    DEBUG_BUILD &&\n      logger.log(\n        '[Profiling] Discarding profile because a negative sampling decision was inherited or profileSampleRate is set to 0',\n      );\n    return false;\n  }\n\n  // Now we roll the dice. Math.random is inclusive of 0, but not of 1, so strict < is safe here. In case sampleRate is\n  // a boolean, the < comparison will cause it to be automatically cast to 1 if it's true and 0 if it's false.\n  const sampled = profilesSampleRate === true ? true : Math.random() < profilesSampleRate;\n  // Check if we should sample this profile\n  if (!sampled) {\n    DEBUG_BUILD &&\n      logger.log(\n        `[Profiling] Discarding profile because it's not included in the random sample (sampling rate = ${Number(\n          profilesSampleRate,\n        )})`,\n      );\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Creates a profiling envelope item, if the profile does not pass validation, returns null.\n * @param event\n * @returns {Profile | null}\n */\nexport function createProfilingEvent(\n  profile_id: string,\n  start_timestamp: number | undefined,\n  profile: JSSelfProfile,\n  event: ProfiledEvent,\n): Profile | null {\n  if (!isValidProfile(profile)) {\n    return null;\n  }\n\n  return createProfilePayload(profile_id, start_timestamp, profile, event);\n}\n\n// TODO (v8): We need to obtain profile ids in @sentry-internal/tracing,\n// but we don't have access to this map because importing this map would\n// cause a circular dependency. We need to resolve this in v8.\nconst PROFILE_MAP: Map<string, JSSelfProfile> = new Map();\n/**\n *\n */\nexport function getActiveProfilesCount(): number {\n  return PROFILE_MAP.size;\n}\n\n/**\n * Retrieves profile from global cache and removes it.\n */\nexport function takeProfileFromGlobalCache(profile_id: string): JSSelfProfile | undefined {\n  const profile = PROFILE_MAP.get(profile_id);\n  if (profile) {\n    PROFILE_MAP.delete(profile_id);\n  }\n  return profile;\n}\n/**\n * Adds profile to global cache and evicts the oldest profile if the cache is full.\n */\nexport function addProfileToGlobalCache(profile_id: string, profile: JSSelfProfile): void {\n  PROFILE_MAP.set(profile_id, profile);\n\n  if (PROFILE_MAP.size > 30) {\n    const last: string = PROFILE_MAP.keys().next().value;\n    PROFILE_MAP.delete(last);\n  }\n}\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nmodule.exports = overArg;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nmodule.exports = toSource;\n","var baseFor = require('./_baseFor'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var baseTimes = require('./_baseTimes'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isIndex = require('./_isIndex'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","var isPrototype = require('./_isPrototype'),\n    nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeys;\n","var SetCache = require('./_SetCache'),\n    arraySome = require('./_arraySome'),\n    cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Check that cyclic values are equal.\n  var arrStacked = stack.get(array);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalArrays;\n","var MapCache = require('./_MapCache'),\n    setCacheAdd = require('./_setCacheAdd'),\n    setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbols = require('./_getSymbols'),\n    keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var arrayPush = require('./_arrayPush'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nmodule.exports = stubArray;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    return object[key] === srcValue &&\n      (srcValue !== undefined || (key in Object(object)));\n  };\n}\n\nmodule.exports = matchesStrictComparable;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var baseHasIn = require('./_baseHasIn'),\n    hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n  return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","var castPath = require('./_castPath'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isIndex = require('./_isIndex'),\n    isLength = require('./isLength'),\n    toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      result = false;\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n    if (!(result = object != null && hasFunc(object, key))) {\n      break;\n    }\n    object = object[key];\n  }\n  if (result || ++index != length) {\n    return result;\n  }\n  length = object == null ? 0 : object.length;\n  return !!length && isLength(length) && isIndex(key, length) &&\n    (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var SetCache = require('./_SetCache'),\n    arrayIncludes = require('./_arrayIncludes'),\n    arrayIncludesWith = require('./_arrayIncludesWith'),\n    cacheHas = require('./_cacheHas'),\n    createSet = require('./_createSet'),\n    setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n  var index = -1,\n      includes = arrayIncludes,\n      length = array.length,\n      isCommon = true,\n      result = [],\n      seen = result;\n\n  if (comparator) {\n    isCommon = false;\n    includes = arrayIncludesWith;\n  }\n  else if (length >= LARGE_ARRAY_SIZE) {\n    var set = iteratee ? null : createSet(array);\n    if (set) {\n      return setToArray(set);\n    }\n    isCommon = false;\n    includes = cacheHas;\n    seen = new SetCache;\n  }\n  else {\n    seen = iteratee ? [] : result;\n  }\n  outer:\n  while (++index < length) {\n    var value = array[index],\n        computed = iteratee ? iteratee(value) : value;\n\n    value = (comparator || value !== 0) ? value : 0;\n    if (isCommon && computed === computed) {\n      var seenIndex = seen.length;\n      while (seenIndex--) {\n        if (seen[seenIndex] === computed) {\n          continue outer;\n        }\n      }\n      if (iteratee) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n    else if (!includes(seen, computed, comparator)) {\n      if (seen !== result) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseUniq;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n  var length = array.length,\n      index = fromIndex + (fromRight ? 1 : -1);\n\n  while ((fromRight ? index-- : ++index < length)) {\n    if (predicate(array[index], index, array)) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = baseFindIndex;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\nmodule.exports = baseSlice;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n  return reHasUnicode.test(string);\n}\n\nmodule.exports = hasUnicode;\n","var baseForOwn = require('./_baseForOwn'),\n    createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","var arrayPush = require('./_arrayPush'),\n    getPrototype = require('./_getPrototype'),\n    getSymbols = require('./_getSymbols'),\n    stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var identity = require('./identity'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\nmodule.exports = overRest;\n","var baseSetToString = require('./_baseSetToString'),\n    shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var toFinite = require('./toFinite');\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n  var result = toFinite(value),\n      remainder = result % 1;\n\n  return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n","'use strict'\n\n// Escapes sequences that could break out of an HTML <style> context.\n// Uses CSS unicode escaping (\\3c = '<') which is valid CSS and parsed\n// correctly by all compliant CSS consumers.\nconst STYLE_TAG = /(<)(\\/?style\\b)/gi\nconst COMMENT_OPEN = /(<)(!--)/g\n\n// Characters that end an at-rule name, mirroring RE_AT_END in the tokenizer.\n// Params starting with anything else need a space to stay separate tokens.\nconst AT_NAME_END = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/\n\nfunction escapeHTMLInCSS(str) {\n  if (typeof str !== 'string') return str\n  if (!str.includes('<')) return str\n  return str.replace(STYLE_TAG, '\\\\3c $2').replace(COMMENT_OPEN, '\\\\3c $2')\n}\n\nconst DEFAULT_RAW = {\n  after: '\\n',\n  beforeClose: '\\n',\n  beforeComment: '\\n',\n  beforeDecl: '\\n',\n  beforeOpen: ' ',\n  beforeRule: '\\n',\n  colon: ': ',\n  commentLeft: ' ',\n  commentRight: ' ',\n  emptyBody: '',\n  indent: '    ',\n  semicolon: false\n}\n\nfunction capitalize(str) {\n  return str[0].toUpperCase() + str.slice(1)\n}\n\nfunction atruleStart(str, node) {\n  let name = '@' + node.name\n  let params = node.params ? str.rawValue(node, 'params') : ''\n  let afterName = node.raws.afterName\n\n  if (typeof afterName === 'undefined') {\n    afterName = params ? ' ' : ''\n  } else if (afterName === '' && params && !AT_NAME_END.test(params[0])) {\n    afterName = ' '\n  }\n\n  return name + afterName + params\n}\n\n// `*--x` is not a custom property: the parser checks the first token, and the\n// `*`/`_` hack prefix moves from `prop` into `before` only after that.\nfunction isCustomProperty(node) {\n  if (!node.prop.startsWith('--')) return false\n  let before = node.raws.before\n  return typeof before === 'undefined' || !/\\S$/.test(before)\n}\n\nfunction pushBody(str, stack, node) {\n  let nodes = node.nodes\n  let last = nodes.length - 1\n  while (last > 0) {\n    if (nodes[last].type !== 'comment') break\n    last -= 1\n  }\n\n  let semicolon = str.raw(node, 'semicolon')\n  let isDocument = node.type === 'document'\n  for (let i = nodes.length - 1; i >= 0; i--) {\n    let child = nodes[i]\n    let childSemicolon = last !== i || semicolon\n    // A childless at-rule or a custom property declaration that still has\n    // following siblings must be terminated. Without the semicolon those\n    // trailing comments are folded into the at-rule's prelude or the custom\n    // property's value and disappear when the output is re-parsed.\n    if (\n      !childSemicolon &&\n      i < nodes.length - 1 &&\n      ((child.type === 'atrule' && !child.nodes) ||\n        (child.type === 'decl' && isCustomProperty(child)))\n    ) {\n      childSemicolon = true\n    }\n    stack.push({\n      document: isDocument,\n      node: child,\n      semicolon: childSemicolon\n    })\n  }\n}\n\nfunction pushBlock(str, stack, node, start) {\n  let between = str.raw(node, 'between', 'beforeOpen')\n  str.builder(escapeHTMLInCSS(start + between) + '{', node, 'start')\n\n  let hasNodes = node.nodes && node.nodes.length\n  let close = () => {\n    let after = hasNodes\n      ? str.raw(node, 'after')\n      : str.raw(node, 'after', 'emptyBody')\n    if (after) str.builder(escapeHTMLInCSS(after))\n    str.builder('}', node, 'end')\n    if (node.type === 'rule' && node.raws.ownSemicolon) {\n      str.builder(escapeHTMLInCSS(node.raws.ownSemicolon), node, 'end')\n    }\n  }\n\n  if (hasNodes) {\n    stack.push(close)\n    pushBody(str, stack, node)\n  } else {\n    close()\n  }\n}\n\nclass Stringifier {\n  constructor(builder) {\n    this.builder = builder\n  }\n\n  atrule(node, semicolon) {\n    let start = atruleStart(this, node)\n    if (node.nodes) {\n      this.block(node, start)\n    } else {\n      let end = (node.raws.between || '') + (semicolon ? ';' : '')\n      this.builder(escapeHTMLInCSS(start + end), node)\n    }\n  }\n\n  beforeAfter(node, detect) {\n    let value\n    if (node.type === 'decl') {\n      value = this.raw(node, null, 'beforeDecl')\n    } else if (node.type === 'comment') {\n      value = this.raw(node, null, 'beforeComment')\n    } else if (detect === 'before') {\n      value = this.raw(node, null, 'beforeRule')\n    } else {\n      value = this.raw(node, null, 'beforeClose')\n    }\n\n    let buf = node.parent\n    let depth = 0\n    while (buf && buf.type !== 'root') {\n      depth += 1\n      buf = buf.parent\n    }\n\n    if (value.includes('\\n')) {\n      let indent = this.raw(node, null, 'indent')\n      if (indent.length) {\n        for (let step = 0; step < depth; step++) value += indent\n      }\n    }\n\n    return value\n  }\n\n  block(node, start) {\n    let between = this.raw(node, 'between', 'beforeOpen')\n    this.builder(escapeHTMLInCSS(start + between) + '{', node, 'start')\n\n    let after\n    if (node.nodes && node.nodes.length) {\n      this.body(node)\n      after = this.raw(node, 'after')\n    } else {\n      after = this.raw(node, 'after', 'emptyBody')\n    }\n\n    if (after) this.builder(escapeHTMLInCSS(after))\n    this.builder('}', node, 'end')\n  }\n\n  body(node) {\n    // Rules and at-rules are expanded into an explicit stack instead of\n    // recursive `stringify()` calls to survive deeply nested trees.\n    // If a subclass changes the traversal methods, its children go\n    // through `stringify()` to keep the override in charge.\n    let proto = Stringifier.prototype\n    let expandable = ['atrule', 'block', 'body', 'rule', 'stringify'].every(\n      method => this[method] === proto[method]\n    )\n\n    let stack = []\n    pushBody(this, stack, node)\n\n    while (stack.length > 0) {\n      let entry = stack.pop()\n      if (typeof entry === 'function') {\n        entry()\n        continue\n      }\n\n      let child = entry.node\n      let before = this.raw(child, 'before')\n      if (before) {\n        this.builder(entry.document ? before : escapeHTMLInCSS(before))\n      }\n\n      if (expandable && child.type === 'rule') {\n        pushBlock(this, stack, child, this.rawValue(child, 'selector'))\n      } else if (expandable && child.type === 'atrule' && child.nodes) {\n        pushBlock(this, stack, child, atruleStart(this, child))\n      } else {\n        this.stringify(child, entry.semicolon)\n      }\n    }\n  }\n\n  comment(node) {\n    let left = this.raw(node, 'left', 'commentLeft')\n    let right = this.raw(node, 'right', 'commentRight')\n    this.builder(escapeHTMLInCSS('/*' + left + node.text + right + '*/'), node)\n  }\n\n  decl(node, semicolon) {\n    let raws = node.raws\n    let between = this.raw(node, 'between', 'colon')\n\n    let string = node.prop + between + this.rawValue(node, 'value')\n\n    if (node.important) {\n      string += raws.important || ' !important'\n    }\n\n    if (semicolon) string += ';'\n    this.builder(escapeHTMLInCSS(string), node)\n  }\n\n  document(node) {\n    this.body(node)\n  }\n\n  raw(node, own, detect) {\n    let value\n    if (!detect) detect = own\n\n    // Already had\n    if (own) {\n      value = node.raws[own]\n      if (typeof value !== 'undefined') return value\n    }\n\n    let parent = node.parent\n\n    if (detect === 'before') {\n      // Hack for first rule in CSS\n      if (!parent || (parent.type === 'root' && parent.first === node)) {\n        return ''\n      }\n\n      // `root` nodes in `document` should use only their own raws\n      if (parent && parent.type === 'document') {\n        return ''\n      }\n    }\n\n    // Floating child without parent\n    if (!parent) return DEFAULT_RAW[detect]\n\n    // Detect style by other nodes\n    let root = node.root()\n    let cache = root.rawCache || (root.rawCache = {})\n    if (typeof cache[detect] !== 'undefined') {\n      return cache[detect]\n    }\n\n    if (detect === 'before' || detect === 'after') {\n      return this.beforeAfter(node, detect)\n    } else {\n      let method = 'raw' + capitalize(detect)\n      if (this[method]) {\n        value = this[method](root, node)\n      } else {\n        root.walk(i => {\n          value = i.raws[own]\n          if (typeof value !== 'undefined') return false\n        })\n      }\n    }\n\n    if (typeof value === 'undefined') value = DEFAULT_RAW[detect]\n\n    cache[detect] = value\n    return value\n  }\n\n  rawBeforeClose(root) {\n    let value\n    root.walk(i => {\n      if (i.nodes && i.nodes.length > 0) {\n        if (typeof i.raws.after !== 'undefined') {\n          value = i.raws.after\n          if (value.includes('\\n')) {\n            value = value.replace(/[^\\n]+$/, '')\n          }\n          return false\n        }\n      }\n    })\n    if (value) value = value.replace(/\\S/g, '')\n    return value\n  }\n\n  rawBeforeComment(root, node) {\n    let value\n    root.walkComments(i => {\n      if (typeof i.raws.before !== 'undefined') {\n        value = i.raws.before\n        if (value.includes('\\n')) {\n          value = value.replace(/[^\\n]+$/, '')\n        }\n        return false\n      }\n    })\n    if (typeof value === 'undefined') {\n      value = this.raw(node, null, 'beforeDecl')\n    } else if (value) {\n      value = value.replace(/\\S/g, '')\n    }\n    return value\n  }\n\n  rawBeforeDecl(root, node) {\n    let value\n    root.walkDecls(i => {\n      if (typeof i.raws.before !== 'undefined') {\n        value = i.raws.before\n        if (value.includes('\\n')) {\n          value = value.replace(/[^\\n]+$/, '')\n        }\n        return false\n      }\n    })\n    if (typeof value === 'undefined') {\n      value = this.raw(node, null, 'beforeRule')\n    } else if (value) {\n      value = value.replace(/\\S/g, '')\n    }\n    return value\n  }\n\n  rawBeforeOpen(root) {\n    let value\n    root.walk(i => {\n      if (i.type !== 'decl') {\n        value = i.raws.between\n        if (typeof value !== 'undefined') return false\n      }\n    })\n    return value\n  }\n\n  rawBeforeRule(root) {\n    let value\n    root.walk(i => {\n      if (i.nodes && (i.parent !== root || root.first !== i)) {\n        if (typeof i.raws.before !== 'undefined') {\n          value = i.raws.before\n          if (value.includes('\\n')) {\n            value = value.replace(/[^\\n]+$/, '')\n          }\n          return false\n        }\n      }\n    })\n    if (value) value = value.replace(/\\S/g, '')\n    return value\n  }\n\n  rawColon(root) {\n    let value\n    root.walkDecls(i => {\n      if (typeof i.raws.between !== 'undefined') {\n        value = i.raws.between.replace(/[^\\s:]/g, '')\n        return false\n      }\n    })\n    return value\n  }\n\n  rawEmptyBody(root) {\n    let value\n    root.walk(i => {\n      if (i.nodes && i.nodes.length === 0) {\n        value = i.raws.after\n        if (typeof value !== 'undefined') return false\n      }\n    })\n    return value\n  }\n\n  rawIndent(root) {\n    if (root.raws.indent) return root.raws.indent\n    let value\n    root.walk(i => {\n      let p = i.parent\n      if (p && p !== root && p.parent && p.parent === root) {\n        if (typeof i.raws.before !== 'undefined') {\n          let parts = i.raws.before.split('\\n')\n          value = parts[parts.length - 1]\n          value = value.replace(/\\S/g, '')\n          return false\n        }\n      }\n    })\n    return value\n  }\n\n  rawSemicolon(root) {\n    let value\n    root.walk(i => {\n      if (i.nodes && i.nodes.length && i.last.type === 'decl') {\n        value = i.raws.semicolon\n        if (typeof value !== 'undefined') return false\n      }\n    })\n    return value\n  }\n\n  rawValue(node, prop) {\n    let value = node[prop]\n    let raw = node.raws[prop]\n    if (raw && raw.value === value) {\n      return raw.raw\n    }\n\n    return value\n  }\n\n  root(node) {\n    if (node.source && node.source.input.hasBOM) {\n      this.builder('\\uFEFF', node, 'start')\n    }\n    this.body(node)\n    if (node.raws.after) {\n      let after = node.raws.after\n      let isDocument = node.parent && node.parent.type === 'document'\n      this.builder(isDocument ? after : escapeHTMLInCSS(after))\n    }\n  }\n\n  rule(node) {\n    this.block(node, this.rawValue(node, 'selector'))\n    if (node.raws.ownSemicolon) {\n      this.builder(escapeHTMLInCSS(node.raws.ownSemicolon), node, 'end')\n    }\n  }\n\n  stringify(node, semicolon) {\n    /* c8 ignore start */\n    if (!this[node.type]) {\n      throw new Error(\n        'Unknown AST node type ' +\n          node.type +\n          '. ' +\n          'Maybe you need to change PostCSS stringifier.'\n      )\n    }\n    /* c8 ignore stop */\n    this[node.type](node, semicolon)\n  }\n}\n\nmodule.exports = Stringifier\nStringifier.default = Stringifier\n","'use strict'\n\nlet { existsSync, readFileSync, realpathSync } = require('fs')\nlet { dirname, isAbsolute, join, relative, sep } = require('path')\nlet { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')\n\nfunction realPath(path) {\n  try {\n    return realpathSync(path)\n  } catch {\n    // Missing or dangling: keep the literal path. The existsSync() check below\n    // still gates the read, and a path that does not exist cannot escape.\n    return path\n  }\n}\n\nfunction fromBase64(str) {\n  if (Buffer) {\n    return Buffer.from(str, 'base64').toString()\n  } else {\n    /* c8 ignore next 2 */\n    return window.atob(str)\n  }\n}\n\nclass PreviousMap {\n  constructor(css, opts) {\n    if (opts.map === false) return\n    if (opts.unsafeMap) this.unsafeMap = true\n    this.loadAnnotation(css)\n    this.inline = this.startWith(this.annotation, 'data:')\n\n    let prev = opts.map ? opts.map.prev : undefined\n    let text = this.loadMap(opts.from, prev)\n    if (!this.mapFile && opts.from) {\n      this.mapFile = opts.from\n    }\n    if (this.mapFile) this.root = dirname(this.mapFile)\n    if (text) this.text = text\n  }\n\n  consumer() {\n    if (!this.consumerCache) {\n      this.consumerCache = new SourceMapConsumer(this.json || this.text)\n    }\n    return this.consumerCache\n  }\n\n  decodeInline(text) {\n    let baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/\n    let baseUri = /^data:application\\/json;base64,/\n    let charsetUri = /^data:application\\/json;charset=utf-?8,/\n    let uri = /^data:application\\/json,/\n\n    let uriMatch = text.match(charsetUri) || text.match(uri)\n    if (uriMatch) {\n      return decodeURIComponent(text.substr(uriMatch[0].length))\n    }\n\n    let baseUriMatch = text.match(baseCharsetUri) || text.match(baseUri)\n    if (baseUriMatch) {\n      return fromBase64(text.substr(baseUriMatch[0].length))\n    }\n\n    let encoding = text.slice('data:application/json;'.length)\n    encoding = encoding.slice(0, encoding.indexOf(','))\n    throw new Error('Unsupported source map encoding ' + encoding)\n  }\n\n  getAnnotationURL(sourceMapString) {\n    return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, '').trim()\n  }\n\n  isMap(map) {\n    if (typeof map !== 'object') return false\n    return (\n      typeof map.mappings === 'string' ||\n      typeof map._mappings === 'string' ||\n      Array.isArray(map.sections)\n    )\n  }\n\n  loadAnnotation(css) {\n    let comments = css.match(/\\/\\*\\s*# sourceMappingURL=/g)\n    if (!comments) return\n\n    // sourceMappingURLs from comments, strings, etc.\n    let start = css.lastIndexOf(comments.pop())\n    let end = css.indexOf('*/', start)\n\n    if (start > -1 && end > -1) {\n      // Locate the last sourceMappingURL to avoid pickin\n      this.annotation = this.getAnnotationURL(css.substring(start, end))\n    }\n  }\n\n  loadFile(path, cssFile, trusted) {\n    if (!trusted && !this.unsafeMap) {\n      if (!/\\.map$/i.test(path)) return undefined\n      if (!cssFile) return undefined\n\n      // Compare *resolved* paths: relative() is textual, so without this a\n      // symlink at or below the CSS file's directory points the map outside it.\n      let rel = relative(realPath(dirname(cssFile)), realPath(path))\n      if (rel === '..' || rel.startsWith('..' + sep) || isAbsolute(rel)) {\n        return undefined\n      }\n    }\n    this.root = dirname(path)\n    if (existsSync(path)) {\n      this.mapFile = path\n      return readFileSync(path, 'utf-8').toString().trim()\n    }\n  }\n\n  loadMap(file, prev) {\n    if (prev === false) return false\n\n    if (prev) {\n      if (typeof prev === 'string') {\n        return prev\n      } else if (typeof prev === 'function') {\n        let prevPath = prev(file)\n        if (prevPath) {\n          let map = this.loadFile(prevPath, file, true)\n          if (!map) {\n            throw new Error(\n              'Unable to load previous source map: ' + prevPath.toString()\n            )\n          }\n          return map\n        }\n      } else if (prev instanceof SourceMapConsumer) {\n        return SourceMapGenerator.fromSourceMap(prev).toString()\n      } else if (prev instanceof SourceMapGenerator) {\n        return prev.toString()\n      } else if (this.isMap(prev)) {\n        return JSON.stringify(prev)\n      } else {\n        throw new Error(\n          'Unsupported previous source map format: ' + prev.toString()\n        )\n      }\n    } else if (this.inline) {\n      return this.decodeInline(this.annotation)\n    } else if (this.annotation) {\n      let map = this.annotation\n      if (file) map = join(dirname(file), map)\n      let unknown = this.loadFile(map, file, false)\n      if (unknown) {\n        try {\n          /* c8 ignore next 4 */\n          this.json = JSON.parse(unknown.replace(/^\\)]}'[^\\n]*\\n/, ''))\n        } catch {\n          return undefined\n        }\n      }\n      return unknown\n    }\n  }\n\n  startWith(string, start) {\n    if (!string) return false\n    return string.substr(0, start.length) === start\n  }\n\n  withContent() {\n    return !!(\n      this.consumer().sourcesContent &&\n      this.consumer().sourcesContent.length > 0\n    )\n  }\n}\n\nmodule.exports = PreviousMap\nPreviousMap.default = PreviousMap\n","'use strict'\n\nlet list = {\n  comma(string) {\n    return list.split(string, [','], true)\n  },\n\n  space(string) {\n    let spaces = [' ', '\\n', '\\t']\n    return list.split(string, spaces)\n  },\n\n  split(string, separators, last) {\n    if (typeof string !== 'string') return []\n    let array = []\n    let current = ''\n    let split = false\n\n    let func = 0\n    let inQuote = false\n    let prevQuote = ''\n    let escape = false\n\n    for (let letter of string) {\n      if (escape) {\n        escape = false\n      } else if (letter === '\\\\') {\n        escape = true\n      } else if (inQuote) {\n        if (letter === prevQuote) {\n          inQuote = false\n        }\n      } else if (letter === '\"' || letter === \"'\") {\n        inQuote = true\n        prevQuote = letter\n      } else if (letter === '(') {\n        func += 1\n      } else if (letter === ')') {\n        if (func > 0) func -= 1\n      } else if (func === 0) {\n        if (separators.includes(letter)) split = true\n      }\n\n      if (split) {\n        let value = current.trim()\n        if (last || value !== '') array.push(value)\n        current = ''\n        split = false\n      } else {\n        current += letter\n      }\n    }\n\n    let value = current.trim()\n    if (last || value !== '') array.push(value)\n    return array\n  }\n}\n\nmodule.exports = list\nlist.default = list\n","'use strict'\n\nlet Container = require('./container')\nlet Document = require('./document')\nlet MapGenerator = require('./map-generator')\nlet parse = require('./parse')\nlet Result = require('./result')\nlet Root = require('./root')\nlet stringify = require('./stringify')\nlet { isClean, my } = require('./symbols')\nlet warnOnce = require('./warn-once')\n\nconst TYPE_TO_CLASS_NAME = {\n  atrule: 'AtRule',\n  comment: 'Comment',\n  decl: 'Declaration',\n  document: 'Document',\n  root: 'Root',\n  rule: 'Rule'\n}\n\nconst PLUGIN_PROPS = {\n  AtRule: true,\n  AtRuleExit: true,\n  Comment: true,\n  CommentExit: true,\n  Declaration: true,\n  DeclarationExit: true,\n  Document: true,\n  DocumentExit: true,\n  Once: true,\n  OnceExit: true,\n  postcssPlugin: true,\n  prepare: true,\n  Root: true,\n  RootExit: true,\n  Rule: true,\n  RuleExit: true\n}\n\nconst NOT_VISITORS = {\n  Once: true,\n  postcssPlugin: true,\n  prepare: true\n}\n\nconst CHILDREN = 0\n\nfunction isPromise(obj) {\n  return typeof obj === 'object' && typeof obj.then === 'function'\n}\n\nfunction getEvents(node) {\n  let key = false\n  let type = TYPE_TO_CLASS_NAME[node.type]\n  if (node.type === 'decl') {\n    key = node.prop.toLowerCase()\n  } else if (node.type === 'atrule') {\n    key = node.name.toLowerCase()\n  }\n\n  if (key && node.append) {\n    return [\n      type,\n      type + '-' + key,\n      CHILDREN,\n      type + 'Exit',\n      type + 'Exit-' + key\n    ]\n  } else if (key) {\n    return [type, type + '-' + key, type + 'Exit', type + 'Exit-' + key]\n  } else if (node.append) {\n    return [type, CHILDREN, type + 'Exit']\n  } else {\n    return [type, type + 'Exit']\n  }\n}\n\nfunction toStack(node) {\n  let events\n  if (node.type === 'document') {\n    events = ['Document', CHILDREN, 'DocumentExit']\n  } else if (node.type === 'root') {\n    events = ['Root', CHILDREN, 'RootExit']\n  } else {\n    events = getEvents(node)\n  }\n\n  return {\n    eventIndex: 0,\n    events,\n    iterator: 0,\n    node,\n    visitorIndex: 0,\n    visitors: []\n  }\n}\n\nfunction cleanMarks(node) {\n  let stack = [node]\n  while (stack.length > 0) {\n    let next = stack.pop()\n    next[isClean] = false\n    if (next.nodes) {\n      for (let i of next.nodes) stack.push(i)\n    }\n  }\n  return node\n}\n\nlet postcss = {}\n\nclass LazyResult {\n  get content() {\n    return this.stringify().content\n  }\n\n  get css() {\n    return this.stringify().css\n  }\n\n  get map() {\n    return this.stringify().map\n  }\n\n  get messages() {\n    return this.sync().messages\n  }\n\n  get opts() {\n    return this.result.opts\n  }\n\n  get processor() {\n    return this.result.processor\n  }\n\n  get root() {\n    return this.sync().root\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'LazyResult'\n  }\n\n  constructor(processor, css, opts) {\n    this.stringified = false\n    this.processed = false\n\n    let root\n    if (\n      typeof css === 'object' &&\n      css !== null &&\n      (css.type === 'root' || css.type === 'document')\n    ) {\n      root = cleanMarks(css)\n    } else if (css instanceof LazyResult || css instanceof Result) {\n      root = cleanMarks(css.root)\n      if (css.map) {\n        if (typeof opts.map === 'undefined') opts.map = {}\n        if (!opts.map.inline) opts.map.inline = false\n        opts.map.prev = css.map\n      }\n    } else {\n      let parser = parse\n      if (opts.syntax) parser = opts.syntax.parse\n      if (opts.parser) parser = opts.parser\n      if (parser.parse) parser = parser.parse\n\n      try {\n        root = parser(css, opts)\n      } catch (error) {\n        this.processed = true\n        this.error = error\n      }\n\n      if (root && !root[my]) {\n        /* c8 ignore next 2 */\n        Container.rebuild(root)\n      }\n    }\n\n    this.result = new Result(processor, root, opts)\n    this.helpers = { ...postcss, postcss, result: this.result }\n    this.plugins = this.processor.plugins.map(plugin => {\n      if (typeof plugin === 'object' && plugin.prepare) {\n        return { ...plugin, ...plugin.prepare(this.result) }\n      } else {\n        return plugin\n      }\n    })\n  }\n\n  async() {\n    if (this.error) return Promise.reject(this.error)\n    if (this.processed) return Promise.resolve(this.result)\n    if (!this.processing) {\n      this.processing = this.runAsync()\n    }\n    return this.processing\n  }\n\n  catch(onRejected) {\n    return this.async().catch(onRejected)\n  }\n\n  finally(onFinally) {\n    return this.async().then(onFinally, onFinally)\n  }\n\n  getAsyncError() {\n    throw new Error('Use process(css).then(cb) to work with async plugins')\n  }\n\n  handleError(error, node) {\n    let plugin = this.result.lastPlugin\n    try {\n      if (node) node.addToError(error)\n      this.error = error\n      if (error.name === 'CssSyntaxError' && !error.plugin) {\n        error.plugin = plugin.postcssPlugin\n        error.setMessage()\n      } else if (plugin.postcssVersion) {\n        if (process.env.NODE_ENV !== 'production') {\n          let pluginName = plugin.postcssPlugin\n          let pluginVer = plugin.postcssVersion\n          let runtimeVer = this.result.processor.version\n          let a = pluginVer.split('.')\n          let b = runtimeVer.split('.')\n\n          if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {\n            // eslint-disable-next-line no-console\n            console.error(\n              'Unknown error from PostCSS plugin. Your current PostCSS ' +\n                'version is ' +\n                runtimeVer +\n                ', but ' +\n                pluginName +\n                ' uses ' +\n                pluginVer +\n                '. Perhaps this is the source of the error below.'\n            )\n          }\n        }\n      }\n    } catch (err) {\n      /* c8 ignore next 3 */\n      // eslint-disable-next-line no-console\n      if (console && console.error) console.error(err)\n    }\n    return error\n  }\n\n  prepareVisitors() {\n    this.listeners = {}\n    let add = (plugin, type, cb) => {\n      if (!this.listeners[type]) this.listeners[type] = []\n      this.listeners[type].push([plugin, cb])\n    }\n    for (let plugin of this.plugins) {\n      if (typeof plugin === 'object') {\n        for (let event in plugin) {\n          if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {\n            throw new Error(\n              `Unknown event ${event} in ${plugin.postcssPlugin}. ` +\n                `Try to update PostCSS (${this.processor.version} now).`\n            )\n          }\n          if (!NOT_VISITORS[event]) {\n            if (typeof plugin[event] === 'object') {\n              for (let filter in plugin[event]) {\n                if (filter === '*') {\n                  add(plugin, event, plugin[event][filter])\n                } else {\n                  add(\n                    plugin,\n                    event + '-' + filter.toLowerCase(),\n                    plugin[event][filter]\n                  )\n                }\n              }\n            } else if (typeof plugin[event] === 'function') {\n              add(plugin, event, plugin[event])\n            }\n          }\n        }\n      }\n    }\n    this.hasListener = Object.keys(this.listeners).length > 0\n  }\n\n  async runAsync() {\n    this.plugin = 0\n    for (let i = 0; i < this.plugins.length; i++) {\n      let plugin = this.plugins[i]\n      let promise = this.runOnRoot(plugin)\n      if (isPromise(promise)) {\n        try {\n          await promise\n        } catch (error) {\n          throw this.handleError(error)\n        }\n      }\n    }\n\n    this.prepareVisitors()\n    if (this.hasListener) {\n      let root = this.result.root\n      while (!root[isClean]) {\n        root[isClean] = true\n        let stack = [toStack(root)]\n        while (stack.length > 0) {\n          let promise = this.visitTick(stack)\n          if (isPromise(promise)) {\n            try {\n              await promise\n            } catch (e) {\n              let node = stack[stack.length - 1].node\n              throw this.handleError(e, node)\n            }\n          }\n        }\n      }\n\n      if (this.listeners.OnceExit) {\n        for (let [plugin, visitor] of this.listeners.OnceExit) {\n          this.result.lastPlugin = plugin\n          try {\n            if (root.type === 'document') {\n              let roots = root.nodes.map(subRoot =>\n                visitor(subRoot, this.helpers)\n              )\n\n              await Promise.all(roots)\n            } else {\n              await visitor(root, this.helpers)\n            }\n          } catch (e) {\n            throw this.handleError(e)\n          }\n        }\n      }\n    }\n\n    this.processed = true\n    return this.stringify()\n  }\n\n  runOnRoot(plugin) {\n    this.result.lastPlugin = plugin\n    try {\n      if (typeof plugin === 'object' && plugin.Once) {\n        if (this.result.root.type === 'document') {\n          let roots = this.result.root.nodes.map(root =>\n            plugin.Once(root, this.helpers)\n          )\n\n          if (isPromise(roots[0])) {\n            return Promise.all(roots)\n          }\n\n          return roots\n        }\n\n        return plugin.Once(this.result.root, this.helpers)\n      } else if (typeof plugin === 'function') {\n        return plugin(this.result.root, this.result)\n      }\n    } catch (error) {\n      throw this.handleError(error)\n    }\n  }\n\n  stringify() {\n    if (this.error) throw this.error\n    if (this.stringified) return this.result\n    this.stringified = true\n\n    this.sync()\n\n    let opts = this.result.opts\n    let str = stringify\n    if (opts.syntax) str = opts.syntax.stringify\n    if (opts.stringifier) str = opts.stringifier\n    if (str.stringify) str = str.stringify\n\n    let rootSource = this.result.root.source\n    if (\n      opts.map === undefined &&\n      !(rootSource && rootSource.input && rootSource.input.map)\n    ) {\n      let result = ''\n      str(this.result.root, i => {\n        result += i\n      })\n      this.result.css = result\n      return this.result\n    }\n\n    let map = new MapGenerator(str, this.result.root, this.result.opts)\n    let data = map.generate()\n    this.result.css = data[0]\n    this.result.map = data[1]\n\n    return this.result\n  }\n\n  sync() {\n    if (this.error) throw this.error\n    if (this.processed) return this.result\n    this.processed = true\n\n    if (this.processing) {\n      throw this.getAsyncError()\n    }\n\n    for (let plugin of this.plugins) {\n      let promise = this.runOnRoot(plugin)\n      if (isPromise(promise)) {\n        throw this.getAsyncError()\n      }\n    }\n\n    this.prepareVisitors()\n    if (this.hasListener) {\n      let root = this.result.root\n      while (!root[isClean]) {\n        root[isClean] = true\n        this.walkSync(root)\n      }\n      if (this.listeners.OnceExit) {\n        if (root.type === 'document') {\n          for (let subRoot of root.nodes) {\n            this.visitSync(this.listeners.OnceExit, subRoot)\n          }\n        } else {\n          this.visitSync(this.listeners.OnceExit, root)\n        }\n      }\n    }\n\n    return this.result\n  }\n\n  then(onFulfilled, onRejected) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (!('from' in this.opts)) {\n        warnOnce(\n          'Without `from` option PostCSS could generate wrong source map ' +\n            'and will not find Browserslist config. Set it to CSS file path ' +\n            'or to `undefined` to prevent this warning.'\n        )\n      }\n    }\n    return this.async().then(onFulfilled, onRejected)\n  }\n\n  toString() {\n    return this.css\n  }\n\n  visitSync(visitors, node) {\n    for (let [plugin, visitor] of visitors) {\n      this.result.lastPlugin = plugin\n      let promise\n      try {\n        promise = visitor(node, this.helpers)\n      } catch (e) {\n        throw this.handleError(e, node.proxyOf)\n      }\n      if (node.type !== 'root' && node.type !== 'document' && !node.parent) {\n        return true\n      }\n      if (isPromise(promise)) {\n        throw this.getAsyncError()\n      }\n    }\n  }\n\n  visitTick(stack) {\n    let visit = stack[stack.length - 1]\n    let { node, visitors } = visit\n\n    if (node.type !== 'root' && node.type !== 'document' && !node.parent) {\n      stack.pop()\n      return\n    }\n\n    if (visitors.length > 0 && visit.visitorIndex < visitors.length) {\n      let [plugin, visitor] = visitors[visit.visitorIndex]\n      visit.visitorIndex += 1\n      if (visit.visitorIndex === visitors.length) {\n        visit.visitors = []\n        visit.visitorIndex = 0\n      }\n      this.result.lastPlugin = plugin\n      try {\n        return visitor(node.toProxy(), this.helpers)\n      } catch (e) {\n        throw this.handleError(e, node)\n      }\n    }\n\n    if (visit.iterator !== 0) {\n      let iterator = visit.iterator\n      // Advance past the child we just finished visiting. Like\n      // `Container#each`, the index is incremented only after a child has\n      // been fully processed, so a node inserted right after the current\n      // child is not skipped by the `existIndex < index` adjustment in\n      // `Container#insertAfter()` (which would fire exit events too early).\n      if (visit.descending) {\n        visit.descending = false\n        node.indexes[iterator] += 1\n      }\n      let child\n      while ((child = node.nodes[node.indexes[iterator]])) {\n        if (!child[isClean]) {\n          child[isClean] = true\n          visit.descending = true\n          stack.push(toStack(child))\n          return\n        }\n        node.indexes[iterator] += 1\n      }\n      visit.iterator = 0\n      delete node.indexes[iterator]\n    }\n\n    let events = visit.events\n    while (visit.eventIndex < events.length) {\n      let event = events[visit.eventIndex]\n      visit.eventIndex += 1\n      if (event === CHILDREN) {\n        if (node.nodes && node.nodes.length) {\n          node[isClean] = true\n          visit.iterator = node.getIterator()\n        }\n        return\n      } else if (this.listeners[event]) {\n        visit.visitors = this.listeners[event]\n        return\n      }\n    }\n    stack.pop()\n  }\n\n  walkSync(node) {\n    // An explicit stack like in async `visitTick()` to survive deeply\n    // nested trees. Unlike `visitTick()`, nodes are marked clean only\n    // on entering, so a node dirtied by its own visitors is revisited\n    // on the next pass.\n    node[isClean] = true\n    let stack = [{ eventIndex: 0, events: getEvents(node), iterator: 0, node }]\n\n    while (stack.length > 0) {\n      let visit = stack[stack.length - 1]\n      let visitNode = visit.node\n\n      if (visit.iterator !== 0) {\n        let iterator = visit.iterator\n        // Advance past the child we just finished visiting. Like\n        // `Container#each`, the index is incremented only after a child has\n        // been fully processed. Incrementing before (as this loop used to)\n        // makes a node inserted right after the current child get skipped by\n        // the `existIndex < index` adjustment in `Container#insertAfter()`,\n        // which fires exit events before those new siblings are visited.\n        if (visit.descending) {\n          visit.descending = false\n          visitNode.indexes[iterator] += 1\n        }\n        let child\n        let descended = false\n        while ((child = visitNode.nodes[visitNode.indexes[iterator]])) {\n          if (!child[isClean]) {\n            child[isClean] = true\n            visit.descending = true\n            stack.push({\n              eventIndex: 0,\n              events: getEvents(child),\n              iterator: 0,\n              node: child\n            })\n            descended = true\n            break\n          }\n          visitNode.indexes[iterator] += 1\n        }\n        if (descended) continue\n        visit.iterator = 0\n        delete visitNode.indexes[iterator]\n      }\n\n      if (visit.eventIndex < visit.events.length) {\n        let event = visit.events[visit.eventIndex]\n        visit.eventIndex += 1\n        if (event === CHILDREN) {\n          if (visitNode.nodes && visitNode.nodes.length) {\n            visit.iterator = visitNode.getIterator()\n          }\n        } else {\n          let visitors = this.listeners[event]\n          if (visitors) {\n            if (this.visitSync(visitors, visitNode.toProxy())) stack.pop()\n          }\n        }\n        continue\n      }\n\n      stack.pop()\n    }\n  }\n\n  warnings() {\n    return this.sync().warnings()\n  }\n}\n\nLazyResult.registerPostcss = dependant => {\n  postcss = dependant\n}\n\nmodule.exports = LazyResult\nLazyResult.default = LazyResult\n\nRoot.registerLazyResult(LazyResult)\nDocument.registerLazyResult(LazyResult)\n","'use strict'\n\nlet { dirname, relative, resolve, sep } = require('path')\nlet { SourceMapConsumer, SourceMapGenerator } = require('source-map-js')\nlet { pathToFileURL } = require('url')\n\nlet Input = require('./input')\n\nlet sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator)\nlet pathAvailable = Boolean(dirname && resolve && relative && sep)\n\nclass MapGenerator {\n  constructor(stringify, root, opts, cssString) {\n    this.stringify = stringify\n    this.mapOpts = opts.map || {}\n    this.root = root\n    this.opts = opts\n    this.css = cssString\n    this.originalCSS = cssString\n    this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute\n\n    this.memoizedFileURLs = new Map()\n    this.memoizedPaths = new Map()\n    this.memoizedURLs = new Map()\n  }\n\n  addAnnotation() {\n    let content\n\n    if (this.isInline()) {\n      content =\n        'data:application/json;base64,' + this.toBase64(this.map.toString())\n    } else if (typeof this.mapOpts.annotation === 'string') {\n      content = this.mapOpts.annotation\n    } else if (typeof this.mapOpts.annotation === 'function') {\n      content = this.mapOpts.annotation(this.opts.to, this.root)\n    } else {\n      content = this.outputFile() + '.map'\n    }\n    let eol = '\\n'\n    if (this.css.includes('\\r\\n')) eol = '\\r\\n'\n\n    this.css += eol + '/*# sourceMappingURL=' + content + ' */'\n  }\n\n  applyPrevMaps() {\n    for (let prev of this.previous()) {\n      let from = this.toUrl(this.path(prev.file))\n      let root = prev.root || dirname(prev.file)\n      let map\n\n      if (this.mapOpts.sourcesContent === false) {\n        map = new SourceMapConsumer(prev.text)\n        if (map.sourcesContent) {\n          map.sourcesContent = null\n        }\n      } else {\n        map = prev.consumer()\n      }\n\n      this.map.applySourceMap(map, from, this.toUrl(this.path(root)))\n    }\n  }\n\n  clearAnnotation() {\n    if (this.mapOpts.annotation === false) return\n\n    if (this.root) {\n      let node\n      for (let i = this.root.nodes.length - 1; i >= 0; i--) {\n        node = this.root.nodes[i]\n        if (node.type !== 'comment') continue\n        if (node.text.startsWith('# sourceMappingURL=')) {\n          this.root.removeChild(i)\n        }\n      }\n    } else if (this.css) {\n      let annotation = '/*# sourceMappingURL='\n      let startIndex\n      while ((startIndex = this.css.lastIndexOf(annotation)) !== -1) {\n        let endIndex = this.css.indexOf('*/', startIndex + annotation.length)\n        if (endIndex === -1) break\n        while (startIndex > 0 && this.css[startIndex - 1] === '\\n') {\n          startIndex--\n        }\n        this.css = this.css.slice(0, startIndex) + this.css.slice(endIndex + 2)\n      }\n    }\n  }\n\n  generate() {\n    this.clearAnnotation()\n    if (pathAvailable && sourceMapAvailable && this.isMap()) {\n      return this.generateMap()\n    } else {\n      let result = ''\n      this.stringify(this.root, i => {\n        result += i\n      })\n      return [result]\n    }\n  }\n\n  generateMap() {\n    if (this.root) {\n      this.generateString()\n    } else if (this.previous().length === 1) {\n      let prev = this.previous()[0].consumer()\n      prev.file = this.outputFile()\n      this.map = SourceMapGenerator.fromSourceMap(prev, {\n        ignoreInvalidMapping: true\n      })\n    } else {\n      this.map = new SourceMapGenerator({\n        file: this.outputFile(),\n        ignoreInvalidMapping: true\n      })\n      this.map.addMapping({\n        generated: { column: 0, line: 1 },\n        original: { column: 0, line: 1 },\n        source: this.opts.from\n          ? this.toUrl(this.path(this.opts.from))\n          : '<no source>'\n      })\n    }\n\n    if (this.isSourcesContent()) this.setSourcesContent()\n    if (this.root && this.previous().length > 0) this.applyPrevMaps()\n    if (this.isAnnotation()) this.addAnnotation()\n\n    if (this.isInline()) {\n      return [this.css]\n    } else {\n      return [this.css, this.map]\n    }\n  }\n\n  generateString() {\n    this.css = ''\n    this.map = new SourceMapGenerator({\n      file: this.outputFile(),\n      ignoreInvalidMapping: true\n    })\n\n    let line = 1\n    let column = 1\n\n    let noSource = '<no source>'\n    let mapping = {\n      generated: { column: 0, line: 0 },\n      original: { column: 0, line: 0 },\n      source: ''\n    }\n\n    let last, lines\n    this.stringify(this.root, (str, node, type) => {\n      this.css += str\n\n      if (node && type !== 'end') {\n        mapping.generated.line = line\n        mapping.generated.column = column - 1\n        if (node.source && node.source.start) {\n          mapping.source = this.sourcePath(node)\n          mapping.original.line = node.source.start.line\n          mapping.original.column = node.source.start.column - 1\n          this.map.addMapping(mapping)\n        } else {\n          mapping.source = noSource\n          mapping.original.line = 1\n          mapping.original.column = 0\n          this.map.addMapping(mapping)\n        }\n      }\n\n      lines = str.match(/\\n/g)\n      if (lines) {\n        line += lines.length\n        last = str.lastIndexOf('\\n')\n        column = str.length - last\n      } else {\n        column += str.length\n      }\n\n      if (node && type !== 'start') {\n        let p = node.parent || { raws: {} }\n        let childless =\n          node.type === 'decl' || (node.type === 'atrule' && !node.nodes)\n        if (!childless || node !== p.last || p.raws.semicolon) {\n          if (node.source && node.source.end) {\n            mapping.source = this.sourcePath(node)\n            mapping.original.line = node.source.end.line\n            mapping.original.column = node.source.end.column - 1\n            mapping.generated.line = line\n            mapping.generated.column = column - 2\n            this.map.addMapping(mapping)\n          } else {\n            mapping.source = noSource\n            mapping.original.line = 1\n            mapping.original.column = 0\n            mapping.generated.line = line\n            mapping.generated.column = column - 1\n            this.map.addMapping(mapping)\n          }\n        }\n      }\n    })\n  }\n\n  isAnnotation() {\n    if (this.isInline()) {\n      return true\n    }\n    if (typeof this.mapOpts.annotation !== 'undefined') {\n      return this.mapOpts.annotation\n    }\n    if (this.previous().length) {\n      return this.previous().some(i => i.annotation)\n    }\n    return true\n  }\n\n  isInline() {\n    if (typeof this.mapOpts.inline !== 'undefined') {\n      return this.mapOpts.inline\n    }\n\n    let annotation = this.mapOpts.annotation\n    if (typeof annotation !== 'undefined' && annotation !== true) {\n      return false\n    }\n\n    if (this.previous().length) {\n      return this.previous().some(i => i.inline)\n    }\n    return true\n  }\n\n  isMap() {\n    if (typeof this.opts.map !== 'undefined') {\n      return !!this.opts.map\n    }\n    return this.previous().length > 0\n  }\n\n  isSourcesContent() {\n    if (typeof this.mapOpts.sourcesContent !== 'undefined') {\n      return this.mapOpts.sourcesContent\n    }\n    if (this.previous().length) {\n      return this.previous().some(i => i.withContent())\n    }\n    return true\n  }\n\n  outputFile() {\n    if (this.opts.to) {\n      return this.path(this.opts.to)\n    } else if (this.opts.from) {\n      return this.path(this.opts.from)\n    } else {\n      return 'to.css'\n    }\n  }\n\n  path(file) {\n    if (this.mapOpts.absolute) return file\n    if (file.charCodeAt(0) === 60 /* `<` */) return file\n    if (/^\\w+:\\/\\//.test(file)) return file\n    let cached = this.memoizedPaths.get(file)\n    if (cached) return cached\n\n    let from = this.opts.to ? dirname(this.opts.to) : '.'\n\n    if (typeof this.mapOpts.annotation === 'string') {\n      from = dirname(resolve(from, this.mapOpts.annotation))\n    }\n\n    let path = relative(from, file)\n    this.memoizedPaths.set(file, path)\n\n    return path\n  }\n\n  previous() {\n    if (!this.previousMaps) {\n      this.previousMaps = []\n      if (this.root) {\n        this.root.walk(node => {\n          if (node.source && node.source.input.map) {\n            let map = node.source.input.map\n            if (!this.previousMaps.includes(map)) {\n              this.previousMaps.push(map)\n            }\n          }\n        })\n      } else {\n        let input = new Input(this.originalCSS, this.opts)\n        if (input.map) this.previousMaps.push(input.map)\n      }\n    }\n\n    return this.previousMaps\n  }\n\n  setSourcesContent() {\n    let already = {}\n    if (this.root) {\n      this.root.walk(node => {\n        if (node.source) {\n          let from = node.source.input.from\n          if (from && !already[from]) {\n            already[from] = true\n            let fromUrl = this.usesFileUrls\n              ? this.toFileUrl(from)\n              : this.toUrl(this.path(from))\n            this.map.setSourceContent(fromUrl, node.source.input.css)\n          }\n        }\n      })\n    } else if (this.css) {\n      let from = this.opts.from\n        ? this.toUrl(this.path(this.opts.from))\n        : '<no source>'\n      this.map.setSourceContent(from, this.css)\n    }\n  }\n\n  sourcePath(node) {\n    if (this.mapOpts.from) {\n      return this.toUrl(this.mapOpts.from)\n    } else if (this.usesFileUrls) {\n      return this.toFileUrl(node.source.input.from)\n    } else {\n      return this.toUrl(this.path(node.source.input.from))\n    }\n  }\n\n  toBase64(str) {\n    if (Buffer) {\n      return Buffer.from(str).toString('base64')\n    } else {\n      return window.btoa(unescape(encodeURIComponent(str)))\n    }\n  }\n\n  toFileUrl(path) {\n    let cached = this.memoizedFileURLs.get(path)\n    if (cached) return cached\n\n    if (pathToFileURL) {\n      let fileURL = pathToFileURL(path).toString()\n      this.memoizedFileURLs.set(path, fileURL)\n\n      return fileURL\n    } else {\n      throw new Error(\n        '`map.absolute` option is not available in this PostCSS build'\n      )\n    }\n  }\n\n  toUrl(path) {\n    let cached = this.memoizedURLs.get(path)\n    if (cached) return cached\n\n    if (sep === '\\\\') {\n      path = path.replace(/\\\\/g, '/')\n    }\n\n    let url = encodeURI(path).replace(/[#?]/g, encodeURIComponent)\n    this.memoizedURLs.set(path, url)\n\n    return url\n  }\n}\n\nmodule.exports = MapGenerator\n","'use strict'\n\nlet Container = require('./container')\nlet { my } = require('./symbols')\n\nclass Warning {\n  constructor(text, opts = {}) {\n    this.type = 'warning'\n    this.text = text\n\n    if (opts.node && opts.node.source) {\n      if (!opts.node[my]) {\n        // The node comes from another PostCSS copy in node_modules, so it does\n        // not have this copy’s methods. Container#normalize() rebuilds such\n        // nodes on insert, but a node passed straight to Result#warn() never\n        // goes through it.\n        Container.rebuild(opts.node)\n      }\n      let range = opts.node.rangeBy(opts)\n      this.line = range.start.line\n      this.column = range.start.column\n      this.endLine = range.end.line\n      this.endColumn = range.end.column\n    }\n\n    for (let opt in opts) this[opt] = opts[opt]\n  }\n\n  toString() {\n    if (this.node) {\n      return this.node.error(this.text, {\n        index: this.index,\n        plugin: this.plugin,\n        word: this.word\n      }).message\n    }\n\n    if (this.plugin) {\n      return this.plugin + ': ' + this.text\n    }\n\n    return this.text\n  }\n}\n\nmodule.exports = Warning\nWarning.default = Warning\n","/* eslint-disable no-console */\n'use strict'\n\nlet printed = {}\n\nmodule.exports = function warnOnce(message) {\n  if (printed[message]) return\n  printed[message] = true\n\n  if (typeof console !== 'undefined' && console.warn) {\n    console.warn(message)\n  }\n}\n","'use strict'\n\nconst compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","'use strict'\n\nconst compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","'use strict'\n\nconst eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n  switch (op) {\n    case '===':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a === b\n\n    case '!==':\n      if (typeof a === 'object') {\n        a = a.version\n      }\n      if (typeof b === 'object') {\n        b = b.version\n      }\n      return a !== b\n\n    case '':\n    case '=':\n    case '==':\n      return eq(a, b, loose)\n\n    case '!=':\n      return neq(a, b, loose)\n\n    case '>':\n      return gt(a, b, loose)\n\n    case '>=':\n      return gte(a, b, loose)\n\n    case '<':\n      return lt(a, b, loose)\n\n    case '<=':\n      return lte(a, b, loose)\n\n    default:\n      throw new TypeError(`Invalid operator: ${op}`)\n  }\n}\nmodule.exports = cmp\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsApplicationStateAlignValues {\n  Left = 'left',\n  Center = 'center',\n}\nexport type HdsApplicationStateAligns = `${HdsApplicationStateAlignValues}`;\n\nexport enum HdsApplicationStateTitleTagValues {\n  Div = 'div',\n  H1 = 'h1',\n  H2 = 'h2',\n  H3 = 'h3',\n  H4 = 'h4',\n  H5 = 'h5',\n  H6 = 'h6',\n}\n\nexport type HdsApplicationStateTitleTags =\n  `${HdsApplicationStateTitleTagValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsCodeBlockLanguageValues {\n  Bash = 'bash',\n  Go = 'go',\n  Hcl = 'hcl',\n  Json = 'json',\n  Log = 'log',\n  Ruby = 'ruby',\n  ShellSession = 'shell-session',\n  Yaml = 'yaml',\n}\n\nexport type HdsCodeBlockLanguages = `${HdsCodeBlockLanguageValues}`;\n\nexport enum HdsCodeBlockTitleTagValues {\n  P = 'p',\n  H1 = 'h1',\n  H2 = 'h2',\n  H3 = 'h3',\n  H4 = 'h4',\n  H5 = 'h5',\n  H6 = 'h6',\n}\n\nexport type HdsCodeBlockTitleTags = `${HdsCodeBlockTitleTagValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsFormTagValues {\n  Form = 'form',\n  Div = 'div',\n}\nexport type HdsFormTags = `${HdsFormTagValues}`;\n\nexport enum HdsFormHeaderTitleTagValues {\n  Div = 'div',\n  H1 = 'h1',\n  H2 = 'h2',\n  H3 = 'h3',\n  H4 = 'h4',\n  H5 = 'h5',\n  H6 = 'h6',\n}\nexport type HdsFormHeaderTitleTags = `${HdsFormHeaderTitleTagValues}`;\n\nexport default {\n  HdsFormTagValues,\n  HdsFormHeaderTitleTagValues,\n};\n","// These are filled with ranges (rangeFrom[i] up to but not including\n// rangeTo[i]) of code points that count as extending characters.\nlet rangeFrom = [], rangeTo = []\n\n;(() => {\n  // Compressed representation of the Grapheme_Cluster_Break=Extend\n  // information from\n  // http://www.unicode.org/Public/16.0.0/ucd/auxiliary/GraphemeBreakProperty.txt.\n  // Each pair of elements represents a range, as an offet from the\n  // previous range and a length. Numbers are in base-36, with the empty\n  // string being a shorthand for 1.\n  let numbers = \"lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o\".split(\",\").map(s => s ? parseInt(s, 36) : 1)\n  for (let i = 0, n = 0; i < numbers.length; i++)\n    (i % 2 ? rangeTo : rangeFrom).push(n = n + numbers[i])\n})()\n\nexport function isExtendingChar(code) {\n  if (code < 768) return false\n  for (let from = 0, to = rangeFrom.length;;) {\n    let mid = (from + to) >> 1\n    if (code < rangeFrom[mid]) to = mid\n    else if (code >= rangeTo[mid]) from = mid + 1\n    else return true\n    if (from == to) return false\n  }\n}\n\nfunction isRegionalIndicator(code) {\n  return code >= 0x1F1E6 && code <= 0x1F1FF\n}\n\nfunction check(code) {\n  for (let i = 0; i < rangeFrom.length; i++) {\n    if (rangeTo[i] > code) return rangeFrom[i] <= code\n  }\n  return false\n}\n\nconst ZWJ = 0x200d\n\nexport function findClusterBreak(str, pos, forward = true, includeExtending = true) {\n  return (forward ? nextClusterBreak : prevClusterBreak)(str, pos, includeExtending)\n}\n\nfunction nextClusterBreak(str, pos, includeExtending) {\n  if (pos == str.length) return pos\n  // If pos is in the middle of a surrogate pair, move to its start\n  if (pos && surrogateLow(str.charCodeAt(pos)) && surrogateHigh(str.charCodeAt(pos - 1))) pos--\n  let prev = codePointAt(str, pos)\n  pos += codePointSize(prev)\n  while (pos < str.length) {\n    let next = codePointAt(str, pos)\n    if (prev == ZWJ || next == ZWJ || includeExtending && isExtendingChar(next)) {\n      pos += codePointSize(next)\n      prev = next\n    } else if (isRegionalIndicator(next)) {\n      let countBefore = 0, i = pos - 2\n      while (i >= 0 && isRegionalIndicator(codePointAt(str, i))) { countBefore++; i -= 2 }\n      if (countBefore % 2 == 0) break\n      else pos += 2\n    } else {\n      break\n    }\n  }\n  return pos\n}\n\nfunction prevClusterBreak(str, pos, includeExtending) {\n  while (pos > 1) {\n    let found = nextClusterBreak(str, pos - 2, includeExtending)\n    if (found < pos) return found\n    pos--\n  }\n  return 0\n}\n\nfunction codePointAt(str, pos) {\n  let code0 = str.charCodeAt(pos)\n  if (!surrogateHigh(code0) || pos + 1 == str.length) return code0\n  let code1 = str.charCodeAt(pos + 1)\n  if (!surrogateLow(code1)) return code0\n  return ((code0 - 0xd800) << 10) + (code1 - 0xdc00) + 0x10000\n}\n\nfunction surrogateLow(ch) { return ch >= 0xDC00 && ch < 0xE000 }\nfunction surrogateHigh(ch) { return ch >= 0xD800 && ch < 0xDC00 }\nfunction codePointSize(code) { return code < 0x10000 ? 1 : 2 }\n","import { findClusterBreak as findClusterBreak$1 } from '@marijn/find-cluster-break';\n\n/**\nThe data structure for documents. @nonabstract\n*/\nclass Text {\n    /**\n    Get the line description around the given position.\n    */\n    lineAt(pos) {\n        if (pos < 0 || pos > this.length)\n            throw new RangeError(`Invalid position ${pos} in document of length ${this.length}`);\n        return this.lineInner(pos, false, 1, 0);\n    }\n    /**\n    Get the description for the given (1-based) line number.\n    */\n    line(n) {\n        if (n < 1 || n > this.lines)\n            throw new RangeError(`Invalid line number ${n} in ${this.lines}-line document`);\n        return this.lineInner(n, true, 1, 0);\n    }\n    /**\n    Replace a range of the text with the given content.\n    */\n    replace(from, to, text) {\n        [from, to] = clip(this, from, to);\n        let parts = [];\n        this.decompose(0, from, parts, 2 /* Open.To */);\n        if (text.length)\n            text.decompose(0, text.length, parts, 1 /* Open.From */ | 2 /* Open.To */);\n        this.decompose(to, this.length, parts, 1 /* Open.From */);\n        return TextNode.from(parts, this.length - (to - from) + text.length);\n    }\n    /**\n    Append another document to this one.\n    */\n    append(other) {\n        return this.replace(this.length, this.length, other);\n    }\n    /**\n    Retrieve the text between the given points.\n    */\n    slice(from, to = this.length) {\n        [from, to] = clip(this, from, to);\n        let parts = [];\n        this.decompose(from, to, parts, 0);\n        return TextNode.from(parts, to - from);\n    }\n    /**\n    Test whether this text is equal to another instance.\n    */\n    eq(other) {\n        if (other == this)\n            return true;\n        if (other.length != this.length || other.lines != this.lines)\n            return false;\n        let start = this.scanIdentical(other, 1), end = this.length - this.scanIdentical(other, -1);\n        let a = new RawTextCursor(this), b = new RawTextCursor(other);\n        for (let skip = start, pos = start;;) {\n            a.next(skip);\n            b.next(skip);\n            skip = 0;\n            if (a.lineBreak != b.lineBreak || a.done != b.done || a.value != b.value)\n                return false;\n            pos += a.value.length;\n            if (a.done || pos >= end)\n                return true;\n        }\n    }\n    /**\n    Iterate over the text. When `dir` is `-1`, iteration happens\n    from end to start. This will return lines and the breaks between\n    them as separate strings.\n    */\n    iter(dir = 1) { return new RawTextCursor(this, dir); }\n    /**\n    Iterate over a range of the text. When `from` > `to`, the\n    iterator will run in reverse.\n    */\n    iterRange(from, to = this.length) { return new PartialTextCursor(this, from, to); }\n    /**\n    Return a cursor that iterates over the given range of lines,\n    _without_ returning the line breaks between, and yielding empty\n    strings for empty lines.\n    \n    When `from` and `to` are given, they should be 1-based line numbers.\n    */\n    iterLines(from, to) {\n        let inner;\n        if (from == null) {\n            inner = this.iter();\n        }\n        else {\n            if (to == null)\n                to = this.lines + 1;\n            let start = this.line(from).from;\n            inner = this.iterRange(start, Math.max(start, to == this.lines + 1 ? this.length : to <= 1 ? 0 : this.line(to - 1).to));\n        }\n        return new LineCursor(inner);\n    }\n    /**\n    Return the document as a string, using newline characters to\n    separate lines.\n    */\n    toString() { return this.sliceString(0); }\n    /**\n    Convert the document to an array of lines (which can be\n    deserialized again via [`Text.of`](https://codemirror.net/6/docs/ref/#state.Text^of)).\n    */\n    toJSON() {\n        let lines = [];\n        this.flatten(lines);\n        return lines;\n    }\n    /**\n    @internal\n    */\n    constructor() { }\n    /**\n    Create a `Text` instance for the given array of lines.\n    */\n    static of(text) {\n        if (text.length == 0)\n            throw new RangeError(\"A document must have at least one line\");\n        if (text.length == 1 && !text[0])\n            return Text.empty;\n        return text.length <= 32 /* Tree.Branch */ ? new TextLeaf(text) : TextNode.from(TextLeaf.split(text, []));\n    }\n}\n// Leaves store an array of line strings. There are always line breaks\n// between these strings. Leaves are limited in size and have to be\n// contained in TextNode instances for bigger documents.\nclass TextLeaf extends Text {\n    constructor(text, length = textLength(text)) {\n        super();\n        this.text = text;\n        this.length = length;\n    }\n    get lines() { return this.text.length; }\n    get children() { return null; }\n    lineInner(target, isLine, line, offset) {\n        for (let i = 0;; i++) {\n            let string = this.text[i], end = offset + string.length;\n            if ((isLine ? line : end) >= target)\n                return new Line(offset, end, line, string);\n            offset = end + 1;\n            line++;\n        }\n    }\n    decompose(from, to, target, open) {\n        let text = from <= 0 && to >= this.length ? this\n            : new TextLeaf(sliceText(this.text, from, to), Math.min(to, this.length) - Math.max(0, from));\n        if (open & 1 /* Open.From */) {\n            let prev = target.pop();\n            let joined = appendText(text.text, prev.text.slice(), 0, text.length);\n            if (joined.length <= 32 /* Tree.Branch */) {\n                target.push(new TextLeaf(joined, prev.length + text.length));\n            }\n            else {\n                let mid = joined.length >> 1;\n                target.push(new TextLeaf(joined.slice(0, mid)), new TextLeaf(joined.slice(mid)));\n            }\n        }\n        else {\n            target.push(text);\n        }\n    }\n    replace(from, to, text) {\n        if (!(text instanceof TextLeaf))\n            return super.replace(from, to, text);\n        [from, to] = clip(this, from, to);\n        let lines = appendText(this.text, appendText(text.text, sliceText(this.text, 0, from)), to);\n        let newLen = this.length + text.length - (to - from);\n        if (lines.length <= 32 /* Tree.Branch */)\n            return new TextLeaf(lines, newLen);\n        return TextNode.from(TextLeaf.split(lines, []), newLen);\n    }\n    sliceString(from, to = this.length, lineSep = \"\\n\") {\n        [from, to] = clip(this, from, to);\n        let result = \"\";\n        for (let pos = 0, i = 0; pos <= to && i < this.text.length; i++) {\n            let line = this.text[i], end = pos + line.length;\n            if (pos > from && i)\n                result += lineSep;\n            if (from < end && to > pos)\n                result += line.slice(Math.max(0, from - pos), to - pos);\n            pos = end + 1;\n        }\n        return result;\n    }\n    flatten(target) {\n        for (let line of this.text)\n            target.push(line);\n    }\n    scanIdentical() { return 0; }\n    static split(text, target) {\n        let part = [], len = -1;\n        for (let line of text) {\n            part.push(line);\n            len += line.length + 1;\n            if (part.length == 32 /* Tree.Branch */) {\n                target.push(new TextLeaf(part, len));\n                part = [];\n                len = -1;\n            }\n        }\n        if (len > -1)\n            target.push(new TextLeaf(part, len));\n        return target;\n    }\n}\n// Nodes provide the tree structure of the `Text` type. They store a\n// number of other nodes or leaves, taking care to balance themselves\n// on changes. There are implied line breaks _between_ the children of\n// a node (but not before the first or after the last child).\nclass TextNode extends Text {\n    constructor(children, length) {\n        super();\n        this.children = children;\n        this.length = length;\n        this.lines = 0;\n        for (let child of children)\n            this.lines += child.lines;\n    }\n    lineInner(target, isLine, line, offset) {\n        for (let i = 0;; i++) {\n            let child = this.children[i], end = offset + child.length, endLine = line + child.lines - 1;\n            if ((isLine ? endLine : end) >= target)\n                return child.lineInner(target, isLine, line, offset);\n            offset = end + 1;\n            line = endLine + 1;\n        }\n    }\n    decompose(from, to, target, open) {\n        for (let i = 0, pos = 0; pos <= to && i < this.children.length; i++) {\n            let child = this.children[i], end = pos + child.length;\n            if (from <= end && to >= pos) {\n                let childOpen = open & ((pos <= from ? 1 /* Open.From */ : 0) | (end >= to ? 2 /* Open.To */ : 0));\n                if (pos >= from && end <= to && !childOpen)\n                    target.push(child);\n                else\n                    child.decompose(from - pos, to - pos, target, childOpen);\n            }\n            pos = end + 1;\n        }\n    }\n    replace(from, to, text) {\n        [from, to] = clip(this, from, to);\n        if (text.lines < this.lines)\n            for (let i = 0, pos = 0; i < this.children.length; i++) {\n                let child = this.children[i], end = pos + child.length;\n                // Fast path: if the change only affects one child and the\n                // child's size remains in the acceptable range, only update\n                // that child\n                if (from >= pos && to <= end) {\n                    let updated = child.replace(from - pos, to - pos, text);\n                    let totalLines = this.lines - child.lines + updated.lines;\n                    if (updated.lines < (totalLines >> (5 /* Tree.BranchShift */ - 1)) &&\n                        updated.lines > (totalLines >> (5 /* Tree.BranchShift */ + 1))) {\n                        let copy = this.children.slice();\n                        copy[i] = updated;\n                        return new TextNode(copy, this.length - (to - from) + text.length);\n                    }\n                    return super.replace(pos, end, updated);\n                }\n                pos = end + 1;\n            }\n        return super.replace(from, to, text);\n    }\n    sliceString(from, to = this.length, lineSep = \"\\n\") {\n        [from, to] = clip(this, from, to);\n        let result = \"\";\n        for (let i = 0, pos = 0; i < this.children.length && pos <= to; i++) {\n            let child = this.children[i], end = pos + child.length;\n            if (pos > from && i)\n                result += lineSep;\n            if (from < end && to > pos)\n                result += child.sliceString(from - pos, to - pos, lineSep);\n            pos = end + 1;\n        }\n        return result;\n    }\n    flatten(target) {\n        for (let child of this.children)\n            child.flatten(target);\n    }\n    scanIdentical(other, dir) {\n        if (!(other instanceof TextNode))\n            return 0;\n        let length = 0;\n        let [iA, iB, eA, eB] = dir > 0 ? [0, 0, this.children.length, other.children.length]\n            : [this.children.length - 1, other.children.length - 1, -1, -1];\n        for (;; iA += dir, iB += dir) {\n            if (iA == eA || iB == eB)\n                return length;\n            let chA = this.children[iA], chB = other.children[iB];\n            if (chA != chB)\n                return length + chA.scanIdentical(chB, dir);\n            length += chA.length + 1;\n        }\n    }\n    static from(children, length = children.reduce((l, ch) => l + ch.length + 1, -1)) {\n        let lines = 0;\n        for (let ch of children)\n            lines += ch.lines;\n        if (lines < 32 /* Tree.Branch */) {\n            let flat = [];\n            for (let ch of children)\n                ch.flatten(flat);\n            return new TextLeaf(flat, length);\n        }\n        let chunk = Math.max(32 /* Tree.Branch */, lines >> 5 /* Tree.BranchShift */), maxChunk = chunk << 1, minChunk = chunk >> 1;\n        let chunked = [], currentLines = 0, currentLen = -1, currentChunk = [];\n        function add(child) {\n            let last;\n            if (child.lines > maxChunk && child instanceof TextNode) {\n                for (let node of child.children)\n                    add(node);\n            }\n            else if (child.lines > minChunk && (currentLines > minChunk || !currentLines)) {\n                flush();\n                chunked.push(child);\n            }\n            else if (child instanceof TextLeaf && currentLines &&\n                (last = currentChunk[currentChunk.length - 1]) instanceof TextLeaf &&\n                child.lines + last.lines <= 32 /* Tree.Branch */) {\n                currentLines += child.lines;\n                currentLen += child.length + 1;\n                currentChunk[currentChunk.length - 1] = new TextLeaf(last.text.concat(child.text), last.length + 1 + child.length);\n            }\n            else {\n                if (currentLines + child.lines > chunk)\n                    flush();\n                currentLines += child.lines;\n                currentLen += child.length + 1;\n                currentChunk.push(child);\n            }\n        }\n        function flush() {\n            if (currentLines == 0)\n                return;\n            chunked.push(currentChunk.length == 1 ? currentChunk[0] : TextNode.from(currentChunk, currentLen));\n            currentLen = -1;\n            currentLines = currentChunk.length = 0;\n        }\n        for (let child of children)\n            add(child);\n        flush();\n        return chunked.length == 1 ? chunked[0] : new TextNode(chunked, length);\n    }\n}\nText.empty = /*@__PURE__*/new TextLeaf([\"\"], 0);\nfunction textLength(text) {\n    let length = -1;\n    for (let line of text)\n        length += line.length + 1;\n    return length;\n}\nfunction appendText(text, target, from = 0, to = 1e9) {\n    for (let pos = 0, i = 0, first = true; i < text.length && pos <= to; i++) {\n        let line = text[i], end = pos + line.length;\n        if (end >= from) {\n            if (end > to)\n                line = line.slice(0, to - pos);\n            if (pos < from)\n                line = line.slice(from - pos);\n            if (first) {\n                target[target.length - 1] += line;\n                first = false;\n            }\n            else\n                target.push(line);\n        }\n        pos = end + 1;\n    }\n    return target;\n}\nfunction sliceText(text, from, to) {\n    return appendText(text, [\"\"], from, to);\n}\nclass RawTextCursor {\n    constructor(text, dir = 1) {\n        this.dir = dir;\n        this.done = false;\n        this.lineBreak = false;\n        this.value = \"\";\n        this.nodes = [text];\n        this.offsets = [dir > 0 ? 1 : (text instanceof TextLeaf ? text.text.length : text.children.length) << 1];\n    }\n    nextInner(skip, dir) {\n        this.done = this.lineBreak = false;\n        for (;;) {\n            let last = this.nodes.length - 1;\n            let top = this.nodes[last], offsetValue = this.offsets[last], offset = offsetValue >> 1;\n            let size = top instanceof TextLeaf ? top.text.length : top.children.length;\n            if (offset == (dir > 0 ? size : 0)) {\n                if (last == 0) {\n                    this.done = true;\n                    this.value = \"\";\n                    return this;\n                }\n                if (dir > 0)\n                    this.offsets[last - 1]++;\n                this.nodes.pop();\n                this.offsets.pop();\n            }\n            else if ((offsetValue & 1) == (dir > 0 ? 0 : 1)) {\n                this.offsets[last] += dir;\n                if (skip == 0) {\n                    this.lineBreak = true;\n                    this.value = \"\\n\";\n                    return this;\n                }\n                skip--;\n            }\n            else if (top instanceof TextLeaf) {\n                // Move to the next string\n                let next = top.text[offset + (dir < 0 ? -1 : 0)];\n                this.offsets[last] += dir;\n                if (next.length > Math.max(0, skip)) {\n                    this.value = skip == 0 ? next : dir > 0 ? next.slice(skip) : next.slice(0, next.length - skip);\n                    return this;\n                }\n                skip -= next.length;\n            }\n            else {\n                let next = top.children[offset + (dir < 0 ? -1 : 0)];\n                if (skip > next.length) {\n                    skip -= next.length;\n                    this.offsets[last] += dir;\n                }\n                else {\n                    if (dir < 0)\n                        this.offsets[last]--;\n                    this.nodes.push(next);\n                    this.offsets.push(dir > 0 ? 1 : (next instanceof TextLeaf ? next.text.length : next.children.length) << 1);\n                }\n            }\n        }\n    }\n    next(skip = 0) {\n        if (skip < 0) {\n            this.nextInner(-skip, (-this.dir));\n            skip = this.value.length;\n        }\n        return this.nextInner(skip, this.dir);\n    }\n}\nclass PartialTextCursor {\n    constructor(text, start, end) {\n        this.value = \"\";\n        this.done = false;\n        this.cursor = new RawTextCursor(text, start > end ? -1 : 1);\n        this.pos = start > end ? text.length : 0;\n        this.from = Math.min(start, end);\n        this.to = Math.max(start, end);\n    }\n    nextInner(skip, dir) {\n        if (dir < 0 ? this.pos <= this.from : this.pos >= this.to) {\n            this.value = \"\";\n            this.done = true;\n            return this;\n        }\n        skip += Math.max(0, dir < 0 ? this.pos - this.to : this.from - this.pos);\n        let limit = dir < 0 ? this.pos - this.from : this.to - this.pos;\n        if (skip > limit)\n            skip = limit;\n        limit -= skip;\n        let { value } = this.cursor.next(skip);\n        this.pos += (value.length + skip) * dir;\n        this.value = value.length <= limit ? value : dir < 0 ? value.slice(value.length - limit) : value.slice(0, limit);\n        this.done = !this.value;\n        return this;\n    }\n    next(skip = 0) {\n        if (skip < 0)\n            skip = Math.max(skip, this.from - this.pos);\n        else if (skip > 0)\n            skip = Math.min(skip, this.to - this.pos);\n        return this.nextInner(skip, this.cursor.dir);\n    }\n    get lineBreak() { return this.cursor.lineBreak && this.value != \"\"; }\n}\nclass LineCursor {\n    constructor(inner) {\n        this.inner = inner;\n        this.afterBreak = true;\n        this.value = \"\";\n        this.done = false;\n    }\n    next(skip = 0) {\n        let { done, lineBreak, value } = this.inner.next(skip);\n        if (done && this.afterBreak) {\n            this.value = \"\";\n            this.afterBreak = false;\n        }\n        else if (done) {\n            this.done = true;\n            this.value = \"\";\n        }\n        else if (lineBreak) {\n            if (this.afterBreak) {\n                this.value = \"\";\n            }\n            else {\n                this.afterBreak = true;\n                this.next();\n            }\n        }\n        else {\n            this.value = value;\n            this.afterBreak = false;\n        }\n        return this;\n    }\n    get lineBreak() { return false; }\n}\nif (typeof Symbol != \"undefined\") {\n    Text.prototype[Symbol.iterator] = function () { return this.iter(); };\n    RawTextCursor.prototype[Symbol.iterator] = PartialTextCursor.prototype[Symbol.iterator] =\n        LineCursor.prototype[Symbol.iterator] = function () { return this; };\n}\n/**\nThis type describes a line in the document. It is created\non-demand when lines are [queried](https://codemirror.net/6/docs/ref/#state.Text.lineAt).\n*/\nclass Line {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The position of the start of the line.\n    */\n    from, \n    /**\n    The position at the end of the line (_before_ the line break,\n    or at the end of document for the last line).\n    */\n    to, \n    /**\n    This line's line number (1-based).\n    */\n    number, \n    /**\n    The line's content.\n    */\n    text) {\n        this.from = from;\n        this.to = to;\n        this.number = number;\n        this.text = text;\n    }\n    /**\n    The length of the line (not including any line break after it).\n    */\n    get length() { return this.to - this.from; }\n}\nfunction clip(text, from, to) {\n    from = Math.max(0, Math.min(text.length, from));\n    return [from, Math.max(from, Math.min(text.length, to))];\n}\n\n/**\nReturns a next grapheme cluster break _after_ (not equal to)\n`pos`, if `forward` is true, or before otherwise. Returns `pos`\nitself if no further cluster break is available in the string.\nMoves across surrogate pairs, extending characters (when\n`includeExtending` is true), characters joined with zero-width\njoiners, and flag emoji.\n*/\nfunction findClusterBreak(str, pos, forward = true, includeExtending = true) {\n    return findClusterBreak$1(str, pos, forward, includeExtending);\n}\nfunction surrogateLow(ch) { return ch >= 0xDC00 && ch < 0xE000; }\nfunction surrogateHigh(ch) { return ch >= 0xD800 && ch < 0xDC00; }\n/**\nFind the code point at the given position in a string (like the\n[`codePointAt`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/codePointAt)\nstring method).\n*/\nfunction codePointAt(str, pos) {\n    let code0 = str.charCodeAt(pos);\n    if (!surrogateHigh(code0) || pos + 1 == str.length)\n        return code0;\n    let code1 = str.charCodeAt(pos + 1);\n    if (!surrogateLow(code1))\n        return code0;\n    return ((code0 - 0xd800) << 10) + (code1 - 0xdc00) + 0x10000;\n}\n/**\nGiven a Unicode codepoint, return the JavaScript string that\nrespresents it (like\n[`String.fromCodePoint`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint)).\n*/\nfunction fromCodePoint(code) {\n    if (code <= 0xffff)\n        return String.fromCharCode(code);\n    code -= 0x10000;\n    return String.fromCharCode((code >> 10) + 0xd800, (code & 1023) + 0xdc00);\n}\n/**\nThe amount of positions a character takes up in a JavaScript string.\n*/\nfunction codePointSize(code) { return code < 0x10000 ? 1 : 2; }\n\nconst DefaultSplit = /\\r\\n?|\\n/;\n/**\nDistinguishes different ways in which positions can be mapped.\n*/\nvar MapMode = /*@__PURE__*/(function (MapMode) {\n    /**\n    Map a position to a valid new position, even when its context\n    was deleted.\n    */\n    MapMode[MapMode[\"Simple\"] = 0] = \"Simple\";\n    /**\n    Return null if deletion happens across the position.\n    */\n    MapMode[MapMode[\"TrackDel\"] = 1] = \"TrackDel\";\n    /**\n    Return null if the character _before_ the position is deleted.\n    */\n    MapMode[MapMode[\"TrackBefore\"] = 2] = \"TrackBefore\";\n    /**\n    Return null if the character _after_ the position is deleted.\n    */\n    MapMode[MapMode[\"TrackAfter\"] = 3] = \"TrackAfter\";\nreturn MapMode})(MapMode || (MapMode = {}));\n/**\nA change description is a variant of [change set](https://codemirror.net/6/docs/ref/#state.ChangeSet)\nthat doesn't store the inserted text. As such, it can't be\napplied, but is cheaper to store and manipulate.\n*/\nclass ChangeDesc {\n    // Sections are encoded as pairs of integers. The first is the\n    // length in the current document, and the second is -1 for\n    // unaffected sections, and the length of the replacement content\n    // otherwise. So an insertion would be (0, n>0), a deletion (n>0,\n    // 0), and a replacement two positive numbers.\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    @internal\n    */\n    sections) {\n        this.sections = sections;\n    }\n    /**\n    The length of the document before the change.\n    */\n    get length() {\n        let result = 0;\n        for (let i = 0; i < this.sections.length; i += 2)\n            result += this.sections[i];\n        return result;\n    }\n    /**\n    The length of the document after the change.\n    */\n    get newLength() {\n        let result = 0;\n        for (let i = 0; i < this.sections.length; i += 2) {\n            let ins = this.sections[i + 1];\n            result += ins < 0 ? this.sections[i] : ins;\n        }\n        return result;\n    }\n    /**\n    False when there are actual changes in this set.\n    */\n    get empty() { return this.sections.length == 0 || this.sections.length == 2 && this.sections[1] < 0; }\n    /**\n    Iterate over the unchanged parts left by these changes. `posA`\n    provides the position of the range in the old document, `posB`\n    the new position in the changed document.\n    */\n    iterGaps(f) {\n        for (let i = 0, posA = 0, posB = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++];\n            if (ins < 0) {\n                f(posA, posB, len);\n                posB += len;\n            }\n            else {\n                posB += ins;\n            }\n            posA += len;\n        }\n    }\n    /**\n    Iterate over the ranges changed by these changes. (See\n    [`ChangeSet.iterChanges`](https://codemirror.net/6/docs/ref/#state.ChangeSet.iterChanges) for a\n    variant that also provides you with the inserted text.)\n    `fromA`/`toA` provides the extent of the change in the starting\n    document, `fromB`/`toB` the extent of the replacement in the\n    changed document.\n    \n    When `individual` is true, adjacent changes (which are kept\n    separate for [position mapping](https://codemirror.net/6/docs/ref/#state.ChangeDesc.mapPos)) are\n    reported separately.\n    */\n    iterChangedRanges(f, individual = false) {\n        iterChanges(this, f, individual);\n    }\n    /**\n    Get a description of the inverted form of these changes.\n    */\n    get invertedDesc() {\n        let sections = [];\n        for (let i = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++];\n            if (ins < 0)\n                sections.push(len, ins);\n            else\n                sections.push(ins, len);\n        }\n        return new ChangeDesc(sections);\n    }\n    /**\n    Compute the combined effect of applying another set of changes\n    after this one. The length of the document after this set should\n    match the length before `other`.\n    */\n    composeDesc(other) { return this.empty ? other : other.empty ? this : composeSets(this, other); }\n    /**\n    Map this description, which should start with the same document\n    as `other`, over another set of changes, so that it can be\n    applied after it. When `before` is true, map as if the changes\n    in `this` happened before the ones in `other`.\n    */\n    mapDesc(other, before = false) { return other.empty ? this : mapSet(this, other, before); }\n    mapPos(pos, assoc = -1, mode = MapMode.Simple) {\n        let posA = 0, posB = 0;\n        for (let i = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++], endA = posA + len;\n            if (ins < 0) {\n                if (endA > pos)\n                    return posB + (pos - posA);\n                posB += len;\n            }\n            else {\n                if (mode != MapMode.Simple && endA >= pos &&\n                    (mode == MapMode.TrackDel && posA < pos && endA > pos ||\n                        mode == MapMode.TrackBefore && posA < pos ||\n                        mode == MapMode.TrackAfter && endA > pos))\n                    return null;\n                if (endA > pos || endA == pos && assoc < 0 && !len)\n                    return pos == posA || assoc < 0 ? posB : posB + ins;\n                posB += ins;\n            }\n            posA = endA;\n        }\n        if (pos > posA)\n            throw new RangeError(`Position ${pos} is out of range for changeset of length ${posA}`);\n        return posB;\n    }\n    /**\n    Check whether these changes touch a given range. When one of the\n    changes entirely covers the range, the string `\"cover\"` is\n    returned.\n    */\n    touchesRange(from, to = from) {\n        for (let i = 0, pos = 0; i < this.sections.length && pos <= to;) {\n            let len = this.sections[i++], ins = this.sections[i++], end = pos + len;\n            if (ins >= 0 && pos <= to && end >= from)\n                return pos < from && end > to ? \"cover\" : true;\n            pos = end;\n        }\n        return false;\n    }\n    /**\n    @internal\n    */\n    toString() {\n        let result = \"\";\n        for (let i = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++];\n            result += (result ? \" \" : \"\") + len + (ins >= 0 ? \":\" + ins : \"\");\n        }\n        return result;\n    }\n    /**\n    Serialize this change desc to a JSON-representable value.\n    */\n    toJSON() { return this.sections; }\n    /**\n    Create a change desc from its JSON representation (as produced\n    by [`toJSON`](https://codemirror.net/6/docs/ref/#state.ChangeDesc.toJSON).\n    */\n    static fromJSON(json) {\n        if (!Array.isArray(json) || json.length % 2 || json.some(a => typeof a != \"number\"))\n            throw new RangeError(\"Invalid JSON representation of ChangeDesc\");\n        return new ChangeDesc(json);\n    }\n    /**\n    @internal\n    */\n    static create(sections) { return new ChangeDesc(sections); }\n}\n/**\nA change set represents a group of modifications to a document. It\nstores the document length, and can only be applied to documents\nwith exactly that length.\n*/\nclass ChangeSet extends ChangeDesc {\n    constructor(sections, \n    /**\n    @internal\n    */\n    inserted) {\n        super(sections);\n        this.inserted = inserted;\n    }\n    /**\n    Apply the changes to a document, returning the modified\n    document.\n    */\n    apply(doc) {\n        if (this.length != doc.length)\n            throw new RangeError(\"Applying change set to a document with the wrong length\");\n        iterChanges(this, (fromA, toA, fromB, _toB, text) => doc = doc.replace(fromB, fromB + (toA - fromA), text), false);\n        return doc;\n    }\n    mapDesc(other, before = false) { return mapSet(this, other, before, true); }\n    /**\n    Given the document as it existed _before_ the changes, return a\n    change set that represents the inverse of this set, which could\n    be used to go from the document created by the changes back to\n    the document as it existed before the changes.\n    */\n    invert(doc) {\n        let sections = this.sections.slice(), inserted = [];\n        for (let i = 0, pos = 0; i < sections.length; i += 2) {\n            let len = sections[i], ins = sections[i + 1];\n            if (ins >= 0) {\n                sections[i] = ins;\n                sections[i + 1] = len;\n                let index = i >> 1;\n                while (inserted.length < index)\n                    inserted.push(Text.empty);\n                inserted.push(len ? doc.slice(pos, pos + len) : Text.empty);\n            }\n            pos += len;\n        }\n        return new ChangeSet(sections, inserted);\n    }\n    /**\n    Combine two subsequent change sets into a single set. `other`\n    must start in the document produced by `this`. If `this` goes\n    `docA` → `docB` and `other` represents `docB` → `docC`, the\n    returned value will represent the change `docA` → `docC`.\n    */\n    compose(other) { return this.empty ? other : other.empty ? this : composeSets(this, other, true); }\n    /**\n    Given another change set starting in the same document, maps this\n    change set over the other, producing a new change set that can be\n    applied to the document produced by applying `other`. When\n    `before` is `true`, order changes as if `this` comes before\n    `other`, otherwise (the default) treat `other` as coming first.\n    \n    Given two changes `A` and `B`, `A.compose(B.map(A))` and\n    `B.compose(A.map(B, true))` will produce the same document. This\n    provides a basic form of [operational\n    transformation](https://en.wikipedia.org/wiki/Operational_transformation),\n    and can be used for collaborative editing.\n    */\n    map(other, before = false) { return other.empty ? this : mapSet(this, other, before, true); }\n    /**\n    Iterate over the changed ranges in the document, calling `f` for\n    each, with the range in the original document (`fromA`-`toA`)\n    and the range that replaces it in the new document\n    (`fromB`-`toB`).\n    \n    When `individual` is true, adjacent changes are reported\n    separately.\n    */\n    iterChanges(f, individual = false) {\n        iterChanges(this, f, individual);\n    }\n    /**\n    Get a [change description](https://codemirror.net/6/docs/ref/#state.ChangeDesc) for this change\n    set.\n    */\n    get desc() { return ChangeDesc.create(this.sections); }\n    /**\n    @internal\n    */\n    filter(ranges) {\n        let resultSections = [], resultInserted = [], filteredSections = [];\n        let iter = new SectionIter(this);\n        done: for (let i = 0, pos = 0;;) {\n            let next = i == ranges.length ? 1e9 : ranges[i++];\n            while (pos < next || pos == next && iter.len == 0) {\n                if (iter.done)\n                    break done;\n                let len = Math.min(iter.len, next - pos);\n                addSection(filteredSections, len, -1);\n                let ins = iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0;\n                addSection(resultSections, len, ins);\n                if (ins > 0)\n                    addInsert(resultInserted, resultSections, iter.text);\n                iter.forward(len);\n                pos += len;\n            }\n            let end = ranges[i++];\n            while (pos < end) {\n                if (iter.done)\n                    break done;\n                let len = Math.min(iter.len, end - pos);\n                addSection(resultSections, len, -1);\n                addSection(filteredSections, len, iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0);\n                iter.forward(len);\n                pos += len;\n            }\n        }\n        return { changes: new ChangeSet(resultSections, resultInserted),\n            filtered: ChangeDesc.create(filteredSections) };\n    }\n    /**\n    Serialize this change set to a JSON-representable value.\n    */\n    toJSON() {\n        let parts = [];\n        for (let i = 0; i < this.sections.length; i += 2) {\n            let len = this.sections[i], ins = this.sections[i + 1];\n            if (ins < 0)\n                parts.push(len);\n            else if (ins == 0)\n                parts.push([len]);\n            else\n                parts.push([len].concat(this.inserted[i >> 1].toJSON()));\n        }\n        return parts;\n    }\n    /**\n    Create a change set for the given changes, for a document of the\n    given length, using `lineSep` as line separator.\n    */\n    static of(changes, length, lineSep) {\n        let sections = [], inserted = [], pos = 0;\n        let total = null;\n        function flush(force = false) {\n            if (!force && !sections.length)\n                return;\n            if (pos < length)\n                addSection(sections, length - pos, -1);\n            let set = new ChangeSet(sections, inserted);\n            total = total ? total.compose(set.map(total)) : set;\n            sections = [];\n            inserted = [];\n            pos = 0;\n        }\n        function process(spec) {\n            if (Array.isArray(spec)) {\n                for (let sub of spec)\n                    process(sub);\n            }\n            else if (spec instanceof ChangeSet) {\n                if (spec.length != length)\n                    throw new RangeError(`Mismatched change set length (got ${spec.length}, expected ${length})`);\n                flush();\n                total = total ? total.compose(spec.map(total)) : spec;\n            }\n            else {\n                let { from, to = from, insert } = spec;\n                if (from > to || from < 0 || to > length)\n                    throw new RangeError(`Invalid change range ${from} to ${to} (in doc of length ${length})`);\n                let insText = !insert ? Text.empty : typeof insert == \"string\" ? Text.of(insert.split(lineSep || DefaultSplit)) : insert;\n                let insLen = insText.length;\n                if (from == to && insLen == 0)\n                    return;\n                if (from < pos)\n                    flush();\n                if (from > pos)\n                    addSection(sections, from - pos, -1);\n                addSection(sections, to - from, insLen);\n                addInsert(inserted, sections, insText);\n                pos = to;\n            }\n        }\n        process(changes);\n        flush(!total);\n        return total;\n    }\n    /**\n    Create an empty changeset of the given length.\n    */\n    static empty(length) {\n        return new ChangeSet(length ? [length, -1] : [], []);\n    }\n    /**\n    Create a changeset from its JSON representation (as produced by\n    [`toJSON`](https://codemirror.net/6/docs/ref/#state.ChangeSet.toJSON).\n    */\n    static fromJSON(json) {\n        if (!Array.isArray(json))\n            throw new RangeError(\"Invalid JSON representation of ChangeSet\");\n        let sections = [], inserted = [];\n        for (let i = 0; i < json.length; i++) {\n            let part = json[i];\n            if (typeof part == \"number\") {\n                sections.push(part, -1);\n            }\n            else if (!Array.isArray(part) || typeof part[0] != \"number\" || part.some((e, i) => i && typeof e != \"string\")) {\n                throw new RangeError(\"Invalid JSON representation of ChangeSet\");\n            }\n            else if (part.length == 1) {\n                sections.push(part[0], 0);\n            }\n            else {\n                while (inserted.length < i)\n                    inserted.push(Text.empty);\n                inserted[i] = Text.of(part.slice(1));\n                sections.push(part[0], inserted[i].length);\n            }\n        }\n        return new ChangeSet(sections, inserted);\n    }\n    /**\n    @internal\n    */\n    static createSet(sections, inserted) {\n        return new ChangeSet(sections, inserted);\n    }\n}\nfunction addSection(sections, len, ins, forceJoin = false) {\n    if (len == 0 && ins <= 0)\n        return;\n    let last = sections.length - 2;\n    if (last >= 0 && ins <= 0 && ins == sections[last + 1])\n        sections[last] += len;\n    else if (last >= 0 && len == 0 && sections[last] == 0)\n        sections[last + 1] += ins;\n    else if (forceJoin) {\n        sections[last] += len;\n        sections[last + 1] += ins;\n    }\n    else\n        sections.push(len, ins);\n}\nfunction addInsert(values, sections, value) {\n    if (value.length == 0)\n        return;\n    let index = (sections.length - 2) >> 1;\n    if (index < values.length) {\n        values[values.length - 1] = values[values.length - 1].append(value);\n    }\n    else {\n        while (values.length < index)\n            values.push(Text.empty);\n        values.push(value);\n    }\n}\nfunction iterChanges(desc, f, individual) {\n    let inserted = desc.inserted;\n    for (let posA = 0, posB = 0, i = 0; i < desc.sections.length;) {\n        let len = desc.sections[i++], ins = desc.sections[i++];\n        if (ins < 0) {\n            posA += len;\n            posB += len;\n        }\n        else {\n            let endA = posA, endB = posB, text = Text.empty;\n            for (;;) {\n                endA += len;\n                endB += ins;\n                if (ins && inserted)\n                    text = text.append(inserted[(i - 2) >> 1]);\n                if (individual || i == desc.sections.length || desc.sections[i + 1] < 0)\n                    break;\n                len = desc.sections[i++];\n                ins = desc.sections[i++];\n            }\n            f(posA, endA, posB, endB, text);\n            posA = endA;\n            posB = endB;\n        }\n    }\n}\nfunction mapSet(setA, setB, before, mkSet = false) {\n    // Produce a copy of setA that applies to the document after setB\n    // has been applied (assuming both start at the same document).\n    let sections = [], insert = mkSet ? [] : null;\n    let a = new SectionIter(setA), b = new SectionIter(setB);\n    // Iterate over both sets in parallel. inserted tracks, for changes\n    // in A that have to be processed piece-by-piece, whether their\n    // content has been inserted already, and refers to the section\n    // index.\n    for (let inserted = -1;;) {\n        if (a.done && b.len || b.done && a.len) {\n            throw new Error(\"Mismatched change set lengths\");\n        }\n        else if (a.ins == -1 && b.ins == -1) {\n            // Move across ranges skipped by both sets.\n            let len = Math.min(a.len, b.len);\n            addSection(sections, len, -1);\n            a.forward(len);\n            b.forward(len);\n        }\n        else if (b.ins >= 0 && (a.ins < 0 || inserted == a.i || a.off == 0 && (b.len < a.len || b.len == a.len && !before))) {\n            // If there's a change in B that comes before the next change in\n            // A (ordered by start pos, then len, then before flag), skip\n            // that (and process any changes in A it covers).\n            let len = b.len;\n            addSection(sections, b.ins, -1);\n            while (len) {\n                let piece = Math.min(a.len, len);\n                if (a.ins >= 0 && inserted < a.i && a.len <= piece) {\n                    addSection(sections, 0, a.ins);\n                    if (insert)\n                        addInsert(insert, sections, a.text);\n                    inserted = a.i;\n                }\n                a.forward(piece);\n                len -= piece;\n            }\n            b.next();\n        }\n        else if (a.ins >= 0) {\n            // Process the part of a change in A up to the start of the next\n            // non-deletion change in B (if overlapping).\n            let len = 0, left = a.len;\n            while (left) {\n                if (b.ins == -1) {\n                    let piece = Math.min(left, b.len);\n                    len += piece;\n                    left -= piece;\n                    b.forward(piece);\n                }\n                else if (b.ins == 0 && b.len < left) {\n                    left -= b.len;\n                    b.next();\n                }\n                else {\n                    break;\n                }\n            }\n            addSection(sections, len, inserted < a.i ? a.ins : 0);\n            if (insert && inserted < a.i)\n                addInsert(insert, sections, a.text);\n            inserted = a.i;\n            a.forward(a.len - left);\n        }\n        else if (a.done && b.done) {\n            return insert ? ChangeSet.createSet(sections, insert) : ChangeDesc.create(sections);\n        }\n        else {\n            throw new Error(\"Mismatched change set lengths\");\n        }\n    }\n}\nfunction composeSets(setA, setB, mkSet = false) {\n    let sections = [];\n    let insert = mkSet ? [] : null;\n    let a = new SectionIter(setA), b = new SectionIter(setB);\n    for (let open = false;;) {\n        if (a.done && b.done) {\n            return insert ? ChangeSet.createSet(sections, insert) : ChangeDesc.create(sections);\n        }\n        else if (a.ins == 0) { // Deletion in A\n            addSection(sections, a.len, 0, open);\n            a.next();\n        }\n        else if (b.len == 0 && !b.done) { // Insertion in B\n            addSection(sections, 0, b.ins, open);\n            if (insert)\n                addInsert(insert, sections, b.text);\n            b.next();\n        }\n        else if (a.done || b.done) {\n            throw new Error(\"Mismatched change set lengths\");\n        }\n        else {\n            let len = Math.min(a.len2, b.len), sectionLen = sections.length;\n            if (a.ins == -1) {\n                let insB = b.ins == -1 ? -1 : b.off ? 0 : b.ins;\n                addSection(sections, len, insB, open);\n                if (insert && insB)\n                    addInsert(insert, sections, b.text);\n            }\n            else if (b.ins == -1) {\n                addSection(sections, a.off ? 0 : a.len, len, open);\n                if (insert)\n                    addInsert(insert, sections, a.textBit(len));\n            }\n            else {\n                addSection(sections, a.off ? 0 : a.len, b.off ? 0 : b.ins, open);\n                if (insert && !b.off)\n                    addInsert(insert, sections, b.text);\n            }\n            open = (a.ins > len || b.ins >= 0 && b.len > len) && (open || sections.length > sectionLen);\n            a.forward2(len);\n            b.forward(len);\n        }\n    }\n}\nclass SectionIter {\n    constructor(set) {\n        this.set = set;\n        this.i = 0;\n        this.next();\n    }\n    next() {\n        let { sections } = this.set;\n        if (this.i < sections.length) {\n            this.len = sections[this.i++];\n            this.ins = sections[this.i++];\n        }\n        else {\n            this.len = 0;\n            this.ins = -2;\n        }\n        this.off = 0;\n    }\n    get done() { return this.ins == -2; }\n    get len2() { return this.ins < 0 ? this.len : this.ins; }\n    get text() {\n        let { inserted } = this.set, index = (this.i - 2) >> 1;\n        return index >= inserted.length ? Text.empty : inserted[index];\n    }\n    textBit(len) {\n        let { inserted } = this.set, index = (this.i - 2) >> 1;\n        return index >= inserted.length && !len ? Text.empty\n            : inserted[index].slice(this.off, len == null ? undefined : this.off + len);\n    }\n    forward(len) {\n        if (len == this.len)\n            this.next();\n        else {\n            this.len -= len;\n            this.off += len;\n        }\n    }\n    forward2(len) {\n        if (this.ins == -1)\n            this.forward(len);\n        else if (len == this.ins)\n            this.next();\n        else {\n            this.ins -= len;\n            this.off += len;\n        }\n    }\n}\n\n/**\nA single selection range. When\n[`allowMultipleSelections`](https://codemirror.net/6/docs/ref/#state.EditorState^allowMultipleSelections)\nis enabled, a [selection](https://codemirror.net/6/docs/ref/#state.EditorSelection) may hold\nmultiple ranges. By default, selections hold exactly one range.\n*/\nclass SelectionRange {\n    constructor(\n    /**\n    The lower boundary of the range.\n    */\n    from, \n    /**\n    The upper boundary of the range.\n    */\n    to, flags, \n    /**\n    The goal column (stored vertical offset) associated with a\n    cursor. This is used to preserve the vertical position when\n    [moving](https://codemirror.net/6/docs/ref/#view.EditorView.moveVertically) across\n    lines of different length.\n    */\n    goalColumn) {\n        this.from = from;\n        this.to = to;\n        this.flags = flags;\n        this.goalColumn = goalColumn;\n    }\n    /**\n    The anchor of the range—the side that doesn't move when you\n    extend it.\n    */\n    get anchor() { return this.flags & 32 /* RangeFlag.Inverted */ ? this.to : this.from; }\n    /**\n    The head of the range, which is moved when the range is\n    [extended](https://codemirror.net/6/docs/ref/#state.SelectionRange.extend).\n    */\n    get head() { return this.flags & 32 /* RangeFlag.Inverted */ ? this.from : this.to; }\n    /**\n    True when `anchor` and `head` are at the same position.\n    */\n    get empty() { return this.from == this.to; }\n    /**\n    If this is a cursor that is explicitly associated with the\n    character on one of its sides, this returns the side. -1 means\n    the character before its position, 1 the character after, and 0\n    means no association.\n    */\n    get assoc() { return this.flags & 8 /* RangeFlag.AssocBefore */ ? -1 : this.flags & 16 /* RangeFlag.AssocAfter */ ? 1 : 0; }\n    /**\n    A flag that, when set, makes some selection-extending commands\n    treat the range's head and anchor as exchangeable, so that for\n    example Shift-ArrowUp will make the lower side of the selection\n    the anchor, even if that was the head before. Used to implement\n    MacOS-style undirectional selections.\n    */\n    get undirectional() {\n        return (this.flags & 64 /* RangeFlag.Undirectional */) > 0;\n    }\n    /**\n    The bidirectional text level associated with this cursor, if\n    any.\n    */\n    get bidiLevel() {\n        let level = this.flags & 7 /* RangeFlag.BidiLevelMask */;\n        return level == 7 ? null : level;\n    }\n    /**\n    Map this range through a change, producing a valid range in the\n    updated document.\n    */\n    map(change, assoc = -1) {\n        let from, to;\n        if (this.empty) {\n            from = to = change.mapPos(this.from, assoc);\n        }\n        else {\n            from = change.mapPos(this.from, 1);\n            to = change.mapPos(this.to, -1);\n        }\n        return from == this.from && to == this.to ? this : new SelectionRange(from, to, this.flags, this.goalColumn);\n    }\n    /**\n    Extend this range to cover at least `from` to `to`.\n    */\n    extend(from, to = from, assoc = 0) {\n        if (from <= this.anchor && to >= this.anchor)\n            return EditorSelection.range(from, to, undefined, undefined, assoc);\n        let head = Math.abs(from - this.anchor) > Math.abs(to - this.anchor) ? from : to;\n        return EditorSelection.range(this.anchor, head, undefined, undefined, assoc);\n    }\n    /**\n    Compare this range to another range.\n    */\n    eq(other, includeAssoc = false) {\n        return this.anchor == other.anchor && this.head == other.head && this.goalColumn == other.goalColumn &&\n            (!includeAssoc || !this.empty || this.assoc == other.assoc);\n    }\n    /**\n    Return a JSON-serializable object representing the range.\n    */\n    toJSON() { return { anchor: this.anchor, head: this.head }; }\n    /**\n    Convert a JSON representation of a range to a `SelectionRange`\n    instance.\n    */\n    static fromJSON(json) {\n        if (!json || typeof json.anchor != \"number\" || typeof json.head != \"number\")\n            throw new RangeError(\"Invalid JSON representation for SelectionRange\");\n        return EditorSelection.range(json.anchor, json.head);\n    }\n    /**\n    @internal\n    */\n    static create(from, to, flags, goalColumn) {\n        return new SelectionRange(from, to, flags, goalColumn);\n    }\n}\n/**\nAn editor selection holds one or more selection ranges.\n*/\nclass EditorSelection {\n    constructor(\n    /**\n    The ranges in the selection, sorted by position. Ranges cannot\n    overlap (but they may touch, if they aren't empty).\n    */\n    ranges, \n    /**\n    The index of the _main_ range in the selection (which is\n    usually the range that was added last).\n    */\n    mainIndex) {\n        this.ranges = ranges;\n        this.mainIndex = mainIndex;\n    }\n    /**\n    Map a selection through a change. Used to adjust the selection\n    position for changes.\n    */\n    map(change, assoc = -1) {\n        if (change.empty)\n            return this;\n        return EditorSelection.create(this.ranges.map(r => r.map(change, assoc)), this.mainIndex);\n    }\n    /**\n    Compare this selection to another selection. By default, ranges\n    are compared only by position. When `includeAssoc` is true,\n    cursor ranges must also have the same\n    [`assoc`](https://codemirror.net/6/docs/ref/#state.SelectionRange.assoc) value.\n    */\n    eq(other, includeAssoc = false) {\n        if (this.ranges.length != other.ranges.length ||\n            this.mainIndex != other.mainIndex)\n            return false;\n        for (let i = 0; i < this.ranges.length; i++)\n            if (!this.ranges[i].eq(other.ranges[i], includeAssoc))\n                return false;\n        return true;\n    }\n    /**\n    Get the primary selection range. Usually, you should make sure\n    your code applies to _all_ ranges, by using methods like\n    [`changeByRange`](https://codemirror.net/6/docs/ref/#state.EditorState.changeByRange).\n    */\n    get main() { return this.ranges[this.mainIndex]; }\n    /**\n    Make sure the selection only has one range. Returns a selection\n    holding only the main range from this selection.\n    */\n    asSingle() {\n        return this.ranges.length == 1 ? this : new EditorSelection([this.main], 0);\n    }\n    /**\n    Extend this selection with an extra range.\n    */\n    addRange(range, main = true) {\n        return EditorSelection.create([range].concat(this.ranges), main ? 0 : this.mainIndex + 1);\n    }\n    /**\n    Replace a given range with another range, and then normalize the\n    selection to merge and sort ranges if necessary.\n    */\n    replaceRange(range, which = this.mainIndex) {\n        let ranges = this.ranges.slice();\n        ranges[which] = range;\n        return EditorSelection.create(ranges, this.mainIndex);\n    }\n    /**\n    Convert this selection to an object that can be serialized to\n    JSON.\n    */\n    toJSON() {\n        return { ranges: this.ranges.map(r => r.toJSON()), main: this.mainIndex };\n    }\n    /**\n    Create a selection from a JSON representation.\n    */\n    static fromJSON(json) {\n        if (!json || !Array.isArray(json.ranges) || typeof json.main != \"number\" || json.main >= json.ranges.length)\n            throw new RangeError(\"Invalid JSON representation for EditorSelection\");\n        return new EditorSelection(json.ranges.map((r) => SelectionRange.fromJSON(r)), json.main);\n    }\n    /**\n    Create a selection holding a single range.\n    */\n    static single(anchor, head = anchor) {\n        return new EditorSelection([EditorSelection.range(anchor, head)], 0);\n    }\n    /**\n    Sort and merge the given set of ranges, creating a valid\n    selection.\n    */\n    static create(ranges, mainIndex = 0) {\n        if (ranges.length == 0)\n            throw new RangeError(\"A selection needs at least one range\");\n        for (let pos = 0, i = 0; i < ranges.length; i++) {\n            let range = ranges[i];\n            if (range.empty ? range.from <= pos : range.from < pos)\n                return EditorSelection.normalized(ranges.slice(), mainIndex);\n            pos = range.to;\n        }\n        return new EditorSelection(ranges, mainIndex);\n    }\n    /**\n    Create a cursor selection range at the given position. You can\n    safely ignore the optional arguments in most situations.\n    */\n    static cursor(pos, assoc = 0, bidiLevel, goalColumn) {\n        return SelectionRange.create(pos, pos, (assoc == 0 ? 0 : assoc < 0 ? 8 /* RangeFlag.AssocBefore */ : 16 /* RangeFlag.AssocAfter */) |\n            (bidiLevel == null ? 7 : Math.min(6, bidiLevel)), goalColumn);\n    }\n    /**\n    Create a selection range.\n    */\n    static range(anchor, head, goalColumn, bidiLevel, assoc) {\n        let flags = bidiLevel == null ? 7 : Math.min(6, bidiLevel);\n        if (!assoc && anchor != head)\n            assoc = head < anchor ? 1 : -1;\n        if (assoc)\n            flags |= assoc < 0 ? 8 /* RangeFlag.AssocBefore */ : 16 /* RangeFlag.AssocAfter */;\n        return head < anchor ? SelectionRange.create(head, anchor, flags | 32 /* RangeFlag.Inverted */, goalColumn)\n            : SelectionRange.create(anchor, head, flags, goalColumn);\n    }\n    /**\n    Create an [undirectional](https://codemirror.net/6/docs/ref/#state.SelectionRange.undirectional)\n    selection range.\n    */\n    static undirectionalRange(from, to) {\n        return SelectionRange.create(from, to, 64 /* RangeFlag.Undirectional */, undefined);\n    }\n    /**\n    @internal\n    */\n    static normalized(ranges, mainIndex = 0) {\n        let main = ranges[mainIndex];\n        ranges.sort((a, b) => a.from - b.from);\n        mainIndex = ranges.indexOf(main);\n        for (let i = 1; i < ranges.length; i++) {\n            let range = ranges[i], prev = ranges[i - 1];\n            if (range.empty ? range.from <= prev.to : range.from < prev.to) {\n                let from = prev.from, to = Math.max(range.to, prev.to);\n                if (i <= mainIndex)\n                    mainIndex--;\n                ranges.splice(--i, 2, range.anchor > range.head ? EditorSelection.range(to, from) : EditorSelection.range(from, to));\n            }\n        }\n        return new EditorSelection(ranges, mainIndex);\n    }\n}\nfunction checkSelection(selection, docLength) {\n    for (let range of selection.ranges)\n        if (range.to > docLength)\n            throw new RangeError(\"Selection points outside of document\");\n}\n\nlet nextID = 0;\n/**\nA facet is a labeled value that is associated with an editor\nstate. It takes inputs from any number of extensions, and combines\nthose into a single output value.\n\nExamples of uses of facets are the [tab\nsize](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize), [editor\nattributes](https://codemirror.net/6/docs/ref/#view.EditorView^editorAttributes), and [update\nlisteners](https://codemirror.net/6/docs/ref/#view.EditorView^updateListener).\n\nNote that `Facet` instances can be used anywhere where\n[`FacetReader`](https://codemirror.net/6/docs/ref/#state.FacetReader) is expected.\n*/\nclass Facet {\n    constructor(\n    /**\n    @internal\n    */\n    combine, \n    /**\n    @internal\n    */\n    compareInput, \n    /**\n    @internal\n    */\n    compare, isStatic, enables) {\n        this.combine = combine;\n        this.compareInput = compareInput;\n        this.compare = compare;\n        this.isStatic = isStatic;\n        /**\n        @internal\n        */\n        this.id = nextID++;\n        this.default = combine([]);\n        this.extensions = typeof enables == \"function\" ? enables(this) : enables;\n    }\n    /**\n    Returns a facet reader for this facet, which can be used to\n    [read](https://codemirror.net/6/docs/ref/#state.EditorState.facet) it but not to define values for it.\n    */\n    get reader() { return this; }\n    /**\n    Define a new facet.\n    */\n    static define(config = {}) {\n        return new Facet(config.combine || ((a) => a), config.compareInput || ((a, b) => a === b), config.compare || (!config.combine ? sameArray : (a, b) => a === b), !!config.static, config.enables);\n    }\n    /**\n    Returns an extension that adds the given value to this facet.\n    */\n    of(value) {\n        return new FacetProvider([], this, 0 /* Provider.Static */, value);\n    }\n    /**\n    Create an extension that computes a value for the facet from a\n    state. You must take care to declare the parts of the state that\n    this value depends on, since your function is only called again\n    for a new state when one of those parts changed.\n    \n    In cases where your value depends only on a single field, you'll\n    want to use the [`from`](https://codemirror.net/6/docs/ref/#state.Facet.from) method instead.\n    */\n    compute(deps, get) {\n        if (this.isStatic)\n            throw new Error(\"Can't compute a static facet\");\n        return new FacetProvider(deps, this, 1 /* Provider.Single */, get);\n    }\n    /**\n    Create an extension that computes zero or more values for this\n    facet from a state.\n    */\n    computeN(deps, get) {\n        if (this.isStatic)\n            throw new Error(\"Can't compute a static facet\");\n        return new FacetProvider(deps, this, 2 /* Provider.Multi */, get);\n    }\n    from(field, get) {\n        if (!get)\n            get = x => x;\n        return this.compute([field], state => get(state.field(field)));\n    }\n}\nfunction sameArray(a, b) {\n    return a == b || a.length == b.length && a.every((e, i) => e === b[i]);\n}\nclass FacetProvider {\n    constructor(dependencies, facet, type, value) {\n        this.dependencies = dependencies;\n        this.facet = facet;\n        this.type = type;\n        this.value = value;\n        this.id = nextID++;\n    }\n    dynamicSlot(addresses) {\n        var _a;\n        let getter = this.value;\n        let compare = this.facet.compareInput;\n        let id = this.id, idx = addresses[id] >> 1, multi = this.type == 2 /* Provider.Multi */;\n        let depDoc = false, depSel = false, depAddrs = [];\n        for (let dep of this.dependencies) {\n            if (dep == \"doc\")\n                depDoc = true;\n            else if (dep == \"selection\")\n                depSel = true;\n            else if ((((_a = addresses[dep.id]) !== null && _a !== void 0 ? _a : 1) & 1) == 0)\n                depAddrs.push(addresses[dep.id]);\n        }\n        return {\n            create(state) {\n                state.values[idx] = getter(state);\n                return 1 /* SlotStatus.Changed */;\n            },\n            update(state, tr) {\n                if ((depDoc && tr.docChanged) || (depSel && (tr.docChanged || tr.selection)) || ensureAll(state, depAddrs)) {\n                    let newVal = getter(state);\n                    if (multi ? !compareArray(newVal, state.values[idx], compare) : !compare(newVal, state.values[idx])) {\n                        state.values[idx] = newVal;\n                        return 1 /* SlotStatus.Changed */;\n                    }\n                }\n                return 0;\n            },\n            reconfigure: (state, oldState) => {\n                let newVal, oldAddr = oldState.config.address[id];\n                if (oldAddr != null) {\n                    let oldVal = getAddr(oldState, oldAddr);\n                    if (this.dependencies.every(dep => {\n                        return dep instanceof Facet ? oldState.facet(dep) === state.facet(dep) :\n                            dep instanceof StateField ? oldState.field(dep, false) == state.field(dep, false) : true;\n                    }) || (multi ? compareArray(newVal = getter(state), oldVal, compare) : compare(newVal = getter(state), oldVal))) {\n                        state.values[idx] = oldVal;\n                        return 0;\n                    }\n                }\n                else {\n                    newVal = getter(state);\n                }\n                state.values[idx] = newVal;\n                return 1 /* SlotStatus.Changed */;\n            }\n        };\n    }\n    get extension() { return this; }\n}\nfunction compareArray(a, b, compare) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++)\n        if (!compare(a[i], b[i]))\n            return false;\n    return true;\n}\nfunction ensureAll(state, addrs) {\n    let changed = false;\n    for (let addr of addrs)\n        if (ensureAddr(state, addr) & 1 /* SlotStatus.Changed */)\n            changed = true;\n    return changed;\n}\nfunction dynamicFacetSlot(addresses, facet, providers) {\n    let providerAddrs = providers.map(p => addresses[p.id]);\n    let providerTypes = providers.map(p => p.type);\n    let dynamic = providerAddrs.filter(p => !(p & 1));\n    let idx = addresses[facet.id] >> 1;\n    function get(state) {\n        let values = [];\n        for (let i = 0; i < providerAddrs.length; i++) {\n            let value = getAddr(state, providerAddrs[i]);\n            if (providerTypes[i] == 2 /* Provider.Multi */)\n                for (let val of value)\n                    values.push(val);\n            else\n                values.push(value);\n        }\n        return facet.combine(values);\n    }\n    return {\n        create(state) {\n            for (let addr of providerAddrs)\n                ensureAddr(state, addr);\n            state.values[idx] = get(state);\n            return 1 /* SlotStatus.Changed */;\n        },\n        update(state, tr) {\n            if (!ensureAll(state, dynamic))\n                return 0;\n            let value = get(state);\n            if (facet.compare(value, state.values[idx]))\n                return 0;\n            state.values[idx] = value;\n            return 1 /* SlotStatus.Changed */;\n        },\n        reconfigure(state, oldState) {\n            let depChanged = ensureAll(state, providerAddrs);\n            let oldProviders = oldState.config.facets[facet.id], oldValue = oldState.facet(facet);\n            if (oldProviders && !depChanged && sameArray(providers, oldProviders)) {\n                state.values[idx] = oldValue;\n                return 0;\n            }\n            let value = get(state);\n            if (facet.compare(value, oldValue)) {\n                state.values[idx] = oldValue;\n                return 0;\n            }\n            state.values[idx] = value;\n            return 1 /* SlotStatus.Changed */;\n        }\n    };\n}\nconst initField = /*@__PURE__*/Facet.define({ static: true });\n/**\nFields can store additional information in an editor state, and\nkeep it in sync with the rest of the state.\n*/\nclass StateField {\n    constructor(\n    /**\n    @internal\n    */\n    id, createF, updateF, compareF, \n    /**\n    @internal\n    */\n    spec) {\n        this.id = id;\n        this.createF = createF;\n        this.updateF = updateF;\n        this.compareF = compareF;\n        this.spec = spec;\n        /**\n        @internal\n        */\n        this.provides = undefined;\n    }\n    /**\n    Define a state field.\n    */\n    static define(config) {\n        let field = new StateField(nextID++, config.create, config.update, config.compare || ((a, b) => a === b), config);\n        if (config.provide)\n            field.provides = config.provide(field);\n        return field;\n    }\n    create(state) {\n        let init = state.facet(initField).find(i => i.field == this);\n        return ((init === null || init === void 0 ? void 0 : init.create) || this.createF)(state);\n    }\n    /**\n    @internal\n    */\n    slot(addresses) {\n        let idx = addresses[this.id] >> 1;\n        return {\n            create: (state) => {\n                state.values[idx] = this.create(state);\n                return 1 /* SlotStatus.Changed */;\n            },\n            update: (state, tr) => {\n                let oldVal = state.values[idx];\n                let value = this.updateF(oldVal, tr);\n                if (this.compareF(oldVal, value))\n                    return 0;\n                state.values[idx] = value;\n                return 1 /* SlotStatus.Changed */;\n            },\n            reconfigure: (state, oldState) => {\n                let init = state.facet(initField), oldInit = oldState.facet(initField), reInit;\n                if ((reInit = init.find(i => i.field == this)) && reInit != oldInit.find(i => i.field == this)) {\n                    state.values[idx] = reInit.create(state);\n                    return 1 /* SlotStatus.Changed */;\n                }\n                if (oldState.config.address[this.id] != null) {\n                    state.values[idx] = oldState.field(this);\n                    return 0;\n                }\n                state.values[idx] = this.create(state);\n                return 1 /* SlotStatus.Changed */;\n            }\n        };\n    }\n    /**\n    Returns an extension that enables this field and overrides the\n    way it is initialized. Can be useful when you need to provide a\n    non-default starting value for the field.\n    */\n    init(create) {\n        return [this, initField.of({ field: this, create })];\n    }\n    /**\n    State field instances can be used as\n    [`Extension`](https://codemirror.net/6/docs/ref/#state.Extension) values to enable the field in a\n    given state.\n    */\n    get extension() { return this; }\n}\nconst Prec_ = { lowest: 4, low: 3, default: 2, high: 1, highest: 0 };\nfunction prec(value) {\n    return (ext) => new PrecExtension(ext, value);\n}\n/**\nBy default extensions are registered in the order they are found\nin the flattened form of nested array that was provided.\nIndividual extension values can be assigned a precedence to\noverride this. Extensions that do not have a precedence set get\nthe precedence of the nearest parent with a precedence, or\n[`default`](https://codemirror.net/6/docs/ref/#state.Prec.default) if there is no such parent. The\nfinal ordering of extensions is determined by first sorting by\nprecedence and then by order within each precedence.\n*/\nconst Prec = {\n    /**\n    The highest precedence level, for extensions that should end up\n    near the start of the precedence ordering.\n    */\n    highest: /*@__PURE__*/prec(Prec_.highest),\n    /**\n    A higher-than-default precedence, for extensions that should\n    come before those with default precedence.\n    */\n    high: /*@__PURE__*/prec(Prec_.high),\n    /**\n    The default precedence, which is also used for extensions\n    without an explicit precedence.\n    */\n    default: /*@__PURE__*/prec(Prec_.default),\n    /**\n    A lower-than-default precedence.\n    */\n    low: /*@__PURE__*/prec(Prec_.low),\n    /**\n    The lowest precedence level. Meant for things that should end up\n    near the end of the extension order.\n    */\n    lowest: /*@__PURE__*/prec(Prec_.lowest)\n};\nclass PrecExtension {\n    constructor(inner, prec) {\n        this.inner = inner;\n        this.prec = prec;\n    }\n    get extension() { return this; }\n}\n/**\nExtension compartments can be used to make a configuration\ndynamic. By [wrapping](https://codemirror.net/6/docs/ref/#state.Compartment.of) part of your\nconfiguration in a compartment, you can later\n[replace](https://codemirror.net/6/docs/ref/#state.Compartment.reconfigure) that part through a\ntransaction.\n*/\nclass Compartment {\n    /**\n    Create an instance of this compartment to add to your [state\n    configuration](https://codemirror.net/6/docs/ref/#state.EditorStateConfig.extensions).\n    */\n    of(ext) { return new CompartmentInstance(this, ext); }\n    /**\n    Create an [effect](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) that\n    reconfigures this compartment.\n    */\n    reconfigure(content) {\n        return Compartment.reconfigure.of({ compartment: this, extension: content });\n    }\n    /**\n    Get the current content of the compartment in the state, or\n    `undefined` if it isn't present.\n    */\n    get(state) {\n        return state.config.compartments.get(this);\n    }\n}\nclass CompartmentInstance {\n    constructor(compartment, inner) {\n        this.compartment = compartment;\n        this.inner = inner;\n    }\n    get extension() { return this; }\n}\nclass Configuration {\n    constructor(base, compartments, dynamicSlots, address, staticValues, facets) {\n        this.base = base;\n        this.compartments = compartments;\n        this.dynamicSlots = dynamicSlots;\n        this.address = address;\n        this.staticValues = staticValues;\n        this.facets = facets;\n        this.statusTemplate = [];\n        while (this.statusTemplate.length < dynamicSlots.length)\n            this.statusTemplate.push(0 /* SlotStatus.Unresolved */);\n    }\n    staticFacet(facet) {\n        let addr = this.address[facet.id];\n        return addr == null ? facet.default : this.staticValues[addr >> 1];\n    }\n    static resolve(base, compartments, oldState) {\n        let fields = [];\n        let facets = Object.create(null);\n        let newCompartments = new Map();\n        for (let ext of flatten(base, compartments, newCompartments)) {\n            if (ext instanceof StateField)\n                fields.push(ext);\n            else\n                (facets[ext.facet.id] || (facets[ext.facet.id] = [])).push(ext);\n        }\n        let address = Object.create(null);\n        let staticValues = [];\n        let dynamicSlots = [];\n        for (let field of fields) {\n            address[field.id] = dynamicSlots.length << 1;\n            dynamicSlots.push(a => field.slot(a));\n        }\n        let oldFacets = oldState === null || oldState === void 0 ? void 0 : oldState.config.facets;\n        for (let id in facets) {\n            let providers = facets[id], facet = providers[0].facet;\n            let oldProviders = oldFacets && oldFacets[id] || [];\n            if (providers.every(p => p.type == 0 /* Provider.Static */)) {\n                address[facet.id] = (staticValues.length << 1) | 1;\n                if (sameArray(oldProviders, providers)) {\n                    staticValues.push(oldState.facet(facet));\n                }\n                else {\n                    let value = facet.combine(providers.map(p => p.value));\n                    staticValues.push(oldState && facet.compare(value, oldState.facet(facet)) ? oldState.facet(facet) : value);\n                }\n            }\n            else {\n                for (let p of providers) {\n                    if (p.type == 0 /* Provider.Static */) {\n                        address[p.id] = (staticValues.length << 1) | 1;\n                        staticValues.push(p.value);\n                    }\n                    else {\n                        address[p.id] = dynamicSlots.length << 1;\n                        dynamicSlots.push(a => p.dynamicSlot(a));\n                    }\n                }\n                address[facet.id] = dynamicSlots.length << 1;\n                dynamicSlots.push(a => dynamicFacetSlot(a, facet, providers));\n            }\n        }\n        let dynamic = dynamicSlots.map(f => f(address));\n        return new Configuration(base, newCompartments, dynamic, address, staticValues, facets);\n    }\n}\nfunction flatten(extension, compartments, newCompartments) {\n    let result = [[], [], [], [], []];\n    let seen = new Map();\n    function inner(ext, prec) {\n        let known = seen.get(ext);\n        if (known != null) {\n            if (known <= prec)\n                return;\n            let found = result[known].indexOf(ext);\n            if (found > -1)\n                result[known].splice(found, 1);\n            if (ext instanceof CompartmentInstance)\n                newCompartments.delete(ext.compartment);\n        }\n        seen.set(ext, prec);\n        if (Array.isArray(ext)) {\n            for (let e of ext)\n                inner(e, prec);\n        }\n        else if (ext instanceof CompartmentInstance) {\n            if (newCompartments.has(ext.compartment))\n                throw new RangeError(`Duplicate use of compartment in extensions`);\n            let content = compartments.get(ext.compartment) || ext.inner;\n            newCompartments.set(ext.compartment, content);\n            inner(content, prec);\n        }\n        else if (ext instanceof PrecExtension) {\n            inner(ext.inner, ext.prec);\n        }\n        else if (ext instanceof StateField) {\n            result[prec].push(ext);\n            if (ext.provides)\n                inner(ext.provides, prec);\n        }\n        else if (ext instanceof FacetProvider) {\n            result[prec].push(ext);\n            if (ext.facet.extensions)\n                inner(ext.facet.extensions, Prec_.default);\n        }\n        else {\n            let content = ext.extension;\n            if (!content)\n                throw new Error(`Unrecognized extension value in extension set (${ext}).`);\n            if (content == ext)\n                throw new Error(`Unrecognized extension value in extension set (${ext}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);\n            inner(content, prec);\n        }\n    }\n    inner(extension, Prec_.default);\n    return result.reduce((a, b) => a.concat(b));\n}\nfunction ensureAddr(state, addr) {\n    if (addr & 1)\n        return 2 /* SlotStatus.Computed */;\n    let idx = addr >> 1;\n    let status = state.status[idx];\n    if (status == 4 /* SlotStatus.Computing */)\n        throw new Error(\"Cyclic dependency between fields and/or facets\");\n    if (status & 2 /* SlotStatus.Computed */)\n        return status;\n    state.status[idx] = 4 /* SlotStatus.Computing */;\n    let changed = state.computeSlot(state, state.config.dynamicSlots[idx]);\n    return state.status[idx] = 2 /* SlotStatus.Computed */ | changed;\n}\nfunction getAddr(state, addr) {\n    return addr & 1 ? state.config.staticValues[addr >> 1] : state.values[addr >> 1];\n}\n\nconst languageData = /*@__PURE__*/Facet.define();\nconst allowMultipleSelections = /*@__PURE__*/Facet.define({\n    combine: values => values.some(v => v),\n    static: true\n});\nconst lineSeparator = /*@__PURE__*/Facet.define({\n    combine: values => values.length ? values[0] : undefined,\n    static: true\n});\nconst changeFilter = /*@__PURE__*/Facet.define();\nconst transactionFilter = /*@__PURE__*/Facet.define();\nconst transactionExtender = /*@__PURE__*/Facet.define();\nconst readOnly = /*@__PURE__*/Facet.define({\n    combine: values => values.length ? values[0] : false\n});\n\n/**\nAnnotations are tagged values that are used to add metadata to\ntransactions in an extensible way. They should be used to model\nthings that effect the entire transaction (such as its [time\nstamp](https://codemirror.net/6/docs/ref/#state.Transaction^time) or information about its\n[origin](https://codemirror.net/6/docs/ref/#state.Transaction^userEvent)). For effects that happen\n_alongside_ the other changes made by the transaction, [state\neffects](https://codemirror.net/6/docs/ref/#state.StateEffect) are more appropriate.\n*/\nclass Annotation {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The annotation type.\n    */\n    type, \n    /**\n    The value of this annotation.\n    */\n    value) {\n        this.type = type;\n        this.value = value;\n    }\n    /**\n    Define a new type of annotation.\n    */\n    static define() { return new AnnotationType(); }\n}\n/**\nMarker that identifies a type of [annotation](https://codemirror.net/6/docs/ref/#state.Annotation).\n*/\nclass AnnotationType {\n    /**\n    Create an instance of this annotation.\n    */\n    of(value) { return new Annotation(this, value); }\n}\n/**\nRepresentation of a type of state effect. Defined with\n[`StateEffect.define`](https://codemirror.net/6/docs/ref/#state.StateEffect^define).\n*/\nclass StateEffectType {\n    /**\n    @internal\n    */\n    constructor(\n    // The `any` types in these function types are there to work\n    // around TypeScript issue #37631, where the type guard on\n    // `StateEffect.is` mysteriously stops working when these properly\n    // have type `Value`.\n    /**\n    @internal\n    */\n    map) {\n        this.map = map;\n    }\n    /**\n    Create a [state effect](https://codemirror.net/6/docs/ref/#state.StateEffect) instance of this\n    type.\n    */\n    of(value) { return new StateEffect(this, value); }\n}\n/**\nState effects can be used to represent additional effects\nassociated with a [transaction](https://codemirror.net/6/docs/ref/#state.Transaction.effects). They\nare often useful to model changes to custom [state\nfields](https://codemirror.net/6/docs/ref/#state.StateField), when those changes aren't implicit in\ndocument or selection changes.\n*/\nclass StateEffect {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    @internal\n    */\n    type, \n    /**\n    The value of this effect.\n    */\n    value) {\n        this.type = type;\n        this.value = value;\n    }\n    /**\n    Map this effect through a position mapping. Will return\n    `undefined` when that ends up deleting the effect.\n    */\n    map(mapping) {\n        let mapped = this.type.map(this.value, mapping);\n        return mapped === undefined ? undefined : mapped == this.value ? this : new StateEffect(this.type, mapped);\n    }\n    /**\n    Tells you whether this effect object is of a given\n    [type](https://codemirror.net/6/docs/ref/#state.StateEffectType).\n    */\n    is(type) { return this.type == type; }\n    /**\n    Define a new effect type. The type parameter indicates the type\n    of values that his effect holds. It should be a type that\n    doesn't include `undefined`, since that is used in\n    [mapping](https://codemirror.net/6/docs/ref/#state.StateEffect.map) to indicate that an effect is\n    removed.\n    */\n    static define(spec = {}) {\n        return new StateEffectType(spec.map || (v => v));\n    }\n    /**\n    Map an array of effects through a change set.\n    */\n    static mapEffects(effects, mapping) {\n        if (!effects.length)\n            return effects;\n        let result = [];\n        for (let effect of effects) {\n            let mapped = effect.map(mapping);\n            if (mapped)\n                result.push(mapped);\n        }\n        return result;\n    }\n}\n/**\nThis effect can be used to reconfigure the root extensions of\nthe editor. Doing this will discard any extensions\n[appended](https://codemirror.net/6/docs/ref/#state.StateEffect^appendConfig), but does not reset\nthe content of [reconfigured](https://codemirror.net/6/docs/ref/#state.Compartment.reconfigure)\ncompartments.\n*/\nStateEffect.reconfigure = /*@__PURE__*/StateEffect.define();\n/**\nAppend extensions to the top-level configuration of the editor.\n*/\nStateEffect.appendConfig = /*@__PURE__*/StateEffect.define();\n/**\nChanges to the editor state are grouped into transactions.\nTypically, a user action creates a single transaction, which may\ncontain any number of document changes, may change the selection,\nor have other effects. Create a transaction by calling\n[`EditorState.update`](https://codemirror.net/6/docs/ref/#state.EditorState.update), or immediately\ndispatch one by calling\n[`EditorView.dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch).\n*/\nclass Transaction {\n    constructor(\n    /**\n    The state from which the transaction starts.\n    */\n    startState, \n    /**\n    The document changes made by this transaction.\n    */\n    changes, \n    /**\n    The selection set by this transaction, or undefined if it\n    doesn't explicitly set a selection.\n    */\n    selection, \n    /**\n    The effects added to the transaction.\n    */\n    effects, \n    /**\n    @internal\n    */\n    annotations, \n    /**\n    Whether the selection should be scrolled into view after this\n    transaction is dispatched.\n    */\n    scrollIntoView) {\n        this.startState = startState;\n        this.changes = changes;\n        this.selection = selection;\n        this.effects = effects;\n        this.annotations = annotations;\n        this.scrollIntoView = scrollIntoView;\n        /**\n        @internal\n        */\n        this._doc = null;\n        /**\n        @internal\n        */\n        this._state = null;\n        if (selection)\n            checkSelection(selection, changes.newLength);\n        if (!annotations.some((a) => a.type == Transaction.time))\n            this.annotations = annotations.concat(Transaction.time.of(Date.now()));\n    }\n    /**\n    @internal\n    */\n    static create(startState, changes, selection, effects, annotations, scrollIntoView) {\n        return new Transaction(startState, changes, selection, effects, annotations, scrollIntoView);\n    }\n    /**\n    The new document produced by the transaction. Contrary to\n    [`.state`](https://codemirror.net/6/docs/ref/#state.Transaction.state)`.doc`, accessing this won't\n    force the entire new state to be computed right away, so it is\n    recommended that [transaction\n    filters](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter) use this getter\n    when they need to look at the new document.\n    */\n    get newDoc() {\n        return this._doc || (this._doc = this.changes.apply(this.startState.doc));\n    }\n    /**\n    The new selection produced by the transaction. If\n    [`this.selection`](https://codemirror.net/6/docs/ref/#state.Transaction.selection) is undefined,\n    this will [map](https://codemirror.net/6/docs/ref/#state.EditorSelection.map) the start state's\n    current selection through the changes made by the transaction.\n    */\n    get newSelection() {\n        return this.selection || this.startState.selection.map(this.changes);\n    }\n    /**\n    The new state created by the transaction. Computed on demand\n    (but retained for subsequent access), so it is recommended not to\n    access it in [transaction\n    filters](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter) when possible.\n    */\n    get state() {\n        if (!this._state)\n            this.startState.applyTransaction(this);\n        return this._state;\n    }\n    /**\n    Get the value of the given annotation type, if any.\n    */\n    annotation(type) {\n        for (let ann of this.annotations)\n            if (ann.type == type)\n                return ann.value;\n        return undefined;\n    }\n    /**\n    Indicates whether the transaction changed the document.\n    */\n    get docChanged() { return !this.changes.empty; }\n    /**\n    Indicates whether this transaction reconfigures the state\n    (through a [configuration compartment](https://codemirror.net/6/docs/ref/#state.Compartment) or\n    with a top-level configuration\n    [effect](https://codemirror.net/6/docs/ref/#state.StateEffect^reconfigure).\n    */\n    get reconfigured() { return this.startState.config != this.state.config; }\n    /**\n    Returns true if the transaction has a [user\n    event](https://codemirror.net/6/docs/ref/#state.Transaction^userEvent) annotation that is equal to\n    or more specific than `event`. For example, if the transaction\n    has `\"select.pointer\"` as user event, `\"select\"` and\n    `\"select.pointer\"` will match it.\n    */\n    isUserEvent(event) {\n        let e = this.annotation(Transaction.userEvent);\n        return !!(e && (e == event || e.length > event.length && e.slice(0, event.length) == event && e[event.length] == \".\"));\n    }\n}\n/**\nAnnotation used to store transaction timestamps. Automatically\nadded to every transaction, holding `Date.now()`.\n*/\nTransaction.time = /*@__PURE__*/Annotation.define();\n/**\nAnnotation used to associate a transaction with a user interface\nevent. Holds a string identifying the event, using a\ndot-separated format to support attaching more specific\ninformation. The events used by the core libraries are:\n\n - `\"input\"` when content is entered\n   - `\"input.type\"` for typed input\n     - `\"input.type.compose\"` for composition\n   - `\"input.paste\"` for pasted input\n   - `\"input.drop\"` when adding content with drag-and-drop\n   - `\"input.complete\"` when autocompleting\n - `\"delete\"` when the user deletes content\n   - `\"delete.selection\"` when deleting the selection\n   - `\"delete.forward\"` when deleting forward from the selection\n   - `\"delete.backward\"` when deleting backward from the selection\n   - `\"delete.cut\"` when cutting to the clipboard\n - `\"move\"` when content is moved\n   - `\"move.drop\"` when content is moved within the editor through drag-and-drop\n - `\"select\"` when explicitly changing the selection\n   - `\"select.pointer\"` when selecting with a mouse or other pointing device\n - `\"undo\"` and `\"redo\"` for history actions\n\nUse [`isUserEvent`](https://codemirror.net/6/docs/ref/#state.Transaction.isUserEvent) to check\nwhether the annotation matches a given event.\n*/\nTransaction.userEvent = /*@__PURE__*/Annotation.define();\n/**\nAnnotation indicating whether a transaction should be added to\nthe undo history or not.\n*/\nTransaction.addToHistory = /*@__PURE__*/Annotation.define();\n/**\nAnnotation indicating (when present and true) that a transaction\nrepresents a change made by some other actor, not the user. This\nis used, for example, to tag other people's changes in\ncollaborative editing.\n*/\nTransaction.remote = /*@__PURE__*/Annotation.define();\nfunction joinRanges(a, b) {\n    let result = [];\n    for (let iA = 0, iB = 0;;) {\n        let from, to;\n        if (iA < a.length && (iB == b.length || b[iB] >= a[iA])) {\n            from = a[iA++];\n            to = a[iA++];\n        }\n        else if (iB < b.length) {\n            from = b[iB++];\n            to = b[iB++];\n        }\n        else\n            return result;\n        if (!result.length || result[result.length - 1] < from)\n            result.push(from, to);\n        else if (result[result.length - 1] < to)\n            result[result.length - 1] = to;\n    }\n}\nfunction mergeTransaction(a, b, sequential) {\n    var _a;\n    let mapForA, mapForB, changes;\n    if (sequential) {\n        mapForA = b.changes;\n        mapForB = ChangeSet.empty(b.changes.length);\n        changes = a.changes.compose(b.changes);\n    }\n    else {\n        mapForA = b.changes.map(a.changes);\n        mapForB = a.changes.mapDesc(b.changes, true);\n        changes = a.changes.compose(mapForA);\n    }\n    return {\n        changes,\n        selection: b.selection ? b.selection.map(mapForB) : (_a = a.selection) === null || _a === void 0 ? void 0 : _a.map(mapForA),\n        effects: StateEffect.mapEffects(a.effects, mapForA).concat(StateEffect.mapEffects(b.effects, mapForB)),\n        annotations: a.annotations.length ? a.annotations.concat(b.annotations) : b.annotations,\n        scrollIntoView: a.scrollIntoView || b.scrollIntoView\n    };\n}\nfunction resolveTransactionInner(state, spec, docSize) {\n    let sel = spec.selection, annotations = asArray(spec.annotations);\n    if (spec.userEvent)\n        annotations = annotations.concat(Transaction.userEvent.of(spec.userEvent));\n    return {\n        changes: spec.changes instanceof ChangeSet ? spec.changes\n            : ChangeSet.of(spec.changes || [], docSize, state.facet(lineSeparator)),\n        selection: sel && (sel instanceof EditorSelection ? sel : EditorSelection.single(sel.anchor, sel.head)),\n        effects: asArray(spec.effects),\n        annotations,\n        scrollIntoView: !!spec.scrollIntoView\n    };\n}\nfunction resolveTransaction(state, specs, filter) {\n    let s = resolveTransactionInner(state, specs.length ? specs[0] : {}, state.doc.length);\n    if (specs.length && specs[0].filter === false)\n        filter = false;\n    for (let i = 1; i < specs.length; i++) {\n        if (specs[i].filter === false)\n            filter = false;\n        let seq = !!specs[i].sequential;\n        s = mergeTransaction(s, resolveTransactionInner(state, specs[i], seq ? s.changes.newLength : state.doc.length), seq);\n    }\n    let tr = Transaction.create(state, s.changes, s.selection, s.effects, s.annotations, s.scrollIntoView);\n    return extendTransaction(filter ? filterTransaction(tr) : tr);\n}\n// Finish a transaction by applying filters if necessary.\nfunction filterTransaction(tr) {\n    let state = tr.startState;\n    // Change filters\n    let result = true;\n    for (let filter of state.facet(changeFilter)) {\n        let value = filter(tr);\n        if (value === false) {\n            result = false;\n            break;\n        }\n        if (Array.isArray(value))\n            result = result === true ? value : joinRanges(result, value);\n    }\n    if (result !== true) {\n        let changes, back;\n        if (result === false) {\n            back = tr.changes.invertedDesc;\n            changes = ChangeSet.empty(state.doc.length);\n        }\n        else {\n            let filtered = tr.changes.filter(result);\n            changes = filtered.changes;\n            back = filtered.filtered.mapDesc(filtered.changes).invertedDesc;\n        }\n        tr = Transaction.create(state, changes, tr.selection && tr.selection.map(back), StateEffect.mapEffects(tr.effects, back), tr.annotations, tr.scrollIntoView);\n    }\n    // Transaction filters\n    let filters = state.facet(transactionFilter);\n    for (let i = filters.length - 1; i >= 0; i--) {\n        let filtered = filters[i](tr);\n        if (filtered instanceof Transaction)\n            tr = filtered;\n        else if (Array.isArray(filtered) && filtered.length == 1 && filtered[0] instanceof Transaction)\n            tr = filtered[0];\n        else\n            tr = resolveTransaction(state, asArray(filtered), false);\n    }\n    return tr;\n}\nfunction extendTransaction(tr) {\n    let state = tr.startState, extenders = state.facet(transactionExtender), spec = tr;\n    for (let i = extenders.length - 1; i >= 0; i--) {\n        let extension = extenders[i](tr);\n        if (extension && Object.keys(extension).length)\n            spec = mergeTransaction(spec, resolveTransactionInner(state, extension, tr.changes.newLength), true);\n    }\n    return spec == tr ? tr : Transaction.create(state, tr.changes, tr.selection, spec.effects, spec.annotations, spec.scrollIntoView);\n}\nconst none = [];\nfunction asArray(value) {\n    return value == null ? none : Array.isArray(value) ? value : [value];\n}\n\n/**\nThe categories produced by a [character\ncategorizer](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer). These are used\ndo things like selecting by word.\n*/\nvar CharCategory = /*@__PURE__*/(function (CharCategory) {\n    /**\n    Word characters.\n    */\n    CharCategory[CharCategory[\"Word\"] = 0] = \"Word\";\n    /**\n    Whitespace.\n    */\n    CharCategory[CharCategory[\"Space\"] = 1] = \"Space\";\n    /**\n    Anything else.\n    */\n    CharCategory[CharCategory[\"Other\"] = 2] = \"Other\";\nreturn CharCategory})(CharCategory || (CharCategory = {}));\nconst nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\nlet wordChar;\ntry {\n    wordChar = /*@__PURE__*/new RegExp(\"[\\\\p{Alphabetic}\\\\p{Number}_]\", \"u\");\n}\ncatch (_) { }\nfunction hasWordChar(str) {\n    if (wordChar)\n        return wordChar.test(str);\n    for (let i = 0; i < str.length; i++) {\n        let ch = str[i];\n        if (/\\w/.test(ch) || ch > \"\\x80\" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)))\n            return true;\n    }\n    return false;\n}\nfunction makeCategorizer(wordChars) {\n    return (char) => {\n        if (!/\\S/.test(char))\n            return CharCategory.Space;\n        if (hasWordChar(char))\n            return CharCategory.Word;\n        for (let i = 0; i < wordChars.length; i++)\n            if (char.indexOf(wordChars[i]) > -1)\n                return CharCategory.Word;\n        return CharCategory.Other;\n    };\n}\n\n/**\nThe editor state class is a persistent (immutable) data structure.\nTo update a state, you [create](https://codemirror.net/6/docs/ref/#state.EditorState.update) a\n[transaction](https://codemirror.net/6/docs/ref/#state.Transaction), which produces a _new_ state\ninstance, without modifying the original object.\n\nAs such, _never_ mutate properties of a state directly. That'll\njust break things.\n*/\nclass EditorState {\n    constructor(\n    /**\n    @internal\n    */\n    config, \n    /**\n    The current document.\n    */\n    doc, \n    /**\n    The current selection.\n    */\n    selection, \n    /**\n    @internal\n    */\n    values, computeSlot, tr) {\n        this.config = config;\n        this.doc = doc;\n        this.selection = selection;\n        this.values = values;\n        this.status = config.statusTemplate.slice();\n        this.computeSlot = computeSlot;\n        // Fill in the computed state immediately, so that further queries\n        // for it made during the update return this state\n        if (tr)\n            tr._state = this;\n        for (let i = 0; i < this.config.dynamicSlots.length; i++)\n            ensureAddr(this, i << 1);\n        this.computeSlot = null;\n    }\n    field(field, require = true) {\n        let addr = this.config.address[field.id];\n        if (addr == null) {\n            if (require)\n                throw new RangeError(\"Field is not present in this state\");\n            return undefined;\n        }\n        ensureAddr(this, addr);\n        return getAddr(this, addr);\n    }\n    /**\n    Create a [transaction](https://codemirror.net/6/docs/ref/#state.Transaction) that updates this\n    state. Any number of [transaction specs](https://codemirror.net/6/docs/ref/#state.TransactionSpec)\n    can be passed. Unless\n    [`sequential`](https://codemirror.net/6/docs/ref/#state.TransactionSpec.sequential) is set, the\n    [changes](https://codemirror.net/6/docs/ref/#state.TransactionSpec.changes) (if any) of each spec\n    are assumed to start in the _current_ document (not the document\n    produced by previous specs), and its\n    [selection](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection) and\n    [effects](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) are assumed to refer\n    to the document created by its _own_ changes. The resulting\n    transaction contains the combined effect of all the different\n    specs. For [selection](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection), later\n    specs take precedence over earlier ones.\n    */\n    update(...specs) {\n        return resolveTransaction(this, specs, true);\n    }\n    /**\n    @internal\n    */\n    applyTransaction(tr) {\n        let conf = this.config, { base, compartments } = conf;\n        for (let effect of tr.effects) {\n            if (effect.is(Compartment.reconfigure)) {\n                if (conf) {\n                    compartments = new Map;\n                    conf.compartments.forEach((val, key) => compartments.set(key, val));\n                    conf = null;\n                }\n                compartments.set(effect.value.compartment, effect.value.extension);\n            }\n            else if (effect.is(StateEffect.reconfigure)) {\n                conf = null;\n                base = effect.value;\n            }\n            else if (effect.is(StateEffect.appendConfig)) {\n                conf = null;\n                base = asArray(base).concat(effect.value);\n            }\n        }\n        let startValues;\n        if (!conf) {\n            conf = Configuration.resolve(base, compartments, this);\n            let intermediateState = new EditorState(conf, this.doc, this.selection, conf.dynamicSlots.map(() => null), (state, slot) => slot.reconfigure(state, this), null);\n            startValues = intermediateState.values;\n        }\n        else {\n            startValues = tr.startState.values.slice();\n        }\n        let selection = tr.startState.facet(allowMultipleSelections) ? tr.newSelection : tr.newSelection.asSingle();\n        new EditorState(conf, tr.newDoc, selection, startValues, (state, slot) => slot.update(state, tr), tr);\n    }\n    /**\n    Create a [transaction spec](https://codemirror.net/6/docs/ref/#state.TransactionSpec) that\n    replaces every selection range with the given content.\n    */\n    replaceSelection(text) {\n        if (typeof text == \"string\")\n            text = this.toText(text);\n        return this.changeByRange(range => ({ changes: { from: range.from, to: range.to, insert: text },\n            range: EditorSelection.cursor(range.from + text.length) }));\n    }\n    /**\n    Create a set of changes and a new selection by running the given\n    function for each range in the active selection. The function\n    can return an optional set of changes (in the coordinate space\n    of the start document), plus an updated range (in the coordinate\n    space of the document produced by the call's own changes). This\n    method will merge all the changes and ranges into a single\n    changeset and selection, and return it as a [transaction\n    spec](https://codemirror.net/6/docs/ref/#state.TransactionSpec), which can be passed to\n    [`update`](https://codemirror.net/6/docs/ref/#state.EditorState.update).\n    */\n    changeByRange(f) {\n        let sel = this.selection;\n        let result1 = f(sel.ranges[0]);\n        let changes = this.changes(result1.changes), ranges = [result1.range];\n        let effects = asArray(result1.effects);\n        for (let i = 1; i < sel.ranges.length; i++) {\n            let result = f(sel.ranges[i]);\n            let newChanges = this.changes(result.changes), newMapped = newChanges.map(changes);\n            for (let j = 0; j < i; j++)\n                ranges[j] = ranges[j].map(newMapped);\n            let mapBy = changes.mapDesc(newChanges, true);\n            ranges.push(result.range.map(mapBy));\n            changes = changes.compose(newMapped);\n            effects = StateEffect.mapEffects(effects, newMapped).concat(StateEffect.mapEffects(asArray(result.effects), mapBy));\n        }\n        return {\n            changes,\n            selection: EditorSelection.create(ranges, sel.mainIndex),\n            effects\n        };\n    }\n    /**\n    Create a [change set](https://codemirror.net/6/docs/ref/#state.ChangeSet) from the given change\n    description, taking the state's document length and line\n    separator into account.\n    */\n    changes(spec = []) {\n        if (spec instanceof ChangeSet)\n            return spec;\n        return ChangeSet.of(spec, this.doc.length, this.facet(EditorState.lineSeparator));\n    }\n    /**\n    Using the state's [line\n    separator](https://codemirror.net/6/docs/ref/#state.EditorState^lineSeparator), create a\n    [`Text`](https://codemirror.net/6/docs/ref/#state.Text) instance from the given string.\n    */\n    toText(string) {\n        return Text.of(string.split(this.facet(EditorState.lineSeparator) || DefaultSplit));\n    }\n    /**\n    Return the given range of the document as a string.\n    */\n    sliceDoc(from = 0, to = this.doc.length) {\n        return this.doc.sliceString(from, to, this.lineBreak);\n    }\n    /**\n    Get the value of a state [facet](https://codemirror.net/6/docs/ref/#state.Facet).\n    */\n    facet(facet) {\n        let addr = this.config.address[facet.id];\n        if (addr == null)\n            return facet.default;\n        ensureAddr(this, addr);\n        return getAddr(this, addr);\n    }\n    /**\n    Convert this state to a JSON-serializable object. When custom\n    fields should be serialized, you can pass them in as an object\n    mapping property names (in the resulting object, which should\n    not use `doc` or `selection`) to fields.\n    */\n    toJSON(fields) {\n        let result = {\n            doc: this.sliceDoc(),\n            selection: this.selection.toJSON()\n        };\n        if (fields)\n            for (let prop in fields) {\n                let value = fields[prop];\n                if (value instanceof StateField && this.config.address[value.id] != null)\n                    result[prop] = value.spec.toJSON(this.field(fields[prop]), this);\n            }\n        return result;\n    }\n    /**\n    Deserialize a state from its JSON representation. When custom\n    fields should be deserialized, pass the same object you passed\n    to [`toJSON`](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) when serializing as\n    third argument.\n    */\n    static fromJSON(json, config = {}, fields) {\n        if (!json || typeof json.doc != \"string\")\n            throw new RangeError(\"Invalid JSON representation for EditorState\");\n        let fieldInit = [];\n        if (fields)\n            for (let prop in fields) {\n                if (Object.prototype.hasOwnProperty.call(json, prop)) {\n                    let field = fields[prop], value = json[prop];\n                    fieldInit.push(field.init(state => field.spec.fromJSON(value, state)));\n                }\n            }\n        return EditorState.create({\n            doc: json.doc,\n            selection: EditorSelection.fromJSON(json.selection),\n            extensions: config.extensions ? fieldInit.concat([config.extensions]) : fieldInit\n        });\n    }\n    /**\n    Create a new state. You'll usually only need this when\n    initializing an editor—updated states are created by applying\n    transactions.\n    */\n    static create(config = {}) {\n        let configuration = Configuration.resolve(config.extensions || [], new Map);\n        let doc = config.doc instanceof Text ? config.doc\n            : Text.of((config.doc || \"\").split(configuration.staticFacet(EditorState.lineSeparator) || DefaultSplit));\n        let selection = !config.selection ? EditorSelection.single(0)\n            : config.selection instanceof EditorSelection ? config.selection\n                : EditorSelection.single(config.selection.anchor, config.selection.head);\n        checkSelection(selection, doc.length);\n        if (!configuration.staticFacet(allowMultipleSelections))\n            selection = selection.asSingle();\n        return new EditorState(configuration, doc, selection, configuration.dynamicSlots.map(() => null), (state, slot) => slot.create(state), null);\n    }\n    /**\n    The size (in columns) of a tab in the document, determined by\n    the [`tabSize`](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize) facet.\n    */\n    get tabSize() { return this.facet(EditorState.tabSize); }\n    /**\n    Get the proper [line-break](https://codemirror.net/6/docs/ref/#state.EditorState^lineSeparator)\n    string for this state.\n    */\n    get lineBreak() { return this.facet(EditorState.lineSeparator) || \"\\n\"; }\n    /**\n    Returns true when the editor is\n    [configured](https://codemirror.net/6/docs/ref/#state.EditorState^readOnly) to be read-only.\n    */\n    get readOnly() { return this.facet(readOnly); }\n    /**\n    Look up a translation for the given phrase (via the\n    [`phrases`](https://codemirror.net/6/docs/ref/#state.EditorState^phrases) facet), or return the\n    original string if no translation is found.\n    \n    If additional arguments are passed, they will be inserted in\n    place of markers like `$1` (for the first value) and `$2`, etc.\n    A single `$` is equivalent to `$1`, and `$$` will produce a\n    literal dollar sign.\n    */\n    phrase(phrase, ...insert) {\n        for (let map of this.facet(EditorState.phrases))\n            if (Object.prototype.hasOwnProperty.call(map, phrase)) {\n                phrase = map[phrase];\n                break;\n            }\n        if (insert.length)\n            phrase = phrase.replace(/\\$(\\$|\\d*)/g, (m, i) => {\n                if (i == \"$\")\n                    return \"$\";\n                let n = +(i || 1);\n                return !n || n > insert.length ? m : insert[n - 1];\n            });\n        return phrase;\n    }\n    /**\n    Find the values for a given language data field, provided by the\n    the [`languageData`](https://codemirror.net/6/docs/ref/#state.EditorState^languageData) facet.\n    \n    Examples of language data fields are...\n    \n    - [`\"commentTokens\"`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) for specifying\n      comment syntax.\n    - [`\"autocomplete\"`](https://codemirror.net/6/docs/ref/#autocomplete.autocompletion^config.override)\n      for providing language-specific completion sources.\n    - [`\"wordChars\"`](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer) for adding\n      characters that should be considered part of words in this\n      language.\n    - [`\"closeBrackets\"`](https://codemirror.net/6/docs/ref/#autocomplete.CloseBracketConfig) controls\n      bracket closing behavior.\n    */\n    languageDataAt(name, pos, side = -1) {\n        let values = [];\n        for (let provider of this.facet(languageData)) {\n            for (let result of provider(this, pos, side)) {\n                if (Object.prototype.hasOwnProperty.call(result, name))\n                    values.push(result[name]);\n            }\n        }\n        return values;\n    }\n    /**\n    Return a function that can categorize strings (expected to\n    represent a single [grapheme cluster](https://codemirror.net/6/docs/ref/#state.findClusterBreak))\n    into one of:\n    \n     - Word (contains an alphanumeric character or a character\n       explicitly listed in the local language's `\"wordChars\"`\n       language data, which should be a string)\n     - Space (contains only whitespace)\n     - Other (anything else)\n    */\n    charCategorizer(at) {\n        let chars = this.languageDataAt(\"wordChars\", at);\n        return makeCategorizer(chars.length ? chars[0] : \"\");\n    }\n    /**\n    Find the word at the given position, meaning the range\n    containing all [word](https://codemirror.net/6/docs/ref/#state.CharCategory.Word) characters\n    around it. If no word characters are adjacent to the position,\n    this returns null.\n    */\n    wordAt(pos) {\n        let { text, from, length } = this.doc.lineAt(pos);\n        let cat = this.charCategorizer(pos);\n        let start = pos - from, end = pos - from;\n        while (start > 0) {\n            let prev = findClusterBreak(text, start, false);\n            if (cat(text.slice(prev, start)) != CharCategory.Word)\n                break;\n            start = prev;\n        }\n        while (end < length) {\n            let next = findClusterBreak(text, end);\n            if (cat(text.slice(end, next)) != CharCategory.Word)\n                break;\n            end = next;\n        }\n        return start == end ? null : EditorSelection.range(start + from, end + from);\n    }\n}\n/**\nA facet that, when enabled, causes the editor to allow multiple\nranges to be selected. Be careful though, because by default the\neditor relies on the native DOM selection, which cannot handle\nmultiple selections. An extension like\n[`drawSelection`](https://codemirror.net/6/docs/ref/#view.drawSelection) can be used to make\nsecondary selections visible to the user.\n*/\nEditorState.allowMultipleSelections = allowMultipleSelections;\n/**\nConfigures the tab size to use in this state. The first\n(highest-precedence) value of the facet is used. If no value is\ngiven, this defaults to 4.\n*/\nEditorState.tabSize = /*@__PURE__*/Facet.define({\n    combine: values => values.length ? values[0] : 4\n});\n/**\nThe line separator to use. By default, any of `\"\\n\"`, `\"\\r\\n\"`\nand `\"\\r\"` is treated as a separator when splitting lines, and\nlines are joined with `\"\\n\"`.\n\nWhen you configure a value here, only that precise separator\nwill be used, allowing you to round-trip documents through the\neditor without normalizing line separators.\n*/\nEditorState.lineSeparator = lineSeparator;\n/**\nThis facet controls the value of the\n[`readOnly`](https://codemirror.net/6/docs/ref/#state.EditorState.readOnly) getter, which is\nconsulted by commands and extensions that implement editing\nfunctionality to determine whether they should apply. It\ndefaults to false, but when its highest-precedence value is\n`true`, such functionality disables itself.\n\nNot to be confused with\n[`EditorView.editable`](https://codemirror.net/6/docs/ref/#view.EditorView^editable), which\ncontrols whether the editor's DOM is set to be editable (and\nthus focusable).\n*/\nEditorState.readOnly = readOnly;\n/**\nRegisters translation phrases. The\n[`phrase`](https://codemirror.net/6/docs/ref/#state.EditorState.phrase) method will look through\nall objects registered with this facet to find translations for\nits argument.\n*/\nEditorState.phrases = /*@__PURE__*/Facet.define({\n    compare(a, b) {\n        let kA = Object.keys(a), kB = Object.keys(b);\n        return kA.length == kB.length && kA.every(k => a[k] == b[k]);\n    }\n});\n/**\nA facet used to register [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt) providers.\n*/\nEditorState.languageData = languageData;\n/**\nFacet used to register change filters, which are called for each\ntransaction (unless explicitly\n[disabled](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter)), and can suppress\npart of the transaction's changes.\n\nSuch a function can return `true` to indicate that it doesn't\nwant to do anything, `false` to completely stop the changes in\nthe transaction, or a set of ranges in which changes should be\nsuppressed. Such ranges are represented as an array of numbers,\nwith each pair of two numbers indicating the start and end of a\nrange. So for example `[10, 20, 100, 110]` suppresses changes\nbetween 10 and 20, and between 100 and 110.\n*/\nEditorState.changeFilter = changeFilter;\n/**\nFacet used to register a hook that gets a chance to update or\nreplace transaction specs before they are applied. This will\nonly be applied for transactions that don't have\n[`filter`](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter) set to `false`. You\ncan either return a single transaction spec (possibly the input\ntransaction), or an array of specs (which will be combined in\nthe same way as the arguments to\n[`EditorState.update`](https://codemirror.net/6/docs/ref/#state.EditorState.update)).\n\nWhen possible, it is recommended to avoid accessing\n[`Transaction.state`](https://codemirror.net/6/docs/ref/#state.Transaction.state) in a filter,\nsince it will force creation of a state that will then be\ndiscarded again, if the transaction is actually filtered.\n\n(This functionality should be used with care. Indiscriminately\nmodifying transaction is likely to break something or degrade\nthe user experience.)\n*/\nEditorState.transactionFilter = transactionFilter;\n/**\nThis is a more limited form of\n[`transactionFilter`](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter),\nwhich can only add\n[annotations](https://codemirror.net/6/docs/ref/#state.TransactionSpec.annotations) and\n[effects](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects). _But_, this type\nof filter runs even if the transaction has disabled regular\n[filtering](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter), making it suitable\nfor effects that don't need to touch the changes or selection,\nbut do want to process every transaction.\n\nExtenders run _after_ filters, when both are present.\n*/\nEditorState.transactionExtender = transactionExtender;\nCompartment.reconfigure = /*@__PURE__*/StateEffect.define();\n\n/**\nUtility function for combining behaviors to fill in a config\nobject from an array of provided configs. `defaults` should hold\ndefault values for all optional fields in `Config`.\n\nThe function will, by default, error\nwhen a field gets two values that aren't `===`-equal, but you can\nprovide combine functions per field to do something else.\n*/\nfunction combineConfig(configs, defaults, // Should hold only the optional properties of Config, but I haven't managed to express that\ncombine = {}) {\n    let result = {};\n    for (let config of configs)\n        for (let key of Object.keys(config)) {\n            let value = config[key], current = result[key];\n            if (current === undefined)\n                result[key] = value;\n            else if (current === value || value === undefined) ; // No conflict\n            else if (Object.hasOwnProperty.call(combine, key))\n                result[key] = combine[key](current, value);\n            else\n                throw new Error(\"Config merge conflict for field \" + key);\n        }\n    for (let key in defaults)\n        if (result[key] === undefined)\n            result[key] = defaults[key];\n    return result;\n}\n\n/**\nEach range is associated with a value, which must inherit from\nthis class.\n*/\nclass RangeValue {\n    /**\n    Compare this value with another value. Used when comparing\n    rangesets. The default implementation compares by identity.\n    Unless you are only creating a fixed number of unique instances\n    of your value type, it is a good idea to implement this\n    properly.\n    */\n    eq(other) { return this == other; }\n    /**\n    Create a [range](https://codemirror.net/6/docs/ref/#state.Range) with this value.\n    */\n    range(from, to = from) { return Range.create(from, to, this); }\n}\nRangeValue.prototype.startSide = RangeValue.prototype.endSide = 0;\nRangeValue.prototype.point = false;\nRangeValue.prototype.mapMode = MapMode.TrackDel;\nfunction cmpVal(a, b) {\n    return a == b || a.constructor == b.constructor && a.eq(b);\n}\n/**\nA range associates a value with a range of positions.\n*/\nclass Range {\n    constructor(\n    /**\n    The range's start position.\n    */\n    from, \n    /**\n    Its end position.\n    */\n    to, \n    /**\n    The value associated with this range.\n    */\n    value) {\n        this.from = from;\n        this.to = to;\n        this.value = value;\n    }\n    /**\n    @internal\n    */\n    static create(from, to, value) {\n        return new Range(from, to, value);\n    }\n}\nfunction cmpRange(a, b) {\n    return a.from - b.from || a.value.startSide - b.value.startSide;\n}\nclass Chunk {\n    constructor(from, to, value, \n    // Chunks are marked with the largest point that occurs\n    // in them (or -1 for no points), so that scans that are\n    // only interested in points (such as the\n    // heightmap-related logic) can skip range-only chunks.\n    maxPoint) {\n        this.from = from;\n        this.to = to;\n        this.value = value;\n        this.maxPoint = maxPoint;\n    }\n    get length() { return this.to[this.to.length - 1]; }\n    // Find the index of the given position and side. Use the ranges'\n    // `from` pos when `end == false`, `to` when `end == true`.\n    findIndex(pos, side, end, startAt = 0) {\n        let arr = end ? this.to : this.from;\n        for (let lo = startAt, hi = arr.length;;) {\n            if (lo == hi)\n                return lo;\n            let mid = (lo + hi) >> 1;\n            let diff = arr[mid] - pos || (end ? this.value[mid].endSide : this.value[mid].startSide) - side;\n            if (mid == lo)\n                return diff >= 0 ? lo : hi;\n            if (diff >= 0)\n                hi = mid;\n            else\n                lo = mid + 1;\n        }\n    }\n    between(offset, from, to, f) {\n        for (let i = this.findIndex(from, -1000000000 /* C.Far */, true), e = this.findIndex(to, 1000000000 /* C.Far */, false, i); i < e; i++)\n            if (f(this.from[i] + offset, this.to[i] + offset, this.value[i]) === false)\n                return false;\n    }\n    map(offset, changes) {\n        let value = [], from = [], to = [], newPos = -1, maxPoint = -1;\n        for (let i = 0; i < this.value.length; i++) {\n            let val = this.value[i], curFrom = this.from[i] + offset, curTo = this.to[i] + offset, newFrom, newTo;\n            if (curFrom == curTo) {\n                let mapped = changes.mapPos(curFrom, val.startSide, val.mapMode);\n                if (mapped == null)\n                    continue;\n                newFrom = newTo = mapped;\n                if (val.startSide != val.endSide) {\n                    newTo = changes.mapPos(curFrom, val.endSide);\n                    if (newTo < newFrom)\n                        continue;\n                }\n            }\n            else {\n                newFrom = changes.mapPos(curFrom, val.startSide);\n                newTo = changes.mapPos(curTo, val.endSide);\n                if (newFrom > newTo || newFrom == newTo && val.startSide > 0 && val.endSide <= 0)\n                    continue;\n            }\n            if ((newTo - newFrom || val.endSide - val.startSide) < 0)\n                continue;\n            if (newPos < 0)\n                newPos = newFrom;\n            if (val.point)\n                maxPoint = Math.max(maxPoint, newTo - newFrom);\n            value.push(val);\n            from.push(newFrom - newPos);\n            to.push(newTo - newPos);\n        }\n        return { mapped: value.length ? new Chunk(from, to, value, maxPoint) : null, pos: newPos };\n    }\n}\n/**\nA range set stores a collection of [ranges](https://codemirror.net/6/docs/ref/#state.Range) in a\nway that makes them efficient to [map](https://codemirror.net/6/docs/ref/#state.RangeSet.map) and\n[update](https://codemirror.net/6/docs/ref/#state.RangeSet.update). This is an immutable data\nstructure.\n*/\nclass RangeSet {\n    constructor(\n    /**\n    @internal\n    */\n    chunkPos, \n    /**\n    @internal\n    */\n    chunk, \n    /**\n    @internal\n    */\n    nextLayer, \n    /**\n    @internal\n    */\n    maxPoint) {\n        this.chunkPos = chunkPos;\n        this.chunk = chunk;\n        this.nextLayer = nextLayer;\n        this.maxPoint = maxPoint;\n    }\n    /**\n    @internal\n    */\n    static create(chunkPos, chunk, nextLayer, maxPoint) {\n        return new RangeSet(chunkPos, chunk, nextLayer, maxPoint);\n    }\n    /**\n    @internal\n    */\n    get length() {\n        let last = this.chunk.length - 1;\n        return last < 0 ? 0 : Math.max(this.chunkEnd(last), this.nextLayer.length);\n    }\n    /**\n    The number of ranges in the set.\n    */\n    get size() {\n        if (this.isEmpty)\n            return 0;\n        let size = this.nextLayer.size;\n        for (let chunk of this.chunk)\n            size += chunk.value.length;\n        return size;\n    }\n    /**\n    @internal\n    */\n    chunkEnd(index) {\n        return this.chunkPos[index] + this.chunk[index].length;\n    }\n    /**\n    Update the range set, optionally adding new ranges or filtering\n    out existing ones.\n    \n    (Note: The type parameter is just there as a kludge to work\n    around TypeScript variance issues that prevented `RangeSet<X>`\n    from being a subtype of `RangeSet<Y>` when `X` is a subtype of\n    `Y`.)\n    */\n    update(updateSpec) {\n        let { add = [], sort = false, filterFrom = 0, filterTo = this.length } = updateSpec;\n        let filter = updateSpec.filter;\n        if (add.length == 0 && !filter)\n            return this;\n        if (sort)\n            add = add.slice().sort(cmpRange);\n        if (this.isEmpty)\n            return add.length ? RangeSet.of(add) : this;\n        let cur = new LayerCursor(this, null, -1).goto(0), i = 0, spill = [];\n        let builder = new RangeSetBuilder();\n        while (cur.value || i < add.length) {\n            if (i < add.length && (cur.from - add[i].from || cur.startSide - add[i].value.startSide) >= 0) {\n                let range = add[i++];\n                if (!builder.addInner(range.from, range.to, range.value))\n                    spill.push(range);\n            }\n            else if (cur.rangeIndex == 1 && cur.chunkIndex < this.chunk.length &&\n                (i == add.length || this.chunkEnd(cur.chunkIndex) < add[i].from) &&\n                (!filter || filterFrom > this.chunkEnd(cur.chunkIndex) || filterTo < this.chunkPos[cur.chunkIndex]) &&\n                builder.addChunk(this.chunkPos[cur.chunkIndex], this.chunk[cur.chunkIndex])) {\n                cur.nextChunk();\n            }\n            else {\n                if (!filter || filterFrom > cur.to || filterTo < cur.from || filter(cur.from, cur.to, cur.value)) {\n                    if (!builder.addInner(cur.from, cur.to, cur.value))\n                        spill.push(Range.create(cur.from, cur.to, cur.value));\n                }\n                cur.next();\n            }\n        }\n        return builder.finishInner(this.nextLayer.isEmpty && !spill.length ? RangeSet.empty\n            : this.nextLayer.update({ add: spill, filter, filterFrom, filterTo }));\n    }\n    /**\n    Map this range set through a set of changes, return the new set.\n    */\n    map(changes) {\n        if (changes.empty || this.isEmpty)\n            return this;\n        let chunks = [], chunkPos = [], maxPoint = -1;\n        for (let i = 0; i < this.chunk.length; i++) {\n            let start = this.chunkPos[i], chunk = this.chunk[i];\n            let touch = changes.touchesRange(start, start + chunk.length);\n            if (touch === false) {\n                maxPoint = Math.max(maxPoint, chunk.maxPoint);\n                chunks.push(chunk);\n                chunkPos.push(changes.mapPos(start));\n            }\n            else if (touch === true) {\n                let { mapped, pos } = chunk.map(start, changes);\n                if (mapped) {\n                    maxPoint = Math.max(maxPoint, mapped.maxPoint);\n                    chunks.push(mapped);\n                    chunkPos.push(pos);\n                }\n            }\n        }\n        let next = this.nextLayer.map(changes);\n        return chunks.length == 0 ? next : new RangeSet(chunkPos, chunks, next || RangeSet.empty, maxPoint);\n    }\n    /**\n    Iterate over the ranges that touch the region `from` to `to`,\n    calling `f` for each. There is no guarantee that the ranges will\n    be reported in any specific order. When the callback returns\n    `false`, iteration stops.\n    */\n    between(from, to, f) {\n        if (this.isEmpty)\n            return;\n        for (let i = 0; i < this.chunk.length; i++) {\n            let start = this.chunkPos[i], chunk = this.chunk[i];\n            if (to >= start && from <= start + chunk.length &&\n                chunk.between(start, from - start, to - start, f) === false)\n                return;\n        }\n        this.nextLayer.between(from, to, f);\n    }\n    /**\n    Iterate over the ranges in this set, in order, including all\n    ranges that end at or after `from`.\n    */\n    iter(from = 0) {\n        return HeapCursor.from([this]).goto(from);\n    }\n    /**\n    @internal\n    */\n    get isEmpty() { return this.nextLayer == this; }\n    /**\n    Iterate over the ranges in a collection of sets, in order,\n    starting from `from`.\n    */\n    static iter(sets, from = 0) {\n        return HeapCursor.from(sets).goto(from);\n    }\n    /**\n    Iterate over two groups of sets, calling methods on `comparator`\n    to notify it of possible differences.\n    */\n    static compare(oldSets, newSets, \n    /**\n    This indicates how the underlying data changed between these\n    ranges, and is needed to synchronize the iteration.\n    */\n    textDiff, comparator, \n    /**\n    Can be used to ignore all non-point ranges, and points below\n    the given size. When -1, all ranges are compared.\n    */\n    minPointSize = -1) {\n        let a = oldSets.filter(set => set.maxPoint > 0 || !set.isEmpty && set.maxPoint >= minPointSize);\n        let b = newSets.filter(set => set.maxPoint > 0 || !set.isEmpty && set.maxPoint >= minPointSize);\n        let sharedChunks = findSharedChunks(a, b, textDiff);\n        let sideA = new SpanCursor(a, sharedChunks, minPointSize);\n        let sideB = new SpanCursor(b, sharedChunks, minPointSize);\n        textDiff.iterGaps((fromA, fromB, length) => compare(sideA, fromA, sideB, fromB, length, comparator));\n        if (textDiff.empty && textDiff.length == 0)\n            compare(sideA, 0, sideB, 0, 0, comparator);\n    }\n    /**\n    Compare the contents of two groups of range sets, returning true\n    if they are equivalent in the given range.\n    */\n    static eq(oldSets, newSets, from = 0, to) {\n        if (to == null)\n            to = 1000000000 /* C.Far */ - 1;\n        let a = oldSets.filter(set => !set.isEmpty && newSets.indexOf(set) < 0);\n        let b = newSets.filter(set => !set.isEmpty && oldSets.indexOf(set) < 0);\n        if (a.length != b.length)\n            return false;\n        if (!a.length)\n            return true;\n        let sharedChunks = findSharedChunks(a, b);\n        let sideA = new SpanCursor(a, sharedChunks, 0).goto(from), sideB = new SpanCursor(b, sharedChunks, 0).goto(from);\n        for (;;) {\n            if (sideA.to != sideB.to ||\n                !sameValues(sideA.active, sideB.active) ||\n                sideA.point && (!sideB.point || !cmpVal(sideA.point, sideB.point)))\n                return false;\n            if (sideA.to > to)\n                return true;\n            sideA.next();\n            sideB.next();\n        }\n    }\n    /**\n    Iterate over a group of range sets at the same time, notifying\n    the iterator about the ranges covering every given piece of\n    content. Returns the open count (see\n    [`SpanIterator.span`](https://codemirror.net/6/docs/ref/#state.SpanIterator.span)) at the end\n    of the iteration.\n    */\n    static spans(sets, from, to, iterator, \n    /**\n    When given and greater than -1, only points of at least this\n    size are taken into account.\n    */\n    minPointSize = -1) {\n        let cursor = new SpanCursor(sets, null, minPointSize).goto(from), pos = from;\n        let openRanges = cursor.openStart;\n        for (;;) {\n            let curTo = Math.min(cursor.to, to);\n            if (cursor.point) {\n                let active = cursor.activeForPoint(cursor.to);\n                let openCount = cursor.pointFrom < from ? active.length + 1\n                    : cursor.point.startSide < 0 ? active.length\n                        : Math.min(active.length, openRanges);\n                iterator.point(pos, curTo, cursor.point, active, openCount, cursor.pointRank);\n                openRanges = Math.min(cursor.openEnd(curTo), active.length);\n            }\n            else if (curTo > pos) {\n                iterator.span(pos, curTo, cursor.active, openRanges);\n                openRanges = cursor.openEnd(curTo);\n            }\n            if (cursor.to > to)\n                return openRanges + (cursor.point && cursor.to > to ? 1 : 0);\n            pos = cursor.to;\n            cursor.next();\n        }\n    }\n    /**\n    Create a range set for the given range or array of ranges. By\n    default, this expects the ranges to be _sorted_ (by start\n    position and, if two start at the same position,\n    `value.startSide`). You can pass `true` as second argument to\n    cause the method to sort them.\n    */\n    static of(ranges, sort = false) {\n        let build = new RangeSetBuilder();\n        for (let range of ranges instanceof Range ? [ranges] : sort ? lazySort(ranges) : ranges)\n            build.add(range.from, range.to, range.value);\n        return build.finish();\n    }\n    /**\n    Join an array of range sets into a single set.\n    */\n    static join(sets) {\n        if (!sets.length)\n            return RangeSet.empty;\n        let result = sets[sets.length - 1];\n        for (let i = sets.length - 2; i >= 0; i--) {\n            for (let layer = sets[i]; layer != RangeSet.empty; layer = layer.nextLayer)\n                result = new RangeSet(layer.chunkPos, layer.chunk, result, Math.max(layer.maxPoint, result.maxPoint));\n        }\n        return result;\n    }\n}\n/**\nThe empty set of ranges.\n*/\nRangeSet.empty = /*@__PURE__*/new RangeSet([], [], null, -1);\nfunction lazySort(ranges) {\n    if (ranges.length > 1)\n        for (let prev = ranges[0], i = 1; i < ranges.length; i++) {\n            let cur = ranges[i];\n            if (cmpRange(prev, cur) > 0)\n                return ranges.slice().sort(cmpRange);\n            prev = cur;\n        }\n    return ranges;\n}\nRangeSet.empty.nextLayer = RangeSet.empty;\n/**\nA range set builder is a data structure that helps build up a\n[range set](https://codemirror.net/6/docs/ref/#state.RangeSet) directly, without first allocating\nan array of [`Range`](https://codemirror.net/6/docs/ref/#state.Range) objects.\n*/\nclass RangeSetBuilder {\n    finishChunk(newArrays) {\n        this.chunks.push(new Chunk(this.from, this.to, this.value, this.maxPoint));\n        this.chunkPos.push(this.chunkStart);\n        this.chunkStart = -1;\n        this.setMaxPoint = Math.max(this.setMaxPoint, this.maxPoint);\n        this.maxPoint = -1;\n        if (newArrays) {\n            this.from = [];\n            this.to = [];\n            this.value = [];\n        }\n    }\n    /**\n    Create an empty builder.\n    */\n    constructor() {\n        this.chunks = [];\n        this.chunkPos = [];\n        this.chunkStart = -1;\n        this.last = null;\n        this.lastFrom = -1000000000 /* C.Far */;\n        this.lastTo = -1000000000 /* C.Far */;\n        this.from = [];\n        this.to = [];\n        this.value = [];\n        this.maxPoint = -1;\n        this.setMaxPoint = -1;\n        this.nextLayer = null;\n    }\n    /**\n    Add a range. Ranges should be added in sorted (by `from` and\n    `value.startSide`) order.\n    */\n    add(from, to, value) {\n        if (!this.addInner(from, to, value))\n            (this.nextLayer || (this.nextLayer = new RangeSetBuilder)).add(from, to, value);\n    }\n    /**\n    @internal\n    */\n    addInner(from, to, value) {\n        let diff = from - this.lastTo || value.startSide - this.last.endSide;\n        if (diff <= 0 && (from - this.lastFrom || value.startSide - this.last.startSide) < 0)\n            throw new Error(\"Ranges must be added sorted by `from` position and `startSide`\");\n        if (diff < 0)\n            return false;\n        if (this.from.length == 250 /* C.ChunkSize */)\n            this.finishChunk(true);\n        if (this.chunkStart < 0)\n            this.chunkStart = from;\n        this.from.push(from - this.chunkStart);\n        this.to.push(to - this.chunkStart);\n        this.last = value;\n        this.lastFrom = from;\n        this.lastTo = to;\n        this.value.push(value);\n        if (value.point)\n            this.maxPoint = Math.max(this.maxPoint, to - from);\n        return true;\n    }\n    /**\n    @internal\n    */\n    addChunk(from, chunk) {\n        if ((from - this.lastTo || chunk.value[0].startSide - this.last.endSide) < 0)\n            return false;\n        if (this.from.length)\n            this.finishChunk(true);\n        this.setMaxPoint = Math.max(this.setMaxPoint, chunk.maxPoint);\n        this.chunks.push(chunk);\n        this.chunkPos.push(from);\n        let last = chunk.value.length - 1;\n        this.last = chunk.value[last];\n        this.lastFrom = chunk.from[last] + from;\n        this.lastTo = chunk.to[last] + from;\n        return true;\n    }\n    /**\n    Finish the range set. Returns the new set. The builder can't be\n    used anymore after this has been called.\n    */\n    finish() { return this.finishInner(RangeSet.empty); }\n    /**\n    @internal\n    */\n    finishInner(next) {\n        if (this.from.length)\n            this.finishChunk(false);\n        if (this.chunks.length == 0)\n            return next;\n        let result = RangeSet.create(this.chunkPos, this.chunks, this.nextLayer ? this.nextLayer.finishInner(next) : next, this.setMaxPoint);\n        this.from = null; // Make sure further `add` calls produce errors\n        return result;\n    }\n}\nfunction findSharedChunks(a, b, textDiff) {\n    let inA = new Map();\n    for (let set of a)\n        for (let i = 0; i < set.chunk.length; i++)\n            if (set.chunk[i].maxPoint <= 0)\n                inA.set(set.chunk[i], set.chunkPos[i]);\n    let shared = new Set();\n    for (let set of b)\n        for (let i = 0; i < set.chunk.length; i++) {\n            let known = inA.get(set.chunk[i]);\n            if (known != null && (textDiff ? textDiff.mapPos(known) : known) == set.chunkPos[i] &&\n                !(textDiff === null || textDiff === void 0 ? void 0 : textDiff.touchesRange(known, known + set.chunk[i].length)))\n                shared.add(set.chunk[i]);\n        }\n    return shared;\n}\nclass LayerCursor {\n    constructor(layer, skip, minPoint, rank = 0) {\n        this.layer = layer;\n        this.skip = skip;\n        this.minPoint = minPoint;\n        this.rank = rank;\n    }\n    get startSide() { return this.value ? this.value.startSide : 0; }\n    get endSide() { return this.value ? this.value.endSide : 0; }\n    goto(pos, side = -1000000000 /* C.Far */) {\n        this.chunkIndex = this.rangeIndex = 0;\n        this.gotoInner(pos, side, false);\n        return this;\n    }\n    gotoInner(pos, side, forward) {\n        while (this.chunkIndex < this.layer.chunk.length) {\n            let next = this.layer.chunk[this.chunkIndex];\n            if (!(this.skip && this.skip.has(next) ||\n                this.layer.chunkEnd(this.chunkIndex) < pos ||\n                next.maxPoint < this.minPoint))\n                break;\n            this.chunkIndex++;\n            forward = false;\n        }\n        if (this.chunkIndex < this.layer.chunk.length) {\n            let rangeIndex = this.layer.chunk[this.chunkIndex].findIndex(pos - this.layer.chunkPos[this.chunkIndex], side, true);\n            if (!forward || this.rangeIndex < rangeIndex)\n                this.setRangeIndex(rangeIndex);\n        }\n        this.next();\n    }\n    forward(pos, side) {\n        if ((this.to - pos || this.endSide - side) < 0)\n            this.gotoInner(pos, side, true);\n    }\n    next() {\n        for (;;) {\n            if (this.chunkIndex == this.layer.chunk.length) {\n                this.from = this.to = 1000000000 /* C.Far */;\n                this.value = null;\n                break;\n            }\n            else {\n                let chunkPos = this.layer.chunkPos[this.chunkIndex], chunk = this.layer.chunk[this.chunkIndex];\n                let from = chunkPos + chunk.from[this.rangeIndex];\n                this.from = from;\n                this.to = chunkPos + chunk.to[this.rangeIndex];\n                this.value = chunk.value[this.rangeIndex];\n                this.setRangeIndex(this.rangeIndex + 1);\n                if (this.minPoint < 0 || this.value.point && this.to - this.from >= this.minPoint)\n                    break;\n            }\n        }\n    }\n    setRangeIndex(index) {\n        if (index == this.layer.chunk[this.chunkIndex].value.length) {\n            this.chunkIndex++;\n            if (this.skip) {\n                while (this.chunkIndex < this.layer.chunk.length && this.skip.has(this.layer.chunk[this.chunkIndex]))\n                    this.chunkIndex++;\n            }\n            this.rangeIndex = 0;\n        }\n        else {\n            this.rangeIndex = index;\n        }\n    }\n    nextChunk() {\n        this.chunkIndex++;\n        this.rangeIndex = 0;\n        this.next();\n    }\n    compare(other) {\n        return this.from - other.from || this.startSide - other.startSide || this.rank - other.rank ||\n            this.to - other.to || this.endSide - other.endSide;\n    }\n}\nclass HeapCursor {\n    constructor(heap) {\n        this.heap = heap;\n    }\n    static from(sets, skip = null, minPoint = -1) {\n        let heap = [];\n        for (let i = 0; i < sets.length; i++) {\n            for (let cur = sets[i]; !cur.isEmpty; cur = cur.nextLayer) {\n                if (cur.maxPoint >= minPoint)\n                    heap.push(new LayerCursor(cur, skip, minPoint, i));\n            }\n        }\n        return heap.length == 1 ? heap[0] : new HeapCursor(heap);\n    }\n    get startSide() { return this.value ? this.value.startSide : 0; }\n    goto(pos, side = -1000000000 /* C.Far */) {\n        for (let cur of this.heap)\n            cur.goto(pos, side);\n        for (let i = this.heap.length >> 1; i >= 0; i--)\n            heapBubble(this.heap, i);\n        this.next();\n        return this;\n    }\n    forward(pos, side) {\n        for (let cur of this.heap)\n            cur.forward(pos, side);\n        for (let i = this.heap.length >> 1; i >= 0; i--)\n            heapBubble(this.heap, i);\n        if ((this.to - pos || this.value.endSide - side) < 0)\n            this.next();\n    }\n    next() {\n        if (this.heap.length == 0) {\n            this.from = this.to = 1000000000 /* C.Far */;\n            this.value = null;\n            this.rank = -1;\n        }\n        else {\n            let top = this.heap[0];\n            this.from = top.from;\n            this.to = top.to;\n            this.value = top.value;\n            this.rank = top.rank;\n            if (top.value)\n                top.next();\n            heapBubble(this.heap, 0);\n        }\n    }\n}\nfunction heapBubble(heap, index) {\n    for (let cur = heap[index];;) {\n        let childIndex = (index << 1) + 1;\n        if (childIndex >= heap.length)\n            break;\n        let child = heap[childIndex];\n        if (childIndex + 1 < heap.length && child.compare(heap[childIndex + 1]) >= 0) {\n            child = heap[childIndex + 1];\n            childIndex++;\n        }\n        if (cur.compare(child) < 0)\n            break;\n        heap[childIndex] = cur;\n        heap[index] = child;\n        index = childIndex;\n    }\n}\nclass SpanCursor {\n    constructor(sets, skip, minPoint) {\n        this.minPoint = minPoint;\n        this.active = [];\n        this.activeTo = [];\n        this.activeRank = [];\n        this.minActive = -1;\n        // A currently active point range, if any\n        this.point = null;\n        this.pointFrom = 0;\n        this.pointRank = 0;\n        this.to = -1000000000 /* C.Far */;\n        this.endSide = 0;\n        // The amount of open active ranges at the start of the iterator.\n        // Not including points.\n        this.openStart = -1;\n        this.cursor = HeapCursor.from(sets, skip, minPoint);\n    }\n    goto(pos, side = -1000000000 /* C.Far */) {\n        this.cursor.goto(pos, side);\n        this.active.length = this.activeTo.length = this.activeRank.length = 0;\n        this.minActive = -1;\n        this.to = pos;\n        this.endSide = side;\n        this.openStart = -1;\n        this.next();\n        return this;\n    }\n    forward(pos, side) {\n        while (this.minActive > -1 && (this.activeTo[this.minActive] - pos || this.active[this.minActive].endSide - side) < 0)\n            this.removeActive(this.minActive);\n        this.cursor.forward(pos, side);\n    }\n    removeActive(index) {\n        remove(this.active, index);\n        remove(this.activeTo, index);\n        remove(this.activeRank, index);\n        this.minActive = findMinIndex(this.active, this.activeTo);\n    }\n    addActive(trackOpen) {\n        let i = 0, { value, to, rank } = this.cursor;\n        // Organize active marks by rank first, then by size\n        while (i < this.activeRank.length && (rank - this.activeRank[i] || to - this.activeTo[i]) > 0)\n            i++;\n        insert(this.active, i, value);\n        insert(this.activeTo, i, to);\n        insert(this.activeRank, i, rank);\n        if (trackOpen)\n            insert(trackOpen, i, this.cursor.from);\n        this.minActive = findMinIndex(this.active, this.activeTo);\n    }\n    // After calling this, if `this.point` != null, the next range is a\n    // point. Otherwise, it's a regular range, covered by `this.active`.\n    next() {\n        let from = this.to, wasPoint = this.point;\n        this.point = null;\n        let trackOpen = this.openStart < 0 ? [] : null;\n        for (;;) {\n            let a = this.minActive;\n            if (a > -1 && (this.activeTo[a] - this.cursor.from || this.active[a].endSide - this.cursor.startSide) < 0) {\n                if (this.activeTo[a] > from) {\n                    this.to = this.activeTo[a];\n                    this.endSide = this.active[a].endSide;\n                    break;\n                }\n                this.removeActive(a);\n                if (trackOpen)\n                    remove(trackOpen, a);\n            }\n            else if (!this.cursor.value) {\n                this.to = this.endSide = 1000000000 /* C.Far */;\n                break;\n            }\n            else if (this.cursor.from > from) {\n                this.to = this.cursor.from;\n                this.endSide = this.cursor.startSide;\n                break;\n            }\n            else {\n                let nextVal = this.cursor.value;\n                if (!nextVal.point) { // Opening a range\n                    this.addActive(trackOpen);\n                    this.cursor.next();\n                }\n                else if (wasPoint && this.cursor.to == this.to && this.cursor.from < this.cursor.to) {\n                    // Ignore any non-empty points that end precisely at the end of the prev point\n                    this.cursor.next();\n                }\n                else { // New point\n                    this.point = nextVal;\n                    this.pointFrom = this.cursor.from;\n                    this.pointRank = this.cursor.rank;\n                    this.to = this.cursor.to;\n                    this.endSide = nextVal.endSide;\n                    this.cursor.next();\n                    this.forward(this.to, this.endSide);\n                    break;\n                }\n            }\n        }\n        if (trackOpen) {\n            this.openStart = 0;\n            for (let i = trackOpen.length - 1; i >= 0 && trackOpen[i] < from; i--)\n                this.openStart++;\n        }\n    }\n    activeForPoint(to) {\n        if (!this.active.length)\n            return this.active;\n        let active = [];\n        for (let i = this.active.length - 1; i >= 0; i--) {\n            if (this.activeRank[i] < this.pointRank)\n                break;\n            if (this.activeTo[i] > to || this.activeTo[i] == to && this.active[i].endSide >= this.point.endSide)\n                active.push(this.active[i]);\n        }\n        return active.reverse();\n    }\n    openEnd(to) {\n        let open = 0;\n        for (let i = this.activeTo.length - 1; i >= 0 && this.activeTo[i] > to; i--)\n            open++;\n        return open;\n    }\n}\nfunction compare(a, startA, b, startB, length, comparator) {\n    a.goto(startA);\n    b.goto(startB);\n    let endB = startB + length;\n    let pos = startB, dPos = startB - startA;\n    let bounds = !!comparator.boundChange;\n    for (let boundChange = false;;) {\n        let dEnd = (a.to + dPos) - b.to, diff = dEnd || a.endSide - b.endSide;\n        let end = diff < 0 ? a.to + dPos : b.to, clipEnd = Math.min(end, endB);\n        let point = a.point || b.point;\n        if (point) {\n            if (!(a.point && b.point && cmpVal(a.point, b.point) &&\n                sameValues(a.activeForPoint(a.to), b.activeForPoint(b.to))))\n                comparator.comparePoint(pos, clipEnd, a.point, b.point);\n            boundChange = false;\n        }\n        else {\n            if (boundChange)\n                comparator.boundChange(pos);\n            if (clipEnd > pos && !sameValues(a.active, b.active))\n                comparator.compareRange(pos, clipEnd, a.active, b.active);\n            if (bounds && clipEnd < endB && (dEnd || a.openEnd(end) != b.openEnd(end)))\n                boundChange = true;\n        }\n        if (end > endB)\n            break;\n        pos = end;\n        if (diff <= 0)\n            a.next();\n        if (diff >= 0)\n            b.next();\n    }\n}\nfunction sameValues(a, b) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++)\n        if (a[i] != b[i] && !cmpVal(a[i], b[i]))\n            return false;\n    return true;\n}\nfunction remove(array, index) {\n    for (let i = index, e = array.length - 1; i < e; i++)\n        array[i] = array[i + 1];\n    array.pop();\n}\nfunction insert(array, index, value) {\n    for (let i = array.length - 1; i >= index; i--)\n        array[i + 1] = array[i];\n    array[index] = value;\n}\nfunction findMinIndex(value, array) {\n    let found = -1, foundPos = 1000000000 /* C.Far */;\n    for (let i = 0; i < array.length; i++)\n        if ((array[i] - foundPos || value[i].endSide - value[found].endSide) < 0) {\n            found = i;\n            foundPos = array[i];\n        }\n    return found;\n}\n\n/**\nCount the column position at the given offset into the string,\ntaking extending characters and tab size into account.\n*/\nfunction countColumn(string, tabSize, to = string.length) {\n    let n = 0;\n    for (let i = 0; i < to && i < string.length;) {\n        if (string.charCodeAt(i) == 9) {\n            n += tabSize - (n % tabSize);\n            i++;\n        }\n        else {\n            n++;\n            i = findClusterBreak(string, i);\n        }\n    }\n    return n;\n}\n/**\nFind the offset that corresponds to the given column position in a\nstring, taking extending characters and tab size into account. By\ndefault, the string length is returned when it is too short to\nreach the column. Pass `strict` true to make it return -1 in that\nsituation.\n*/\nfunction findColumn(string, col, tabSize, strict) {\n    for (let i = 0, n = 0;;) {\n        if (n >= col)\n            return i;\n        if (i == string.length)\n            break;\n        n += string.charCodeAt(i) == 9 ? tabSize - (n % tabSize) : 1;\n        i = findClusterBreak(string, i);\n    }\n    return strict === true ? -1 : string.length;\n}\n\nexport { Annotation, AnnotationType, ChangeDesc, ChangeSet, CharCategory, Compartment, EditorSelection, EditorState, Facet, Line, MapMode, Prec, Range, RangeSet, RangeSetBuilder, RangeValue, SelectionRange, StateEffect, StateEffectType, StateField, Text, Transaction, codePointAt, codePointSize, combineConfig, countColumn, findClusterBreak, findColumn, fromCodePoint };\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport const HDS_CODE_BLOCK_WHITE = '#efeff1';\nexport const HDS_CODE_BLOCK_BLUE = '#2d8eff';\nexport const HDS_CODE_BLOCK_GREEN = '#86ff13';\nexport const HDS_CODE_BLOCK_ORANGE = '#ffa800';\nexport const HDS_CODE_BLOCK_PURPLE = '#c76cff';\nexport const HDS_CODE_BLOCK_RED = '#ff3b20';\nexport const HDS_CODE_BLOCK_CYAN = '#32fff7';\n\nexport const HDS_CODE_BLOCK_LINE_HIGHLIGHT = 'rgba(0, 74, 222, 0.2)';\nexport const HDS_CODE_BLOCK_LINE_HIGHLIGHT_BORDER = '#1b5fe5';\n\nexport const HDS_CODE_EDITOR_COLOR_FOREGROUND_PRIMARY = '#d5d7db';\nexport const HDS_CODE_EDITOR_COLOR_FOREGROUND_FAINT = '#878a8f';\nexport const HDS_CODE_EDITOR_COLOR_FOREGROUND_CRITICAL = '#EF3016';\n\nexport const HDS_CODE_EDITOR_COLOR_SURFACE_PRIMARY = '#0D0E12';\nexport const HDS_CODE_EDITOR_COLOR_SURFACE_FAINT = '#15181e';\nexport const HDS_CODE_EDITOR_COLOR_SURFACE_INTERACTIVE_ACTIVE = '#2B303C';\nexport const HDS_CODE_EDITOR_COLOR_FOCUS_ACTION_INTERNAL = '#9BC7FD';\nexport const HDS_CODE_EDITOR_COLOR_FOCUS_ACTION_EXTERNAL = '#0D69F2';\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n  return function() {\n    return find.call(this.children, match);\n  };\n}\n\nfunction childFirst() {\n  return this.firstElementChild;\n}\n\nexport default function(match) {\n  return this.select(match == null ? childFirst\n      : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n  return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n  return function() {\n    return filter.call(this.children, match);\n  };\n}\n\nexport default function(match) {\n  return this.selectAll(match == null ? children\n      : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","export default function(update) {\n  return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don’t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = new Map,\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n      if (nodeByKeyValue.has(keyValue)) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue.set(keyValue, node);\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = key.call(parent, data[i], i, data) + \"\";\n    if (node = nodeByKeyValue.get(keyValue)) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue.delete(keyValue);\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction datum(node) {\n  return node.__data__;\n}\n\nexport default function(value, key) {\n  if (!arguments.length) return Array.from(this, datum);\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n  return typeof data === \"object\" && \"length\" in data\n    ? data // Array, TypedArray, NodeList, array-like\n    : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n  if (!compare) compare = ascending;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","function propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nexport default function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n","function classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nexport default function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n","function textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n","function htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n","function raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n  return this.each(raise);\n}\n","function lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n  return this.each(lower);\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n  return null;\n}\n\nexport default function(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n","function remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n  return this.each(remove);\n}\n","function selection_cloneShallow() {\n  var clone = this.cloneNode(false), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n  var clone = this.cloneNode(true), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","function contextListener(listener) {\n  return function(event) {\n    listener.call(this, event, this.__data__);\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, options) {\n  return function() {\n    var on = this.__on, o, listener = contextListener(value);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n        this.addEventListener(o.type, o.listener = listener, o.options = options);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, options);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, options) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n  return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nexport default function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n  return this;\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  selectChild: selection_selectChild,\n  selectChildren: selection_selectChildren,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  selection: selection_selection,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch,\n  [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n  return function() {\n    return array(select.apply(this, arguments));\n  };\n}\n\nexport default function(select) {\n  if (typeof select === \"function\") select = arrayAll(select);\n  else select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  if (typeof onenter === \"function\") {\n    enter = onenter(enter);\n    if (enter) enter = enter.selection();\n  } else {\n    enter = enter.append(onenter + \"\");\n  }\n  if (onupdate != null) {\n    update = onupdate(update);\n    if (update) update = update.selection();\n  }\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n  var selection = context.selection ? context.selection() : context;\n\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n","export default function() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n","export default function() {\n  return Array.from(this);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n","export default function() {\n  let size = 0;\n  for (const node of this) ++size; // eslint-disable-line no-unused-vars\n  return size;\n}\n","export default function() {\n  return !this.node();\n}\n","export default function(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n","export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n","export default function*() {\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) yield node;\n    }\n  }\n}\n","function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n","function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n","export default function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n\nexport function childMatcher(selector) {\n  return function(node) {\n    return node.matches(selector);\n  };\n}\n\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nexport default function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","export default function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n","import { COMPLETION_PENDING } from './completion-states';\n\nexport const INITIAL_STATE = {\n  completionState: COMPLETION_PENDING,\n\n  /**\n   * If this TaskInstance runs to completion by returning a property\n   * other than a rejecting promise, this property will be set\n   * with that value.\n   *\n   * @memberof TaskInstance\n   * @instance\n   * @readOnly\n   */\n  value: null,\n\n  /**\n   * If this TaskInstance is canceled or throws an error (or yields\n   * a promise that rejects), this property will be set with that error.\n   * Otherwise, it is null.\n   *\n   * @memberof TaskInstance\n   * @instance\n   * @readOnly\n   */\n  error: null,\n\n  /**\n   * True if the task instance is fulfilled.\n   *\n   * @memberof TaskInstance\n   * @instance\n   * @readOnly\n   */\n  isSuccessful: false,\n\n  /**\n   * True if the task instance resolves to a rejection.\n   *\n   * @memberof TaskInstance\n   * @instance\n   * @readOnly\n   */\n  isError: false,\n\n  /**\n   * True if the task instance is canceled\n   *\n   * @memberof TaskInstance\n   * @instance\n   * @readOnly\n   */\n  isCanceled: false,\n\n  /**\n   * True if the task instance has started, else false.\n   *\n   * @memberof TaskInstance\n   * @instance\n   * @readOnly\n   */\n  hasStarted: false,\n\n  /**\n   * True if the task has run to completion.\n   *\n   * @memberof TaskInstance\n   * @instance\n   * @readOnly\n   */\n  isFinished: false,\n};\n","/**\n * Data mask pattern reference\n * @type {Object}\n */\nexports.Patterns = {\n  PATTERN000: 0,\n  PATTERN001: 1,\n  PATTERN010: 2,\n  PATTERN011: 3,\n  PATTERN100: 4,\n  PATTERN101: 5,\n  PATTERN110: 6,\n  PATTERN111: 7\n}\n\n/**\n * Weighted penalty scores for the undesirable features\n * @type {Object}\n */\nconst PenaltyScores = {\n  N1: 3,\n  N2: 3,\n  N3: 40,\n  N4: 10\n}\n\n/**\n * Check if mask pattern value is valid\n *\n * @param  {Number}  mask    Mask pattern\n * @return {Boolean}         true if valid, false otherwise\n */\nexports.isValid = function isValid (mask) {\n  return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7\n}\n\n/**\n * Returns mask pattern from a value.\n * If value is not valid, returns undefined\n *\n * @param  {Number|String} value        Mask pattern value\n * @return {Number}                     Valid mask pattern or undefined\n */\nexports.from = function from (value) {\n  return exports.isValid(value) ? parseInt(value, 10) : undefined\n}\n\n/**\n* Find adjacent modules in row/column with the same color\n* and assign a penalty value.\n*\n* Points: N1 + i\n* i is the amount by which the number of adjacent modules of the same color exceeds 5\n*/\nexports.getPenaltyN1 = function getPenaltyN1 (data) {\n  const size = data.size\n  let points = 0\n  let sameCountCol = 0\n  let sameCountRow = 0\n  let lastCol = null\n  let lastRow = null\n\n  for (let row = 0; row < size; row++) {\n    sameCountCol = sameCountRow = 0\n    lastCol = lastRow = null\n\n    for (let col = 0; col < size; col++) {\n      let module = data.get(row, col)\n      if (module === lastCol) {\n        sameCountCol++\n      } else {\n        if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n        lastCol = module\n        sameCountCol = 1\n      }\n\n      module = data.get(col, row)\n      if (module === lastRow) {\n        sameCountRow++\n      } else {\n        if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n        lastRow = module\n        sameCountRow = 1\n      }\n    }\n\n    if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n    if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n  }\n\n  return points\n}\n\n/**\n * Find 2x2 blocks with the same color and assign a penalty value\n *\n * Points: N2 * (m - 1) * (n - 1)\n */\nexports.getPenaltyN2 = function getPenaltyN2 (data) {\n  const size = data.size\n  let points = 0\n\n  for (let row = 0; row < size - 1; row++) {\n    for (let col = 0; col < size - 1; col++) {\n      const last = data.get(row, col) +\n        data.get(row, col + 1) +\n        data.get(row + 1, col) +\n        data.get(row + 1, col + 1)\n\n      if (last === 4 || last === 0) points++\n    }\n  }\n\n  return points * PenaltyScores.N2\n}\n\n/**\n * Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,\n * preceded or followed by light area 4 modules wide\n *\n * Points: N3 * number of pattern found\n */\nexports.getPenaltyN3 = function getPenaltyN3 (data) {\n  const size = data.size\n  let points = 0\n  let bitsCol = 0\n  let bitsRow = 0\n\n  for (let row = 0; row < size; row++) {\n    bitsCol = bitsRow = 0\n    for (let col = 0; col < size; col++) {\n      bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)\n      if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++\n\n      bitsRow = ((bitsRow << 1) & 0x7FF) | data.get(col, row)\n      if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++\n    }\n  }\n\n  return points * PenaltyScores.N3\n}\n\n/**\n * Calculate proportion of dark modules in entire symbol\n *\n * Points: N4 * k\n *\n * k is the rating of the deviation of the proportion of dark modules\n * in the symbol from 50% in steps of 5%\n */\nexports.getPenaltyN4 = function getPenaltyN4 (data) {\n  let darkCount = 0\n  const modulesCount = data.data.length\n\n  for (let i = 0; i < modulesCount; i++) darkCount += data.data[i]\n\n  const k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)\n\n  return k * PenaltyScores.N4\n}\n\n/**\n * Return mask value at given position\n *\n * @param  {Number} maskPattern Pattern reference value\n * @param  {Number} i           Row\n * @param  {Number} j           Column\n * @return {Boolean}            Mask value\n */\nfunction getMaskAt (maskPattern, i, j) {\n  switch (maskPattern) {\n    case exports.Patterns.PATTERN000: return (i + j) % 2 === 0\n    case exports.Patterns.PATTERN001: return i % 2 === 0\n    case exports.Patterns.PATTERN010: return j % 3 === 0\n    case exports.Patterns.PATTERN011: return (i + j) % 3 === 0\n    case exports.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0\n    case exports.Patterns.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0\n    case exports.Patterns.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0\n    case exports.Patterns.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0\n\n    default: throw new Error('bad maskPattern:' + maskPattern)\n  }\n}\n\n/**\n * Apply a mask pattern to a BitMatrix\n *\n * @param  {Number}    pattern Pattern reference number\n * @param  {BitMatrix} data    BitMatrix data\n */\nexports.applyMask = function applyMask (pattern, data) {\n  const size = data.size\n\n  for (let col = 0; col < size; col++) {\n    for (let row = 0; row < size; row++) {\n      if (data.isReserved(row, col)) continue\n      data.xor(row, col, getMaskAt(pattern, row, col))\n    }\n  }\n}\n\n/**\n * Returns the best mask pattern for data\n *\n * @param  {BitMatrix} data\n * @return {Number} Mask pattern reference number\n */\nexports.getBestMask = function getBestMask (data, setupFormatFunc) {\n  const numPatterns = Object.keys(exports.Patterns).length\n  let bestPattern = 0\n  let lowerPenalty = Infinity\n\n  for (let p = 0; p < numPatterns; p++) {\n    setupFormatFunc(p)\n    exports.applyMask(p, data)\n\n    // Calculate penalty\n    const penalty =\n      exports.getPenaltyN1(data) +\n      exports.getPenaltyN2(data) +\n      exports.getPenaltyN3(data) +\n      exports.getPenaltyN4(data)\n\n    // Undo previously applied mask\n    exports.applyMask(p, data)\n\n    if (penalty < lowerPenalty) {\n      lowerPenalty = penalty\n      bestPattern = p\n    }\n  }\n\n  return bestPattern\n}\n","import { NodeProp } from '@lezer/common';\n\nlet nextTagID = 0;\n/**\nHighlighting tags are markers that denote a highlighting category.\nThey are [associated](#highlight.styleTags) with parts of a syntax\ntree by a language mode, and then mapped to an actual CSS style by\na [highlighter](#highlight.Highlighter).\n\nBecause syntax tree node types and highlight styles have to be\nable to talk the same language, CodeMirror uses a mostly _closed_\n[vocabulary](#highlight.tags) of syntax tags (as opposed to\ntraditional open string-based systems, which make it hard for\nhighlighting themes to cover all the tokens produced by the\nvarious languages).\n\nIt _is_ possible to [define](#highlight.Tag^define) your own\nhighlighting tags for system-internal use (where you control both\nthe language package and the highlighter), but such tags will not\nbe picked up by regular highlighters (though you can derive them\nfrom standard tags to allow highlighters to fall back to those).\n*/\nclass Tag {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The optional name of the base tag @internal\n    */\n    name, \n    /**\n    The set of this tag and all its parent tags, starting with\n    this one itself and sorted in order of decreasing specificity.\n    */\n    set, \n    /**\n    The base unmodified tag that this one is based on, if it's\n    modified @internal\n    */\n    base, \n    /**\n    The modifiers applied to this.base @internal\n    */\n    modified) {\n        this.name = name;\n        this.set = set;\n        this.base = base;\n        this.modified = modified;\n        /**\n        @internal\n        */\n        this.id = nextTagID++;\n    }\n    toString() {\n        let { name } = this;\n        for (let mod of this.modified)\n            if (mod.name)\n                name = `${mod.name}(${name})`;\n        return name;\n    }\n    static define(nameOrParent, parent) {\n        let name = typeof nameOrParent == \"string\" ? nameOrParent : \"?\";\n        if (nameOrParent instanceof Tag)\n            parent = nameOrParent;\n        if (parent === null || parent === void 0 ? void 0 : parent.base)\n            throw new Error(\"Can not derive from a modified tag\");\n        let tag = new Tag(name, [], null, []);\n        tag.set.push(tag);\n        if (parent)\n            for (let t of parent.set)\n                tag.set.push(t);\n        return tag;\n    }\n    /**\n    Define a tag _modifier_, which is a function that, given a tag,\n    will return a tag that is a subtag of the original. Applying the\n    same modifier to a twice tag will return the same value (`m1(t1)\n    == m1(t1)`) and applying multiple modifiers will, regardless or\n    order, produce the same tag (`m1(m2(t1)) == m2(m1(t1))`).\n    \n    When multiple modifiers are applied to a given base tag, each\n    smaller set of modifiers is registered as a parent, so that for\n    example `m1(m2(m3(t1)))` is a subtype of `m1(m2(t1))`,\n    `m1(m3(t1)`, and so on.\n    */\n    static defineModifier(name) {\n        let mod = new Modifier(name);\n        return (tag) => {\n            if (tag.modified.indexOf(mod) > -1)\n                return tag;\n            return Modifier.get(tag.base || tag, tag.modified.concat(mod).sort((a, b) => a.id - b.id));\n        };\n    }\n}\nlet nextModifierID = 0;\nclass Modifier {\n    constructor(name) {\n        this.name = name;\n        this.instances = [];\n        this.id = nextModifierID++;\n    }\n    static get(base, mods) {\n        if (!mods.length)\n            return base;\n        let exists = mods[0].instances.find(t => t.base == base && sameArray(mods, t.modified));\n        if (exists)\n            return exists;\n        let set = [], tag = new Tag(base.name, set, base, mods);\n        for (let m of mods)\n            m.instances.push(tag);\n        let configs = powerSet(mods);\n        for (let parent of base.set)\n            if (!parent.modified.length)\n                for (let config of configs)\n                    set.push(Modifier.get(parent, config));\n        return tag;\n    }\n}\nfunction sameArray(a, b) {\n    return a.length == b.length && a.every((x, i) => x == b[i]);\n}\nfunction powerSet(array) {\n    let sets = [[]];\n    for (let i = 0; i < array.length; i++) {\n        for (let j = 0, e = sets.length; j < e; j++) {\n            sets.push(sets[j].concat(array[i]));\n        }\n    }\n    return sets.sort((a, b) => b.length - a.length);\n}\n/**\nThis function is used to add a set of tags to a language syntax\nvia [`NodeSet.extend`](#common.NodeSet.extend) or\n[`LRParser.configure`](#lr.LRParser.configure).\n\nThe argument object maps node selectors to [highlighting\ntags](#highlight.Tag) or arrays of tags.\n\nNode selectors may hold one or more (space-separated) node paths.\nSuch a path can be a [node name](#common.NodeType.name), or\nmultiple node names (or `*` wildcards) separated by slash\ncharacters, as in `\"Block/Declaration/VariableName\"`. Such a path\nmatches the final node but only if its direct parent nodes are the\nother nodes mentioned. A `*` in such a path matches any parent,\nbut only a single level—wildcards that match multiple parents\naren't supported, both for efficiency reasons and because Lezer\ntrees make it rather hard to reason about what they would match.)\n\nA path can be ended with `/...` to indicate that the tag assigned\nto the node should also apply to all child nodes, even if they\nmatch their own style (by default, only the innermost style is\nused).\n\nWhen a path ends in `!`, as in `Attribute!`, no further matching\nhappens for the node's child nodes, and the entire node gets the\ngiven style.\n\nIn this notation, node names that contain `/`, `!`, `*`, or `...`\nmust be quoted as JSON strings.\n\nFor example:\n\n```javascript\nparser.configure({props: [\n  styleTags({\n    // Style Number and BigNumber nodes\n    \"Number BigNumber\": tags.number,\n    // Style Escape nodes whose parent is String\n    \"String/Escape\": tags.escape,\n    // Style anything inside Attributes nodes\n    \"Attributes!\": tags.meta,\n    // Add a style to all content inside Italic nodes\n    \"Italic/...\": tags.emphasis,\n    // Style InvalidString nodes as both `string` and `invalid`\n    \"InvalidString\": [tags.string, tags.invalid],\n    // Style the node named \"/\" as punctuation\n    '\"/\"': tags.punctuation\n  })\n]})\n```\n*/\nfunction styleTags(spec) {\n    let byName = Object.create(null);\n    for (let prop in spec) {\n        let tags = spec[prop];\n        if (!Array.isArray(tags))\n            tags = [tags];\n        for (let part of prop.split(\" \"))\n            if (part) {\n                let pieces = [], mode = 2 /* Mode.Normal */, rest = part;\n                for (let pos = 0;;) {\n                    if (rest == \"...\" && pos > 0 && pos + 3 == part.length) {\n                        mode = 1 /* Mode.Inherit */;\n                        break;\n                    }\n                    let m = /^\"(?:[^\"\\\\]|\\\\.)*?\"|[^\\/!]+/.exec(rest);\n                    if (!m)\n                        throw new RangeError(\"Invalid path: \" + part);\n                    pieces.push(m[0] == \"*\" ? \"\" : m[0][0] == '\"' ? JSON.parse(m[0]) : m[0]);\n                    pos += m[0].length;\n                    if (pos == part.length)\n                        break;\n                    let next = part[pos++];\n                    if (pos == part.length && next == \"!\") {\n                        mode = 0 /* Mode.Opaque */;\n                        break;\n                    }\n                    if (next != \"/\")\n                        throw new RangeError(\"Invalid path: \" + part);\n                    rest = part.slice(pos);\n                }\n                let last = pieces.length - 1, inner = pieces[last];\n                if (!inner)\n                    throw new RangeError(\"Invalid path: \" + part);\n                let rule = new Rule(tags, mode, last > 0 ? pieces.slice(0, last) : null);\n                byName[inner] = rule.sort(byName[inner]);\n            }\n    }\n    return ruleNodeProp.add(byName);\n}\nconst ruleNodeProp = new NodeProp({\n    combine(a, b) {\n        let cur, root, take;\n        while (a || b) {\n            if (!a || b && a.depth >= b.depth) {\n                take = b;\n                b = b.next;\n            }\n            else {\n                take = a;\n                a = a.next;\n            }\n            if (cur && cur.mode == take.mode && !take.context && !cur.context)\n                continue;\n            let copy = new Rule(take.tags, take.mode, take.context);\n            if (cur)\n                cur.next = copy;\n            else\n                root = copy;\n            cur = copy;\n        }\n        return root;\n    }\n});\nclass Rule {\n    constructor(tags, mode, context, next) {\n        this.tags = tags;\n        this.mode = mode;\n        this.context = context;\n        this.next = next;\n    }\n    get opaque() { return this.mode == 0 /* Mode.Opaque */; }\n    get inherit() { return this.mode == 1 /* Mode.Inherit */; }\n    sort(other) {\n        if (!other || other.depth < this.depth) {\n            this.next = other;\n            return this;\n        }\n        other.next = this.sort(other.next);\n        return other;\n    }\n    get depth() { return this.context ? this.context.length : 0; }\n}\nRule.empty = new Rule([], 2 /* Mode.Normal */, null);\n/**\nDefine a [highlighter](#highlight.Highlighter) from an array of\ntag/class pairs. Classes associated with more specific tags will\ntake precedence.\n*/\nfunction tagHighlighter(tags, options) {\n    let map = Object.create(null);\n    for (let style of tags) {\n        if (!Array.isArray(style.tag))\n            map[style.tag.id] = style.class;\n        else\n            for (let tag of style.tag)\n                map[tag.id] = style.class;\n    }\n    let { scope, all = null } = options || {};\n    return {\n        style: (tags) => {\n            let cls = all;\n            for (let tag of tags) {\n                for (let sub of tag.set) {\n                    let tagClass = map[sub.id];\n                    if (tagClass) {\n                        cls = cls ? cls + \" \" + tagClass : tagClass;\n                        break;\n                    }\n                }\n            }\n            return cls;\n        },\n        scope\n    };\n}\nfunction highlightTags(highlighters, tags) {\n    let result = null;\n    for (let highlighter of highlighters) {\n        let value = highlighter.style(tags);\n        if (value)\n            result = result ? result + \" \" + value : value;\n    }\n    return result;\n}\n/**\nHighlight the given [tree](#common.Tree) with the given\n[highlighter](#highlight.Highlighter). Often, the higher-level\n[`highlightCode`](#highlight.highlightCode) function is easier to\nuse.\n*/\nfunction highlightTree(tree, highlighter, \n/**\nAssign styling to a region of the text. Will be called, in order\nof position, for any ranges where more than zero classes apply.\n`classes` is a space separated string of CSS classes.\n*/\nputStyle, \n/**\nThe start of the range to highlight.\n*/\nfrom = 0, \n/**\nThe end of the range.\n*/\nto = tree.length) {\n    let builder = new HighlightBuilder(from, Array.isArray(highlighter) ? highlighter : [highlighter], putStyle);\n    builder.highlightRange(tree.cursor(), from, to, \"\", builder.highlighters);\n    builder.flush(to);\n}\n/**\nHighlight the given tree with the given highlighter, calling\n`putText` for every piece of text, either with a set of classes or\nwith the empty string when unstyled, and `putBreak` for every line\nbreak.\n*/\nfunction highlightCode(code, tree, highlighter, putText, putBreak, from = 0, to = code.length) {\n    let pos = from;\n    function writeTo(p, classes) {\n        if (p <= pos)\n            return;\n        for (let text = code.slice(pos, p), i = 0;;) {\n            let nextBreak = text.indexOf(\"\\n\", i);\n            let upto = nextBreak < 0 ? text.length : nextBreak;\n            if (upto > i)\n                putText(text.slice(i, upto), classes);\n            if (nextBreak < 0)\n                break;\n            putBreak();\n            i = nextBreak + 1;\n        }\n        pos = p;\n    }\n    highlightTree(tree, highlighter, (from, to, classes) => {\n        writeTo(from, \"\");\n        writeTo(to, classes);\n    }, from, to);\n    writeTo(to, \"\");\n}\nclass HighlightBuilder {\n    constructor(at, highlighters, span) {\n        this.at = at;\n        this.highlighters = highlighters;\n        this.span = span;\n        this.class = \"\";\n    }\n    startSpan(at, cls) {\n        if (cls != this.class) {\n            this.flush(at);\n            if (at > this.at)\n                this.at = at;\n            this.class = cls;\n        }\n    }\n    flush(to) {\n        if (to > this.at && this.class)\n            this.span(this.at, to, this.class);\n    }\n    highlightRange(cursor, from, to, inheritedClass, highlighters) {\n        let { type, from: start, to: end } = cursor;\n        if (start >= to || end <= from)\n            return;\n        if (type.isTop)\n            highlighters = this.highlighters.filter(h => !h.scope || h.scope(type));\n        let cls = inheritedClass;\n        let rule = getStyleTags(cursor) || Rule.empty;\n        let tagCls = highlightTags(highlighters, rule.tags);\n        if (tagCls) {\n            if (cls)\n                cls += \" \";\n            cls += tagCls;\n            if (rule.mode == 1 /* Mode.Inherit */)\n                inheritedClass += (inheritedClass ? \" \" : \"\") + tagCls;\n        }\n        this.startSpan(Math.max(from, start), cls);\n        if (rule.opaque)\n            return;\n        let mounted = cursor.tree && cursor.tree.prop(NodeProp.mounted);\n        if (mounted && mounted.overlay) {\n            let inner = cursor.node.enter(mounted.overlay[0].from + start, 1);\n            let innerHighlighters = this.highlighters.filter(h => !h.scope || h.scope(mounted.tree.type));\n            let hasChild = cursor.firstChild();\n            for (let i = 0, pos = start;; i++) {\n                let next = i < mounted.overlay.length ? mounted.overlay[i] : null;\n                let nextPos = next ? next.from + start : end;\n                let rangeFrom = Math.max(from, pos), rangeTo = Math.min(to, nextPos);\n                if (rangeFrom < rangeTo && hasChild) {\n                    while (cursor.from < rangeTo) {\n                        this.highlightRange(cursor, rangeFrom, rangeTo, inheritedClass, highlighters);\n                        this.startSpan(Math.min(rangeTo, cursor.to), cls);\n                        if (cursor.to >= nextPos || !cursor.nextSibling())\n                            break;\n                    }\n                }\n                if (!next || nextPos > to)\n                    break;\n                pos = next.to + start;\n                if (pos > from) {\n                    this.highlightRange(inner.cursor(), Math.max(from, next.from + start), Math.min(to, pos), \"\", innerHighlighters);\n                    this.startSpan(Math.min(to, pos), cls);\n                }\n            }\n            if (hasChild)\n                cursor.parent();\n        }\n        else if (cursor.firstChild()) {\n            if (mounted)\n                inheritedClass = \"\";\n            do {\n                if (cursor.to <= from)\n                    continue;\n                if (cursor.from >= to)\n                    break;\n                this.highlightRange(cursor, from, to, inheritedClass, highlighters);\n                this.startSpan(Math.min(to, cursor.to), cls);\n            } while (cursor.nextSibling());\n            cursor.parent();\n        }\n    }\n}\n/**\nMatch a syntax node's [highlight rules](#highlight.styleTags). If\nthere's a match, return its set of tags, and whether it is\nopaque (uses a `!`) or applies to all child nodes (`/...`).\n*/\nfunction getStyleTags(node) {\n    let rule = node.type.prop(ruleNodeProp);\n    while (rule && rule.context && !node.matchContext(rule.context))\n        rule = rule.next;\n    return rule || null;\n}\nconst t = Tag.define;\nconst comment = t(), name = t(), typeName = t(name), propertyName = t(name), literal = t(), string = t(literal), number = t(literal), content = t(), heading = t(content), keyword = t(), operator = t(), punctuation = t(), bracket = t(punctuation), meta = t();\n/**\nThe default set of highlighting [tags](#highlight.Tag).\n\nThis collection is heavily biased towards programming languages,\nand necessarily incomplete. A full ontology of syntactic\nconstructs would fill a stack of books, and be impractical to\nwrite themes for. So try to make do with this set. If all else\nfails, [open an\nissue](https://github.com/codemirror/codemirror.next) to propose a\nnew tag, or [define](#highlight.Tag^define) a local custom tag for\nyour use case.\n\nNote that it is not obligatory to always attach the most specific\ntag possible to an element—if your grammar can't easily\ndistinguish a certain type of element (such as a local variable),\nit is okay to style it as its more general variant (a variable).\n\nFor tags that extend some parent tag, the documentation links to\nthe parent.\n*/\nconst tags = {\n    /**\n    A comment.\n    */\n    comment,\n    /**\n    A line [comment](#highlight.tags.comment).\n    */\n    lineComment: t(comment),\n    /**\n    A block [comment](#highlight.tags.comment).\n    */\n    blockComment: t(comment),\n    /**\n    A documentation [comment](#highlight.tags.comment).\n    */\n    docComment: t(comment),\n    /**\n    Any kind of identifier.\n    */\n    name,\n    /**\n    The [name](#highlight.tags.name) of a variable.\n    */\n    variableName: t(name),\n    /**\n    A type [name](#highlight.tags.name).\n    */\n    typeName: typeName,\n    /**\n    A tag name (subtag of [`typeName`](#highlight.tags.typeName)).\n    */\n    tagName: t(typeName),\n    /**\n    A property or field [name](#highlight.tags.name).\n    */\n    propertyName: propertyName,\n    /**\n    An attribute name (subtag of [`propertyName`](#highlight.tags.propertyName)).\n    */\n    attributeName: t(propertyName),\n    /**\n    The [name](#highlight.tags.name) of a class.\n    */\n    className: t(name),\n    /**\n    A label [name](#highlight.tags.name).\n    */\n    labelName: t(name),\n    /**\n    A namespace [name](#highlight.tags.name).\n    */\n    namespace: t(name),\n    /**\n    The [name](#highlight.tags.name) of a macro.\n    */\n    macroName: t(name),\n    /**\n    A literal value.\n    */\n    literal,\n    /**\n    A string [literal](#highlight.tags.literal).\n    */\n    string,\n    /**\n    A documentation [string](#highlight.tags.string).\n    */\n    docString: t(string),\n    /**\n    A character literal (subtag of [string](#highlight.tags.string)).\n    */\n    character: t(string),\n    /**\n    An attribute value (subtag of [string](#highlight.tags.string)).\n    */\n    attributeValue: t(string),\n    /**\n    A number [literal](#highlight.tags.literal).\n    */\n    number,\n    /**\n    An integer [number](#highlight.tags.number) literal.\n    */\n    integer: t(number),\n    /**\n    A floating-point [number](#highlight.tags.number) literal.\n    */\n    float: t(number),\n    /**\n    A boolean [literal](#highlight.tags.literal).\n    */\n    bool: t(literal),\n    /**\n    Regular expression [literal](#highlight.tags.literal).\n    */\n    regexp: t(literal),\n    /**\n    An escape [literal](#highlight.tags.literal), for example a\n    backslash escape in a string.\n    */\n    escape: t(literal),\n    /**\n    A color [literal](#highlight.tags.literal).\n    */\n    color: t(literal),\n    /**\n    A URL [literal](#highlight.tags.literal).\n    */\n    url: t(literal),\n    /**\n    A language keyword.\n    */\n    keyword,\n    /**\n    The [keyword](#highlight.tags.keyword) for the self or this\n    object.\n    */\n    self: t(keyword),\n    /**\n    The [keyword](#highlight.tags.keyword) for null.\n    */\n    null: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) denoting some atomic value.\n    */\n    atom: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) that represents a unit.\n    */\n    unit: t(keyword),\n    /**\n    A modifier [keyword](#highlight.tags.keyword).\n    */\n    modifier: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) that acts as an operator.\n    */\n    operatorKeyword: t(keyword),\n    /**\n    A control-flow related [keyword](#highlight.tags.keyword).\n    */\n    controlKeyword: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) that defines something.\n    */\n    definitionKeyword: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) related to defining or\n    interfacing with modules.\n    */\n    moduleKeyword: t(keyword),\n    /**\n    An operator.\n    */\n    operator,\n    /**\n    An [operator](#highlight.tags.operator) that dereferences something.\n    */\n    derefOperator: t(operator),\n    /**\n    Arithmetic-related [operator](#highlight.tags.operator).\n    */\n    arithmeticOperator: t(operator),\n    /**\n    Logical [operator](#highlight.tags.operator).\n    */\n    logicOperator: t(operator),\n    /**\n    Bit [operator](#highlight.tags.operator).\n    */\n    bitwiseOperator: t(operator),\n    /**\n    Comparison [operator](#highlight.tags.operator).\n    */\n    compareOperator: t(operator),\n    /**\n    [Operator](#highlight.tags.operator) that updates its operand.\n    */\n    updateOperator: t(operator),\n    /**\n    [Operator](#highlight.tags.operator) that defines something.\n    */\n    definitionOperator: t(operator),\n    /**\n    Type-related [operator](#highlight.tags.operator).\n    */\n    typeOperator: t(operator),\n    /**\n    Control-flow [operator](#highlight.tags.operator).\n    */\n    controlOperator: t(operator),\n    /**\n    Program or markup punctuation.\n    */\n    punctuation,\n    /**\n    [Punctuation](#highlight.tags.punctuation) that separates\n    things.\n    */\n    separator: t(punctuation),\n    /**\n    Bracket-style [punctuation](#highlight.tags.punctuation).\n    */\n    bracket,\n    /**\n    Angle [brackets](#highlight.tags.bracket) (usually `<` and `>`\n    tokens).\n    */\n    angleBracket: t(bracket),\n    /**\n    Square [brackets](#highlight.tags.bracket) (usually `[` and `]`\n    tokens).\n    */\n    squareBracket: t(bracket),\n    /**\n    Parentheses (usually `(` and `)` tokens). Subtag of\n    [bracket](#highlight.tags.bracket).\n    */\n    paren: t(bracket),\n    /**\n    Braces (usually `{` and `}` tokens). Subtag of\n    [bracket](#highlight.tags.bracket).\n    */\n    brace: t(bracket),\n    /**\n    Content, for example plain text in XML or markup documents.\n    */\n    content,\n    /**\n    [Content](#highlight.tags.content) that represents a heading.\n    */\n    heading,\n    /**\n    A level 1 [heading](#highlight.tags.heading).\n    */\n    heading1: t(heading),\n    /**\n    A level 2 [heading](#highlight.tags.heading).\n    */\n    heading2: t(heading),\n    /**\n    A level 3 [heading](#highlight.tags.heading).\n    */\n    heading3: t(heading),\n    /**\n    A level 4 [heading](#highlight.tags.heading).\n    */\n    heading4: t(heading),\n    /**\n    A level 5 [heading](#highlight.tags.heading).\n    */\n    heading5: t(heading),\n    /**\n    A level 6 [heading](#highlight.tags.heading).\n    */\n    heading6: t(heading),\n    /**\n    A prose [content](#highlight.tags.content) separator (such as a horizontal rule).\n    */\n    contentSeparator: t(content),\n    /**\n    [Content](#highlight.tags.content) that represents a list.\n    */\n    list: t(content),\n    /**\n    [Content](#highlight.tags.content) that represents a quote.\n    */\n    quote: t(content),\n    /**\n    [Content](#highlight.tags.content) that is emphasized.\n    */\n    emphasis: t(content),\n    /**\n    [Content](#highlight.tags.content) that is styled strong.\n    */\n    strong: t(content),\n    /**\n    [Content](#highlight.tags.content) that is part of a link.\n    */\n    link: t(content),\n    /**\n    [Content](#highlight.tags.content) that is styled as code or\n    monospace.\n    */\n    monospace: t(content),\n    /**\n    [Content](#highlight.tags.content) that has a strike-through\n    style.\n    */\n    strikethrough: t(content),\n    /**\n    Inserted text in a change-tracking format.\n    */\n    inserted: t(),\n    /**\n    Deleted text.\n    */\n    deleted: t(),\n    /**\n    Changed text.\n    */\n    changed: t(),\n    /**\n    An invalid or unsyntactic element.\n    */\n    invalid: t(),\n    /**\n    Metadata or meta-instruction.\n    */\n    meta,\n    /**\n    [Metadata](#highlight.tags.meta) that applies to the entire\n    document.\n    */\n    documentMeta: t(meta),\n    /**\n    [Metadata](#highlight.tags.meta) that annotates or adds\n    attributes to a given syntactic element.\n    */\n    annotation: t(meta),\n    /**\n    Processing instruction or preprocessor directive. Subtag of\n    [meta](#highlight.tags.meta).\n    */\n    processingInstruction: t(meta),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that indicates that a\n    given element is being defined. Expected to be used with the\n    various [name](#highlight.tags.name) tags.\n    */\n    definition: Tag.defineModifier(\"definition\"),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that indicates that\n    something is constant. Mostly expected to be used with\n    [variable names](#highlight.tags.variableName).\n    */\n    constant: Tag.defineModifier(\"constant\"),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) used to indicate that\n    a [variable](#highlight.tags.variableName) or [property\n    name](#highlight.tags.propertyName) is being called or defined\n    as a function.\n    */\n    function: Tag.defineModifier(\"function\"),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that can be applied to\n    [names](#highlight.tags.name) to indicate that they belong to\n    the language's standard environment.\n    */\n    standard: Tag.defineModifier(\"standard\"),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that indicates a given\n    [names](#highlight.tags.name) is local to some scope.\n    */\n    local: Tag.defineModifier(\"local\"),\n    /**\n    A generic variant [modifier](#highlight.Tag^defineModifier) that\n    can be used to tag language-specific alternative variants of\n    some common tag. It is recommended for themes to define special\n    forms of at least the [string](#highlight.tags.string) and\n    [variable name](#highlight.tags.variableName) tags, since those\n    come up a lot.\n    */\n    special: Tag.defineModifier(\"special\")\n};\nfor (let name in tags) {\n    let val = tags[name];\n    if (val instanceof Tag)\n        val.name = name;\n}\n/**\nThis is a highlighter that adds stable, predictable classes to\ntokens, for styling with external CSS.\n\nThe following tags are mapped to their name prefixed with `\"tok-\"`\n(for example `\"tok-comment\"`):\n\n* [`link`](#highlight.tags.link)\n* [`heading`](#highlight.tags.heading)\n* [`emphasis`](#highlight.tags.emphasis)\n* [`strong`](#highlight.tags.strong)\n* [`keyword`](#highlight.tags.keyword)\n* [`atom`](#highlight.tags.atom)\n* [`bool`](#highlight.tags.bool)\n* [`url`](#highlight.tags.url)\n* [`labelName`](#highlight.tags.labelName)\n* [`inserted`](#highlight.tags.inserted)\n* [`deleted`](#highlight.tags.deleted)\n* [`literal`](#highlight.tags.literal)\n* [`string`](#highlight.tags.string)\n* [`number`](#highlight.tags.number)\n* [`variableName`](#highlight.tags.variableName)\n* [`typeName`](#highlight.tags.typeName)\n* [`namespace`](#highlight.tags.namespace)\n* [`className`](#highlight.tags.className)\n* [`macroName`](#highlight.tags.macroName)\n* [`propertyName`](#highlight.tags.propertyName)\n* [`operator`](#highlight.tags.operator)\n* [`comment`](#highlight.tags.comment)\n* [`meta`](#highlight.tags.meta)\n* [`punctuation`](#highlight.tags.punctuation)\n* [`invalid`](#highlight.tags.invalid)\n\nIn addition, these mappings are provided:\n\n* [`regexp`](#highlight.tags.regexp),\n  [`escape`](#highlight.tags.escape), and\n  [`special`](#highlight.tags.special)[`(string)`](#highlight.tags.string)\n  are mapped to `\"tok-string2\"`\n* [`special`](#highlight.tags.special)[`(variableName)`](#highlight.tags.variableName)\n  to `\"tok-variableName2\"`\n* [`local`](#highlight.tags.local)[`(variableName)`](#highlight.tags.variableName)\n  to `\"tok-variableName tok-local\"`\n* [`definition`](#highlight.tags.definition)[`(variableName)`](#highlight.tags.variableName)\n  to `\"tok-variableName tok-definition\"`\n* [`definition`](#highlight.tags.definition)[`(propertyName)`](#highlight.tags.propertyName)\n  to `\"tok-propertyName tok-definition\"`\n*/\nconst classHighlighter = tagHighlighter([\n    { tag: tags.link, class: \"tok-link\" },\n    { tag: tags.heading, class: \"tok-heading\" },\n    { tag: tags.emphasis, class: \"tok-emphasis\" },\n    { tag: tags.strong, class: \"tok-strong\" },\n    { tag: tags.keyword, class: \"tok-keyword\" },\n    { tag: tags.atom, class: \"tok-atom\" },\n    { tag: tags.bool, class: \"tok-bool\" },\n    { tag: tags.url, class: \"tok-url\" },\n    { tag: tags.labelName, class: \"tok-labelName\" },\n    { tag: tags.inserted, class: \"tok-inserted\" },\n    { tag: tags.deleted, class: \"tok-deleted\" },\n    { tag: tags.literal, class: \"tok-literal\" },\n    { tag: tags.string, class: \"tok-string\" },\n    { tag: tags.number, class: \"tok-number\" },\n    { tag: [tags.regexp, tags.escape, tags.special(tags.string)], class: \"tok-string2\" },\n    { tag: tags.variableName, class: \"tok-variableName\" },\n    { tag: tags.local(tags.variableName), class: \"tok-variableName tok-local\" },\n    { tag: tags.definition(tags.variableName), class: \"tok-variableName tok-definition\" },\n    { tag: tags.special(tags.variableName), class: \"tok-variableName2\" },\n    { tag: tags.definition(tags.propertyName), class: \"tok-propertyName tok-definition\" },\n    { tag: tags.typeName, class: \"tok-typeName\" },\n    { tag: tags.namespace, class: \"tok-namespace\" },\n    { tag: tags.className, class: \"tok-className\" },\n    { tag: tags.macroName, class: \"tok-macroName\" },\n    { tag: tags.propertyName, class: \"tok-propertyName\" },\n    { tag: tags.operator, class: \"tok-operator\" },\n    { tag: tags.comment, class: \"tok-comment\" },\n    { tag: tags.meta, class: \"tok-meta\" },\n    { tag: tags.invalid, class: \"tok-invalid\" },\n    { tag: tags.punctuation, class: \"tok-punctuation\" }\n]);\n\nexport { Tag, classHighlighter, getStyleTags, highlightCode, highlightTree, styleTags, tagHighlighter, tags };\n","/**\nThe default maximum length of a `TreeBuffer` node.\n*/\nconst DefaultBufferLength = 1024;\nlet nextPropID = 0;\nclass Range {\n    constructor(from, to) {\n        this.from = from;\n        this.to = to;\n    }\n}\n/**\nEach [node type](#common.NodeType) or [individual tree](#common.Tree)\ncan have metadata associated with it in props. Instances of this\nclass represent prop names.\n*/\nclass NodeProp {\n    /**\n    Create a new node prop type.\n    */\n    constructor(config = {}) {\n        this.id = nextPropID++;\n        this.perNode = !!config.perNode;\n        this.deserialize = config.deserialize || (() => {\n            throw new Error(\"This node type doesn't define a deserialize function\");\n        });\n        this.combine = config.combine || null;\n    }\n    /**\n    This is meant to be used with\n    [`NodeSet.extend`](#common.NodeSet.extend) or\n    [`LRParser.configure`](#lr.ParserConfig.props) to compute\n    prop values for each node type in the set. Takes a [match\n    object](#common.NodeType^match) or function that returns undefined\n    if the node type doesn't get this prop, and the prop's value if\n    it does.\n    */\n    add(match) {\n        if (this.perNode)\n            throw new RangeError(\"Can't add per-node props to node types\");\n        if (typeof match != \"function\")\n            match = NodeType.match(match);\n        return (type) => {\n            let result = match(type);\n            return result === undefined ? null : [this, result];\n        };\n    }\n}\n/**\nProp that is used to describe matching delimiters. For opening\ndelimiters, this holds an array of node names (written as a\nspace-separated string when declaring this prop in a grammar)\nfor the node types of closing delimiters that match it.\n*/\nNodeProp.closedBy = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nThe inverse of [`closedBy`](#common.NodeProp^closedBy). This is\nattached to closing delimiters, holding an array of node names\nof types of matching opening delimiters.\n*/\nNodeProp.openedBy = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nUsed to assign node types to groups (for example, all node\ntypes that represent an expression could be tagged with an\n`\"Expression\"` group).\n*/\nNodeProp.group = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nAttached to nodes to indicate these should be\n[displayed](https://codemirror.net/docs/ref/#language.syntaxTree)\nin a bidirectional text isolate, so that direction-neutral\ncharacters on their sides don't incorrectly get associated with\nsurrounding text. You'll generally want to set this for nodes\nthat contain arbitrary text, like strings and comments, and for\nnodes that appear _inside_ arbitrary text, like HTML tags. When\nnot given a value, in a grammar declaration, defaults to\n`\"auto\"`.\n*/\nNodeProp.isolate = new NodeProp({ deserialize: value => {\n        if (value && value != \"rtl\" && value != \"ltr\" && value != \"auto\")\n            throw new RangeError(\"Invalid value for isolate: \" + value);\n        return value || \"auto\";\n    } });\n/**\nThe hash of the [context](#lr.ContextTracker.constructor)\nthat the node was parsed in, if any. Used to limit reuse of\ncontextual nodes.\n*/\nNodeProp.contextHash = new NodeProp({ perNode: true });\n/**\nThe distance beyond the end of the node that the tokenizer\nlooked ahead for any of the tokens inside the node. (The LR\nparser only stores this when it is larger than 25, for\nefficiency reasons.)\n*/\nNodeProp.lookAhead = new NodeProp({ perNode: true });\n/**\nThis per-node prop is used to replace a given node, or part of a\nnode, with another tree. This is useful to include trees from\ndifferent languages in mixed-language parsers.\n*/\nNodeProp.mounted = new NodeProp({ perNode: true });\n/**\nA mounted tree, which can be [stored](#common.NodeProp^mounted) on\na tree node to indicate that parts of its content are\nrepresented by another tree.\n*/\nclass MountedTree {\n    constructor(\n    /**\n    The inner tree.\n    */\n    tree, \n    /**\n    If this is null, this tree replaces the entire node (it will\n    be included in the regular iteration instead of its host\n    node). If not, only the given ranges are considered to be\n    covered by this tree. This is used for trees that are mixed in\n    a way that isn't strictly hierarchical. Such mounted trees are\n    only entered by [`resolveInner`](#common.Tree.resolveInner)\n    and [`enter`](#common.SyntaxNode.enter).\n    */\n    overlay, \n    /**\n    The parser used to create this subtree.\n    */\n    parser, \n    /**\n    [Indicates](#common.IterMode.EnterBracketed) that the nested\n    content is delineated with some kind\n    of bracket token.\n    */\n    bracketed = false) {\n        this.tree = tree;\n        this.overlay = overlay;\n        this.parser = parser;\n        this.bracketed = bracketed;\n    }\n    /**\n    @internal\n    */\n    static get(tree) {\n        return tree && tree.props && tree.props[NodeProp.mounted.id];\n    }\n}\nconst noProps = Object.create(null);\n/**\nEach node in a syntax tree has a node type associated with it.\n*/\nclass NodeType {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The name of the node type. Not necessarily unique, but if the\n    grammar was written properly, different node types with the\n    same name within a node set should play the same semantic\n    role.\n    */\n    name, \n    /**\n    @internal\n    */\n    props, \n    /**\n    The id of this node in its set. Corresponds to the term ids\n    used in the parser.\n    */\n    id, \n    /**\n    @internal\n    */\n    flags = 0) {\n        this.name = name;\n        this.props = props;\n        this.id = id;\n        this.flags = flags;\n    }\n    /**\n    Define a node type.\n    */\n    static define(spec) {\n        let props = spec.props && spec.props.length ? Object.create(null) : noProps;\n        let flags = (spec.top ? 1 /* NodeFlag.Top */ : 0) | (spec.skipped ? 2 /* NodeFlag.Skipped */ : 0) |\n            (spec.error ? 4 /* NodeFlag.Error */ : 0) | (spec.name == null ? 8 /* NodeFlag.Anonymous */ : 0);\n        let type = new NodeType(spec.name || \"\", props, spec.id, flags);\n        if (spec.props)\n            for (let src of spec.props) {\n                if (!Array.isArray(src))\n                    src = src(type);\n                if (src) {\n                    if (src[0].perNode)\n                        throw new RangeError(\"Can't store a per-node prop on a node type\");\n                    props[src[0].id] = src[1];\n                }\n            }\n        return type;\n    }\n    /**\n    Retrieves a node prop for this type. Will return `undefined` if\n    the prop isn't present on this node.\n    */\n    prop(prop) { return this.props[prop.id]; }\n    /**\n    True when this is the top node of a grammar.\n    */\n    get isTop() { return (this.flags & 1 /* NodeFlag.Top */) > 0; }\n    /**\n    True when this node is produced by a skip rule.\n    */\n    get isSkipped() { return (this.flags & 2 /* NodeFlag.Skipped */) > 0; }\n    /**\n    Indicates whether this is an error node.\n    */\n    get isError() { return (this.flags & 4 /* NodeFlag.Error */) > 0; }\n    /**\n    When true, this node type doesn't correspond to a user-declared\n    named node, for example because it is used to cache repetition.\n    */\n    get isAnonymous() { return (this.flags & 8 /* NodeFlag.Anonymous */) > 0; }\n    /**\n    Returns true when this node's name or one of its\n    [groups](#common.NodeProp^group) matches the given string.\n    */\n    is(name) {\n        if (typeof name == 'string') {\n            if (this.name == name)\n                return true;\n            let group = this.prop(NodeProp.group);\n            return group ? group.indexOf(name) > -1 : false;\n        }\n        return this.id == name;\n    }\n    /**\n    Create a function from node types to arbitrary values by\n    specifying an object whose property names are node or\n    [group](#common.NodeProp^group) names. Often useful with\n    [`NodeProp.add`](#common.NodeProp.add). You can put multiple\n    names, separated by spaces, in a single property name to map\n    multiple node names to a single value.\n    */\n    static match(map) {\n        let direct = Object.create(null);\n        for (let prop in map)\n            for (let name of prop.split(\" \"))\n                direct[name] = map[prop];\n        return (node) => {\n            for (let groups = node.prop(NodeProp.group), i = -1; i < (groups ? groups.length : 0); i++) {\n                let found = direct[i < 0 ? node.name : groups[i]];\n                if (found)\n                    return found;\n            }\n        };\n    }\n}\n/**\nAn empty dummy node type to use when no actual type is available.\n*/\nNodeType.none = new NodeType(\"\", Object.create(null), 0, 8 /* NodeFlag.Anonymous */);\n/**\nA node set holds a collection of node types. It is used to\ncompactly represent trees by storing their type ids, rather than a\nfull pointer to the type object, in a numeric array. Each parser\n[has](#lr.LRParser.nodeSet) a node set, and [tree\nbuffers](#common.TreeBuffer) can only store collections of nodes\nfrom the same set. A set can have a maximum of 2**16 (65536) node\ntypes in it, so that the ids fit into 16-bit typed array slots.\n*/\nclass NodeSet {\n    /**\n    Create a set with the given types. The `id` property of each\n    type should correspond to its position within the array.\n    */\n    constructor(\n    /**\n    The node types in this set, by id.\n    */\n    types) {\n        this.types = types;\n        for (let i = 0; i < types.length; i++)\n            if (types[i].id != i)\n                throw new RangeError(\"Node type ids should correspond to array positions when creating a node set\");\n    }\n    /**\n    Create a copy of this set with some node properties added. The\n    arguments to this method can be created with\n    [`NodeProp.add`](#common.NodeProp.add).\n    */\n    extend(...props) {\n        let newTypes = [];\n        for (let type of this.types) {\n            let newProps = null;\n            for (let source of props) {\n                let add = source(type);\n                if (add) {\n                    if (!newProps)\n                        newProps = Object.assign({}, type.props);\n                    let value = add[1], prop = add[0];\n                    if (prop.combine && prop.id in newProps)\n                        value = prop.combine(newProps[prop.id], value);\n                    newProps[prop.id] = value;\n                }\n            }\n            newTypes.push(newProps ? new NodeType(type.name, newProps, type.id, type.flags) : type);\n        }\n        return new NodeSet(newTypes);\n    }\n}\nconst CachedNode = new WeakMap(), CachedInnerNode = new WeakMap();\n/**\nOptions that control iteration. Can be combined with the `|`\noperator to enable multiple ones.\n*/\nvar IterMode;\n(function (IterMode) {\n    /**\n    When enabled, iteration will only visit [`Tree`](#common.Tree)\n    objects, not nodes packed into\n    [`TreeBuffer`](#common.TreeBuffer)s.\n    */\n    IterMode[IterMode[\"ExcludeBuffers\"] = 1] = \"ExcludeBuffers\";\n    /**\n    Enable this to make iteration include anonymous nodes (such as\n    the nodes that wrap repeated grammar constructs into a balanced\n    tree).\n    */\n    IterMode[IterMode[\"IncludeAnonymous\"] = 2] = \"IncludeAnonymous\";\n    /**\n    By default, regular [mounted](#common.NodeProp^mounted) nodes\n    replace their base node in iteration. Enable this to ignore them\n    instead.\n    */\n    IterMode[IterMode[\"IgnoreMounts\"] = 4] = \"IgnoreMounts\";\n    /**\n    This option only applies in\n    [`enter`](#common.SyntaxNode.enter)-style methods. It tells the\n    library to not enter mounted overlays if one covers the given\n    position.\n    */\n    IterMode[IterMode[\"IgnoreOverlays\"] = 8] = \"IgnoreOverlays\";\n    /**\n    When set, positions on the boundary of a mounted overlay tree\n    that has its [`bracketed`](#common.NestedParse.bracketed) flag\n    set will enter that tree regardless of side. Only supported in\n    [`enter`](#common.SyntaxNode.enter), not in cursors.\n    */\n    IterMode[IterMode[\"EnterBracketed\"] = 16] = \"EnterBracketed\";\n})(IterMode || (IterMode = {}));\n/**\nA piece of syntax tree. There are two ways to approach these\ntrees: the way they are actually stored in memory, and the\nconvenient way.\n\nSyntax trees are stored as a tree of `Tree` and `TreeBuffer`\nobjects. By packing detail information into `TreeBuffer` leaf\nnodes, the representation is made a lot more memory-efficient.\n\nHowever, when you want to actually work with tree nodes, this\nrepresentation is very awkward, so most client code will want to\nuse the [`TreeCursor`](#common.TreeCursor) or\n[`SyntaxNode`](#common.SyntaxNode) interface instead, which provides\na view on some part of this data structure, and can be used to\nmove around to adjacent nodes.\n*/\nclass Tree {\n    /**\n    Construct a new tree. See also [`Tree.build`](#common.Tree^build).\n    */\n    constructor(\n    /**\n    The type of the top node.\n    */\n    type, \n    /**\n    This node's child nodes.\n    */\n    children, \n    /**\n    The positions (offsets relative to the start of this tree) of\n    the children.\n    */\n    positions, \n    /**\n    The total length of this tree\n    */\n    length, \n    /**\n    Per-node [node props](#common.NodeProp) to associate with this node.\n    */\n    props) {\n        this.type = type;\n        this.children = children;\n        this.positions = positions;\n        this.length = length;\n        /**\n        @internal\n        */\n        this.props = null;\n        if (props && props.length) {\n            this.props = Object.create(null);\n            for (let [prop, value] of props)\n                this.props[typeof prop == \"number\" ? prop : prop.id] = value;\n        }\n    }\n    /**\n    @internal\n    */\n    toString() {\n        let mounted = MountedTree.get(this);\n        if (mounted && !mounted.overlay)\n            return mounted.tree.toString();\n        let children = \"\";\n        for (let ch of this.children) {\n            let str = ch.toString();\n            if (str) {\n                if (children)\n                    children += \",\";\n                children += str;\n            }\n        }\n        return !this.type.name ? children :\n            (/\\W/.test(this.type.name) && !this.type.isError ? JSON.stringify(this.type.name) : this.type.name) +\n                (children.length ? \"(\" + children + \")\" : \"\");\n    }\n    /**\n    Get a [tree cursor](#common.TreeCursor) positioned at the top of\n    the tree. Mode can be used to [control](#common.IterMode) which\n    nodes the cursor visits.\n    */\n    cursor(mode = 0) {\n        return new TreeCursor(this.topNode, mode);\n    }\n    /**\n    Get a [tree cursor](#common.TreeCursor) pointing into this tree\n    at the given position and side (see\n    [`moveTo`](#common.TreeCursor.moveTo).\n    */\n    cursorAt(pos, side = 0, mode = 0) {\n        let scope = CachedNode.get(this) || this.topNode;\n        let cursor = new TreeCursor(scope);\n        cursor.moveTo(pos, side);\n        CachedNode.set(this, cursor._tree);\n        return cursor;\n    }\n    /**\n    Get a [syntax node](#common.SyntaxNode) object for the top of the\n    tree.\n    */\n    get topNode() {\n        return new TreeNode(this, 0, 0, null);\n    }\n    /**\n    Get the [syntax node](#common.SyntaxNode) at the given position.\n    If `side` is -1, this will move into nodes that end at the\n    position. If 1, it'll move into nodes that start at the\n    position. With 0, it'll only enter nodes that cover the position\n    from both sides.\n    \n    Note that this will not enter\n    [overlays](#common.MountedTree.overlay), and you often want\n    [`resolveInner`](#common.Tree.resolveInner) instead.\n    */\n    resolve(pos, side = 0) {\n        let node = resolveNode(CachedNode.get(this) || this.topNode, pos, side, false);\n        CachedNode.set(this, node);\n        return node;\n    }\n    /**\n    Like [`resolve`](#common.Tree.resolve), but will enter\n    [overlaid](#common.MountedTree.overlay) nodes, producing a syntax node\n    pointing into the innermost overlaid tree at the given position\n    (with parent links going through all parent structure, including\n    the host trees).\n    */\n    resolveInner(pos, side = 0) {\n        let node = resolveNode(CachedInnerNode.get(this) || this.topNode, pos, side, true);\n        CachedInnerNode.set(this, node);\n        return node;\n    }\n    /**\n    In some situations, it can be useful to iterate through all\n    nodes around a position, including those in overlays that don't\n    directly cover the position. This method gives you an iterator\n    that will produce all nodes, from small to big, around the given\n    position.\n    */\n    resolveStack(pos, side = 0) {\n        return stackIterator(this, pos, side);\n    }\n    /**\n    Iterate over the tree and its children, calling `enter` for any\n    node that touches the `from`/`to` region (if given) before\n    running over such a node's children, and `leave` (if given) when\n    leaving the node. When `enter` returns `false`, that node will\n    not have its children iterated over (or `leave` called).\n    */\n    iterate(spec) {\n        let { enter, leave, from = 0, to = this.length } = spec;\n        let mode = spec.mode || 0, anon = (mode & IterMode.IncludeAnonymous) > 0;\n        for (let c = this.cursor(mode | IterMode.IncludeAnonymous);;) {\n            let entered = false;\n            if (c.from <= to && c.to >= from && (!anon && c.type.isAnonymous || enter(c) !== false)) {\n                if (c.firstChild())\n                    continue;\n                entered = true;\n            }\n            for (;;) {\n                if (entered && leave && (anon || !c.type.isAnonymous))\n                    leave(c);\n                if (c.nextSibling())\n                    break;\n                if (!c.parent())\n                    return;\n                entered = true;\n            }\n        }\n    }\n    /**\n    Get the value of the given [node prop](#common.NodeProp) for this\n    node. Works with both per-node and per-type props.\n    */\n    prop(prop) {\n        return !prop.perNode ? this.type.prop(prop) : this.props ? this.props[prop.id] : undefined;\n    }\n    /**\n    Returns the node's [per-node props](#common.NodeProp.perNode) in a\n    format that can be passed to the [`Tree`](#common.Tree)\n    constructor.\n    */\n    get propValues() {\n        let result = [];\n        if (this.props)\n            for (let id in this.props)\n                result.push([+id, this.props[id]]);\n        return result;\n    }\n    /**\n    Balance the direct children of this tree, producing a copy of\n    which may have children grouped into subtrees with type\n    [`NodeType.none`](#common.NodeType^none).\n    */\n    balance(config = {}) {\n        return this.children.length <= 8 /* Balance.BranchFactor */ ? this :\n            balanceRange(NodeType.none, this.children, this.positions, 0, this.children.length, 0, this.length, (children, positions, length) => new Tree(this.type, children, positions, length, this.propValues), config.makeTree || ((children, positions, length) => new Tree(NodeType.none, children, positions, length)));\n    }\n    /**\n    Build a tree from a postfix-ordered buffer of node information,\n    or a cursor over such a buffer.\n    */\n    static build(data) { return buildTree(data); }\n}\n/**\nThe empty tree\n*/\nTree.empty = new Tree(NodeType.none, [], [], 0);\nclass FlatBufferCursor {\n    constructor(buffer, index) {\n        this.buffer = buffer;\n        this.index = index;\n    }\n    get id() { return this.buffer[this.index - 4]; }\n    get start() { return this.buffer[this.index - 3]; }\n    get end() { return this.buffer[this.index - 2]; }\n    get size() { return this.buffer[this.index - 1]; }\n    get pos() { return this.index; }\n    next() { this.index -= 4; }\n    fork() { return new FlatBufferCursor(this.buffer, this.index); }\n}\n/**\nTree buffers contain (type, start, end, endIndex) quads for each\nnode. In such a buffer, nodes are stored in prefix order (parents\nbefore children, with the endIndex of the parent indicating which\nchildren belong to it).\n*/\nclass TreeBuffer {\n    /**\n    Create a tree buffer.\n    */\n    constructor(\n    /**\n    The buffer's content.\n    */\n    buffer, \n    /**\n    The total length of the group of nodes in the buffer.\n    */\n    length, \n    /**\n    The node set used in this buffer.\n    */\n    set) {\n        this.buffer = buffer;\n        this.length = length;\n        this.set = set;\n    }\n    /**\n    @internal\n    */\n    get type() { return NodeType.none; }\n    /**\n    @internal\n    */\n    toString() {\n        let result = [];\n        for (let index = 0; index < this.buffer.length;) {\n            result.push(this.childString(index));\n            index = this.buffer[index + 3];\n        }\n        return result.join(\",\");\n    }\n    /**\n    @internal\n    */\n    childString(index) {\n        let id = this.buffer[index], endIndex = this.buffer[index + 3];\n        let type = this.set.types[id], result = type.name;\n        if (/\\W/.test(result) && !type.isError)\n            result = JSON.stringify(result);\n        index += 4;\n        if (endIndex == index)\n            return result;\n        let children = [];\n        while (index < endIndex) {\n            children.push(this.childString(index));\n            index = this.buffer[index + 3];\n        }\n        return result + \"(\" + children.join(\",\") + \")\";\n    }\n    /**\n    @internal\n    */\n    findChild(startIndex, endIndex, dir, pos, side) {\n        let { buffer } = this, pick = -1;\n        for (let i = startIndex; i != endIndex; i = buffer[i + 3]) {\n            if (checkSide(side, pos, buffer[i + 1], buffer[i + 2])) {\n                pick = i;\n                if (dir > 0)\n                    break;\n            }\n        }\n        return pick;\n    }\n    /**\n    @internal\n    */\n    slice(startI, endI, from) {\n        let b = this.buffer;\n        let copy = new Uint16Array(endI - startI), len = 0;\n        for (let i = startI, j = 0; i < endI;) {\n            copy[j++] = b[i++];\n            copy[j++] = b[i++] - from;\n            let to = copy[j++] = b[i++] - from;\n            copy[j++] = b[i++] - startI;\n            len = Math.max(len, to);\n        }\n        return new TreeBuffer(copy, len, this.set);\n    }\n}\nfunction checkSide(side, pos, from, to) {\n    switch (side) {\n        case -2 /* Side.Before */: return from < pos;\n        case -1 /* Side.AtOrBefore */: return to >= pos && from < pos;\n        case 0 /* Side.Around */: return from < pos && to > pos;\n        case 1 /* Side.AtOrAfter */: return from <= pos && to > pos;\n        case 2 /* Side.After */: return to > pos;\n        case 4 /* Side.DontCare */: return true;\n    }\n}\nfunction resolveNode(node, pos, side, overlays) {\n    var _a;\n    // Move up to a node that actually holds the position, if possible\n    while (node.from == node.to ||\n        (side < 1 ? node.from >= pos : node.from > pos) ||\n        (side > -1 ? node.to <= pos : node.to < pos)) {\n        let parent = !overlays && node instanceof TreeNode && node.index < 0 ? null : node.parent;\n        if (!parent)\n            return node;\n        node = parent;\n    }\n    let mode = overlays ? 0 : IterMode.IgnoreOverlays;\n    // Must go up out of overlays when those do not overlap with pos\n    if (overlays)\n        for (let scan = node, parent = scan.parent; parent; scan = parent, parent = scan.parent) {\n            if (scan instanceof TreeNode && scan.index < 0 && ((_a = parent.enter(pos, side, mode)) === null || _a === void 0 ? void 0 : _a.from) != scan.from)\n                node = parent;\n        }\n    for (;;) {\n        let inner = node.enter(pos, side, mode);\n        if (!inner)\n            return node;\n        node = inner;\n    }\n}\nclass BaseNode {\n    cursor(mode = 0) { return new TreeCursor(this, mode); }\n    getChild(type, before = null, after = null) {\n        let r = getChildren(this, type, before, after);\n        return r.length ? r[0] : null;\n    }\n    getChildren(type, before = null, after = null) {\n        return getChildren(this, type, before, after);\n    }\n    resolve(pos, side = 0) {\n        return resolveNode(this, pos, side, false);\n    }\n    resolveInner(pos, side = 0) {\n        return resolveNode(this, pos, side, true);\n    }\n    matchContext(context) {\n        return matchNodeContext(this.parent, context);\n    }\n    enterUnfinishedNodesBefore(pos) {\n        let scan = this.childBefore(pos), node = this;\n        while (scan) {\n            let last = scan.lastChild;\n            if (!last || last.to != scan.to)\n                break;\n            if (last.type.isError && last.from == last.to) {\n                node = scan;\n                scan = last.prevSibling;\n            }\n            else {\n                scan = last;\n            }\n        }\n        return node;\n    }\n    get node() { return this; }\n    get next() { return this.parent; }\n}\nclass TreeNode extends BaseNode {\n    constructor(_tree, from, \n    // Index in parent node, set to -1 if the node is not a direct child of _parent.node (overlay)\n    index, _parent) {\n        super();\n        this._tree = _tree;\n        this.from = from;\n        this.index = index;\n        this._parent = _parent;\n    }\n    get type() { return this._tree.type; }\n    get name() { return this._tree.type.name; }\n    get to() { return this.from + this._tree.length; }\n    nextChild(i, dir, pos, side, mode = 0) {\n        for (let parent = this;;) {\n            for (let { children, positions } = parent._tree, e = dir > 0 ? children.length : -1; i != e; i += dir) {\n                let next = children[i], start = positions[i] + parent.from, mounted;\n                if (!((mode & IterMode.EnterBracketed) && next instanceof Tree &&\n                    (mounted = MountedTree.get(next)) && !mounted.overlay && mounted.bracketed &&\n                    pos >= start && pos <= start + next.length) &&\n                    !checkSide(side, pos, start, start + next.length))\n                    continue;\n                if (next instanceof TreeBuffer) {\n                    if (mode & IterMode.ExcludeBuffers)\n                        continue;\n                    let index = next.findChild(0, next.buffer.length, dir, pos - start, side);\n                    if (index > -1)\n                        return new BufferNode(new BufferContext(parent, next, i, start), null, index);\n                }\n                else if ((mode & IterMode.IncludeAnonymous) || (!next.type.isAnonymous || hasChild(next))) {\n                    let mounted;\n                    if (!(mode & IterMode.IgnoreMounts) && (mounted = MountedTree.get(next)) && !mounted.overlay)\n                        return new TreeNode(mounted.tree, start, i, parent);\n                    let inner = new TreeNode(next, start, i, parent);\n                    return (mode & IterMode.IncludeAnonymous) || !inner.type.isAnonymous ? inner\n                        : inner.nextChild(dir < 0 ? next.children.length - 1 : 0, dir, pos, side, mode);\n                }\n            }\n            if ((mode & IterMode.IncludeAnonymous) || !parent.type.isAnonymous)\n                return null;\n            if (parent.index >= 0)\n                i = parent.index + dir;\n            else\n                i = dir < 0 ? -1 : parent._parent._tree.children.length;\n            parent = parent._parent;\n            if (!parent)\n                return null;\n        }\n    }\n    get firstChild() { return this.nextChild(0, 1, 0, 4 /* Side.DontCare */); }\n    get lastChild() { return this.nextChild(this._tree.children.length - 1, -1, 0, 4 /* Side.DontCare */); }\n    childAfter(pos) { return this.nextChild(0, 1, pos, 2 /* Side.After */); }\n    childBefore(pos) { return this.nextChild(this._tree.children.length - 1, -1, pos, -2 /* Side.Before */); }\n    prop(prop) { return this._tree.prop(prop); }\n    enter(pos, side, mode = 0) {\n        let mounted;\n        if (!(mode & IterMode.IgnoreOverlays) && (mounted = MountedTree.get(this._tree)) && mounted.overlay) {\n            let rPos = pos - this.from, enterBracketed = (mode & IterMode.EnterBracketed) && mounted.bracketed;\n            for (let { from, to } of mounted.overlay) {\n                if ((side > 0 || enterBracketed ? from <= rPos : from < rPos) &&\n                    (side < 0 || enterBracketed ? to >= rPos : to > rPos))\n                    return new TreeNode(mounted.tree, mounted.overlay[0].from + this.from, -1, this);\n            }\n        }\n        return this.nextChild(0, 1, pos, side, mode);\n    }\n    nextSignificantParent() {\n        let val = this;\n        while (val.type.isAnonymous && val._parent)\n            val = val._parent;\n        return val;\n    }\n    get parent() {\n        return this._parent ? this._parent.nextSignificantParent() : null;\n    }\n    get nextSibling() {\n        return this._parent && this.index >= 0 ? this._parent.nextChild(this.index + 1, 1, 0, 4 /* Side.DontCare */) : null;\n    }\n    get prevSibling() {\n        return this._parent && this.index >= 0 ? this._parent.nextChild(this.index - 1, -1, 0, 4 /* Side.DontCare */) : null;\n    }\n    get tree() { return this._tree; }\n    toTree() { return this._tree; }\n    /**\n    @internal\n    */\n    toString() { return this._tree.toString(); }\n}\nfunction getChildren(node, type, before, after) {\n    let cur = node.cursor(), result = [];\n    if (!cur.firstChild())\n        return result;\n    if (before != null)\n        for (let found = false; !found;) {\n            found = cur.type.is(before);\n            if (!cur.nextSibling())\n                return result;\n        }\n    for (;;) {\n        if (after != null && cur.type.is(after))\n            return result;\n        if (cur.type.is(type))\n            result.push(cur.node);\n        if (!cur.nextSibling())\n            return after == null ? result : [];\n    }\n}\nfunction matchNodeContext(node, context, i = context.length - 1) {\n    for (let p = node; i >= 0; p = p.parent) {\n        if (!p)\n            return false;\n        if (!p.type.isAnonymous) {\n            if (context[i] && context[i] != p.name)\n                return false;\n            i--;\n        }\n    }\n    return true;\n}\nclass BufferContext {\n    constructor(parent, buffer, index, start) {\n        this.parent = parent;\n        this.buffer = buffer;\n        this.index = index;\n        this.start = start;\n    }\n}\nclass BufferNode extends BaseNode {\n    get name() { return this.type.name; }\n    get from() { return this.context.start + this.context.buffer.buffer[this.index + 1]; }\n    get to() { return this.context.start + this.context.buffer.buffer[this.index + 2]; }\n    constructor(context, _parent, index) {\n        super();\n        this.context = context;\n        this._parent = _parent;\n        this.index = index;\n        this.type = context.buffer.set.types[context.buffer.buffer[index]];\n    }\n    child(dir, pos, side) {\n        let { buffer } = this.context;\n        let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.context.start, side);\n        return index < 0 ? null : new BufferNode(this.context, this, index);\n    }\n    get firstChild() { return this.child(1, 0, 4 /* Side.DontCare */); }\n    get lastChild() { return this.child(-1, 0, 4 /* Side.DontCare */); }\n    childAfter(pos) { return this.child(1, pos, 2 /* Side.After */); }\n    childBefore(pos) { return this.child(-1, pos, -2 /* Side.Before */); }\n    prop(prop) { return this.type.prop(prop); }\n    enter(pos, side, mode = 0) {\n        if (mode & IterMode.ExcludeBuffers)\n            return null;\n        let { buffer } = this.context;\n        let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], side > 0 ? 1 : -1, pos - this.context.start, side);\n        return index < 0 ? null : new BufferNode(this.context, this, index);\n    }\n    get parent() {\n        return this._parent || this.context.parent.nextSignificantParent();\n    }\n    externalSibling(dir) {\n        return this._parent ? null : this.context.parent.nextChild(this.context.index + dir, dir, 0, 4 /* Side.DontCare */);\n    }\n    get nextSibling() {\n        let { buffer } = this.context;\n        let after = buffer.buffer[this.index + 3];\n        if (after < (this._parent ? buffer.buffer[this._parent.index + 3] : buffer.buffer.length))\n            return new BufferNode(this.context, this._parent, after);\n        return this.externalSibling(1);\n    }\n    get prevSibling() {\n        let { buffer } = this.context;\n        let parentStart = this._parent ? this._parent.index + 4 : 0;\n        if (this.index == parentStart)\n            return this.externalSibling(-1);\n        return new BufferNode(this.context, this._parent, buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */));\n    }\n    get tree() { return null; }\n    toTree() {\n        let children = [], positions = [];\n        let { buffer } = this.context;\n        let startI = this.index + 4, endI = buffer.buffer[this.index + 3];\n        if (endI > startI) {\n            let from = buffer.buffer[this.index + 1];\n            children.push(buffer.slice(startI, endI, from));\n            positions.push(0);\n        }\n        return new Tree(this.type, children, positions, this.to - this.from);\n    }\n    /**\n    @internal\n    */\n    toString() { return this.context.buffer.childString(this.index); }\n}\nfunction iterStack(heads) {\n    if (!heads.length)\n        return null;\n    let pick = 0, picked = heads[0];\n    for (let i = 1; i < heads.length; i++) {\n        let node = heads[i];\n        if (node.from > picked.from || node.to < picked.to) {\n            picked = node;\n            pick = i;\n        }\n    }\n    let next = picked instanceof TreeNode && picked.index < 0 ? null : picked.parent;\n    let newHeads = heads.slice();\n    if (next)\n        newHeads[pick] = next;\n    else\n        newHeads.splice(pick, 1);\n    return new StackIterator(newHeads, picked);\n}\nclass StackIterator {\n    constructor(heads, node) {\n        this.heads = heads;\n        this.node = node;\n    }\n    get next() { return iterStack(this.heads); }\n}\nfunction stackIterator(tree, pos, side) {\n    let inner = tree.resolveInner(pos, side), layers = null;\n    for (let scan = inner instanceof TreeNode ? inner : inner.context.parent; scan; scan = scan.parent) {\n        if (scan.index < 0) { // This is an overlay root\n            let parent = scan.parent;\n            (layers || (layers = [inner])).push(parent.resolve(pos, side));\n            scan = parent;\n        }\n        else {\n            let mount = MountedTree.get(scan.tree);\n            // Relevant overlay branching off\n            if (mount && mount.overlay && mount.overlay[0].from <= pos && mount.overlay[mount.overlay.length - 1].to >= pos) {\n                let root = new TreeNode(mount.tree, mount.overlay[0].from + scan.from, -1, scan);\n                (layers || (layers = [inner])).push(resolveNode(root, pos, side, false));\n            }\n        }\n    }\n    return layers ? iterStack(layers) : inner;\n}\n/**\nA tree cursor object focuses on a given node in a syntax tree, and\nallows you to move to adjacent nodes.\n*/\nclass TreeCursor {\n    /**\n    Shorthand for `.type.name`.\n    */\n    get name() { return this.type.name; }\n    /**\n    @internal\n    */\n    constructor(node, mode = 0) {\n        /**\n        @internal\n        */\n        this.buffer = null;\n        this.stack = [];\n        /**\n        @internal\n        */\n        this.index = 0;\n        this.bufferNode = null;\n        this.mode = mode & ~IterMode.EnterBracketed;\n        if (node instanceof TreeNode) {\n            this.yieldNode(node);\n        }\n        else {\n            this._tree = node.context.parent;\n            this.buffer = node.context;\n            for (let n = node._parent; n; n = n._parent)\n                this.stack.unshift(n.index);\n            this.bufferNode = node;\n            this.yieldBuf(node.index);\n        }\n    }\n    yieldNode(node) {\n        if (!node)\n            return false;\n        this._tree = node;\n        this.type = node.type;\n        this.from = node.from;\n        this.to = node.to;\n        return true;\n    }\n    yieldBuf(index, type) {\n        this.index = index;\n        let { start, buffer } = this.buffer;\n        this.type = type || buffer.set.types[buffer.buffer[index]];\n        this.from = start + buffer.buffer[index + 1];\n        this.to = start + buffer.buffer[index + 2];\n        return true;\n    }\n    /**\n    @internal\n    */\n    yield(node) {\n        if (!node)\n            return false;\n        if (node instanceof TreeNode) {\n            this.buffer = null;\n            return this.yieldNode(node);\n        }\n        this.buffer = node.context;\n        return this.yieldBuf(node.index, node.type);\n    }\n    /**\n    @internal\n    */\n    toString() {\n        return this.buffer ? this.buffer.buffer.childString(this.index) : this._tree.toString();\n    }\n    /**\n    @internal\n    */\n    enterChild(dir, pos, side) {\n        if (!this.buffer)\n            return this.yield(this._tree.nextChild(dir < 0 ? this._tree._tree.children.length - 1 : 0, dir, pos, side, this.mode));\n        let { buffer } = this.buffer;\n        let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.buffer.start, side);\n        if (index < 0)\n            return false;\n        this.stack.push(this.index);\n        return this.yieldBuf(index);\n    }\n    /**\n    Move the cursor to this node's first child. When this returns\n    false, the node has no child, and the cursor has not been moved.\n    */\n    firstChild() { return this.enterChild(1, 0, 4 /* Side.DontCare */); }\n    /**\n    Move the cursor to this node's last child.\n    */\n    lastChild() { return this.enterChild(-1, 0, 4 /* Side.DontCare */); }\n    /**\n    Move the cursor to the first child that ends after `pos`.\n    */\n    childAfter(pos) { return this.enterChild(1, pos, 2 /* Side.After */); }\n    /**\n    Move to the last child that starts before `pos`.\n    */\n    childBefore(pos) { return this.enterChild(-1, pos, -2 /* Side.Before */); }\n    /**\n    Move the cursor to the child around `pos`. If side is -1 the\n    child may end at that position, when 1 it may start there. This\n    will also enter [overlaid](#common.MountedTree.overlay)\n    [mounted](#common.NodeProp^mounted) trees unless `overlays` is\n    set to false.\n    */\n    enter(pos, side, mode = this.mode) {\n        if (!this.buffer)\n            return this.yield(this._tree.enter(pos, side, mode));\n        return mode & IterMode.ExcludeBuffers ? false : this.enterChild(1, pos, side);\n    }\n    /**\n    Move to the node's parent node, if this isn't the top node.\n    */\n    parent() {\n        if (!this.buffer)\n            return this.yieldNode((this.mode & IterMode.IncludeAnonymous) ? this._tree._parent : this._tree.parent);\n        if (this.stack.length)\n            return this.yieldBuf(this.stack.pop());\n        let parent = (this.mode & IterMode.IncludeAnonymous) ? this.buffer.parent : this.buffer.parent.nextSignificantParent();\n        this.buffer = null;\n        return this.yieldNode(parent);\n    }\n    /**\n    @internal\n    */\n    sibling(dir) {\n        if (!this.buffer)\n            return !this._tree._parent ? false\n                : this.yield(this._tree.index < 0 ? null\n                    : this._tree._parent.nextChild(this._tree.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode));\n        let { buffer } = this.buffer, d = this.stack.length - 1;\n        if (dir < 0) {\n            let parentStart = d < 0 ? 0 : this.stack[d] + 4;\n            if (this.index != parentStart)\n                return this.yieldBuf(buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */));\n        }\n        else {\n            let after = buffer.buffer[this.index + 3];\n            if (after < (d < 0 ? buffer.buffer.length : buffer.buffer[this.stack[d] + 3]))\n                return this.yieldBuf(after);\n        }\n        return d < 0 ? this.yield(this.buffer.parent.nextChild(this.buffer.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode)) : false;\n    }\n    /**\n    Move to this node's next sibling, if any.\n    */\n    nextSibling() { return this.sibling(1); }\n    /**\n    Move to this node's previous sibling, if any.\n    */\n    prevSibling() { return this.sibling(-1); }\n    atLastNode(dir) {\n        let index, parent, { buffer } = this;\n        if (buffer) {\n            if (dir > 0) {\n                if (this.index < buffer.buffer.buffer.length)\n                    return false;\n            }\n            else {\n                for (let i = 0; i < this.index; i++)\n                    if (buffer.buffer.buffer[i + 3] < this.index)\n                        return false;\n            }\n            ({ index, parent } = buffer);\n        }\n        else {\n            ({ index, _parent: parent } = this._tree);\n        }\n        for (; parent; { index, _parent: parent } = parent) {\n            if (index > -1)\n                for (let i = index + dir, e = dir < 0 ? -1 : parent._tree.children.length; i != e; i += dir) {\n                    let child = parent._tree.children[i];\n                    if ((this.mode & IterMode.IncludeAnonymous) ||\n                        child instanceof TreeBuffer ||\n                        !child.type.isAnonymous ||\n                        hasChild(child))\n                        return false;\n                }\n        }\n        return true;\n    }\n    move(dir, enter) {\n        if (enter && this.enterChild(dir, 0, 4 /* Side.DontCare */))\n            return true;\n        for (;;) {\n            if (this.sibling(dir))\n                return true;\n            if (this.atLastNode(dir) || !this.parent())\n                return false;\n        }\n    }\n    /**\n    Move to the next node in a\n    [pre-order](https://en.wikipedia.org/wiki/Tree_traversal#Pre-order,_NLR)\n    traversal, going from a node to its first child or, if the\n    current node is empty or `enter` is false, its next sibling or\n    the next sibling of the first parent node that has one.\n    */\n    next(enter = true) { return this.move(1, enter); }\n    /**\n    Move to the next node in a last-to-first pre-order traversal. A\n    node is followed by its last child or, if it has none, its\n    previous sibling or the previous sibling of the first parent\n    node that has one.\n    */\n    prev(enter = true) { return this.move(-1, enter); }\n    /**\n    Move the cursor to the innermost node that covers `pos`. If\n    `side` is -1, it will enter nodes that end at `pos`. If it is 1,\n    it will enter nodes that start at `pos`.\n    */\n    moveTo(pos, side = 0) {\n        // Move up to a node that actually holds the position, if possible\n        while (this.from == this.to ||\n            (side < 1 ? this.from >= pos : this.from > pos) ||\n            (side > -1 ? this.to <= pos : this.to < pos))\n            if (!this.parent())\n                break;\n        // Then scan down into child nodes as far as possible\n        while (this.enterChild(1, pos, side)) { }\n        return this;\n    }\n    /**\n    Get a [syntax node](#common.SyntaxNode) at the cursor's current\n    position.\n    */\n    get node() {\n        if (!this.buffer)\n            return this._tree;\n        let cache = this.bufferNode, result = null, depth = 0;\n        if (cache && cache.context == this.buffer) {\n            scan: for (let index = this.index, d = this.stack.length; d >= 0;) {\n                for (let c = cache; c; c = c._parent)\n                    if (c.index == index) {\n                        if (index == this.index)\n                            return c;\n                        result = c;\n                        depth = d + 1;\n                        break scan;\n                    }\n                index = this.stack[--d];\n            }\n        }\n        for (let i = depth; i < this.stack.length; i++)\n            result = new BufferNode(this.buffer, result, this.stack[i]);\n        return this.bufferNode = new BufferNode(this.buffer, result, this.index);\n    }\n    /**\n    Get the [tree](#common.Tree) that represents the current node, if\n    any. Will return null when the node is in a [tree\n    buffer](#common.TreeBuffer).\n    */\n    get tree() {\n        return this.buffer ? null : this._tree._tree;\n    }\n    /**\n    Iterate over the current node and all its descendants, calling\n    `enter` when entering a node and `leave`, if given, when leaving\n    one. When `enter` returns `false`, any children of that node are\n    skipped, and `leave` isn't called for it.\n    */\n    iterate(enter, leave) {\n        for (let depth = 0;;) {\n            let mustLeave = false;\n            if (this.type.isAnonymous || enter(this) !== false) {\n                if (this.firstChild()) {\n                    depth++;\n                    continue;\n                }\n                if (!this.type.isAnonymous)\n                    mustLeave = true;\n            }\n            for (;;) {\n                if (mustLeave && leave)\n                    leave(this);\n                mustLeave = this.type.isAnonymous;\n                if (!depth)\n                    return;\n                if (this.nextSibling())\n                    break;\n                this.parent();\n                depth--;\n                mustLeave = true;\n            }\n        }\n    }\n    /**\n    Test whether the current node matches a given context—a sequence\n    of direct parent node names. Empty strings in the context array\n    are treated as wildcards.\n    */\n    matchContext(context) {\n        if (!this.buffer)\n            return matchNodeContext(this.node.parent, context);\n        let { buffer } = this.buffer, { types } = buffer.set;\n        for (let i = context.length - 1, d = this.stack.length - 1; i >= 0; d--) {\n            if (d < 0)\n                return matchNodeContext(this._tree, context, i);\n            let type = types[buffer.buffer[this.stack[d]]];\n            if (!type.isAnonymous) {\n                if (context[i] && context[i] != type.name)\n                    return false;\n                i--;\n            }\n        }\n        return true;\n    }\n}\nfunction hasChild(tree) {\n    return tree.children.some(ch => ch instanceof TreeBuffer || !ch.type.isAnonymous || hasChild(ch));\n}\nfunction buildTree(data) {\n    var _a;\n    let { buffer, nodeSet, maxBufferLength = DefaultBufferLength, reused = [], minRepeatType = nodeSet.types.length } = data;\n    let cursor = Array.isArray(buffer) ? new FlatBufferCursor(buffer, buffer.length) : buffer;\n    let types = nodeSet.types;\n    let contextHash = 0, lookAhead = 0;\n    function takeNode(parentStart, minPos, children, positions, inRepeat, depth) {\n        let { id, start, end, size } = cursor;\n        let lookAheadAtStart = lookAhead, contextAtStart = contextHash;\n        if (size < 0) {\n            cursor.next();\n            if (size == -1 /* SpecialRecord.Reuse */) {\n                let node = reused[id];\n                children.push(node);\n                positions.push(start - parentStart);\n                return;\n            }\n            else if (size == -3 /* SpecialRecord.ContextChange */) { // Context change\n                contextHash = id;\n                return;\n            }\n            else if (size == -4 /* SpecialRecord.LookAhead */) {\n                lookAhead = id;\n                return;\n            }\n            else {\n                throw new RangeError(`Unrecognized record size: ${size}`);\n            }\n        }\n        let type = types[id], node, buffer;\n        let startPos = start - parentStart;\n        if (end - start <= maxBufferLength && (buffer = findBufferSize(cursor.pos - minPos, inRepeat))) {\n            // Small enough for a buffer, and no reused nodes inside\n            let data = new Uint16Array(buffer.size - buffer.skip);\n            let endPos = cursor.pos - buffer.size, index = data.length;\n            while (cursor.pos > endPos)\n                index = copyToBuffer(buffer.start, data, index);\n            node = new TreeBuffer(data, end - buffer.start, nodeSet);\n            startPos = buffer.start - parentStart;\n        }\n        else { // Make it a node\n            let endPos = cursor.pos - size;\n            cursor.next();\n            let localChildren = [], localPositions = [];\n            let localInRepeat = id >= minRepeatType ? id : -1;\n            let lastGroup = 0, lastEnd = end;\n            while (cursor.pos > endPos) {\n                if (localInRepeat >= 0 && cursor.id == localInRepeat && cursor.size >= 0) {\n                    if (cursor.end <= lastEnd - maxBufferLength) {\n                        makeRepeatLeaf(localChildren, localPositions, start, lastGroup, cursor.end, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart);\n                        lastGroup = localChildren.length;\n                        lastEnd = cursor.end;\n                    }\n                    cursor.next();\n                }\n                else if (depth > 2500 /* CutOff.Depth */) {\n                    takeFlatNode(start, endPos, localChildren, localPositions);\n                }\n                else {\n                    takeNode(start, endPos, localChildren, localPositions, localInRepeat, depth + 1);\n                }\n            }\n            if (localInRepeat >= 0 && lastGroup > 0 && lastGroup < localChildren.length)\n                makeRepeatLeaf(localChildren, localPositions, start, lastGroup, start, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart);\n            localChildren.reverse();\n            localPositions.reverse();\n            if (localInRepeat > -1 && lastGroup > 0) {\n                let make = makeBalanced(type, contextAtStart);\n                node = balanceRange(type, localChildren, localPositions, 0, localChildren.length, 0, end - start, make, make);\n            }\n            else {\n                node = makeTree(type, localChildren, localPositions, end - start, lookAheadAtStart - end, contextAtStart);\n            }\n        }\n        children.push(node);\n        positions.push(startPos);\n    }\n    function takeFlatNode(parentStart, minPos, children, positions) {\n        let nodes = []; // Temporary, inverted array of leaf nodes found, with absolute positions\n        let nodeCount = 0, stopAt = -1;\n        while (cursor.pos > minPos) {\n            let { id, start, end, size } = cursor;\n            if (size > 4) { // Not a leaf\n                cursor.next();\n            }\n            else if (stopAt > -1 && start < stopAt) {\n                break;\n            }\n            else {\n                if (stopAt < 0)\n                    stopAt = end - maxBufferLength;\n                nodes.push(id, start, end);\n                nodeCount++;\n                cursor.next();\n            }\n        }\n        if (nodeCount) {\n            let buffer = new Uint16Array(nodeCount * 4);\n            let start = nodes[nodes.length - 2];\n            for (let i = nodes.length - 3, j = 0; i >= 0; i -= 3) {\n                buffer[j++] = nodes[i];\n                buffer[j++] = nodes[i + 1] - start;\n                buffer[j++] = nodes[i + 2] - start;\n                buffer[j++] = j;\n            }\n            children.push(new TreeBuffer(buffer, nodes[2] - start, nodeSet));\n            positions.push(start - parentStart);\n        }\n    }\n    function makeBalanced(type, contextHash) {\n        return (children, positions, length) => {\n            let lookAhead = 0, lastI = children.length - 1, last, lookAheadProp;\n            if (lastI >= 0 && (last = children[lastI]) instanceof Tree) {\n                if (!lastI && last.type == type && last.length == length)\n                    return last;\n                if (lookAheadProp = last.prop(NodeProp.lookAhead))\n                    lookAhead = positions[lastI] + last.length + lookAheadProp;\n            }\n            return makeTree(type, children, positions, length, lookAhead, contextHash);\n        };\n    }\n    function makeRepeatLeaf(children, positions, base, i, from, to, type, lookAhead, contextHash) {\n        let localChildren = [], localPositions = [];\n        while (children.length > i) {\n            localChildren.push(children.pop());\n            localPositions.push(positions.pop() + base - from);\n        }\n        children.push(makeTree(nodeSet.types[type], localChildren, localPositions, to - from, lookAhead - to, contextHash));\n        positions.push(from - base);\n    }\n    function makeTree(type, children, positions, length, lookAhead, contextHash, props) {\n        if (contextHash) {\n            let pair = [NodeProp.contextHash, contextHash];\n            props = props ? [pair].concat(props) : [pair];\n        }\n        if (lookAhead > 25) {\n            let pair = [NodeProp.lookAhead, lookAhead];\n            props = props ? [pair].concat(props) : [pair];\n        }\n        return new Tree(type, children, positions, length, props);\n    }\n    function findBufferSize(maxSize, inRepeat) {\n        // Scan through the buffer to find previous siblings that fit\n        // together in a TreeBuffer, and don't contain any reused nodes\n        // (which can't be stored in a buffer).\n        // If `inRepeat` is > -1, ignore node boundaries of that type for\n        // nesting, but make sure the end falls either at the start\n        // (`maxSize`) or before such a node.\n        let fork = cursor.fork();\n        let size = 0, start = 0, skip = 0, minStart = fork.end - maxBufferLength;\n        let result = { size: 0, start: 0, skip: 0 };\n        scan: for (let minPos = fork.pos - maxSize; fork.pos > minPos;) {\n            let nodeSize = fork.size;\n            // Pretend nested repeat nodes of the same type don't exist\n            if (fork.id == inRepeat && nodeSize >= 0) {\n                // Except that we store the current state as a valid return\n                // value.\n                result.size = size;\n                result.start = start;\n                result.skip = skip;\n                skip += 4;\n                size += 4;\n                fork.next();\n                continue;\n            }\n            let startPos = fork.pos - nodeSize;\n            if (nodeSize < 0 || startPos < minPos || fork.start < minStart)\n                break;\n            let localSkipped = fork.id >= minRepeatType ? 4 : 0;\n            let nodeStart = fork.start;\n            fork.next();\n            while (fork.pos > startPos) {\n                if (fork.size < 0) {\n                    if (fork.size == -3 /* SpecialRecord.ContextChange */ || fork.size == -4 /* SpecialRecord.LookAhead */)\n                        localSkipped += 4;\n                    else\n                        break scan;\n                }\n                else if (fork.id >= minRepeatType) {\n                    localSkipped += 4;\n                }\n                fork.next();\n            }\n            start = nodeStart;\n            size += nodeSize;\n            skip += localSkipped;\n        }\n        if (inRepeat < 0 || size == maxSize) {\n            result.size = size;\n            result.start = start;\n            result.skip = skip;\n        }\n        return result.size > 4 ? result : undefined;\n    }\n    function copyToBuffer(bufferStart, buffer, index) {\n        let { id, start, end, size } = cursor;\n        cursor.next();\n        if (size >= 0 && id < minRepeatType) {\n            let startIndex = index;\n            if (size > 4) {\n                let endPos = cursor.pos - (size - 4);\n                while (cursor.pos > endPos)\n                    index = copyToBuffer(bufferStart, buffer, index);\n            }\n            buffer[--index] = startIndex;\n            buffer[--index] = end - bufferStart;\n            buffer[--index] = start - bufferStart;\n            buffer[--index] = id;\n        }\n        else if (size == -3 /* SpecialRecord.ContextChange */) {\n            contextHash = id;\n        }\n        else if (size == -4 /* SpecialRecord.LookAhead */) {\n            lookAhead = id;\n        }\n        return index;\n    }\n    let children = [], positions = [];\n    while (cursor.pos > 0)\n        takeNode(data.start || 0, data.bufferStart || 0, children, positions, -1, 0);\n    let length = (_a = data.length) !== null && _a !== void 0 ? _a : (children.length ? positions[0] + children[0].length : 0);\n    return new Tree(types[data.topID], children.reverse(), positions.reverse(), length);\n}\nconst nodeSizeCache = new WeakMap;\nfunction nodeSize(balanceType, node) {\n    if (!balanceType.isAnonymous || node instanceof TreeBuffer || node.type != balanceType)\n        return 1;\n    let size = nodeSizeCache.get(node);\n    if (size == null) {\n        size = 1;\n        for (let child of node.children) {\n            if (child.type != balanceType || !(child instanceof Tree)) {\n                size = 1;\n                break;\n            }\n            size += nodeSize(balanceType, child);\n        }\n        nodeSizeCache.set(node, size);\n    }\n    return size;\n}\nfunction balanceRange(\n// The type the balanced tree's inner nodes.\nbalanceType, \n// The direct children and their positions\nchildren, positions, \n// The index range in children/positions to use\nfrom, to, \n// The start position of the nodes, relative to their parent.\nstart, \n// Length of the outer node\nlength, \n// Function to build the top node of the balanced tree\nmkTop, \n// Function to build internal nodes for the balanced tree\nmkTree) {\n    let total = 0;\n    for (let i = from; i < to; i++)\n        total += nodeSize(balanceType, children[i]);\n    let maxChild = Math.ceil((total * 1.5) / 8 /* Balance.BranchFactor */);\n    let localChildren = [], localPositions = [];\n    function divide(children, positions, from, to, offset) {\n        for (let i = from; i < to;) {\n            let groupFrom = i, groupStart = positions[i], groupSize = nodeSize(balanceType, children[i]);\n            i++;\n            for (; i < to; i++) {\n                let nextSize = nodeSize(balanceType, children[i]);\n                if (groupSize + nextSize >= maxChild)\n                    break;\n                groupSize += nextSize;\n            }\n            if (i == groupFrom + 1) {\n                if (groupSize > maxChild) {\n                    let only = children[groupFrom]; // Only trees can have a size > 1\n                    divide(only.children, only.positions, 0, only.children.length, positions[groupFrom] + offset);\n                    continue;\n                }\n                localChildren.push(children[groupFrom]);\n            }\n            else {\n                let length = positions[i - 1] + children[i - 1].length - groupStart;\n                localChildren.push(balanceRange(balanceType, children, positions, groupFrom, i, groupStart, length, null, mkTree));\n            }\n            localPositions.push(groupStart + offset - start);\n        }\n    }\n    divide(children, positions, from, to, 0);\n    return (mkTop || mkTree)(localChildren, localPositions, length);\n}\n/**\nProvides a way to associate values with pieces of trees. As long\nas that part of the tree is reused, the associated values can be\nretrieved from an updated tree.\n*/\nclass NodeWeakMap {\n    constructor() {\n        this.map = new WeakMap();\n    }\n    setBuffer(buffer, index, value) {\n        let inner = this.map.get(buffer);\n        if (!inner)\n            this.map.set(buffer, inner = new Map);\n        inner.set(index, value);\n    }\n    getBuffer(buffer, index) {\n        let inner = this.map.get(buffer);\n        return inner && inner.get(index);\n    }\n    /**\n    Set the value for this syntax node.\n    */\n    set(node, value) {\n        if (node instanceof BufferNode)\n            this.setBuffer(node.context.buffer, node.index, value);\n        else if (node instanceof TreeNode)\n            this.map.set(node.tree, value);\n    }\n    /**\n    Retrieve value for this syntax node, if it exists in the map.\n    */\n    get(node) {\n        return node instanceof BufferNode ? this.getBuffer(node.context.buffer, node.index)\n            : node instanceof TreeNode ? this.map.get(node.tree) : undefined;\n    }\n    /**\n    Set the value for the node that a cursor currently points to.\n    */\n    cursorSet(cursor, value) {\n        if (cursor.buffer)\n            this.setBuffer(cursor.buffer.buffer, cursor.index, value);\n        else\n            this.map.set(cursor.tree, value);\n    }\n    /**\n    Retrieve the value for the node that a cursor currently points\n    to.\n    */\n    cursorGet(cursor) {\n        return cursor.buffer ? this.getBuffer(cursor.buffer.buffer, cursor.index) : this.map.get(cursor.tree);\n    }\n}\n\n/**\nTree fragments are used during [incremental\nparsing](#common.Parser.startParse) to track parts of old trees\nthat can be reused in a new parse. An array of fragments is used\nto track regions of an old tree whose nodes might be reused in new\nparses. Use the static\n[`applyChanges`](#common.TreeFragment^applyChanges) method to\nupdate fragments for document changes.\n*/\nclass TreeFragment {\n    /**\n    Construct a tree fragment. You'll usually want to use\n    [`addTree`](#common.TreeFragment^addTree) and\n    [`applyChanges`](#common.TreeFragment^applyChanges) instead of\n    calling this directly.\n    */\n    constructor(\n    /**\n    The start of the unchanged range pointed to by this fragment.\n    This refers to an offset in the _updated_ document (as opposed\n    to the original tree).\n    */\n    from, \n    /**\n    The end of the unchanged range.\n    */\n    to, \n    /**\n    The tree that this fragment is based on.\n    */\n    tree, \n    /**\n    The offset between the fragment's tree and the document that\n    this fragment can be used against. Add this when going from\n    document to tree positions, subtract it to go from tree to\n    document positions.\n    */\n    offset, openStart = false, openEnd = false) {\n        this.from = from;\n        this.to = to;\n        this.tree = tree;\n        this.offset = offset;\n        this.open = (openStart ? 1 /* Open.Start */ : 0) | (openEnd ? 2 /* Open.End */ : 0);\n    }\n    /**\n    Whether the start of the fragment represents the start of a\n    parse, or the end of a change. (In the second case, it may not\n    be safe to reuse some nodes at the start, depending on the\n    parsing algorithm.)\n    */\n    get openStart() { return (this.open & 1 /* Open.Start */) > 0; }\n    /**\n    Whether the end of the fragment represents the end of a\n    full-document parse, or the start of a change.\n    */\n    get openEnd() { return (this.open & 2 /* Open.End */) > 0; }\n    /**\n    Create a set of fragments from a freshly parsed tree, or update\n    an existing set of fragments by replacing the ones that overlap\n    with a tree with content from the new tree. When `partial` is\n    true, the parse is treated as incomplete, and the resulting\n    fragment has [`openEnd`](#common.TreeFragment.openEnd) set to\n    true.\n    */\n    static addTree(tree, fragments = [], partial = false) {\n        let result = [new TreeFragment(0, tree.length, tree, 0, false, partial)];\n        for (let f of fragments)\n            if (f.to > tree.length)\n                result.push(f);\n        return result;\n    }\n    /**\n    Apply a set of edits to an array of fragments, removing or\n    splitting fragments as necessary to remove edited ranges, and\n    adjusting offsets for fragments that moved.\n    */\n    static applyChanges(fragments, changes, minGap = 128) {\n        if (!changes.length)\n            return fragments;\n        let result = [];\n        let fI = 1, nextF = fragments.length ? fragments[0] : null;\n        for (let cI = 0, pos = 0, off = 0;; cI++) {\n            let nextC = cI < changes.length ? changes[cI] : null;\n            let nextPos = nextC ? nextC.fromA : 1e9;\n            if (nextPos - pos >= minGap)\n                while (nextF && nextF.from < nextPos) {\n                    let cut = nextF;\n                    if (pos >= cut.from || nextPos <= cut.to || off) {\n                        let fFrom = Math.max(cut.from, pos) - off, fTo = Math.min(cut.to, nextPos) - off;\n                        cut = fFrom >= fTo ? null : new TreeFragment(fFrom, fTo, cut.tree, cut.offset + off, cI > 0, !!nextC);\n                    }\n                    if (cut)\n                        result.push(cut);\n                    if (nextF.to > nextPos)\n                        break;\n                    nextF = fI < fragments.length ? fragments[fI++] : null;\n                }\n            if (!nextC)\n                break;\n            pos = nextC.toA;\n            off = nextC.toA - nextC.toB;\n        }\n        return result;\n    }\n}\n/**\nA superclass that parsers should extend.\n*/\nclass Parser {\n    /**\n    Start a parse, returning a [partial parse](#common.PartialParse)\n    object. [`fragments`](#common.TreeFragment) can be passed in to\n    make the parse incremental.\n    \n    By default, the entire input is parsed. You can pass `ranges`,\n    which should be a sorted array of non-empty, non-overlapping\n    ranges, to parse only those ranges. The tree returned in that\n    case will start at `ranges[0].from`.\n    */\n    startParse(input, fragments, ranges) {\n        if (typeof input == \"string\")\n            input = new StringInput(input);\n        ranges = !ranges ? [new Range(0, input.length)] : ranges.length ? ranges.map(r => new Range(r.from, r.to)) : [new Range(0, 0)];\n        return this.createParse(input, fragments || [], ranges);\n    }\n    /**\n    Run a full parse, returning the resulting tree.\n    */\n    parse(input, fragments, ranges) {\n        let parse = this.startParse(input, fragments, ranges);\n        for (;;) {\n            let done = parse.advance();\n            if (done)\n                return done;\n        }\n    }\n}\nclass StringInput {\n    constructor(string) {\n        this.string = string;\n    }\n    get length() { return this.string.length; }\n    chunk(from) { return this.string.slice(from); }\n    get lineChunks() { return false; }\n    read(from, to) { return this.string.slice(from, to); }\n}\n\n/**\nCreate a parse wrapper that, after the inner parse completes,\nscans its tree for mixed language regions with the `nest`\nfunction, runs the resulting [inner parses](#common.NestedParse),\nand then [mounts](#common.NodeProp^mounted) their results onto the\ntree.\n*/\nfunction parseMixed(nest) {\n    return (parse, input, fragments, ranges) => new MixedParse(parse, nest, input, fragments, ranges);\n}\nclass InnerParse {\n    constructor(parser, parse, overlay, bracketed, target, from) {\n        this.parser = parser;\n        this.parse = parse;\n        this.overlay = overlay;\n        this.bracketed = bracketed;\n        this.target = target;\n        this.from = from;\n    }\n}\nfunction checkRanges(ranges) {\n    if (!ranges.length || ranges.some(r => r.from >= r.to))\n        throw new RangeError(\"Invalid inner parse ranges given: \" + JSON.stringify(ranges));\n}\nclass ActiveOverlay {\n    constructor(parser, predicate, mounts, index, start, bracketed, target, prev) {\n        this.parser = parser;\n        this.predicate = predicate;\n        this.mounts = mounts;\n        this.index = index;\n        this.start = start;\n        this.bracketed = bracketed;\n        this.target = target;\n        this.prev = prev;\n        this.depth = 0;\n        this.ranges = [];\n    }\n}\nconst stoppedInner = new NodeProp({ perNode: true });\nclass MixedParse {\n    constructor(base, nest, input, fragments, ranges) {\n        this.nest = nest;\n        this.input = input;\n        this.fragments = fragments;\n        this.ranges = ranges;\n        this.inner = [];\n        this.innerDone = 0;\n        this.baseTree = null;\n        this.stoppedAt = null;\n        this.baseParse = base;\n    }\n    advance() {\n        if (this.baseParse) {\n            let done = this.baseParse.advance();\n            if (!done)\n                return null;\n            this.baseParse = null;\n            this.baseTree = done;\n            this.startInner();\n            if (this.stoppedAt != null)\n                for (let inner of this.inner)\n                    inner.parse.stopAt(this.stoppedAt);\n        }\n        if (this.innerDone == this.inner.length) {\n            let result = this.baseTree;\n            if (this.stoppedAt != null)\n                result = new Tree(result.type, result.children, result.positions, result.length, result.propValues.concat([[stoppedInner, this.stoppedAt]]));\n            return result;\n        }\n        let inner = this.inner[this.innerDone], done = inner.parse.advance();\n        if (done) {\n            this.innerDone++;\n            // This is a somewhat dodgy but super helpful hack where we\n            // patch up nodes created by the inner parse (and thus\n            // presumably not aliased anywhere else) to hold the information\n            // about the inner parse.\n            let props = Object.assign(Object.create(null), inner.target.props);\n            props[NodeProp.mounted.id] = new MountedTree(done, inner.overlay, inner.parser, inner.bracketed);\n            inner.target.props = props;\n        }\n        return null;\n    }\n    get parsedPos() {\n        if (this.baseParse)\n            return 0;\n        let pos = this.input.length;\n        for (let i = this.innerDone; i < this.inner.length; i++) {\n            if (this.inner[i].from < pos)\n                pos = Math.min(pos, this.inner[i].parse.parsedPos);\n        }\n        return pos;\n    }\n    stopAt(pos) {\n        this.stoppedAt = pos;\n        if (this.baseParse)\n            this.baseParse.stopAt(pos);\n        else\n            for (let i = this.innerDone; i < this.inner.length; i++)\n                this.inner[i].parse.stopAt(pos);\n    }\n    startInner() {\n        let fragmentCursor = new FragmentCursor(this.fragments);\n        let overlay = null;\n        let covered = null;\n        let cursor = new TreeCursor(new TreeNode(this.baseTree, this.ranges[0].from, 0, null), IterMode.IncludeAnonymous | IterMode.IgnoreMounts);\n        scan: for (let nest, isCovered;;) {\n            let enter = true, range;\n            if (this.stoppedAt != null && cursor.from >= this.stoppedAt) {\n                enter = false;\n            }\n            else if (fragmentCursor.hasNode(cursor)) {\n                if (overlay) {\n                    let match = overlay.mounts.find(m => m.frag.from <= cursor.from && m.frag.to >= cursor.to && m.mount.overlay);\n                    if (match)\n                        for (let r of match.mount.overlay) {\n                            let from = r.from + match.pos, to = r.to + match.pos;\n                            if (from >= cursor.from && to <= cursor.to && !overlay.ranges.some(r => r.from < to && r.to > from))\n                                overlay.ranges.push({ from, to });\n                        }\n                }\n                enter = false;\n            }\n            else if (covered && (isCovered = checkCover(covered.ranges, cursor.from, cursor.to))) {\n                enter = isCovered != 2 /* Cover.Full */;\n            }\n            else if (!cursor.type.isAnonymous && (nest = this.nest(cursor, this.input)) &&\n                (cursor.from < cursor.to || !nest.overlay)) {\n                if (!cursor.tree) {\n                    materialize(cursor);\n                    // materialize create one more level of nesting\n                    // we need to add depth to active overlay for going backwards\n                    if (overlay)\n                        overlay.depth++;\n                    if (covered)\n                        covered.depth++;\n                }\n                let oldMounts = fragmentCursor.findMounts(cursor.from, nest.parser);\n                if (typeof nest.overlay == \"function\") {\n                    overlay = new ActiveOverlay(nest.parser, nest.overlay, oldMounts, this.inner.length, cursor.from, !!nest.bracketed, cursor.tree, overlay);\n                }\n                else {\n                    let ranges = punchRanges(this.ranges, nest.overlay ||\n                        (cursor.from < cursor.to ? [new Range(cursor.from, cursor.to)] : []));\n                    if (ranges.length)\n                        checkRanges(ranges);\n                    if (ranges.length || !nest.overlay)\n                        this.inner.push(new InnerParse(nest.parser, ranges.length ? nest.parser.startParse(this.input, enterFragments(oldMounts, ranges), ranges)\n                            : nest.parser.startParse(\"\"), nest.overlay ? nest.overlay.map(r => new Range(r.from - cursor.from, r.to - cursor.from)) : null, !!nest.bracketed, cursor.tree, ranges.length ? ranges[0].from : cursor.from));\n                    if (!nest.overlay)\n                        enter = false;\n                    else if (ranges.length)\n                        covered = { ranges, depth: 0, prev: covered };\n                }\n            }\n            else if (overlay && (range = overlay.predicate(cursor))) {\n                if (range === true)\n                    range = new Range(cursor.from, cursor.to);\n                if (range.from < range.to) {\n                    let last = overlay.ranges.length - 1;\n                    if (last >= 0 && overlay.ranges[last].to == range.from)\n                        overlay.ranges[last] = { from: overlay.ranges[last].from, to: range.to };\n                    else\n                        overlay.ranges.push(range);\n                }\n            }\n            if (enter && cursor.firstChild()) {\n                if (overlay)\n                    overlay.depth++;\n                if (covered)\n                    covered.depth++;\n            }\n            else {\n                for (;;) {\n                    if (cursor.nextSibling())\n                        break;\n                    if (!cursor.parent())\n                        break scan;\n                    if (overlay && !--overlay.depth) {\n                        let ranges = punchRanges(this.ranges, overlay.ranges);\n                        if (ranges.length) {\n                            checkRanges(ranges);\n                            this.inner.splice(overlay.index, 0, new InnerParse(overlay.parser, overlay.parser.startParse(this.input, enterFragments(overlay.mounts, ranges), ranges), overlay.ranges.map(r => new Range(r.from - overlay.start, r.to - overlay.start)), overlay.bracketed, overlay.target, ranges[0].from));\n                        }\n                        overlay = overlay.prev;\n                    }\n                    if (covered && !--covered.depth)\n                        covered = covered.prev;\n                }\n            }\n        }\n    }\n}\nfunction checkCover(covered, from, to) {\n    for (let range of covered) {\n        if (range.from >= to)\n            break;\n        if (range.to > from)\n            return range.from <= from && range.to >= to ? 2 /* Cover.Full */ : 1 /* Cover.Partial */;\n    }\n    return 0 /* Cover.None */;\n}\n// Take a piece of buffer and convert it into a stand-alone\n// TreeBuffer.\nfunction sliceBuf(buf, startI, endI, nodes, positions, off) {\n    if (startI < endI) {\n        let from = buf.buffer[startI + 1];\n        nodes.push(buf.slice(startI, endI, from));\n        positions.push(from - off);\n    }\n}\n// This function takes a node that's in a buffer, and converts it, and\n// its parent buffer nodes, into a Tree. This is again acting on the\n// assumption that the trees and buffers have been constructed by the\n// parse that was ran via the mix parser, and thus aren't shared with\n// any other code, making violations of the immutability safe.\nfunction materialize(cursor) {\n    let { node } = cursor, stack = [];\n    let buffer = node.context.buffer;\n    // Scan up to the nearest tree\n    do {\n        stack.push(cursor.index);\n        cursor.parent();\n    } while (!cursor.tree);\n    // Find the index of the buffer in that tree\n    let base = cursor.tree, i = base.children.indexOf(buffer);\n    let buf = base.children[i], b = buf.buffer, newStack = [i];\n    // Split a level in the buffer, putting the nodes before and after\n    // the child that contains `node` into new buffers.\n    function split(startI, endI, type, innerOffset, length, stackPos) {\n        let targetI = stack[stackPos];\n        let children = [], positions = [];\n        sliceBuf(buf, startI, targetI, children, positions, innerOffset);\n        let from = b[targetI + 1], to = b[targetI + 2];\n        newStack.push(children.length);\n        let child = stackPos\n            ? split(targetI + 4, b[targetI + 3], buf.set.types[b[targetI]], from, to - from, stackPos - 1)\n            : node.toTree();\n        children.push(child);\n        positions.push(from - innerOffset);\n        sliceBuf(buf, b[targetI + 3], endI, children, positions, innerOffset);\n        return new Tree(type, children, positions, length);\n    }\n    base.children[i] = split(0, b.length, NodeType.none, 0, buf.length, stack.length - 1);\n    // Move the cursor back to the target node\n    for (let index of newStack) {\n        let tree = cursor.tree.children[index], pos = cursor.tree.positions[index];\n        cursor.yield(new TreeNode(tree, pos + cursor.from, index, cursor._tree));\n    }\n}\nclass StructureCursor {\n    constructor(root, offset) {\n        this.offset = offset;\n        this.done = false;\n        this.cursor = root.cursor(IterMode.IncludeAnonymous | IterMode.IgnoreMounts);\n    }\n    // Move to the first node (in pre-order) that starts at or after `pos`.\n    moveTo(pos) {\n        let { cursor } = this, p = pos - this.offset;\n        while (!this.done && cursor.from < p) {\n            if (cursor.to >= pos && cursor.enter(p, 1, IterMode.IgnoreOverlays | IterMode.ExcludeBuffers)) ;\n            else if (cursor.to <= pos) {\n                if (!cursor.next(false))\n                    this.done = true;\n                // Moved to next node\n            }\n            else {\n                break;\n            }\n        }\n    }\n    hasNode(cursor) {\n        this.moveTo(cursor.from);\n        if (!this.done && this.cursor.from + this.offset == cursor.from && this.cursor.tree) {\n            for (let tree = this.cursor.tree;;) {\n                if (tree == cursor.tree)\n                    return true;\n                if (tree.children.length && tree.positions[0] == 0 && tree.children[0] instanceof Tree)\n                    tree = tree.children[0];\n                else\n                    break;\n            }\n        }\n        return false;\n    }\n}\nclass FragmentCursor {\n    constructor(fragments) {\n        var _a;\n        this.fragments = fragments;\n        this.curTo = 0;\n        this.fragI = 0;\n        if (fragments.length) {\n            let first = this.curFrag = fragments[0];\n            this.curTo = (_a = first.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : first.to;\n            this.inner = new StructureCursor(first.tree, -first.offset);\n        }\n        else {\n            this.curFrag = this.inner = null;\n        }\n    }\n    hasNode(node) {\n        while (this.curFrag && node.from >= this.curTo)\n            this.nextFrag();\n        return this.curFrag && this.curFrag.from <= node.from && this.curTo >= node.to && this.inner.hasNode(node);\n    }\n    nextFrag() {\n        var _a;\n        this.fragI++;\n        if (this.fragI == this.fragments.length) {\n            this.curFrag = this.inner = null;\n        }\n        else {\n            let frag = this.curFrag = this.fragments[this.fragI];\n            this.curTo = (_a = frag.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : frag.to;\n            this.inner = new StructureCursor(frag.tree, -frag.offset);\n        }\n    }\n    findMounts(pos, parser) {\n        var _a;\n        let result = [];\n        if (this.inner) {\n            this.inner.cursor.moveTo(pos, 1);\n            for (let pos = this.inner.cursor.node; pos; pos = pos.parent) {\n                let mount = (_a = pos.tree) === null || _a === void 0 ? void 0 : _a.prop(NodeProp.mounted);\n                if (mount && mount.parser == parser) {\n                    for (let i = this.fragI; i < this.fragments.length; i++) {\n                        let frag = this.fragments[i];\n                        if (frag.from >= pos.to)\n                            break;\n                        if (frag.tree == this.curFrag.tree)\n                            result.push({\n                                frag,\n                                pos: pos.from - frag.offset,\n                                mount\n                            });\n                    }\n                }\n            }\n        }\n        return result;\n    }\n}\nfunction punchRanges(outer, ranges) {\n    let copy = null, current = ranges;\n    for (let i = 1, j = 0; i < outer.length; i++) {\n        let gapFrom = outer[i - 1].to, gapTo = outer[i].from;\n        for (; j < current.length; j++) {\n            let r = current[j];\n            if (r.from >= gapTo)\n                break;\n            if (r.to <= gapFrom)\n                continue;\n            if (!copy)\n                current = copy = ranges.slice();\n            if (r.from < gapFrom) {\n                copy[j] = new Range(r.from, gapFrom);\n                if (r.to > gapTo)\n                    copy.splice(j + 1, 0, new Range(gapTo, r.to));\n            }\n            else if (r.to > gapTo) {\n                copy[j--] = new Range(gapTo, r.to);\n            }\n            else {\n                copy.splice(j--, 1);\n            }\n        }\n    }\n    return current;\n}\nfunction findCoverChanges(a, b, from, to) {\n    let iA = 0, iB = 0, inA = false, inB = false, pos = -1e9;\n    let result = [];\n    for (;;) {\n        let nextA = iA == a.length ? 1e9 : inA ? a[iA].to : a[iA].from;\n        let nextB = iB == b.length ? 1e9 : inB ? b[iB].to : b[iB].from;\n        if (inA != inB) {\n            let start = Math.max(pos, from), end = Math.min(nextA, nextB, to);\n            if (start < end)\n                result.push(new Range(start, end));\n        }\n        pos = Math.min(nextA, nextB);\n        if (pos == 1e9)\n            break;\n        if (nextA == pos) {\n            if (!inA)\n                inA = true;\n            else {\n                inA = false;\n                iA++;\n            }\n        }\n        if (nextB == pos) {\n            if (!inB)\n                inB = true;\n            else {\n                inB = false;\n                iB++;\n            }\n        }\n    }\n    return result;\n}\n// Given a number of fragments for the outer tree, and a set of ranges\n// to parse, find fragments for inner trees mounted around those\n// ranges, if any.\nfunction enterFragments(mounts, ranges) {\n    let result = [];\n    for (let { pos, mount, frag } of mounts) {\n        let startPos = pos + (mount.overlay ? mount.overlay[0].from : 0), endPos = startPos + mount.tree.length;\n        let from = Math.max(frag.from, startPos), to = Math.min(frag.to, endPos);\n        if (mount.overlay) {\n            let overlay = mount.overlay.map(r => new Range(r.from + pos, r.to + pos));\n            let changes = findCoverChanges(ranges, overlay, from, to);\n            for (let i = 0, pos = from;; i++) {\n                let last = i == changes.length, end = last ? to : changes[i].from;\n                if (end > pos)\n                    result.push(new TreeFragment(pos, end, mount.tree, -startPos, frag.from >= pos || frag.openStart, frag.to <= end || frag.openEnd));\n                if (last)\n                    break;\n                pos = changes[i].to;\n            }\n        }\n        else {\n            result.push(new TreeFragment(from, to, mount.tree, -startPos, frag.from >= startPos || frag.openStart, frag.to <= endPos || frag.openEnd));\n        }\n    }\n    return result;\n}\n\nexport { DefaultBufferLength, IterMode, MountedTree, NodeProp, NodeSet, NodeType, NodeWeakMap, Parser, Tree, TreeBuffer, TreeCursor, TreeFragment, parseMixed };\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nmodule.exports = cloneBuffer;\n","import { STARTED } from './execution-states';\n\nclass UnboundedReducer {\n  step() {\n    return STARTED;\n  }\n}\n\nconst SINGLETON_REDUCER = new UnboundedReducer();\n\nclass UnboundedPolicy {\n  makeReducer() {\n    return SINGLETON_REDUCER;\n  }\n}\n\nexport default UnboundedPolicy;\n","import Scheduler from './scheduler/scheduler';\nimport UnboundedSchedulerPolicy from './scheduler/policies/unbounded-policy';\nimport EnqueueSchedulerPolicy from './scheduler/policies/enqueued-policy';\nimport DropSchedulerPolicy from './scheduler/policies/drop-policy';\nimport KeepLatestSchedulerPolicy from './scheduler/policies/keep-latest-policy';\nimport RestartableSchedulerPolicy from './scheduler/policies/restartable-policy';\nimport { Task } from './task/task';\nimport { TaskGroup } from './task/task-group';\nimport { DEFAULT_ENVIRONMENT } from './environment';\n\nfunction assertModifiersNotMixedWithGroup(obj) {\n  if (obj._hasSetConcurrencyConstraint && obj._taskGroupPath) {\n    throw new Error(\n      `Cannot use both 'group' and other concurrency-constraining task modifiers (e.g. 'drop', 'enqueue', 'restartable')`,\n    );\n  }\n}\n\nfunction assertUnsetBufferPolicy(obj) {\n  if (obj._hasSetBufferPolicy) {\n    throw new Error(\n      `Cannot set multiple buffer policies on a task or task group. ${obj._schedulerPolicyClass} has already been set for task or task group '${obj.name}'`,\n    );\n  }\n}\n\nconst MODIFIER_REGISTRY = {\n  enqueue: (factory, value) =>\n    value && factory.setBufferPolicy(EnqueueSchedulerPolicy),\n  evented: (factory, value) => value && factory.setEvented(value),\n  debug: (factory, value) => value && factory.setDebug(value),\n  drop: (factory, value) =>\n    value && factory.setBufferPolicy(DropSchedulerPolicy),\n  group: (factory, groupName) => factory.setGroup(groupName),\n  keepLatest: (factory, value) =>\n    value && factory.setBufferPolicy(KeepLatestSchedulerPolicy),\n  maxConcurrency: (factory, maxConcurrency) =>\n    factory.setMaxConcurrency(maxConcurrency),\n  onState: (factory, onStateCallback) => factory.setOnState(onStateCallback),\n  restartable: (factory, value) =>\n    value && factory.setBufferPolicy(RestartableSchedulerPolicy),\n};\n\n/**\n * Callback type defining a task modifier\n *\n * @callback TaskFactory~TaskModifier\n * @param {TaskFactory} factory\n * @param {*} taskModifierOption\n */\n\n/**\n * Registers a new modifier with the modifier registry\n *\n * @param {string} name Name of the modifier\n * @param {TaskFactory~TaskModifier} callback\n */\nexport function registerModifier(name, callback) {\n  if (MODIFIER_REGISTRY[name]) {\n    throw new Error(\n      `A modifier with the name '${name}' has already been defined.`,\n    );\n  }\n\n  MODIFIER_REGISTRY[name] = callback;\n}\n\n/**\n * Returns a specified modifier, if it exists in the registry\n *\n * @param {string} name Name of the modifier\n * @returns {TaskFactory~TaskModifier?}\n */\nexport function getModifier(name) {\n  return MODIFIER_REGISTRY[name];\n}\n\n/**\n * Returns whether a specified modifier exists in the registry\n *\n * @param {string} name Name of the modifier\n * @returns {boolean}\n */\nexport function hasModifier(name) {\n  return name in MODIFIER_REGISTRY;\n}\n\n/**\n * Factory used for instantiating Tasks and Task Groups. Mostly for internal\n * use, but some public APIs exposed via the Task Modifier APIs.\n *\n * <style>\n *  .ignore-this--this-is-here-to-hide-constructor,\n *  #TaskFactory { display: none }\n * </style>\n *\n * @class TaskFactory\n */\nexport class TaskFactory {\n  env = DEFAULT_ENVIRONMENT;\n\n  _debug = null;\n  _enabledModifiers = [];\n  _hasSetConcurrencyConstraint = false;\n  _hasSetBufferPolicy = false;\n  _hasEnabledEvents = false;\n  _maxConcurrency = null;\n  _onStateCallback = (state, taskable) => taskable.setState(state);\n  _schedulerPolicyClass = UnboundedSchedulerPolicy;\n  _taskGroupPath = null;\n\n  constructor(name = '<unknown>', taskDefinition = null, options = {}) {\n    this.name = name;\n    this.taskDefinition = taskDefinition;\n    this.options = options;\n    this._processModifierOptions(options);\n  }\n\n  /**\n   * Returns a new Task bound to the given context\n   *\n   * @protected\n   * @param {*} context\n   * @returns {Task}\n   */\n  createTask(context) {\n    let options = this.getTaskOptions(context);\n\n    return new Task(\n      Object.assign(\n        {\n          generatorFactory: (args) => this.taskDefinition.apply(context, args),\n        },\n        options,\n      ),\n    );\n  }\n\n  /**\n   * Returns a new TaskGroup bound to the given context\n   *\n   * @protected\n   * @param {*} context\n   * @returns {Task}\n   */\n  createTaskGroup(context) {\n    let options = this.getTaskOptions(context);\n\n    return new TaskGroup(options);\n  }\n\n  /**\n   * Returns a modifier callback with the given name bound to this TaskFactory,\n   * if registered.\n   *\n   * @protected\n   * @param {string} name\n   * @returns {TaskFactory~TaskModifier?}\n   */\n  getModifier(name) {\n    if (hasModifier(name)) {\n      return MODIFIER_REGISTRY[name].bind(null, this);\n    }\n  }\n\n  /**\n   * Returns the options provided to TaskFactory\n   *\n   * @public\n   * @returns {object}\n   */\n  getOptions() {\n    return this.options;\n  }\n\n  /**\n   * Returns a new Scheduler instance\n   *\n   * @protected\n   * @param {*} schedulerPolicy\n   * @param {boolean} stateTrackingEnabled\n   * @returns {Scheduler}\n   */\n  getScheduler(schedulerPolicy, stateTrackingEnabled) {\n    return new Scheduler(schedulerPolicy, stateTrackingEnabled);\n  }\n\n  /**\n   * Returns the options to pass to a Task or TaskGroup constructor\n   *\n   * @protected\n   * @param {*} context\n   * @returns {object}\n   */\n  getTaskOptions(context) {\n    let group, scheduler;\n    let onStateCallback = this._onStateCallback;\n\n    if (this._taskGroupPath) {\n      group = context[this._taskGroupPath];\n      if (!(group instanceof TaskGroup)) {\n        throw new Error(\n          `Expected group '${this._taskGroupPath}' to be defined but was not found.`,\n        );\n      }\n\n      scheduler = group.scheduler;\n    } else {\n      let schedulerPolicy = new this._schedulerPolicyClass(\n        this._maxConcurrency,\n      );\n      scheduler = this.getScheduler(\n        schedulerPolicy,\n        onStateCallback && typeof onStateCallback === 'function',\n      );\n    }\n\n    return {\n      context,\n      debug: this._debug,\n      env: this.env,\n      name: this.name,\n      group,\n      scheduler,\n      hasEnabledEvents: this._hasEnabledEvents,\n      onStateCallback,\n      enabledModifiers: this._enabledModifiers,\n      modifierOptions: this.getOptions(),\n    };\n  }\n\n  /**\n   * Sets the Scheduler buffer policy class to the specified value.\n   *\n   * Will raise an assertion if a buffer policy has already been specified\n   *\n   * @param {*} policy\n   * @returns {TaskFactory}\n   */\n  setBufferPolicy(policy) {\n    assertUnsetBufferPolicy(this);\n    this._hasSetBufferPolicy = true;\n    this._hasSetConcurrencyConstraint = true;\n    this._schedulerPolicyClass = policy;\n    assertModifiersNotMixedWithGroup(this);\n\n    return this;\n  }\n\n  /**\n   * Sets debug mode\n   *\n   * @param {boolean} enabled\n   * @returns {TaskFactory}\n   */\n  setDebug(enabled) {\n    this._debug = enabled;\n    return this;\n  }\n\n  /**\n   * Sets whether Task will dispatch Task events or not\n   *\n   * @param {boolean} enabled\n   * @returns {TaskFactory}\n   */\n  setEvented(enabled) {\n    this._hasEnabledEvents = enabled;\n    return this;\n  }\n\n  /**\n   * Sets Scheduling policy's `maxConcurrency`\n   *\n   * @param {number} maxConcurrency\n   * @returns {TaskFactory}\n   */\n  setMaxConcurrency(maxConcurrency) {\n    this._hasSetConcurrencyConstraint = true;\n    this._maxConcurrency = maxConcurrency;\n    return this;\n  }\n\n  /**\n   * Assigns Task created from this factory to the specified group name\n   *\n   * @param {string} group\n   * @returns {TaskFactory}\n   */\n  setGroup(group) {\n    this._taskGroupPath = group;\n    return this;\n  }\n\n  /**\n   * Sets the name of tasks created from this factory\n   *\n   * @param {string} name\n   * @returns {TaskFactory}\n   */\n  setName(name) {\n    this.name = name;\n    return this;\n  }\n\n  /**\n   * Sets the callback used on state updates. Can be set to null to disable\n   * state tracking on tasks.\n   *\n   * @param {function} onStateCallback\n   * @returns {TaskFactory}\n   */\n  setOnState(onStateCallback) {\n    this._onStateCallback = onStateCallback;\n    return this;\n  }\n\n  /**\n   * Sets the definition for tasks created from this factory\n   *\n   * @param {*} taskDefinition\n   * @returns {TaskFactory}\n   */\n  setTaskDefinition(taskDefinition) {\n    this.taskDefinition = taskDefinition;\n    return this;\n  }\n\n  _processModifierOptions(options) {\n    if (!options) {\n      return;\n    }\n\n    for (let key of Object.keys(options)) {\n      let value = options[key];\n      let modifier = this.getModifier(key);\n\n      if (typeof modifier === 'function' && modifier(value)) {\n        this._enabledModifiers.push(key);\n      }\n    }\n  }\n}\n","/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v1.0.35\n   Copyright © 2012-2021 Faisal Salman <f@faisalman.com>\n   MIT License *//*\n   Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n   Supports browser & node.js environment. \n   Demo   : https://faisalman.github.io/ua-parser-js\n   Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n\n    'use strict';\n\n    //////////////\n    // Constants\n    /////////////\n\n\n    var LIBVERSION  = '1.0.35',\n        EMPTY       = '',\n        UNKNOWN     = '?',\n        FUNC_TYPE   = 'function',\n        UNDEF_TYPE  = 'undefined',\n        OBJ_TYPE    = 'object',\n        STR_TYPE    = 'string',\n        MAJOR       = 'major',\n        MODEL       = 'model',\n        NAME        = 'name',\n        TYPE        = 'type',\n        VENDOR      = 'vendor',\n        VERSION     = 'version',\n        ARCHITECTURE= 'architecture',\n        CONSOLE     = 'console',\n        MOBILE      = 'mobile',\n        TABLET      = 'tablet',\n        SMARTTV     = 'smarttv',\n        WEARABLE    = 'wearable',\n        EMBEDDED    = 'embedded',\n        UA_MAX_LENGTH = 350;\n\n    var AMAZON  = 'Amazon',\n        APPLE   = 'Apple',\n        ASUS    = 'ASUS',\n        BLACKBERRY = 'BlackBerry',\n        BROWSER = 'Browser',\n        CHROME  = 'Chrome',\n        EDGE    = 'Edge',\n        FIREFOX = 'Firefox',\n        GOOGLE  = 'Google',\n        HUAWEI  = 'Huawei',\n        LG      = 'LG',\n        MICROSOFT = 'Microsoft',\n        MOTOROLA  = 'Motorola',\n        OPERA   = 'Opera',\n        SAMSUNG = 'Samsung',\n        SHARP   = 'Sharp',\n        SONY    = 'Sony',\n        VIERA   = 'Viera',\n        XIAOMI  = 'Xiaomi',\n        ZEBRA   = 'Zebra',\n        FACEBOOK    = 'Facebook',\n        CHROMIUM_OS = 'Chromium OS',\n        MAC_OS  = 'Mac OS';\n\n    ///////////\n    // Helper\n    //////////\n\n    var extend = function (regexes, extensions) {\n            var mergedRegexes = {};\n            for (var i in regexes) {\n                if (extensions[i] && extensions[i].length % 2 === 0) {\n                    mergedRegexes[i] = extensions[i].concat(regexes[i]);\n                } else {\n                    mergedRegexes[i] = regexes[i];\n                }\n            }\n            return mergedRegexes;\n        },\n        enumerize = function (arr) {\n            var enums = {};\n            for (var i=0; i<arr.length; i++) {\n                enums[arr[i].toUpperCase()] = arr[i];\n            }\n            return enums;\n        },\n        has = function (str1, str2) {\n            return typeof str1 === STR_TYPE ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;\n        },\n        lowerize = function (str) {\n            return str.toLowerCase();\n        },\n        majorize = function (version) {\n            return typeof(version) === STR_TYPE ? version.replace(/[^\\d\\.]/g, EMPTY).split('.')[0] : undefined;\n        },\n        trim = function (str, len) {\n            if (typeof(str) === STR_TYPE) {\n                str = str.replace(/^\\s\\s*/, EMPTY);\n                return typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);\n            }\n    };\n\n    ///////////////\n    // Map helper\n    //////////////\n\n    var rgxMapper = function (ua, arrays) {\n\n            var i = 0, j, k, p, q, matches, match;\n\n            // loop through all regexes maps\n            while (i < arrays.length && !matches) {\n\n                var regex = arrays[i],       // even sequence (0,2,4,..)\n                    props = arrays[i + 1];   // odd sequence (1,3,5,..)\n                j = k = 0;\n\n                // try matching uastring with regexes\n                while (j < regex.length && !matches) {\n\n                    if (!regex[j]) { break; }\n                    matches = regex[j++].exec(ua);\n\n                    if (!!matches) {\n                        for (p = 0; p < props.length; p++) {\n                            match = matches[++k];\n                            q = props[p];\n                            // check if given property is actually array\n                            if (typeof q === OBJ_TYPE && q.length > 0) {\n                                if (q.length === 2) {\n                                    if (typeof q[1] == FUNC_TYPE) {\n                                        // assign modified match\n                                        this[q[0]] = q[1].call(this, match);\n                                    } else {\n                                        // assign given value, ignore regex match\n                                        this[q[0]] = q[1];\n                                    }\n                                } else if (q.length === 3) {\n                                    // check whether function or regex\n                                    if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n                                        // call function (usually string mapper)\n                                        this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n                                    } else {\n                                        // sanitize match using given regex\n                                        this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n                                    }\n                                } else if (q.length === 4) {\n                                        this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n                                }\n                            } else {\n                                this[q] = match ? match : undefined;\n                            }\n                        }\n                    }\n                }\n                i += 2;\n            }\n        },\n\n        strMapper = function (str, map) {\n\n            for (var i in map) {\n                // check if current value is array\n                if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n                    for (var j = 0; j < map[i].length; j++) {\n                        if (has(map[i][j], str)) {\n                            return (i === UNKNOWN) ? undefined : i;\n                        }\n                    }\n                } else if (has(map[i], str)) {\n                    return (i === UNKNOWN) ? undefined : i;\n                }\n            }\n            return str;\n    };\n\n    ///////////////\n    // String map\n    //////////////\n\n    // Safari < 3.0\n    var oldSafariMap = {\n            '1.0'   : '/8',\n            '1.2'   : '/1',\n            '1.3'   : '/3',\n            '2.0'   : '/412',\n            '2.0.2' : '/416',\n            '2.0.3' : '/417',\n            '2.0.4' : '/419',\n            '?'     : '/'\n        },\n        windowsVersionMap = {\n            'ME'        : '4.90',\n            'NT 3.11'   : 'NT3.51',\n            'NT 4.0'    : 'NT4.0',\n            '2000'      : 'NT 5.0',\n            'XP'        : ['NT 5.1', 'NT 5.2'],\n            'Vista'     : 'NT 6.0',\n            '7'         : 'NT 6.1',\n            '8'         : 'NT 6.2',\n            '8.1'       : 'NT 6.3',\n            '10'        : ['NT 6.4', 'NT 10.0'],\n            'RT'        : 'ARM'\n    };\n\n    //////////////\n    // Regex map\n    /////////////\n\n    var regexes = {\n\n        browser : [[\n\n            /\\b(?:crmo|crios)\\/([\\w\\.]+)/i                                      // Chrome for Android/iOS\n            ], [VERSION, [NAME, 'Chrome']], [\n            /edg(?:e|ios|a)?\\/([\\w\\.]+)/i                                       // Microsoft Edge\n            ], [VERSION, [NAME, 'Edge']], [\n\n            // Presto based\n            /(opera mini)\\/([-\\w\\.]+)/i,                                        // Opera Mini\n            /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i,                 // Opera Mobi/Tablet\n            /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i                           // Opera\n            ], [NAME, VERSION], [\n            /opios[\\/ ]+([\\w\\.]+)/i                                             // Opera mini on iphone >= 8.0\n            ], [VERSION, [NAME, OPERA+' Mini']], [\n            /\\bopr\\/([\\w\\.]+)/i                                                 // Opera Webkit\n            ], [VERSION, [NAME, OPERA]], [\n\n            // Mixed\n            /(kindle)\\/([\\w\\.]+)/i,                                             // Kindle\n            /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i,      // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n            // Trident based\n            /(avant |iemobile|slim)(?:browser)?[\\/ ]?([\\w\\.]*)/i,               // Avant/IEMobile/SlimBrowser\n            /(ba?idubrowser)[\\/ ]?([\\w\\.]+)/i,                                  // Baidu Browser\n            /(?:ms|\\()(ie) ([\\w\\.]+)/i,                                         // Internet Explorer\n\n            // Webkit/KHTML based                                               // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n            /(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\\/([-\\w\\.]+)/i,\n                                                                                // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n            /(heytap|ovi)browser\\/([\\d\\.]+)/i,                                  // Heytap/Ovi\n            /(weibo)__([\\d\\.]+)/i                                               // Weibo\n            ], [NAME, VERSION], [\n            /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i                 // UCBrowser\n            ], [VERSION, [NAME, 'UC'+BROWSER]], [\n            /microm.+\\bqbcore\\/([\\w\\.]+)/i,                                     // WeChat Desktop for Windows Built-in Browser\n            /\\bqbcore\\/([\\w\\.]+).+microm/i\n            ], [VERSION, [NAME, 'WeChat(Win) Desktop']], [\n            /micromessenger\\/([\\w\\.]+)/i                                        // WeChat\n            ], [VERSION, [NAME, 'WeChat']], [\n            /konqueror\\/([\\w\\.]+)/i                                             // Konqueror\n            ], [VERSION, [NAME, 'Konqueror']], [\n            /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i                       // IE11\n            ], [VERSION, [NAME, 'IE']], [\n            /ya(?:search)?browser\\/([\\w\\.]+)/i                                  // Yandex\n            ], [VERSION, [NAME, 'Yandex']], [\n            /(avast|avg)\\/([\\w\\.]+)/i                                           // Avast/AVG Secure Browser\n            ], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [\n            /\\bfocus\\/([\\w\\.]+)/i                                               // Firefox Focus\n            ], [VERSION, [NAME, FIREFOX+' Focus']], [\n            /\\bopt\\/([\\w\\.]+)/i                                                 // Opera Touch\n            ], [VERSION, [NAME, OPERA+' Touch']], [\n            /coc_coc\\w+\\/([\\w\\.]+)/i                                            // Coc Coc Browser\n            ], [VERSION, [NAME, 'Coc Coc']], [\n            /dolfin\\/([\\w\\.]+)/i                                                // Dolphin\n            ], [VERSION, [NAME, 'Dolphin']], [\n            /coast\\/([\\w\\.]+)/i                                                 // Opera Coast\n            ], [VERSION, [NAME, OPERA+' Coast']], [\n            /miuibrowser\\/([\\w\\.]+)/i                                           // MIUI Browser\n            ], [VERSION, [NAME, 'MIUI '+BROWSER]], [\n            /fxios\\/([-\\w\\.]+)/i                                                // Firefox for iOS\n            ], [VERSION, [NAME, FIREFOX]], [\n            /\\bqihu|(qi?ho?o?|360)browser/i                                     // 360\n            ], [[NAME, '360 '+BROWSER]], [\n            /(oculus|samsung|sailfish|huawei)browser\\/([\\w\\.]+)/i\n            ], [[NAME, /(.+)/, '$1 '+BROWSER], VERSION], [                      // Oculus/Samsung/Sailfish/Huawei Browser\n            /(comodo_dragon)\\/([\\w\\.]+)/i                                       // Comodo Dragon\n            ], [[NAME, /_/g, ' '], VERSION], [\n            /(electron)\\/([\\w\\.]+) safari/i,                                    // Electron-based App\n            /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i,                   // Tesla\n            /m?(qqbrowser|baiduboxapp|2345Explorer)[\\/ ]?([\\w\\.]+)/i            // QQBrowser/Baidu App/2345 Browser\n            ], [NAME, VERSION], [\n            /(metasr)[\\/ ]?([\\w\\.]+)/i,                                         // SouGouBrowser\n            /(lbbrowser)/i,                                                     // LieBao Browser\n            /\\[(linkedin)app\\]/i                                                // LinkedIn App for iOS & Android\n            ], [NAME], [\n\n            // WebView\n            /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i       // Facebook App for iOS & Android\n            ], [[NAME, FACEBOOK], VERSION], [\n            /(kakao(?:talk|story))[\\/ ]([\\w\\.]+)/i,                             // Kakao App\n            /(naver)\\(.*?(\\d+\\.[\\w\\.]+).*\\)/i,                                  // Naver InApp\n            /safari (line)\\/([\\w\\.]+)/i,                                        // Line App for iOS\n            /\\b(line)\\/([\\w\\.]+)\\/iab/i,                                        // Line App for Android\n            /(chromium|instagram)[\\/ ]([-\\w\\.]+)/i                              // Chromium/Instagram\n            ], [NAME, VERSION], [\n            /\\bgsa\\/([\\w\\.]+) .*safari\\//i                                      // Google Search Appliance on iOS\n            ], [VERSION, [NAME, 'GSA']], [\n            /musical_ly(?:.+app_?version\\/|_)([\\w\\.]+)/i                        // TikTok\n            ], [VERSION, [NAME, 'TikTok']], [\n\n            /headlesschrome(?:\\/([\\w\\.]+)| )/i                                  // Chrome Headless\n            ], [VERSION, [NAME, CHROME+' Headless']], [\n\n            / wv\\).+(chrome)\\/([\\w\\.]+)/i                                       // Chrome WebView\n            ], [[NAME, CHROME+' WebView'], VERSION], [\n\n            /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i           // Android Browser\n            ], [VERSION, [NAME, 'Android '+BROWSER]], [\n\n            /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i       // Chrome/OmniWeb/Arora/Tizen/Nokia\n            ], [NAME, VERSION], [\n\n            /version\\/([\\w\\.\\,]+) .*mobile\\/\\w+ (safari)/i                      // Mobile Safari\n            ], [VERSION, [NAME, 'Mobile Safari']], [\n            /version\\/([\\w(\\.|\\,)]+) .*(mobile ?safari|safari)/i                // Safari & Safari Mobile\n            ], [VERSION, NAME], [\n            /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i                      // Safari < 3.0\n            ], [NAME, [VERSION, strMapper, oldSafariMap]], [\n\n            /(webkit|khtml)\\/([\\w\\.]+)/i\n            ], [NAME, VERSION], [\n\n            // Gecko based\n            /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i                              // Netscape\n            ], [[NAME, 'Netscape'], VERSION], [\n            /mobile vr; rv:([\\w\\.]+)\\).+firefox/i                               // Firefox Reality\n            ], [VERSION, [NAME, FIREFOX+' Reality']], [\n            /ekiohf.+(flow)\\/([\\w\\.]+)/i,                                       // Flow\n            /(swiftfox)/i,                                                      // Swiftfox\n            /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n                                                                                // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n            /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n                                                                                // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n            /(firefox)\\/([\\w\\.]+)/i,                                            // Other Firefox-based\n            /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i,                         // Mozilla\n\n            // Other\n            /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n                                                                                // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n            /(links) \\(([\\w\\.]+)/i,                                             // Links\n            /panasonic;(viera)/i                                                // Panasonic Viera\n            ], [NAME, VERSION], [\n            \n            /(cobalt)\\/([\\w\\.]+)/i                                              // Cobalt\n            ], [NAME, [VERSION, /master.|lts./, \"\"]]\n        ],\n\n        cpu : [[\n\n            /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i                     // AMD64 (x64)\n            ], [[ARCHITECTURE, 'amd64']], [\n\n            /(ia32(?=;))/i                                                      // IA32 (quicktime)\n            ], [[ARCHITECTURE, lowerize]], [\n\n            /((?:i[346]|x)86)[;\\)]/i                                            // IA32 (x86)\n            ], [[ARCHITECTURE, 'ia32']], [\n\n            /\\b(aarch64|arm(v?8e?l?|_?64))\\b/i                                 // ARM64\n            ], [[ARCHITECTURE, 'arm64']], [\n\n            /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i                                   // ARMHF\n            ], [[ARCHITECTURE, 'armhf']], [\n\n            // PocketPC mistakenly identified as PowerPC\n            /windows (ce|mobile); ppc;/i\n            ], [[ARCHITECTURE, 'arm']], [\n\n            /((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i                            // PowerPC\n            ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n\n            /(sun4\\w)[;\\)]/i                                                    // SPARC\n            ], [[ARCHITECTURE, 'sparc']], [\n\n            /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n                                                                                // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n            ], [[ARCHITECTURE, lowerize]]\n        ],\n\n        device : [[\n\n            //////////////////////////\n            // MOBILES & TABLETS\n            /////////////////////////\n\n            // Samsung\n            /\\b(sch-i[89]0\\d|shw-m380s|sm-[ptx]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n            ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n            /\\b((?:s[cgp]h|gt|sm)-\\w+|sc[g-]?[\\d]+a?|galaxy nexus)/i,\n            /samsung[- ]([-\\w]+)/i,\n            /sec-(sgh\\w+)/i\n            ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n            // Apple\n            /(?:\\/|\\()(ip(?:hone|od)[\\w, ]*)(?:\\/|;)/i                          // iPod/iPhone\n            ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n            /\\((ipad);[-\\w\\),; ]+apple/i,                                       // iPad\n            /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n            /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n            ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n            /(macintosh);/i\n            ], [MODEL, [VENDOR, APPLE]], [\n\n            // Sharp\n            /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n            ], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [\n\n            // Huawei\n            /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i\n            ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n            /(?:huawei|honor)([-\\w ]+)[;\\)]/i,\n            /\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][012359c][adn]?)\\b(?!.+d\\/s)/i\n            ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n            // Xiaomi\n            /\\b(poco[\\w ]+)(?: bui|\\))/i,                                       // Xiaomi POCO\n            /\\b; (\\w+) build\\/hm\\1/i,                                           // Xiaomi Hongmi 'numeric' models\n            /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i,                             // Xiaomi Hongmi\n            /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i,                   // Xiaomi Redmi\n            /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n            ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n            /\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i                        // Mi Pad tablets\n            ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n            // OPPO\n            /; (\\w+) bui.+ oppo/i,\n            /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n            ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [\n\n            // Vivo\n            /vivo (\\w+)(?: bui|\\))/i,\n            /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n            ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n            // Realme\n            /\\b(rmx[12]\\d{3})(?: bui|;|\\))/i\n            ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n            // Motorola\n            /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n            /\\bmot(?:orola)?[- ](\\w*)/i,\n            /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n            ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n            /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n            ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n            // LG\n            /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n            ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n            /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n            /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,\n            /\\blg-?([\\d\\w]+) bui/i\n            ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n            // Lenovo\n            /(ideatab[-\\w ]+)/i,\n            /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i\n            ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n            // Nokia\n            /(?:maemo|nokia).*(n900|lumia \\d+)/i,\n            /nokia[-_ ]?([-\\w\\.]*)/i\n            ], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [\n\n            // Google\n            /(pixel c)\\b/i                                                      // Google Pixel C\n            ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n            /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i                         // Google Pixel\n            ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n\n            // Sony\n            /droid.+ (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n            ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n            /sony tablet [ps]/i,\n            /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n            ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n            // OnePlus\n            / (kb2005|in20[12]5|be20[12][59])\\b/i,\n            /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n            ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n            // Amazon\n            /(alexa)webm/i,\n            /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\\))/i,                             // Kindle Fire without Silk / Echo Show\n            /(kf[a-z]+)( bui|\\)).+silk\\//i                                      // Kindle Fire HD\n            ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n            /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i                     // Fire Phone\n            ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n            // BlackBerry\n            /(playbook);[-\\w\\),; ]+(rim)/i                                      // BlackBerry PlayBook\n            ], [MODEL, VENDOR, [TYPE, TABLET]], [\n            /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n            /\\(bb10; (\\w+)/i                                                    // BlackBerry 10\n            ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n            // Asus\n            /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n            ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n            / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n            ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n            // HTC\n            /(nexus 9)/i                                                        // HTC Nexus 9\n            ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n            /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i,                         // HTC\n\n            // ZTE\n            /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n            /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\\.))|sony(?!-bra))[-_ ]?([-\\w]*)/i         // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n            ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n            // Acer\n            /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n            ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n            // Meizu\n            /droid.+; (m[1-5] note) bui/i,\n            /\\bmz-([-\\w]{2,})/i\n            ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n\n            // MIXED\n            /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\\w]*)/i,\n                                                                                // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n            /(hp) ([\\w ]+\\w)/i,                                                 // HP iPAQ\n            /(asus)-?(\\w+)/i,                                                   // Asus\n            /(microsoft); (lumia[\\w ]+)/i,                                      // Microsoft Lumia\n            /(lenovo)[-_ ]?([-\\w]+)/i,                                          // Lenovo\n            /(jolla)/i,                                                         // Jolla\n            /(oppo) ?([\\w ]+) bui/i                                             // OPPO\n            ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n            /(kobo)\\s(ereader|touch)/i,                                         // Kobo\n            /(archos) (gamepad2?)/i,                                            // Archos\n            /(hp).+(touchpad(?!.+tablet)|tablet)/i,                             // HP TouchPad\n            /(kindle)\\/([\\w\\.]+)/i,                                             // Kindle\n            /(nook)[\\w ]+build\\/(\\w+)/i,                                        // Nook\n            /(dell) (strea[kpr\\d ]*[\\dko])/i,                                   // Dell Streak\n            /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i,                                  // Le Pan Tablets\n            /(trinity)[- ]*(t\\d{3}) bui/i,                                      // Trinity Tablets\n            /(gigaset)[- ]+(q\\w{1,9}) bui/i,                                    // Gigaset Tablets\n            /(vodafone) ([\\w ]+)(?:\\)| bui)/i                                   // Vodafone\n            ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n            /(surface duo)/i                                                    // Surface Duo\n            ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n            /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i                                 // Fairphone\n            ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n            /(u304aa)/i                                                         // AT&T\n            ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [\n            /\\bsie-(\\w*)/i                                                      // Siemens\n            ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n            /\\b(rct\\w+) b/i                                                     // RCA Tablets\n            ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n            /\\b(venue[\\d ]{2,7}) b/i                                            // Dell Venue Tablets\n            ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n            /\\b(q(?:mv|ta)\\w+) b/i                                              // Verizon Tablet\n            ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n            /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i                       // Barnes & Noble Tablet\n            ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [\n            /\\b(tm\\d{3}\\w+) b/i\n            ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n            /\\b(k88) b/i                                                        // ZTE K Series Tablet\n            ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n            /\\b(nx\\d{3}j) b/i                                                   // ZTE Nubia\n            ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n            /\\b(gen\\d{3}) b.+49h/i                                              // Swiss GEN Mobile\n            ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n            /\\b(zur\\d{3}) b/i                                                   // Swiss ZUR Tablet\n            ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n            /\\b((zeki)?tb.*\\b) b/i                                              // Zeki Tablets\n            ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n            /\\b([yr]\\d{2}) b/i,\n            /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i                                // Dragon Touch Tablet\n            ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n            /\\b(ns-?\\w{0,9}) b/i                                                // Insignia Tablets\n            ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n            /\\b((nxa|next)-?\\w{0,9}) b/i                                        // NextBook Tablets\n            ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n            /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i                  // Voice Xtreme Phones\n            ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [\n            /\\b(lvtel\\-)?(v1[12]) b/i                                           // LvTel Phones\n            ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n            /\\b(ph-1) /i                                                        // Essential PH-1\n            ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [\n            /\\b(v(100md|700na|7011|917g).*\\b) b/i                               // Envizen Tablets\n            ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n            /\\b(trio[-\\w\\. ]+) b/i                                              // MachSpeed Tablets\n            ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n            /\\btu_(1491) b/i                                                    // Rotor Tablets\n            ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n            /(shield[\\w ]+) b/i                                                 // Nvidia Shield Tablets\n            ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [\n            /(sprint) (\\w+)/i                                                   // Sprint Phones\n            ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n            /(kin\\.[onetw]{3})/i                                                // Microsoft Kin\n            ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n            /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i             // Zebra\n            ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n            /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n            ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n            ///////////////////\n            // SMARTTVS\n            ///////////////////\n\n            /smart-tv.+(samsung)/i                                              // Samsung\n            ], [VENDOR, [TYPE, SMARTTV]], [\n            /hbbtv.+maple;(\\d+)/i\n            ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n            /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i        // LG SmartTV\n            ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n            /(apple) ?tv/i                                                      // Apple TV\n            ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n            /crkey/i                                                            // Google Chromecast\n            ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n            /droid.+aft(\\w)( bui|\\))/i                                          // Fire TV\n            ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n            /\\(dtv[\\);].+(aquos)/i,\n            /(aquos-tv[\\w ]+)\\)/i                                               // Sharp\n            ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[\n            /(bravia[\\w ]+)( bui|\\))/i                                              // Sony\n            ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [\n            /(mitv-\\w{5}) bui/i                                                 // Xiaomi\n            ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [\n            /Hbbtv.*(technisat) (.*);/i                                         // TechniSAT\n            ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n            /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i,                          // Roku\n            /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w\\+ ]*; *([\\w\\d][^;]*);([^;]*)/i         // HbbTV devices\n            ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [\n            /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i                   // SmartTV from Unidentified Vendors\n            ], [[TYPE, SMARTTV]], [\n\n            ///////////////////\n            // CONSOLES\n            ///////////////////\n\n            /(ouya)/i,                                                          // Ouya\n            /(nintendo) ([wids3utch]+)/i                                        // Nintendo\n            ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n            /droid.+; (shield) bui/i                                            // Nvidia\n            ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n            /(playstation [345portablevi]+)/i                                   // Playstation\n            ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n            /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i                                // Microsoft Xbox\n            ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n\n            ///////////////////\n            // WEARABLES\n            ///////////////////\n\n            /((pebble))app/i                                                    // Pebble\n            ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n            /(watch)(?: ?os[,\\/]|\\d,\\d\\/)[\\d\\.]+/i                              // Apple Watch\n            ], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [\n            /droid.+; (glass) \\d/i                                              // Google Glass\n            ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [\n            /droid.+; (wt63?0{2,3})\\)/i\n            ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n            /(quest( 2| pro)?)/i                                                // Oculus Quest\n            ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [\n\n            ///////////////////\n            // EMBEDDED\n            ///////////////////\n\n            /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i                              // Tesla\n            ], [VENDOR, [TYPE, EMBEDDED]], [\n            /(aeobc)\\b/i                                                        // Echo Dot\n            ], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [\n\n            ////////////////////\n            // MIXED (GENERIC)\n            ///////////////////\n\n            /droid .+?; ([^;]+?)(?: bui|\\) applew).+? mobile safari/i           // Android Phones from Unidentified Vendors\n            ], [MODEL, [TYPE, MOBILE]], [\n            /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i       // Android Tablets from Unidentified Vendors\n            ], [MODEL, [TYPE, TABLET]], [\n            /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i                      // Unidentifiable Tablet\n            ], [[TYPE, TABLET]], [\n            /(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i    // Unidentifiable Mobile\n            ], [[TYPE, MOBILE]], [\n            /(android[-\\w\\. ]{0,9});.+buil/i                                    // Generic Android Device\n            ], [MODEL, [VENDOR, 'Generic']]\n        ],\n\n        engine : [[\n\n            /windows.+ edge\\/([\\w\\.]+)/i                                       // EdgeHTML\n            ], [VERSION, [NAME, EDGE+'HTML']], [\n\n            /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i                         // Blink\n            ], [VERSION, [NAME, 'Blink']], [\n\n            /(presto)\\/([\\w\\.]+)/i,                                             // Presto\n            /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n            /ekioh(flow)\\/([\\w\\.]+)/i,                                          // Flow\n            /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i,                           // KHTML/Tasman/Links\n            /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i,                                      // iCab\n            /\\b(libweb)/i\n            ], [NAME, VERSION], [\n\n            /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i                                     // Gecko\n            ], [VERSION, NAME]\n        ],\n\n        os : [[\n\n            // Windows\n            /microsoft (windows) (vista|xp)/i                                   // Windows (iTunes)\n            ], [NAME, VERSION], [\n            /(windows) nt 6\\.2; (arm)/i,                                        // Windows RT\n            /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i,            // Windows Phone\n            /(windows)[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i\n            ], [NAME, [VERSION, strMapper, windowsVersionMap]], [\n            /(win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i\n            ], [[NAME, 'Windows'], [VERSION, strMapper, windowsVersionMap]], [\n\n            // iOS/macOS\n            /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i,              // iOS\n            /ios;fbsv\\/([\\d\\.]+)/i,\n            /cfnetwork\\/.+darwin/i\n            ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n            /(mac os x) ?([\\w\\. ]*)/i,\n            /(macintosh|mac_powerpc\\b)(?!.+haiku)/i                             // Mac OS\n            ], [[NAME, MAC_OS], [VERSION, /_/g, '.']], [\n\n            // Mobile OSes\n            /droid ([\\w\\.]+)\\b.+(android[- ]x86|harmonyos)/i                    // Android-x86/HarmonyOS\n            ], [VERSION, NAME], [                                               // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n            /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,\n            /(blackberry)\\w*\\/([\\w\\.]*)/i,                                      // Blackberry\n            /(tizen|kaios)[\\/ ]([\\w\\.]+)/i,                                     // Tizen/KaiOS\n            /\\((series40);/i                                                    // Series 40\n            ], [NAME, VERSION], [\n            /\\(bb(10);/i                                                        // BlackBerry 10\n            ], [VERSION, [NAME, BLACKBERRY]], [\n            /(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i         // Symbian\n            ], [VERSION, [NAME, 'Symbian']], [\n            /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n            ], [VERSION, [NAME, FIREFOX+' OS']], [\n            /web0s;.+rt(tv)/i,\n            /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i                              // WebOS\n            ], [VERSION, [NAME, 'webOS']], [\n            /watch(?: ?os[,\\/]|\\d,\\d\\/)([\\d\\.]+)/i                              // watchOS\n            ], [VERSION, [NAME, 'watchOS']], [\n\n            // Google Chromecast\n            /crkey\\/([\\d\\.]+)/i                                                 // Google Chromecast\n            ], [VERSION, [NAME, CHROME+'cast']], [\n            /(cros) [\\w]+(?:\\)| ([\\w\\.]+)\\b)/i                                  // Chromium OS\n            ], [[NAME, CHROMIUM_OS], VERSION],[\n\n            // Smart TVs\n            /panasonic;(viera)/i,                                               // Panasonic Viera\n            /(netrange)mmh/i,                                                   // Netrange\n            /(nettv)\\/(\\d+\\.[\\w\\.]+)/i,                                         // NetTV\n\n            // Console\n            /(nintendo|playstation) ([wids345portablevuch]+)/i,                 // Nintendo/Playstation\n            /(xbox); +xbox ([^\\);]+)/i,                                         // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n            // Other\n            /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i,                            // Joli/Palm\n            /(mint)[\\/\\(\\) ]?(\\w*)/i,                                           // Mint\n            /(mageia|vectorlinux)[; ]/i,                                        // Mageia/VectorLinux\n            /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n                                                                                // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n            /(hurd|linux) ?([\\w\\.]*)/i,                                         // Hurd/Linux\n            /(gnu) ?([\\w\\.]*)/i,                                                // GNU\n            /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n            /(haiku) (\\w+)/i                                                    // Haiku\n            ], [NAME, VERSION], [\n            /(sunos) ?([\\w\\.\\d]*)/i                                             // Solaris\n            ], [[NAME, 'Solaris'], VERSION], [\n            /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i,                              // Solaris\n            /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i,                                  // AIX\n            /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX/SerenityOS\n            /(unix) ?([\\w\\.]*)/i                                                // UNIX\n            ], [NAME, VERSION]\n        ]\n    };\n\n    /////////////////\n    // Constructor\n    ////////////////\n\n    var UAParser = function (ua, extensions) {\n\n        if (typeof ua === OBJ_TYPE) {\n            extensions = ua;\n            ua = undefined;\n        }\n\n        if (!(this instanceof UAParser)) {\n            return new UAParser(ua, extensions).getResult();\n        }\n\n        var _navigator = (typeof window !== UNDEF_TYPE && window.navigator) ? window.navigator : undefined;\n        var _ua = ua || ((_navigator && _navigator.userAgent) ? _navigator.userAgent : EMPTY);\n        var _uach = (_navigator && _navigator.userAgentData) ? _navigator.userAgentData : undefined;\n        var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n        var _isSelfNav = _navigator && _navigator.userAgent == _ua;\n\n        this.getBrowser = function () {\n            var _browser = {};\n            _browser[NAME] = undefined;\n            _browser[VERSION] = undefined;\n            rgxMapper.call(_browser, _ua, _rgxmap.browser);\n            _browser[MAJOR] = majorize(_browser[VERSION]);\n            // Brave-specific detection\n            if (_isSelfNav && _navigator && _navigator.brave && typeof _navigator.brave.isBrave == FUNC_TYPE) {\n                _browser[NAME] = 'Brave';\n            }\n            return _browser;\n        };\n        this.getCPU = function () {\n            var _cpu = {};\n            _cpu[ARCHITECTURE] = undefined;\n            rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n            return _cpu;\n        };\n        this.getDevice = function () {\n            var _device = {};\n            _device[VENDOR] = undefined;\n            _device[MODEL] = undefined;\n            _device[TYPE] = undefined;\n            rgxMapper.call(_device, _ua, _rgxmap.device);\n            if (_isSelfNav && !_device[TYPE] && _uach && _uach.mobile) {\n                _device[TYPE] = MOBILE;\n            }\n            // iPadOS-specific detection: identified as Mac, but has some iOS-only properties\n            if (_isSelfNav && _device[MODEL] == 'Macintosh' && _navigator && typeof _navigator.standalone !== UNDEF_TYPE && _navigator.maxTouchPoints && _navigator.maxTouchPoints > 2) {\n                _device[MODEL] = 'iPad';\n                _device[TYPE] = TABLET;\n            }\n            return _device;\n        };\n        this.getEngine = function () {\n            var _engine = {};\n            _engine[NAME] = undefined;\n            _engine[VERSION] = undefined;\n            rgxMapper.call(_engine, _ua, _rgxmap.engine);\n            return _engine;\n        };\n        this.getOS = function () {\n            var _os = {};\n            _os[NAME] = undefined;\n            _os[VERSION] = undefined;\n            rgxMapper.call(_os, _ua, _rgxmap.os);\n            if (_isSelfNav && !_os[NAME] && _uach && _uach.platform != 'Unknown') {\n                _os[NAME] = _uach.platform  \n                                    .replace(/chrome os/i, CHROMIUM_OS)\n                                    .replace(/macos/i, MAC_OS);           // backward compatibility\n            }\n            return _os;\n        };\n        this.getResult = function () {\n            return {\n                ua      : this.getUA(),\n                browser : this.getBrowser(),\n                engine  : this.getEngine(),\n                os      : this.getOS(),\n                device  : this.getDevice(),\n                cpu     : this.getCPU()\n            };\n        };\n        this.getUA = function () {\n            return _ua;\n        };\n        this.setUA = function (ua) {\n            _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? trim(ua, UA_MAX_LENGTH) : ua;\n            return this;\n        };\n        this.setUA(_ua);\n        return this;\n    };\n\n    UAParser.VERSION = LIBVERSION;\n    UAParser.BROWSER =  enumerize([NAME, VERSION, MAJOR]);\n    UAParser.CPU = enumerize([ARCHITECTURE]);\n    UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n    UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n    ///////////\n    // Export\n    //////////\n\n    // check js environment\n    if (typeof(exports) !== UNDEF_TYPE) {\n        // nodejs env\n        if (typeof module !== UNDEF_TYPE && module.exports) {\n            exports = module.exports = UAParser;\n        }\n        exports.UAParser = UAParser;\n    } else {\n        // requirejs env (optional)\n        if (typeof(define) === FUNC_TYPE && define.amd) {\n            define(function () {\n                return UAParser;\n            });\n        } else if (typeof window !== UNDEF_TYPE) {\n            // browser env\n            window.UAParser = UAParser;\n        }\n    }\n\n    // jQuery/Zepto specific (optional)\n    // Note:\n    //   In AMD env the global scope should be kept clean, but jQuery is an exception.\n    //   jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n    //   and we should catch that.\n    var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n    if ($ && !$.ua) {\n        var parser = new UAParser();\n        $.ua = parser.getResult();\n        $.ua.get = function () {\n            return parser.getUA();\n        };\n        $.ua.set = function (ua) {\n            parser.setUA(ua);\n            var result = parser.getResult();\n            for (var prop in result) {\n                $.ua[prop] = result[prop];\n            }\n        };\n    }\n\n})(typeof window === 'object' ? window : this);\n","import Ember from 'ember';\n\nimport { computed } from '@ember/object';\n\nimport DropSchedulerPolicy from './external/scheduler/policies/drop-policy';\nimport EnqueueSchedulerPolicy from './external/scheduler/policies/enqueued-policy';\nimport KeepLatestSchedulerPolicy from './external/scheduler/policies/keep-latest-policy';\nimport RestartableSchedulerPolicy from './external/scheduler/policies/restartable-policy';\n\nexport let taskFactorySymbol = '__ec_task_factory';\n\nexport const propertyModifiers = {\n  /**\n   * Configures the task to cancel old currently task instances\n   * to make room for a new one to perform. Sets default\n   * maxConcurrency to 1.\n   *\n   * [See the Live Example](/docs/examples/route-tasks/1)\n   *\n   * @method restartable\n   * @memberof TaskProperty\n   * @instance\n   */\n  restartable() {\n    this[taskFactorySymbol].setBufferPolicy(RestartableSchedulerPolicy);\n    return this;\n  },\n\n  /**\n   * Configures the task to run task instances one-at-a-time in\n   * the order they were `.perform()`ed. Sets default\n   * maxConcurrency to 1.\n   *\n   * @method enqueue\n   * @memberof TaskProperty\n   * @instance\n   */\n  enqueue() {\n    this[taskFactorySymbol].setBufferPolicy(EnqueueSchedulerPolicy);\n    return this;\n  },\n\n  /**\n   * Configures the task to immediately cancel (i.e. drop) any\n   * task instances performed when the task is already running\n   * at maxConcurrency. Sets default maxConcurrency to 1.\n   *\n   * @method drop\n   * @memberof TaskProperty\n   * @instance\n   */\n  drop() {\n    this[taskFactorySymbol].setBufferPolicy(DropSchedulerPolicy);\n    return this;\n  },\n\n  /**\n   * Configures the task to drop all but the most recently\n   * performed {@linkcode TaskInstance }.\n   *\n   * @method keepLatest\n   * @memberof TaskProperty\n   * @instance\n   */\n  keepLatest() {\n    this[taskFactorySymbol].setBufferPolicy(KeepLatestSchedulerPolicy);\n    return this;\n  },\n\n  /**\n   * Sets the maximum number of task instances that are allowed\n   * to run at the same time. By default, with no task modifiers\n   * applied, this number is Infinity (there is no limit\n   * to the number of tasks that can run at the same time).\n   * {@linkcode TaskProperty#restartable .restartable},\n   * {@linkcode TaskProperty#enqueue .enqueue}, and\n   * {@linkcode TaskProperty#drop .drop} set the default\n   * maxConcurrency to 1, but you can override this value\n   * to set the maximum number of concurrently running tasks\n   * to a number greater than 1.\n   *\n   * [See the AJAX Throttling example](/docs/examples/ajax-throttling)\n   *\n   * The example below uses a task with `maxConcurrency(3)` to limit\n   * the number of concurrent AJAX requests (for anyone using this task)\n   * to 3.\n   *\n   * ```js\n   * doSomeAjax = task(async (url) => {\n   *   return fetch(url);\n   * }).maxConcurrency(3);\n   *\n   * elsewhere() {\n   *   this.doSomeAjax.perform(\"http://www.example.com/json\");\n   * }\n   * ```\n   *\n   * @method maxConcurrency\n   * @memberof TaskProperty\n   * @param {Number} n The maximum number of concurrently running tasks\n   * @instance\n   */\n  maxConcurrency(n) {\n    this[taskFactorySymbol].setMaxConcurrency(n);\n    return this;\n  },\n\n  /**\n   * Adds this task to a TaskGroup so that concurrency constraints\n   * can be shared between multiple tasks.\n   *\n   * [See the Task Group docs for more information](/docs/task-groups)\n   *\n   * @method group\n   * @memberof TaskProperty\n   * @param {String} groupPath A path to the TaskGroup property\n   * @instance\n   */\n  group(taskGroupPath) {\n    this[taskFactorySymbol].setGroup(taskGroupPath);\n    return this;\n  },\n\n  /**\n   * Activates lifecycle events, allowing Evented host objects to react to task state\n   * changes.\n   *\n   * ```js\n   * import Component from '@glimmer/component';\n   * import { task } from 'ember-concurrency';\n   * import { on } from '@ember/object/evented';\n   *\n   * export default class MyComponent extends Component {\n   *   uploadTask = task(async (file) => {\n   *     // ... file upload stuff\n   *   }).evented();\n   *\n   *   @on('uploadTask:started')\n   *   uploadedStarted(taskInstance) {\n   *     this.analytics.track(\"User Photo: upload started\");\n   *   }\n   * }\n   * ```\n   *\n   * @method evented\n   * @memberof TaskProperty\n   * @instance\n   */\n  evented() {\n    this[taskFactorySymbol].setEvented(true);\n    return this;\n  },\n\n  /**\n   * Logs lifecycle events to aid in debugging unexpected Task behavior.\n   * Presently only logs cancelation events and the reason for the cancelation,\n   * e.g. \"TaskInstance 'doStuff' was canceled because the object it lives on was destroyed or unrendered\"\n   *\n   * @method debug\n   * @memberof TaskProperty\n   * @instance\n   */\n  debug() {\n    this[taskFactorySymbol].setDebug(true);\n    return this;\n  },\n\n  /**\n   * Configures the task to call the passed in callback for derived state updates,\n   * overriding the default derived state tracking. You may call with `null` to\n   * completely opt-out of derived state tracking.\n   *\n   * @method onState\n   * @memberof TaskProperty\n   * @param {function?} callback Callback to be called. Receives an object argument with the new state.\n   * @instance\n   */\n  onState(callback) {\n    this[taskFactorySymbol].setOnState(callback);\n    return this;\n  },\n};\n\n/**\n  A {@link TaskProperty} is the Computed Property-like object returned\n  from the {@linkcode task} function. You can call Task Modifier methods\n  on this object to configure the behavior of the {@link Task}.\n\n  See [Managing Task Concurrency](/docs/task-concurrency) for an\n  overview of all the different task modifiers you can use and how\n  they impact automatic cancelation / enqueueing of task instances.\n\n  {@link TaskProperty} is only used for supporting \"classic\" Ember objects.\n  When using Native JavaScript or TypeScript classes, you will use [task decorators](/docs/task-decorators)\n  on methods instead.\n\n  @class TaskProperty\n*/\nexport class TaskProperty {}\nexport class TaskGroupProperty {}\n\nObject.assign(TaskGroupProperty.prototype, propertyModifiers);\nObject.assign(TaskProperty.prototype, propertyModifiers, {\n  setup(proto, key) {\n    if (this.callSuperSetup) {\n      this.callSuperSetup(...arguments);\n    }\n\n    this[taskFactorySymbol].setName(key);\n    this[taskFactorySymbol]._setupEmberKVO(proto);\n  },\n\n  /**\n   * Calling `task(...).on(eventName)` configures the task to be\n   * automatically performed when the specified events fire. In\n   * this way, it behaves like\n   * [Ember.on](http://emberjs.com/api/classes/Ember.html#method_on).\n   *\n   * You can use `task(...).on('init')` to perform the task\n   * when the host object is initialized.\n   *\n   * ```js\n   * import Component from '@glimmer/component';\n   * import { task } from 'ember-concurrency';\n   *\n   * export default class MyComponent extends Component {\n   *   pollForUpdates = task(async () => {\n   *     // ... this runs when the Component is first created\n   *     // because we specified .on('init')\n   *   }).on('init');\n   *\n   *   handleFoo = task(async (a, b, c) => {\n   *     // this gets performed automatically if the 'foo'\n   *     // event fires on this Component,\n   *     // e.g., if someone called component.trigger('foo')\n   *   }).on('foo');\n   * }\n   * ```\n   *\n   * @method on\n   * @memberof TaskProperty\n   * @param {String} eventNames*\n   * @instance\n   */\n  on() {\n    this[taskFactorySymbol].addPerformEvents(...arguments);\n    return this;\n  },\n\n  /**\n   * This behaves like the {@linkcode TaskProperty#on task(...).on() modifier},\n   * but instead will cause the task to be canceled if any of the\n   * specified events fire on the parent object.\n   *\n   * [See the Live Example](/docs/examples/route-tasks/1)\n   *\n   * @method cancelOn\n   * @memberof TaskProperty\n   * @param {String} eventNames*\n   * @instance\n   */\n  cancelOn() {\n    this[taskFactorySymbol].addCancelEvents(...arguments);\n    return this;\n  },\n\n  /**\n   * This behaves like the {@linkcode TaskProperty#on task(...).on() modifier},\n   * but instead will cause the task to be performed if any of the\n   * specified properties on the parent object change.\n   *\n   * @method observes\n   * @memberof TaskProperty\n   * @param {String} keys*\n   * @instance\n   */\n  observes() {\n    this[taskFactorySymbol].addObserverKeys(...arguments);\n    return this;\n  },\n});\n\nconst setDecorator = Ember._setClassicDecorator;\nexport function taskComputed(fn) {\n  let cp = function (proto, key) {\n    if (cp.setup !== undefined) {\n      cp.setup(proto, key);\n    }\n\n    return computed(fn)(...arguments);\n  };\n\n  setDecorator(cp);\n\n  return cp;\n}\n","\"use strict\";\n\nconst codes = require(\"./codes.json\");\nconst removeDiacritics = require(\"diacritics\").remove;\nconst registeredLocales = {};\n\n/*\n * All codes map to ISO 3166-1 alpha-2\n */\nconst alpha2 = {},\n  alpha3 = {},\n  numeric = {},\n  invertedNumeric = {};\n\ncodes.forEach(function (codeInformation) {\n  const s = codeInformation;\n  alpha2[s[0]] = s[1];\n  alpha3[s[1]] = s[0];\n  numeric[s[2]] = s[0];\n  invertedNumeric[s[0]] = s[2];\n});\n\n/**\n * @private\n * @param {number} code\n */\nfunction formatNumericCode(code) {\n  return String(\"000\" + (code ? code : \"\")).slice(-3);\n}\n\n/**\n * @private\n * Avoid using obj.hasOwnProperty directly as `hasOwnProperty` could be a\n * property in itself ({ hasOwnProperty: 1 }) and cause weird bugs\n * https://eslint.org/docs/rules/no-prototype-builtins\n */\nfunction hasOwnProperty(object, property) {\n  return Object.prototype.hasOwnProperty.call(object, property);\n}\n\n/**\n * @private\n * Pass localeList through a filter and return a newLocaleList obj\n * with the same structure of the old localeList.\n *\n * @param {LocalizedCountryNames} localeList  Local List in raw\n * @param {Function} filter    callback to set filter rule\n * @return {String | String[]} new filtered Local List\n */\nfunction localeFilter(localeList, filter) {\n  return Object.keys(localeList).reduce(function (newLocaleList, alpha2) {\n    const nameList = localeList[alpha2];\n    newLocaleList[alpha2] = filter(nameList, alpha2);\n    return newLocaleList;\n  }, {});\n}\n\n/**\n * @private\n * Preserve for getName & getNames\n *\n * @param {GetNameOptions.select} type all | official | alias\n * @param countryNameList  string array of country's\n *                         official name and alias\n * @return {String | String[]} of a country name\n */\nfunction filterNameBy(type, countryNameList) {\n  switch (type) {\n    case \"official\":\n      return Array.isArray(countryNameList)\n        ? countryNameList[0]\n        : countryNameList;\n\n    case \"all\":\n      return typeof countryNameList === \"string\"\n        ? [countryNameList]\n        : countryNameList;\n\n    case \"alias\":\n      return Array.isArray(countryNameList)\n        ? countryNameList[1] || countryNameList[0]\n        : countryNameList;\n\n    default:\n      throw new TypeError(\n        \"LocaleNameType must be one of these: all, official, alias!\"\n      );\n  }\n}\n\n/**\n * Register countries in browsers' environment:\n * @param {object} localeData\n * @example countries.registerLocale(require(\"i18n-iso-countries/langs/en.json\"));\n * @return void\n */\nexports.registerLocale = function (localeData) {\n  if (!localeData.locale) {\n    throw new TypeError(\"Missing localeData.locale\");\n  }\n\n  if (!localeData.countries) {\n    throw new TypeError(\"Missing localeData.countries\");\n  }\n\n  registeredLocales[localeData.locale] = localeData.countries;\n};\n\n/*\n * @param code Alpha-3 code\n * @return Alpha-2 code or undefined\n */\nfunction alpha3ToAlpha2(code) {\n  return alpha3[code];\n}\nexports.alpha3ToAlpha2 = alpha3ToAlpha2;\n\n/*\n * @param code Alpha-2 code\n * @return Alpha-3 code or undefined\n */\nfunction alpha2ToAlpha3(code) {\n  return alpha2[code];\n}\nexports.alpha2ToAlpha3 = alpha2ToAlpha3;\n\n/*\n * @param code Alpha-3 code\n * @return Numeric code or undefined\n */\nfunction alpha3ToNumeric(code) {\n  return invertedNumeric[alpha3ToAlpha2(code)];\n}\nexports.alpha3ToNumeric = alpha3ToNumeric;\n\n/*\n * @param code Alpha-2 code\n * @return Numeric code or undefined\n */\nfunction alpha2ToNumeric(code) {\n  return invertedNumeric[code];\n}\nexports.alpha2ToNumeric = alpha2ToNumeric;\n\n/*\n * @param code Numeric code\n * @return Alpha-3 code or undefined\n */\nfunction numericToAlpha3(code) {\n  const padded = formatNumericCode(code);\n  return alpha2ToAlpha3(numeric[padded]);\n}\nexports.numericToAlpha3 = numericToAlpha3;\n\n/*\n * @param code Numeric code\n * @return Alpha-2 code or undefined\n */\nfunction numericToAlpha2(code) {\n  const padded = formatNumericCode(code);\n  return numeric[padded];\n}\nexports.numericToAlpha2 = numericToAlpha2;\n\n/*\n * @param code ISO 3166-1 alpha-2, alpha-3 or numeric code\n * @return ISO 3166-1 alpha-3\n */\nfunction toAlpha3(code) {\n  if (typeof code === \"string\") {\n    if (/^[0-9]*$/.test(code)) {\n      return numericToAlpha3(code);\n    }\n    if (code.length === 2) {\n      return alpha2ToAlpha3(code.toUpperCase());\n    }\n    if (code.length === 3) {\n      return code.toUpperCase();\n    }\n  }\n  if (typeof code === \"number\") {\n    return numericToAlpha3(code);\n  }\n  return undefined;\n}\nexports.toAlpha3 = toAlpha3;\n\n/*\n * @param code ISO 3166-1 alpha-2, alpha-3 or numeric code\n * @return ISO 3166-1 alpha-2\n */\nfunction toAlpha2(code) {\n  if (typeof code === \"string\") {\n    if (/^[0-9]*$/.test(code)) {\n      return numericToAlpha2(code);\n    }\n    if (code.length === 2) {\n      return code.toUpperCase();\n    }\n    if (code.length === 3) {\n      return alpha3ToAlpha2(code.toUpperCase());\n    }\n  }\n  if (typeof code === \"number\") {\n    return numericToAlpha2(code);\n  }\n  return undefined;\n}\nexports.toAlpha2 = toAlpha2;\n\n/**\n * @param {string | number | Alpha2Code | Alpha3Code} code\n * @param {String} lang          language for country name\n * @param {GetNameOptions} options\n * @return {String | String[] | undefined}  name\n */\nexports.getName = function (code, lang, options = {}) {\n  if (!(\"select\" in options)) {\n    options.select = \"official\";\n  }\n  try {\n    const codeMaps = registeredLocales[lang.toLowerCase()];\n    const nameList = codeMaps[toAlpha2(code)];\n    return filterNameBy(options.select, nameList);\n  } catch (err) {\n    return undefined;\n  }\n};\n\n/**\n * @param {String} lang             language for country names\n * @param {GetNameOptions} options   getNames Options\n * @return {LocalizedCountryNames}  country code\n *                                  mapped to county name\n */\nexports.getNames = function (lang, options = {}) {\n  if (!(\"select\" in options)) {\n    options.select = \"official\";\n  }\n  const localeList = registeredLocales[lang.toLowerCase()];\n  if (localeList === undefined) return {};\n  return localeFilter(localeList, function (nameList) {\n    return filterNameBy(options.select, nameList);\n  });\n};\n\n/*\n * @param name name\n * @param lang language for country name\n * @return ISO 3166-1 alpha-2 or undefined\n */\nexports.getAlpha2Code = function (name, lang) {\n  const normalizeString = (string) => string.toLowerCase();\n  const areSimilar = (a, b) => normalizeString(a) === normalizeString(b);\n\n  try {\n    const codenames = registeredLocales[lang.toLowerCase()];\n    for (const p in codenames) {\n      if (!hasOwnProperty(codenames, p)) {\n        continue;\n      }\n      if (typeof codenames[p] === \"string\") {\n        if (areSimilar(codenames[p], name)) {\n          return p;\n        }\n      }\n      if (Array.isArray(codenames[p])) {\n        for (const mappedName of codenames[p]) {\n          if (areSimilar(mappedName, name)) {\n            return p;\n          }\n        }\n      }\n    }\n    return undefined;\n  } catch (err) {\n    return undefined;\n  }\n};\n\n/*\n * @param name name\n * @param lang language for country name\n * @return ISO 3166-1 alpha-2 or undefined\n */\nexports.getSimpleAlpha2Code = function (name, lang) {\n  const normalizeString = (string) => removeDiacritics(string.toLowerCase());\n  const areSimilar = (a, b) => normalizeString(a) === normalizeString(b);\n\n  try {\n    const codenames = registeredLocales[lang.toLowerCase()];\n    for (const p in codenames) {\n      if (!hasOwnProperty(codenames, p)) {\n        continue;\n      }\n      if (typeof codenames[p] === \"string\") {\n        if (areSimilar(codenames[p], name)) {\n          return p;\n        }\n      }\n      if (Array.isArray(codenames[p])) {\n        for (const mappedName of codenames[p]) {\n          if (areSimilar(mappedName, name)) {\n            return p;\n          }\n        }\n      }\n    }\n    return undefined;\n  } catch (err) {\n    return undefined;\n  }\n};\n\n/*\n * @return Object of alpha-2 codes mapped to alpha-3 codes\n */\nexports.getAlpha2Codes = function () {\n  return alpha2;\n};\n\n/*\n * @param name name\n * @param lang language for country name\n * @return ISO 3166-1 alpha-3 or undefined\n */\nexports.getAlpha3Code = function (name, lang) {\n  const alpha2 = exports.getAlpha2Code(name, lang);\n  if (alpha2) {\n    return exports.toAlpha3(alpha2);\n  } else {\n    return undefined;\n  }\n};\n\n/*\n * @param name name\n * @param lang language for country name\n * @return ISO 3166-1 alpha-3 or undefined\n */\nexports.getSimpleAlpha3Code = function (name, lang) {\n  const alpha2 = exports.getSimpleAlpha2Code(name, lang);\n  if (alpha2) {\n    return exports.toAlpha3(alpha2);\n  } else {\n    return undefined;\n  }\n};\n\n/*\n * @return Object of alpha-3 codes mapped to alpha-2 codes\n */\nexports.getAlpha3Codes = function () {\n  return alpha3;\n};\n\n/*\n * @return Object of numeric codes mapped to alpha-2 codes\n */\nexports.getNumericCodes = function () {\n  return numeric;\n};\n\n/*\n * @return Array of supported languages\n */\nexports.langs = function () {\n  return Object.keys(registeredLocales);\n};\n\n/*\n * @param code ISO 3166-1 alpha-2, alpha-3 or numeric code\n * @return Boolean\n */\nexports.isValid = function (code) {\n  if (!code) {\n    return false;\n  }\n\n  const coerced = code.toString().toUpperCase();\n  return (\n    hasOwnProperty(alpha3, coerced) ||\n    hasOwnProperty(alpha2, coerced) ||\n    hasOwnProperty(numeric, coerced)\n  );\n};\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsLayoutFlexDirectionValues {\n  Row = 'row',\n  Column = 'column',\n}\n\nexport type HdsLayoutFlexDirections = `${HdsLayoutFlexDirectionValues}`;\n\nexport enum HdsLayoutFlexJustifyValues {\n  Start = 'start',\n  Center = 'center',\n  End = 'end',\n  SpaceBetween = 'space-between',\n  SpaceAround = 'space-around',\n  SpaceEvenly = 'space-evenly',\n}\n\nexport type HdsLayoutFlexJustifys = `${HdsLayoutFlexJustifyValues}`;\n\nexport enum HdsLayoutFlexAlignValues {\n  Start = 'start',\n  Center = 'center',\n  End = 'end',\n  Stretch = 'stretch',\n}\n\nexport type HdsLayoutFlexAligns = `${HdsLayoutFlexAlignValues}`;\n\nexport enum HdsLayoutFlexGapValues {\n  'Zero' = '0',\n  'Four' = '4',\n  'Eight' = '8',\n  'Twelve' = '12',\n  'Sixteen' = '16',\n  'TwentyFour' = '24',\n  'ThirtyTwo' = '32',\n  'FortyEight' = '48',\n}\n\nexport type HdsLayoutFlexGaps = `${HdsLayoutFlexGapValues}`;\n\n// A list of all existing tag names in the HTMLElementTagNameMap interface\nexport type AvailableTagNames = keyof HTMLElementTagNameMap;\n// A union of all types in the HTMLElementTagNameMap interface\nexport type AvailableElements =\n  HTMLElementTagNameMap[keyof HTMLElementTagNameMap];\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { HdsAnchoredPositionOptions } from '../../../modifiers/hds-anchored-position.ts';\n\nexport enum HdsDropdownPositionValues {\n  BottomLeft = 'bottom-left',\n  BottomRight = 'bottom-right',\n  TopLeft = 'top-left',\n  TopRight = 'top-right',\n}\nexport type HdsDropdownPositions = `${HdsDropdownPositionValues}`;\n\n// map Dropdown's `listPosition` values to PopoverPrimitive's `placement` values for backwards compatibility\nexport const HdsDropdownPositionToPlacementValues: Record<\n  // Dropdown's `listPosition` values\n  HdsDropdownPositionValues,\n  HdsAnchoredPositionOptions['placement']\n> = {\n  [HdsDropdownPositionValues.BottomLeft]: 'bottom-start',\n  [HdsDropdownPositionValues.BottomRight]: 'bottom-end',\n  [HdsDropdownPositionValues.TopLeft]: 'top-start',\n  [HdsDropdownPositionValues.TopRight]: 'top-end',\n};\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsCardBackgroundValues {\n  NeutralPrimary = 'neutral-primary',\n  NeutralSecondary = 'neutral-secondary',\n}\n\nexport type HdsCardBackground = `${HdsCardBackgroundValues}`;\n\nexport enum HdsCardLevelValues {\n  Base = 'base',\n  Mid = 'mid',\n  High = 'high',\n}\n\nexport type HdsCardLevel = `${HdsCardLevelValues}`;\n\nexport enum HdsCardOverflowValues {\n  Hidden = 'hidden',\n  Visible = 'visible',\n}\n\nexport type HdsCardOverflow = `${HdsCardOverflowValues}`;\n\nexport enum HdsCardTagValues {\n  Div = 'div',\n  Li = 'li',\n}\n\nexport type HdsCardTag = `${HdsCardTagValues}`;\n","import { INITIAL_STATE } from './initial-state';\nimport { yieldableSymbol } from '../yieldables';\nimport { CancelRequest, CANCEL_KIND_EXPLICIT } from './cancelation';\nconst EXPLICIT_CANCEL_REASON = '.cancel() was explicitly called';\n\nexport class BaseTaskInstance {\n  constructor({ task, args, executor, performType, hasEnabledEvents }) {\n    this.task = task;\n    this.args = args;\n    this.performType = performType;\n    this.executor = executor;\n    this.executor.taskInstance = this;\n    this.hasEnabledEvents = hasEnabledEvents;\n  }\n\n  setState() {}\n  onStarted() {}\n  onSuccess() {}\n  onError() {}\n  onCancel() {}\n  formatCancelReason() {}\n  selfCancelLoopWarning() {}\n\n  onFinalize(callback) {\n    this.executor.onFinalize(callback);\n  }\n\n  proceed(index, yieldResumeType, value) {\n    this.executor.proceedChecked(index, yieldResumeType, value);\n  }\n\n  [yieldableSymbol](parentTaskInstance, resumeIndex) {\n    return this.executor.onYielded(parentTaskInstance, resumeIndex);\n  }\n\n  cancel(cancelReason = EXPLICIT_CANCEL_REASON) {\n    this.executor.cancel(new CancelRequest(CANCEL_KIND_EXPLICIT, cancelReason));\n  }\n\n  then(...args) {\n    return this.executor.promise().then(...args);\n  }\n\n  catch(...args) {\n    return this.executor.promise().catch(...args);\n  }\n\n  finally(...args) {\n    return this.executor.promise().finally(...args);\n  }\n\n  toString() {\n    return `${this.task} TaskInstance`;\n  }\n\n  start() {\n    this.executor.start();\n    return this;\n  }\n}\n\nObject.assign(BaseTaskInstance.prototype, INITIAL_STATE);\nObject.assign(BaseTaskInstance.prototype, {\n  state: 'waiting',\n  isDropped: false,\n  isRunning: true,\n});\n","import { BaseTaskInstance } from './external/task-instance/base';\nimport { TRACKED_INITIAL_INSTANCE_STATE } from './tracked-state';\n\n/**\n  A `TaskInstance` represent a single execution of a\n  {@linkcode Task}. Every call to {@linkcode Task#perform} returns\n  a `TaskInstance`.\n\n  `TaskInstance`s are cancelable, either explicitly\n  via {@linkcode TaskInstance#cancel} or {@linkcode Task#cancelAll},\n  or automatically due to the host object being destroyed, or\n  because concurrency policy enforced by a\n  {@linkcode TaskProperty Task Modifier} canceled the task instance.\n\n  <style>\n    .ignore-this--this-is-here-to-hide-constructor,\n    #TaskInstance { display: none }\n  </style>\n\n  @class TaskInstance\n*/\n\nexport class TaskInstance extends BaseTaskInstance {\n  setState(props) {\n    let state = this._recomputeState(props);\n    Object.assign(this, {\n      ...props,\n      isRunning: !props.isFinished,\n      isDropped: state === 'dropped',\n      state,\n    });\n  }\n\n  _recomputeState(props) {\n    if (props.isDropped) {\n      return 'dropped';\n    } else if (props.isCanceled) {\n      if (props.hasStarted) {\n        return 'canceled';\n      } else {\n        return 'dropped';\n      }\n    } else if (props.isFinished) {\n      return 'finished';\n    } else if (props.hasStarted) {\n      return 'running';\n    } else {\n      return 'waiting';\n    }\n  }\n\n  onStarted() {\n    this.triggerEvent('started', this);\n  }\n\n  onSuccess() {\n    this.triggerEvent('succeeded', this);\n  }\n\n  onError(error) {\n    this.triggerEvent('errored', this, error);\n  }\n\n  onCancel(cancelReason) {\n    this.triggerEvent('canceled', this, cancelReason);\n  }\n\n  formatCancelReason(reason) {\n    return `TaskInstance '${this.getName()}' was canceled because ${reason}. For more information, see: http://ember-concurrency.com/docs/task-cancelation-help`;\n  }\n\n  getName() {\n    if (!this.name) {\n      this.name = (this.task && this.task.name) || '<unknown>';\n    }\n    return this.name;\n  }\n\n  selfCancelLoopWarning(parent) {\n    let parentName = `\\`${parent.getName()}\\``;\n    let childName = `\\`${this.getName()}\\``;\n    // eslint-disable-next-line no-console\n    console.warn(\n      `ember-concurrency detected a potentially hazardous \"self-cancel loop\" between parent task ${parentName} and child task ${childName}. If you want child task ${childName} to be canceled when parent task ${parentName} is canceled, please change \\`.perform()\\` to \\`.linked().perform()\\`. If you want child task ${childName} to keep running after parent task ${parentName} is canceled, change it to \\`.unlinked().perform()\\``,\n    );\n  }\n\n  triggerEvent(...allArgs) {\n    if (!this.hasEnabledEvents) {\n      return;\n    }\n\n    let taskInstance = this;\n    let task = taskInstance.task;\n    let host = task.context;\n    let eventNamespace = task && task.name;\n\n    if (host && host.trigger && eventNamespace) {\n      let [eventType, ...args] = allArgs;\n      host.trigger(`${eventNamespace}:${eventType}`, ...args);\n    }\n  }\n\n  /**\n   * Describes the state that the task instance is in. Can be used for debugging,\n   * or potentially driving some UI state. Possible values are:\n   *\n   * - `\"dropped\"`: task instance was canceled before it started\n   * - `\"canceled\"`: task instance was canceled before it could finish\n   * - `\"finished\"`: task instance ran to completion (even if an exception was thrown)\n   * - `\"running\"`: task instance is currently running (returns true even if\n   *     is paused on a yielded promise)\n   * - `\"waiting\"`: task instance hasn't begun running yet (usually\n   *     because the task is using the {@linkcode TaskProperty#enqueue enqueue}\n   *     task modifier)\n   *\n   * The animated timeline examples on the [Task Concurrency](/docs/task-concurrency)\n   * docs page make use of this property.\n   *\n   * @name state\n   * @memberof TaskInstance\n   * @instance\n   * @readOnly\n   */\n\n  /**\n   * True if the TaskInstance was canceled before it could\n   * ever start running. For example, calling\n   * {@linkcode Task#perform .perform()} twice on a\n   * task with the {@linkcode TaskProperty#drop drop} modifier applied\n   * will result in the second task instance being dropped.\n   *\n   * @name isDropped\n   * @memberof TaskInstance\n   * @instance\n   * @readOnly\n   */\n\n  /**\n   * True if the task is still running.\n   *\n   * @name isRunning\n   * @memberof TaskInstance\n   * @instance\n   * @readOnly\n   */\n\n  /**\n   * Event emitted when a new {@linkcode TaskInstance} starts executing.\n   *\n   * `on` from `@ember/object/evented` may be used to create a binding on the host object to the event.\n   *\n   * ```js\n   * import Component from '@glimmer/component';\n   * import { task } from 'ember-concurrency';\n   * import { on } from '@ember/object/evented';\n   *\n   * export default class MyComponent extends Component {\n   *   doSomething = task(async () => {\n   *     // ... does something\n   *   });\n   *\n   *   @on('doSomething:started')\n   *   onDoSomethingStarted(taskInstance) {\n   *     // ...\n   *   }\n   * }\n   * ```\n   *\n   * @event TaskInstance#TASK_NAME:started\n   * @param {TaskInstance} taskInstance - Task instance that was started\n   */\n\n  /**\n   * Event emitted when a {@linkcode TaskInstance} succeeds.\n   *\n   * `on` from `@ember/object/evented` may be used to create a binding on the host object to the event.\n   *\n   * ```js\n   * import Component from '@glimmer/component';\n   * import { task } from 'ember-concurrency';\n   * import { on } from '@ember/object/evented';\n   *\n   * export default class MyComponent extends Component {\n   *   doSomething = task(async () => {\n   *     // ... does something\n   *   });\n   *\n   *   @on('doSomething:succeeded')\n   *   onDoSomethingSucceeded(taskInstance) {\n   *     // ...\n   *   }\n   * }\n   * ```\n   *\n   * @event TaskInstance#TASK_NAME:succeeded\n   * @param {TaskInstance} taskInstance - Task instance that was succeeded\n   */\n\n  /**\n   * Event emitted when a {@linkcode TaskInstance} throws an an error that is\n   * not handled within the task itself.\n   *\n   * `on` from `@ember/object/evented` may be used to create a binding on the host object to the event.\n   *\n   * ```js\n   * import Component from '@glimmer/component';\n   * import { task } from 'ember-concurrency';\n   * import { on } from '@ember/object/evented';\n   *\n   * export default class MyComponent extends Component {\n   *   doSomething = task(async () => {\n   *     // ... does something\n   *   });\n   *\n   *   @on('doSomething:errored')\n   *   onDoSomethingErrored(taskInstance, error) {\n   *     // ...\n   *   }\n   * }\n   * ```\n   *\n   * @event TaskInstance#TASK_NAME:errored\n   * @param {TaskInstance} taskInstance - Task instance that was started\n   * @param {Error} error - Error that was thrown by the task instance\n   */\n\n  /**\n   * Event emitted when a {@linkcode TaskInstance} is canceled.\n   *\n   * `on` from `@ember/object/evented` may be used to create a binding on the host object to the event.\n   *\n   * ```js\n   * import Component from '@glimmer/component';\n   * import { task } from 'ember-concurrency';\n   * import { on } from '@ember/object/evented';\n   *\n   * export default class MyComponent extends Component {\n   *   doSomething = task(async () => {\n   *     // ... does something\n   *   });\n   *\n   *   @on('doSomething:canceled')\n   *   onDoSomethingCanceled(taskInstance, cancelationReason) {\n   *     // ...\n   *   }\n   * }\n   * ```\n   *\n   * @event TaskInstance#TASK_NAME:canceled\n   * @param {TaskInstance} taskInstance - Task instance that was started\n   * @param {string} cancelationReason - Cancelation reason that was was provided to {@linkcode TaskInstance#cancel}\n   */\n\n  /**\n   * Cancels the task instance. Has no effect if the task instance has\n   * already been canceled or has already finished running.\n   *\n   * @method cancel\n   * @memberof TaskInstance\n   * @instance\n   * @async\n   */\n\n  /**\n   * Returns a promise that resolves with the value returned\n   * from the task's (generator) function, or rejects with\n   * either the exception thrown from the task function, or\n   * an error with a `.name` property with value `\"TaskCancelation\"`.\n   *\n   * @method then\n   * @memberof TaskInstance\n   * @instance\n   * @return {Promise}\n   */\n\n  /**\n   * @method catch\n   * @memberof TaskInstance\n   * @instance\n   * @return {Promise}\n   */\n\n  /**\n   * @method finally\n   * @memberof TaskInstance\n   * @instance\n   * @return {Promise}\n   */\n}\n\nif (TRACKED_INITIAL_INSTANCE_STATE) {\n  Object.defineProperties(\n    TaskInstance.prototype,\n    TRACKED_INITIAL_INSTANCE_STATE,\n  );\n}\n","import { TaskGroup as TaskGroupBase } from './external/task/task-group';\nimport { TASKABLE_MIXIN } from './taskable-mixin';\nimport { TRACKED_INITIAL_TASK_STATE } from './tracked-state';\n\n/**\n * \"Task Groups\" provide a means for applying\n * task modifiers to groups of tasks. Once a {@linkcode Task} is declared\n * as part of a group task, modifiers like `drop` or `restartable`\n * will no longer affect the individual `Task`. Instead those\n * modifiers can be applied to the entire group.\n *\n * Turns the decorated property into a task group.\n *\n * Optionally takes a hash of options that will be applied as modifiers to the\n * task group. For instance `maxConcurrency` or `keepLatest`.\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { task, taskGroup } from 'ember-concurrency';\n *\n * class MyComponent extends Component {\n *   &#64;taskGroup({ maxConcurrency: 5 }) chores;\n *\n *   &#64;task({ group: 'chores' })\n *   *mowLawn() {}\n *\n *   &#64;task({ group: 'chores' })\n *   *doDishes() {}\n * }\n * ```\n *\n * <style>\n *  .ignore-this--this-is-here-to-hide-constructor,\n *  #TaskGroup { display: none }\n * </style>\n *\n * @class TaskGroup\n */\nexport class TaskGroup extends TaskGroupBase {\n  /**\n   * Cancels all running or queued `TaskInstance`s for this task group.\n   * If you're trying to cancel a specific TaskInstance (rather\n   * than all of the instances running under this task group) call\n   * `.cancel()` on the specific TaskInstance.\n   *\n   * @method cancelAll\n   * @memberof TaskGroup\n   * @param options.reason A descriptive reason the task group was\n   *   cancelled. Defaults to `\".cancelAll() was explicitly called\n   *   on the Task\"`.\n   * @param options.resetState If true, will clear the task group state\n   *   (`last*` and `performCount` properties will be set to initial\n   *   values). Defaults to false.\n   * @instance\n   * @async\n   *\n   */\n  /**\n   * `true` if any current task instances are running.\n   *\n   * @memberof TaskGroup\n   * @member {boolean} isRunning\n   * @instance\n   * @readOnly\n   */\n  /**\n   * `true` if any future task instances are queued.\n   *\n   * @memberof TaskGroup\n   * @member {boolean} isQueued\n   * @instance\n   * @readOnly\n   */\n  /**\n   * `true` if the task is not in the running or queued state.\n   *\n   * @memberof TaskGroup\n   * @member {boolean} isIdle\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The current state of the task: `\"running\"`, `\"queued\"` or `\"idle\"`.\n   *\n   * @memberof TaskGroup\n   * @member {string} state\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recently started task instance.\n   *\n   * @memberof TaskGroup\n   * @member {TaskInstance} last\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recent task instance that is currently running.\n   *\n   * @memberof TaskGroup\n   * @member {TaskInstance} lastRunning\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recently performed task instance.\n   *\n   * @memberof TaskGroup\n   * @member {TaskInstance} lastPerformed\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recent task instance that succeeded.\n   *\n   * @memberof TaskGroup\n   * @member {TaskInstance} lastSuccessful\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recently completed task instance.\n   *\n   * @memberof TaskGroup\n   * @member {TaskInstance} lastComplete\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recent task instance that errored.\n   *\n   * @memberof TaskGroup\n   * @member {TaskInstance} lastErrored\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recently canceled task instance.\n   *\n   * @memberof TaskGroup\n   * @member {TaskInstance} lastCanceled\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recent task instance that is incomplete.\n   *\n   * @memberof TaskGroup\n   * @member {TaskInstance} lastIncomplete\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The number of times this task has been performed.\n   *\n   * @memberof TaskGroup\n   * @member {number} performCount\n   * @instance\n   * @readOnly\n   */\n}\n\nif (TRACKED_INITIAL_TASK_STATE) {\n  Object.defineProperties(TaskGroup.prototype, TRACKED_INITIAL_TASK_STATE);\n}\n\nObject.assign(TaskGroup.prototype, TASKABLE_MIXIN);\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { eq } from 'ember-truth-helpers';\nimport { hash } from '@ember/helper';\nimport style from 'ember-style-modifier';\n\nimport type { WithBoundArgs } from '@glint/template';\nimport type Owner from '@ember/owner';\n\nimport { HdsFormTagValues } from './types.ts';\nimport HdsFormHeaderTitle from './header/title.gts';\nimport HdsFormHeaderDescription from './header/description.gts';\nimport HdsFormSectionHeader from './section/header.gts';\nimport HdsFormSectionMultiFieldGroup from './section/multi-field-group/index.gts';\nimport HdsFormSectionMultiFieldGroupItem from './section/multi-field-group/item.gts';\nimport HdsFormSeparator from './separator/index.gts';\nimport HdsFormFooter from './footer/index.gts';\nimport HdsFormHeader from './header/index.gts';\nimport HdsFormSection from './section/index.gts';\n\nimport type { HdsFormTags } from './types.ts';\n\nexport const DEFAULT_TAG = HdsFormTagValues.Form;\nexport const AVAILABLE_TAGS: HdsFormTags[] = Object.values(HdsFormTagValues);\n\nexport interface HdsFormSignature {\n  Args: {\n    tag?: HdsFormTags;\n    sectionMaxWidth?: string;\n  };\n  Blocks: {\n    default: [\n      {\n        Header?: typeof HdsFormHeader;\n        HeaderTitle?: typeof HdsFormHeaderTitle;\n        HeaderDescription?: typeof HdsFormHeaderDescription;\n        Section?: typeof HdsFormSection;\n        SectionHeader?: typeof HdsFormSectionHeader;\n        SectionHeaderTitle?: WithBoundArgs<typeof HdsFormHeaderTitle, 'size'>;\n        SectionHeaderDescription?: typeof HdsFormHeaderDescription;\n        SectionMultiFieldGroup?: typeof HdsFormSectionMultiFieldGroup;\n        SectionMultiFieldGroupItem?: typeof HdsFormSectionMultiFieldGroupItem;\n        Separator?: typeof HdsFormSeparator;\n        Footer?: typeof HdsFormFooter;\n      },\n    ];\n  };\n  Element: HTMLFormElement | HTMLDivElement;\n}\n\nexport default class HdsForm extends Component<HdsFormSignature> {\n  tag: HdsFormTags;\n\n  constructor(owner: Owner, args: HdsFormSignature['Args']) {\n    super(owner, args);\n    this.tag = args.tag ?? DEFAULT_TAG;\n\n    assert(\n      `@tag for \"Hds::Form\" must be one of the following: ${AVAILABLE_TAGS.join(', ')}; received: ${this.tag}`,\n      AVAILABLE_TAGS.includes(this.tag)\n    );\n  }\n\n  get sectionMaxWidthStyle(): Record<string, string> {\n    const sectionMaxWidthStyle: { [key: string]: string } = {};\n\n    if (this.args.sectionMaxWidth) {\n      sectionMaxWidthStyle['--hds-form-section-max-width'] =\n        this.args.sectionMaxWidth;\n    }\n    return sectionMaxWidthStyle;\n  }\n\n  <template>\n    {{#if (eq this.tag \"form\")}}\n      <form class=\"hds-form\" {{style this.sectionMaxWidthStyle}} ...attributes>\n        {{yield\n          (hash\n            Header=HdsFormHeader\n            HeaderTitle=HdsFormHeaderTitle\n            HeaderDescription=HdsFormHeaderDescription\n            Section=HdsFormSection\n            SectionHeader=HdsFormSectionHeader\n            SectionHeaderTitle=(component HdsFormHeaderTitle size=\"300\")\n            SectionHeaderDescription=HdsFormHeaderDescription\n            SectionMultiFieldGroup=HdsFormSectionMultiFieldGroup\n            SectionMultiFieldGroupItem=HdsFormSectionMultiFieldGroupItem\n            Separator=HdsFormSeparator\n            Footer=HdsFormFooter\n          )\n        }}\n      </form>\n    {{else}}\n      <div class=\"hds-form\" {{style this.sectionMaxWidthStyle}} ...attributes>\n        {{yield\n          (hash\n            Header=HdsFormHeader\n            HeaderTitle=HdsFormHeaderTitle\n            HeaderDescription=HdsFormHeaderDescription\n            Section=HdsFormSection\n            SectionHeader=HdsFormSectionHeader\n            SectionHeaderTitle=(component HdsFormHeaderTitle size=\"300\")\n            SectionHeaderDescription=HdsFormHeaderDescription\n            SectionMultiFieldGroup=HdsFormSectionMultiFieldGroup\n            SectionMultiFieldGroupItem=HdsFormSectionMultiFieldGroupItem\n            Separator=HdsFormSeparator\n            Footer=HdsFormFooter\n          )\n        }}\n      </div>\n    {{/if}}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { buildWaiter } from '@ember/test-waiters';\nimport { modifier } from 'ember-modifier';\nimport { hash } from '@ember/helper';\n// @ts-expect-error: missing types https://github.com/josemarluedke/ember-focus-trap/issues/86\nimport focusTrap from 'ember-focus-trap/modifiers/focus-trap';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport HdsDialogPrimitiveHeader from '../dialog-primitive/header.gts';\nimport HdsDialogPrimitiveBody from '../dialog-primitive/body.gts';\nimport HdsDialogPrimitiveFooter from '../dialog-primitive/footer.gts';\nimport HdsDialogPrimitiveWrapper from '../dialog-primitive/wrapper.gts';\nimport HdsDialogPrimitiveOverlay from '../dialog-primitive/overlay.gts';\nimport { HdsModalSizeValues, HdsModalColorValues } from './types.ts';\nimport { getElementId } from '../../../utils/hds-get-element-id.ts';\n\nimport type { HdsModalSizes, HdsModalColors } from './types.ts';\n\nconst waiter = buildWaiter('@hashicorp/design-system-components:modal');\n\nexport const DEFAULT_SIZE = HdsModalSizeValues.Medium;\nexport const DEFAULT_COLOR = HdsModalColorValues.Neutral;\n\nexport const SIZES: HdsModalSizes[] = Object.values(HdsModalSizeValues);\nexport const COLORS: HdsModalColors[] = Object.values(HdsModalColorValues);\n\nexport interface HdsModalSignature {\n  Args: {\n    isDismissDisabled?: boolean;\n    size?: HdsModalSizes;\n    color?: HdsModalColors;\n    returnFocusTo?: string;\n    onOpen?: () => void;\n    onClose?: (event: Event) => void;\n  };\n  Blocks: {\n    default: [\n      {\n        Header?: WithBoundArgs<\n          typeof HdsDialogPrimitiveHeader,\n          'id' | 'onDismiss' | 'contextualClassPrefix'\n        >;\n        Body?: WithBoundArgs<typeof HdsDialogPrimitiveBody, 'contextualClass'>;\n        Footer?: WithBoundArgs<\n          typeof HdsDialogPrimitiveFooter,\n          'onDismiss' | 'contextualClass'\n        >;\n      },\n    ];\n  };\n  Element: HTMLDialogElement;\n}\n\nexport default class HdsModal extends Component<HdsModalSignature> {\n  @tracked private _isOpen = false;\n  private _element!: HTMLDialogElement;\n  private _body!: HTMLElement;\n  private _bodyInitialOverflowValue = '';\n  private _clickOutsideToDismissHandler!: (event: MouseEvent) => void;\n  private _mousedownOutsideModalHandler!: (event: MouseEvent) => void;\n  private _mousedownWasOutsideModal = false;\n\n  get isDismissDisabled(): boolean {\n    return this.args.isDismissDisabled ?? false;\n  }\n\n  get size(): HdsModalSizes {\n    const { size = DEFAULT_SIZE } = this.args;\n\n    assert(\n      `@size for \"Hds::Modal\" must be one of the following: ${SIZES.join(\n        ', '\n      )}; received: ${size}`,\n      SIZES.includes(size)\n    );\n\n    return size;\n  }\n\n  get color(): HdsModalColors {\n    const { color = DEFAULT_COLOR } = this.args;\n\n    assert(\n      `@color for \"Hds::Modal\" must be one of the following: ${COLORS.join(\n        ', '\n      )}; received: ${color}`,\n      COLORS.includes(color)\n    );\n\n    return color;\n  }\n\n  get id(): string {\n    return getElementId(this);\n  }\n\n  get classNames(): string {\n    const classes = ['hds-modal'];\n\n    // add a class based on the @size argument\n    classes.push(`hds-modal--size-${this.size}`);\n\n    // add a class based on the @color argument\n    classes.push(`hds-modal--color-${this.color}`);\n\n    return classes.join(' ');\n  }\n\n  private _performCloseCleanup(): void {\n    this._isOpen = false;\n\n    // Reset page `overflow` property\n    if (this._body) {\n      this._body.style.removeProperty('overflow');\n      if (this._bodyInitialOverflowValue === '') {\n        if (this._body.style.length === 0) {\n          this._body.removeAttribute('style');\n        }\n      } else {\n        this._body.style.setProperty(\n          'overflow',\n          this._bodyInitialOverflowValue\n        );\n      }\n    }\n\n    // Return focus to a specific element (if provided)\n    if (this.args.returnFocusTo) {\n      const initiator = document.getElementById(this.args.returnFocusTo);\n      if (initiator) {\n        initiator.focus();\n      }\n    }\n  }\n\n  registerOnCloseCallback = (event: Event): void => {\n    if (\n      !this.isDismissDisabled &&\n      this.args.onClose &&\n      typeof this.args.onClose === 'function'\n    ) {\n      this.args.onClose(event);\n    }\n\n    // If the dismissal of the modal is disabled, we keep the modal open/visible otherwise we mark it as closed\n    if (this.isDismissDisabled) {\n      // If, in a chain of events, the element is not attached to the DOM, the `showModal` would fail\n      // so we add this safeguard condition that checks for the `<dialog>` to have a parent\n      if (this._element.parentElement) {\n        // As there is no way to `preventDefault` on `close` events, we call the `showModal` function\n        // preserving the state of the modal dialog\n        this._element.showModal();\n      }\n    } else {\n      this._performCloseCleanup();\n    }\n  };\n\n  private _registerDialog = modifier((element: HTMLDialogElement) => {\n    // Store references of `<dialog>` and `<body>` elements\n    this._element = element;\n    this._body = document.body;\n\n    if (this._body) {\n      // Store the initial `overflow` value of `<body>` so we can reset to it\n      this._bodyInitialOverflowValue =\n        this._body.style.getPropertyValue('overflow');\n    }\n\n    // Register \"onClose\" callback function to be called when a native 'close' event is dispatched\n\n    this._element.addEventListener('close', this.registerOnCloseCallback, true);\n\n    // If the modal dialog is not already open\n    if (!this._element.open) {\n      this.open();\n    }\n\n    // Note: because the Modal has the `@isDismissedDisabled` argument, we need to add our own click outside to dismiss logic. This is because `ember-focus-trap` treats the `focusTrapOptions` as static, so we can't update it dynamically if `@isDismissDisabled` changes.\n\n    // Track whether the mousedown that initiated the click started outside the modal.\n    // This prevents a drag that begins inside the modal but ends outside from closing it.\n    this._mousedownOutsideModalHandler = (event: MouseEvent) => {\n      this._mousedownWasOutsideModal = !this._element.contains(\n        event.target as Node\n      );\n    };\n\n    this._clickOutsideToDismissHandler = (event: MouseEvent) => {\n      // Only dismiss if both the mousedown and the click (mouseup) occurred outside the modal\n      if (\n        !this._element.contains(event.target as Node) &&\n        this._mousedownWasOutsideModal &&\n        this._isOpen\n      ) {\n        if (!this.isDismissDisabled) {\n          //  here we use `void` because `onDismiss` is an async function, but in reality we don't need to handle the result or wait for its completion\n          void this.onDismiss();\n        }\n      }\n    };\n\n    document.addEventListener('mousedown', this._mousedownOutsideModalHandler, {\n      capture: true,\n      passive: true,\n    });\n    document.addEventListener('click', this._clickOutsideToDismissHandler, {\n      capture: true,\n      passive: false,\n    });\n\n    return () => {\n      // if the <dialog> is removed from the dom while open we emulate the close event\n      if (this._isOpen) {\n        this._performCloseCleanup();\n      }\n\n      this._element?.removeEventListener(\n        'close',\n\n        this.registerOnCloseCallback,\n        true\n      );\n\n      document.removeEventListener(\n        'mousedown',\n        this._mousedownOutsideModalHandler,\n        true\n      );\n      document.removeEventListener(\n        'click',\n        this._clickOutsideToDismissHandler,\n        true\n      );\n    };\n  });\n\n  open = (): void => {\n    // Make modal dialog visible using the native `showModal` method\n    this._element.showModal();\n    this._isOpen = true;\n\n    // Prevent page from scrolling when the dialog is open\n    if (this._body) this._body.style.setProperty('overflow', 'hidden');\n\n    // Call \"onOpen\" callback function\n    if (this.args.onOpen && typeof this.args.onOpen === 'function') {\n      this.args.onOpen();\n    }\n  };\n\n  // eslint-disable-next-line @typescript-eslint/require-await\n  onDismiss = async (): Promise<void> => {\n    // allow ember test helpers to be aware of when the `close` event fires\n    // when using `click` or other helpers from '@ember/test-helpers'\n    if (this._element.open) {\n      const token = waiter.beginAsync();\n      const listener = () => {\n        waiter.endAsync(token);\n        this._element.removeEventListener('close', listener);\n      };\n      this._element.addEventListener('close', listener);\n    }\n\n    // Make modal dialog invisible using the native `close` method\n    this._element.close();\n  };\n\n  <template>\n    <HdsDialogPrimitiveWrapper\n      class={{this.classNames}}\n      ...attributes\n      aria-labelledby={{this.id}}\n      {{this._registerDialog}}\n      {{focusTrap\n        isActive=this._isOpen\n        focusTrapOptions=(hash onDeactivate=this.onDismiss)\n      }}\n    >\n      <:header>\n        {{yield\n          (hash\n            Header=(component\n              HdsDialogPrimitiveHeader\n              id=this.id\n              onDismiss=this.onDismiss\n              contextualClassPrefix=\"hds-modal\"\n              titleTag=\"h1\"\n            )\n          )\n        }}\n      </:header>\n      <:body>\n        {{yield\n          (hash\n            Body=(component\n              HdsDialogPrimitiveBody contextualClass=\"hds-modal__body\"\n            )\n          )\n        }}\n      </:body>\n      <:footer>\n        {{yield\n          (hash\n            Footer=(component\n              HdsDialogPrimitiveFooter\n              onDismiss=this.onDismiss\n              contextualClass=\"hds-modal__footer\"\n            )\n          )\n        }}\n      </:footer>\n    </HdsDialogPrimitiveWrapper>\n\n    {{#if this._isOpen}}\n      <HdsDialogPrimitiveOverlay @contextualClass=\"hds-modal__overlay\" />\n    {{/if}}\n  </template>\n}\n","/**\n * Identicon.js 2.3.3\n * http://github.com/stewartlord/identicon.js\n *\n * PNGLib required for PNG output\n * http://www.xarg.org/download/pnglib.js\n *\n * Copyright 2018, Stewart Lord\n * Released under the BSD license\n * http://www.opensource.org/licenses/bsd-license.php\n */\n\n(function() {\n    var PNGlib;\n    if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n        PNGlib = require('./pnglib');\n    } else {\n        PNGlib = window.PNGlib;\n    }\n\n    var Identicon = function(hash, options){\n        if (typeof(hash) !== 'string' || hash.length < 15) {\n            throw 'A hash of at least 15 characters is required.';\n        }\n\n        this.defaults = {\n            background: [240, 240, 240, 255],\n            margin:     0.08,\n            size:       64,\n            saturation: 0.7,\n            brightness: 0.5,\n            format:     'png'\n        };\n\n        this.options = typeof(options) === 'object' ? options : this.defaults;\n\n        // backward compatibility with old constructor (hash, size, margin)\n        if (typeof(arguments[1]) === 'number') { this.options.size   = arguments[1]; }\n        if (arguments[2])                      { this.options.margin = arguments[2]; }\n\n        this.hash        = hash\n        this.background  = this.options.background || this.defaults.background;\n        this.size        = this.options.size       || this.defaults.size;\n        this.format      = this.options.format     || this.defaults.format;\n        this.margin      = this.options.margin !== undefined ? this.options.margin : this.defaults.margin;\n\n        // foreground defaults to last 7 chars as hue at 70% saturation, 50% brightness\n        var hue          = parseInt(this.hash.substr(-7), 16) / 0xfffffff;\n        var saturation   = this.options.saturation || this.defaults.saturation;\n        var brightness   = this.options.brightness || this.defaults.brightness;\n        this.foreground  = this.options.foreground || this.hsl2rgb(hue, saturation, brightness);\n    };\n\n    Identicon.prototype = {\n        background: null,\n        foreground: null,\n        hash:       null,\n        margin:     null,\n        size:       null,\n        format:     null,\n\n        image: function(){\n            return this.isSvg()\n                ? new Svg(this.size, this.foreground, this.background)\n                : new PNGlib(this.size, this.size, 256);\n        },\n\n        render: function(){\n            var image      = this.image(),\n                size       = this.size,\n                baseMargin = Math.floor(size * this.margin),\n                cell       = Math.floor((size - (baseMargin * 2)) / 5),\n                margin     = Math.floor((size - cell * 5) / 2),\n                bg         = image.color.apply(image, this.background),\n                fg         = image.color.apply(image, this.foreground);\n\n            // the first 15 characters of the hash control the pixels (even/odd)\n            // they are drawn down the middle first, then mirrored outwards\n            var i, color;\n            for (i = 0; i < 15; i++) {\n                color = parseInt(this.hash.charAt(i), 16) % 2 ? bg : fg;\n                if (i < 5) {\n                    this.rectangle(2 * cell + margin, i * cell + margin, cell, cell, color, image);\n                } else if (i < 10) {\n                    this.rectangle(1 * cell + margin, (i - 5) * cell + margin, cell, cell, color, image);\n                    this.rectangle(3 * cell + margin, (i - 5) * cell + margin, cell, cell, color, image);\n                } else if (i < 15) {\n                    this.rectangle(0 * cell + margin, (i - 10) * cell + margin, cell, cell, color, image);\n                    this.rectangle(4 * cell + margin, (i - 10) * cell + margin, cell, cell, color, image);\n                }\n            }\n\n            return image;\n        },\n\n        rectangle: function(x, y, w, h, color, image){\n            if (this.isSvg()) {\n                image.rectangles.push({x: x, y: y, w: w, h: h, color: color});\n            } else {\n                var i, j;\n                for (i = x; i < x + w; i++) {\n                    for (j = y; j < y + h; j++) {\n                        image.buffer[image.index(i, j)] = color;\n                    }\n                }\n            }\n        },\n\n        // adapted from: https://gist.github.com/aemkei/1325937\n        hsl2rgb: function(h, s, b){\n            h *= 6;\n            s = [\n                b += s *= b < .5 ? b : 1 - b,\n                b - h % 1 * s * 2,\n                b -= s *= 2,\n                b,\n                b + h % 1 * s,\n                b + s\n            ];\n\n            return[\n                s[ ~~h    % 6 ] * 255, // red\n                s[ (h|16) % 6 ] * 255, // green\n                s[ (h|8)  % 6 ] * 255  // blue\n            ];\n        },\n\n        toString: function(raw){\n            // backward compatibility with old toString, default to base64\n            if (raw) {\n                return this.render().getDump();\n            } else {\n                return this.render().getBase64();\n            }\n        },\n\n        isSvg: function(){\n            return this.format.match(/svg/i)\n        }\n    };\n\n    var Svg = function(size, foreground, background){\n        this.size       = size;\n        this.foreground = this.color.apply(this, foreground);\n        this.background = this.color.apply(this, background);\n        this.rectangles = [];\n    };\n\n    Svg.prototype = {\n        size:       null,\n        foreground: null,\n        background: null,\n        rectangles: null,\n\n        color: function(r, g, b, a){\n            var values = [r, g, b].map(Math.round);\n            values.push((a >= 0) && (a <= 255) ? a/255 : 1);\n            return 'rgba(' + values.join(',') + ')';\n        },\n\n        getDump: function(){\n          var i,\n                xml,\n                rect,\n                fg     = this.foreground,\n                bg     = this.background,\n                stroke = this.size * 0.005;\n\n            xml = \"<svg xmlns='http://www.w3.org/2000/svg'\"\n                + \" width='\" + this.size + \"' height='\" + this.size + \"'\"\n                + \" style='background-color:\" + bg + \";'>\"\n                + \"<g style='fill:\" + fg + \"; stroke:\" + fg + \"; stroke-width:\" + stroke + \";'>\";\n\n            for (i = 0; i < this.rectangles.length; i++) {\n                rect = this.rectangles[i];\n                if (rect.color == bg) continue;\n                xml += \"<rect \"\n                    + \" x='\"      + rect.x + \"'\"\n                    + \" y='\"      + rect.y + \"'\"\n                    + \" width='\"  + rect.w + \"'\"\n                    + \" height='\" + rect.h + \"'\"\n                    + \"/>\";\n            }\n            xml += \"</g></svg>\"\n\n            return xml;\n        },\n\n        getBase64: function(){\n            if ('function' === typeof btoa) {\n                return btoa(this.getDump());\n            } else if (Buffer) {\n                return new Buffer(this.getDump(), 'binary').toString('base64');\n            } else {\n                throw 'Cannot generate base64 output';\n            }\n        }\n    };\n\n    if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n        module.exports = Identicon;\n    } else {\n        window.Identicon = Identicon;\n    }\n})();\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { hash } from '@ember/helper';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport HdsAccordionItem, {\n  SIZES,\n  DEFAULT_SIZE,\n  TYPES,\n  DEFAULT_TYPE,\n} from './item/index.gts';\nimport { HdsAccordionItemTitleTagValues } from './types.ts';\n\nimport type {\n  HdsAccordionForceStates,\n  HdsAccordionSizes,\n  HdsAccordionTypes,\n  HdsAccordionItemTitleTags,\n} from './types.ts';\n\nexport interface HdsAccordionSignature {\n  Args: {\n    size?: HdsAccordionSizes;\n    type?: HdsAccordionTypes;\n    forceState?: HdsAccordionForceStates;\n    titleTag?: HdsAccordionItemTitleTags;\n  };\n  Blocks: {\n    default: [\n      {\n        Item?: WithBoundArgs<\n          typeof HdsAccordionItem,\n          'titleTag' | 'size' | 'type' | 'forceState'\n        >;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsAccordion extends Component<HdsAccordionSignature> {\n  get size(): HdsAccordionSizes {\n    const { size = DEFAULT_SIZE } = this.args;\n\n    assert(\n      `@size for \"Hds::Accordion\" must be one of the following: ${SIZES.join(\n        ', '\n      )}; received: ${size}`,\n      SIZES.includes(size)\n    );\n\n    return size;\n  }\n\n  get titleTag(): HdsAccordionItemTitleTags {\n    return this.args.titleTag ?? HdsAccordionItemTitleTagValues.Div;\n  }\n\n  get type(): HdsAccordionTypes {\n    const { type = DEFAULT_TYPE } = this.args;\n\n    assert(\n      `@type for \"Hds::Accordion\" must be one of the following: ${TYPES.join(\n        ', '\n      )}; received: ${type}`,\n      TYPES.includes(type)\n    );\n\n    return type;\n  }\n\n  get classNames() {\n    const classes = ['hds-accordion'];\n\n    // add a class based on the @size argument\n    classes.push(`hds-accordion--size-${this.size}`);\n\n    // add a class based on the @type argument\n    classes.push(`hds-accordion--type-${this.type}`);\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <div class={{this.classNames}} ...attributes>\n      {{yield\n        (hash\n          Item=(component\n            HdsAccordionItem\n            titleTag=this.titleTag\n            size=this.size\n            type=this.type\n            forceState=@forceState\n          )\n        )\n      }}\n    </div>\n  </template>\n}\n","import Modifier from 'ember-modifier';\nimport { assert } from '@ember/debug';\nimport { typeOf } from '@ember/utils';\nimport type * as CSS from 'csstype';\n\n// Cannot be typed as `Partial<CSSStyleDeclaration>` because `CSSStyleDeclaration`\n// interface does _not_ included dashed CSS property names. It only includes the\n// camelCase version of a CSS property.\n// https://github.com/microsoft/TypeScript-DOM-lib-generator/issues/1672\ntype CSSStyles =\n  | Partial<CSS.Properties>\n  | Partial<CSS.PropertiesHyphen>\n  | { readonly [key: `--${string}`]: string };\n\nfunction isObject(o: unknown): boolean {\n  return typeof o === 'object' && Boolean(o);\n}\n\nconst DASHERIZE_REGEX = /([a-z\\d])([A-Z])/g;\nconst DASHERIZE_REPLACEMENT = '$1-$2';\n\nfunction dasherize(str: string): string {\n  return str.replace(DASHERIZE_REGEX, DASHERIZE_REPLACEMENT).toLowerCase();\n}\n\n/**\n * Returns a two-dimensional array, like:\n *\n * ```js\n * [\n *   ['font-size', '16px'],\n *   ['text-align', 'center'],\n *   ['color', 'red']\n * ]\n * ```\n *\n * This data structure is slightly faster to process than an object / dictionary.\n */\nfunction compileStyles(\n  positional: CSSStyles[],\n  named: CSSStyles,\n): [string, string][] {\n  return [...positional.filter(isObject), named]\n    .map((obj) =>\n      Object.entries(obj).map(\n        ([k, v]) => [dasherize(k), v] as [string, string],\n      ),\n    )\n    .flat();\n}\n\nexport interface StyleModifierSignature {\n  Element: Element & ElementCSSInlineStyle;\n  Args: {\n    Positional: CSSStyles[];\n    Named: CSSStyles;\n  };\n}\n\nexport default class StyleModifier extends Modifier<StyleModifierSignature> {\n  existingStyles: Set<string> = new Set();\n\n  setStyles(\n    element: StyleModifierSignature['Element'],\n    newStyles: [string, string][],\n  ) {\n    const { existingStyles } = this;\n    const rulesToRemove: Set<string> = new Set(existingStyles);\n\n    // clear cache of existing styles\n    existingStyles.clear();\n\n    newStyles.forEach(([property, value]) => {\n      assert(\n        `Your given value for property '${property}' is ${value} (${typeOf(\n          value,\n        )}). ` +\n          'Accepted types are string and undefined. Please change accordingly.',\n        typeof value === 'undefined' || typeOf(value) === 'string',\n      );\n\n      // priority must be specified as separate argument\n      // value must not contain \"!important\"\n      let priority = '';\n      if (value && value.includes('!important')) {\n        priority = 'important';\n        value = value.replace('!important', '');\n      }\n\n      // update CSSOM\n      element.style.setProperty(property, value, priority);\n\n      // should not remove rules that have been updated in this cycle\n      rulesToRemove.delete(property);\n\n      // cache styles that have been set for potential clean-up when argument changes\n      existingStyles.add(property);\n    });\n\n    // remove rules that were present in last cycle but aren't present in this one\n    rulesToRemove.forEach((rule) => element.style.removeProperty(rule));\n  }\n\n  modify(\n    element: StyleModifierSignature['Element'],\n    positional: [CSSStyles] | [],\n    named: CSSStyles,\n  ) {\n    this.setStyles(element, compileStyles(positional, named));\n  }\n}\n","// eslint-disable-next-line ember/no-classic-components\nimport EmberComponent from '@ember/component';\nimport Helper from '@ember/component/helper';\nimport { assert, runInDebug } from '@ember/debug';\n\nimport type { ComponentLike } from '@glint/template';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction UNINITIALIZED() { }\n\nexport type ElementFromTagName<T extends string> = T extends keyof HTMLElementTagNameMap\n  ? HTMLElementTagNameMap[T]\n  : Element;\n\ntype Positional<T extends string> = [name: T];\ntype Return<T extends string> = ComponentLike<{\n  Element: ElementFromTagName<T>;\n  Blocks: { default: [] };\n}>;\n\nexport interface ElementSignature<T extends string> {\n  Args: {\n    Positional: Positional<T>;\n  };\n  Return: Return<T> | undefined;\n}\n\nexport default class ElementHelper<T extends string> extends Helper<ElementSignature<T>> {\n  tagName: string | (() => void) = UNINITIALIZED;\n  componentClass?: Return<T>;\n\n  compute(params: Positional<T>, hash: object) {\n    assert('The `element` helper takes a single positional argument', params.length === 1);\n    assert(\n      'The `element` helper does not take any named arguments',\n      Object.keys(hash).length === 0\n    );\n\n    let tagName = params[0];\n\n    if (tagName !== this.tagName) {\n      this.tagName = tagName;\n\n      if (typeof tagName === 'string') {\n        this.componentClass =\n          class DynamicElement extends EmberComponent {\n            tagName = tagName;\n          } as unknown as Return<T>;\n      } else {\n        this.componentClass = undefined;\n\n        runInDebug(() => {\n          let message = 'The argument passed to the `element` helper must be a string';\n\n          try {\n            message += ` (you passed \\`${tagName}\\`)`;\n          } catch (e) {\n            // ignore\n          }\n\n          assert(message, tagName === undefined || tagName === null);\n        });\n      }\n    }\n\n    return this.componentClass;\n  }\n}\n","import { helper } from '@ember/component/helper';\n\nexport function append([...arrays]) {\n  return [].concat(...arrays);\n}\n\nexport default helper(append);\n","import { helper } from '@ember/component/helper';\nimport { isArray as isEmberArray } from '@ember/array';\nconst { max, ceil } = Math;\nimport asArray from '../utils/as-array.ts';\n\nexport function chunk<T>(num: number | string, array: T[]) {\n  const integer = parseInt(num as string, 10);\n  const size = max(integer, 0);\n\n  let length = 0;\n  if (isEmberArray(array)) {\n    length = array.length;\n  }\n\n  array = asArray(array);\n\n  if (!length || size < 1) {\n    return [];\n  } else {\n    let index = 0;\n    let resultIndex = -1;\n    const result = new Array(ceil(length / size));\n\n    while (index < length) {\n      result[++resultIndex] = array.slice(index, (index += size));\n    }\n\n    return result;\n  }\n}\n\nexport default helper(function <T>([num, array]: [number | string, T[]]) {\n  return chunk(num, array);\n});\n","import { helper } from '@ember/component/helper';\nimport { isPresent } from '@ember/utils';\nimport { isArray } from '@ember/array';\n\nexport function compact<T>([value]: [T[]]): T[] {\n  let array;\n  if (Array.isArray(value) || isArray(value)) {\n    array = value;\n  } else {\n    array = [value];\n  }\n\n  return array.filter((item) => isPresent(item));\n}\n\nexport default helper(compact);\n","import { helper } from '@ember/component/helper';\nimport type { AnyFn } from '../utils/types';\n\n/**\n * @deprecated since ember 3.25 (with polyfill) and ember 4.5, this utility is not needed as functions can be directly invoked\n *\n * Calls a function\n */\nexport function compute<Action extends AnyFn>([action, ...params]: [\n  action: Action,\n  ...params: Parameters<Action>,\n]): ReturnType<Action> {\n  return action(...params);\n}\n\nexport default helper(compute);\n","import { helper } from '@ember/component/helper';\nimport { isEmpty } from '@ember/utils';\n\nexport function dec([step, val]: [number | undefined, number?]) {\n  if (isEmpty(val)) {\n    val = step;\n    step = undefined;\n  }\n\n  val = Number(val);\n\n  if (isNaN(val)) {\n    return;\n  }\n\n  if (step === undefined) {\n    step = 1;\n  }\n\n  return val - step;\n}\n\nexport default helper(dec);\n","import { helper } from '@ember/component/helper';\n\nimport asArray from '../utils/as-array.ts';\n\nexport function drop<T>([dropAmount, array]: [number, T[]]) {\n  return asArray(array).slice(dropAmount);\n}\n\nexport default helper(drop);\n","import { helper } from '@ember/component/helper';\n\nexport function entries([object]: [\n  Record<string, unknown> | null | undefined,\n]) {\n  if (!object) {\n    return object;\n  }\n  return Object.entries(object);\n}\n\nexport default helper(entries);\n","import { helper } from '@ember/component/helper';\nimport { isArray as isEmberArray } from '@ember/array';\nimport { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\nimport isEqual from '../utils/is-equal.ts';\nimport asArray from '../utils/as-array.ts';\n\nexport function filterBy<T extends object, K extends keyof T>([\n  byPath,\n  value,\n  array,\n]: [K, T[K] | T[] | undefined, T[]]) {\n  let isPresent = true;\n  if (!isEmberArray(array) && isEmberArray(value)) {\n    array = value as T[];\n    value = undefined;\n    isPresent = false;\n  }\n\n  array = asArray(array);\n\n  if (isEmpty(byPath) || isEmpty(array)) {\n    return [];\n  }\n\n  let filterFn;\n\n  if (isPresent) {\n    if (typeof value === 'function') {\n      filterFn = (item: T) => value(get(item, byPath));\n    } else {\n      filterFn = (item: T) => isEqual(get(item, byPath), value);\n    }\n  } else {\n    filterFn = (item: T) => !!get(item, byPath);\n  }\n\n  return array.filter(filterFn);\n}\n\nexport default helper(filterBy);\n","import { helper } from '@ember/component/helper';\nimport { isEmpty } from '@ember/utils';\nimport asArray from '../utils/as-array.ts';\n\nexport function filter<T>([callback, array]: [\n  (value: T, index: number, array: T[]) => value is T,\n  T[],\n]) {\n  if (isEmpty(callback) || !array) {\n    return [];\n  }\n\n  return asArray(array).filter(callback);\n}\n\nexport default helper(filter);\n","import { helper } from '@ember/component/helper';\nimport { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\nimport asArray from '../utils/as-array.ts';\n\nexport function findBy<T, K extends keyof T>([byPath, value, array]: [\n  K,\n  T[K],\n  T[],\n]) {\n  if (isEmpty(byPath)) {\n    return undefined;\n  }\n\n  return asArray(array).find((item) => get(item, String(byPath)) === value);\n}\n\nexport default helper(findBy);\n","import { helper } from '@ember/component/helper';\nimport { isArray as isEmberArray } from '@ember/array';\nimport asArray from '../utils/as-array.ts';\n\nexport function flatten<T>(array: T[]): T[] {\n  if (!isEmberArray(array)) {\n    return array;\n  }\n\n  return asArray(array).reduce<T[]>((flattened, el) => {\n    return flattened.concat(flatten(el as T[]));\n  }, []);\n}\n\nexport default helper(function <T>([array]: [T[]]) {\n  return flatten(array);\n});\n","import { helper } from '@ember/component/helper';\n\nexport function fromEntries([entries]: [[unknown, unknown][]]) {\n  if (!entries) {\n    return entries;\n  }\n  return Object.fromEntries(entries);\n}\n\nexport default helper(fromEntries);\n","import { helper } from '@ember/component/helper';\nimport { get } from '@ember/object';\nimport asArray from '../utils/as-array.ts';\n\nexport function groupBy<T, K extends keyof T & string>([byPath, array]: [\n  K,\n  T[],\n]) {\n  const groups: { [key: string]: T[] } = {};\n\n  asArray(array).forEach((item) => {\n    const groupName = get(item, byPath) as string;\n    let group = groups[groupName];\n\n    if (!Array.isArray(group)) {\n      group = [];\n      groups[groupName] = group;\n    }\n\n    group.push(item);\n  });\n\n  return groups;\n}\n\nexport default helper(groupBy);\n","import { helper } from '@ember/component/helper';\nimport { isPresent } from '@ember/utils';\nimport { next } from './next.ts';\nimport isEqual from '../utils/is-equal.ts';\nimport getValueArrayAndUseDeepEqualFromParams from '../-private/get-value-array-and-use-deep-equal-from-params.ts';\nimport asArray from '../utils/as-array.ts';\n\nexport function hasNext<T>(\n  currentValue: T,\n  maybeArray: T[],\n  useDeepEqual = false,\n) {\n  const array = asArray(maybeArray);\n  const nextValue = next(currentValue, array, useDeepEqual);\n  const isNotSameValue = !isEqual(nextValue, currentValue, useDeepEqual);\n\n  return isNotSameValue && isPresent(nextValue);\n}\n\nexport default helper(function <T>(params: [T, boolean | T[], T[]?]) {\n  const { currentValue, array, useDeepEqual } =\n    getValueArrayAndUseDeepEqualFromParams(params);\n\n  return hasNext(currentValue, array as T[], useDeepEqual);\n});\n","import { helper } from '@ember/component/helper';\nimport { isPresent } from '@ember/utils';\nimport { previous } from './previous.ts';\nimport isEqual from '../utils/is-equal.ts';\nimport getValueArrayAndUseDeepEqualFromParams from '../-private/get-value-array-and-use-deep-equal-from-params.ts';\nimport asArray from '../utils/as-array.ts';\n\nexport function hasPrevious<T>(\n  currentValue: T,\n  maybeArray: T[],\n  useDeepEqual = false,\n) {\n  const array = asArray(maybeArray);\n  const previousValue = previous(currentValue, array, useDeepEqual);\n  const isNotSameValue = !isEqual(previousValue, currentValue, useDeepEqual);\n\n  return isNotSameValue && isPresent(previousValue);\n}\n\nexport default helper(function <T>(params: [T, boolean | T[], T[]?]) {\n  const { currentValue, array, useDeepEqual } =\n    getValueArrayAndUseDeepEqualFromParams(params);\n\n  return hasPrevious(currentValue, array as T[], useDeepEqual);\n});\n","import { helper } from '@ember/component/helper';\nimport { isEmpty } from '@ember/utils';\n\nexport function inc([step, val]: [number | undefined, number?]) {\n  if (isEmpty(val)) {\n    val = step;\n    step = undefined;\n  }\n\n  val = Number(val);\n\n  if (isNaN(val)) {\n    return;\n  }\n\n  if (step === undefined) {\n    step = 1;\n  }\n\n  return val + step;\n}\n\nexport default helper(inc);\n","import { isArray as isEmberArray } from '@ember/array';\nimport { helper } from '@ember/component/helper';\nimport asArray from '../utils/as-array.ts';\n\nexport function includes<T>(needleOrNeedles: T | T[], haystack: T[]) {\n  if (!isEmberArray(haystack)) {\n    return false;\n  }\n\n  const needles = isEmberArray(needleOrNeedles)\n    ? needleOrNeedles\n    : [needleOrNeedles];\n  const haystackAsEmberArray = asArray(haystack);\n\n  return asArray(needles as T[]).every((needle) => {\n    return haystackAsEmberArray.includes(needle);\n  });\n}\n\nexport default helper(function <T>([needle, haystack]: [T | T[], T[]]) {\n  return includes(needle, haystack);\n});\n","import { helper } from '@ember/component/helper';\nimport { isArray as isEmberArray } from '@ember/array';\nimport asArray from '../utils/as-array.ts';\n\nexport function intersect<T>([...arrays]: [...T[]]) {\n  const confirmedArrays = asArray(arrays).map((array) => {\n    return isEmberArray(array) ? (array as T[]) : [];\n  });\n  // copied from https://github.com/emberjs/ember.js/blob/315ec6472ff542ac714432036cc96fe4bd62bd1f/packages/%40ember/object/lib/computed/reduce_computed_macros.js#L1063-L1100\n  const results = confirmedArrays.pop()!.filter((candidate) => {\n    for (let i = 0; i < confirmedArrays.length; i++) {\n      let found = false;\n      const array = confirmedArrays[i] as T[];\n      for (let j = 0; j < array.length; j++) {\n        if (array[j] === candidate) {\n          found = true;\n          break;\n        }\n      }\n\n      if (found === false) {\n        return false;\n      }\n    }\n\n    return true;\n  });\n\n  return results;\n}\n\nexport default helper(intersect);\n","import { isArray as isEmberArray } from '@ember/array';\nimport { helper } from '@ember/component/helper';\nimport RSVP from 'rsvp';\nimport type { AnyVoidFn } from '../utils/types';\n\nconst { all } = RSVP;\n\n/**\n * @deprecated since ember 3.25 (with polyfill) and ember 4.5, this utility is not needed as functions can be directly invoked\n *\n * Invokes a method on an object, or on each object of an array\n */\nexport function invoke<K extends PropertyKey, T extends Record<K, AnyVoidFn>>([\n  methodName,\n  ...args\n]: [K, T, ...unknown[]]) {\n  const obj = args.pop() as T | T[];\n\n  if (isEmberArray(obj)) {\n    return function () {\n      const promises = obj.map((item) => item[methodName]?.(...args));\n\n      return all(promises);\n    };\n  }\n\n  return function () {\n    return obj[methodName]?.(...args);\n  };\n}\n\nexport default helper(invoke);\n","import { helper } from '@ember/component/helper';\nimport { isArray as isEmberArray } from '@ember/array';\nimport asArray from '../utils/as-array.ts';\n\nexport function join<T>([separator, rawArray]: [string | T[], T[]?]): string {\n  let array = asArray(rawArray!);\n\n  if (isEmberArray(separator)) {\n    array = separator as T[];\n    separator = ',';\n  }\n\n  return array.join(separator);\n}\n\nexport default helper(join);\n","import { helper } from '@ember/component/helper';\n\nexport function keys([object]: [Record<string, unknown> | null | undefined]) {\n  if (!object) {\n    return object;\n  }\n  return Object.keys(object);\n}\n\nexport default helper(keys);\n","import { helper } from '@ember/component/helper';\nimport { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport asArray from '../utils/as-array.ts';\n\nexport function mapBy<T extends object, K extends keyof T>([byPath, array]: [\n  K,\n  T[],\n]) {\n  if (isEmpty(byPath)) {\n    return [];\n  }\n\n  return asArray(array).map((item) => get(item, byPath));\n}\n\nexport default helper(mapBy);\n","import { helper } from '@ember/component/helper';\nimport { isEmpty } from '@ember/utils';\nimport asArray from '../utils/as-array.ts';\n\nexport function map<T>([callback, array]: [\n  (value: T, index: number, array: T[]) => T,\n  T[],\n]) {\n  if (isEmpty(callback)) {\n    return [];\n  }\n\n  return asArray(array).map(callback);\n}\n\nexport default helper(map);\n","import { helper } from '@ember/component/helper';\n\nexport function noop() {\n  return () => {};\n}\n\nexport default helper(noop);\n","import { helper } from '@ember/component/helper';\nimport { A, isArray as isEmberArray } from '@ember/array';\n\nexport function objectAt<T>(index: number | string, array: T[]) {\n  if (!isEmberArray(array)) {\n    return undefined;\n  }\n\n  index = parseInt(index as string, 10);\n\n  return A(array).objectAt(index);\n}\n\nexport default helper(function <T>([index, array]: [number, T[]]):\n  | T\n  | undefined {\n  return objectAt(index, array);\n});\n","import { helper } from '@ember/component/helper';\nimport { get } from '@ember/object';\nimport type { AnyVoidFn } from '../utils/types';\n\nexport function pick<T extends Event | Record<string, unknown>>([\n  path,\n  action,\n]: [string, AnyVoidFn]) {\n  return function (obj: T) {\n    const value = get(obj, path);\n\n    if (!action) {\n      return value;\n    }\n\n    action(value);\n  };\n}\n\nexport default helper(pick);\n","import { helper } from '@ember/component/helper';\nimport isPromise from '../utils/is-promise.ts';\n\nfunction invokeMaybeNullable(\n  curr: (...args1: unknown[]) => void | null,\n  args: unknown[],\n) {\n  return curr == null ? undefined : curr(...args);\n}\n\nexport function queue(positional: unknown[] = []) {\n  const actions = positional as (() => void)[];\n\n  return function (...args: unknown[]) {\n    const invokeWithArgs = function (acc: unknown, curr: () => void) {\n      if (isPromise(acc)) {\n        return acc.then(() => invokeMaybeNullable(curr, args));\n      }\n\n      return invokeMaybeNullable(curr, args);\n    };\n\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n    return actions.reduce<unknown | Promise<unknown>>((acc, curr, idx) => {\n      if (idx === 0) {\n        return invokeMaybeNullable(curr, args);\n      }\n\n      return invokeWithArgs(acc, curr);\n    }, undefined);\n  };\n}\n\nexport default helper(queue);\n","export function lte(a: number, b: number) {\n  return a <= b;\n}\n\nexport function lt(a: number, b: number) {\n  return a < b;\n}\n\nexport function gte(a: number, b: number) {\n  return a >= b;\n}\n\nexport function gt(a: number, b: number) {\n  return a > b;\n}\n","import { helper } from '@ember/component/helper';\nimport { typeOf } from '@ember/utils';\nimport { gte, lte, gt, lt } from '../utils/comparison.ts';\n\nexport function range([min, max, isInclusive]: [number, number, boolean?]) {\n  isInclusive = typeOf(isInclusive) === 'boolean' ? isInclusive : false;\n  const numbers: number[] = [];\n\n  if (min < max) {\n    const testFn = isInclusive ? lte : lt;\n    for (let i = min; testFn(i, max); i++) {\n      numbers.push(i);\n    }\n  }\n\n  if (min > max) {\n    const testFn = isInclusive ? gte : gt;\n    for (let i = min; testFn(i, max); i--) {\n      numbers.push(i);\n    }\n  }\n\n  if (min === max && isInclusive) {\n    numbers.push(max);\n  }\n\n  return numbers;\n}\n\nexport default helper(range);\n","import { helper } from '@ember/component/helper';\nimport { isEmpty } from '@ember/utils';\nimport asArray from '../utils/as-array.ts';\n\nexport function reduce<T>([callback, initialValue, array]: [\n  (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T,\n  T,\n  T[],\n]) {\n  if (isEmpty(callback)) {\n    return [];\n  }\n\n  return asArray(array).reduce(callback, initialValue);\n}\n\nexport default helper(reduce);\n","import { helper } from '@ember/component/helper';\nimport { isArray as isEmberArray } from '@ember/array';\nimport { isPresent } from '@ember/utils';\nimport { get } from '@ember/object';\nimport isEqual from '../utils/is-equal.ts';\nimport asArray from '../utils/as-array.ts';\n\nexport function rejectBy<T extends object, K extends keyof T>([\n  byPath,\n  value,\n  array,\n]: [K, T | ((value: T[K]) => boolean) | undefined, T[]] | [K, T[]]) {\n  if (!isEmberArray(array) && isEmberArray(value)) {\n    array = value as T[];\n    value = undefined;\n  }\n  array = asArray(array as T[]);\n\n  let filterFn;\n\n  if (isPresent(value)) {\n    if (typeof value === 'function') {\n      filterFn = (item: T) => !value(get(item, byPath));\n    } else {\n      filterFn = (item: T) => !isEqual(get(item, byPath), value);\n    }\n  } else {\n    filterFn = (item: T) => !get(item, byPath);\n  }\n\n  return array.filter(filterFn);\n}\n\nexport default helper(rejectBy);\n","import { helper } from '@ember/component/helper';\nimport { typeOf } from '@ember/utils';\n\nexport function repeat<Args extends [number, unknown] | [number]>([\n  length,\n  value,\n]: Args): Args extends [number, infer T] ? T[] : undefined[];\nexport function repeat<T>([length, value]: [number, T?] | [number]): Array<\n  T | undefined\n> {\n  if (typeOf(length) !== 'number') {\n    return [value];\n  }\n  return Array.apply(null, { length } as []).map(() => value); // eslint-disable-line\n}\n\nexport default helper(repeat);\n","import { helper } from '@ember/component/helper';\nimport { A as emberArray, isArray as isEmberArray } from '@ember/array';\n\nexport function reverse<T>([array]: [T[]]) {\n  if (!isEmberArray(array)) {\n    return [array];\n  }\n\n  return emberArray(array).slice(0).reverse();\n}\n\nexport default helper(reverse);\n","import { helper } from '@ember/component/helper';\nimport { isArray as isEmberArray } from '@ember/array';\nimport { typeOf } from '@ember/utils';\n\nexport function shuffle<T>(array: T[], randomizer?: () => number) {\n  array = array.slice(0);\n  let count = array.length;\n  let rand, temp;\n  randomizer = (typeOf(randomizer) === 'function' && randomizer) || Math.random;\n\n  while (count > 1) {\n    rand = Math.floor(randomizer() * count--);\n\n    temp = array[count];\n    array[count] = array[rand]!;\n    array[rand] = temp!;\n  }\n  return array;\n}\n\nexport default helper(function <T>([randomizer, array]: [\n  (() => number) | T[] | undefined,\n  T[]?,\n]) {\n  if (array === undefined) {\n    array = randomizer as T[];\n    randomizer = undefined;\n  }\n\n  if (!isEmberArray(array)) {\n    return [array];\n  }\n\n  return shuffle(array, randomizer as () => number);\n});\n","import { helper } from '@ember/component/helper';\nimport asArray from '../utils/as-array.ts';\n\nexport function slice([...args]) {\n  let array = args.pop();\n  array = asArray(array);\n  return array.slice(...args);\n}\n\nexport default helper(slice);\n","import { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { helper } from '@ember/component/helper';\nimport EmberArray from '@ember/array';\nimport asArray from '../utils/as-array.ts';\n\nconst collator = new Intl.Collator(undefined, {\n  sensitivity: 'base',\n});\n\nfunction normalizeToBoolean(val: boolean | number | void): boolean {\n  if (typeof val === 'boolean') {\n    return val;\n  }\n\n  if (typeof val === 'number') {\n    if (val > 0) {\n      return false;\n    } else if (val < 0) {\n      return true;\n    }\n  }\n\n  return val as unknown as boolean;\n}\n\nfunction safeValueForKey(ctx: unknown, key: string) {\n  if (ctx === null || ctx === undefined) {\n    return ctx;\n  }\n  return get(ctx, key);\n}\n\nfunction sortDesc<T>(key: string, a: T, b: T) {\n  if (isEmpty(key)) {\n    return 0;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const aValue = safeValueForKey(a, key) as any;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const bValue = safeValueForKey(b, key) as any;\n\n  const isANullable = typeof aValue == 'undefined' || aValue === null;\n  const isBNullable = typeof bValue == 'undefined' || bValue === null;\n\n  if (isANullable && isBNullable) {\n    //both values are nullable\n    return 0;\n  }\n\n  if (isBNullable) {\n    // keep bValue last\n    return -1;\n  }\n  if (isANullable) {\n    // put aValue last\n    return 1;\n  }\n\n  if (aValue.toLowerCase && bValue.toLowerCase) {\n    return collator.compare(bValue, aValue);\n  }\n\n  if (aValue < bValue) {\n    return 1;\n  } else if (aValue > bValue) {\n    return -1;\n  }\n\n  return 0;\n}\n\nfunction sortAsc<T>(key: string, a: T, b: T) {\n  if (isEmpty(key)) {\n    return 0;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const aValue = safeValueForKey(a, key) as any;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const bValue = safeValueForKey(b, key) as any;\n\n  const isANullable = typeof aValue == 'undefined' || aValue === null;\n  const isBNullable = typeof bValue == 'undefined' || bValue === null;\n\n  if (isANullable && isBNullable) {\n    //both values are nullable\n    return 0;\n  }\n\n  if (isBNullable) {\n    // keep bValue last\n    return -1;\n  }\n  if (isANullable) {\n    // put aValue last\n    return 1;\n  }\n\n  if (aValue.toLowerCase && bValue.toLowerCase) {\n    return collator.compare(aValue, bValue);\n  }\n\n  if (aValue < bValue) {\n    return -1;\n  } else if (aValue > bValue) {\n    return 1;\n  }\n\n  return 0;\n}\n\nclass SortBy<T> {\n  array: T[];\n\n  constructor(...args: [T[] | EmberArray<T>]) {\n    let [array] = args;\n    if (typeof (array as EmberArray<T>).slice === 'function') {\n      array = (array as EmberArray<T>).slice();\n    }\n\n    this.array = [...(array as T[])];\n  }\n\n  comparator(key: string | ((a: T, b: T) => number)) {\n    return typeof key === 'function' ? key : this.defaultSort(key);\n  }\n\n  defaultSort(sortKey: string) {\n    let func = sortAsc;\n    if (sortKey.match(':desc')) {\n      func = sortDesc;\n    }\n\n    return (a: T, b: T) => func(sortKey.replace(/:desc|:asc/, ''), a, b);\n  }\n}\n\n/**\n * best O(n); worst O(n^2)\n * If we feel like swapping with something more performant like QuickSort or MergeSort\n * then it should be easy\n *\n * @class BubbleSort\n * @extends SortBy\n */\nclass BubbleSort<T> extends SortBy<T> {\n  perform(keys: string[] = []) {\n    let swapped = false;\n\n    const compFuncs = keys.map((key) => this.comparator(key));\n    const compFunc = (a: T, b: T) => {\n      for (let i = 0; i < compFuncs.length; i += 1) {\n        const result = compFuncs[i]?.(a, b);\n        if (result === 0) {\n          continue;\n        }\n        return result;\n      }\n      return 0;\n    };\n    for (let i = 1; i < this.array.length; i += 1) {\n      for (let j = 0; j < this.array.length - i; j += 1) {\n        const shouldSwap = normalizeToBoolean(\n          compFunc(this.array[j + 1]!, this.array[j]!),\n        );\n        if (shouldSwap) {\n          [this.array[j], this.array[j + 1]] = [\n            this.array[j + 1]!,\n            this.array[j]!,\n          ];\n\n          swapped = true;\n        }\n      }\n\n      // no need to continue sort if not swapped in any inner iteration\n      if (!swapped) {\n        return this.array;\n      }\n    }\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport function sortBy<T, K extends string | `${string}:desc`>(\n  params: [...K[], T[]],\n) {\n  // slice params to avoid mutating the provided params\n  const sortParams = params.slice();\n  const array = asArray(sortParams.pop() as T[]);\n  let sortKeys = sortParams as K[];\n\n  if (!array || !sortKeys || sortKeys.length === 0) {\n    return [];\n  }\n\n  if (sortKeys.length === 1 && Array.isArray(sortKeys[0])) {\n    sortKeys = sortKeys[0];\n  }\n\n  const sortKlass = new BubbleSort(array);\n  sortKlass.perform(sortKeys);\n  return sortKlass.array;\n}\n\nexport default helper(sortBy);\n","import { helper } from '@ember/component/helper';\nimport asArray from '../utils/as-array.ts';\n\nexport function take<T>([takeAmount, array]: [number, T[]]) {\n  return asArray(array).slice(0, takeAmount);\n}\n\nexport default helper(take);\n","import { helper } from '@ember/component/helper';\nimport asArray from '../utils/as-array.ts';\n\nexport function union([...arrays]) {\n  const items = [].concat(...arrays);\n\n  return items.filter(\n    (value, index, array) => asArray(array).indexOf(value) === index,\n  );\n}\n\nexport default helper(union);\n","import { helper } from '@ember/component/helper';\n\nexport function values([object]: [Record<string, unknown> | null | undefined]) {\n  if (!object) {\n    return object;\n  }\n  return Object.values(object);\n}\n\nexport default helper(values);\n","import { helper } from '@ember/component/helper';\nimport { A as emberArray, isArray as isEmberArray } from '@ember/array';\n\nfunction contains<T>(needle: T, haystack: T[]) {\n  return emberArray(haystack).includes(needle);\n}\n\nexport function without<T>(needle: T, haystack: T[]) {\n  if (!isEmberArray(haystack)) {\n    return false;\n  }\n\n  if (isEmberArray(needle) && needle.length) {\n    return haystack.reduce<T[]>((acc, val) => {\n      return contains(val, needle as T[]) ? acc : acc.concat(val);\n    }, []);\n  }\n\n  return emberArray(haystack).without(needle);\n}\n\nexport default helper(function <T>([needle, haystack]: [T | T[], T[]]) {\n  return without(needle, haystack);\n});\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsBadgeCountSizeValues {\n  Small = 'small',\n  Medium = 'medium',\n  Large = 'large',\n}\nexport type HdsBadgeCountSizes = `${HdsBadgeCountSizeValues}`;\n\nexport enum HdsBadgeCountTypeValues {\n  Filled = 'filled',\n  Inverted = 'inverted',\n  Outlined = 'outlined',\n}\nexport type HdsBadgeCountTypes = `${HdsBadgeCountTypeValues}`;\n\nexport enum HdsBadgeCountColorValues {\n  Neutral = 'neutral',\n  NeutralDarkMode = 'neutral-dark-mode',\n}\nexport type HdsBadgeCountColors = `${HdsBadgeCountColorValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsButtonSizeValues {\n  Small = 'small',\n  Medium = 'medium',\n  Large = 'large',\n}\nexport type HdsButtonSizes = `${HdsButtonSizeValues}`;\n\nexport enum HdsButtonColorValues {\n  Primary = 'primary',\n  Secondary = 'secondary',\n  Tertiary = 'tertiary',\n  Critical = 'critical',\n}\nexport type HdsButtonColors = `${HdsButtonColorValues}`;\n\nexport enum HdsButtonIconPositionValues {\n  Leading = 'leading',\n  Trailing = 'trailing',\n}\nexport type HdsButtonIconPositions = `${HdsButtonIconPositionValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { hash } from '@ember/helper';\nimport { service } from '@ember/service';\n\nimport HdsAppFooterCopyright from './copyright.gts';\nimport HdsYield from '../yield/index.gts';\nimport HdsAppFooterStatusLink from './status-link.gts';\nimport HdsAppFooterLegalLinks from './legal-links.gts';\nimport HdsAppFooterLink from './link.gts';\nimport HdsAppFooterItem from './item.gts';\n\nimport type HdsIntlService from '../../../services/hds-intl.ts';\n\nimport { HdsAppFooterThemeValues } from './types.ts';\nimport type { HdsAppFooterThemeTypes } from './types.ts';\n\nexport const THEMES: HdsAppFooterThemeTypes[] = Object.values(\n  HdsAppFooterThemeValues\n);\n\nexport interface HdsAppFooterSignature {\n  Args: {\n    ariaLabel?: string;\n    copyrightYear?: string;\n    theme?: HdsAppFooterThemeTypes;\n  };\n  Blocks: {\n    default: [\n      {\n        ExtraBefore?: typeof HdsYield;\n        StatusLink?: typeof HdsAppFooterStatusLink;\n        LegalLinks?: typeof HdsAppFooterLegalLinks;\n        Link?: typeof HdsAppFooterLink;\n        Item?: typeof HdsAppFooterItem;\n        ExtraAfter?: typeof HdsYield;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsAppFooter extends Component<HdsAppFooterSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  get ariaLabel(): string {\n    return (\n      this.args.ariaLabel ??\n      this.hdsIntl.t('hds.components.app-footer.list.aria-label', {\n        default: 'Footer items',\n      })\n    );\n  }\n\n  get theme(): HdsAppFooterThemeTypes {\n    return this.args.theme ?? 'light';\n  }\n\n  get classNames(): string {\n    const classes = ['hds-app-footer'];\n\n    // add a class based on the @theme argument\n    classes.push(`hds-app-footer--theme-${this.theme}`);\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <div class={{this.classNames}} ...attributes>\n      {{yield (hash ExtraBefore=HdsYield)}}\n      <ul class=\"hds-app-footer__list\" aria-label={{this.ariaLabel}}>\n        {{yield (hash StatusLink=HdsAppFooterStatusLink)}}\n        {{yield\n          (hash\n            Link=HdsAppFooterLink\n            LegalLinks=HdsAppFooterLegalLinks\n            Item=HdsAppFooterItem\n          )\n        }}\n      </ul>\n      {{yield (hash ExtraAfter=HdsYield)}}\n      <HdsAppFooterCopyright @year={{@copyrightYear}} />\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { tracked } from '@glimmer/tracking';\nimport { registerDestructor } from '@ember/destroyable';\nimport { hash } from '@ember/helper';\nimport { and, not } from 'ember-truth-helpers';\nimport { NavigationNarrator } from 'ember-a11y-refocus';\n// @ts-expect-error: missing types https://github.com/josemarluedke/ember-focus-trap/issues/86\nimport focusTrap from 'ember-focus-trap/modifiers/focus-trap';\n\nimport type Owner from '@ember/owner';\nimport type { NavigationNarratorSignature } from 'ember-a11y-refocus/components/navigation-narrator';\n\nimport { hdsBreakpoints } from '../../../utils/hds-breakpoints.ts';\nimport HdsAppHeaderMenuButton from './menu-button.gts';\n\nexport interface HdsAppHeaderSignature {\n  Args: {\n    breakpoint?: string;\n    hasA11yRefocus?: boolean;\n    a11yRefocusSkipTo?: string;\n    a11yRefocusSkipText?: string;\n    a11yRefocusNavigationText?: string;\n    a11yRefocusRouteChangeValidator?: NavigationNarratorSignature['Args']['routeChangeValidator'];\n    a11yRefocusExcludeAllQueryParams?: boolean;\n  };\n  Blocks: {\n    logo?: [\n      {\n        close: () => void;\n      },\n    ];\n    globalActions?: [\n      {\n        close: () => void;\n      },\n    ];\n    utilityActions?: [\n      {\n        close: () => void;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsAppHeader extends Component<HdsAppHeaderSignature> {\n  @tracked private _isOpen = false;\n  @tracked private _isDesktop = true;\n  @tracked private _hasOverflowContent = false;\n  private _desktopMQ: MediaQueryList;\n  hasA11yRefocus = this.args.hasA11yRefocus ?? true;\n  a11yRefocusSkipTo = '#' + (this.args.a11yRefocusSkipTo ?? 'hds-main');\n\n  // Generates a unique ID for the Menu Content\n  private _menuContentId = 'hds-menu-content-' + guidFor(this);\n\n  // we use the `md` breakpoint for `desktop` viewports, but consumers can override its value\n  private _desktopMQVal = this.args.breakpoint ?? hdsBreakpoints['md'].px;\n\n  constructor(owner: Owner, args: Record<string, never>) {\n    super(owner, args);\n    this._desktopMQ = window.matchMedia(`(min-width: ${this._desktopMQVal})`);\n    this.addEventListeners();\n    registerDestructor(this, (): void => {\n      this.removeEventListeners();\n    });\n  }\n\n  addEventListeners(): void {\n    document.addEventListener('keydown', this.escapePress, true);\n    this._desktopMQ.addEventListener(\n      'change',\n\n      this.updateDesktopVariable,\n      true\n    );\n\n    // set initial state based on viewport using a \"synthetic\" event\n    const syntheticEvent = new MediaQueryListEvent('change', {\n      matches: this._desktopMQ.matches,\n      media: this._desktopMQ.media,\n    });\n    this.updateDesktopVariable(syntheticEvent);\n  }\n\n  removeEventListeners(): void {\n    document.removeEventListener('keydown', this.escapePress, true);\n    this._desktopMQ.removeEventListener(\n      'change',\n\n      this.updateDesktopVariable,\n      true\n    );\n  }\n\n  // In mobile view when the menu is open, trap focus within the AppHeader\n  get shouldTrapFocus(): boolean {\n    return !this._isDesktop && this._isOpen;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-app-header'];\n\n    if (this._isDesktop) {\n      classes.push('hds-app-header--is-desktop');\n    } else {\n      classes.push('hds-app-header--is-mobile');\n\n      // open and closed menu states are only relevant on mobile\n      if (this._isOpen) {\n        classes.push('hds-app-header--menu-is-open');\n      } else {\n        classes.push('hds-app-header--menu-is-closed');\n      }\n    }\n\n    return classes.join(' ');\n  }\n\n  escapePress = (event: KeyboardEvent): void => {\n    if (event.key === 'Escape' && this._isOpen && !this._isDesktop) {\n      this._isOpen = false;\n    }\n  };\n\n  onClickToggle = (): void => {\n    this._isOpen = !this._isOpen;\n  };\n\n  close = (): void => {\n    if (this._isOpen && !this._isDesktop) {\n      this._isOpen = false;\n    }\n  };\n\n  updateDesktopVariable = (event: MediaQueryListEvent): void => {\n    this._isDesktop = event.matches;\n\n    // Close the menu when switching to desktop view\n    // (prevents menu from being open when resizing which causes Skip button to not render)\n    if (this._isDesktop) {\n      this._isOpen = false;\n    }\n  };\n\n  <template>\n    <div\n      class={{this.classNames}}\n      {{focusTrap isActive=this.shouldTrapFocus}}\n      ...attributes\n    >\n      {{#if (and this.hasA11yRefocus (not this._isOpen))}}\n        <NavigationNarrator\n          @routeChangeValidator={{@a11yRefocusRouteChangeValidator}}\n          @skipTo={{this.a11yRefocusSkipTo}}\n          @skipText={{@a11yRefocusSkipText}}\n          @navigationText={{@a11yRefocusNavigationText}}\n          @excludeAllQueryParams={{@a11yRefocusExcludeAllQueryParams}}\n        />\n      {{/if}}\n\n      {{yield (hash close=this.close) to=\"logo\"}}\n\n      {{#if (not this._isDesktop)}}\n        <HdsAppHeaderMenuButton\n          @onClickToggle={{this.onClickToggle}}\n          @isOpen={{this._isOpen}}\n          @menuContentId={{this._menuContentId}}\n        />\n      {{/if}}\n\n      <div class=\"hds-app-header__actions\" id={{this._menuContentId}}>\n        <div class=\"hds-app-header__global-actions\">\n          {{yield (hash close=this.close) to=\"globalActions\"}}\n        </div>\n\n        <div class=\"hds-app-header__utility-actions\">\n          {{yield (hash close=this.close) to=\"utilityActions\"}}\n        </div>\n      </div>\n    </div>\n  </template>\n}\n","import type RouteInfo from '@ember/routing/route-info';\n\nexport interface RouteInfoLike {\n  name: string;\n  params: Record<string, unknown>;\n  queryParams: Record<string, unknown>;\n  parent: RouteInfoLike | RouteInfo | null;\n}\n\n/**\n * Returns true if the given RouteInfo objects represent the same route in the\n * tree, with matching params and query params.\n */\nexport function routeInfoEqual(\n  a: RouteInfoLike | RouteInfo | null | undefined | void,\n  b: RouteInfoLike | RouteInfo | null | undefined | void,\n): boolean {\n  let current_a: RouteInfoLike | RouteInfo | null | undefined | void = a;\n  let current_b: RouteInfoLike | RouteInfo | null | undefined | void = b;\n\n  do {\n    if (!current_a || !current_b) {\n      return false;\n    }\n\n    if (current_a.name !== current_b.name) {\n      return false;\n    }\n\n    if (\n      !shallowEqual(\n        current_a.params as Record<string, unknown>,\n        current_b.params as Record<string, unknown>,\n      )\n    ) {\n      return false;\n    }\n\n    if (\n      !shallowEqual(\n        current_a.queryParams as Record<string, unknown>,\n        current_b.queryParams as Record<string, unknown>,\n      )\n    ) {\n      return false;\n    }\n\n    current_a = current_a.parent;\n    current_b = current_b.parent;\n  } while (current_a || current_b);\n\n  return true;\n}\n\nfunction shallowEqual(\n  a: Record<string, unknown>,\n  b: Record<string, unknown>,\n): boolean {\n  const keys = new Set([...Object.keys(a), ...Object.keys(b)]);\n\n  for (const key of keys) {\n    if (a[key] !== b[key]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n","import { routeInfoEqual } from './routing.ts';\n\nimport type RouteInfo from '@ember/routing/route-info';\nimport type { RouteInfoLike } from './routing.ts';\n\ninterface TransitionLike {\n  from?: RouteInfoLike | RouteInfo | null | undefined | void;\n  to?: RouteInfoLike | RouteInfo | null | undefined | void;\n}\n\nexport function defaultValidator(transition: TransitionLike): boolean {\n  return !routeInfoEqual(transition.from, transition.to);\n}\n","import Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport { on } from '@ember/modifier';\nimport { registerDestructor } from '@ember/destroyable';\nimport { schedule, cancel } from '@ember/runloop';\n\nimport { defaultValidator } from '../utils/validators.ts';\n\nimport type RouterService from '@ember/routing/router-service';\nimport type Owner from '@ember/owner';\nimport type Transition from '@ember/routing/transition';\nimport type { Timer } from '@ember/runloop';\n\nexport interface NavigationNarratorSignature {\n  Args: {\n    /** Whether to include the skip link. Defaults to `true`. */\n    skipLink?: boolean;\n\n    /** CSS selector the skip link jumps to. Defaults to `'#main'`. */\n    skipTo?: string;\n\n    /** Text content of the skip link. Defaults to `'Skip to main content'`. */\n    skipText?: string;\n\n    /** Text announced by a screen reader after navigation. */\n    navigationText?: string;\n\n    /** Custom logic for determining whether a transition should trigger narration. */\n    routeChangeValidator?: (transition: Transition) => boolean;\n\n    /** Whether to ignore query param changes during route comparisons. Defaults to `false`. */\n    excludeAllQueryParams?: boolean;\n  };\n\n  Element: HTMLElement;\n}\n\n/**\n * 🎧 NavigationNarrator\n *\n * Announces route changes for screen readers using a visually-hidden element,\n * and optionally renders a \"Skip to main content\" link.\n *\n * Usage:\n * ```gjs\n * import { NavigationNarrator } from 'ember-a11y-refocus';\n *\n * <template>\n *   <NavigationNarrator />\n * </template>\n * ```\n */\nexport default class NavigationNarrator extends Component<NavigationNarratorSignature> {\n  @service declare readonly router: RouterService;\n\n  @tracked isSkipLinkFocused = false;\n\n  timer: Timer | undefined;\n  transition: Transition | undefined;\n\n  constructor(owner: Owner, args: NavigationNarratorSignature['Args']) {\n    super(owner, args);\n\n    this.router.on('routeDidChange', this.onRouteChange);\n\n    registerDestructor(this, () => {\n      // eslint-disable-next-line ember/no-runloop\n      cancel(this.timer);\n      this.timer = undefined;\n      this.router.off('routeDidChange', this.onRouteChange);\n    });\n  }\n\n  /** Whether to include the skip link. Defaults to `true`. */\n  get skipLink() {\n    return this.args.skipLink ?? true;\n  }\n\n  /** Selector for the skip link target. Defaults to `'#main'`. */\n  get skipTo() {\n    return this.args.skipTo ?? '#main';\n  }\n\n  /** Text for the skip link. Defaults to `'Skip to main content'`. */\n  get skipText() {\n    return this.args.skipText ?? 'Skip to main content';\n  }\n\n  /** Text announced by screen readers after route transition. */\n  get navigationText() {\n    return (\n      this.args.navigationText ??\n      'The page navigation is complete. You may now navigate the page content as you wish.'\n    );\n  }\n\n  /** Validator function for transitions. */\n  get routeChangeValidator() {\n    return this.args.routeChangeValidator ?? defaultValidator;\n  }\n\n  /** Whether to ignore query param changes. Defaults to `false`. */\n  get excludeAllQueryParams() {\n    return this.args.excludeAllQueryParams ?? false;\n  }\n\n  /** Whether the current transition includes query param changes. */\n  get hasQueryParams() {\n    if (\n      Object.keys(this.transition?.from?.queryParams || {}).length ||\n      Object.keys(this.transition?.to?.queryParams || {}).length > 0\n    ) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  onRouteChange = (transition: Transition) => {\n    this.transition = transition; // We need to do this because we can't pass an argument to a getter\n\n    // add a check to see if it's the same route\n    const hasSameRoute =\n      this.transition.from?.name === this.transition.to?.name;\n\n    if (this.excludeAllQueryParams && this.hasQueryParams && hasSameRoute) {\n      return;\n    }\n\n    const shouldFocus = this.routeChangeValidator(transition);\n\n    // leaving this here for now because maybe it needs to be used in a custom validator function\n    if (!shouldFocus) {\n      return;\n    }\n\n    // eslint-disable-next-line ember/no-runloop\n    this.timer = schedule('afterRender', this, function () {\n      this.timer = undefined;\n      (\n        document.body.querySelector(\n          '#ember-a11y-refocus-nav-message',\n        ) as HTMLElement\n      )?.focus();\n    });\n  };\n\n  handleSkipLinkFocus = () => {\n    this.isSkipLinkFocused = !this.isSkipLinkFocused;\n  };\n\n  <template>\n    <div\n      tabindex=\"-1\"\n      id=\"ember-a11y-refocus-nav-message\"\n      class=\"ember-sr-only ember-sr-only-focusable\"\n    >\n      {{this.navigationText}}\n    </div>\n\n    {{#if this.skipLink}}\n      <a\n        href={{this.skipTo}}\n        id=\"ember-a11y-refocus-skip-link\"\n        class=\"ember-a11y-refocus-skip-link\n          {{if this.isSkipLinkFocused 'active'}}\"\n        {{on \"focus\" this.handleSkipLinkFocus}}\n        {{on \"blur\" this.handleSkipLinkFocus}}\n      >\n        {{this.skipText}}\n      </a>\n    {{/if}}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { on } from '@ember/modifier';\n\nimport hdsT from '../../../helpers/hds-t.ts';\nimport HdsButton from '../button/index.gts';\n\nimport type { HdsButtonSignature } from '../button/index.gts';\n\nexport interface HdsAppHeaderMenuButtonSignature {\n  Args: {\n    isOpen?: boolean;\n    menuContentId: string;\n    onClickToggle?: () => void;\n  };\n  Element: HdsButtonSignature['Element'];\n}\n\nexport default class HdsAppHeaderMenuButton extends Component<HdsAppHeaderMenuButtonSignature> {\n  get icon(): 'x' | 'menu' {\n    return this.args.isOpen ? 'x' : 'menu';\n  }\n\n  onClick = (): void => {\n    const { onClickToggle } = this.args;\n\n    if (typeof onClickToggle === 'function') {\n      onClickToggle();\n    }\n  };\n\n  <template>\n    <HdsButton\n      class=\"hds-app-header__menu-button\"\n      @text={{hdsT \"hds.components.common.menu\" default=\"Menu\"}}\n      @icon={{this.icon}}\n      @iconPosition=\"trailing\"\n      {{on \"click\" this.onClick}}\n      aria-controls={{@menuContentId}}\n      aria-expanded={{if @isOpen \"true\" \"false\"}}\n      ...attributes\n    />\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\n\nimport HdsIcon from '../icon/index.gts';\nimport HdsTextDisplay from '../text/display.gts';\nimport HdsInteractive from '../interactive/index.gts';\n\nimport type { HdsIconSignature } from '../icon/index.gts';\nimport type { HdsInteractiveSignature } from '../interactive/index.gts';\n\nexport interface HdsAppHeaderHomeLinkSignature {\n  Args: HdsInteractiveSignature['Args'] & {\n    icon: HdsIconSignature['Args']['name'];\n    isIconOnly?: boolean;\n    color?: string;\n    text: string;\n  };\n  Element: HdsInteractiveSignature['Element'];\n}\n\nexport default class HdsAppHeaderHomeLink extends Component<HdsAppHeaderHomeLinkSignature> {\n  get text(): string {\n    const { text } = this.args;\n\n    assert(\n      '@text for \"Hds::AppHeader::HomeLink\" must have a valid value',\n      text !== undefined\n    );\n\n    return text;\n  }\n\n  get icon(): HdsIconSignature['Args']['name'] {\n    const { icon } = this.args;\n\n    assert(\n      '@icon name for \"Hds::AppHeader::HomeLink\" must be provided',\n      icon !== undefined\n    );\n\n    return icon;\n  }\n\n  get isIconOnly(): boolean {\n    return this.args.isIconOnly ?? true;\n  }\n\n  <template>\n    <HdsInteractive\n      class=\"hds-app-header__home-link\"\n      @current-when={{@current-when}}\n      @models={{@models}}\n      @model={{@model}}\n      @query={{@query}}\n      @replace={{@replace}}\n      @route={{@route}}\n      @isRouteExternal={{@isRouteExternal}}\n      @href={{@href}}\n      @isHrefExternal={{@isHrefExternal}}\n      ...attributes\n      aria-label={{if this.isIconOnly this.text null}}\n    >\n      <HdsIcon @name={{@icon}} @color={{@color}} @stretched={{true}} />\n      {{#unless this.isIconOnly}}\n        <HdsTextDisplay @size=\"100\" @color=\"foreground-high-contrast\">\n          {{this.text}}\n        </HdsTextDisplay>\n      {{/unless}}\n    </HdsInteractive>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { registerDestructor } from '@ember/destroyable';\nimport { modifier } from 'ember-modifier';\nimport { on } from '@ember/modifier';\nimport { fn } from '@ember/helper';\n// @ts-expect-error: missing types https://github.com/josemarluedke/ember-focus-trap/issues/86\nimport focusTrap from 'ember-focus-trap/modifiers/focus-trap';\n\nimport type Owner from '@ember/owner';\n\nimport { hdsBreakpoints } from '../../../utils/hds-breakpoints.ts';\nimport hdsT from '../../../helpers/hds-t.ts';\nimport HdsAppSideNavToggleButton from './toggle-button.gts';\n\nexport interface HdsAppSideNavSignature {\n  Args: {\n    isResponsive?: boolean;\n    isCollapsible?: boolean;\n    isMinimized?: boolean;\n    breakpoint?: string;\n    onToggleMinimizedStatus?: (arg: boolean) => void;\n    onDesktopViewportChange?: (arg: boolean) => void;\n  };\n  Blocks: {\n    default?: [];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsAppSideNav extends Component<HdsAppSideNavSignature> {\n  @tracked private _isMinimized;\n  @tracked private _isAnimating = false;\n  @tracked private _isDesktop = true;\n\n  private _body!: HTMLElement;\n  private _bodyInitialOverflowValue = '';\n  private _desktopMQ: MediaQueryList;\n  private _navWrapperBody!: HTMLElement;\n\n  // we use the `lg` breakpoint for `desktop` viewports, but consumers can override its value\n  private _desktopMQVal = this.args.breakpoint ?? hdsBreakpoints['lg'].px;\n\n  constructor(owner: Owner, args: HdsAppSideNavSignature['Args']) {\n    super(owner, args);\n    this._isMinimized = this.args.isMinimized ?? false; // sets the default state on 'desktop' viewports\n    this._desktopMQ = window.matchMedia(`(min-width:${this._desktopMQVal})`);\n    this.addEventListeners();\n    registerDestructor(this, (): void => {\n      this.removeEventListeners();\n    });\n  }\n\n  private _setUpBodyElement = modifier((): void => {\n    this._body = document.body;\n    // Store the initial `overflow` value of `<body>` so we can reset to it\n    this._bodyInitialOverflowValue =\n      this._body.style.getPropertyValue('overflow');\n  });\n\n  private _setUpNavWrapperBody = modifier((element: HTMLElement) => {\n    this._navWrapperBody = element;\n  });\n\n  addEventListeners(): void {\n    document.addEventListener('keydown', this.escapePress, true);\n    this._desktopMQ.addEventListener(\n      'change',\n\n      this.updateDesktopVariable,\n      true\n    );\n    // if not instantiated as minimized via arguments\n    if (!this.args.isMinimized) {\n      // set initial state based on viewport using a \"synthetic\" event\n      const syntheticEvent = new MediaQueryListEvent('change', {\n        matches: this._desktopMQ.matches,\n        media: this._desktopMQ.media,\n      });\n      this.updateDesktopVariable(syntheticEvent);\n    }\n  }\n\n  removeEventListeners(): void {\n    document.removeEventListener('keydown', this.escapePress, true);\n    this._desktopMQ.removeEventListener(\n      'change',\n\n      this.updateDesktopVariable,\n      true\n    );\n  }\n\n  // controls if the component reacts to viewport changes\n  get isResponsive(): boolean {\n    return this.args.isResponsive ?? true;\n  }\n\n  // controls if users can collapse the appsidenav on 'desktop' viewports\n  get isCollapsible(): boolean {\n    return this.args.isCollapsible ?? false;\n  }\n\n  get isMobileCollapsible(): boolean {\n    return this.isResponsive && !this._isDesktop;\n  }\n\n  // traps focus if isResponsive is enabled and it's in mobile view with side nav expanded (overlaying content)\n  get shouldTrapFocus(): boolean {\n    return this.isResponsive && !this._isDesktop && !this._isMinimized;\n  }\n\n  get showToggleButton(): boolean {\n    return (this.isResponsive && !this._isDesktop) || this.isCollapsible;\n  }\n\n  get classNames(): string {\n    const classes = [`hds-app-side-nav`];\n\n    // add specific class names for the different possible states\n    if (this.isResponsive) {\n      classes.push('hds-app-side-nav--is-responsive');\n    }\n    if (!this._isDesktop && this.isResponsive) {\n      classes.push('hds-app-side-nav--is-mobile');\n    } else {\n      classes.push('hds-app-side-nav--is-desktop');\n    }\n    if (this._isMinimized && this.isResponsive) {\n      classes.push('hds-app-side-nav--is-minimized');\n    } else {\n      classes.push('hds-app-side-nav--is-not-minimized');\n    }\n    if (this._isAnimating) {\n      classes.push('hds-app-side-nav--is-animating');\n    }\n\n    return classes.join(' ');\n  }\n\n  synchronizeInert = (): void => {\n    if (this._isMinimized) {\n      this._navWrapperBody?.setAttribute('inert', '');\n    } else {\n      this._navWrapperBody?.removeAttribute('inert');\n    }\n  };\n\n  lockBodyScroll = (): void => {\n    if (this._body) {\n      // Prevent page from scrolling when the dialog is open\n      this._body.style.setProperty('overflow', 'hidden');\n    }\n  };\n\n  unlockBodyScroll = (): void => {\n    // Reset page `overflow` property\n    if (this._body) {\n      this._body.style.removeProperty('overflow');\n      if (this._bodyInitialOverflowValue === '') {\n        if (this._body.style.length === 0) {\n          this._body.removeAttribute('style');\n        }\n      } else {\n        this._body.style.setProperty(\n          'overflow',\n          this._bodyInitialOverflowValue\n        );\n      }\n    }\n  };\n\n  escapePress = (event: KeyboardEvent): void => {\n    if (event.key === 'Escape' && !this._isMinimized && !this._isDesktop) {\n      this._isMinimized = true;\n      this.synchronizeInert();\n      this.unlockBodyScroll();\n    }\n  };\n\n  toggleMinimizedStatus = (): void => {\n    this._isMinimized = !this._isMinimized;\n    this.synchronizeInert();\n\n    const { onToggleMinimizedStatus } = this.args;\n\n    if (typeof onToggleMinimizedStatus === 'function') {\n      onToggleMinimizedStatus(this._isMinimized);\n    }\n\n    if (!this._isDesktop) {\n      if (this._isMinimized) {\n        this.unlockBodyScroll();\n      } else {\n        this.lockBodyScroll();\n      }\n    }\n  };\n\n  setTransition = (phase: string, event: TransitionEvent): void => {\n    // we only want to respond to `width` animation/transitions\n    if (event.propertyName !== 'width') {\n      return;\n    }\n    if (phase === 'start') {\n      this._isAnimating = true;\n    } else {\n      this._isAnimating = false;\n    }\n  };\n\n  updateDesktopVariable = (event: MediaQueryListEvent): void => {\n    this._isDesktop = event.matches;\n\n    // automatically minimize on narrow viewports (when not in desktop mode)\n    this._isMinimized = !this._isDesktop;\n\n    this.synchronizeInert();\n\n    if (this._isDesktop) {\n      // make sure scrolling is enabled if the user resizes the window from mobile to desktop\n      this.unlockBodyScroll();\n    }\n\n    const { onDesktopViewportChange } = this.args;\n\n    if (typeof onDesktopViewportChange === 'function') {\n      onDesktopViewportChange(this._isDesktop);\n    }\n  };\n\n  <template>\n    {{! IMPORTANT: we need to add \"squishies\" here (~) because otherwise the whitespace added by Ember causes the empty element to still have visible padding - See https://handlebarsjs.com/guide/expressions.html#whitespace-control }}\n    <div\n      class={{this.classNames}}\n      ...attributes\n      role={{if this.isMobileCollapsible \"dialog\"}}\n      aria-labelledby={{if this.isMobileCollapsible \"hds-app-side-nav-header\"}}\n      aria-modal={{if this.isMobileCollapsible \"true\"}}\n      {{on \"transitionstart\" (fn this.setTransition \"start\")}}\n      {{on \"transitionend\" (fn this.setTransition \"end\")}}\n      {{focusTrap isActive=this.shouldTrapFocus}}\n      {{this._setUpBodyElement}}\n    >\n      <h2 class=\"sr-only\" id=\"hds-app-side-nav-header\">\n        {{hdsT\n          \"hds.components.app-side-nav.screen-reader-label\"\n          default=\"Application local navigation\"\n        }}\n      </h2>\n\n      <div class=\"hds-app-side-nav__wrapper\">\n        {{#if this.showToggleButton}}\n          {{! template-lint-disable no-invalid-interactive}}\n          <div\n            class=\"hds-app-side-nav__overlay\"\n            {{on \"click\" this.toggleMinimizedStatus}}\n          />\n          {{! template-lint-enable no-invalid-interactive}}\n          <HdsAppSideNavToggleButton\n            aria-labelledby=\"hds-app-side-nav-header\"\n            aria-expanded={{if this._isMinimized \"false\" \"true\"}}\n            @icon={{if this._isMinimized \"chevrons-right\" \"chevrons-left\"}}\n            {{on \"click\" this.toggleMinimizedStatus}}\n          />\n        {{/if}}\n\n        <div\n          class=\"hds-app-side-nav__wrapper-body\"\n          {{this._setUpNavWrapperBody}}\n        >\n          {{~yield~}}\n        </div>\n      </div>\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport Portal from 'ember-stargate/components/portal';\n\nimport HdsAppSideNavList from '../list/index.gts';\n\nimport type { HdsAppSideNavListSignature } from '../list/index.gts';\n\nexport interface HdsAppSideNavPortalSignature {\n  Args: {\n    ariaLabel?: string;\n    targetName?: string;\n  };\n  Blocks: HdsAppSideNavListSignature['Blocks'];\n  Element: HTMLDivElement;\n}\n\nconst HdsAppSideNavPortal: TemplateOnlyComponent<HdsAppSideNavPortalSignature> =\n  <template>\n    <Portal\n      @target={{if @targetName @targetName \"hds-app-side-nav-portal-target\"}}\n    >\n      <div class=\"hds-app-side-nav__content-panel\" ...attributes>\n        <HdsAppSideNavList aria-label={{@ariaLabel}} as |ListElements|>\n          {{yield ListElements}}\n        </HdsAppSideNavList>\n      </div>\n    </Portal>\n  </template>;\n\nexport default HdsAppSideNavPortal;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport { macroCondition, isTesting } from '@embroider/macros';\nimport PortalTarget from 'ember-stargate/components/portal-target';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didUpdate from '@ember/render-modifiers/modifiers/did-update';\n\nimport type { Registry as Services } from '@ember/service';\n\nimport type { HdsAppSideNavPortalSignature } from './index.gts';\n\ninterface HdsAppSideNavPortalTargetSignature {\n  Args: {\n    targetName?: HdsAppSideNavPortalSignature['Args']['targetName'];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsAppSideNavPortalTarget extends Component<HdsAppSideNavPortalTargetSignature> {\n  @service declare readonly router: Services['router'];\n\n  @tracked private _numSubnavs = 0;\n  @tracked private _lastPanelEl: Element | undefined;\n\n  static get prefersReducedMotionOverride(): boolean {\n    return macroCondition(isTesting()) ? true : false;\n  }\n\n  private _prefersReducedMotionMQ = window.matchMedia(\n    '(prefers-reduced-motion: reduce)'\n  );\n\n  get prefersReducedMotion(): boolean {\n    return (\n      HdsAppSideNavPortalTarget.prefersReducedMotionOverride ||\n      (this._prefersReducedMotionMQ && this._prefersReducedMotionMQ.matches)\n    );\n  }\n\n  panelsChanged = (portalCount: number): void => {\n    this._numSubnavs = portalCount;\n  };\n\n  didUpdateSubnav = (element: HTMLElement, [count]: [number]): void => {\n    this.animateSubnav(element, [count]);\n  };\n\n  animateSubnav = (element: HTMLElement, [count]: [number]): void => {\n    /*\n     * Here is ascii art of what the layout looks like for this setup\n     *\n\n                                    AppSideNav\n                                    +----------------------+\n                                    | +------------------+ |\n                                    | |    (\"header\")    | |\n                                    | +------------------+ |\n                                    |                      |\n                                    | +------------------+ |\n                                    | |    (\"body\")      | |\n        (PortalTarget)              | |                  | |\n        +----------------------------------------------+ | |\n        | +----------+  +----------+  |  +----------+  | | |\n        | | (Portal) |  | (Portal) |     | (Portal) |  | | |\n        | |          |  |          |  |  |          |  | | |\n        | |  hidden  |  |  hidden  |     | *active* |  | | |\n        | |   panel  |  |   panel  |  |  |   panel  |  | | |\n        | |          |  |          |     |          |  | | |\n        | |          |  |          |  |  |          |  | | |\n        | |          |  |          |     |          |  | | |\n        | |          |  |          |  |  |          |  | | |\n        | |          |  |          |     |          |  | | |\n        | |          |  |          |  |  |          |  | | |\n        | |          |  |          |     |          |  | | |\n        | +----------+  +----------+  |  +----------+  | | |\n        +----------------------------------------------+ | |\n                                    | |                  | |\n                                    | +------------------+ |\n                                    |                      |\n                                    | +------------------+ |\n                                    | |    (\"footer\")    | |\n                                    | +------------------+ |\n                                    +----------------------+\n\n     *\n     * every time `HcAppFrame::SideNav::Portal` renders, it contains a portaled \"panel\"\n     * that is rendered into the `hds-app-side-nav__content-panels` (inside the PortalTarget).\n     *\n     * Rendering or unrendering other `HcAppFrame::SideNav::Portal`s triggers the number of\n     * subnavs to change (via `numSubnavs`), so this function runs and slides\n     * `hds-app-side-nav__content-panels` left or right using the `element.animate` api.\n     *\n     * */\n\n    const activeIndex = count - 1;\n    const targetElement = element;\n    const { prefersReducedMotion } = this;\n\n    const styles = getComputedStyle(targetElement);\n    const columnWidth = styles.getPropertyValue(\n      '--hds-app-side-nav-width-expanded'\n    );\n    const slideDuration = prefersReducedMotion ? 0 : 150;\n    let fadeDuration = prefersReducedMotion ? 0 : 175;\n    let fadeDelay = prefersReducedMotion ? 0 : 50;\n\n    // slide entire parent panel\n    const start = styles.transform;\n    const end = `translateX(-${activeIndex * parseInt(columnWidth, 10)}px)`;\n    const anim = targetElement.animate(\n      [{ transform: start }, { transform: end }],\n      {\n        duration: slideDuration,\n        easing: 'cubic-bezier(0.65, 0, 0.35, 1)',\n        fill: 'forwards',\n      }\n    );\n\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    anim.finished.then((): void => {\n      // uncomment this if we need/want to scroll the element to the top\n      // targetElement.scrollIntoView(true);\n      if (activeIndex > 0) {\n        const allPrev = Array.from(targetElement.children).slice(\n          0,\n          activeIndex\n        ) as HTMLElement[];\n        for (const ele of allPrev) {\n          ele.ariaHidden = 'true';\n          ele.style.setProperty('visibility', 'hidden');\n          ele.style.setProperty('opacity', '0');\n        }\n      }\n      // Notice: we don't add the styles by default because it writes a `style` attribute to the element and it causes an additional re-render\n      if (macroCondition(isTesting())) {\n        // Check the visibility of the element before attempting to commitStyles.\n        if (targetElement.offsetParent !== null) {\n          anim.commitStyles();\n        }\n      }\n    });\n\n    // fade in next panel\n    const nextPanelEl = targetElement.children[activeIndex] as HTMLElement;\n\n    // get reference to last child panel\n    const lastPanelEl = targetElement.children[\n      targetElement.children.length - 1\n    ] as HTMLElement;\n\n    if (nextPanelEl) {\n      nextPanelEl.ariaHidden = 'false';\n      nextPanelEl.style.setProperty('visibility', 'visible');\n      // this eliminates a flicker if there's only one subnav rendering or if we\n      // already just rendered this panel.\n      if (this._lastPanelEl) {\n        if (activeIndex === 0 || nextPanelEl.isSameNode(this._lastPanelEl)) {\n          fadeDelay = 0;\n          fadeDuration = 0;\n        }\n      }\n\n      // remember the last panel\n      this._lastPanelEl = lastPanelEl;\n\n      nextPanelEl.animate([{ opacity: '0' }, { opacity: '1' }], {\n        delay: fadeDelay,\n        duration: fadeDuration,\n        fill: 'forwards',\n      });\n    }\n  };\n\n  <template>\n    <div class=\"hds-app-side-nav__content\" ...attributes>\n      <PortalTarget\n        @multiple={{true}}\n        @onChange={{this.panelsChanged}}\n        @name={{if @targetName @targetName \"hds-app-side-nav-portal-target\"}}\n        class=\"hds-app-side-nav__content-panels\"\n        {{didUpdate this.didUpdateSubnav this._numSubnavs}}\n      />\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\n\nexport interface HdsBreadcrumbSignature {\n  Args: {\n    ariaLabel?: string;\n    itemsCanWrap?: boolean;\n    didInsert?: () => void;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLElement;\n}\n\nconst NOOP = () => {};\n\nexport default class HdsBreadcrumb extends Component<HdsBreadcrumbSignature> {\n  get didInsert(): () => void {\n    const { didInsert } = this.args;\n\n    if (typeof didInsert === 'function') {\n      return didInsert;\n    } else {\n      return NOOP;\n    }\n  }\n\n  get itemsCanWrap(): boolean {\n    return this.args.itemsCanWrap ?? true;\n  }\n\n  get ariaLabel(): string {\n    return this.args.ariaLabel ?? 'breadcrumbs';\n  }\n\n  get classNames(): string {\n    const classes = ['hds-breadcrumb'];\n\n    // add a class based on the @itemsCanWrap argument\n    if (this.itemsCanWrap) {\n      classes.push('hds-breadcrumb--items-can-wrap');\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <nav class={{this.classNames}} aria-label={{this.ariaLabel}} ...attributes>\n      <ol class=\"hds-breadcrumb__list\" {{didInsert this.didInsert}}>\n        {{yield}}\n      </ol>\n    </nav>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport style from 'ember-style-modifier';\n\nimport HdsInteractive from '../interactive/index.gts';\nimport HdsIcon from '../icon/index.gts';\n\nimport type { HdsIconSignature } from '../icon/index.gts';\n\nexport interface HdsBreadcrumbItemSignature {\n  Args: {\n    current?: boolean;\n    maxWidth?: string;\n    text: string;\n    isRouteExternal?: boolean;\n    icon?: HdsIconSignature['Args']['name'];\n    route?: string;\n    href?: string;\n    models?: Array<string | number>;\n    model?: string | number;\n    query?: Record<string, string>;\n    'current-when'?: string;\n    replace?: boolean;\n  };\n  Element: HTMLLIElement;\n}\n\nexport default class HdsBreadcrumbItem extends Component<HdsBreadcrumbItemSignature> {\n  get maxWidth(): string | undefined {\n    const { maxWidth } = this.args;\n\n    if (maxWidth) {\n      assert(\n        `@maxWidth for \"Hds::Breadcrumb::Item\" must be a size as number in 'px' or in 'em' (eg. '200px' or '24em'); received: ${maxWidth}`,\n        maxWidth.match(/^\\d+(px|em)$/)\n      );\n\n      return maxWidth;\n    } else {\n      return undefined;\n    }\n  }\n\n  get itemStyle(): Record<string, string> {\n    if (this.maxWidth) {\n      return { 'max-width': this.maxWidth };\n    } else {\n      return {};\n    }\n  }\n\n  get classNames(): string {\n    const classes = ['hds-breadcrumb__item'];\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <li class=\"hds-breadcrumb__item\" {{style this.itemStyle}} ...attributes>\n      {{#if @current}}\n        <div class=\"hds-breadcrumb__current\">\n          {{#if @icon}}\n            <div class=\"hds-breadcrumb__icon\">\n              <HdsIcon @name={{@icon}} @size=\"16\" @stretched={{true}} />\n            </div>\n          {{/if}}\n          <span class=\"hds-breadcrumb__text\">{{@text}}</span>\n        </div>\n      {{else}}\n        <HdsInteractive\n          class=\"hds-breadcrumb__link\"\n          @current-when={{@current-when}}\n          @models={{@models}}\n          @model={{@model}}\n          @query={{@query}}\n          @replace={{@replace}}\n          @route={{@route}}\n          @href={{@href}}\n          @isRouteExternal={{@isRouteExternal}}\n        >\n          {{#if @icon}}\n            <div class=\"hds-breadcrumb__icon\">\n              <HdsIcon @name={{@icon}} @size=\"16\" @stretched={{true}} />\n            </div>\n          {{/if}}\n          <span class=\"hds-breadcrumb__text\">{{@text}}</span>\n        </HdsInteractive>\n      {{/if}}\n    </li>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { hash } from '@ember/helper';\n\nimport HdsPopoverPrimitive from '../popover-primitive/index.gts';\nimport HdsIcon from '../icon/index.gts';\n\nexport interface HdsBreadcrumbTruncationSignature {\n  Args: {\n    ariaLabel?: string;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLLIElement;\n}\n\nexport default class HdsBreadcrumbTruncation extends Component<HdsBreadcrumbTruncationSignature> {\n  get ariaLabel(): string {\n    return this.args.ariaLabel ?? 'show more';\n  }\n\n  <template>\n    <li\n      class=\"hds-breadcrumb__item hds-breadcrumb__item--is-truncation\"\n      ...attributes\n    >\n      <HdsPopoverPrimitive @enableClickEvents={{true}} as |PP|>\n        <div {{PP.setupPrimitiveContainer}}>\n          <button\n            type=\"button\"\n            class=\"hds-breadcrumb__truncation-toggle\"\n            aria-label={{this.ariaLabel}}\n            aria-expanded={{if PP.isOpen \"true\" \"false\"}}\n            {{PP.setupPrimitiveToggle}}\n          >\n            <HdsIcon @name=\"more-horizontal\" @size=\"16\" />\n          </button>\n          <div\n            class=\"hds-breadcrumb__truncation-content\"\n            {{PP.setupPrimitivePopover\n              anchoredPositionOptions=(hash\n                placement=\"bottom-start\" offsetOptions=4\n              )\n            }}\n          >\n            <ol class=\"hds-breadcrumb__sublist\">\n              {{yield}}\n            </ol>\n          </div>\n        </div>\n      </HdsPopoverPrimitive>\n    </li>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { eq } from 'ember-truth-helpers';\nimport { element } from 'ember-element-helper';\n\nimport {\n  HdsCardBackgroundValues,\n  HdsCardLevelValues,\n  HdsCardOverflowValues,\n  HdsCardTagValues,\n} from './types.ts';\n\nimport type {\n  HdsCardBackground,\n  HdsCardLevel,\n  HdsCardOverflow,\n  HdsCardTag,\n} from './types.ts';\n\nexport const DEFAULT_LEVEL = HdsCardLevelValues.Base;\nexport const DEFAULT_BACKGROUND = HdsCardBackgroundValues.NeutralPrimary;\nexport const DEFAULT_OVERFLOW = HdsCardOverflowValues.Visible;\nexport const DEFAULT_TAG = HdsCardTagValues.Div;\nexport const LEVELS: HdsCardLevel[] = Object.values(HdsCardLevelValues);\nexport const BACKGROUNDS: HdsCardBackground[] = Object.values(\n  HdsCardBackgroundValues\n);\nexport const OVERFLOWS: HdsCardOverflow[] = Object.values(\n  HdsCardOverflowValues\n);\nexport const TAGS: HdsCardTag[] = Object.values(HdsCardTagValues);\n\nexport interface HdsCardContainerSignature {\n  Args: {\n    level?: HdsCardLevel;\n    levelActive?: HdsCardLevel;\n    levelHover?: HdsCardLevel;\n    background?: HdsCardBackground;\n    hasBorder?: boolean;\n    overflow?: HdsCardOverflow;\n    tag?: HdsCardTag;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLElement;\n}\n\nexport default class HdsCardContainer extends Component<HdsCardContainerSignature> {\n  // Sets the \"elevation\" level for the component\n  get level(): HdsCardLevel {\n    const { level = DEFAULT_LEVEL } = this.args;\n\n    assert(\n      `@level for \"Hds::Card::Container\" must be one of the following: ${LEVELS.join(\n        ', '\n      )}; received: ${level}`,\n      LEVELS.includes(level)\n    );\n\n    return level;\n  }\n\n  // Sets the \"elevation\" level for the component on \":hover\" state\n  get levelHover(): HdsCardLevel | undefined {\n    const { levelHover } = this.args;\n\n    if (levelHover) {\n      assert(\n        `@levelHover for \"Hds::Card::Container\" must be one of the following: ${LEVELS.join(\n          ', '\n        )}; received: ${levelHover}`,\n        LEVELS.includes(levelHover)\n      );\n    }\n\n    return levelHover;\n  }\n\n  // Sets the \"elevation\" level for the component on \":active\" state\n  get levelActive(): HdsCardLevel | undefined {\n    const { levelActive } = this.args;\n\n    if (levelActive) {\n      assert(\n        `@levelActive for \"Hds::Card::Container\" must be one of the following: ${LEVELS.join(\n          ', '\n        )}; received: ${levelActive}`,\n        LEVELS.includes(levelActive)\n      );\n    }\n\n    return levelActive;\n  }\n\n  // Sets the background for the component\n  get background(): HdsCardBackground {\n    const { background = DEFAULT_BACKGROUND } = this.args;\n\n    assert(\n      `@background for \"Hds::Card::Container\" must be one of the following: ${BACKGROUNDS.join(\n        ', '\n      )}; received: ${background}`,\n      BACKGROUNDS.includes(background)\n    );\n\n    return background;\n  }\n\n  // Sets the level for the card\n  get overflow(): HdsCardOverflow {\n    const { overflow = DEFAULT_OVERFLOW } = this.args;\n\n    assert(\n      `@overflow for \"Hds::Card::Container\" must be one of the following: ${OVERFLOWS.join(\n        ', '\n      )}; received: ${overflow}`,\n      OVERFLOWS.includes(overflow)\n    );\n\n    return overflow;\n  }\n\n  get componentTag(): HdsCardTag {\n    const { tag = DEFAULT_TAG } = this.args;\n\n    assert(\n      `@tag for \"Hds::Card::Container\" must be one of the following: ${TAGS.join(', ')}; received: ${tag}`,\n      TAGS.includes(tag)\n    );\n\n    return tag;\n  }\n\n  // Get the class names to apply to the component.\n  get classNames(): string {\n    const classes = ['hds-card__container'];\n\n    // add \"elevation\" classes based on the @level and @hasBorder arguments\n    classes.push(\n      `hds-card__container--level-${\n        this.args.hasBorder ? 'surface' : 'elevation'\n      }-${this.level}`\n    );\n    if (this.levelHover) {\n      classes.push(\n        `hds-card__container--hover-level-${\n          this.args.hasBorder ? 'surface' : 'elevation'\n        }-${this.levelHover}`\n      );\n    }\n    if (this.levelActive) {\n      classes.push(\n        `hds-card__container--active-level-${\n          this.args.hasBorder ? 'surface' : 'elevation'\n        }-${this.levelActive}`\n      );\n    }\n\n    // add a class based on the @background argument\n    classes.push(`hds-card__container--background-${this.background}`);\n\n    // add a class based on the @overflow argument\n    classes.push(`hds-card__container--overflow-${this.overflow}`);\n\n    return classes.join(' ');\n  }\n\n  <template>\n    {{!\n      Dynamically generating an HTML tag in Ember creates a dynamic component class (with the corresponding tagName), while rendering\n      a plain HTML element requires less computing cycles for Ember (you will notice it doesn't add the ember-view class to it).\n    }}\n    {{#if (eq this.componentTag \"div\")}}\n      <div class={{this.classNames}} ...attributes>{{yield}}</div>\n    {{else}}\n      {{#let (element this.componentTag) as |Tag|}}\n        <Tag\n          class={{this.classNames}}\n          role={{if (eq this.componentTag \"li\") \"listitem\"}}\n          ...attributes\n        >{{yield}}</Tag>\n      {{/let}}\n    {{/if}}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { next, schedule } from '@ember/runloop';\nimport { htmlSafe } from '@ember/template';\nimport { guidFor } from '@ember/object/internals';\nimport { modifier } from 'ember-modifier';\nimport { hash } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport Prism from 'prismjs';\nimport style from 'ember-style-modifier';\n\nimport type { SafeString } from '@ember/template';\nimport type { WithBoundArgs } from '@glint/template';\nimport hdsT from '../../../helpers/hds-t.ts';\n\nimport { HdsCodeBlockLanguageValues } from './types.ts';\nimport HdsCodeBlockCopyButton from './copy-button.gts';\nimport HdsButton from '../button/index.gts';\nimport HdsCodeBlockTitle from './title.gts';\nimport HdsCodeBlockDescription from './description.gts';\n\nimport type { HdsCodeBlockTitleSignature } from './title.gts';\nimport type { HdsCodeBlockDescriptionSignature } from './description.gts';\nimport type { HdsCodeBlockLanguages } from './types.ts';\nimport type { HdsCopyButtonSignature } from '../copy/button/index.gts';\n\nimport 'prismjs/plugins/line-numbers/prism-line-numbers';\nimport 'prismjs/plugins/line-highlight/prism-line-highlight';\n\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-go';\nimport 'prismjs/components/prism-hcl';\nimport 'prismjs/components/prism-json';\nimport 'prismjs/components/prism-log';\nimport 'prismjs/components/prism-ruby';\nimport 'prismjs/components/prism-shell-session';\nimport 'prismjs/components/prism-yaml';\n\n// These imports are required to overcome a global variable clash in Helios website\n// where language import are overriden by the Prism instance in `CodeBlock`\n// Note that `prism-handlebars` is dependant on `prism-markup-templating`\nimport 'prismjs/components/prism-markup-templating';\nimport 'prismjs/components/prism-handlebars';\n\nexport const LANGUAGES: HdsCodeBlockLanguages[] = Object.values(\n  HdsCodeBlockLanguageValues\n);\n\nexport interface HdsCodeBlockSignature {\n  Args: {\n    ariaLabel?: string;\n    ariaLabelledBy?: string;\n    ariaDescribedBy?: string;\n    hasCopyButton?: boolean;\n    hasLineNumbers?: boolean;\n    hasLineWrapping?: boolean;\n    highlightLines?: string;\n    lineNumberStart?: number;\n    isStandalone?: boolean;\n    language?: HdsCodeBlockLanguages;\n    maxHeight?: string;\n    value: string;\n    copyButtonText?: HdsCopyButtonSignature['Args']['text'];\n    onCopy?: HdsCopyButtonSignature['Args']['onSuccess'];\n    copySuccessMessageText?: HdsCopyButtonSignature['Args']['ariaMessageText'];\n  };\n  Blocks: {\n    default: [\n      {\n        Title?: WithBoundArgs<typeof HdsCodeBlockTitle, 'didInsertNode'>;\n        Description?: WithBoundArgs<\n          typeof HdsCodeBlockDescription,\n          'didInsertNode'\n        >;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsCodeBlock extends Component<HdsCodeBlockSignature> {\n  @tracked private _prismCode: SafeString = htmlSafe('');\n  @tracked private _isExpanded: boolean = false;\n  @tracked private _codeContentHeight: number = 0;\n  @tracked private _codeContainerHeight: number = 0;\n  @tracked private _titleId: string | undefined;\n  @tracked private _descriptionId: string | undefined;\n\n  // Generates a unique ID for the code content\n  private _preCodeId = 'pre-code-' + guidFor(this);\n  private _preCodeElement!: HTMLPreElement;\n  private _observer!: ResizeObserver;\n\n  // If a code block is hidden from view, and made visible after load, the Prism code needs to be re-run\n  private _setUpCodeObserver = modifier((element: HTMLElement) => {\n    this._preCodeElement = element.querySelector(\n      '.hds-code-block__code'\n    ) as HTMLPreElement;\n    this._observer = new ResizeObserver((entries) => {\n      entries.forEach((entry) => {\n        if (entry.contentBoxSize) {\n          this._updateCodeHeights();\n          this._updatePrismPlugins();\n        }\n      });\n    });\n    this._observer.observe(element);\n\n    return () => {\n      this._observer.disconnect();\n    };\n  });\n\n  private _setUpCodeBlockCode = modifier((element: HTMLElement) => {\n    this._isExpanded = false; // reset expanded state on updates\n    this.setPrismCode(element);\n    return () => {};\n  });\n\n  get ariaLabelledBy(): string | undefined {\n    if (this.args.ariaLabel !== undefined) {\n      return;\n    }\n\n    return this.args.ariaLabelledBy ?? this._titleId;\n  }\n\n  get ariaDescribedBy(): string | undefined {\n    return this.args.ariaDescribedBy ?? this._descriptionId;\n  }\n\n  // code text content for the CodeBlock\n  get code(): string {\n    const code = this.args.value;\n\n    assert(\n      '@code for \"Hds::CodeBlock\" must have a valid value',\n      code !== undefined\n    );\n\n    if (Prism?.plugins?.['NormalizeWhitespace']) {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n      return Prism.plugins['NormalizeWhitespace'].normalize(code);\n    }\n\n    return code;\n  }\n\n  get maxHeight(): string | undefined {\n    return this._isExpanded ? 'none' : this.args.maxHeight;\n  }\n\n  // Shows overlay footer if maxHeight is set and the pre tag content height is greater than the pre tag height\n  get showFooter(): boolean {\n    if (this.args.maxHeight) {\n      return this._codeContentHeight > this._codeContainerHeight;\n    }\n    return false;\n  }\n\n  // Name of coding language used within CodeBlock for syntax highlighting\n  get language(): HdsCodeBlockLanguages | undefined {\n    return this.args.language ?? undefined;\n  }\n\n  // Displays line numbers if true\n  get hasLineNumbers(): boolean {\n    return this.args.hasLineNumbers ?? true;\n  }\n\n  // Make CodeBlock container corners appear rounded (the standalone variation)\n  get isStandalone(): boolean {\n    return this.args.isStandalone ?? true;\n  }\n\n  // Make text content wrap to multiple lines\n  get hasLineWrapping(): boolean {\n    return this.args.hasLineWrapping ?? false;\n  }\n\n  get copyButtonText(): HdsCopyButtonSignature['Args']['text'] {\n    return this.args.copyButtonText ? this.args.copyButtonText : 'Copy';\n  }\n\n  registerTitleElement = (\n    element: HdsCodeBlockTitleSignature['Element']\n  ): void => {\n    this._titleId = element.id;\n  };\n\n  registerDescriptionElement = (\n    element: HdsCodeBlockDescriptionSignature['Element']\n  ): void => {\n    this._descriptionId = element.id;\n  };\n\n  setPrismCode = (element: HTMLElement): void => {\n    const code = this.code;\n    const language = this.language;\n    const grammar = language ? Prism.languages[language] : undefined;\n\n    if (code) {\n      // eslint-disable-next-line ember/no-runloop\n      next((): void => {\n        if (language && grammar) {\n          this._prismCode = htmlSafe(Prism.highlight(code, grammar, language));\n        } else {\n          // eslint-disable-next-line @typescript-eslint/no-base-to-string\n          this._prismCode = htmlSafe(Prism.util.encode(code).toString());\n        }\n\n        // Existing line numbers must be removed in order to be updated correctly\n        const lineNumbers = element.querySelector(\n          '.line-numbers-rows'\n        ) as HTMLElement;\n        if (lineNumbers) {\n          element.removeChild(lineNumbers);\n        }\n\n        if (this.args.highlightLines) {\n          this._prismCode = this._addHighlightSrOnlyText(\n            this._prismCode.toString()\n          );\n        }\n\n        // Force prism-line-numbers plugin initialization, required for Prism.highlight usage\n        // See https://github.com/PrismJS/prism/issues/1234\n        Prism.hooks.run('complete', {\n          code,\n          element,\n        });\n\n        // eslint-disable-next-line ember/no-runloop\n        schedule('afterRender', (): void => {\n          this._updateCodeHeights();\n          // we need to delay re-evaluating the context for prism plugins for as much as possible, and `afterRender` is the 'latest' we can use in the component lifecycle\n          this._updatePrismPlugins();\n        });\n      });\n    }\n  };\n\n  private _updateCodeHeights = (): void => {\n    if (!this._isExpanded) {\n      // Get the actual height & the content height of the preCodeElement\n      this._codeContentHeight = this._preCodeElement?.scrollHeight ?? 0;\n      this._codeContainerHeight = this._preCodeElement?.clientHeight ?? 0;\n    }\n  };\n\n  private _updatePrismPlugins = (): void => {\n    if (this.hasLineNumbers && Prism?.plugins?.['lineNumbers']) {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n      Prism.plugins['lineNumbers'].resize(this._preCodeElement);\n    }\n\n    // Force prism-line-highlight plugin initialization\n    // Context: https://github.com/hashicorp/design-system/pull/1749#discussion_r1374288785\n    if (this.args.highlightLines) {\n      // we piggy-back on the plugin's `resize` event listener to trigger a new call of the `highlightLines` function: https://github.com/PrismJS/prism/blob/master/plugins/line-highlight/prism-line-highlight.js#L337\n      if (window) window.dispatchEvent(new Event('resize'));\n    }\n  };\n\n  toggleExpanded = (): void => {\n    this._isExpanded = !this._isExpanded;\n  };\n\n  // Logic for determining where line highlighting starts and ends taken from Prism.js plugin source code\n  // Context: https://github.com/PrismJS/prism/blob/19f8de66b0f3a79aedbbf096081a4060fc0e80af/src/plugins/line-highlight/prism-line-highlight.ts#L82\n  private _addHighlightSrOnlyText = (code: string): SafeString => {\n    const NEW_LINE_EXP = /\\n(?!$)/g;\n    const lines = code.split(NEW_LINE_EXP);\n    const numLines = lines.length;\n    const lineOffset = this.args.lineNumberStart\n      ? this.args.lineNumberStart\n      : 0;\n\n    const highlightStart = '<span class=\"sr-only\">highlight start</span>';\n    const highlightEnd = '<span class=\"sr-only\">highlight end</span>';\n\n    const ranges = this.args.highlightLines\n      ?.replace(/\\s+/g, '')\n      .split(',')\n      .filter(Boolean);\n\n    if (ranges && ranges.length > 0) {\n      const highlightedLines = [] as { start: number; end: number }[];\n\n      ranges.forEach((currentRange) => {\n        const range = currentRange.split('-');\n        const start = +range[0]! - lineOffset;\n        let end = +range[1]! || start - lineOffset;\n        end = Math.min(numLines, end);\n        highlightedLines.push({\n          start: start,\n          end: end,\n        });\n      });\n\n      highlightedLines.forEach((line) => {\n        lines[line.start - 1] = highlightStart + lines[line.start - 1];\n        lines[line.end - 1] = lines[line.end - 1] + highlightEnd;\n      });\n\n      return htmlSafe(lines.join('\\n'));\n    } else {\n      return htmlSafe(code);\n    }\n  };\n\n  get classNames(): string {\n    // Currently there is only one theme so the class name is hard-coded.\n    // In the future, additional themes such as a \"light\" theme could be added.\n    const classes = ['hds-code-block', 'hds-code-block--theme-dark'];\n\n    if (this.language) {\n      classes.push(`language-${this.language}`);\n    }\n\n    if (this.isStandalone === true) {\n      classes.push('hds-code-block--is-standalone');\n    }\n\n    if (this.hasLineWrapping === true) {\n      classes.push('hds-code-block--has-line-wrapping');\n    }\n\n    // Note: Prism.js is using the specific class name \"line-numbers\" to determine implementation of line numbers in the UI\n    if (this.hasLineNumbers) {\n      classes.push('line-numbers');\n    }\n\n    if (this.showFooter) {\n      classes.push('hds-code-block--has-overlay-footer');\n    }\n\n    if (this._isExpanded) {\n      classes.push('hds-code-block--is-expanded');\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <div class={{this.classNames}} ...attributes {{this._setUpCodeObserver}}>\n      <div class=\"hds-code-block__header\">\n        {{~yield\n          (hash\n            Title=(component\n              HdsCodeBlockTitle didInsertNode=this.registerTitleElement\n            )\n          )\n        ~}}\n        {{~yield\n          (hash\n            Description=(component\n              HdsCodeBlockDescription\n              didInsertNode=this.registerDescriptionElement\n            )\n          )\n        ~}}\n      </div>\n      <div class=\"hds-code-block__body\">\n        {{! content within pre tag is whitespace-sensitive; do not add new lines! }}\n        <pre\n          class=\"hds-code-block__code\"\n          {{style maxHeight=this.maxHeight}}\n          data-line={{@highlightLines}}\n          data-start={{@lineNumberStart}}\n          id={{this._preCodeId}}\n          aria-label={{@ariaLabel}}\n          aria-labelledby={{this.ariaLabelledBy}}\n          aria-describedby={{this.ariaDescribedBy}}\n          tabindex=\"0\"\n        ><code {{this._setUpCodeBlockCode}}>\n            {{~this._prismCode~}}\n          </code></pre>\n\n        {{#if @hasCopyButton}}\n          <HdsCodeBlockCopyButton\n            @targetToCopy=\"#{{this._preCodeId}}\"\n            aria-describedby={{this._preCodeId}}\n            @text={{this.copyButtonText}}\n            @onCopy={{@onCopy}}\n            @copySuccessMessageText={{@copySuccessMessageText}}\n          />\n        {{/if}}\n      </div>\n      {{#if this.showFooter}}\n        <div class=\"hds-code-block__overlay-footer\">\n          <HdsButton\n            class=\"hds-code-block__height-toggle-button\"\n            @text={{if\n              this._isExpanded\n              (hdsT\n                \"hds.components.code-block.height-toggle-button.show-less\"\n                default=\"Show less code\"\n              )\n              (hdsT\n                \"hds.components.code-block.height-toggle-button.show-more\"\n                default=\"Show more code\"\n              )\n            }}\n            @color=\"secondary\"\n            @icon={{if this._isExpanded \"unfold-close\" \"unfold-open\"}}\n            @size=\"small\"\n            {{on \"click\" this.toggleExpanded}}\n          />\n        </div>\n      {{/if}}\n    </div>\n  </template>\n}\n","\n/* **********************************************\n     Begin prism-core.js\n********************************************** */\n\n/// <reference lib=\"WebWorker\"/>\n\nvar _self = (typeof window !== 'undefined')\n\t? window   // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t\t? self // if in worker\n\t\t\t: {}   // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n *\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @namespace\n * @public\n */\nvar Prism = (function (_self) {\n\n\t// Private helper vars\n\tvar lang = /(?:^|\\s)lang(?:uage)?-([\\w-]+)(?=\\s|$)/i;\n\tvar uniqueId = 0;\n\n\t// The grammar object for plaintext\n\tvar plainTextGrammar = {};\n\n\n\tvar _ = {\n\t\t/**\n\t\t * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the\n\t\t * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load\n\t\t * additional languages or plugins yourself.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.\n\t\t *\n\t\t * You obviously have to change this value before the automatic highlighting started. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.manual = true;\n\t\t * // add a new <script> to load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tmanual: _self.Prism && _self.Prism.manual,\n\t\t/**\n\t\t * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses\n\t\t * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your\n\t\t * own worker, you don't want it to do this.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not add its own listeners to the worker.\n\t\t *\n\t\t * You obviously have to change this value before Prism executes. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.disableWorkerMessageHandler = true;\n\t\t * // Load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n\n\t\t/**\n\t\t * A namespace for utility methods.\n\t\t *\n\t\t * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may\n\t\t * change or disappear at any time.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t */\n\t\tutil: {\n\t\t\tencode: function encode(tokens) {\n\t\t\t\tif (tokens instanceof Token) {\n\t\t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n\t\t\t\t} else if (Array.isArray(tokens)) {\n\t\t\t\t\treturn tokens.map(encode);\n\t\t\t\t} else {\n\t\t\t\t\treturn tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\\u00a0/g, ' ');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the name of the type of the given value.\n\t\t\t *\n\t\t\t * @param {any} o\n\t\t\t * @returns {string}\n\t\t\t * @example\n\t\t\t * type(null)      === 'Null'\n\t\t\t * type(undefined) === 'Undefined'\n\t\t\t * type(123)       === 'Number'\n\t\t\t * type('foo')     === 'String'\n\t\t\t * type(true)      === 'Boolean'\n\t\t\t * type([1, 2])    === 'Array'\n\t\t\t * type({})        === 'Object'\n\t\t\t * type(String)    === 'Function'\n\t\t\t * type(/abc+/)    === 'RegExp'\n\t\t\t */\n\t\t\ttype: function (o) {\n\t\t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns a unique number for the given object. Later calls will still return the same number.\n\t\t\t *\n\t\t\t * @param {Object} obj\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tobjId: function (obj) {\n\t\t\t\tif (!obj['__id']) {\n\t\t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n\t\t\t\t}\n\t\t\t\treturn obj['__id'];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Creates a deep clone of the given object.\n\t\t\t *\n\t\t\t * The main intended use of this function is to clone language definitions.\n\t\t\t *\n\t\t\t * @param {T} o\n\t\t\t * @param {Record<number, any>} [visited]\n\t\t\t * @returns {T}\n\t\t\t * @template T\n\t\t\t */\n\t\t\tclone: function deepClone(o, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar clone; var id;\n\t\t\t\tswitch (_.util.type(o)) {\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = /** @type {Record<string, any>} */ ({});\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\tfor (var key in o) {\n\t\t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n\t\t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tcase 'Array':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\t(/** @type {Array} */(/** @type {any} */(o))).forEach(function (v, i) {\n\t\t\t\t\t\t\tclone[i] = deepClone(v, visited);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn o;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n\t\t\t *\n\t\t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tgetLanguage: function (element) {\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar m = lang.exec(element.className);\n\t\t\t\t\tif (m) {\n\t\t\t\t\t\treturn m[1].toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn 'none';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the Prism `language-xxxx` class of the given element.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} language\n\t\t\t * @returns {void}\n\t\t\t */\n\t\t\tsetLanguage: function (element, language) {\n\t\t\t\t// remove all `language-xxxx` classes\n\t\t\t\t// (this might leave behind a leading space)\n\t\t\t\telement.className = element.className.replace(RegExp(lang, 'gi'), '');\n\n\t\t\t\t// add the new `language-xxxx` class\n\t\t\t\t// (using `classList` will automatically clean up spaces for us)\n\t\t\t\telement.classList.add('language-' + language);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the script element that is currently executing.\n\t\t\t *\n\t\t\t * This does __not__ work for line script element.\n\t\t\t *\n\t\t\t * @returns {HTMLScriptElement | null}\n\t\t\t */\n\t\t\tcurrentScript: function () {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif (document.currentScript && document.currentScript.tagName === 'SCRIPT' && 1 < 2 /* hack to trip TS' flow analysis */) {\n\t\t\t\t\treturn /** @type {any} */ (document.currentScript);\n\t\t\t\t}\n\n\t\t\t\t// IE11 workaround\n\t\t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n\t\t\t\t// this will not work for inline scripts\n\n\t\t\t\ttry {\n\t\t\t\t\tthrow new Error();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n\t\t\t\t\t// A stack will look like this:\n\t\t\t\t\t//\n\t\t\t\t\t// Error\n\t\t\t\t\t//    at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n\t\t\t\t\t//    at Global code (http://localhost/components/prism-core.js:606:1)\n\n\t\t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):[^:]+:[^:]+\\)$/i.exec(err.stack) || [])[1];\n\t\t\t\t\tif (src) {\n\t\t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n\t\t\t\t\t\tfor (var i in scripts) {\n\t\t\t\t\t\t\tif (scripts[i].src == src) {\n\t\t\t\t\t\t\t\treturn scripts[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns whether a given class is active for `element`.\n\t\t\t *\n\t\t\t * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated\n\t\t\t * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the\n\t\t\t * given class is just the given class with a `no-` prefix.\n\t\t\t *\n\t\t\t * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is\n\t\t\t * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its\n\t\t\t * ancestors have the given class or the negated version of it, then the default activation will be returned.\n\t\t\t *\n\t\t\t * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated\n\t\t\t * version of it, the class is considered active.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} className\n\t\t\t * @param {boolean} [defaultActivation=false]\n\t\t\t * @returns {boolean}\n\t\t\t */\n\t\t\tisActive: function (element, className, defaultActivation) {\n\t\t\t\tvar no = 'no-' + className;\n\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar classList = element.classList;\n\t\t\t\t\tif (classList.contains(className)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (classList.contains(no)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn !!defaultActivation;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tlanguages: {\n\t\t\t/**\n\t\t\t * The grammar for plain, unformatted text.\n\t\t\t */\n\t\t\tplain: plainTextGrammar,\n\t\t\tplaintext: plainTextGrammar,\n\t\t\ttext: plainTextGrammar,\n\t\t\ttxt: plainTextGrammar,\n\n\t\t\t/**\n\t\t\t * Creates a deep copy of the language with the given id and appends the given tokens.\n\t\t\t *\n\t\t\t * If a token in `redef` also appears in the copied language, then the existing token in the copied language\n\t\t\t * will be overwritten at its original position.\n\t\t\t *\n\t\t\t * ## Best practices\n\t\t\t *\n\t\t\t * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)\n\t\t\t * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to\n\t\t\t * understand the language definition because, normally, the order of tokens matters in Prism grammars.\n\t\t\t *\n\t\t\t * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.\n\t\t\t * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.\n\t\t\t *\n\t\t\t * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.\n\t\t\t * @param {Grammar} redef The new tokens to append.\n\t\t\t * @returns {Grammar} The new language created.\n\t\t\t * @public\n\t\t\t * @example\n\t\t\t * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {\n\t\t\t *     // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token\n\t\t\t *     // at its original position\n\t\t\t *     'comment': { ... },\n\t\t\t *     // CSS doesn't have a 'color' token, so this token will be appended\n\t\t\t *     'color': /\\b(?:red|green|blue)\\b/\n\t\t\t * });\n\t\t\t */\n\t\t\textend: function (id, redef) {\n\t\t\t\tvar lang = _.util.clone(_.languages[id]);\n\n\t\t\t\tfor (var key in redef) {\n\t\t\t\t\tlang[key] = redef[key];\n\t\t\t\t}\n\n\t\t\t\treturn lang;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Inserts tokens _before_ another token in a language definition or any other grammar.\n\t\t\t *\n\t\t\t * ## Usage\n\t\t\t *\n\t\t\t * This helper method makes it easy to modify existing languages. For example, the CSS language definition\n\t\t\t * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded\n\t\t\t * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the\n\t\t\t * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do\n\t\t\t * this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.markup.style = {\n\t\t\t *     // token\n\t\t\t * };\n\t\t\t * ```\n\t\t\t *\n\t\t\t * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens\n\t\t\t * before existing tokens. For the CSS example above, you would use it like this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'cdata', {\n\t\t\t *     'style': {\n\t\t\t *         // token\n\t\t\t *     }\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Special cases\n\t\t\t *\n\t\t\t * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar\n\t\t\t * will be ignored.\n\t\t\t *\n\t\t\t * This behavior can be used to insert tokens after `before`:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'comment', {\n\t\t\t *     'comment': Prism.languages.markup.comment,\n\t\t\t *     // tokens after 'comment'\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Limitations\n\t\t\t *\n\t\t\t * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object\n\t\t\t * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave\n\t\t\t * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily\n\t\t\t * deleting properties which is necessary to insert at arbitrary positions.\n\t\t\t *\n\t\t\t * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.\n\t\t\t * Instead, it will create a new object and replace all references to the target object with the new one. This\n\t\t\t * can be done without temporarily deleting properties, so the iteration order is well-defined.\n\t\t\t *\n\t\t\t * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if\n\t\t\t * you hold the target object in a variable, then the value of the variable will not change.\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * var oldMarkup = Prism.languages.markup;\n\t\t\t * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });\n\t\t\t *\n\t\t\t * assert(oldMarkup !== Prism.languages.markup);\n\t\t\t * assert(newMarkup === Prism.languages.markup);\n\t\t\t * ```\n\t\t\t *\n\t\t\t * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the\n\t\t\t * object to be modified.\n\t\t\t * @param {string} before The key to insert before.\n\t\t\t * @param {Grammar} insert An object containing the key-value pairs to be inserted.\n\t\t\t * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the\n\t\t\t * object to be modified.\n\t\t\t *\n\t\t\t * Defaults to `Prism.languages`.\n\t\t\t * @returns {Grammar} The new grammar object.\n\t\t\t * @public\n\t\t\t */\n\t\t\tinsertBefore: function (inside, before, insert, root) {\n\t\t\t\troot = root || /** @type {any} */ (_.languages);\n\t\t\t\tvar grammar = root[inside];\n\t\t\t\t/** @type {Grammar} */\n\t\t\t\tvar ret = {};\n\n\t\t\t\tfor (var token in grammar) {\n\t\t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n\t\t\t\t\t\tif (token == before) {\n\t\t\t\t\t\t\tfor (var newToken in insert) {\n\t\t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n\t\t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n\t\t\t\t\t\t\tret[token] = grammar[token];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar old = root[inside];\n\t\t\t\troot[inside] = ret;\n\n\t\t\t\t// Update references in other language definitions\n\t\t\t\t_.languages.DFS(_.languages, function (key, value) {\n\t\t\t\t\tif (value === old && key != inside) {\n\t\t\t\t\t\tthis[key] = ret;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn ret;\n\t\t\t},\n\n\t\t\t// Traverse a language definition with Depth First Search\n\t\t\tDFS: function DFS(o, callback, type, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar objId = _.util.objId;\n\n\t\t\t\tfor (var i in o) {\n\t\t\t\t\tif (o.hasOwnProperty(i)) {\n\t\t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n\t\t\t\t\t\tvar property = o[i];\n\t\t\t\t\t\tvar propertyType = _.util.type(property);\n\n\t\t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, null, visited);\n\t\t\t\t\t\t} else if (propertyType === 'Array' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, i, visited);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tplugins: {},\n\n\t\t/**\n\t\t * This is the most high-level function in Prism’s API.\n\t\t * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on\n\t\t * each one of them.\n\t\t *\n\t\t * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`.\n\t\t *\n\t\t * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAll: function (async, callback) {\n\t\t\t_.highlightAllUnder(document, async, callback);\n\t\t},\n\n\t\t/**\n\t\t * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls\n\t\t * {@link Prism.highlightElement} on each one of them.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-highlightall`\n\t\t * 2. `before-all-elements-highlight`\n\t\t * 3. All hooks of {@link Prism.highlightElement} for each element.\n\t\t *\n\t\t * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted.\n\t\t * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers.\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAllUnder: function (container, async, callback) {\n\t\t\tvar env = {\n\t\t\t\tcallback: callback,\n\t\t\t\tcontainer: container,\n\t\t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n\t\t\t};\n\n\t\t\t_.hooks.run('before-highlightall', env);\n\n\t\t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n\t\t\t_.hooks.run('before-all-elements-highlight', env);\n\n\t\t\tfor (var i = 0, element; (element = env.elements[i++]);) {\n\t\t\t\t_.highlightElement(element, async === true, env.callback);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Highlights the code inside a single element.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-sanity-check`\n\t\t * 2. `before-highlight`\n\t\t * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`.\n\t\t * 4. `before-insert`\n\t\t * 5. `after-highlight`\n\t\t * 6. `complete`\n\t\t *\n\t\t * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for\n\t\t * the element's language.\n\t\t *\n\t\t * @param {Element} element The element containing the code.\n\t\t * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier.\n\t\t * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers\n\t\t * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is\n\t\t * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default).\n\t\t *\n\t\t * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for\n\t\t * asynchronous highlighting to work. You can build your own bundle on the\n\t\t * [Download page](https://prismjs.com/download.html).\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done.\n\t\t * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightElement: function (element, async, callback) {\n\t\t\t// Find language\n\t\t\tvar language = _.util.getLanguage(element);\n\t\t\tvar grammar = _.languages[language];\n\n\t\t\t// Set language on the element, if not present\n\t\t\t_.util.setLanguage(element, language);\n\n\t\t\t// Set language on the parent, for styling\n\t\t\tvar parent = element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n\t\t\t\t_.util.setLanguage(parent, language);\n\t\t\t}\n\n\t\t\tvar code = element.textContent;\n\n\t\t\tvar env = {\n\t\t\t\telement: element,\n\t\t\t\tlanguage: language,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tcode: code\n\t\t\t};\n\n\t\t\tfunction insertHighlightedCode(highlightedCode) {\n\t\t\t\tenv.highlightedCode = highlightedCode;\n\n\t\t\t\t_.hooks.run('before-insert', env);\n\n\t\t\t\tenv.element.innerHTML = env.highlightedCode;\n\n\t\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t}\n\n\t\t\t_.hooks.run('before-sanity-check', env);\n\n\t\t\t// plugins may change/add the parent/element\n\t\t\tparent = env.element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {\n\t\t\t\tparent.setAttribute('tabindex', '0');\n\t\t\t}\n\n\t\t\tif (!env.code) {\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.hooks.run('before-highlight', env);\n\n\t\t\tif (!env.grammar) {\n\t\t\t\tinsertHighlightedCode(_.util.encode(env.code));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (async && _self.Worker) {\n\t\t\t\tvar worker = new Worker(_.filename);\n\n\t\t\t\tworker.onmessage = function (evt) {\n\t\t\t\t\tinsertHighlightedCode(evt.data);\n\t\t\t\t};\n\n\t\t\t\tworker.postMessage(JSON.stringify({\n\t\t\t\t\tlanguage: env.language,\n\t\t\t\t\tcode: env.code,\n\t\t\t\t\timmediateClose: true\n\t\t\t\t}));\n\t\t\t} else {\n\t\t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Low-level function, only use if you know what you’re doing. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns a string with the HTML produced.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-tokenize`\n\t\t * 2. `after-tokenize`\n\t\t * 3. `wrap`: On each {@link Token}.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @param {string} language The name of the language definition passed to `grammar`.\n\t\t * @returns {string} The highlighted HTML.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');\n\t\t */\n\t\thighlight: function (text, grammar, language) {\n\t\t\tvar env = {\n\t\t\t\tcode: text,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tlanguage: language\n\t\t\t};\n\t\t\t_.hooks.run('before-tokenize', env);\n\t\t\tif (!env.grammar) {\n\t\t\t\tthrow new Error('The language \"' + env.language + '\" has no grammar.');\n\t\t\t}\n\t\t\tenv.tokens = _.tokenize(env.code, env.grammar);\n\t\t\t_.hooks.run('after-tokenize', env);\n\t\t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n\t\t},\n\n\t\t/**\n\t\t * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns an array with the tokenized code.\n\t\t *\n\t\t * When the language definition includes nested tokens, the function is called recursively on each of these tokens.\n\t\t *\n\t\t * This method could be useful in other contexts as well, as a very crude parser.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @returns {TokenStream} An array of strings and tokens, a token stream.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * let code = `var foo = 0;`;\n\t\t * let tokens = Prism.tokenize(code, Prism.languages.javascript);\n\t\t * tokens.forEach(token => {\n\t\t *     if (token instanceof Prism.Token && token.type === 'number') {\n\t\t *         console.log(`Found numeric literal: ${token.content}`);\n\t\t *     }\n\t\t * });\n\t\t */\n\t\ttokenize: function (text, grammar) {\n\t\t\tvar rest = grammar.rest;\n\t\t\tif (rest) {\n\t\t\t\tfor (var token in rest) {\n\t\t\t\t\tgrammar[token] = rest[token];\n\t\t\t\t}\n\n\t\t\t\tdelete grammar.rest;\n\t\t\t}\n\n\t\t\tvar tokenList = new LinkedList();\n\t\t\taddAfter(tokenList, tokenList.head, text);\n\n\t\t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n\t\t\treturn toArray(tokenList);\n\t\t},\n\n\t\t/**\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thooks: {\n\t\t\tall: {},\n\n\t\t\t/**\n\t\t\t * Adds the given callback to the list of callbacks for the given hook.\n\t\t\t *\n\t\t\t * The callback will be invoked when the hook it is registered for is run.\n\t\t\t * Hooks are usually directly run by a highlight function but you can also run hooks yourself.\n\t\t\t *\n\t\t\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {HookCallback} callback The callback function which is given environment variables.\n\t\t\t * @public\n\t\t\t */\n\t\t\tadd: function (name, callback) {\n\t\t\t\tvar hooks = _.hooks.all;\n\n\t\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\t\thooks[name].push(callback);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t\t\t *\n\t\t\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t\t\t * @public\n\t\t\t */\n\t\t\trun: function (name, env) {\n\t\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, callback; (callback = callbacks[i++]);) {\n\t\t\t\t\tcallback(env);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tToken: Token\n\t};\n\t_self.Prism = _;\n\n\n\t// Typescript note:\n\t// The following can be used to import the Token type in JSDoc:\n\t//\n\t//   @typedef {InstanceType<import(\"./prism-core\")[\"Token\"]>} Token\n\n\t/**\n\t * Creates a new token.\n\t *\n\t * @param {string} type See {@link Token#type type}\n\t * @param {string | TokenStream} content See {@link Token#content content}\n\t * @param {string|string[]} [alias] The alias(es) of the token.\n\t * @param {string} [matchedStr=\"\"] A copy of the full string this token was created from.\n\t * @class\n\t * @global\n\t * @public\n\t */\n\tfunction Token(type, content, alias, matchedStr) {\n\t\t/**\n\t\t * The type of the token.\n\t\t *\n\t\t * This is usually the key of a pattern in a {@link Grammar}.\n\t\t *\n\t\t * @type {string}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.type = type;\n\t\t/**\n\t\t * The strings or tokens contained by this token.\n\t\t *\n\t\t * This will be a token stream if the pattern matched also defined an `inside` grammar.\n\t\t *\n\t\t * @type {string | TokenStream}\n\t\t * @public\n\t\t */\n\t\tthis.content = content;\n\t\t/**\n\t\t * The alias(es) of the token.\n\t\t *\n\t\t * @type {string|string[]}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.alias = alias;\n\t\t// Copy of the full string this token was created from\n\t\tthis.length = (matchedStr || '').length | 0;\n\t}\n\n\t/**\n\t * A token stream is an array of strings and {@link Token Token} objects.\n\t *\n\t * Token streams have to fulfill a few properties that are assumed by most functions (mostly internal ones) that process\n\t * them.\n\t *\n\t * 1. No adjacent strings.\n\t * 2. No empty strings.\n\t *\n\t *    The only exception here is the token stream that only contains the empty string and nothing else.\n\t *\n\t * @typedef {Array<string | Token>} TokenStream\n\t * @global\n\t * @public\n\t */\n\n\t/**\n\t * Converts the given token or token stream to an HTML representation.\n\t *\n\t * The following hooks will be run:\n\t * 1. `wrap`: On each {@link Token}.\n\t *\n\t * @param {string | Token | TokenStream} o The token or token stream to be converted.\n\t * @param {string} language The name of current language.\n\t * @returns {string} The HTML representation of the token or token stream.\n\t * @memberof Token\n\t * @static\n\t */\n\tToken.stringify = function stringify(o, language) {\n\t\tif (typeof o == 'string') {\n\t\t\treturn o;\n\t\t}\n\t\tif (Array.isArray(o)) {\n\t\t\tvar s = '';\n\t\t\to.forEach(function (e) {\n\t\t\t\ts += stringify(e, language);\n\t\t\t});\n\t\t\treturn s;\n\t\t}\n\n\t\tvar env = {\n\t\t\ttype: o.type,\n\t\t\tcontent: stringify(o.content, language),\n\t\t\ttag: 'span',\n\t\t\tclasses: ['token', o.type],\n\t\t\tattributes: {},\n\t\t\tlanguage: language\n\t\t};\n\n\t\tvar aliases = o.alias;\n\t\tif (aliases) {\n\t\t\tif (Array.isArray(aliases)) {\n\t\t\t\tArray.prototype.push.apply(env.classes, aliases);\n\t\t\t} else {\n\t\t\t\tenv.classes.push(aliases);\n\t\t\t}\n\t\t}\n\n\t\t_.hooks.run('wrap', env);\n\n\t\tvar attributes = '';\n\t\tfor (var name in env.attributes) {\n\t\t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '&quot;') + '\"';\n\t\t}\n\n\t\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n\t};\n\n\t/**\n\t * @param {RegExp} pattern\n\t * @param {number} pos\n\t * @param {string} text\n\t * @param {boolean} lookbehind\n\t * @returns {RegExpExecArray | null}\n\t */\n\tfunction matchPattern(pattern, pos, text, lookbehind) {\n\t\tpattern.lastIndex = pos;\n\t\tvar match = pattern.exec(text);\n\t\tif (match && lookbehind && match[1]) {\n\t\t\t// change the match to remove the text matched by the Prism lookbehind group\n\t\t\tvar lookbehindLength = match[1].length;\n\t\t\tmatch.index += lookbehindLength;\n\t\t\tmatch[0] = match[0].slice(lookbehindLength);\n\t\t}\n\t\treturn match;\n\t}\n\n\t/**\n\t * @param {string} text\n\t * @param {LinkedList<string | Token>} tokenList\n\t * @param {any} grammar\n\t * @param {LinkedListNode<string | Token>} startNode\n\t * @param {number} startPos\n\t * @param {RematchOptions} [rematch]\n\t * @returns {void}\n\t * @private\n\t *\n\t * @typedef RematchOptions\n\t * @property {string} cause\n\t * @property {number} reach\n\t */\n\tfunction matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {\n\t\tfor (var token in grammar) {\n\t\t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar patterns = grammar[token];\n\t\t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n\t\t\tfor (var j = 0; j < patterns.length; ++j) {\n\t\t\t\tif (rematch && rematch.cause == token + ',' + j) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar patternObj = patterns[j];\n\t\t\t\tvar inside = patternObj.inside;\n\t\t\t\tvar lookbehind = !!patternObj.lookbehind;\n\t\t\t\tvar greedy = !!patternObj.greedy;\n\t\t\t\tvar alias = patternObj.alias;\n\n\t\t\t\tif (greedy && !patternObj.pattern.global) {\n\t\t\t\t\t// Without the global flag, lastIndex won't work\n\t\t\t\t\tvar flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];\n\t\t\t\t\tpatternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');\n\t\t\t\t}\n\n\t\t\t\t/** @type {RegExp} */\n\t\t\t\tvar pattern = patternObj.pattern || patternObj;\n\n\t\t\t\tfor ( // iterate the token list and keep track of the current token/string position\n\t\t\t\t\tvar currentNode = startNode.next, pos = startPos;\n\t\t\t\t\tcurrentNode !== tokenList.tail;\n\t\t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n\t\t\t\t) {\n\n\t\t\t\t\tif (rematch && pos >= rematch.reach) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar str = currentNode.value;\n\n\t\t\t\t\tif (tokenList.length > text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\t\t\t\t\tvar match;\n\n\t\t\t\t\tif (greedy) {\n\t\t\t\t\t\tmatch = matchPattern(pattern, pos, text, lookbehind);\n\t\t\t\t\t\tif (!match || match.index >= text.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index;\n\t\t\t\t\t\tvar to = match.index + match[0].length;\n\t\t\t\t\t\tvar p = pos;\n\n\t\t\t\t\t\t// find the node that contains the match\n\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\twhile (from >= p) {\n\t\t\t\t\t\t\tcurrentNode = currentNode.next;\n\t\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// adjust pos (and p)\n\t\t\t\t\t\tp -= currentNode.value.length;\n\t\t\t\t\t\tpos = p;\n\n\t\t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\tif (currentNode.value instanceof Token) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// find the last node which is affected by this match\n\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\tvar k = currentNode;\n\t\t\t\t\t\t\tk !== tokenList.tail && (p < to || typeof k.value === 'string');\n\t\t\t\t\t\t\tk = k.next\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveCount++;\n\t\t\t\t\t\t\tp += k.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremoveCount--;\n\n\t\t\t\t\t\t// replace with the new match\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatch = matchPattern(pattern, 0, str, lookbehind);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line no-redeclare\n\t\t\t\t\tvar from = match.index;\n\t\t\t\t\tvar matchStr = match[0];\n\t\t\t\t\tvar before = str.slice(0, from);\n\t\t\t\t\tvar after = str.slice(from + matchStr.length);\n\n\t\t\t\t\tvar reach = pos + str.length;\n\t\t\t\t\tif (rematch && reach > rematch.reach) {\n\t\t\t\t\t\trematch.reach = reach;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeFrom = currentNode.prev;\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n\t\t\t\t\t\tpos += before.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n\t\t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);\n\t\t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\taddAfter(tokenList, currentNode, after);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (removeCount > 1) {\n\t\t\t\t\t\t// at least one Token object was removed, so we have to do some rematching\n\t\t\t\t\t\t// this can only happen if the current pattern is greedy\n\n\t\t\t\t\t\t/** @type {RematchOptions} */\n\t\t\t\t\t\tvar nestedRematch = {\n\t\t\t\t\t\t\tcause: token + ',' + j,\n\t\t\t\t\t\t\treach: reach\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);\n\n\t\t\t\t\t\t// the reach might have been extended because of the rematching\n\t\t\t\t\t\tif (rematch && nestedRematch.reach > rematch.reach) {\n\t\t\t\t\t\t\trematch.reach = nestedRematch.reach;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @typedef LinkedListNode\n\t * @property {T} value\n\t * @property {LinkedListNode<T> | null} prev The previous node.\n\t * @property {LinkedListNode<T> | null} next The next node.\n\t * @template T\n\t * @private\n\t */\n\n\t/**\n\t * @template T\n\t * @private\n\t */\n\tfunction LinkedList() {\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar head = { value: null, prev: null, next: null };\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar tail = { value: null, prev: head, next: null };\n\t\thead.next = tail;\n\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.head = head;\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.tail = tail;\n\t\tthis.length = 0;\n\t}\n\n\t/**\n\t * Adds a new node with the given value to the list.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {T} value\n\t * @returns {LinkedListNode<T>} The added node.\n\t * @template T\n\t */\n\tfunction addAfter(list, node, value) {\n\t\t// assumes that node != list.tail && values.length >= 0\n\t\tvar next = node.next;\n\n\t\tvar newNode = { value: value, prev: node, next: next };\n\t\tnode.next = newNode;\n\t\tnext.prev = newNode;\n\t\tlist.length++;\n\n\t\treturn newNode;\n\t}\n\t/**\n\t * Removes `count` nodes after the given node. The given node will not be removed.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {number} count\n\t * @template T\n\t */\n\tfunction removeRange(list, node, count) {\n\t\tvar next = node.next;\n\t\tfor (var i = 0; i < count && next !== list.tail; i++) {\n\t\t\tnext = next.next;\n\t\t}\n\t\tnode.next = next;\n\t\tnext.prev = node;\n\t\tlist.length -= i;\n\t}\n\t/**\n\t * @param {LinkedList<T>} list\n\t * @returns {T[]}\n\t * @template T\n\t */\n\tfunction toArray(list) {\n\t\tvar array = [];\n\t\tvar node = list.head.next;\n\t\twhile (node !== list.tail) {\n\t\t\tarray.push(node.value);\n\t\t\tnode = node.next;\n\t\t}\n\t\treturn array;\n\t}\n\n\n\tif (!_self.document) {\n\t\tif (!_self.addEventListener) {\n\t\t\t// in Node.js\n\t\t\treturn _;\n\t\t}\n\n\t\tif (!_.disableWorkerMessageHandler) {\n\t\t\t// In worker\n\t\t\t_self.addEventListener('message', function (evt) {\n\t\t\t\tvar message = JSON.parse(evt.data);\n\t\t\t\tvar lang = message.language;\n\t\t\t\tvar code = message.code;\n\t\t\t\tvar immediateClose = message.immediateClose;\n\n\t\t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\t\t\tif (immediateClose) {\n\t\t\t\t\t_self.close();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t}\n\n\t\treturn _;\n\t}\n\n\t// Get current script and highlight\n\tvar script = _.util.currentScript();\n\n\tif (script) {\n\t\t_.filename = script.src;\n\n\t\tif (script.hasAttribute('data-manual')) {\n\t\t\t_.manual = true;\n\t\t}\n\t}\n\n\tfunction highlightAutomaticallyCallback() {\n\t\tif (!_.manual) {\n\t\t\t_.highlightAll();\n\t\t}\n\t}\n\n\tif (!_.manual) {\n\t\t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n\t\t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n\t\t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n\t\t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n\t\t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n\t\t// See https://github.com/PrismJS/prism/issues/2102\n\t\tvar readyState = document.readyState;\n\t\tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n\t\t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n\t\t} else {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn _;\n\n}(_self));\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n// some additional documentation/types\n\n/**\n * The expansion of a simple `RegExp` literal to support additional properties.\n *\n * @typedef GrammarToken\n * @property {RegExp} pattern The regular expression of the token.\n * @property {boolean} [lookbehind=false] If `true`, then the first capturing group of `pattern` will (effectively)\n * behave as a lookbehind group meaning that the captured text will not be part of the matched text of the new token.\n * @property {boolean} [greedy=false] Whether the token is greedy.\n * @property {string|string[]} [alias] An optional alias or list of aliases.\n * @property {Grammar} [inside] The nested grammar of this token.\n *\n * The `inside` grammar will be used to tokenize the text value of each token of this kind.\n *\n * This can be used to make nested and even recursive language definitions.\n *\n * Note: This can cause infinite recursion. Be careful when you embed different languages or even the same language into\n * each another.\n * @global\n * @public\n */\n\n/**\n * @typedef Grammar\n * @type {Object<string, RegExp | GrammarToken | Array<RegExp | GrammarToken>>}\n * @property {Grammar} [rest] An optional grammar object that will be appended to this grammar.\n * @global\n * @public\n */\n\n/**\n * A function which will invoked after an element was successfully highlighted.\n *\n * @callback HighlightCallback\n * @param {Element} element The element successfully highlighted.\n * @returns {void}\n * @global\n * @public\n */\n\n/**\n * @callback HookCallback\n * @param {Object<string, any>} env The environment variables of the hook.\n * @returns {void}\n * @global\n * @public\n */\n\n\n/* **********************************************\n     Begin prism-markup.js\n********************************************** */\n\nPrism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n\n\n/* **********************************************\n     Begin prism-css.js\n********************************************** */\n\n(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n\n\n/* **********************************************\n     Begin prism-clike.js\n********************************************** */\n\nPrism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\n\n/* **********************************************\n     Begin prism-javascript.js\n********************************************** */\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n\n\n/* **********************************************\n     Begin prism-file-highlight.js\n********************************************** */\n\n(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\n\tvar LOADING_MESSAGE = 'Loading…';\n\tvar FAILURE_MESSAGE = function (status, message) {\n\t\treturn '✖ Error ' + status + ' while fetching file: ' + message;\n\t};\n\tvar FAILURE_EMPTY_MESSAGE = '✖ Error: File does not exist or is empty';\n\n\tvar EXTENSIONS = {\n\t\t'js': 'javascript',\n\t\t'py': 'python',\n\t\t'rb': 'ruby',\n\t\t'ps1': 'powershell',\n\t\t'psm1': 'powershell',\n\t\t'sh': 'bash',\n\t\t'bat': 'batch',\n\t\t'h': 'c',\n\t\t'tex': 'latex'\n\t};\n\n\tvar STATUS_ATTR = 'data-src-status';\n\tvar STATUS_LOADING = 'loading';\n\tvar STATUS_LOADED = 'loaded';\n\tvar STATUS_FAILED = 'failed';\n\n\tvar SELECTOR = 'pre[data-src]:not([' + STATUS_ATTR + '=\"' + STATUS_LOADED + '\"])'\n\t\t+ ':not([' + STATUS_ATTR + '=\"' + STATUS_LOADING + '\"])';\n\n\t/**\n\t * Loads the given file.\n\t *\n\t * @param {string} src The URL or path of the source file to load.\n\t * @param {(result: string) => void} success\n\t * @param {(reason: string) => void} error\n\t */\n\tfunction loadFile(src, success, error) {\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', src, true);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState == 4) {\n\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\tsuccess(xhr.responseText);\n\t\t\t\t} else {\n\t\t\t\t\tif (xhr.status >= 400) {\n\t\t\t\t\t\terror(FAILURE_MESSAGE(xhr.status, xhr.statusText));\n\t\t\t\t\t} else {\n\t\t\t\t\t\terror(FAILURE_EMPTY_MESSAGE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\txhr.send(null);\n\t}\n\n\t/**\n\t * Parses the given range.\n\t *\n\t * This returns a range with inclusive ends.\n\t *\n\t * @param {string | null | undefined} range\n\t * @returns {[number, number | undefined] | undefined}\n\t */\n\tfunction parseRange(range) {\n\t\tvar m = /^\\s*(\\d+)\\s*(?:(,)\\s*(?:(\\d+)\\s*)?)?$/.exec(range || '');\n\t\tif (m) {\n\t\t\tvar start = Number(m[1]);\n\t\t\tvar comma = m[2];\n\t\t\tvar end = m[3];\n\n\t\t\tif (!comma) {\n\t\t\t\treturn [start, start];\n\t\t\t}\n\t\t\tif (!end) {\n\t\t\t\treturn [start, undefined];\n\t\t\t}\n\t\t\treturn [start, Number(end)];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tPrism.hooks.add('before-highlightall', function (env) {\n\t\tenv.selector += ', ' + SELECTOR;\n\t});\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar pre = /** @type {HTMLPreElement} */ (env.element);\n\t\tif (pre.matches(SELECTOR)) {\n\t\t\tenv.code = ''; // fast-path the whole thing and go to complete\n\n\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADING); // mark as loading\n\n\t\t\t// add code element with loading message\n\t\t\tvar code = pre.appendChild(document.createElement('CODE'));\n\t\t\tcode.textContent = LOADING_MESSAGE;\n\n\t\t\tvar src = pre.getAttribute('data-src');\n\n\t\t\tvar language = env.language;\n\t\t\tif (language === 'none') {\n\t\t\t\t// the language might be 'none' because there is no language set;\n\t\t\t\t// in this case, we want to use the extension as the language\n\t\t\t\tvar extension = (/\\.(\\w+)$/.exec(src) || [, 'none'])[1];\n\t\t\t\tlanguage = EXTENSIONS[extension] || extension;\n\t\t\t}\n\n\t\t\t// set language classes\n\t\t\tPrism.util.setLanguage(code, language);\n\t\t\tPrism.util.setLanguage(pre, language);\n\n\t\t\t// preload the language\n\t\t\tvar autoloader = Prism.plugins.autoloader;\n\t\t\tif (autoloader) {\n\t\t\t\tautoloader.loadLanguages(language);\n\t\t\t}\n\n\t\t\t// load file\n\t\t\tloadFile(\n\t\t\t\tsrc,\n\t\t\t\tfunction (text) {\n\t\t\t\t\t// mark as loaded\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADED);\n\n\t\t\t\t\t// handle data-range\n\t\t\t\t\tvar range = parseRange(pre.getAttribute('data-range'));\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\tvar lines = text.split(/\\r\\n?|\\n/g);\n\n\t\t\t\t\t\t// the range is one-based and inclusive on both ends\n\t\t\t\t\t\tvar start = range[0];\n\t\t\t\t\t\tvar end = range[1] == null ? lines.length : range[1];\n\n\t\t\t\t\t\tif (start < 0) { start += lines.length; }\n\t\t\t\t\t\tstart = Math.max(0, Math.min(start - 1, lines.length));\n\t\t\t\t\t\tif (end < 0) { end += lines.length; }\n\t\t\t\t\t\tend = Math.max(0, Math.min(end, lines.length));\n\n\t\t\t\t\t\ttext = lines.slice(start, end).join('\\n');\n\n\t\t\t\t\t\t// add data-start for line numbers\n\t\t\t\t\t\tif (!pre.hasAttribute('data-start')) {\n\t\t\t\t\t\t\tpre.setAttribute('data-start', String(start + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// highlight code\n\t\t\t\t\tcode.textContent = text;\n\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\t// mark as failed\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_FAILED);\n\n\t\t\t\t\tcode.textContent = error;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\n\tPrism.plugins.fileHighlight = {\n\t\t/**\n\t\t * Executes the File Highlight plugin for all matching `pre` elements under the given container.\n\t\t *\n\t\t * Note: Elements which are already loaded or currently loading will not be touched by this method.\n\t\t *\n\t\t * @param {ParentNode} [container=document]\n\t\t */\n\t\thighlight: function highlight(container) {\n\t\t\tvar elements = (container || document).querySelectorAll(SELECTOR);\n\n\t\t\tfor (var i = 0, element; (element = elements[i++]);) {\n\t\t\t\tPrism.highlightElement(element);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar logged = false;\n\t/** @deprecated Use `Prism.plugins.fileHighlight.highlight` instead. */\n\tPrism.fileHighlight = function () {\n\t\tif (!logged) {\n\t\t\tconsole.warn('Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead.');\n\t\t\tlogged = true;\n\t\t}\n\t\tPrism.plugins.fileHighlight.highlight.apply(this, arguments);\n\t};\n\n}());\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { hash } from '@ember/helper';\nimport { modifier } from 'ember-modifier';\nimport { or } from 'ember-truth-helpers';\nimport { tracked } from '@glimmer/tracking';\n// @ts-expect-error: missing types https://github.com/josemarluedke/ember-focus-trap/issues/86\nimport focusTrap from 'ember-focus-trap/modifiers/focus-trap';\n\nimport type { EditorView } from '@codemirror/view';\nimport type { WithBoundArgs } from '@glint/template';\nimport type Owner from '@ember/owner';\n\nimport hdsCodeEditorModifier from '../../../modifiers/hds-code-editor.ts';\nimport HdsCodeEditorDescription from './description.gts';\nimport HdsCodeEditorFullScreenButton from './full-screen-button.gts';\nimport HdsCodeEditorGeneric from './generic.gts';\nimport HdsCodeEditorTitle from './title.gts';\nimport HdsCopyButton from '../copy/button/index.gts';\nimport HdsIcon from '../icon/index.gts';\nimport hdsT from '../../../helpers/hds-t.ts';\n\nimport type { HdsCodeEditorDescriptionSignature } from './description.gts';\nimport type { HdsCodeEditorSignature as HdsCodeEditorModifierSignature } from '../../../modifiers/hds-code-editor.ts';\nimport type { HdsCodeEditorTitleSignature } from './title.gts';\nimport type { HdsCopyButtonSignature } from '../copy/button/index.gts';\n\nexport interface HdsCodeEditorSignature {\n  Args: {\n    hasCopyButton?: boolean;\n    hasFullScreenButton?: boolean;\n    isStandalone?: boolean;\n    copyButtonText?: HdsCopyButtonSignature['Args']['text'];\n  } & HdsCodeEditorModifierSignature['Args']['Named'];\n  Blocks: {\n    default: [\n      {\n        Title?: WithBoundArgs<\n          typeof HdsCodeEditorTitle,\n          'onInsert' | 'editorId'\n        >;\n        Description?: WithBoundArgs<\n          typeof HdsCodeEditorDescription,\n          'onInsert' | 'editorId'\n        >;\n        Generic?: typeof HdsCodeEditorGeneric;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsCodeEditor extends Component<HdsCodeEditorSignature> {\n  @tracked private _isFullScreen = false;\n  @tracked private _isSetupComplete = false;\n  @tracked private _value;\n  @tracked private _titleId: string | undefined;\n  @tracked private _descriptionId: string | undefined;\n\n  private _id = guidFor(this);\n\n  private _handleEscape = modifier(() => {\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key !== 'Escape' || !this._isFullScreen) {\n        return;\n      }\n\n      this.toggleFullScreen();\n    };\n\n    document.addEventListener('keydown', handleKeyDown);\n\n    return () => {\n      document.removeEventListener('keydown', handleKeyDown);\n    };\n  });\n\n  constructor(owner: Owner, args: HdsCodeEditorSignature['Args']) {\n    super(owner, args);\n\n    if (args.value) {\n      this._value = args.value;\n    }\n  }\n\n  get ariaLabelledBy(): string | undefined {\n    if (this.args.ariaLabel !== undefined) {\n      return;\n    }\n\n    return this.args.ariaLabelledBy ?? this._titleId;\n  }\n\n  get ariaDescribedBy(): string | undefined {\n    return this.args.ariaDescribedBy ?? this._descriptionId;\n  }\n\n  get hasActions(): boolean {\n    return (this.args.hasCopyButton || this.args.hasFullScreenButton) ?? false;\n  }\n\n  get isStandalone(): boolean {\n    return this.args.isStandalone ?? true;\n  }\n\n  get classNames(): string {\n    // Currently there is only one theme so the class name is hard-coded.\n    // In the future, additional themes such as a \"light\" theme could be added.\n    const classes = ['hds-code-editor', 'hds-code-editor--theme-dark'];\n\n    if (this._isFullScreen) {\n      classes.push('hds-code-editor--is-full-screen');\n    }\n\n    if (this.isStandalone) {\n      classes.push('hds-code-editor--is-standalone');\n    }\n\n    return classes.join(' ');\n  }\n\n  get copyButtonText(): HdsCopyButtonSignature['Args']['text'] {\n    return this.args.copyButtonText ? this.args.copyButtonText : 'Copy';\n  }\n\n  registerTitleElement = (\n    element: HdsCodeEditorTitleSignature['Element']\n  ): void => {\n    this._titleId = element.id;\n  };\n\n  registerDescriptionElement = (\n    element: HdsCodeEditorDescriptionSignature['Element']\n  ): void => {\n    this._descriptionId = element.id;\n  };\n\n  toggleFullScreen = (): void => {\n    this._isFullScreen = !this._isFullScreen;\n  };\n\n  onInput = (newValue: string, editorView: EditorView): void => {\n    this._value = newValue;\n    this.args.onInput?.(newValue, editorView);\n  };\n\n  onKeyDown = (event: KeyboardEvent): void => {\n    if (event.key === 'Escape' && this._isFullScreen) {\n      this.toggleFullScreen();\n    }\n  };\n\n  onSetup = (editorView: EditorView): void => {\n    this._isSetupComplete = true;\n    this.args.onSetup?.(editorView);\n  };\n\n  <template>\n    <div\n      id={{this._id}}\n      class={{this.classNames}}\n      {{focusTrap isActive=this._isFullScreen}}\n      {{this._handleEscape}}\n      ...attributes\n    >\n      {{! header }}\n      {{#if (or this.hasActions (has-block))}}\n        <div class=\"hds-code-editor__header\">\n          <div class=\"hds-code-editor__header-content\">\n            {{yield\n              (hash\n                Title=(component\n                  HdsCodeEditorTitle\n                  editorId=this._id\n                  onInsert=this.registerTitleElement\n                )\n                Description=(component\n                  HdsCodeEditorDescription\n                  editorId=this._id\n                  onInsert=this.registerDescriptionElement\n                )\n                Generic=HdsCodeEditorGeneric\n              )\n            }}\n          </div>\n\n          {{#if this.hasActions}}\n            <div class=\"hds-code-editor__header-actions\">\n              {{#if @hasCopyButton}}\n                <HdsCopyButton\n                  class=\"hds-code-editor__button hds-code-editor__copy-button\"\n                  @isIconOnly={{true}}\n                  @size=\"small\"\n                  @text={{this.copyButtonText}}\n                  @textToCopy={{this._value}}\n                />\n              {{/if}}\n              {{#if @hasFullScreenButton}}\n                <HdsCodeEditorFullScreenButton\n                  @isFullScreen={{this._isFullScreen}}\n                  @onToggleFullScreen={{this.toggleFullScreen}}\n                />\n              {{/if}}\n            </div>\n          {{/if}}\n        </div>\n      {{/if}}\n\n      {{! editor }}\n      <div\n        class=\"hds-code-editor__editor\"\n        {{hdsCodeEditorModifier\n          ariaDescribedBy=this.ariaDescribedBy\n          ariaLabel=@ariaLabel\n          ariaLabelledBy=this.ariaLabelledBy\n          customExtensions=@customExtensions\n          cspNonce=@cspNonce\n          extraKeys=@extraKeys\n          hasLineWrapping=@hasLineWrapping\n          isLintingEnabled=@isLintingEnabled\n          language=@language\n          value=@value\n          onBlur=@onBlur\n          onInput=this.onInput\n          onSetup=this.onSetup\n          onLint=@onLint\n        }}\n      />\n\n      {{! loader }}\n      {{#unless this._isSetupComplete}}\n        <div class=\"hds-code-editor__loader\" aria-live=\"polite\" role=\"status\">\n          <HdsIcon @name=\"loading\" @size=\"24\" />\n          <span class=\"sr-only\">{{hdsT\n              \"hds.components.common.loading\"\n              default=\"Loading\"\n            }}</span>\n        </div>\n      {{/unless}}\n    </div>\n  </template>\n}\n","import Scheduler from '../external/scheduler/scheduler';\nimport { once } from '@ember/runloop';\n\nclass EmberScheduler extends Scheduler {\n  scheduleRefresh() {\n    once(this, this.refresh);\n  }\n}\n\nexport default EmberScheduler;\n","import { assert, deprecate } from '@ember/debug';\nimport { get } from '@ember/object';\nimport { addListener } from '@ember/object/events';\nimport { addObserver } from '@ember/object/observers';\nimport { scheduleOnce } from '@ember/runloop';\nimport {\n  TaskFactory as BaseTaskFactory,\n  registerModifier,\n} from './external/task-factory';\n\nimport { EMBER_ENVIRONMENT } from './ember-environment';\nimport EmberScheduler from './scheduler/ember-scheduler';\nimport { EncapsulatedTask, Task } from './task';\nimport { TaskGroup } from './task-group';\nimport { TaskProperty } from './task-properties';\n\nlet handlerCounter = 0;\n\nfunction registerOnPrototype(\n  addListenerOrObserver,\n  proto,\n  names,\n  taskName,\n  taskMethod,\n  once,\n) {\n  if (names && names.length > 0) {\n    for (let i = 0; i < names.length; ++i) {\n      let name = names[i];\n\n      let handlerName = `__ember_concurrency_handler_${handlerCounter++}`;\n      proto[handlerName] = makeTaskCallback(taskName, taskMethod, once);\n      addListenerOrObserver(proto, name, null, handlerName);\n    }\n  }\n}\n\nfunction makeTaskCallback(taskName, method, once) {\n  return function () {\n    let task = get(this, taskName);\n\n    if (once) {\n      scheduleOnce('actions', task, method, ...arguments);\n    } else {\n      task[method].apply(task, arguments);\n    }\n  };\n}\n\nconst ensureArray = (possibleArr) =>\n  Array.isArray(possibleArr) ? possibleArr : [possibleArr];\n\nregisterModifier('cancelOn', (factory, eventNames) =>\n  factory.addCancelEvents(...ensureArray(eventNames)),\n);\nregisterModifier('observes', (factory, propertyPaths) =>\n  factory.addObserverKeys(...ensureArray(propertyPaths)),\n);\nregisterModifier('on', (factory, eventNames) =>\n  factory.addPerformEvents(...ensureArray(eventNames)),\n);\n\nexport class TaskFactory extends BaseTaskFactory {\n  env = EMBER_ENVIRONMENT;\n\n  createTask(context) {\n    assert(\n      `Cannot create task if a task definition is not provided as generator function or encapsulated task.`,\n      this.taskDefinition,\n    );\n\n    let options = this.getTaskOptions(context);\n\n    if (typeof this.taskDefinition === 'object') {\n      return new EncapsulatedTask(\n        Object.assign({ taskObj: this.taskDefinition }, options),\n      );\n    } else {\n      return new Task(\n        Object.assign(\n          {\n            generatorFactory: (args) =>\n              this.taskDefinition.apply(context, args),\n          },\n          options,\n        ),\n      );\n    }\n  }\n\n  createTaskGroup(context) {\n    assert(\n      `A task definition is not expected for a task group.`,\n      !this.taskDefinition,\n    );\n\n    deprecate(\n      'Task Groups are deprecated. There is no direct replacement for Task Groups and some refactoring may be necessary.',\n      false,\n      {\n        id: 'ember-concurrency.deprecate-task-group',\n        for: 'ember-concurrency',\n        since: '4.0.5',\n        until: '5.0.0',\n      },\n    );\n\n    let options = this.getTaskOptions(context);\n\n    return new TaskGroup(options);\n  }\n\n  addCancelEvents(...cancelEventNames) {\n    this._cancelEventNames = this._cancelEventNames || [];\n    this._cancelEventNames.push(...cancelEventNames);\n    return this;\n  }\n\n  addObserverKeys(...keys) {\n    this._observes = this._observes || [];\n    this._observes.push(...keys);\n    return this;\n  }\n\n  addPerformEvents(...eventNames) {\n    this._eventNames = this._eventNames || [];\n    this._eventNames.push(...eventNames);\n    return this;\n  }\n\n  getModifier(name) {\n    let modifier = super.getModifier(name);\n    if (!modifier && typeof TaskProperty.prototype[name] === 'function') {\n      // Shim for compatibility with user-defined TaskProperty prototype\n      // extensions. To be removed when replaced with proper public API.\n      modifier = TaskProperty.prototype[name].bind(this);\n    }\n\n    assert(\n      `Task option '${name}' is not recognized as a supported option.`,\n      modifier,\n    );\n\n    return modifier;\n  }\n\n  getScheduler(schedulerPolicy, stateTrackingEnabled) {\n    return new EmberScheduler(schedulerPolicy, stateTrackingEnabled);\n  }\n\n  _setupEmberKVO(proto) {\n    // TODO: Does this make sense in a post-Ember object world?\n\n    registerOnPrototype(\n      addListener,\n      proto,\n      this._eventNames,\n      this.name,\n      'perform',\n      false,\n    );\n    registerOnPrototype(\n      addListener,\n      proto,\n      this._cancelEventNames,\n      this.name,\n      'cancelAll',\n      false,\n    );\n    registerOnPrototype(\n      addObserver,\n      proto,\n      this._observes,\n      this.name,\n      'perform',\n      true,\n    );\n  }\n\n  // Provided for compatibility with ember-concurrency TaskProperty extension\n  // methods\n  get taskFn() {\n    return this.taskDefinition;\n  }\n\n  set taskFn(fn) {\n    this.setTaskDefinition(fn);\n  }\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { buildWaiter } from '@ember/test-waiters';\nimport { modifier } from 'ember-modifier';\nimport { hash } from '@ember/helper';\n// @ts-expect-error: missing types https://github.com/josemarluedke/ember-focus-trap/issues/86\nimport focusTrap from 'ember-focus-trap/modifiers/focus-trap';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport { HdsFlyoutSizesValues } from './types.ts';\nimport HdsDialogPrimitiveBody from '../dialog-primitive/body.gts';\nimport HdsDialogPrimitiveDescription from '../dialog-primitive/description.gts';\nimport HdsDialogPrimitiveFooter from '../dialog-primitive/footer.gts';\nimport HdsDialogPrimitiveHeader from '../dialog-primitive/header.gts';\nimport HdsDialogPrimitiveOverlay from '../dialog-primitive/overlay.gts';\nimport HdsDialogPrimitiveWrapper from '../dialog-primitive/wrapper.gts';\nimport { getElementId } from '../../../utils/hds-get-element-id.ts';\n\nimport type { HdsFlyoutSizes } from './types.ts';\n\nconst waiter = buildWaiter('@hashicorp/design-system-components:flyout');\n\nexport const DEFAULT_SIZE = HdsFlyoutSizesValues.Medium;\nexport const DEFAULT_HAS_OVERLAY = true;\nexport const SIZES: HdsFlyoutSizes[] = Object.values(HdsFlyoutSizesValues);\n\nexport interface HdsFlyoutSignature {\n  Args: {\n    size?: HdsFlyoutSizes;\n    returnFocusTo?: string;\n    onOpen?: () => void;\n    onClose?: (event: Event) => void;\n  };\n  Blocks: {\n    default: [\n      {\n        Header?: WithBoundArgs<\n          typeof HdsDialogPrimitiveHeader,\n          'id' | 'onDismiss' | 'contextualClassPrefix'\n        >;\n        Description?: WithBoundArgs<\n          typeof HdsDialogPrimitiveDescription,\n          'contextualClass'\n        >;\n        Body?: WithBoundArgs<typeof HdsDialogPrimitiveBody, 'contextualClass'>;\n        Footer?: WithBoundArgs<\n          typeof HdsDialogPrimitiveFooter,\n          'onDismiss' | 'contextualClass'\n        >;\n      },\n    ];\n  };\n  Element: HTMLDialogElement;\n}\n\nexport default class HdsFlyout extends Component<HdsFlyoutSignature> {\n  @tracked private _isOpen = false;\n  // TODO: make this property private; currently blocked by our consumers relying on it despite not being part of the public API: https://github.com/hashicorp/cloud-ui/blob/main/engines/waypoint/addon/components/preview-pane.ts#L15\n  // private _element!: HTMLDialogElement;\n  _element!: HTMLDialogElement;\n  private _body!: HTMLElement;\n  private _bodyInitialOverflowValue = '';\n\n  get size(): HdsFlyoutSizes {\n    const { size = DEFAULT_SIZE } = this.args;\n\n    assert(\n      `@size for \"Hds::Flyout\" must be one of the following: ${SIZES.join(\n        ', '\n      )}; received: ${size}`,\n      SIZES.includes(size)\n    );\n\n    return size;\n  }\n\n  get id(): string {\n    return getElementId(this);\n  }\n\n  get classNames(): string {\n    const classes = ['hds-flyout'];\n\n    // add a class based on the @size argument\n    classes.push(`hds-flyout--size-${this.size}`);\n\n    return classes.join(' ');\n  }\n\n  private _performCloseCleanup() {\n    this._isOpen = false;\n\n    // Reset page `overflow` property\n    if (this._body) {\n      this._body.style.removeProperty('overflow');\n      if (this._bodyInitialOverflowValue === '') {\n        if (this._body.style.length === 0) {\n          this._body.removeAttribute('style');\n        }\n      } else {\n        this._body.style.setProperty(\n          'overflow',\n          this._bodyInitialOverflowValue\n        );\n      }\n    }\n\n    // Return focus to a specific element (if provided)\n    if (this.args.returnFocusTo) {\n      const initiator = document.getElementById(this.args.returnFocusTo);\n      if (initiator) {\n        initiator.focus();\n      }\n    }\n  }\n\n  private _registerDialog = modifier((element: HTMLDialogElement) => {\n    // Store references of `<dialog>` and `<body>` elements\n    this._element = element;\n    this._body = document.body;\n\n    if (this._body) {\n      // Store the initial `overflow` value of `<body>` so we can reset to it\n      this._bodyInitialOverflowValue =\n        this._body.style.getPropertyValue('overflow');\n    }\n\n    // Register \"onClose\" callback function to be called when a native 'close' event is dispatched\n\n    this._element.addEventListener('close', this.registerOnCloseCallback, true);\n\n    // If the flyout dialog is not already open\n    if (!this._element.open) {\n      this.open();\n    }\n\n    return () => {\n      // if the <dialog> is removed from the dom while open we emulate the close event\n      if (this._isOpen) {\n        this._performCloseCleanup();\n      }\n\n      this._element?.removeEventListener(\n        'close',\n\n        this.registerOnCloseCallback,\n        true\n      );\n    };\n  });\n\n  registerOnCloseCallback = (event: Event) => {\n    if (this.args.onClose && typeof this.args.onClose === 'function') {\n      this.args.onClose(event);\n    }\n\n    this._performCloseCleanup();\n  };\n\n  open = (): void => {\n    // Make flyout dialog visible using the native `showModal` method\n    this._element.showModal();\n    this._isOpen = true;\n\n    // Prevent page from scrolling when the dialog is open\n    if (this._body) this._body.style.setProperty('overflow', 'hidden');\n\n    // Call \"onOpen\" callback function\n    if (this.args.onOpen && typeof this.args.onOpen === 'function') {\n      this.args.onOpen();\n    }\n  };\n\n  onDismiss = (): void => {\n    // allow ember test helpers to be aware of when the `close` event fires\n    // when using `click` or other helpers from '@ember/test-helpers'\n    if (this._element.open) {\n      const token = waiter.beginAsync();\n      const listener = () => {\n        waiter.endAsync(token);\n        this._element.removeEventListener('close', listener);\n      };\n      this._element.addEventListener('close', listener);\n    }\n\n    // Make flyout dialog invisible using the native `close` method\n    this._element.close();\n  };\n\n  <template>\n    <HdsDialogPrimitiveWrapper\n      class={{this.classNames}}\n      ...attributes\n      aria-labelledby={{this.id}}\n      {{this._registerDialog}}\n      {{focusTrap\n        isActive=this._isOpen\n        focusTrapOptions=(hash\n          onDeactivate=this.onDismiss clickOutsideDeactivates=true\n        )\n      }}\n    >\n      <:header>\n        {{yield\n          (hash\n            Header=(component\n              HdsDialogPrimitiveHeader\n              id=this.id\n              onDismiss=this.onDismiss\n              contextualClassPrefix=\"hds-flyout\"\n              titleTag=\"h1\"\n            )\n            Description=(component\n              HdsDialogPrimitiveDescription\n              contextualClass=\"hds-flyout__description\"\n            )\n          )\n        }}\n      </:header>\n      <:body>\n        {{yield\n          (hash\n            Body=(component\n              HdsDialogPrimitiveBody contextualClass=\"hds-flyout__body\"\n            )\n          )\n        }}\n      </:body>\n      <:footer>\n        {{yield\n          (hash\n            Footer=(component\n              HdsDialogPrimitiveFooter\n              onDismiss=this.onDismiss\n              contextualClass=\"hds-flyout__footer\"\n            )\n          )\n        }}\n      </:footer>\n    </HdsDialogPrimitiveWrapper>\n\n    {{#if this._isOpen}}\n      <HdsDialogPrimitiveOverlay @contextualClass=\"hds-flyout__overlay\" />\n    {{/if}}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport { hash } from '@ember/helper';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport HdsFormFieldset from '../fieldset/index.gts';\nimport HdsFormCheckboxField from './field.gts';\n\nimport type { HdsFormFieldsetSignature } from '../fieldset/index.gts';\n\nexport interface HdsFormCheckboxGroupSignature {\n  Args: HdsFormFieldsetSignature['Args'] & {\n    name?: string;\n  };\n  Blocks: {\n    default: [\n      {\n        Legend?: HdsFormFieldsetSignature['Blocks']['default'][0]['Legend'];\n        HelperText?: HdsFormFieldsetSignature['Blocks']['default'][0]['HelperText'];\n        CheckboxField?: WithBoundArgs<\n          typeof HdsFormCheckboxField,\n          'isRequired' | 'name' | 'extraAriaDescribedBy' | 'contextualClass'\n        >;\n        Error?: HdsFormFieldsetSignature['Blocks']['default'][0]['Error'];\n      },\n    ];\n  };\n  Element: HdsFormFieldsetSignature['Element'];\n}\n\nconst HdsFormCheckboxGroup: TemplateOnlyComponent<HdsFormCheckboxGroupSignature> =\n  <template>\n    <HdsFormFieldset\n      @layout={{@layout}}\n      @isRequired={{@isRequired}}\n      @isOptional={{@isOptional}}\n      ...attributes\n      as |F|\n    >\n      {{! Notice: the order of the elements is not relevant here, because it's controlled at \"HdsFormFieldset\" component level }}\n      {{yield (hash Legend=F.Legend HelperText=F.HelperText Error=F.Error)}}\n      <F.Control>\n        {{yield\n          (hash\n            CheckboxField=(component\n              HdsFormCheckboxField\n              contextualClass=\"hds-form-group__control-field\"\n              isRequired=@isRequired\n              name=@name\n              extraAriaDescribedBy=F.ariaDescribedBy\n            )\n          )\n        }}\n      </F.Control>\n    </HdsFormFieldset>\n  </template>;\n\nexport default HdsFormCheckboxGroup;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport { hash } from '@ember/helper';\n\nimport HdsFormField from '../field/index.gts';\nimport HdsFormFileInputBase from './base.gts';\n\nimport type { HdsFormFieldSignature } from '../field/index.gts';\nimport type { HdsFormFileInputBaseSignature } from './base.gts';\n\nexport interface HdsFormFileInputFieldSignature {\n  Args: Omit<HdsFormFieldSignature['Args'], 'contextualClass' | 'layout'>;\n  Blocks: {\n    default: [\n      {\n        Label?: HdsFormFieldSignature['Blocks']['default'][0]['Label'];\n        HelperText?: HdsFormFieldSignature['Blocks']['default'][0]['HelperText'];\n        Error?: HdsFormFieldSignature['Blocks']['default'][0]['Error'];\n      },\n    ];\n  };\n  Element: HdsFormFileInputBaseSignature['Element'];\n}\n\nconst HdsFormFileInputField: TemplateOnlyComponent<HdsFormFileInputFieldSignature> =\n  <template>\n    <HdsFormField\n      @layout=\"vertical\"\n      @extraAriaDescribedBy={{@extraAriaDescribedBy}}\n      @isRequired={{@isRequired}}\n      @isOptional={{@isOptional}}\n      @id={{@id}}\n      as |F|\n    >\n      {{! Notice: the order of the elements is not relevant here, because is controlled at \"HdsFormField\" component level }}\n      {{yield (hash Label=F.Label HelperText=F.HelperText Error=F.Error)}}\n      <F.Control>\n        <HdsFormFileInputBase\n          required={{@isRequired}}\n          ...attributes\n          id={{F.id}}\n          aria-describedby={{F.ariaDescribedBy}}\n        />\n      </F.Control>\n    </HdsFormField>\n  </template>;\n\nexport default HdsFormFileInputField;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { schedule } from '@ember/runloop';\nimport { modifier } from 'ember-modifier';\nimport { hash, concat } from '@ember/helper';\nimport { guidFor } from '@ember/object/internals';\nimport { eq } from 'ember-truth-helpers';\nimport style from 'ember-style-modifier';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport {\n  ariaDescribedBy,\n  registerAriaDescriptionElement,\n  unregisterAriaDescriptionElement,\n} from '../../../../utils/hds-aria-described-by.ts';\nimport HdsAlert from '../../alert/index.gts';\nimport HdsFormError from '../error/index.gts';\nimport HdsFormHelperText from '../helper-text/index.gts';\nimport HdsFormKeyValueInputsDeleteRowButton from './delete-row-button.gts';\nimport HdsFormKeyValueInputsField from './field.gts';\nimport HdsFormKeyValueInputsGeneric from './generic.gts';\nimport HdsFormLegend from '../legend/index.gts';\nimport HdsYield from '../../yield/index.gts';\nimport HdsFormKeyValueInputsAddRowButton from './add-row-button.gts';\n\nimport type { AriaDescribedByComponent } from '../../../../utils/hds-aria-described-by.ts';\n\nconst KEY_VALUE_INPUTS_FIELD_SELECTOR = '.hds-form-key-value-inputs__field';\nconst KEY_VALUE_INPUTS_GENERIC_SELECTOR =\n  '.hds-form-key-value-inputs__generic-container';\nconst KEY_VALUE_INPUTS_FIRST_ROW_SELECTOR =\n  '.hds-form-key-value-inputs__row--first';\nconst KEY_VALUE_INPUTS_DELETE_ROW_CONTAINER_SELECTOR =\n  '.hds-form-key-value-inputs__delete-row-button-container';\n\nexport interface HdsFormKeyValueInputsSignature<T = unknown> {\n  Args: {\n    data: Array<T>;\n    extraAriaDescribedBy?: string;\n    isOptional?: boolean;\n    isRequired?: boolean;\n  };\n  Blocks: {\n    header?: [\n      {\n        Legend?: WithBoundArgs<\n          typeof HdsFormLegend,\n          'contextualClass' | 'id' | 'isOptional' | 'isRequired'\n        >;\n        HelperText?: WithBoundArgs<\n          typeof HdsFormHelperText,\n          'contextualClass' | 'controlId' | 'onInsert'\n        >;\n        Generic?: typeof HdsYield;\n      },\n    ];\n    row: [\n      {\n        Field?: WithBoundArgs<\n          typeof HdsFormKeyValueInputsField,\n          'onInsert' | 'onRemove' | 'rowIndex'\n        >;\n        Generic?: WithBoundArgs<\n          typeof HdsFormKeyValueInputsGeneric,\n          'onInsert' | 'onRemove'\n        >;\n        DeleteRowButton?: WithBoundArgs<\n          typeof HdsFormKeyValueInputsDeleteRowButton,\n          'onInsert' | 'onRemove' | 'returnFocusTo' | 'rowData' | 'rowIndex'\n        >;\n        rowData?: T;\n        rowIndex?: number;\n      },\n    ];\n    footer?: [\n      {\n        AddRowButton?: typeof HdsFormKeyValueInputsAddRowButton;\n        Alert?: WithBoundArgs<typeof HdsAlert, 'color' | 'type'>;\n        Error?: WithBoundArgs<\n          typeof HdsFormError,\n          'contextualClass' | 'controlId' | 'onInsert' | 'onRemove'\n        >;\n      },\n    ];\n  };\n  Element: HTMLFieldSetElement;\n}\n\n// @ts-expect-error: decorator function return type 'ClassOf<AriaDescribedBy>' is not assignable to 'typeof HdsFormField'\n@ariaDescribedBy\nexport default class HdsFormKeyValueInputs<T = unknown> extends Component<\n  HdsFormKeyValueInputsSignature<T>\n> {\n  private _element!: HTMLFieldSetElement;\n  @tracked _gridTemplateColumns = '';\n\n  // this is not a specific DOM id, but a value that is used to \"glue\" together\n  // different fieldsset-related elements (legend, helper text, error) with the fieldset itself\n  get glueId(): string {\n    return guidFor(this);\n  }\n\n  _setUpColumn = (): void => {\n    // eslint-disable-next-line ember/no-runloop\n    schedule('afterRender', (): void => {\n      this._updateColumns();\n    });\n  };\n\n  _removeColumn = (): void => {\n    // eslint-disable-next-line ember/no-runloop\n    schedule('afterRender', (): void => {\n      this._updateColumns();\n    });\n  };\n\n  appendDescriptor = (element: HTMLElement): void => {\n    registerAriaDescriptionElement(this as AriaDescribedByComponent, element);\n  };\n\n  removeDescriptor = (element: HTMLElement): void => {\n    unregisterAriaDescriptionElement(this as AriaDescribedByComponent, element);\n  };\n\n  private _setUpKeyValueInputs = modifier((element: HTMLFieldSetElement) => {\n    this._element = element;\n  });\n\n  // Update the column array based on how they are ordered in the DOM\n  private _updateColumns = () => {\n    const columns = this._element\n      .querySelector(KEY_VALUE_INPUTS_FIRST_ROW_SELECTOR)\n      ?.querySelectorAll(\n        `${KEY_VALUE_INPUTS_FIELD_SELECTOR}, ${KEY_VALUE_INPUTS_GENERIC_SELECTOR}, ${KEY_VALUE_INPUTS_DELETE_ROW_CONTAINER_SELECTOR}`\n      );\n\n    let updatedGridTemplateColumns = '';\n\n    columns?.forEach((column, index) => {\n      const columnElement = column as HTMLElement;\n\n      // FIELD\n\n      if (\n        // do substring to remove the leading dot from the class selector\n        column.classList.contains(KEY_VALUE_INPUTS_FIELD_SELECTOR.substring(1))\n      ) {\n        if (columnElement.dataset['width']) {\n          updatedGridTemplateColumns += `${columnElement.dataset['width']} `;\n        } else {\n          updatedGridTemplateColumns += '1fr ';\n        }\n      }\n\n      // GENERIC\n\n      if (\n        // do substring to remove the leading dot from the class selector\n        column.classList.contains(\n          KEY_VALUE_INPUTS_GENERIC_SELECTOR.substring(1)\n        )\n      ) {\n        updatedGridTemplateColumns += 'auto ';\n\n        // Set grid-column so generic content appears in the correct column when grid-row is set; otherwise, browsers default it to the first column.\n        columnElement.style.setProperty(\n          '--hds-key-value-inputs-column-index',\n          `${index + 1}`\n        );\n      }\n\n      // DELETE BUTTON\n\n      if (\n        column.classList.contains(\n          KEY_VALUE_INPUTS_DELETE_ROW_CONTAINER_SELECTOR.substring(1)\n        )\n      ) {\n        // Set grid-column so generic content appears in the correct column when grid-row is set; otherwise, browsers default it to the first column.\n        columnElement.style.setProperty(\n          '--hds-key-value-inputs-column-index',\n          `${index + 1}`\n        );\n      }\n    });\n\n    // we always set aside the space for the delete button (it's always the last element)\n    // even when it's not rendered, to avoid layout shifts when moving to/from an empty state\n    updatedGridTemplateColumns += '2.25rem ';\n\n    this._gridTemplateColumns = updatedGridTemplateColumns;\n  };\n\n  <template>\n    <fieldset\n      class=\"hds-form-key-value-inputs\"\n      ...attributes\n      {{style --hds-key-value-inputs-columns=this._gridTemplateColumns}}\n      {{! need to set aria-labelledby because the legend is not a direct descendant of the fieldset }}\n      aria-labelledby=\"legend-{{this.glueId}}\"\n      {{! @glint-expect-error }}\n      aria-describedby={{this.ariaDescribedBy}}\n      tabindex=\"-1\"\n      {{this._setUpKeyValueInputs}}\n    >\n      <div class=\"hds-form-key-value-inputs__header\">\n        {{yield\n          (hash\n            Legend=(component\n              HdsFormLegend\n              contextualClass=\"hds-form-key-value-inputs__legend\"\n              id=(concat \"legend-\" this.glueId)\n              isOptional=@isOptional\n              isRequired=@isRequired\n            )\n            HelperText=(component\n              HdsFormHelperText\n              contextualClass=\"hds-form-key-value-inputs__helper-text\"\n              controlId=this.glueId\n              onInsert=this.appendDescriptor\n            )\n            Generic=HdsYield\n          )\n          to=\"header\"\n        }}\n      </div>\n\n      {{#if (eq @data.length 0)}}\n        <div\n          class=\"hds-form-key-value-inputs__row hds-form-key-value-inputs__row--first\"\n        >\n          {{yield\n            (hash\n              Field=(component\n                HdsFormKeyValueInputsField\n                onInsert=this._setUpColumn\n                onRemove=this._removeColumn\n                rowIndex=0\n              )\n              Generic=(component\n                HdsFormKeyValueInputsGeneric\n                onInsert=this._setUpColumn\n                onRemove=this._removeColumn\n              )\n              rowData=undefined\n              rowIndex=0\n            )\n            to=\"row\"\n          }}\n\n          {{! leaving as a separate yield to keep the delete row button at the end of the row }}\n          {{yield\n            (hash\n              DeleteRowButton=(component\n                HdsFormKeyValueInputsDeleteRowButton\n                returnFocusTo=this._element\n                onInsert=this._setUpColumn\n                onRemove=this._removeColumn\n                rowData=undefined\n                rowIndex=0\n              )\n            )\n            to=\"row\"\n          }}\n        </div>\n      {{/if}}\n\n      {{#each @data as |item index|}}\n        <div\n          class=\"hds-form-key-value-inputs__row\n            {{if (eq index 0) 'hds-form-key-value-inputs__row--first'}}\"\n        >\n          {{yield\n            (hash\n              Field=(component\n                HdsFormKeyValueInputsField\n                onInsert=this._setUpColumn\n                onRemove=this._removeColumn\n                rowIndex=index\n              )\n              Generic=(component\n                HdsFormKeyValueInputsGeneric\n                onInsert=this._setUpColumn\n                onRemove=this._removeColumn\n              )\n              rowData=item\n              rowIndex=index\n            )\n            to=\"row\"\n          }}\n\n          {{! leaving as a separate yield to keep the delete row button at the end of the row }}\n          {{yield\n            (hash\n              DeleteRowButton=(component\n                HdsFormKeyValueInputsDeleteRowButton\n                onInsert=this._setUpColumn\n                onRemove=this._removeColumn\n                returnFocusTo=this._element\n                rowData=item\n                rowIndex=index\n              )\n              rowData=item\n              rowIndex=index\n            )\n            to=\"row\"\n          }}\n        </div>\n      {{/each}}\n\n      <div class=\"hds-form-key-value-inputs__footer\">\n        {{yield\n          (hash\n            Alert=(component HdsAlert color=\"neutral\" type=\"compact\")\n            AddRowButton=HdsFormKeyValueInputsAddRowButton\n            Error=(component\n              HdsFormError\n              contextualClass=\"hds-form-key-value-inputs__error\"\n              controlId=this.glueId\n              onInsert=this.appendDescriptor\n              onRemove=this.removeDescriptor\n            )\n          )\n          to=\"footer\"\n        }}\n      </div>\n    </fieldset>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport { hash } from '@ember/helper';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport HdsFormField from '../field/index.gts';\nimport HdsFormMaskedInputBase from './base.gts';\nimport HdsFormCharacterCount from '../character-count/index.gts';\n\nimport type { HdsFormFieldSignature } from '../field/index.gts';\nimport type { HdsFormMaskedInputBaseSignature } from './base.gts';\n\nexport interface HdsFormMaskedInputFieldSignature {\n  Args: Omit<HdsFormFieldSignature['Args'], 'contextualClass' | 'layout'> &\n    HdsFormMaskedInputBaseSignature['Args'];\n  Blocks: {\n    default: [\n      {\n        Label?: HdsFormFieldSignature['Blocks']['default'][0]['Label'];\n        HelperText?: HdsFormFieldSignature['Blocks']['default'][0]['HelperText'];\n        Error?: HdsFormFieldSignature['Blocks']['default'][0]['Error'];\n        CharacterCount?: WithBoundArgs<typeof HdsFormCharacterCount, 'value'>;\n      },\n    ];\n  };\n  Element: HdsFormMaskedInputBaseSignature['Element'];\n}\n\nconst HdsFormMaskedInputField: TemplateOnlyComponent<HdsFormMaskedInputFieldSignature> =\n  <template>\n    <HdsFormField\n      @layout=\"vertical\"\n      @extraAriaDescribedBy={{@extraAriaDescribedBy}}\n      @isRequired={{@isRequired}}\n      @isOptional={{@isOptional}}\n      @id={{@id}}\n      as |F|\n    >\n      {{! Notice: the order of the elements is not relevant here, because is controlled at \"HdsFormField\" component level }}\n      {{yield (hash Label=F.Label HelperText=F.HelperText Error=F.Error)}}\n      {{#if F.CharacterCount}}\n        {{yield\n          (hash CharacterCount=(component F.CharacterCount value=@value))\n        }}\n      {{/if}}\n      <F.Control>\n        <HdsFormMaskedInputBase\n          @hasCopyButton={{@hasCopyButton}}\n          @isMultiline={{@isMultiline}}\n          @isContentMasked={{@isContentMasked}}\n          @visibilityToggleAriaLabel={{@visibilityToggleAriaLabel}}\n          @visibilityToggleAriaMessageText={{@visibilityToggleAriaMessageText}}\n          @value={{@value}}\n          @isInvalid={{@isInvalid}}\n          @width={{@width}}\n          @height={{@height}}\n          @id={{F.id}}\n          required={{@isRequired}}\n          ...attributes\n          aria-describedby={{F.ariaDescribedBy}}\n        />\n      </F.Control>\n    </HdsFormField>\n  </template>;\n\nexport default HdsFormMaskedInputField;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport { hash } from '@ember/helper';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport HdsFormFieldset from '../fieldset/index.gts';\nimport HdsFormRadioField from './field.gts';\n\nimport type { HdsFormFieldsetSignature } from '../fieldset/index.gts';\n\nexport interface HdsFormRadioGroupSignature {\n  Args: HdsFormFieldsetSignature['Args'] & {\n    name?: string;\n  };\n  Blocks: {\n    default: [\n      {\n        Legend?: HdsFormFieldsetSignature['Blocks']['default'][0]['Legend'];\n        HelperText?: HdsFormFieldsetSignature['Blocks']['default'][0]['HelperText'];\n        RadioField?: WithBoundArgs<\n          typeof HdsFormRadioField,\n          'name' | 'isRequired' | 'extraAriaDescribedBy' | 'contextualClass'\n        >;\n        Error?: HdsFormFieldsetSignature['Blocks']['default'][0]['Error'];\n      },\n    ];\n  };\n  Element: HdsFormFieldsetSignature['Element'];\n}\n\nconst HdsFormRadioGroup: TemplateOnlyComponent<HdsFormRadioGroupSignature> =\n  <template>\n    <HdsFormFieldset\n      @layout={{@layout}}\n      @isRequired={{@isRequired}}\n      @isOptional={{@isOptional}}\n      ...attributes\n      as |F|\n    >\n      {{! Notice: the order of the elements is not relevant here, because it's controlled at \"HdsFormFieldset\" component level }}\n      {{yield (hash Legend=F.Legend HelperText=F.HelperText Error=F.Error)}}\n      <F.Control>\n        {{yield\n          (hash\n            RadioField=(component\n              HdsFormRadioField\n              contextualClass=\"hds-form-group__control-field\"\n              isRequired=@isRequired\n              name=@name\n              extraAriaDescribedBy=F.ariaDescribedBy\n            )\n          )\n        }}\n      </F.Control>\n    </HdsFormFieldset>\n  </template>;\n\nexport default HdsFormRadioGroup;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport { hash } from '@ember/helper';\nimport { eq } from 'ember-truth-helpers';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport HdsFormFieldset from '../fieldset/index.gts';\nimport HdsFormRadioCard from './index.gts';\n\nimport type { HdsFormFieldsetSignature } from '../fieldset/index.gts';\nimport type {\n  HdsFormRadioCardControlPositions,\n  HdsFormRadioCardAlignments,\n} from './types.ts';\n\nexport interface HdsFormRadioCardGroupSignature {\n  Args: HdsFormFieldsetSignature['Args'] & {\n    controlPosition?: HdsFormRadioCardControlPositions;\n    alignment?: HdsFormRadioCardAlignments;\n    name?: string;\n  };\n  Blocks: {\n    default: [\n      {\n        Legend?: HdsFormFieldsetSignature['Blocks']['default'][0]['Legend'];\n        HelperText?: HdsFormFieldsetSignature['Blocks']['default'][0]['HelperText'];\n        RadioCard?: WithBoundArgs<\n          typeof HdsFormRadioCard,\n          'name' | 'alignment' | 'controlPosition' | 'extraAriaDescribedBy'\n        >;\n        Error?: HdsFormFieldsetSignature['Blocks']['default'][0]['Error'];\n      },\n    ];\n  };\n  Element: HdsFormFieldsetSignature['Element'];\n}\n\nconst HdsFormRadioCardGroup: TemplateOnlyComponent<HdsFormRadioCardGroupSignature> =\n  <template>\n    <HdsFormFieldset\n      class=\"hds-form-group--radio-cards\"\n      @layout={{if (eq @layout \"vertical\") \"vertical\" \"horizontal\"}}\n      @isRequired={{@isRequired}}\n      @isOptional={{@isOptional}}\n      ...attributes\n      as |F|\n    >\n      {{! Notice: the order of the elements is not relevant here, because it's controlled at \"HdsFormFieldset\" component level }}\n      {{yield (hash Legend=F.Legend HelperText=F.HelperText Error=F.Error)}}\n      <F.Control>\n        {{yield\n          (hash\n            RadioCard=(component\n              HdsFormRadioCard\n              name=@name\n              alignment=@alignment\n              controlPosition=@controlPosition\n              extraAriaDescribedBy=F.ariaDescribedBy\n            )\n          )\n        }}\n      </F.Control>\n    </HdsFormFieldset>\n  </template>;\n\nexport default HdsFormRadioCardGroup;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { hash, concat } from '@ember/helper';\n\nimport type { Select } from 'ember-power-select/components/power-select';\n\nimport { ID_PREFIX } from '../../label/index.gts';\nimport HdsFormSuperSelectSingleBase from './base.gts';\nimport HdsFormField from '../../field/index.gts';\nimport HdsYield from '../../../yield/index.gts';\n\nimport type { HdsFormFieldSignature } from '../../field/index.gts';\nimport type { HdsFormSuperSelectSingleBaseSignature } from './base.gts';\n\nexport interface HdsFormSuperSelectSingleFieldSignature {\n  Args: HdsFormSuperSelectSingleBaseSignature['Args'] &\n    HdsFormFieldSignature['Args'];\n  Blocks: {\n    default: [\n      {\n        Label?: HdsFormFieldSignature['Blocks']['default'][0]['Label'];\n        HelperText?: HdsFormFieldSignature['Blocks']['default'][0]['HelperText'];\n        Error?: HdsFormFieldSignature['Blocks']['default'][0]['Error'];\n        Options?: typeof HdsYield;\n        options?: unknown;\n        select?: Select;\n      },\n    ];\n  };\n  Element: HdsFormSuperSelectSingleBaseSignature['Element'];\n}\n\nexport default class HdsFormSuperSelectSingleField extends Component<HdsFormSuperSelectSingleFieldSignature> {\n  get idPrefix(): string {\n    return ID_PREFIX;\n  }\n\n  <template>\n    <HdsFormField\n      @layout=\"vertical\"\n      @extraAriaDescribedBy={{@extraAriaDescribedBy}}\n      @isRequired={{@isRequired}}\n      @isOptional={{@isOptional}}\n      @id={{@id}}\n      as |F|\n    >\n      {{! Notice: the order of the elements is not relevant here, because is controlled at \"HdsFormField\" component level }}\n      {{yield (hash Label=F.Label HelperText=F.HelperText Error=F.Error)}}\n      <F.Control>\n        {{! Important: if an argument is added in base.hbs, it must also be added/processed here }}\n        <HdsFormSuperSelectSingleBase\n          @afterOptionsComponent={{@afterOptionsComponent}}\n          @afterOptionsContent={{@afterOptionsContent}}\n          @ariaDescribedBy={{F.ariaDescribedBy}}\n          @ariaInvalid={{@ariaInvalid}}\n          @ariaLabel={{@ariaLabel}}\n          @ariaLabelledBy={{(concat this.idPrefix F.id)}}\n          @beforeOptionsComponent={{@beforeOptionsComponent}}\n          @closeOnSelect={{@closeOnSelect}}\n          @disabled={{@disabled}}\n          @dropdownClass={{@dropdownClass}}\n          @dropdownMaxWidth={{@dropdownMaxWidth}}\n          @extra={{@extra}}\n          @groupComponent={{@groupComponent}}\n          @horizontalPosition={{@horizontalPosition}}\n          @initiallyOpened={{@initiallyOpened}}\n          @labelText={{@labelText}}\n          @loadingMessage={{@loadingMessage}}\n          @matcher={{@matcher}}\n          @matchTriggerWidth={{@matchTriggerWidth}}\n          @noMatchesMessage={{@noMatchesMessage}}\n          @onBlur={{@onBlur}}\n          @onChange={{@onChange}}\n          @onClose={{@onClose}}\n          @onFocus={{@onFocus}}\n          @onInput={{@onInput}}\n          @onKeydown={{@onKeydown}}\n          @onOpen={{@onOpen}}\n          @options={{@options}}\n          @optionsComponent={{@optionsComponent}}\n          @placeholder={{@placeholder}}\n          @placeholderComponent={{@placeholderComponent}}\n          @preventScroll={{@preventScroll}}\n          @registerAPI={{@registerAPI}}\n          @renderInPlace={{true}}\n          @resultCountMessage={{@resultCountMessage}}\n          @scrollTo={{@scrollTo}}\n          @search={{@search}}\n          @searchEnabled={{@searchEnabled}}\n          @searchField={{@searchField}}\n          @searchFieldPosition=\"before-options\"\n          @searchMessage={{@searchMessage}}\n          @searchPlaceholder={{@searchPlaceholder}}\n          @selected={{@selected}}\n          @selectedItemComponent={{@selectedItemComponent}}\n          @showAfterOptions={{@showAfterOptions}}\n          @tabindex={{@tabindex}}\n          @triggerClass={{@triggerClass}}\n          @triggerComponent={{@triggerComponent}}\n          @triggerId={{F.id}}\n          @triggerRole={{@triggerRole}}\n          @typeAheadOptionMatcher={{@typeAheadOptionMatcher}}\n          @verticalPosition={{@verticalPosition}}\n          @isInvalid={{@isInvalid}}\n          ...attributes\n          as |options select|\n        >\n          {{yield (hash options=options select=select Options=HdsYield)}}\n        </HdsFormSuperSelectSingleBase>\n      </F.Control>\n    </HdsFormField>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { hash, concat } from '@ember/helper';\n\nimport type { Select as PowerSelect } from 'ember-power-select/components/power-select';\n\nimport { ID_PREFIX } from '../../label/index.gts';\nimport HdsFormField from '../../field/index.gts';\nimport HdsFormSuperSelectMultipleBase from './base.gts';\nimport HdsYield from '../../../yield/index.gts';\n\nimport type { HdsFormFieldSignature } from '../../field/index.gts';\nimport type { HdsFormSuperSelectMultipleBaseSignature } from './base.gts';\n\nexport interface HdsFormSuperSelectMultipleFieldSignature {\n  Args: HdsFormSuperSelectMultipleBaseSignature['Args'] &\n    HdsFormFieldSignature['Args'];\n  Blocks: {\n    default: [\n      {\n        Label?: HdsFormFieldSignature['Blocks']['default'][0]['Label'];\n        HelperText?: HdsFormFieldSignature['Blocks']['default'][0]['HelperText'];\n        Error?: HdsFormFieldSignature['Blocks']['default'][0]['Error'];\n        Options?: typeof HdsYield;\n        options?: unknown;\n        select?: PowerSelect;\n      },\n    ];\n  };\n  Element: HdsFormSuperSelectMultipleBaseSignature['Element'];\n}\n\nexport default class HdsFormSuperSelectMultipleField extends Component<HdsFormSuperSelectMultipleFieldSignature> {\n  get idPrefix(): string {\n    return ID_PREFIX;\n  }\n\n  <template>\n    <HdsFormField\n      @layout=\"vertical\"\n      @extraAriaDescribedBy={{@extraAriaDescribedBy}}\n      @isRequired={{@isRequired}}\n      @isOptional={{@isOptional}}\n      @id={{@id}}\n      as |F|\n    >\n      {{! Notice: the order of the elements is not relevant here, because is controlled at \"HdsFormField\" component level }}\n      {{yield (hash Label=F.Label HelperText=F.HelperText Error=F.Error)}}\n      <F.Control>\n        {{! Important: if an argument is added in base.hbs, it must also be added/processed here }}\n        <HdsFormSuperSelectMultipleBase\n          @afterOptionsComponent={{@afterOptionsComponent}}\n          @afterOptionsContent={{@afterOptionsContent}}\n          @ariaDescribedBy={{F.ariaDescribedBy}}\n          @ariaInvalid={{@ariaInvalid}}\n          @ariaLabel={{@ariaLabel}}\n          @ariaLabelledBy={{(concat this.idPrefix F.id)}}\n          @beforeOptionsComponent={{@beforeOptionsComponent}}\n          @disabled={{@disabled}}\n          @dropdownClass={{@dropdownClass}}\n          @dropdownMaxWidth={{@dropdownMaxWidth}}\n          @extra={{@extra}}\n          @groupComponent={{@groupComponent}}\n          @horizontalPosition={{@horizontalPosition}}\n          @initiallyOpened={{@initiallyOpened}}\n          @labelText={{@labelText}}\n          @loadingMessage={{@loadingMessage}}\n          @matcher={{@matcher}}\n          @matchTriggerWidth={{@matchTriggerWidth}}\n          @noMatchesMessage={{@noMatchesMessage}}\n          @onBlur={{@onBlur}}\n          @onChange={{@onChange}}\n          @onClose={{@onClose}}\n          @onFocus={{@onFocus}}\n          @onInput={{@onInput}}\n          @onKeydown={{@onKeydown}}\n          @onOpen={{@onOpen}}\n          @options={{@options}}\n          @optionsComponent={{@optionsComponent}}\n          @placeholder={{@placeholder}}\n          @placeholderComponent={{@placeholderComponent}}\n          @preventScroll={{@preventScroll}}\n          @registerAPI={{@registerAPI}}\n          @renderInPlace={{true}}\n          @resultCountMessage={{@resultCountMessage}}\n          @scrollTo={{@scrollTo}}\n          @search={{@search}}\n          @searchEnabled={{@searchEnabled}}\n          @searchField={{@searchField}}\n          @searchFieldPosition=\"before-options\"\n          @searchMessage={{@searchMessage}}\n          @searchPlaceholder={{@searchPlaceholder}}\n          @selected={{@selected}}\n          @selectedItemComponent={{@selectedItemComponent}}\n          @showAfterOptions={{@showAfterOptions}}\n          @tabindex={{@tabindex}}\n          @triggerClass={{@triggerClass}}\n          @triggerComponent={{@triggerComponent}}\n          @triggerId={{F.id}}\n          @triggerRole={{@triggerRole}}\n          @typeAheadOptionMatcher={{@typeAheadOptionMatcher}}\n          @verticalPosition={{@verticalPosition}}\n          @isInvalid={{@isInvalid}}\n          ...attributes\n          as |options select|\n        >\n          {{yield (hash options=options select=select Options=HdsYield)}}\n        </HdsFormSuperSelectMultipleBase>\n      </F.Control>\n    </HdsFormField>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport { hash } from '@ember/helper';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport HdsFormField from '../field/index.gts';\nimport HdsFormTextareaBase from './base.gts';\n\nimport type { HdsFormFieldSignature } from '../field/index.gts';\nimport type { HdsFormTextareaBaseSignature } from './base.gts';\nimport type HdsFormCharacterCountComponent from '../character-count/index.gts';\n\nexport interface HdsFormTextareaFieldSignature {\n  Args: Omit<HdsFormFieldSignature['Args'], 'contextualClass' | 'layout'> &\n    HdsFormTextareaBaseSignature['Args'];\n  Blocks: {\n    default: [\n      {\n        Label?: HdsFormFieldSignature['Blocks']['default'][0]['Label'];\n        HelperText?: HdsFormFieldSignature['Blocks']['default'][0]['HelperText'];\n        Error?: HdsFormFieldSignature['Blocks']['default'][0]['Error'];\n        CharacterCount?: WithBoundArgs<\n          typeof HdsFormCharacterCountComponent,\n          'value'\n        >;\n      },\n    ];\n  };\n  Element: HdsFormTextareaBaseSignature['Element'];\n}\n\nconst HdsFormTextareaField: TemplateOnlyComponent<HdsFormTextareaFieldSignature> =\n  <template>\n    <HdsFormField\n      @layout=\"vertical\"\n      @extraAriaDescribedBy={{@extraAriaDescribedBy}}\n      @isRequired={{@isRequired}}\n      @isOptional={{@isOptional}}\n      @id={{@id}}\n      as |F|\n    >\n      {{! Notice: the order of the elements is not relevant here, because is controlled at \"HdsFormField\" component level }}\n      {{yield (hash Label=F.Label HelperText=F.HelperText Error=F.Error)}}\n      {{#if F.CharacterCount}}\n        {{yield\n          (hash CharacterCount=(component F.CharacterCount value=@value))\n        }}\n      {{/if}}\n      <F.Control>\n        <HdsFormTextareaBase\n          @value={{@value}}\n          @isInvalid={{@isInvalid}}\n          @width={{@width}}\n          @height={{@height}}\n          required={{@isRequired}}\n          ...attributes\n          id={{F.id}}\n          aria-describedby={{F.ariaDescribedBy}}\n        />\n      </F.Control>\n    </HdsFormField>\n  </template>;\n\nexport default HdsFormTextareaField;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { on } from '@ember/modifier';\nimport { hash } from '@ember/helper';\nimport style from 'ember-style-modifier';\n\nimport type { WithBoundArgs } from '@glint/template';\nimport type Owner from '@ember/owner';\n\nimport HdsFormField from '../field/index.gts';\nimport HdsFormTextInputBase from './base.gts';\nimport HdsFormVisibilityToggle from '../visibility-toggle/index.gts';\nimport HdsFormCharacterCount from '../character-count/index.gts';\n\nimport type { HdsFormFieldSignature } from '../field/index.gts';\nimport type { HdsFormTextInputBaseSignature } from './base.gts';\nimport type { HdsFormVisibilityToggleSignature } from '../visibility-toggle/index.gts';\n\nexport interface HdsFormTextInputFieldSignature {\n  Args: Omit<HdsFormFieldSignature['Args'], 'contextualClass' | 'layout'> &\n    HdsFormTextInputBaseSignature['Args'] & {\n      visibilityToggleAriaLabel?: HdsFormVisibilityToggleSignature['Args']['ariaLabel'];\n      visibilityToggleAriaMessageText?: HdsFormVisibilityToggleSignature['Args']['ariaMessageText'];\n    };\n  Blocks: {\n    default: [\n      {\n        Label?: HdsFormFieldSignature['Blocks']['default'][0]['Label'];\n        HelperText?: HdsFormFieldSignature['Blocks']['default'][0]['HelperText'];\n        Error?: HdsFormFieldSignature['Blocks']['default'][0]['Error'];\n        CharacterCount?: WithBoundArgs<typeof HdsFormCharacterCount, 'value'>;\n      },\n    ];\n  };\n  Element: HdsFormTextInputBaseSignature['Element'];\n}\n\nexport default class HdsFormTextInputField extends Component<HdsFormTextInputFieldSignature> {\n  @tracked private _isPasswordMasked = true;\n  @tracked type;\n\n  constructor(owner: Owner, args: HdsFormTextInputFieldSignature['Args']) {\n    super(owner, args);\n    this.type = this.args.type ?? 'text';\n  }\n\n  get hasVisibilityToggle(): boolean {\n    return this.args.hasVisibilityToggle ?? true;\n  }\n\n  get showVisibilityToggle(): boolean {\n    return this.args.type === 'password' && this.hasVisibilityToggle;\n  }\n\n  get visibilityToggleAriaLabel(): string | undefined {\n    if (this.args.visibilityToggleAriaLabel) {\n      return this.args.visibilityToggleAriaLabel;\n    } else if (this._isPasswordMasked) {\n      return 'Show password';\n    } else {\n      return 'Hide password';\n    }\n  }\n\n  get visibilityToggleAriaMessageText(): string | undefined {\n    if (this.args.visibilityToggleAriaMessageText) {\n      return this.args.visibilityToggleAriaMessageText;\n    } else if (this._isPasswordMasked) {\n      return 'Password is hidden';\n    } else {\n      return 'Password is visible';\n    }\n  }\n\n  onClickTogglePasswordReadability = (): void => {\n    this._isPasswordMasked = !this._isPasswordMasked;\n    this.type = this._isPasswordMasked ? 'password' : 'text';\n  };\n\n  <template>\n    <HdsFormField\n      @layout=\"vertical\"\n      @extraAriaDescribedBy={{@extraAriaDescribedBy}}\n      @isRequired={{@isRequired}}\n      @isOptional={{@isOptional}}\n      @id={{@id}}\n      as |F|\n    >\n      {{! Notice: the order of the elements is not relevant here, because is controlled at \"HdsFormField\" component level }}\n      {{yield (hash Label=F.Label HelperText=F.HelperText Error=F.Error)}}\n      {{#if F.CharacterCount}}\n        {{yield\n          (hash CharacterCount=(component F.CharacterCount value=@value))\n        }}\n      {{/if}}\n      <F.Control>\n        <div class=\"hds-form-text-input__wrapper\" {{style width=@width}}>\n          <HdsFormTextInputBase\n            @type={{this.type}}\n            @value={{@value}}\n            @isInvalid={{@isInvalid}}\n            @isLoading={{@isLoading}}\n            @hasVisibilityToggle={{this.showVisibilityToggle}}\n            required={{@isRequired}}\n            ...attributes\n            id={{F.id}}\n            aria-describedby={{F.ariaDescribedBy}}\n          />\n          {{#if this.showVisibilityToggle}}\n            <HdsFormVisibilityToggle\n              @isVisible={{this._isPasswordMasked}}\n              @ariaLabel={{this.visibilityToggleAriaLabel}}\n              @ariaMessageText={{this.visibilityToggleAriaMessageText}}\n              aria-controls={{F.id}}\n              class=\"hds-form-text-input__visibility-toggle\"\n              {{on \"click\" this.onClickTogglePasswordReadability}}\n            />\n          {{/if}}\n        </div>\n      </F.Control>\n    </HdsFormField>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport { hash } from '@ember/helper';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport HdsFormFieldset from '../fieldset/index.gts';\nimport HdsFormToggleField from './field.gts';\n\nimport type { HdsFormFieldsetSignature } from '../fieldset/index.gts';\n\nexport interface HdsFormToggleGroupSignature {\n  Args: HdsFormFieldsetSignature['Args'] & {\n    name?: string;\n  };\n  Blocks: {\n    default: [\n      {\n        Legend?: HdsFormFieldsetSignature['Blocks']['default'][0]['Legend'];\n        HelperText?: HdsFormFieldsetSignature['Blocks']['default'][0]['HelperText'];\n        ToggleField?: WithBoundArgs<\n          typeof HdsFormToggleField,\n          'contextualClass' | 'isRequired' | 'extraAriaDescribedBy'\n        >;\n        Error?: HdsFormFieldsetSignature['Blocks']['default'][0]['Error'];\n      },\n    ];\n  };\n  Element: HdsFormFieldsetSignature['Element'];\n}\n\nconst HdsFormToggleGroup: TemplateOnlyComponent<HdsFormToggleGroupSignature> =\n  <template>\n    <HdsFormFieldset\n      @layout={{@layout}}\n      @isRequired={{@isRequired}}\n      @isOptional={{@isOptional}}\n      ...attributes\n      as |F|\n    >\n      {{! Notice: the order of the elements is not relevant here, because it's controlled at \"HdsFormFieldset\" component level }}\n      {{yield (hash Legend=F.Legend HelperText=F.HelperText Error=F.Error)}}\n      <F.Control>\n        {{yield\n          (hash\n            ToggleField=(component\n              HdsFormToggleField\n              contextualClass=\"hds-form-group__control-field\"\n              isRequired=@isRequired\n              extraAriaDescribedBy=F.ariaDescribedBy\n            )\n          )\n        }}\n      </F.Control>\n    </HdsFormFieldset>\n  </template>;\n\nexport default HdsFormToggleGroup;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsIconTileSizeValues {\n  Small = 'small',\n  Medium = 'medium',\n  Large = 'large',\n}\n\nexport type HdsIconTileSizes = `${HdsIconTileSizeValues}`;\n\nexport enum HdsIconTileProductValues {\n  Boundary = 'boundary',\n  Consul = 'consul',\n  HCP = 'hcp',\n  Nomad = 'nomad',\n  Packer = 'packer',\n  Terraform = 'terraform',\n  Vagrant = 'vagrant',\n  Vault = 'vault',\n  'Vault Secrets' = 'vault-secrets',\n  'Vault Radar' = 'vault-radar',\n  Waypoint = 'waypoint',\n}\n\nexport type HdsIconTileProducts = `${HdsIconTileProductValues}`;\n\nexport enum HdsIconTileColorNeutral {\n  Neutral = 'neutral',\n}\n\nexport type HdsIconTileColors =\n  | HdsIconTileProducts\n  | `${HdsIconTileColorNeutral}`;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport { hash } from '@ember/helper';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport HdsPageHeaderActions from './actions.gts';\nimport HdsPageHeaderBadges from './badges.gts';\nimport HdsPageHeaderDescription from './description.gts';\nimport HdsPageHeaderSubtitle from './subtitle.gts';\nimport HdsPageHeaderTitle from './title.gts';\nimport HdsYield from '../yield/index.gts';\nimport HdsIconTile from '../icon-tile/index.gts';\n\nexport interface HdsPageHeaderSignature {\n  Blocks: {\n    default: [\n      {\n        Actions?: typeof HdsPageHeaderActions;\n        Badges?: typeof HdsPageHeaderBadges;\n        Breadcrumb?: typeof HdsYield;\n        Description?: typeof HdsPageHeaderDescription;\n        Generic?: typeof HdsYield;\n        IconTile?: WithBoundArgs<typeof HdsIconTile, 'size'>;\n        Subtitle?: typeof HdsPageHeaderSubtitle;\n        Title?: typeof HdsPageHeaderTitle;\n      },\n    ];\n  };\n  Element: HTMLElement;\n}\n\nconst HdsPageHeader: TemplateOnlyComponent<HdsPageHeaderSignature> = <template>\n  <header class=\"hds-page-header\" ...attributes>\n    {{yield (hash Breadcrumb=HdsYield)}}\n    <div class=\"hds-page-header__body\">\n      {{yield (hash IconTile=(component HdsIconTile size=\"medium\"))}}\n      <div class=\"hds-page-header__main\">\n        <div class=\"hds-page-header__content\">\n          <div class=\"hds-page-header__title-wrapper\">\n            {{yield (hash Title=HdsPageHeaderTitle)}}\n            {{yield (hash Badges=HdsPageHeaderBadges)}}\n          </div>\n          <div class=\"hds-page-header__metadata\">\n            {{yield\n              (hash\n                Subtitle=HdsPageHeaderSubtitle\n                Description=HdsPageHeaderDescription\n                Generic=HdsYield\n              )\n            }}\n          </div>\n        </div>\n        {{yield (hash Actions=HdsPageHeaderActions)}}\n      </div>\n    </div>\n  </header>\n</template>;\n\nexport default HdsPageHeader;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { service } from '@ember/service';\n\nimport type Owner from '@ember/owner';\n\nimport { HdsPaginationDirectionValues } from '../types.ts';\nimport HdsPaginationNavArrow from '../nav/arrow.gts';\nimport HdsPaginationSizeSelector from '../size-selector/index.gts';\n\nimport type HdsIntlService from '../../../../services/hds-intl.ts';\n\nimport type {\n  HdsPaginationRoutingProps,\n  HdsPaginationDirections,\n} from '../types.ts';\nimport type { HdsInteractiveSignature } from '../../interactive/index.gts';\n\ntype HdsInteractiveQuery = HdsInteractiveSignature['Args']['query'];\n\ntype HdsPaginationCompactRoutingQueryProps = HdsPaginationRoutingProps & {\n  queryNext?: HdsInteractiveQuery;\n  queryPrev?: HdsInteractiveQuery;\n};\n\ntype HdsPaginationQueryFunction = (\n  page: HdsPaginationDirections,\n  pageSize?: number\n) => HdsInteractiveQuery;\n\ninterface HdsPaginationCompactArgs extends HdsPaginationRoutingProps {\n  ariaLabel?: string;\n  showLabels?: boolean;\n  isDisabledPrev?: boolean;\n  isDisabledNext?: boolean;\n  showSizeSelector?: boolean;\n  sizeSelectorLabel?: string;\n  pageSizes?: number[];\n  currentPageSize?: number;\n  queryFunction?: HdsPaginationQueryFunction;\n  onPageChange?: (page: HdsPaginationDirections) => void;\n  onPageSizeChange?: (pageSize: number) => void;\n}\n\ninterface HdsPaginationCompactArgsControlledBase\n  extends HdsPaginationCompactArgs {\n  queryFunction: HdsPaginationQueryFunction;\n}\n\ninterface HdsPaginationCompactArgsControlledWithModel\n  extends HdsPaginationCompactArgsControlledBase {\n  model: string | number;\n}\n\ninterface HdsPaginationCompactArgsControlledWithModels\n  extends HdsPaginationCompactArgsControlledBase {\n  models: Array<string | number>;\n}\ninterface HdsPaginationCompactArgsControlledWithRoute\n  extends HdsPaginationCompactArgsControlledBase {\n  route: string;\n}\n\ntype HdsPaginationCompactArgsControlled =\n  | HdsPaginationCompactArgsControlledWithModel\n  | HdsPaginationCompactArgsControlledWithModels\n  | HdsPaginationCompactArgsControlledWithRoute;\n\ninterface HdsPaginationCompactArgsUncontrolled\n  extends HdsPaginationCompactArgs {\n  queryFunction?: undefined;\n}\n\nexport interface HdsPaginationCompactSignature {\n  Args:\n    | HdsPaginationCompactArgsControlled\n    | HdsPaginationCompactArgsUncontrolled;\n  Element: HTMLDivElement;\n}\n\n// for context about the decision to use these values, see:\n// https://hashicorp.slack.com/archives/C03A0N1QK8S/p1673546329082759\nexport const DEFAULT_PAGE_SIZES = [10, 30, 50];\nexport default class HdsPaginationCompact extends Component<HdsPaginationCompactSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  // This private variable is used to differentiate between\n  // \"uncontrolled\" component (where the state is handled internally) and\n  // \"controlled\" component (where the state is handled externally, by the consumer's code).\n  // In the first case, the variable stores the internal state of the component at any moment,\n  // and its value is updated internally according to the user's interaction with the component.\n  // In the second case, the variable stores *only* the initial state of the component (coming from the arguments)\n  // at rendering time, but from that moment on it's not updated anymore, no matter what interaction the user\n  // has with the component (the state is controlled externally, eg. via query parameters)\n  @tracked private _currentPageSize;\n  @tracked private _isControlled;\n  @tracked private _lastActivatedDirection?: HdsPaginationDirections;\n\n  showLabels = this.args.showLabels ?? true; // if the labels for the \"prev/next\" controls are visible\n  showSizeSelector = this.args.showSizeSelector ?? false; // if the \"size selector\" block is visible\n\n  constructor(owner: Owner, args: HdsPaginationCompactSignature['Args']) {\n    super(owner, args);\n\n    const { queryFunction } = this.args;\n\n    // This component works in two different ways, depending if we need to support\n    // routing through links (`LinkTo`) for the \"navigation controls\", or not.\n    // If there's no routing then the component behaves as \"uncontrolled\"\n    // (the state updates are handled by its internal logic).\n    // If instead the component needs to update the routing (and we infer this via the \"query\" arguments)\n    // then the component behaves as \"controlled\", where the state is\n    // initialized and updated using the arguments passed to it.\n\n    if (queryFunction === undefined) {\n      this._isControlled = false;\n    } else {\n      assert(\n        '@model, @models, or @route for \"Hds::Pagination::Compact\" must be provided when using the `@queryFunction` argument',\n        this.args.model !== undefined ||\n          this.args.models !== undefined ||\n          this.args.route !== undefined\n      );\n      assert(\n        '@queryFunction for \"Hds::Pagination::Compact\" must be a function',\n        typeof queryFunction === 'function'\n      );\n      this._isControlled = true;\n    }\n\n    // we assert that `this.pageSizes` will always be an array with at least one item\n    this._currentPageSize = this.args.currentPageSize ?? this.pageSizes[0];\n  }\n\n  get ariaLabel(): string {\n    return (\n      this.args.ariaLabel ??\n      this.hdsIntl.t('hds.components.pagination.compact.aria-label', {\n        default: 'Pagination',\n      })\n    );\n  }\n\n  // This very specific `get/set` pattern is used to handle the two different use cases of the component\n  // being \"controlled\" (when it has routing, meaning it needs to support pagination controls as links/`LinkTo`)\n  // vs being \"uncontrolled\" (see comments above for details).\n  //\n  // If it has routing (and so it's \"controlled\"), than the value (\"state\") of the `currentPageSize` variable\n  // is *always* determined by the controller via arguments (most of the times, connected to query parameters in the URL).\n  // For this reason the \"get\" method always returns the value from the `args`,\n  // while the \"set\" method never updates the private internal state (_variable).\n  //\n  // If instead it doesn't have routing (and so it's \"uncontrolled\") than the value (\"state\") of the `currentPageSize` variables\n  // is *always* determined by the component's internal logic (and updated according to the user interaction with it).\n  // For this reason the \"get\" and \"set\" methods always read from or write to the private internal state (_variable).\n\n  get currentPageSize(): number | undefined {\n    if (this._isControlled) {\n      return this.args.currentPageSize;\n    } else {\n      return this._currentPageSize;\n    }\n  }\n  set currentPageSize(value) {\n    if (this._isControlled) {\n      // noop\n    } else {\n      this._currentPageSize = value;\n    }\n  }\n\n  get pageSizes(): number[] {\n    const { pageSizes = DEFAULT_PAGE_SIZES } = this.args;\n\n    assert(\n      // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n      `pageSizes argument must be an array. Received: ${pageSizes}`,\n      Array.isArray(pageSizes) === true && pageSizes.length > 0\n    );\n\n    return pageSizes;\n  }\n\n  buildQueryParamsObject(\n    page: HdsPaginationDirections,\n    pageSize?: number\n  ): HdsInteractiveQuery {\n    if (this._isControlled) {\n      // if the component is controlled, we can assert that the queryFunction is defined\n      return this.args.queryFunction!(page, pageSize);\n    } else {\n      return {};\n    }\n  }\n\n  get routing(): HdsPaginationCompactRoutingQueryProps {\n    const routing: HdsPaginationCompactRoutingQueryProps = {\n      route: this.args.route ?? undefined,\n      model: this.args.model ?? undefined,\n      models: this.args.models ?? undefined,\n      replace: this.args.replace ?? undefined,\n    };\n\n    // the \"query\" is dynamic and needs to be calculated\n    if (this._isControlled) {\n      routing.queryPrev = this.buildQueryParamsObject(\n        HdsPaginationDirectionValues.Prev,\n        this.currentPageSize\n      );\n      routing.queryNext = this.buildQueryParamsObject(\n        HdsPaginationDirectionValues.Next,\n        this.currentPageSize\n      );\n    } else {\n      routing.queryPrev = undefined;\n      routing.queryNext = undefined;\n    }\n\n    return routing;\n  }\n\n  get shouldFocusPrevArrow() {\n    return (\n      this._lastActivatedDirection === HdsPaginationDirectionValues.Next &&\n      this.args.isDisabledNext === true &&\n      this.args.isDisabledPrev !== true\n    );\n  }\n\n  get shouldFocusNextArrow() {\n    return (\n      this._lastActivatedDirection === HdsPaginationDirectionValues.Prev &&\n      this.args.isDisabledPrev === true &&\n      this.args.isDisabledNext !== true\n    );\n  }\n\n  onFocusHandled = (): void => {\n    this._lastActivatedDirection = undefined;\n  };\n\n  onPageChange = (newPage: HdsPaginationDirections): void => {\n    const { onPageChange } = this.args;\n\n    this._lastActivatedDirection = newPage;\n\n    if (typeof onPageChange === 'function') {\n      onPageChange(newPage);\n    }\n  };\n\n  onPageSizeChange = (newPageSize: number): void => {\n    this._lastActivatedDirection = undefined;\n\n    const { onPageSizeChange } = this.args;\n\n    // invoke the callback function\n    if (typeof onPageSizeChange === 'function') {\n      onPageSizeChange(newPageSize);\n    }\n  };\n\n  <template>\n    <div class=\"hds-pagination hds-pagination--compact\" ...attributes>\n      <nav class=\"hds-pagination-nav\" aria-label={{this.ariaLabel}}>\n        <HdsPaginationNavArrow\n          @direction=\"prev\"\n          @showLabel={{this.showLabels}}\n          @route={{this.routing.route}}\n          @query={{this.routing.queryPrev}}\n          @model={{this.routing.model}}\n          @models={{this.routing.models}}\n          @replace={{this.routing.replace}}\n          @onClick={{this.onPageChange}}\n          @disabled={{@isDisabledPrev}}\n          @isFocused={{this.shouldFocusPrevArrow}}\n          @onFocusHandled={{this.onFocusHandled}}\n        />\n        <HdsPaginationNavArrow\n          @direction=\"next\"\n          @showLabel={{this.showLabels}}\n          @route={{this.routing.route}}\n          @query={{this.routing.queryNext}}\n          @model={{this.routing.model}}\n          @models={{this.routing.models}}\n          @replace={{this.routing.replace}}\n          @onClick={{this.onPageChange}}\n          @disabled={{@isDisabledNext}}\n          @isFocused={{this.shouldFocusNextArrow}}\n          @onFocusHandled={{this.onFocusHandled}}\n        />\n      </nav>\n\n      {{#if this.showSizeSelector}}\n        <HdsPaginationSizeSelector\n          @pageSizes={{this.pageSizes}}\n          @label={{@sizeSelectorLabel}}\n          @selectedSize={{this.currentPageSize}}\n          @onChange={{this.onPageSizeChange}}\n        />\n      {{/if}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { eq } from 'ember-truth-helpers';\nimport { get } from '@ember/helper';\nimport { service } from '@ember/service';\n\nimport type Owner from '@ember/owner';\n\nimport { HdsPaginationDirectionValues } from '../types.ts';\nimport HdsPaginationInfo from '../info/index.gts';\nimport HdsPaginationNavArrow from '../nav/arrow.gts';\nimport HdsPaginationNavNumber from '../nav/number.gts';\nimport HdsPaginationNavEllipsis from '../nav/ellipsis.gts';\nimport HdsPaginationSizeSelector from '../size-selector/index.gts';\n\nimport type HdsIntlService from '../../../../services/hds-intl.ts';\n\nimport type {\n  HdsPaginationDirections,\n  HdsPaginationPage,\n  HdsPaginationRoutingProps,\n  HdsPaginationElliptizedPageArray,\n  HdsPaginationElliptizedPageArrayItem,\n} from '../types.ts';\nimport type { HdsInteractiveSignature } from '../../interactive/index.ts';\n\ninterface ElliptizeProps {\n  pages: number[];\n  current: number;\n  limit?: number;\n}\n\ntype HdsInteractiveQuery = HdsInteractiveSignature['Args']['query'];\n\ntype HdsPaginationNumberedRoutingQueryProps = HdsPaginationRoutingProps & {\n  queryNext?: HdsInteractiveQuery;\n  queryPrev?: HdsInteractiveQuery;\n  queryPages?: Record<\n    HdsPaginationElliptizedPageArrayItem,\n    HdsInteractiveQuery\n  >;\n};\n\ntype HdsPaginationQueryFunction = (\n  page: number,\n  pageSize: number\n) => HdsInteractiveQuery;\n\ninterface HdsPaginationNumberedArgs extends HdsPaginationRoutingProps {\n  ariaLabel?: string;\n  totalItems: number;\n  showLabels?: boolean;\n  isTruncated?: boolean;\n  currentPage?: number;\n  showInfo?: boolean;\n  showPageNumbers?: boolean;\n  showTotalItems?: boolean;\n  showSizeSelector?: boolean;\n  sizeSelectorLabel?: string;\n  pageSizes?: number[];\n  currentPageSize?: number;\n  queryFunction?: HdsPaginationQueryFunction;\n  onPageChange?: (page: number, pageSize: number) => unknown;\n  onPageSizeChange?: (pageSize: number) => unknown;\n}\n\ninterface HdsPaginationNumberedArgsControlledBase\n  extends HdsPaginationNumberedArgs {\n  currentPage: number;\n  currentPageSize: number;\n  queryFunction: HdsPaginationQueryFunction;\n}\n\ninterface HdsPaginationNumberedArgsControlledWithModel\n  extends HdsPaginationNumberedArgsControlledBase {\n  model: string | number;\n}\n\ninterface HdsPaginationNumberedArgsControlledWithModels\n  extends HdsPaginationNumberedArgsControlledBase {\n  models: Array<string | number>;\n}\ninterface HdsPaginationNumberedArgsControlledWithRoute\n  extends HdsPaginationNumberedArgsControlledBase {\n  route: string;\n}\n\ntype HdsPaginationNumberedArgsControlled =\n  | HdsPaginationNumberedArgsControlledWithModel\n  | HdsPaginationNumberedArgsControlledWithModels\n  | HdsPaginationNumberedArgsControlledWithRoute;\n\ninterface HdsPaginationNumberedArgsUncontrolled\n  extends HdsPaginationNumberedArgs {\n  queryFunction?: undefined;\n}\n\nexport interface HdsPaginationNumberedSignature {\n  Args:\n    | HdsPaginationNumberedArgsControlled\n    | HdsPaginationNumberedArgsUncontrolled;\n  Element: HTMLDivElement;\n}\n\nconst ELLIPSIS = '…';\n\n// for context about the decision to use these values, see:\n// https://hashicorp.slack.com/archives/C03A0N1QK8S/p1673546329082759\nexport const DEFAULT_PAGE_SIZES = [10, 30, 50];\n\nexport const elliptize = ({\n  pages,\n  current,\n  limit = 7,\n}: ElliptizeProps): HdsPaginationElliptizedPageArray => {\n  const length = pages.length;\n\n  let result = [];\n  let start;\n  let end;\n\n  if (length <= limit) {\n    return pages;\n  }\n\n  if (current <= length / 2) {\n    start = Math.ceil(limit / 2);\n    end = limit - start;\n  } else {\n    end = Math.ceil(limit / 2);\n    start = limit - end;\n  }\n\n  const sliceStart: HdsPaginationElliptizedPageArray = pages.slice(0, start);\n  const sliceEnd: HdsPaginationElliptizedPageArray = pages.slice(-end);\n\n  if (sliceStart.includes(current) && sliceStart.includes(current + 1)) {\n    // \"current\" (and its next sibling) is contained within the \"sliceStart\" block\n    sliceEnd.splice(0, 1, ELLIPSIS);\n    result = ([] as HdsPaginationElliptizedPageArray).concat(\n      sliceStart,\n      sliceEnd\n    );\n  } else if (sliceEnd.includes(current - 1) && sliceEnd.includes(current)) {\n    // \"current\" (and its prev sibling) is contained within the \"sliceEnd\" block\n    sliceStart.splice(-1, 1, ELLIPSIS);\n    result = ([] as HdsPaginationElliptizedPageArray).concat(\n      sliceStart,\n      sliceEnd\n    );\n  } else {\n    // this is a bit more tricky :)\n    // we need to calculate how many items there are before/after the current item\n    // since both the initial and ending blocks are always 2 items long (number + ellipsis)\n    // and there is always the \"current\" item, we can just subtract 5 from the limit\n    const delta = (limit - 5) / 2; // this is why the limit needs to be an odd number\n    // we slice the array starting at the \"current\" index, minus the delta, minus one because it's an array (zero-based)\n    const sliceCurr = pages.slice(current - delta - 1, current + delta);\n    result = ([] as HdsPaginationElliptizedPageArray).concat(\n      sliceStart.shift() as number,\n      ELLIPSIS,\n      sliceCurr,\n      ELLIPSIS,\n      sliceEnd.pop() as number\n    );\n  }\n\n  return result;\n};\n\nexport default class HdsPaginationNumbered extends Component<HdsPaginationNumberedSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  // These two private variables are used to differentiate between\n  // \"uncontrolled\" component (where the state is handled internally) and\n  // \"controlled\" component (where the state is handled externally, by the consumer's code).\n  // In the first case, these variables store the internal state of the component at any moment,\n  // and their value is updated internally according to the user's interaction with the component.\n  // In the second case, these variables store *only* the initial state of the component (coming from the arguments)\n  // at rendering time, but from that moment on they're not updated anymore, no matter what interaction the user\n  // has with the component (the state is controlled externally, eg. via query parameters)\n  @tracked private _currentPage;\n  @tracked private _currentPageSize;\n  @tracked private _isControlled;\n  @tracked private _lastActivatedDirection?: HdsPaginationDirections;\n\n  showInfo = this.args.showInfo ?? true; // if the \"info\" block is visible\n  showLabels = this.args.showLabels ?? false; // if the labels for the \"prev/next\" controls are visible\n  showSizeSelector = this.args.showSizeSelector ?? true; // if the \"size selector\" block is visible\n  showPageNumbers = this.args.showPageNumbers ?? true; // if the \"page numbers\" block is visible\n  isTruncated = this.args.isTruncated ?? true; // if the list of \"page numbers\" is truncated\n\n  constructor(owner: Owner, args: HdsPaginationNumberedSignature['Args']) {\n    super(owner, args);\n\n    const { queryFunction } = this.args;\n\n    // This component works in two different ways, depending if we need to support\n    // routing through links (`LinkTo`) for the \"navigation controls\", or not.\n    // If there's no routing then the component behaves as \"uncontrolled\"\n    // (the state updates - eg to the \"currentPage\" and \"currentPageSize\"\n    // are handled by its internal logic).\n    // If instead the component needs to update the routing (and we infer this via the \"query\" arguments)\n    // then the component behaves as \"controlled\", where the state is\n    // initialized and updated using the arguments passed to it.\n\n    if (queryFunction === undefined) {\n      this._isControlled = false;\n    } else {\n      assert(\n        '@model, @models, or @route for \"Hds::Pagination::Numbered\" must be provided when using the @queryFunction argument',\n        this.args.model !== undefined ||\n          this.args.models !== undefined ||\n          this.args.route !== undefined\n      );\n      assert(\n        '@queryFunction for \"Hds::Pagination::Numbered\" must be a function',\n        typeof queryFunction === 'function'\n      );\n      assert(\n        '@currentPage and @currentPageSize for \"Hds::Pagination::Numbered\" must be provided as numeric arguments when the pagination controls the routing',\n        typeof this.args.currentPageSize === 'number' &&\n          typeof this.args.currentPage === 'number'\n      );\n      this._isControlled = true;\n    }\n\n    assert(\n      '@totalItems for \"Hds::Pagination::Numbered\" must be defined as an integer number',\n      typeof this.args.totalItems === 'number'\n    );\n\n    this._currentPage = this.args.currentPage ?? 1;\n    // we assert that `this.pageSizes` will always be an array with at least one item\n    this._currentPageSize = this.args.currentPageSize ?? this.pageSizes[0];\n  }\n\n  get ariaLabel(): string {\n    return (\n      this.args.ariaLabel ??\n      this.hdsIntl.t('hds.components.pagination.numbered.aria-label', {\n        default: 'Pagination',\n      })\n    );\n  }\n\n  // This very specific `get/set` pattern is used to handle the two different use cases of the component\n  // being \"controlled\" (when it has routing, meaning it needs to support pagination controls as links/`LinkTo`)\n  // vs being \"uncontrolled\" (see comments above for details).\n  //\n  // If it has routing (and so it's \"controlled\"), than the value (\"state\") of the `currentPage/currentPageSize` variables\n  // is *always* determined by the controller via arguments (most of the times, connected to query parameters in the URL).\n  // For this reason the \"get\" method always returns the value from the `args`,\n  // while the \"set\" method never updates the private internal state (_variable).\n  //\n  // If instead it doesn't have routing (and so it's \"uncontrolled\") than the value (\"state\") of the `currentPage/currentPageSize` variables\n  // is *always* determined by the component's internal logic (and updated according to the user interaction with it).\n  // For this reason the \"get\" and \"set\" methods always read from or write to the private internal state (_variable).\n\n  get currentPage(): number {\n    if (this._isControlled) {\n      // if the component is controlled, `@currentPage` is asserted to be a number\n      return this.args.currentPage as number;\n    } else {\n      return this._currentPage;\n    }\n  }\n  set currentPage(value) {\n    if (this._isControlled) {\n      // noop\n    } else {\n      // if `this._isControlled` is `false`\n      this._currentPage = value;\n    }\n  }\n\n  get currentPageSize(): number {\n    if (this._isControlled) {\n      // if the component is controlled, `@currentPageSize` is asserted to be a number\n      return this.args.currentPageSize as number;\n    } else {\n      return this._currentPageSize as number;\n    }\n  }\n  set currentPageSize(value) {\n    if (this._isControlled) {\n      // noop\n    } else {\n      this._currentPageSize = value;\n    }\n  }\n\n  get pageSizes(): number[] {\n    const { pageSizes = DEFAULT_PAGE_SIZES } = this.args;\n\n    assert(\n      // TODO: Add test for this\n      // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n      `pageSizes argument must be an array with at least one item. Received: ${pageSizes}`,\n      Array.isArray(pageSizes) === true && pageSizes.length > 0\n    );\n\n    return pageSizes;\n  }\n\n  get itemsRangeStart(): number {\n    // Calculate the starting range of items displayed on current page\n    // if currentPage = 1st page and # of items per page is 10:\n    //  ( (1 - 1 = 0) * 10 = 0 ) + 1 = 1\n    // if current page = 2nd page:\n    // ( (2 - 1 = 1) * 10 = 10 ) + 1 = 11\n    return (this.currentPage - 1) * this.currentPageSize + 1;\n  }\n\n  get itemsRangeEnd(): number {\n    // Calculate ending range of items displayed on current page\n    // 2 cases: 1) full page of items or 2) last page of items\n    if (this.currentPage * this.currentPageSize < this.args.totalItems) {\n      // 1) full page of items (pages 1 to page before last):\n      return this.itemsRangeStart + this.currentPageSize - 1;\n    } else {\n      // 2) last page of items:\n      return this.args.totalItems;\n    }\n  }\n\n  get pages(): HdsPaginationElliptizedPageArray {\n    const pages = [];\n\n    for (let i = 1; i <= this.totalPages; i++) {\n      pages.push(i);\n    }\n\n    if (this.isTruncated) {\n      return elliptize({ pages, current: this.currentPage });\n    } else {\n      return pages;\n    }\n  }\n\n  get totalPages() {\n    return Math.max(Math.ceil(this.args.totalItems / this.currentPageSize), 1);\n  }\n\n  buildQueryParamsObject(\n    page: HdsPaginationElliptizedPageArrayItem,\n    pageSize: number\n  ): HdsInteractiveQuery {\n    // `page` may also be ellipsis\n    if (this._isControlled && typeof page === 'number') {\n      // if the component is controlled, `@queryFunction` is asserted to be a function\n      return this.args.queryFunction!(page, pageSize);\n    } else {\n      return {};\n    }\n  }\n\n  get routing(): HdsPaginationNumberedRoutingQueryProps {\n    const routing: HdsPaginationNumberedRoutingQueryProps = {\n      route: this.args.route ?? undefined,\n      model: this.args.model ?? undefined,\n      models: this.args.models ?? undefined,\n      replace: this.args.replace ?? undefined,\n    };\n\n    // the \"query\" is dynamic and needs to be calculated\n    if (this._isControlled) {\n      routing.queryPrev = this.buildQueryParamsObject(\n        this.currentPage - 1,\n        this.currentPageSize\n      );\n      routing.queryNext = this.buildQueryParamsObject(\n        this.currentPage + 1,\n        this.currentPageSize\n      );\n      // IMPORTANT: here we need to use an object and not an array\n      // otherwise the {{get object page}} will be shifted by one\n      // (the pages are 1-based while the array would be zero-based)\n      routing.queryPages = {};\n      this.pages.forEach(\n        (page) =>\n          (routing.queryPages![page] = this.buildQueryParamsObject(\n            page,\n            this.currentPageSize\n          ))\n      );\n    } else {\n      routing.queryPrev = undefined;\n      routing.queryNext = undefined;\n    }\n\n    return routing;\n  }\n\n  get isDisabledPrev() {\n    return this.currentPage === 1;\n  }\n\n  get isDisabledNext() {\n    return this.currentPage === this.totalPages;\n  }\n\n  get shouldFocusPrevArrow() {\n    return (\n      this._lastActivatedDirection === HdsPaginationDirectionValues.Next &&\n      this.isDisabledNext &&\n      !this.isDisabledPrev\n    );\n  }\n\n  get shouldFocusNextArrow() {\n    return (\n      this._lastActivatedDirection === HdsPaginationDirectionValues.Prev &&\n      this.isDisabledPrev &&\n      !this.isDisabledNext\n    );\n  }\n\n  onFocusHandled = (): void => {\n    this._lastActivatedDirection = undefined;\n  };\n\n  onPageChange = (page: HdsPaginationPage) => {\n    this._lastActivatedDirection = undefined;\n\n    let gotoPageNumber;\n    if (page === HdsPaginationDirectionValues.Prev && this.currentPage > 1) {\n      gotoPageNumber = this.currentPage - 1;\n    } else if (\n      page === HdsPaginationDirectionValues.Next &&\n      this.currentPage < this.totalPages\n    ) {\n      gotoPageNumber = this.currentPage + 1;\n    } else {\n      gotoPageNumber = page;\n    }\n\n    // we want to invoke the `onPageChange` callback only on actual page change\n    if (gotoPageNumber !== this.currentPage) {\n      // we have already determined that `gotoPageNumber` is not `prev` or `next`\n      this.currentPage = gotoPageNumber as number;\n\n      const { onPageChange } = this.args;\n\n      if (typeof onPageChange === 'function') {\n        onPageChange(this.currentPage, this.currentPageSize);\n      }\n\n      if (\n        page === HdsPaginationDirectionValues.Prev ||\n        page === HdsPaginationDirectionValues.Next\n      ) {\n        this._lastActivatedDirection = page;\n      }\n    }\n  };\n\n  onPageSizeChange = (newPageSize: number) => {\n    this._lastActivatedDirection = undefined;\n\n    const { onPageSizeChange } = this.args;\n\n    if (!this._isControlled) {\n      // notice: we agreed to reset the pagination to the first element (any alternative would result in an unpredictable UX)\n      this.currentPage = 1;\n      this.currentPageSize = newPageSize;\n    }\n\n    // invoke the callback function\n    if (typeof onPageSizeChange === 'function') {\n      onPageSizeChange(newPageSize);\n    }\n  };\n\n  elliptizedPageArrayItemAsNumber = (\n    item: HdsPaginationElliptizedPageArrayItem\n  ): number => {\n    if (typeof item === 'number') {\n      return item;\n    } else {\n      throw new Error('Expected a number, but got an ellipsis');\n    }\n  };\n\n  getPageNumberQuery = (page: HdsPaginationElliptizedPageArrayItem) => {\n    return this.routing.queryPages![this.elliptizedPageArrayItemAsNumber(page)];\n  };\n\n  <template>\n    <div class=\"hds-pagination hds-pagination--numbered\" ...attributes>\n      {{#if this.showInfo}}\n        <HdsPaginationInfo\n          @itemsRangeStart={{this.itemsRangeStart}}\n          @itemsRangeEnd={{this.itemsRangeEnd}}\n          @totalItems={{@totalItems}}\n          @showTotalItems={{@showTotalItems}}\n        />\n      {{/if}}\n\n      <nav class=\"hds-pagination-nav\" aria-label={{this.ariaLabel}}>\n        <HdsPaginationNavArrow\n          @direction=\"prev\"\n          @showLabel={{this.showLabels}}\n          @route={{this.routing.route}}\n          @query={{this.routing.queryPrev}}\n          @model={{this.routing.model}}\n          @models={{this.routing.models}}\n          @replace={{this.routing.replace}}\n          @onClick={{this.onPageChange}}\n          @disabled={{this.isDisabledPrev}}\n          @isFocused={{this.shouldFocusPrevArrow}}\n          @onFocusHandled={{this.onFocusHandled}}\n        />\n        {{#if this.showPageNumbers}}\n          <ul class=\"hds-pagination-nav__page-list\">\n            {{#each this.pages as |page|}}\n              <li class=\"hds-pagination-nav__page-item\">\n                {{#if (eq page \"…\")}}\n                  <HdsPaginationNavEllipsis />\n                {{else}}\n                  <HdsPaginationNavNumber\n                    @page={{this.elliptizedPageArrayItemAsNumber page}}\n                    @route={{this.routing.route}}\n                    @query={{get this.routing.queryPages page}}\n                    @model={{this.routing.model}}\n                    @models={{this.routing.models}}\n                    @replace={{this.routing.replace}}\n                    @onClick={{this.onPageChange}}\n                    @isSelected={{if (eq page this.currentPage) true false}}\n                  />\n                {{/if}}\n              </li>\n            {{/each}}\n          </ul>\n        {{/if}}\n        <HdsPaginationNavArrow\n          @direction=\"next\"\n          @showLabel={{this.showLabels}}\n          @route={{this.routing.route}}\n          @query={{this.routing.queryNext}}\n          @model={{this.routing.model}}\n          @models={{this.routing.models}}\n          @replace={{this.routing.replace}}\n          @onClick={{this.onPageChange}}\n          @disabled={{this.isDisabledNext}}\n          @isFocused={{this.shouldFocusNextArrow}}\n          @onFocusHandled={{this.onFocusHandled}}\n        />\n      </nav>\n\n      {{#if this.showSizeSelector}}\n        <HdsPaginationSizeSelector\n          @pageSizes={{this.pageSizes}}\n          @label={{@sizeSelectorLabel}}\n          @selectedSize={{this.currentPageSize}}\n          @onChange={{this.onPageSizeChange}}\n        />\n      {{/if}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { on } from '@ember/modifier';\n\nimport HdsRevealToggleButton from './toggle/button.gts';\nimport HdsDisclosurePrimitive from '../disclosure-primitive/index.gts';\n\nimport type { HdsDisclosurePrimitiveSignature } from '../disclosure-primitive/index.gts';\nimport type { HdsRevealToggleButtonSignature } from './toggle/button.gts';\n\nexport interface HdsRevealSignature {\n  Args: {\n    text: HdsRevealToggleButtonSignature['Args']['text'];\n    textWhenOpen?: HdsRevealToggleButtonSignature['Args']['text'];\n    isOpen?: HdsRevealToggleButtonSignature['Args']['isOpen'];\n    ariaDescribedBy?: string;\n  };\n  Blocks: {\n    default: [];\n  };\n  Element: HdsDisclosurePrimitiveSignature['Element'];\n}\n\nexport default class HdsReveal extends Component<HdsRevealSignature> {\n  getText = (isOpen: boolean): string => {\n    if (isOpen && this.args.textWhenOpen !== undefined) {\n      return this.args.textWhenOpen;\n    } else {\n      if (this.args.text !== undefined) {\n        return this.args.text;\n      } else {\n        assert('@text for \"Hds::Reveal\" must have a valid value');\n      }\n    }\n  };\n\n  <template>\n    <HdsDisclosurePrimitive\n      class=\"hds-reveal\"\n      @isOpen={{@isOpen}}\n      ...attributes\n    >\n      <:toggle as |t|>\n        <HdsRevealToggleButton\n          aria-controls={{t.contentId}}\n          aria-describedby={{@ariaDescribedBy}}\n          @text={{this.getText t.isOpen}}\n          @isOpen={{t.isOpen}}\n          {{on \"click\" t.onClickToggle}}\n        />\n      </:toggle>\n\n      <:content>\n        <div\n          class=\"hds-reveal__content hds-typography-body-200 hds-foreground-primary\"\n        >\n          {{yield}}\n        </div>\n      </:content>\n    </HdsDisclosurePrimitive>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { hash } from '@ember/helper';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport { getElementId } from '../../../utils/hds-get-element-id.ts';\nimport HdsRichTooltipToggle from './toggle.gts';\nimport HdsRichTooltipBubble from './bubble.gts';\nimport HdsPopoverPrimitive from '../popover-primitive/index.gts';\n\nimport type { HdsPopoverPrimitiveSignature } from '../popover-primitive/index.gts';\n\nexport interface HdsRichTooltipSignature {\n  Args: Omit<HdsPopoverPrimitiveSignature['Args'], 'enableSoftEvents'>;\n  Blocks: {\n    default: [\n      {\n        Toggle?: WithBoundArgs<\n          typeof HdsRichTooltipToggle,\n          'popoverId' | 'setupPrimitiveToggle' | 'isOpen'\n        >;\n        Bubble?: WithBoundArgs<\n          typeof HdsRichTooltipBubble,\n          'arrowId' | 'popoverId' | 'setupPrimitivePopover' | 'isOpen'\n        >;\n        isOpen?: boolean;\n        close: (event?: Event) => void;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsRichTooltip extends Component<HdsRichTooltipSignature> {\n  private _elementId: string = getElementId(this);\n  private _arrowId: string = `arrow-${this._elementId}`;\n  private _popoverId: string = `popover-${this._elementId}`;\n\n  get enableSoftEvents(): boolean {\n    return this.args.enableClickEvents !== true;\n  }\n\n  get enableClickEvents(): boolean {\n    return this.args.enableClickEvents ?? false;\n  }\n\n  <template>\n    {{! IMPORTANT: we need to add \"squishies\" here (~) because otherwise the whitespace added by Ember becomes visible in the underlined text (being an inline element) - See https://handlebarsjs.com/guide/expressions.html#whitespace-control }}\n    <HdsPopoverPrimitive\n      @isOpen={{@isOpen}}\n      @onOpen={{@onOpen}}\n      @onClose={{@onClose}}\n      @onFocusOut={{@onFocusOut}}\n      @enableSoftEvents={{this.enableSoftEvents}}\n      @enableClickEvents={{this.enableClickEvents}}\n      as |PP|\n    ><div class=\"hds-rich-tooltip\" ...attributes {{PP.setupPrimitiveContainer}}>\n        {{~yield\n          (hash\n            Toggle=(component\n              HdsRichTooltipToggle\n              popoverId=this._popoverId\n              setupPrimitiveToggle=PP.setupPrimitiveToggle\n              isOpen=PP.isOpen\n            )\n            Bubble=(component\n              HdsRichTooltipBubble\n              arrowId=this._arrowId\n              popoverId=this._popoverId\n              setupPrimitivePopover=PP.setupPrimitivePopover\n              isOpen=PP.isOpen\n            )\n            isOpen=PP.isOpen\n            close=PP.hidePopover\n          )\n        ~}}\n      </div></HdsPopoverPrimitive>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { hash } from '@ember/helper';\nimport style from 'ember-style-modifier';\n\nimport HdsButton from '../button/index.gts';\nimport HdsDropdown from '../dropdown/index.gts';\nimport HdsFormSelectBase from '../form/select/base.gts';\nimport HdsFormTextInputBase from '../form/text-input/base.gts';\nimport HdsFormSuperSelectSingleBase from '../form/super-select/single/base.gts';\nimport HdsFormSuperSelectMultipleBase from '../form/super-select/multiple/base.gts';\nimport HdsYield from '../yield/index.gts';\n\nexport interface HdsSegmentedGroupSignature {\n  Args: {\n    isFullWidth?: boolean;\n    maxWidth?: string;\n  };\n  Blocks: {\n    default: [\n      {\n        Button?: typeof HdsButton;\n        Dropdown?: typeof HdsDropdown;\n        Select?: typeof HdsFormSelectBase;\n        TextInput?: typeof HdsFormTextInputBase;\n        SuperSelectSingle?: typeof HdsFormSuperSelectSingleBase;\n        SuperSelectMultiple?: typeof HdsFormSuperSelectMultipleBase;\n        Generic?: typeof HdsYield;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsSegmentedGroup extends Component<HdsSegmentedGroupSignature> {\n  get classNames() {\n    const classes = ['hds-segmented-group'];\n\n    if (this.args.isFullWidth) {\n      classes.push('hds-segmented-group--is-full-width');\n    }\n\n    return classes.join(' ');\n  }\n\n  get styles(): Record<string, string> {\n    const styles: { [key: string]: string } = {};\n    if (this.args.maxWidth) {\n      styles['--hds-segmented-group-max-width'] = this.args.maxWidth;\n    }\n\n    return styles;\n  }\n\n  <template>\n    <div class={{this.classNames}} {{style this.styles}} ...attributes>\n      {{yield\n        (hash\n          Button=HdsButton\n          Dropdown=HdsDropdown\n          Select=HdsFormSelectBase\n          TextInput=HdsFormTextInputBase\n          SuperSelectSingle=HdsFormSuperSelectSingleBase\n          SuperSelectMultiple=HdsFormSuperSelectMultipleBase\n          Generic=HdsYield\n        )\n      }}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { schedule } from '@ember/runloop';\nimport { hash } from '@ember/helper';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport { HdsStepperTitleTagValues } from '../types.ts';\nimport HdsStepperListStep from './step.gts';\n\nimport type { HdsStepperTitleTags, HdsStepperListStepIds } from '../types.ts';\n\nexport interface HdsStepperListSignature {\n  Args: {\n    titleTag?: HdsStepperTitleTags;\n    ariaLabel: string;\n  };\n  Blocks: {\n    default: [\n      {\n        Step?: WithBoundArgs<\n          typeof HdsStepperListStep,\n          'titleTag' | 'stepIds' | 'didInsertNode' | 'willDestroyNode'\n        >;\n      },\n    ];\n  };\n  Element: HTMLElement;\n}\n\nexport default class HdsStepperList extends Component<HdsStepperListSignature> {\n  @tracked private _stepIds: HdsStepperListStepIds = [];\n\n  get titleTag(): HdsStepperTitleTags {\n    return this.args.titleTag ?? HdsStepperTitleTagValues.Div;\n  }\n\n  didInsertStep = (element: HTMLElement): void => {\n    // eslint-disable-next-line ember/no-runloop\n    schedule('afterRender', (): void => {\n      this._stepIds = [...this._stepIds, element.id];\n    });\n  };\n\n  willDestroyStep = (element: HTMLElement): void => {\n    this._stepIds = this._stepIds.filter(\n      (stepId): boolean => stepId !== element.id\n    );\n  };\n\n  <template>\n    <ol class=\"hds-stepper-list\" aria-label={{@ariaLabel}} ...attributes>\n      {{yield\n        (hash\n          Step=(component\n            HdsStepperListStep\n            titleTag=this.titleTag\n            stepIds=this._stepIds\n            didInsertNode=this.didInsertStep\n            willDestroyNode=this.willDestroyStep\n          )\n        )\n      }}\n    </ol>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { schedule } from '@ember/runloop';\nimport { assert } from '@ember/debug';\nimport { modifier } from 'ember-modifier';\nimport { hash } from '@ember/helper';\nimport { and } from 'ember-truth-helpers';\nimport style from 'ember-style-modifier';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport { HdsStepperTitleTagValues } from '../types.ts';\nimport HdsStepperNavStep from './step.gts';\nimport HdsStepperNavPanel from './panel.gts';\n\nimport type {\n  HdsStepperTitleTags,\n  HdsStepperNavStepIds,\n  HdsStepperNavStep as HdsStepperNavStepType,\n  HdsStepperNavPanelIds,\n} from '../types.ts';\n\nconst STEP_ELEMENT_SELECTOR = '.hds-stepper-nav__step-content';\nconst PANEL_ELEMENT_SELECTOR = '.hds-stepper-nav__panel';\n\nexport interface HdsStepperNavSignature {\n  Args: {\n    steps?: HdsStepperNavStepType[];\n    currentStep?: number;\n    isInteractive?: boolean;\n    titleTag?: HdsStepperTitleTags;\n    ariaLabel: string;\n    onStepChange?: (event: MouseEvent, stepNumber: number) => void;\n  };\n  Blocks: {\n    body?: [];\n    default: [\n      {\n        Step?: WithBoundArgs<\n          typeof HdsStepperNavStep,\n          | 'currentStep'\n          | 'isNavInteractive'\n          | 'titleTag'\n          | 'stepIds'\n          | 'panelIds'\n          | 'didInsertNode'\n          | 'willDestroyNode'\n          | 'onStepChange'\n          | 'onKeyUp'\n        >;\n        Panel?: WithBoundArgs<\n          typeof HdsStepperNavPanel,\n          | 'currentStep'\n          | 'isNavInteractive'\n          | 'stepIds'\n          | 'panelIds'\n          | 'didInsertNode'\n          | 'willDestroyNode'\n        >;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsStepperNav extends Component<HdsStepperNavSignature> {\n  @tracked private _stepIds: HdsStepperNavStepIds = [];\n  @tracked private _stepNodes: HTMLElement[] = [];\n  @tracked private _panelNodes: HTMLElement[] = [];\n  @tracked private _panelIds: HdsStepperNavPanelIds = [];\n\n  private _element!: HTMLDivElement;\n\n  private _setUpStepperNav = modifier((element: HTMLDivElement) => {\n    if (this.isInteractive) {\n      assert(\n        'If @isInteractive is true, the number of Steps must be equal to the number of Panels',\n        this._stepNodes.length === this._panelNodes.length\n      );\n    }\n\n    this._element = element;\n\n    return () => {};\n  });\n\n  get currentStep(): number {\n    const { currentStep } = this.args;\n\n    if (currentStep) {\n      if (currentStep < 0) {\n        return 0;\n      } else {\n        return currentStep;\n      }\n    } else {\n      return 0;\n    }\n  }\n\n  get isInteractive(): boolean {\n    return this.args.isInteractive != undefined\n      ? this.args.isInteractive\n      : true;\n  }\n\n  get titleTag(): HdsStepperTitleTags {\n    return this.args.titleTag ?? HdsStepperTitleTagValues.Div;\n  }\n\n  get inlineStyles(): Record<string, unknown> {\n    const inlineStyles: {\n      '--hds-stepper-nav-progress-bar-width'?: string;\n    } = {};\n\n    inlineStyles['--hds-stepper-nav-progress-bar-width'] =\n      this.progressBarWidthStyle;\n\n    return inlineStyles;\n  }\n\n  get progressBarWidthStyle(): string {\n    let progressBarWidth = 0;\n    let progressBarOffset = 0;\n    if (this._stepIds.length != 0) {\n      if (this.currentStep >= this._stepIds.length) {\n        progressBarWidth = 100;\n        progressBarOffset = 0;\n      } else {\n        const activeStepWidth = 1 / this._stepIds.length / 2;\n        const width = this.currentStep / this._stepIds.length;\n        progressBarWidth = (width + activeStepWidth) * 100;\n        progressBarOffset = 16;\n      }\n    }\n    return `calc(${progressBarWidth}% - ${progressBarOffset}px)`;\n  }\n\n  didInsertStep = (): void => {\n    // eslint-disable-next-line ember/no-runloop\n    schedule('afterRender', (): void => {\n      this.updateSteps();\n    });\n  };\n\n  willDestroyStep = (element: HTMLElement): void => {\n    // eslint-disable-next-line ember/no-runloop\n    schedule('afterRender', (): void => {\n      this._stepNodes = this._stepNodes.filter(\n        (node): boolean => node.id !== element.id\n      );\n      this._stepIds = this._stepIds.filter(\n        (stepId): boolean => stepId !== element.id\n      );\n    });\n  };\n\n  didInsertPanel = (): void => {\n    // eslint-disable-next-line ember/no-runloop\n    schedule('afterRender', (): void => {\n      this.updatePanels();\n    });\n  };\n\n  willDestroyPanel = (element: HTMLElement): void => {\n    // eslint-disable-next-line ember/no-runloop\n    schedule('afterRender', (): void => {\n      this._panelNodes = this._panelNodes.filter(\n        (node): boolean => node.id !== element.id\n      );\n      this._panelIds = this._panelIds.filter(\n        (panelId): boolean => panelId !== element.id\n      );\n    });\n  };\n\n  onKeyUp = (currentStepIndex: number, event: KeyboardEvent): void => {\n    const leftArrow = 'ArrowLeft';\n    const rightArrow = 'ArrowRight';\n\n    if (event.key === rightArrow) {\n      const nextStepIndex = this.findNextInteractiveStepIndex(\n        currentStepIndex,\n        1\n      );\n      this.focusStep(nextStepIndex, event);\n    } else if (event.key === leftArrow) {\n      const prevStepIndex = this.findNextInteractiveStepIndex(\n        currentStepIndex,\n        this._stepIds.length - 1\n      );\n      this.focusStep(prevStepIndex, event);\n    }\n  };\n\n  // Update the step arrays based on how they are ordered in the DOM\n  private updateSteps = (): void => {\n    const steps = this._element.querySelectorAll(STEP_ELEMENT_SELECTOR);\n    let newStepIds: HdsStepperNavStepIds = [];\n    let newStepNodes: HTMLElement[] = [];\n    steps.forEach((step) => {\n      newStepIds = [...newStepIds, step.id];\n      newStepNodes = [...newStepNodes, step as HTMLElement];\n    });\n    this._stepIds = newStepIds;\n    this._stepNodes = newStepNodes;\n  };\n\n  // Update the panel arrays based on how they are ordered in the DOM\n  private updatePanels = (): void => {\n    const panels = this._element.querySelectorAll(PANEL_ELEMENT_SELECTOR);\n    let newPanelIds: HdsStepperNavPanelIds = [];\n    let newPanelNodes: HTMLElement[] = [];\n    panels.forEach((panel) => {\n      newPanelIds = [...newPanelIds, panel.id];\n      newPanelNodes = [...newPanelNodes, panel as HTMLElement];\n    });\n    this._panelIds = newPanelIds;\n    this._panelNodes = newPanelNodes;\n  };\n\n  // Find the next interactive step to focus based on keyboard input\n  private findNextInteractiveStepIndex = (\n    currentStepIndex: number,\n    increment: number\n  ): number => {\n    let newStepIndex = (currentStepIndex + increment) % this._stepIds.length;\n    while (newStepIndex > this.currentStep) {\n      newStepIndex = (newStepIndex + increment) % this._stepIds.length;\n    }\n    return newStepIndex;\n  };\n\n  // Focus step for keyboard & mouse nav\n  private focusStep = (stepIndex: number, event: KeyboardEvent): void => {\n    event.preventDefault();\n    const step = this._stepNodes[stepIndex];\n    step?.focus();\n  };\n\n  get classNames() {\n    const classes = ['hds-stepper-nav'];\n\n    if (this.isInteractive) {\n      classes.push('hds-stepper-nav--interactive');\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <div\n      class={{this.classNames}}\n      ...attributes\n      {{style this.inlineStyles}}\n      {{this._setUpStepperNav}}\n    >\n      <div class=\"hds-stepper-nav__progress-bar\"></div>\n      <ol\n        class=\"hds-stepper-nav__list\"\n        aria-label={{@ariaLabel}}\n        role={{if this.isInteractive \"tablist\"}}\n      >\n        {{#if @steps}}\n          {{#each @steps as |step|}}\n            <HdsStepperNavStep\n              @currentStep={{this.currentStep}}\n              @isNavInteractive={{this.isInteractive}}\n              @titleTag={{this.titleTag}}\n              @didInsertNode={{this.didInsertStep}}\n              @willDestroyNode={{this.willDestroyStep}}\n              @stepIds={{this._stepIds}}\n              @panelIds={{this._panelIds}}\n              @onStepChange={{@onStepChange}}\n              @onKeyUp={{this.onKeyUp}}\n            >\n              <:title>{{step.title}}</:title>\n              <:description>{{step.description}}</:description>\n            </HdsStepperNavStep>\n          {{/each}}\n        {{else}}\n          {{yield\n            (hash\n              Step=(component\n                HdsStepperNavStep\n                currentStep=this.currentStep\n                isNavInteractive=this.isInteractive\n                titleTag=this.titleTag\n                stepIds=this._stepIds\n                panelIds=this._panelIds\n                didInsertNode=this.didInsertStep\n                willDestroyNode=this.willDestroyStep\n                onStepChange=@onStepChange\n                onKeyUp=this.onKeyUp\n              )\n            )\n          }}\n        {{/if}}\n      </ol>\n      {{#if (and @steps (has-block \"body\"))}}\n        {{#each @steps}}\n          <HdsStepperNavPanel\n            @currentStep={{this.currentStep}}\n            @isNavInteractive={{this.isInteractive}}\n            @stepIds={{this._stepIds}}\n            @panelIds={{this._panelIds}}\n            @didInsertNode={{this.didInsertPanel}}\n            @willDestroyNode={{this.willDestroyPanel}}\n          >\n            {{yield to=\"body\"}}\n          </HdsStepperNavPanel>\n        {{/each}}\n      {{else}}\n        {{yield\n          (hash\n            Panel=(component\n              HdsStepperNavPanel\n              currentStep=this.currentStep\n              isNavInteractive=this.isInteractive\n              stepIds=this._stepIds\n              panelIds=this._panelIds\n              didInsertNode=this.didInsertPanel\n              willDestroyNode=this.willDestroyPanel\n            )\n          )\n        }}\n      {{/if}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\n\nimport {\n  HdsStepperStatusesValues,\n  HdsStepperStatusToIconsValues,\n} from '../types.ts';\nimport HdsIcon from '../../icon/index.gts';\n\nimport type { HdsIconSignature } from '../../icon/index.gts';\nimport type { HdsStepperStatuses } from '../types.ts';\n\nexport const DEFAULT_STATUS = HdsStepperStatusesValues.Incomplete;\nexport const STATUSES: HdsStepperStatuses[] = Object.values(\n  HdsStepperStatusesValues\n);\n\nexport const MAPPING_STATUS_TO_ICONS = HdsStepperStatusToIconsValues;\n\nexport interface HdsStepperTaskIndicatorSignature {\n  Args: {\n    status?: HdsStepperStatuses;\n    isInteractive?: boolean;\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsStepperTaskIndicator extends Component<HdsStepperTaskIndicatorSignature> {\n  get status(): HdsStepperStatuses {\n    const { status = DEFAULT_STATUS } = this.args;\n\n    assert(\n      `@status for \"Hds::Stepper::Task::Indicator\" must be one of the following: ${STATUSES.join(\n        ', '\n      )}; received: ${status}`,\n      STATUSES.includes(status)\n    );\n\n    return status;\n  }\n\n  get isInteractive(): boolean {\n    return this.args.isInteractive || false;\n  }\n\n  get iconName(): HdsIconSignature['Args']['name'] {\n    return MAPPING_STATUS_TO_ICONS[this.status];\n  }\n\n  get classNames(): string {\n    const classes = ['hds-stepper-indicator-task'];\n\n    // Based on the @status arg\n    classes.push(`hds-stepper-indicator-task--status-${this.status}`);\n\n    if (this.isInteractive) {\n      classes.push(`hds-stepper-indicator-task--is-interactive`);\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <div class={{this.classNames}} ...attributes>\n      <HdsIcon\n        class=\"hds-stepper-indicator-task__icon\"\n        @name={{this.iconName}}\n        @size=\"16\"\n      />\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport { fn, hash } from '@ember/helper';\nimport { eq } from 'ember-truth-helpers';\nimport { sortBy } from '@nullvoxpopuli/ember-composable-helpers';\n\nimport type { WithBoundArgs } from '@glint/template';\nimport type Owner from '@ember/owner';\n\nimport {\n  HdsTableDensityValues,\n  HdsTableThSortOrderValues,\n  HdsTableVerticalAlignmentValues,\n} from './types.ts';\nimport HdsTableTr from './tr.gts';\nimport HdsTableTh from './th.gts';\nimport HdsTableThSort from './th-sort.gts';\nimport HdsTableTd from './td.gts';\n\nimport type {\n  HdsTableColumn,\n  HdsTableDensities,\n  HdsTableHorizontalAlignment,\n  HdsTableOnSelectionChangeSignature,\n  HdsTableSelectableRow,\n  HdsTableSortingFunction,\n  HdsTableThSortOrder,\n  HdsTableVerticalAlignment,\n  HdsTableModel,\n} from './types.ts';\nimport type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base.gts';\nimport type HdsIntlService from '../../../services/hds-intl.ts';\n\nexport const DENSITIES: HdsTableDensities[] = Object.values(\n  HdsTableDensityValues\n);\nexport const DEFAULT_DENSITY = HdsTableDensityValues.Medium;\n\nexport const VALIGNMENTS: HdsTableVerticalAlignment[] = Object.values(\n  HdsTableVerticalAlignmentValues\n);\nexport const DEFAULT_VALIGN = HdsTableVerticalAlignmentValues.Top;\n\nexport interface HdsTableSignature<T = HdsTableModel> {\n  Args: {\n    align?: HdsTableHorizontalAlignment;\n    caption?: string;\n    columns?: HdsTableColumn[];\n    density?: HdsTableDensities;\n    identityKey?: string;\n    isFixedLayout?: boolean;\n    isSelectable?: boolean;\n    isStriped?: boolean;\n    model?: T[];\n    onSelectionChange?: (selection: HdsTableOnSelectionChangeSignature) => void;\n    onSort?: (sortBy: string, sortOrder: HdsTableThSortOrder) => void;\n    selectionAriaLabelSuffix?: string;\n    sortBy?: string;\n    selectableColumnKey?: string;\n    sortedMessageText?: string;\n    sortOrder?: HdsTableThSortOrder;\n    valign?: HdsTableVerticalAlignment;\n  };\n  Blocks: {\n    head?: [\n      {\n        Tr?: WithBoundArgs<\n          typeof HdsTableTr,\n          | 'selectionScope'\n          | 'isSelectable'\n          | 'onSelectionChange'\n          | 'didInsert'\n          | 'willDestroy'\n          | 'selectionAriaLabelSuffix'\n          | 'onClickSortBySelected'\n          | 'sortBySelectedOrder'\n        >;\n        Th?: typeof HdsTableTh;\n        ThSort?: typeof HdsTableThSort;\n        sortBy?: string;\n        sortOrder?: HdsTableThSortOrder;\n        setSortBy?: (column: string) => void;\n      },\n    ];\n    body?: [\n      {\n        Td?: WithBoundArgs<typeof HdsTableTd, 'align'>;\n        Tr?: WithBoundArgs<\n          typeof HdsTableTr,\n          | 'selectionScope'\n          | 'isSelectable'\n          | 'onSelectionChange'\n          | 'didInsert'\n          | 'willDestroy'\n          | 'selectionAriaLabelSuffix'\n        >;\n        Th?: WithBoundArgs<typeof HdsTableTh, 'scope'>;\n        data?: T;\n        rowIndex?: number;\n        sortBy?: string;\n        sortOrder?: HdsTableThSortOrder;\n      },\n    ];\n  };\n  Element: HTMLTableElement;\n}\n\nexport default class HdsTable<T = HdsTableModel> extends Component<\n  HdsTableSignature<T>\n> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  @tracked sortBy;\n  @tracked sortOrder;\n  @tracked\n  private _selectAllCheckbox?: HdsFormCheckboxBaseSignature['Element'] =\n    undefined;\n  private _selectableRows: HdsTableSelectableRow[] = [];\n  @tracked private _isSelectAllCheckboxSelected?: boolean = undefined;\n  private _isBulkSelectionChange = false;\n\n  constructor(owner: Owner, args: HdsTableSignature<T>['Args']) {\n    super(owner, args);\n    this.sortBy = this.args.sortBy ?? undefined;\n    this.sortOrder = this.args.sortOrder ?? HdsTableThSortOrderValues.Asc;\n  }\n\n  get getSortCriteria(): string | HdsTableSortingFunction<unknown> {\n    // get the current column\n    const currentColumn = this.args?.columns?.find(\n      (column) => column.key === this.sortBy\n    );\n    if (\n      // check if there is a custom sorting function associated with the current `sortBy` column (we assume the column has `isSortable`)\n      currentColumn?.sortingFunction &&\n      typeof currentColumn.sortingFunction === 'function'\n    ) {\n      return currentColumn.sortingFunction;\n    } else {\n      // otherwise fallback to the default format \"sortBy:sortOrder\"\n      return `${this.sortBy}:${this.sortOrder}`;\n    }\n  }\n\n  get identityKey(): string | undefined {\n    // we have to provide a way for the consumer to pass undefined because Ember tries to interpret undefined as missing an arg and therefore falls back to the default\n    if (this.args.identityKey === 'none') {\n      return undefined;\n    } else {\n      return this.args.identityKey ?? '@identity';\n    }\n  }\n\n  get sortedMessageText(): string {\n    if (this.args.sortedMessageText) {\n      return this.args.sortedMessageText;\n    } else if (this.sortBy && this.sortOrder) {\n      // we should allow the user to define a custom value here (e.g., for i18n) - tracked with HDS-965\n      const translatedSortOrder = {\n        [HdsTableThSortOrderValues.Asc]: this.hdsIntl.t(\n          'hds.components.common.ascending',\n          { default: 'ascending' }\n        ),\n        [HdsTableThSortOrderValues.Desc]: this.hdsIntl.t(\n          'hds.components.common.descending',\n          { default: 'descending' }\n        ),\n      }[this.sortOrder];\n      const lowerCaseTranslatedSortOrder = translatedSortOrder.toLowerCase();\n\n      return this.hdsIntl.t('hds.components.table.sorted-message-text', {\n        sortBy: this.sortBy,\n        sortOrder: lowerCaseTranslatedSortOrder,\n        default: `Sorted by ${this.sortBy} ${lowerCaseTranslatedSortOrder}`,\n      });\n    } else {\n      return '';\n    }\n  }\n\n  get isStriped(): boolean {\n    return this.args.isStriped ?? false;\n  }\n\n  get isFixedLayout(): boolean {\n    return this.args.isFixedLayout ?? false;\n  }\n\n  get density(): HdsTableDensities {\n    const { density = DEFAULT_DENSITY } = this.args;\n\n    assert(\n      `@density for \"Hds::Table\" must be one of the following: ${DENSITIES.join(\n        ', '\n      )}; received: ${density}`,\n      DENSITIES.includes(density)\n    );\n\n    return density;\n  }\n\n  get valign(): HdsTableVerticalAlignment {\n    const { valign = DEFAULT_VALIGN } = this.args;\n\n    assert(\n      `@valign for \"Hds::Table\" must be one of the following: ${VALIGNMENTS.join(\n        ', '\n      )}; received: ${valign}`,\n      VALIGNMENTS.includes(valign)\n    );\n\n    return valign;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-table'];\n\n    // add a class based on the @isStriped argument\n    if (this.isStriped) {\n      classes.push('hds-table--striped');\n    }\n\n    // add a class based on the @isFixedLayout argument\n    if (this.isFixedLayout) {\n      classes.push('hds-table--layout-fixed');\n    }\n\n    // add a class based on the @density argument\n    if (this.density) {\n      classes.push(`hds-table--density-${this.density}`);\n    }\n\n    // add a class based on the @valign argument\n    if (this.valign) {\n      classes.push(`hds-table--valign-${this.valign}`);\n    }\n\n    return classes.join(' ');\n  }\n\n  setSortBy = (column: string): void => {\n    if (this.sortBy === column) {\n      // check to see if the column is already sorted and invert the sort order if so\n      this.sortOrder =\n        this.sortOrder === HdsTableThSortOrderValues.Asc\n          ? HdsTableThSortOrderValues.Desc\n          : HdsTableThSortOrderValues.Asc;\n    } else {\n      // otherwise, set the sort order to ascending\n      this.sortBy = column;\n      this.sortOrder = HdsTableThSortOrderValues.Asc;\n    }\n\n    const { onSort } = this.args;\n\n    if (typeof onSort === 'function') {\n      onSort(this.sortBy, this.sortOrder);\n    }\n  };\n\n  onSelectionChangeCallback = (\n    checkbox?: HdsFormCheckboxBaseSignature['Element'],\n    selectionKey?: string\n  ): void => {\n    const { onSelectionChange } = this.args;\n    if (typeof onSelectionChange === 'function') {\n      onSelectionChange({\n        selectionKey: selectionKey,\n        selectionCheckboxElement: checkbox,\n        selectedRowsKeys: this._selectableRows.reduce<string[]>((acc, row) => {\n          if (row.checkbox.checked) {\n            acc.push(row.selectionKey);\n          }\n          return acc;\n        }, []),\n        selectableRowsStates: this._selectableRows.reduce(\n          (\n            acc: { selectionKey: string; isSelected: boolean | undefined }[],\n            row\n          ) => {\n            acc.push({\n              selectionKey: row.selectionKey,\n              isSelected: row.checkbox.checked,\n            });\n            return acc;\n          },\n          []\n        ),\n      });\n    }\n  };\n\n  onSelectionAllChange = (): void => {\n    this._isBulkSelectionChange = true;\n\n    this._selectableRows.forEach((row) => {\n      row.checkbox.checked = this._selectAllCheckbox?.checked ?? false;\n      row.checkbox.dispatchEvent(new Event('change', { bubbles: true }));\n    });\n\n    this._isBulkSelectionChange = false;\n    this._isSelectAllCheckboxSelected =\n      this._selectAllCheckbox?.checked ?? false;\n    this.onSelectionChangeCallback(this._selectAllCheckbox, 'all');\n  };\n\n  onSelectionRowChange = (\n    checkbox?: HdsFormCheckboxBaseSignature['Element'],\n    selectionKey?: string\n  ): void => {\n    if (this._isBulkSelectionChange) {\n      return;\n    }\n\n    this.setSelectAllState();\n    this.onSelectionChangeCallback(checkbox, selectionKey);\n  };\n\n  didInsertSelectAllCheckbox = (\n    checkbox: HdsFormCheckboxBaseSignature['Element']\n  ): void => {\n    this._selectAllCheckbox = checkbox;\n  };\n\n  willDestroySelectAllCheckbox = (): void => {\n    this._selectAllCheckbox = undefined;\n  };\n\n  didInsertRowCheckbox = (\n    checkbox: HdsFormCheckboxBaseSignature['Element'],\n    selectionKey?: string\n  ): void => {\n    if (selectionKey) {\n      this._selectableRows.push({ selectionKey, checkbox });\n    }\n    this.setSelectAllState();\n  };\n\n  willDestroyRowCheckbox = (selectionKey?: string): void => {\n    if (selectionKey === undefined) {\n      return;\n    }\n\n    const index = this._selectableRows.findIndex(\n      (row): boolean => row.selectionKey === selectionKey\n    );\n\n    if (index === -1) {\n      return;\n    }\n\n    this._selectableRows.splice(index, 1);\n\n    this.setSelectAllState();\n  };\n\n  setSelectAllState = (): void => {\n    if (this._selectAllCheckbox) {\n      const selectableRowsCount = this._selectableRows.length;\n      const selectedRowsCount = this._selectableRows.filter(\n        (row) => row.checkbox.checked\n      ).length;\n\n      this._selectAllCheckbox.checked =\n        selectedRowsCount === selectableRowsCount;\n      this._selectAllCheckbox.indeterminate =\n        selectedRowsCount > 0 && selectedRowsCount < selectableRowsCount;\n      this._isSelectAllCheckboxSelected = this._selectAllCheckbox.checked;\n    }\n  };\n\n  <template>\n    <table class={{this.classNames}} ...attributes>\n      {{#if @columns}}\n        <caption class=\"sr-only\" aria-live=\"polite\">{{@caption}}\n          {{this.sortedMessageText}}</caption>\n      {{else if @caption}}\n        <caption class=\"sr-only\">{{@caption}}</caption>\n      {{/if}}\n\n      <thead class=\"hds-table__thead\">\n        {{#if @columns}}\n          <HdsTableTr\n            @selectionScope=\"col\"\n            @onClickSortBySelected={{if\n              @selectableColumnKey\n              (fn this.setSortBy @selectableColumnKey)\n            }}\n            @sortBySelectedOrder={{if\n              (eq this.sortBy @selectableColumnKey)\n              this.sortOrder\n            }}\n            @isSelectable={{@isSelectable}}\n            @onSelectionChange={{this.onSelectionAllChange}}\n            @didInsert={{this.didInsertSelectAllCheckbox}}\n            @willDestroy={{this.willDestroySelectAllCheckbox}}\n            @selectionAriaLabelSuffix=\"all rows\"\n          >\n            {{#each @columns as |column|}}\n              {{#if column.isSortable}}\n                <HdsTableThSort\n                  @sortOrder={{if (eq column.key this.sortBy) this.sortOrder}}\n                  @onClickSort={{fn this.setSortBy column.key}}\n                  @align={{column.align}}\n                  @width={{column.width}}\n                  @tooltip={{column.tooltip}}\n                >\n                  {{column.label}}\n                </HdsTableThSort>\n              {{else}}\n                <HdsTableTh\n                  @align={{column.align}}\n                  @width={{column.width}}\n                  @tooltip={{column.tooltip}}\n                  @isVisuallyHidden={{column.isVisuallyHidden}}\n                >{{column.label}}</HdsTableTh>\n              {{/if}}\n            {{/each}}\n          </HdsTableTr>\n        {{else}}\n          {{yield\n            (hash\n              Tr=(component\n                HdsTableTr\n                selectionScope=\"col\"\n                isSelectable=@isSelectable\n                onSelectionChange=this.onSelectionAllChange\n                didInsert=this.didInsertSelectAllCheckbox\n                willDestroy=this.willDestroySelectAllCheckbox\n                selectionAriaLabelSuffix=\"all rows\"\n                onClickSortBySelected=(if\n                  @selectableColumnKey (fn this.setSortBy @selectableColumnKey)\n                )\n                sortBySelectedOrder=(if\n                  (eq this.sortBy @selectableColumnKey) this.sortOrder\n                )\n              )\n              Th=HdsTableTh\n              ThSort=HdsTableThSort\n              sortBy=this.sortBy\n              sortOrder=this.sortOrder\n              setSortBy=this.setSortBy\n            )\n            to=\"head\"\n          }}\n        {{/if}}\n      </thead>\n\n      <tbody class=\"hds-table__tbody\">\n        {{#if @columns}}\n          {{! -----------------------------------------------------------------\n            IMPORTANT: we loop on the model array and for each record\n            we yield the Tr/Td/Th elements _and_ the record itself as data\n            this means the consumer will *have to* use the data key to access it in their template\n          ----------------------------------------------------------------- }}\n          {{! @glint-expect-error: [HDS-4380](https://hashicorp.atlassian.net/browse/HDS-4380) }}\n          {{#let (sortBy this.getSortCriteria @model) as |sortedModel|}}\n            {{#each sortedModel key=this.identityKey as |record index|}}\n              {{yield\n                (hash\n                  Tr=(component\n                    HdsTableTr\n                    selectionScope=\"row\"\n                    isSelectable=@isSelectable\n                    onSelectionChange=this.onSelectionRowChange\n                    didInsert=this.didInsertRowCheckbox\n                    willDestroy=this.willDestroyRowCheckbox\n                    selectionAriaLabelSuffix=@selectionAriaLabelSuffix\n                  )\n                  Th=(component HdsTableTh scope=\"row\")\n                  Td=(component HdsTableTd align=@align)\n                  data=record\n                  rowIndex=index\n                )\n                to=\"body\"\n              }}\n            {{/each}}\n          {{/let}}\n        {{else}}\n          {{yield\n            (hash\n              Tr=(component\n                HdsTableTr\n                selectionScope=\"row\"\n                isSelectable=@isSelectable\n                onSelectionChange=this.onSelectionRowChange\n                didInsert=this.didInsertRowCheckbox\n                willDestroy=this.willDestroyRowCheckbox\n                selectionAriaLabelSuffix=@selectionAriaLabelSuffix\n              )\n              Th=(component HdsTableTh scope=\"row\")\n              Td=(component HdsTableTd align=@align)\n              sortBy=this.sortBy\n              sortOrder=this.sortOrder\n            )\n            to=\"body\"\n          }}\n        {{/if}}\n      </tbody>\n    </table>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { assert, warn } from '@ember/debug';\nimport { next, schedule } from '@ember/runloop';\nimport { hash } from '@ember/helper';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didUpdate from '@ember/render-modifiers/modifiers/did-update';\n\nimport type { WithBoundArgs } from '@glint/template';\nimport type Owner from '@ember/owner';\n\nimport { HdsTabsSizeValues } from './types.ts';\nimport HdsTabsTab from './tab.gts';\nimport HdsTabsPanel from './panel.gts';\n\nimport type { HdsTabsTabSignature } from './tab.gts';\nimport type { HdsTabsTabIds, HdsTabsPanelIds, HdsTabsSizes } from './types.ts';\n\nexport const DEFAULT_SIZE: HdsTabsSizes = 'medium';\nexport const SIZES: HdsTabsSizes[] = Object.values(HdsTabsSizeValues);\n\nexport interface HdsTabsSignature {\n  Args: {\n    size?: HdsTabsSizes;\n    onClickTab?: (event: MouseEvent, tabIndex: number) => void;\n    selectedTabIndex?: HdsTabsTabSignature['Args']['selectedTabIndex'];\n    isParentVisible?: boolean;\n  };\n  Blocks: {\n    default: [\n      {\n        Tab?: WithBoundArgs<\n          typeof HdsTabsTab,\n          | 'selectedTabIndex'\n          | 'tabIds'\n          | 'panelIds'\n          | 'onClick'\n          | 'onKeyUp'\n          | 'didInsertNode'\n          | 'didUpdateNode'\n          | 'willDestroyNode'\n        >;\n        Panel?: WithBoundArgs<\n          typeof HdsTabsPanel,\n          | 'selectedTabIndex'\n          | 'tabIds'\n          | 'panelIds'\n          | 'didInsertNode'\n          | 'willDestroyNode'\n        >;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsTabs extends Component<HdsTabsSignature> {\n  @tracked private _tabNodes: HTMLButtonElement[] = [];\n  @tracked private _tabIds: HdsTabsTabIds = [];\n  @tracked private _panelNodes: HTMLElement[] = [];\n  @tracked private _panelIds: HdsTabsPanelIds = [];\n  @tracked private _selectedTabIndex;\n  @tracked private _selectedTabId?: string;\n  @tracked private _isControlled: boolean;\n\n  get size(): HdsTabsSizes {\n    const { size = DEFAULT_SIZE } = this.args;\n\n    assert(\n      `@size for \"Hds::Tabs\" must be one of the following: ${SIZES.join(\n        ', '\n      )}; received: ${size}`,\n      SIZES.includes(size)\n    );\n\n    return size;\n  }\n\n  constructor(owner: Owner, args: HdsTabsSignature['Args']) {\n    super(owner, args);\n\n    // this is to determine if the \"selected\" tab logic is controlled in the consumers' code or is maintained as an internal state\n    this._isControlled = this.args.selectedTabIndex !== undefined;\n    this._selectedTabIndex = this.args.selectedTabIndex ?? 0;\n  }\n\n  get selectedTabIndex(): number {\n    if (this._isControlled) {\n      return this.args.selectedTabIndex!;\n    } else {\n      return this._selectedTabIndex;\n    }\n  }\n\n  set selectedTabIndex(value) {\n    if (this._isControlled) {\n      // noop\n    } else {\n      this._selectedTabIndex = value;\n    }\n  }\n\n  get classNames(): string {\n    const classes = ['hds-tabs'];\n\n    // add a class based on the @size argument\n    classes.push(`hds-tabs--size-${this.size}`);\n\n    return classes.join(' ');\n  }\n\n  didInsert = (): void => {\n    assert(\n      'The number of Tabs must be equal to the number of Panels',\n      this._tabNodes.length === this._panelNodes.length\n    );\n\n    if (this._selectedTabId) {\n      this.selectedTabIndex = this._tabIds.indexOf(this._selectedTabId);\n    }\n\n    // eslint-disable-next-line ember/no-runloop\n    schedule('afterRender', (): void => {\n      this.setTabIndicator();\n    });\n  };\n\n  didUpdateSelectedTabIndex = (): void => {\n    // eslint-disable-next-line ember/no-runloop\n    schedule('afterRender', (): void => {\n      this.setTabIndicator();\n    });\n  };\n\n  didUpdateSelectedTabId = (): void => {\n    // if the selected tab is set dynamically (eg. in a `each` loop)\n    // the `Tab` nodes will be re-inserted/rendered, which means the `this.selectedTabId` variable changes\n    // but the parent `Tabs` component has already been rendered/inserted but doesn't re-render\n    // so the value of the `selectedTabIndex` is not updated, unless we trigger a recalculation\n    // using the `did-update` modifier that checks for changes in the `this.selectedTabId` variable\n    if (this._selectedTabId) {\n      this.selectedTabIndex = this._tabIds.indexOf(this._selectedTabId);\n    }\n  };\n\n  didUpdateParentVisibility = (): void => {\n    // eslint-disable-next-line ember/no-runloop\n    schedule('afterRender', (): void => {\n      this.setTabIndicator();\n    });\n  };\n\n  didInsertTab = (element: HTMLButtonElement, isSelected?: boolean): void => {\n    this._tabNodes = [...this._tabNodes, element];\n    this._tabIds = [...this._tabIds, element.id];\n    if (isSelected) {\n      this._selectedTabId = element.id;\n    }\n  };\n\n  didUpdateTab = (tabIndex: number, isSelected?: boolean): void => {\n    if (isSelected) {\n      this.selectedTabIndex = tabIndex;\n    }\n    this.setTabIndicator();\n  };\n\n  willDestroyTab = (element: HTMLButtonElement): void => {\n    this._tabNodes = this._tabNodes.filter(\n      (node): boolean => node.id !== element.id\n    );\n    this._tabIds = this._tabIds.filter(\n      (tabId): boolean => tabId !== element.id\n    );\n  };\n\n  didInsertPanel = (element: HTMLElement, panelId: string): void => {\n    this._panelNodes = [...this._panelNodes, element];\n    this._panelIds = [...this._panelIds, panelId];\n  };\n\n  willDestroyPanel = (element: HTMLElement): void => {\n    this._panelNodes = this._panelNodes.filter(\n      (node): boolean => node.id !== element.id\n    );\n    this._panelIds = this._panelIds.filter(\n      (panelId): boolean => panelId !== element.id\n    );\n  };\n\n  onClick = (event: MouseEvent, tabIndex: number): void => {\n    this.selectedTabIndex = tabIndex;\n    this.setTabIndicator();\n\n    // invoke the callback function if it's provided as argument\n    if (typeof this.args.onClickTab === 'function') {\n      this.args.onClickTab(event, tabIndex);\n    }\n  };\n\n  onKeyUp = (tabIndex: number, event: KeyboardEvent): void => {\n    const leftArrow = 'ArrowLeft';\n    const rightArrow = 'ArrowRight';\n    const enterKey = 'Enter';\n    const spaceKey = ' ';\n\n    if (event.key === rightArrow) {\n      const nextTabIndex = (tabIndex + 1) % this._tabIds.length;\n      this.focusTab(nextTabIndex, event);\n    } else if (event.key === leftArrow) {\n      const prevTabIndex =\n        (tabIndex + this._tabIds.length - 1) % this._tabIds.length;\n      this.focusTab(prevTabIndex, event);\n    } else if (event.key === enterKey || event.key === spaceKey) {\n      this.selectedTabIndex = tabIndex;\n    }\n    // scroll selected tab into view (it may be out of view when activated using a keyboard with `prev/next`)\n    const parentNode = this._tabNodes[this.selectedTabIndex]?.parentNode;\n    if (parentNode instanceof HTMLElement) {\n      parentNode.scrollIntoView({\n        behavior: 'smooth',\n        block: 'nearest',\n        inline: 'nearest',\n      });\n    }\n  };\n\n  // Focus tab for keyboard & mouse navigation:\n  focusTab = (tabIndex: number, event: KeyboardEvent): void => {\n    event.preventDefault();\n    this._tabNodes[tabIndex]?.focus();\n  };\n\n  setTabIndicator = (): void => {\n    // eslint-disable-next-line ember/no-runloop\n    next((): void => {\n      const tabElem = this._tabNodes[this.selectedTabIndex];\n\n      if (tabElem != null) {\n        const tabElemParentNode = tabElem.parentNode as HTMLElement;\n        const tabsElemClosestList = tabElem.closest(\n          '.hds-tabs__tablist'\n        ) as HTMLElement;\n\n        // this condition is `null` if any of the parents has `display: none`\n        if (tabElemParentNode.offsetParent) {\n          const tabLeftPos = tabElemParentNode.offsetLeft;\n          const tabWidth = tabElemParentNode.offsetWidth;\n\n          // Set CSS custom properties for indicator\n          tabsElemClosestList.style.setProperty(\n            '--indicator-left-pos',\n            tabLeftPos + 'px'\n          );\n          tabsElemClosestList.style.setProperty(\n            '--indicator-width',\n            tabWidth + 'px'\n          );\n        }\n      } else {\n        let message = '';\n        message +=\n          '\"Hds::Tabs\" has tried to set the indicator for an element that doesn\\'t exist';\n        if (this._tabNodes.length === 0) {\n          message +=\n            ' (the array `this._tabNodes` is empty, there are no tabs, probably already destroyed)';\n        } else {\n          message += ` (the value ${\n            this.selectedTabIndex\n          } of \\`this.selectedTabIndex\\` is out of bound for the array \\`this._tabNodes\\`, whose index range is [0 - ${\n            this._tabNodes.length - 1\n          }])`;\n        }\n        // https://api.emberjs.com/ember/5.3/classes/@ember%2Fdebug/methods/warn?anchor=warn\n        warn(message, true, {\n          id: 'hds-debug.tabs.setTabIndicator-tabElem-not-available',\n        });\n      }\n    });\n  };\n\n  <template>\n    {{! template-lint-disable no-invalid-role }}\n    <div\n      class={{this.classNames}}\n      {{didInsert this.didInsert}}\n      {{didUpdate this.didUpdateSelectedTabIndex this.selectedTabIndex}}\n      {{didUpdate this.didUpdateSelectedTabId this._selectedTabId}}\n      {{didUpdate this.didUpdateParentVisibility @isParentVisible}}\n      ...attributes\n    >\n      <div class=\"hds-tabs__tablist-wrapper\">\n        <ul class=\"hds-tabs__tablist\" role=\"tablist\">\n          {{yield\n            (hash\n              Tab=(component\n                HdsTabsTab\n                didInsertNode=this.didInsertTab\n                didUpdateNode=this.didUpdateTab\n                willDestroyNode=this.willDestroyTab\n                tabIds=this._tabIds\n                panelIds=this._panelIds\n                selectedTabIndex=this.selectedTabIndex\n                onClick=this.onClick\n                onKeyUp=this.onKeyUp\n              )\n            )\n          }}\n          <li class=\"hds-tabs__tab-indicator\" role=\"presentation\"></li>\n        </ul>\n      </div>\n\n      {{yield\n        (hash\n          Panel=(component\n            HdsTabsPanel\n            didInsertNode=this.didInsertPanel\n            willDestroyNode=this.willDestroyPanel\n            tabIds=this._tabIds\n            panelIds=this._panelIds\n            selectedTabIndex=this.selectedTabIndex\n          )\n        )\n      }}\n    </div>\n    {{! template-lint-enable no-invalid-role }}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { typeOf } from '@ember/utils';\nimport { service } from '@ember/service';\nimport { hash, concat } from '@ember/helper';\n\nimport hdsFormatDate from '../../../helpers/hds-format-date.ts';\nimport HdsTimeRange from './range.gts';\nimport HdsTimeSingle from './single.gts';\nimport HdsTooltipButton from '../tooltip-button/index.gts';\n\nimport type { DisplayType } from '../../../services/hds-time-types.ts';\nimport type TimeService from '../../../services/hds-time.ts';\n\nexport interface HdsTimeSignature {\n  Args: {\n    date?: Date | string;\n    startDate?: Date | string;\n    endDate?: Date | string;\n    display?:\n      | 'utc'\n      | 'relative'\n      | 'friendly-only'\n      | 'friendly-local'\n      | 'friendly-relative';\n    isOpen?: boolean;\n    hasTooltip?: boolean;\n    isoUtcString?: string;\n  };\n  Element: HTMLElement;\n}\n\nconst dateIsValid = (date?: Date | string): date is Date =>\n  date instanceof Date && !isNaN(+date);\n\nexport default class HdsTime extends Component<HdsTimeSignature> {\n  @service declare readonly hdsTime: TimeService;\n\n  get date(): Date | undefined {\n    const { date } = this.args;\n\n    // Sometimes an ISO date string might be passed in instead of a JS Date.\n    if (date) {\n      if (typeOf(date) === 'string') {\n        return new Date(date);\n      } else if (date instanceof Date) {\n        return date;\n      }\n    }\n  }\n\n  get startDate(): Date | undefined {\n    const { startDate } = this.args;\n\n    if (startDate) {\n      if (typeOf(startDate) === 'string') {\n        return new Date(startDate);\n      } else if (startDate instanceof Date) {\n        return startDate;\n      }\n    }\n  }\n\n  get endDate(): Date | undefined {\n    const { endDate } = this.args;\n\n    if (endDate) {\n      if (typeOf(endDate) === 'string') {\n        return new Date(endDate);\n      } else if (endDate instanceof Date) {\n        return endDate;\n      }\n    }\n  }\n\n  get isValidDate(): boolean {\n    return dateIsValid(this.date);\n  }\n\n  get isValidDateRange(): boolean {\n    if (dateIsValid(this.startDate) && dateIsValid(this.endDate)) {\n      return this.startDate <= this.endDate;\n    }\n    return false;\n  }\n\n  get hasTooltip(): boolean {\n    return this.args.hasTooltip ?? true;\n  }\n\n  get isoUtcString(): string {\n    const date = this.date;\n\n    if (dateIsValid(date)) {\n      const isoUtcString = this.hdsTime.toIsoUtcString(date);\n\n      if (isoUtcString) return isoUtcString;\n    }\n\n    return '';\n  }\n\n  get rangeIsoUtcString(): string {\n    const startDate = this.startDate;\n    const endDate = this.endDate;\n\n    if (dateIsValid(startDate) && dateIsValid(endDate)) {\n      return `${this.hdsTime.toIsoUtcString(startDate)}–${this.hdsTime.toIsoUtcString(endDate)}`;\n    }\n    return '';\n  }\n\n  get display(): DisplayType {\n    const date = this.date;\n    const { display } = this.args;\n\n    if (dateIsValid(date)) {\n      const nextDiff = this.hdsTime.timeDifference(this.hdsTime.now, date);\n      return this.hdsTime.format(nextDiff, display);\n    }\n    return {\n      options: undefined,\n      difference: { absValueInMs: 0, valueInMs: 0 },\n      relative: { value: 0, unit: undefined },\n    };\n  }\n\n  get isOpen(): boolean {\n    return this.args.isOpen ?? false;\n  }\n\n  didInsertNode = (): void => {\n    const date = this.date;\n\n    if (dateIsValid(date)) {\n      this.hdsTime.register(date);\n    }\n  };\n\n  willDestroyNode = (): void => {\n    const date = this.date;\n\n    if (dateIsValid(date)) {\n      this.hdsTime.unregister(date);\n    }\n  };\n\n  <template>\n    {{! IMPORTANT: we need to add \"squishies\" here (~) because otherwise the whitespace added by Ember causes extra space around the time element - See https://handlebarsjs.com/guide/expressions.html#whitespace-control }}\n    {{~#let this.display as |display|~}}\n      {{~#if this.isValidDate~}}\n        {{~#if this.hasTooltip~}}\n          <HdsTooltipButton\n            class=\"hds-time-wrapper\"\n            @text={{if\n              display.options.tooltipFormat\n              (hdsFormatDate this.date display.options.tooltipFormat)\n              this.isoUtcString\n            }}\n            @placement=\"bottom\"\n            @extraTippyOptions={{hash showOnCreate=this.isOpen}}\n          >\n            <HdsTimeSingle\n              @date={{this.date}}\n              @isoUtcString={{this.isoUtcString}}\n              @display={{this.display}}\n              @register={{this.didInsertNode}}\n              @unregister={{this.willDestroyNode}}\n              ...attributes\n            />\n          </HdsTooltipButton>\n        {{~else~}}\n          <HdsTimeSingle\n            @date={{this.date}}\n            @isoUtcString={{this.isoUtcString}}\n            @display={{this.display}}\n            @register={{this.didInsertNode}}\n            @unregister={{this.willDestroyNode}}\n            ...attributes\n          />\n        {{~/if~}}\n      {{~else if this.isValidDateRange~}}\n        {{~#if this.hasTooltip~}}\n          <HdsTooltipButton\n            class=\"hds-time-wrapper\"\n            @text={{if\n              display.options.tooltipFormat\n              (concat\n                (hdsFormatDate this.startDate display.options.tooltipFormat)\n                (hdsFormatDate this.endDate display.options.tooltipFormat)\n              )\n              this.rangeIsoUtcString\n            }}\n            @placement=\"bottom\"\n            @extraTippyOptions={{hash showOnCreate=this.isOpen}}\n          >\n            <HdsTimeRange\n              @startDate={{this.startDate}}\n              @endDate={{this.endDate}}\n              ...attributes\n            />\n          </HdsTooltipButton>\n        {{~else~}}\n          <HdsTimeRange\n            @startDate={{this.startDate}}\n            @endDate={{this.endDate}}\n            ...attributes\n          />\n        {{~/if~}}\n      {{~/if~}}\n    {{~/let~}}\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport { hash } from '@ember/helper';\n\nimport HdsAlert from '../alert/index.gts';\n\nimport type { HdsAlertSignature } from '../alert/index.gts';\n\nexport interface HdsToastSignature extends Omit<HdsAlertSignature, 'Args'> {\n  Args: Omit<HdsAlertSignature['Args'], 'type'>;\n}\n\nconst HdsToast: TemplateOnlyComponent<HdsToastSignature> = <template>\n  <HdsAlert\n    class=\"hds-toast\"\n    @type=\"inline\"\n    @color={{@color}}\n    @icon={{@icon}}\n    @onDismiss={{@onDismiss}}\n    role=\"alert\"\n    aria-live=\"polite\"\n    ...attributes\n    as |A|\n  >\n    {{yield\n      (hash\n        Title=A.Title\n        Description=A.Description\n        Button=A.Button\n        LinkStandalone=A.LinkStandalone\n        Generic=A.Generic\n      )\n    }}\n  </HdsAlert>\n</template>;\n\nexport default HdsToast;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { hash } from '@ember/helper';\n\nimport HdsAppFrameFooter from './parts/footer.gts';\nimport HdsAppFrameHeader from './parts/header.gts';\nimport HdsAppFrameMain from './parts/main.gts';\nimport HdsAppFrameModals from './parts/modals.gts';\nimport HdsAppFrameSidebar from './parts/sidebar.gts';\n\nexport interface HdsAppFrameSignature {\n  Args: {\n    hasFooter?: boolean;\n    hasHeader?: boolean;\n    hasMain?: boolean;\n    hasModals?: boolean;\n    hasSidebar?: boolean;\n  };\n  Blocks: {\n    default: [\n      {\n        Footer?: typeof HdsAppFrameFooter;\n        Header?: typeof HdsAppFrameHeader;\n        Main?: typeof HdsAppFrameMain;\n        Modals?: typeof HdsAppFrameModals;\n        Sidebar?: typeof HdsAppFrameSidebar;\n      },\n    ];\n  };\n  Element: HTMLDivElement;\n}\n\nexport default class HdsAppFrame extends Component<HdsAppFrameSignature> {\n  // Indicates if the \"header\" container should be displayed\n  get hasHeader(): boolean {\n    return this.args.hasHeader ?? true;\n  }\n\n  // Indicates if the \"sidebar\" container should be displayed\n  get hasSidebar(): boolean {\n    return this.args.hasSidebar ?? true;\n  }\n\n  // Indicates if the \"footer\" container should be displayed\n  get hasFooter(): boolean {\n    return this.args.hasFooter ?? true;\n  }\n\n  // Indicates if the \"modals\" container should be displayed\n  get hasModals(): boolean {\n    return this.args.hasModals ?? true;\n  }\n\n  // Get the class names to apply to the component.\n  get classNames(): string {\n    const classes = ['hds-app-frame'];\n\n    if (this.hasHeader && this.hasSidebar) {\n      classes.push('hds-app-frame--has-header-with-sidebar');\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    <div class={{this.classNames}} ...attributes>\n      {{#if this.hasHeader}}\n        {{yield (hash Header=HdsAppFrameHeader)}}\n      {{/if}}\n      {{#if this.hasSidebar}}\n        {{yield (hash Sidebar=HdsAppFrameSidebar)}}\n      {{/if}}\n      {{!\n        IMPORTANT: since the modals may be injected via portal or in-element with code that lives in the \"main\" container,\n        the \"modal\" container needs to be present in the DOM _before_ the \"main\" block, otherwise it may cause errors\n        where the target DOM element is not found (for example in tests where the modal may be immediately opened on first render).\n      }}\n      {{#if this.hasModals}}\n        {{yield (hash Modals=HdsAppFrameModals)}}\n      {{/if}}\n      {{yield (hash Main=HdsAppFrameMain)}}\n      {{#if this.hasFooter}}\n        {{yield (hash Footer=HdsAppFrameFooter)}}\n      {{/if}}\n    </div>\n  </template>\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { element } from 'ember-element-helper';\nimport { hash } from '@ember/helper';\nimport style from 'ember-style-modifier';\n\nimport { HdsLayoutGridAlignValues, HdsLayoutGridGapValues } from './types.ts';\nimport HdsLayoutGridItem from './item.gts';\n\nimport type {\n  HdsLayoutGridAligns,\n  HdsLayoutGridGaps,\n  AvailableTagNames,\n  AvailableElements,\n} from './types.ts';\n\nexport const ALIGNS: HdsLayoutGridAligns[] = Object.values(\n  HdsLayoutGridAlignValues\n);\nexport const DEFAULT_GAP = HdsLayoutGridGapValues.Zero;\nexport const GAPS: HdsLayoutGridGaps[] = Object.values(HdsLayoutGridGapValues);\n\ntype ResponsiveColumnWidths = {\n  sm?: string;\n  md?: string;\n  lg?: string;\n  xl?: string;\n  xxl?: string;\n};\n\nexport interface HdsLayoutGridSignature {\n  Args: {\n    tag?: AvailableTagNames;\n    columnMinWidth?: string;\n    columnWidth?: string | ResponsiveColumnWidths;\n    align?: HdsLayoutGridAligns;\n    gap?: HdsLayoutGridGaps | [HdsLayoutGridGaps, HdsLayoutGridGaps];\n  };\n  Blocks: {\n    default: [\n      {\n        Item?: typeof HdsLayoutGridItem;\n      },\n    ];\n  };\n  Element: AvailableElements;\n}\n\nexport default class HdsLayoutGrid extends Component<HdsLayoutGridSignature> {\n  get componentTag(): AvailableTagNames {\n    return this.args.tag ?? 'div';\n  }\n\n  get align(): HdsLayoutGridAligns | undefined {\n    const { align } = this.args;\n\n    if (align) {\n      assert(\n        `@align for \"Hds::Layout::Grid\" must be one of the following: ${ALIGNS.join(\n          ', '\n        )}; received: ${align}`,\n        ALIGNS.includes(align)\n      );\n    }\n\n    return align;\n  }\n\n  get gap():\n    | [HdsLayoutGridGaps]\n    | [HdsLayoutGridGaps, HdsLayoutGridGaps]\n    | undefined {\n    const { gap = DEFAULT_GAP } = this.args;\n\n    if (gap) {\n      assert(\n        `@gap for \"Hds::Layout::Grid\" must be a single value or an array of two values of one of the following: ${GAPS.join(\n          ', '\n          // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n        )}; received: ${gap}`,\n        (!Array.isArray(gap) && GAPS.includes(gap)) ||\n          (Array.isArray(gap) &&\n            gap.length === 2 &&\n            GAPS.includes(gap[0]) &&\n            GAPS.includes(gap[1]))\n      );\n      return Array.isArray(gap) ? gap : [gap];\n    } else {\n      return undefined;\n    }\n  }\n\n  /*\n    LOGIC:\n\n     Default layout behavior:\n     --hds-layout-grid-column-fill-type is set to auto-fit (fluid layout)\n\n    If neither columnMinWidth nor columnWidth are passed in:\n    - We do not set --hds-layout-grid-column-min-width (defaults to 0px)\n    \n    If columnMinWidth is passed in:\n    - We set --hds-layout-grid-column-min-width to the passed in value\n\n    If a columnWidth value is passed in:\n    1) we set --hds-layout-grid-column-min-width to the passed in value for the view\n    2) In the CSS, we use \"auto-fill\" for --hds-layout-grid-column-fill-type for the view (fixed layout)\n\n    If both columnMinWidth & columnWidth are passed in:\n    - We throw an error, as it doesn't make sense in the context of a CSS grid layout (too complex to determine which to use & desired behavior)\n  */\n  get inlineStyles(): Record<string, unknown> {\n    const inlineStyles: {\n      '--hds-layout-grid-column-min-width'?: string;\n      '--hds-layout-grid-column-fill-type'?: string;\n\n      // responsive\n      '--hds-layout-grid-column-width-sm'?: string;\n      '--hds-layout-grid-column-width-md'?: string;\n      '--hds-layout-grid-column-width-lg'?: string;\n      '--hds-layout-grid-column-width-xl'?: string;\n      '--hds-layout-grid-column-width-xxl'?: string;\n    } = {};\n\n    // if both columnMinWidth and columnWidth are passed in, we throw an error\n    assert(\n      `@columnMinWidth and @columnWidth for \"Hds::Layout::Grid\" cannot be used together`,\n      !(this.args.columnMinWidth && this.args.columnWidth)\n    );\n\n    if (this.args.columnMinWidth) {\n      inlineStyles['--hds-layout-grid-column-min-width'] =\n        this.args.columnMinWidth;\n    } else if (this.args.columnWidth) {\n      if (typeof this.args.columnWidth === 'string') {\n        inlineStyles['--hds-layout-grid-column-min-width'] =\n          this.args.columnWidth;\n      } else if (typeof this.args.columnWidth === 'object') {\n        // Responsive column widths\n        if (this.args.columnWidth.sm) {\n          inlineStyles['--hds-layout-grid-column-width-sm'] =\n            this.args.columnWidth.sm;\n        }\n        if (this.args.columnWidth.md) {\n          inlineStyles['--hds-layout-grid-column-width-md'] =\n            this.args.columnWidth.md;\n        }\n        if (this.args.columnWidth.lg) {\n          inlineStyles['--hds-layout-grid-column-width-lg'] =\n            this.args.columnWidth.lg;\n        }\n        if (this.args.columnWidth.xl) {\n          inlineStyles['--hds-layout-grid-column-width-xl'] =\n            this.args.columnWidth.xl;\n        }\n        if (this.args.columnWidth.xxl) {\n          inlineStyles['--hds-layout-grid-column-width-xxl'] =\n            this.args.columnWidth.xxl;\n        }\n      }\n    }\n\n    return inlineStyles;\n  }\n\n  get classNames(): string {\n    const classes = ['hds-layout-grid'];\n\n    // add a class based on the @align argument\n    if (this.align) {\n      classes.push(`hds-layout-grid--align-items-${this.align}`);\n    }\n\n    // add a class based on the @gap argument\n    if (this.gap) {\n      if (this.gap.length === 2) {\n        classes.push(`hds-layout-grid--row-gap-${this.gap[0]}`);\n        classes.push(`hds-layout-grid--column-gap-${this.gap[1]}`);\n      } else if (this.gap.length === 1) {\n        classes.push(`hds-layout-grid--row-gap-${this.gap[0]}`);\n        classes.push(`hds-layout-grid--column-gap-${this.gap[0]}`);\n      }\n    }\n\n    // If a single columnWidth string is passed in, set the respective CSS class (non-responsive view case)\n    if (typeof this.args.columnWidth === 'string') {\n      classes.push('hds-layout-grid--column-width-non-responsive');\n    }\n\n    // add classes based on responsive width arguments\n    // If an object is passed in for the columnWidth arg, set the respective CSS classes\n    if (typeof this.args.columnWidth === 'object') {\n      if (this.args.columnWidth.sm) {\n        classes.push('hds-layout-grid--column-width-sm');\n      }\n      if (this.args.columnWidth.md) {\n        classes.push('hds-layout-grid--column-width-md');\n      }\n      if (this.args.columnWidth.lg) {\n        classes.push('hds-layout-grid--column-width-lg');\n      }\n      if (this.args.columnWidth.xl) {\n        classes.push('hds-layout-grid--column-width-xl');\n      }\n      if (this.args.columnWidth.xxl) {\n        classes.push('hds-layout-grid--column-width-xxl');\n      }\n    }\n\n    return classes.join(' ');\n  }\n\n  <template>\n    {{#let (element this.componentTag) as |Tag|}}\n      <Tag\n        class={{this.classNames}}\n        {{style this.inlineStyles}}\n        ...attributes\n      >{{yield (hash Item=HdsLayoutGridItem)}}</Tag>\n    {{/let}}\n  </template>\n}\n","/*! algoliasearch.umd.js | 4.8.6 | © Algolia, inc. | https://github.com/algolia/algoliasearch-client-javascript */\n!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=e||self).algoliasearch=t()}(this,(function(){\"use strict\";function e(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function t(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n<arguments.length;n++){var a=null!=arguments[n]?arguments[n]:{};n%2?t(Object(a),!0).forEach((function(t){e(r,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(a)):t(Object(a)).forEach((function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(a,e))}))}return r}function n(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}function a(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(!(Symbol.iterator in Object(e)||\"[object Arguments]\"===Object.prototype.toString.call(e)))return;var r=[],n=!0,a=!1,o=void 0;try{for(var u,i=e[Symbol.iterator]();!(n=(u=i.next()).done)&&(r.push(u.value),!t||r.length!==t);n=!0);}catch(e){a=!0,o=e}finally{try{n||null==i.return||i.return()}finally{if(a)throw o}}return r}(e,t)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}()}function o(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t<e.length;t++)r[t]=e[t];return r}}(e)||function(e){if(Symbol.iterator in Object(e)||\"[object Arguments]\"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance\")}()}function u(e){var t,r=\"algoliasearch-client-js-\".concat(e.key),n=function(){return void 0===t&&(t=e.localStorage||window.localStorage),t},o=function(){return JSON.parse(n().getItem(r)||\"{}\")};return{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){var r=JSON.stringify(e),n=o()[r];return Promise.all([n||t(),void 0!==n])})).then((function(e){var t=a(e,2),n=t[0],o=t[1];return Promise.all([n,o||r.miss(n)])})).then((function(e){return a(e,1)[0]}))},set:function(e,t){return Promise.resolve().then((function(){var a=o();return a[JSON.stringify(e)]=t,n().setItem(r,JSON.stringify(a)),t}))},delete:function(e){return Promise.resolve().then((function(){var t=o();delete t[JSON.stringify(e)],n().setItem(r,JSON.stringify(t))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function i(e){var t=o(e.caches),r=t.shift();return void 0===r?{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},n=t();return n.then((function(e){return Promise.all([e,r.miss(e)])})).then((function(e){return a(e,1)[0]}))},set:function(e,t){return Promise.resolve(t)},delete:function(e){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(e,n){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(e,n,a).catch((function(){return i({caches:t}).get(e,n,a)}))},set:function(e,n){return r.set(e,n).catch((function(){return i({caches:t}).set(e,n)}))},delete:function(e){return r.delete(e).catch((function(){return i({caches:t}).delete(e)}))},clear:function(){return r.clear().catch((function(){return i({caches:t}).clear()}))}}}function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},t={};return{get:function(r,n){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},o=JSON.stringify(r);if(o in t)return Promise.resolve(e.serializable?JSON.parse(t[o]):t[o]);var u=n(),i=a&&a.miss||function(){return Promise.resolve()};return u.then((function(e){return i(e)})).then((function(){return u}))},set:function(r,n){return t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(e){return delete t[JSON.stringify(e)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function c(e,t,r){var n={\"x-algolia-api-key\":r,\"x-algolia-application-id\":t};return{headers:function(){return e===m.WithinHeaders?n:{}},queryParameters:function(){return e===m.WithinQueryParameters?n:{}}}}function f(e){var t=0;return e((function r(){return t++,new Promise((function(n){setTimeout((function(){n(e(r))}),Math.min(100*t,1e3))}))}))}function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(e,t){return Promise.resolve()};return Object.assign(e,{wait:function(r){return d(e.then((function(e){return Promise.all([t(e,r),e])})).then((function(e){return e[1]})))}})}function l(e){for(var t=e.length-1;t>0;t--){var r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function p(e,t){return t?(Object.keys(t).forEach((function(r){e[r]=t[r](e)})),e):e}function h(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];var a=0;return e.replace(/%s/g,(function(){return encodeURIComponent(r[a++])}))}var m={WithinQueryParameters:0,WithinHeaders:1};function y(e,t){var r=e||{},n=r.data||{};return Object.keys(r).forEach((function(e){-1===[\"timeout\",\"headers\",\"queryParameters\",\"data\",\"cacheable\"].indexOf(e)&&(n[e]=r[e])})),{data:Object.entries(n).length>0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var g={Read:1,Write:2,Any:3},v=1,b=2,P=3;function O(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:v;return r(r({},e),{},{status:t,lastUpdate:Date.now()})}function w(e){return\"string\"==typeof e?{protocol:\"https\",url:e,accept:g.Any}:{protocol:e.protocol||\"https\",url:e.url,accept:e.accept||g.Any}}var j=\"DELETE\",I=\"GET\",x=\"POST\",q=\"PUT\";function D(e,t){return Promise.all(t.map((function(t){return e.get(t,(function(){return Promise.resolve(O(t))}))}))).then((function(e){var r=e.filter((function(e){return function(e){return e.status===v||Date.now()-e.lastUpdate>12e4}(e)})),n=e.filter((function(e){return function(e){return e.status===P&&Date.now()-e.lastUpdate<=12e4}(e)})),a=[].concat(o(r),o(n));return{getTimeout:function(e,t){return(0===n.length&&0===e?1:n.length+3+e)*t},statelessHosts:a.length>0?a.map((function(e){return w(e)})):t}}))}function S(e,t,n,a){var u=[],i=function(e,t){if(e.method===I||void 0===e.data&&void 0===t.data)return;var n=Array.isArray(e.data)?e.data:r(r({},e.data),t.data);return JSON.stringify(n)}(n,a),s=function(e,t){var n=r(r({},e.headers),t.headers),a={};return Object.keys(n).forEach((function(e){var t=n[e];a[e.toLowerCase()]=t})),a}(e,a),c=n.method,f=n.method!==I?{}:r(r({},n.data),a.data),d=r(r(r({\"x-algolia-agent\":e.userAgent.value},e.queryParameters),f),a.queryParameters),l=0,p=function t(r,o){var f=r.pop();if(void 0===f)throw{name:\"RetryError\",message:\"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.\",transporterStackTrace:A(u)};var p={data:i,headers:s,method:c,url:N(f,n.path,d),connectTimeout:o(l,e.timeouts.connect),responseTimeout:o(l,a.timeout)},h=function(e){var t={request:p,response:e,host:f,triesLeft:r.length};return u.push(t),t},m={onSuccess:function(e){return function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:\"DeserializationError\",message:e,response:t}}(t.message,e)}}(e)},onRetry:function(n){var a=h(n);return n.isTimedOut&&l++,Promise.all([e.logger.info(\"Retryable failure\",E(a)),e.hostsCache.set(f,O(f,n.isTimedOut?P:b))]).then((function(){return t(r,o)}))},onFail:function(e){throw h(e),function(e,t){var r=e.content,n=e.status,a=r;try{a=JSON.parse(r).message}catch(e){}return function(e,t,r){return{name:\"ApiError\",message:e,status:t,transporterStackTrace:r}}(a,n,t)}(e,A(u))}};return e.requester.send(p).then((function(e){return function(e,t){return function(e){var t=e.status;return e.isTimedOut||function(e){var t=e.isTimedOut,r=e.status;return!t&&0==~~r}(e)||2!=~~(t/100)&&4!=~~(t/100)}(e)?t.onRetry(e):2==~~(e.status/100)?t.onSuccess(e):t.onFail(e)}(e,m)}))};return D(e.hostsCache,t).then((function(e){return p(o(e.statelessHosts).reverse(),e.getTimeout)}))}function k(e){var t=e.hostsCache,r=e.logger,n=e.requester,o=e.requestsCache,u=e.responsesCache,i=e.timeouts,s=e.userAgent,c=e.hosts,f=e.queryParameters,d={hostsCache:t,logger:r,requester:n,requestsCache:o,responsesCache:u,timeouts:i,userAgent:s,headers:e.headers,queryParameters:f,hosts:c.map((function(e){return w(e)})),read:function(e,t){var r=y(t,d.timeouts.read),n=function(){return S(d,d.hosts.filter((function(e){return 0!=(e.accept&g.Read)})),e,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();var o={request:e,mappedRequestOptions:r,transporter:{queryParameters:d.queryParameters,headers:d.headers}};return d.responsesCache.get(o,(function(){return d.requestsCache.get(o,(function(){return d.requestsCache.set(o,n()).then((function(e){return Promise.all([d.requestsCache.delete(o),e])}),(function(e){return Promise.all([d.requestsCache.delete(o),Promise.reject(e)])})).then((function(e){var t=a(e,2);t[0];return t[1]}))}))}),{miss:function(e){return d.responsesCache.set(o,e)}})},write:function(e,t){return S(d,d.hosts.filter((function(e){return 0!=(e.accept&g.Write)})),e,y(t,d.timeouts.write))}};return d}function T(e){var t={value:\"Algolia for JavaScript (\".concat(e,\")\"),add:function(e){var r=\"; \".concat(e.segment).concat(void 0!==e.version?\" (\".concat(e.version,\")\"):\"\");return-1===t.value.indexOf(r)&&(t.value=\"\".concat(t.value).concat(r)),t}};return t}function N(e,t,r){var n=R(r),a=\"\".concat(e.protocol,\"://\").concat(e.url,\"/\").concat(\"/\"===t.charAt(0)?t.substr(1):t);return n.length&&(a+=\"?\".concat(n)),a}function R(e){return Object.keys(e).map((function(t){return h(\"%s=%s\",t,(r=e[t],\"[object Object]\"===Object.prototype.toString.call(r)||\"[object Array]\"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join(\"&\")}function A(e){return e.map((function(e){return E(e)}))}function E(e){var t=e.request.headers[\"x-algolia-api-key\"]?{\"x-algolia-api-key\":\"*****\"}:{};return r(r({},e),{},{request:r(r({},e.request),{},{headers:r(r({},e.request.headers),t)})})}var C=function(e){return function(t,r){return e.transporter.write({method:x,path:\"2/abtests\",data:t},r)}},U=function(e){return function(t,r){return e.transporter.write({method:j,path:h(\"2/abtests/%s\",t)},r)}},J=function(e){return function(t,r){return e.transporter.read({method:I,path:h(\"2/abtests/%s\",t)},r)}},z=function(e){return function(t){return e.transporter.read({method:I,path:\"2/abtests\"},t)}},F=function(e){return function(t,r){return e.transporter.write({method:x,path:h(\"2/abtests/%s/stop\",t)},r)}},H=function(e){return function(t){return e.transporter.read({method:I,path:\"1/strategies/personalization\"},t)}},M=function(e){return function(t,r){return e.transporter.write({method:x,path:\"1/strategies/personalization\",data:t},r)}};function K(e){return function t(r){return e.request(r).then((function(n){if(void 0!==e.batch&&e.batch(n.hits),!e.shouldStop(n))return n.cursor?t({cursor:n.cursor}):t({page:(r.page||0)+1})}))}({})}var W=function(e){return function(t,a){var o=a||{},u=o.queryParameters,i=n(o,[\"queryParameters\"]),s=r({acl:t},void 0!==u?{queryParameters:u}:{});return d(e.transporter.write({method:x,path:\"1/keys\",data:s},i),(function(t,r){return f((function(n){return Y(e)(t.key,r).catch((function(e){if(404!==e.status)throw e;return n()}))}))}))}},B=function(e){return function(t,r,n){var a=y(n);return a.queryParameters[\"X-Algolia-User-ID\"]=t,e.transporter.write({method:x,path:\"1/clusters/mapping\",data:{cluster:r}},a)}},Q=function(e){return function(t,r,n){return e.transporter.write({method:x,path:\"1/clusters/mapping/batch\",data:{users:t,cluster:r}},n)}},G=function(e){return function(t,r,n){return d(e.transporter.write({method:x,path:h(\"1/indexes/%s/operation\",t),data:{operation:\"copy\",destination:r}},n),(function(r,n){return re(e)(t,{methods:{waitTask:tt}}).waitTask(r.taskID,n)}))}},L=function(e){return function(t,n,a){return G(e)(t,n,r(r({},a),{},{scope:[nt.Rules]}))}},V=function(e){return function(t,n,a){return G(e)(t,n,r(r({},a),{},{scope:[nt.Settings]}))}},_=function(e){return function(t,n,a){return G(e)(t,n,r(r({},a),{},{scope:[nt.Synonyms]}))}},X=function(e){return function(t,r){return d(e.transporter.write({method:j,path:h(\"1/keys/%s\",t)},r),(function(r,n){return f((function(r){return Y(e)(t,n).then(r).catch((function(e){if(404!==e.status)throw e}))}))}))}},Y=function(e){return function(t,r){return e.transporter.read({method:I,path:h(\"1/keys/%s\",t)},r)}},Z=function(e){return function(t){return e.transporter.read({method:I,path:\"1/logs\"},t)}},$=function(e){return function(t){return e.transporter.read({method:I,path:\"1/clusters/mapping/top\"},t)}},ee=function(e){return function(t,r){return e.transporter.read({method:I,path:h(\"1/clusters/mapping/%s\",t)},r)}},te=function(e){return function(t){var r=t||{},a=r.retrieveMappings,o=n(r,[\"retrieveMappings\"]);return!0===a&&(o.getClusters=!0),e.transporter.read({method:I,path:\"1/clusters/mapping/pending\"},o)}},re=function(e){return function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={transporter:e.transporter,appId:e.appId,indexName:t};return p(n,r.methods)}},ne=function(e){return function(t){return e.transporter.read({method:I,path:\"1/keys\"},t)}},ae=function(e){return function(t){return e.transporter.read({method:I,path:\"1/clusters\"},t)}},oe=function(e){return function(t){return e.transporter.read({method:I,path:\"1/indexes\"},t)}},ue=function(e){return function(t){return e.transporter.read({method:I,path:\"1/clusters/mapping\"},t)}},ie=function(e){return function(t,r,n){return d(e.transporter.write({method:x,path:h(\"1/indexes/%s/operation\",t),data:{operation:\"move\",destination:r}},n),(function(r,n){return re(e)(t,{methods:{waitTask:tt}}).waitTask(r.taskID,n)}))}},se=function(e){return function(t,r){return d(e.transporter.write({method:x,path:\"1/indexes/*/batch\",data:{requests:t}},r),(function(t,r){return Promise.all(Object.keys(t.taskID).map((function(n){return re(e)(n,{methods:{waitTask:tt}}).waitTask(t.taskID[n],r)})))}))}},ce=function(e){return function(t,r){return e.transporter.read({method:x,path:\"1/indexes/*/objects\",data:{requests:t}},r)}},fe=function(e){return function(t,n){var a=t.map((function(e){return r(r({},e),{},{params:R(e.params||{})})}));return e.transporter.read({method:x,path:\"1/indexes/*/queries\",data:{requests:a},cacheable:!0},n)}},de=function(e){return function(t,a){return Promise.all(t.map((function(t){var o=t.params,u=o.facetName,i=o.facetQuery,s=n(o,[\"facetName\",\"facetQuery\"]);return re(e)(t.indexName,{methods:{searchForFacetValues:Ye}}).searchForFacetValues(u,i,r(r({},a),s))})))}},le=function(e){return function(t,r){var n=y(r);return n.queryParameters[\"X-Algolia-User-ID\"]=t,e.transporter.write({method:j,path:\"1/clusters/mapping\"},n)}},pe=function(e){return function(t,r){return d(e.transporter.write({method:x,path:h(\"1/keys/%s/restore\",t)},r),(function(r,n){return f((function(r){return Y(e)(t,n).catch((function(e){if(404!==e.status)throw e;return r()}))}))}))}},he=function(e){return function(t,r){return e.transporter.read({method:x,path:\"1/clusters/mapping/search\",data:{query:t}},r)}},me=function(e){return function(t,r){var a=Object.assign({},r),o=r||{},u=o.queryParameters,i=n(o,[\"queryParameters\"]),s=u?{queryParameters:u}:{},c=[\"acl\",\"indexes\",\"referers\",\"restrictSources\",\"queryParameters\",\"description\",\"maxQueriesPerIPPerHour\",\"maxHitsPerQuery\"];return d(e.transporter.write({method:q,path:h(\"1/keys/%s\",t),data:s},i),(function(r,n){return f((function(r){return Y(e)(t,n).then((function(e){return function(e){return Object.keys(a).filter((function(e){return-1!==c.indexOf(e)})).every((function(t){return e[t]===a[t]}))}(e)?Promise.resolve():r()}))}))}))}},ye=function(e){return function(t,r){return d(e.transporter.write({method:x,path:h(\"1/indexes/%s/batch\",e.indexName),data:{requests:t}},r),(function(t,r){return tt(e)(t.taskID,r)}))}},ge=function(e){return function(t){return K(r(r({shouldStop:function(e){return void 0===e.cursor}},t),{},{request:function(r){return e.transporter.read({method:x,path:h(\"1/indexes/%s/browse\",e.indexName),data:r},t)}}))}},ve=function(e){return function(t){var n=r({hitsPerPage:1e3},t);return K(r(r({shouldStop:function(e){return e.hits.length<n.hitsPerPage}},n),{},{request:function(t){return Ze(e)(\"\",r(r({},n),t)).then((function(e){return r(r({},e),{},{hits:e.hits.map((function(e){return delete e._highlightResult,e}))})}))}}))}},be=function(e){return function(t){var n=r({hitsPerPage:1e3},t);return K(r(r({shouldStop:function(e){return e.hits.length<n.hitsPerPage}},n),{},{request:function(t){return $e(e)(\"\",r(r({},n),t)).then((function(e){return r(r({},e),{},{hits:e.hits.map((function(e){return delete e._highlightResult,e}))})}))}}))}},Pe=function(e){return function(t,r,a){var o=a||{},u=o.batchSize,i=n(o,[\"batchSize\"]),s={taskIDs:[],objectIDs:[]};return d(function n(){var a,o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,c=[];for(a=o;a<t.length&&(c.push(t[a]),c.length!==(u||1e3));a++);return 0===c.length?Promise.resolve(s):ye(e)(c.map((function(e){return{action:r,body:e}})),i).then((function(e){return s.objectIDs=s.objectIDs.concat(e.objectIDs),s.taskIDs.push(e.taskID),a++,n(a)}))}(),(function(t,r){return Promise.all(t.taskIDs.map((function(t){return tt(e)(t,r)})))}))}},Oe=function(e){return function(t){return d(e.transporter.write({method:x,path:h(\"1/indexes/%s/clear\",e.indexName)},t),(function(t,r){return tt(e)(t.taskID,r)}))}},we=function(e){return function(t){var r=t||{},a=r.forwardToReplicas,o=y(n(r,[\"forwardToReplicas\"]));return a&&(o.queryParameters.forwardToReplicas=1),d(e.transporter.write({method:x,path:h(\"1/indexes/%s/rules/clear\",e.indexName)},o),(function(t,r){return tt(e)(t.taskID,r)}))}},je=function(e){return function(t){var r=t||{},a=r.forwardToReplicas,o=y(n(r,[\"forwardToReplicas\"]));return a&&(o.queryParameters.forwardToReplicas=1),d(e.transporter.write({method:x,path:h(\"1/indexes/%s/synonyms/clear\",e.indexName)},o),(function(t,r){return tt(e)(t.taskID,r)}))}},Ie=function(e){return function(t,r){return d(e.transporter.write({method:x,path:h(\"1/indexes/%s/deleteByQuery\",e.indexName),data:t},r),(function(t,r){return tt(e)(t.taskID,r)}))}},xe=function(e){return function(t){return d(e.transporter.write({method:j,path:h(\"1/indexes/%s\",e.indexName)},t),(function(t,r){return tt(e)(t.taskID,r)}))}},qe=function(e){return function(t,r){return d(De(e)([t],r).then((function(e){return{taskID:e.taskIDs[0]}})),(function(t,r){return tt(e)(t.taskID,r)}))}},De=function(e){return function(t,r){var n=t.map((function(e){return{objectID:e}}));return Pe(e)(n,rt.DeleteObject,r)}},Se=function(e){return function(t,r){var a=r||{},o=a.forwardToReplicas,u=y(n(a,[\"forwardToReplicas\"]));return o&&(u.queryParameters.forwardToReplicas=1),d(e.transporter.write({method:j,path:h(\"1/indexes/%s/rules/%s\",e.indexName,t)},u),(function(t,r){return tt(e)(t.taskID,r)}))}},ke=function(e){return function(t,r){var a=r||{},o=a.forwardToReplicas,u=y(n(a,[\"forwardToReplicas\"]));return o&&(u.queryParameters.forwardToReplicas=1),d(e.transporter.write({method:j,path:h(\"1/indexes/%s/synonyms/%s\",e.indexName,t)},u),(function(t,r){return tt(e)(t.taskID,r)}))}},Te=function(e){return function(t){return Je(e)(t).then((function(){return!0})).catch((function(e){if(404!==e.status)throw e;return!1}))}},Ne=function(e){return function(t,r,n){return e.transporter.read({method:x,path:h(\"1/answers/%s/prediction\",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n)}},Re=function(e){return function(t,o){var u=o||{},i=u.query,s=u.paginate,c=n(u,[\"query\",\"paginate\"]),f=0;return function n(){return Xe(e)(i||\"\",r(r({},c),{},{page:f})).then((function(e){for(var r=0,o=Object.entries(e.hits);r<o.length;r++){var u=a(o[r],2),i=u[0],c=u[1];if(t(c))return{object:c,position:parseInt(i,10),page:f}}if(f++,!1===s||f>=e.nbPages)throw{name:\"ObjectNotFoundError\",message:\"Object not found.\"};return n()}))}()}},Ae=function(e){return function(t,r){return e.transporter.read({method:I,path:h(\"1/indexes/%s/%s\",e.indexName,t)},r)}},Ee=function(){return function(e,t){for(var r=0,n=Object.entries(e.hits);r<n.length;r++){var o=a(n[r],2),u=o[0];if(o[1].objectID===t)return parseInt(u,10)}return-1}},Ce=function(e){return function(t,a){var o=a||{},u=o.attributesToRetrieve,i=n(o,[\"attributesToRetrieve\"]),s=t.map((function(t){return r({indexName:e.indexName,objectID:t},u?{attributesToRetrieve:u}:{})}));return e.transporter.read({method:x,path:\"1/indexes/*/objects\",data:{requests:s}},i)}},Ue=function(e){return function(t,r){return e.transporter.read({method:I,path:h(\"1/indexes/%s/rules/%s\",e.indexName,t)},r)}},Je=function(e){return function(t){return e.transporter.read({method:I,path:h(\"1/indexes/%s/settings\",e.indexName),data:{getVersion:2}},t)}},ze=function(e){return function(t,r){return e.transporter.read({method:I,path:h(\"1/indexes/%s/synonyms/%s\",e.indexName,t)},r)}},Fe=function(e){return function(t,r){return d(He(e)([t],r).then((function(e){return{objectID:e.objectIDs[0],taskID:e.taskIDs[0]}})),(function(t,r){return tt(e)(t.taskID,r)}))}},He=function(e){return function(t,r){var a=r||{},o=a.createIfNotExists,u=n(a,[\"createIfNotExists\"]),i=o?rt.PartialUpdateObject:rt.PartialUpdateObjectNoCreate;return Pe(e)(t,i,u)}},Me=function(e){return function(t,u){var i=u||{},s=i.safe,c=i.autoGenerateObjectIDIfNotExist,f=i.batchSize,l=n(i,[\"safe\",\"autoGenerateObjectIDIfNotExist\",\"batchSize\"]),p=function(t,r,n,a){return d(e.transporter.write({method:x,path:h(\"1/indexes/%s/operation\",t),data:{operation:n,destination:r}},a),(function(t,r){return tt(e)(t.taskID,r)}))},m=Math.random().toString(36).substring(7),y=\"\".concat(e.indexName,\"_tmp_\").concat(m),g=Qe({appId:e.appId,transporter:e.transporter,indexName:y}),v=[],b=p(e.indexName,y,\"copy\",r(r({},l),{},{scope:[\"settings\",\"synonyms\",\"rules\"]}));return v.push(b),d((s?b.wait(l):b).then((function(){var e=g(t,r(r({},l),{},{autoGenerateObjectIDIfNotExist:c,batchSize:f}));return v.push(e),s?e.wait(l):e})).then((function(){var t=p(y,e.indexName,\"move\",l);return v.push(t),s?t.wait(l):t})).then((function(){return Promise.all(v)})).then((function(e){var t=a(e,3),r=t[0],n=t[1],u=t[2];return{objectIDs:n.objectIDs,taskIDs:[r.taskID].concat(o(n.taskIDs),[u.taskID])}})),(function(e,t){return Promise.all(v.map((function(e){return e.wait(t)})))}))}},Ke=function(e){return function(t,n){return Le(e)(t,r(r({},n),{},{clearExistingRules:!0}))}},We=function(e){return function(t,n){return _e(e)(t,r(r({},n),{},{clearExistingSynonyms:!0}))}},Be=function(e){return function(t,r){return d(Qe(e)([t],r).then((function(e){return{objectID:e.objectIDs[0],taskID:e.taskIDs[0]}})),(function(t,r){return tt(e)(t.taskID,r)}))}},Qe=function(e){return function(t,r){var a=r||{},o=a.autoGenerateObjectIDIfNotExist,u=n(a,[\"autoGenerateObjectIDIfNotExist\"]),i=o?rt.AddObject:rt.UpdateObject;if(i===rt.UpdateObject){var s=!0,c=!1,f=void 0;try{for(var l,p=t[Symbol.iterator]();!(s=(l=p.next()).done);s=!0){if(void 0===l.value.objectID)return d(Promise.reject({name:\"MissingObjectIDError\",message:\"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option.\"}))}}catch(e){c=!0,f=e}finally{try{s||null==p.return||p.return()}finally{if(c)throw f}}}return Pe(e)(t,i,u)}},Ge=function(e){return function(t,r){return Le(e)([t],r)}},Le=function(e){return function(t,r){var a=r||{},o=a.forwardToReplicas,u=a.clearExistingRules,i=y(n(a,[\"forwardToReplicas\",\"clearExistingRules\"]));return o&&(i.queryParameters.forwardToReplicas=1),u&&(i.queryParameters.clearExistingRules=1),d(e.transporter.write({method:x,path:h(\"1/indexes/%s/rules/batch\",e.indexName),data:t},i),(function(t,r){return tt(e)(t.taskID,r)}))}},Ve=function(e){return function(t,r){return _e(e)([t],r)}},_e=function(e){return function(t,r){var a=r||{},o=a.forwardToReplicas,u=a.clearExistingSynonyms,i=a.replaceExistingSynonyms,s=y(n(a,[\"forwardToReplicas\",\"clearExistingSynonyms\",\"replaceExistingSynonyms\"]));return o&&(s.queryParameters.forwardToReplicas=1),(i||u)&&(s.queryParameters.replaceExistingSynonyms=1),d(e.transporter.write({method:x,path:h(\"1/indexes/%s/synonyms/batch\",e.indexName),data:t},s),(function(t,r){return tt(e)(t.taskID,r)}))}},Xe=function(e){return function(t,r){return e.transporter.read({method:x,path:h(\"1/indexes/%s/query\",e.indexName),data:{query:t},cacheable:!0},r)}},Ye=function(e){return function(t,r,n){return e.transporter.read({method:x,path:h(\"1/indexes/%s/facets/%s/query\",e.indexName,t),data:{facetQuery:r},cacheable:!0},n)}},Ze=function(e){return function(t,r){return e.transporter.read({method:x,path:h(\"1/indexes/%s/rules/search\",e.indexName),data:{query:t}},r)}},$e=function(e){return function(t,r){return e.transporter.read({method:x,path:h(\"1/indexes/%s/synonyms/search\",e.indexName),data:{query:t}},r)}},et=function(e){return function(t,r){var a=r||{},o=a.forwardToReplicas,u=y(n(a,[\"forwardToReplicas\"]));return o&&(u.queryParameters.forwardToReplicas=1),d(e.transporter.write({method:q,path:h(\"1/indexes/%s/settings\",e.indexName),data:t},u),(function(t,r){return tt(e)(t.taskID,r)}))}},tt=function(e){return function(t,r){return f((function(n){return function(e){return function(t,r){return e.transporter.read({method:I,path:h(\"1/indexes/%s/task/%s\",e.indexName,t.toString())},r)}}(e)(t,r).then((function(e){return\"published\"!==e.status?n():void 0}))}))}},rt={AddObject:\"addObject\",UpdateObject:\"updateObject\",PartialUpdateObject:\"partialUpdateObject\",PartialUpdateObjectNoCreate:\"partialUpdateObjectNoCreate\",DeleteObject:\"deleteObject\",DeleteIndex:\"delete\",ClearIndex:\"clear\"},nt={Settings:\"settings\",Synonyms:\"synonyms\",Rules:\"rules\"},at=1,ot=2,ut=3;function it(e,t,n){var a,o={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(e){return new Promise((function(t){var r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((function(t){return r.setRequestHeader(t,e.headers[t])}));var n,a=function(e,n){return setTimeout((function(){r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e)},o=a(e.connectTimeout,\"Connection timeout\");r.onreadystatechange=function(){r.readyState>r.OPENED&&void 0===n&&(clearTimeout(o),n=a(e.responseTimeout,\"Socket timeout\"))},r.onerror=function(){0===r.status&&(clearTimeout(o),clearTimeout(n),t({content:r.responseText||\"Network request failed\",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(o),clearTimeout(n),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))}},logger:(a=ut,{debug:function(e,t){return at>=a&&console.debug(e,t),Promise.resolve()},info:function(e,t){return ot>=a&&console.info(e,t),Promise.resolve()},error:function(e,t){return console.error(e,t),Promise.resolve()}}),responsesCache:s(),requestsCache:s({serializable:!1}),hostsCache:i({caches:[u({key:\"\".concat(\"4.8.6\",\"-\").concat(e)}),s()]}),userAgent:T(\"4.8.6\").add({segment:\"Browser\"})};return function(e){var t=e.appId,n=c(void 0!==e.authMode?e.authMode:m.WithinHeaders,t,e.apiKey),a=k(r(r({hosts:[{url:\"\".concat(t,\"-dsn.algolia.net\"),accept:g.Read},{url:\"\".concat(t,\".algolia.net\"),accept:g.Write}].concat(l([{url:\"\".concat(t,\"-1.algolianet.com\")},{url:\"\".concat(t,\"-2.algolianet.com\")},{url:\"\".concat(t,\"-3.algolianet.com\")}]))},e),{},{headers:r(r(r({},n.headers()),{\"content-type\":\"application/x-www-form-urlencoded\"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return p({transporter:a,appId:t,addAlgoliaAgent:function(e,t){a.userAgent.add({segment:e,version:t})},clearCache:function(){return Promise.all([a.requestsCache.clear(),a.responsesCache.clear()]).then((function(){}))}},e.methods)}(r(r(r({},o),n),{},{methods:{search:fe,searchForFacetValues:de,multipleBatch:se,multipleGetObjects:ce,multipleQueries:fe,copyIndex:G,copySettings:V,copySynonyms:_,copyRules:L,moveIndex:ie,listIndices:oe,getLogs:Z,listClusters:ae,multipleSearchForFacetValues:de,getApiKey:Y,addApiKey:W,listApiKeys:ne,updateApiKey:me,deleteApiKey:X,restoreApiKey:pe,assignUserID:B,assignUserIDs:Q,getUserID:ee,searchUserIDs:he,listUserIDs:ue,getTopUserIDs:$,removeUserID:le,hasPendingMappings:te,initIndex:function(e){return function(t){return re(e)(t,{methods:{batch:ye,delete:xe,findAnswers:Ne,getObject:Ae,getObjects:Ce,saveObject:Be,saveObjects:Qe,search:Xe,searchForFacetValues:Ye,waitTask:tt,setSettings:et,getSettings:Je,partialUpdateObject:Fe,partialUpdateObjects:He,deleteObject:qe,deleteObjects:De,deleteBy:Ie,clearObjects:Oe,browseObjects:ge,getObjectPosition:Ee,findObject:Re,exists:Te,saveSynonym:Ve,saveSynonyms:_e,getSynonym:ze,searchSynonyms:$e,browseSynonyms:be,deleteSynonym:ke,clearSynonyms:je,replaceAllObjects:Me,replaceAllSynonyms:We,searchRules:Ze,getRule:Ue,deleteRule:Se,saveRule:Ge,saveRules:Le,replaceAllRules:Ke,browseRules:ve,clearRules:we}})}},initAnalytics:function(){return function(e){return function(e){var t=e.region||\"us\",n=c(m.WithinHeaders,e.appId,e.apiKey),a=k(r(r({hosts:[{url:\"analytics.\".concat(t,\".algolia.com\")}]},e),{},{headers:r(r(r({},n.headers()),{\"content-type\":\"application/json\"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return p({appId:e.appId,transporter:a},e.methods)}(r(r(r({},o),e),{},{methods:{addABTest:C,getABTest:J,getABTests:z,stopABTest:F,deleteABTest:U}}))}},initRecommendation:function(){return function(e){return function(e){var t=e.region||\"us\",n=c(m.WithinHeaders,e.appId,e.apiKey),a=k(r(r({hosts:[{url:\"recommendation.\".concat(t,\".algolia.com\")}]},e),{},{headers:r(r(r({},n.headers()),{\"content-type\":\"application/json\"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return p({appId:e.appId,transporter:a},e.methods)}(r(r(r({},o),e),{},{methods:{getPersonalizationStrategy:H,setPersonalizationStrategy:M}}))}}}}))}return it.version=\"4.8.6\",it}));\n","import Helper from '@ember/component/helper';\nimport { service } from '@ember/service';\n\nimport type IntlService from '../services/intl.ts';\n\ntype FormatParameters = Parameters<IntlService['formatDate']>;\ntype Value = FormatParameters[0];\ntype Options = FormatParameters[1];\n\ninterface FormatDateSignature {\n  Args: {\n    Named?: Options;\n    Positional: [Value];\n  };\n  Return: string;\n}\n\nexport default class FormatDateHelper extends Helper<FormatDateSignature> {\n  @service declare intl: IntlService;\n\n  compute(\n    [value]: FormatDateSignature['Args']['Positional'],\n    options: FormatDateSignature['Args']['Named'],\n  ): FormatDateSignature['Return'] {\n    return this.intl.formatDate(value, options);\n  }\n}\n","import Helper from '@ember/component/helper';\nimport { service } from '@ember/service';\n\nimport type IntlService from '../services/intl.ts';\n\ntype FormatParameters = Parameters<IntlService['formatDateRange']>;\ntype From = FormatParameters[0];\ntype To = FormatParameters[1];\ntype Options = FormatParameters[2];\n\ninterface FormatDateRangeSignature {\n  Args: {\n    Named?: Options;\n    Positional: [From, To];\n  };\n  Return: string;\n}\n\nexport default class FormatDateRangeHelper extends Helper<FormatDateRangeSignature> {\n  @service declare intl: IntlService;\n\n  compute(\n    [from, to]: FormatDateRangeSignature['Args']['Positional'],\n    options: FormatDateRangeSignature['Args']['Named'],\n  ): FormatDateRangeSignature['Return'] {\n    return this.intl.formatDateRange(from, to, options);\n  }\n}\n","import Helper from '@ember/component/helper';\nimport { service } from '@ember/service';\n\nimport type IntlService from '../services/intl.ts';\n\ntype FormatParameters = Parameters<IntlService['formatDisplayName']>;\ntype Value = FormatParameters[0];\ntype Options = FormatParameters[1];\n\ninterface FormatDisplayNameSignature {\n  Args: {\n    Named: Options;\n    Positional: [Value];\n  };\n  Return: string;\n}\n\nexport default class FormatDisplayNameHelper extends Helper<FormatDisplayNameSignature> {\n  @service declare intl: IntlService;\n\n  compute(\n    [value]: FormatDisplayNameSignature['Args']['Positional'],\n    options: FormatDisplayNameSignature['Args']['Named'],\n  ): FormatDisplayNameSignature['Return'] {\n    return this.intl.formatDisplayName(value, options);\n  }\n}\n","import Helper from '@ember/component/helper';\nimport { service } from '@ember/service';\n\nimport type IntlService from '../services/intl.ts';\n\ntype FormatParameters = Parameters<IntlService['formatList']>;\ntype Value = FormatParameters[0];\ntype Options = FormatParameters[1];\n\ninterface FormatListSignature {\n  Args: {\n    Named?: Options;\n    Positional: [Value];\n  };\n  Return: string;\n}\n\nexport default class FormatListHelper extends Helper<FormatListSignature> {\n  @service declare intl: IntlService;\n\n  compute(\n    [value]: FormatListSignature['Args']['Positional'],\n    options: FormatListSignature['Args']['Named'],\n  ): FormatListSignature['Return'] {\n    return this.intl.formatList(value, options);\n  }\n}\n","import Helper from '@ember/component/helper';\nimport { service } from '@ember/service';\n\nimport type IntlService from '../services/intl.ts';\n\ntype FormatParameters = Parameters<IntlService['formatMessage']>;\ntype Value = FormatParameters[0];\ntype Options = FormatParameters[1];\n\ninterface FormatMessageSignature {\n  Args: {\n    Named?: Options;\n    Positional: [Value];\n  };\n  Return: string;\n}\n\nexport default class FormatMessageHelper extends Helper<FormatMessageSignature> {\n  @service declare intl: IntlService;\n\n  compute(\n    [value]: FormatMessageSignature['Args']['Positional'],\n    options: FormatMessageSignature['Args']['Named'],\n  ): FormatMessageSignature['Return'] {\n    return this.intl.formatMessage(value, options);\n  }\n}\n","import Helper from '@ember/component/helper';\nimport { service } from '@ember/service';\n\nimport type IntlService from '../services/intl.ts';\n\ntype FormatParameters = Parameters<IntlService['formatNumber']>;\ntype Value = FormatParameters[0];\ntype Options = FormatParameters[1];\n\ninterface FormatNumberSignature {\n  Args: {\n    Named?: Options;\n    Positional: [Value];\n  };\n  Return: string;\n}\n\nexport default class FormatNumberHelper extends Helper<FormatNumberSignature> {\n  @service declare intl: IntlService;\n\n  compute(\n    [value]: FormatNumberSignature['Args']['Positional'],\n    options: FormatNumberSignature['Args']['Named'],\n  ): FormatNumberSignature['Return'] {\n    return this.intl.formatNumber(value, options);\n  }\n}\n","import Helper from '@ember/component/helper';\nimport { service } from '@ember/service';\n\nimport type IntlService from '../services/intl.ts';\n\ntype FormatParameters = Parameters<IntlService['formatRelativeTime']>;\ntype Value = FormatParameters[0];\ntype Options = FormatParameters[1];\n\ninterface FormatRelativeTimeSignature {\n  Args: {\n    Named?: Options;\n    Positional: [Value];\n  };\n  Return: string;\n}\n\nexport default class FormatRelativeTimeHelper extends Helper<FormatRelativeTimeSignature> {\n  @service declare intl: IntlService;\n\n  compute(\n    [value]: FormatRelativeTimeSignature['Args']['Positional'],\n    options: FormatRelativeTimeSignature['Args']['Named'],\n  ): FormatRelativeTimeSignature['Return'] {\n    return this.intl.formatRelativeTime(value, options);\n  }\n}\n","import Helper from '@ember/component/helper';\nimport { service } from '@ember/service';\n\nimport type IntlService from '../services/intl.ts';\n\ntype FormatParameters = Parameters<IntlService['formatTime']>;\ntype Value = FormatParameters[0];\ntype Options = FormatParameters[1];\n\ninterface FormatTimeSignature {\n  Args: {\n    Named?: Options;\n    Positional: [Value];\n  };\n  Return: string;\n}\n\nexport default class FormatTimeHelper extends Helper<FormatTimeSignature> {\n  @service declare intl: IntlService;\n\n  compute(\n    [value]: FormatTimeSignature['Args']['Positional'],\n    options: FormatTimeSignature['Args']['Named'],\n  ): FormatTimeSignature['Return'] {\n    return this.intl.formatTime(value, options);\n  }\n}\n","import Helper from '@ember/component/helper';\nimport { service } from '@ember/service';\n\nimport type IntlService from '../services/intl.ts';\n\ntype TParameters = Parameters<IntlService['t']>;\ntype Key = TParameters[0];\ntype Options = TParameters[1];\n\ninterface TSignature {\n  Args: {\n    Named?: Options;\n    Positional: [Key] | [Key, Options];\n  };\n  Return: string;\n}\n\nexport default class THelper extends Helper<TSignature> {\n  @service declare intl: IntlService;\n\n  compute(\n    [key, positionalOptions]: TSignature['Args']['Positional'],\n    namedOptions: TSignature['Args']['Named'],\n  ): TSignature['Return'] {\n    const options = positionalOptions\n      ? Object.assign({}, positionalOptions, namedOptions)\n      : namedOptions;\n\n    return this.intl.t(key, options);\n  }\n}\n","import { service } from '@ember/service';\nimport Helper from '@ember/component/helper';\nimport { guidFor } from '@ember/object/internals';\n\nimport type Owner from '@ember/owner';\nimport type PageTitleService from '../services/page-title.ts';\nimport type { PageTitleToken } from '../private-types.ts';\n\nexport type PageTitleHelperOptions = Pick<\n  PageTitleToken,\n  'prepend' | 'front' | 'replace' | 'separator'\n>;\n\ninterface Signature {\n  Args: {\n    Positional: string[];\n    Named: PageTitleHelperOptions;\n  };\n  Return: void;\n}\n\n/**\n * `{{pageTitle}}` helper used to set the title of the current route context.\n *\n * ```gjs\n * import { pageTitle } from 'ember-page-title';\n *\n * <template>\n *   {{pageTitle \"the text to set the tab's title to\"}}\n *   {{pageTitle \\@model.post.title}}\n * </template>\n * ```\n */\nexport default class PageTitle extends Helper<Signature> {\n  @service('page-title') declare tokens: PageTitleService;\n\n  tokenId = guidFor(this);\n\n  constructor(owner: Owner) {\n    super(owner);\n    this.tokens.push({ id: this.tokenId });\n  }\n\n  compute(params: string[], userOptions: PageTitleHelperOptions) {\n    const options = {\n      ...userOptions,\n      id: this.tokenId,\n      title: params.join(''),\n    };\n\n    this.tokens.push(options);\n    this.tokens.scheduleTitleUpdate();\n    // We must return an empty value here because otherwise\n    // invoking the pageTitle helper will render something\n    // in the component it's used in, and we don't want that.\n    //\n    // pageTitle is a side-effecting helper.\n    // We *synchronize* the document.title with our internal state.\n    return '';\n  }\n\n  willDestroy() {\n    super.willDestroy();\n    this.tokens.remove(this.tokenId);\n    this.tokens.scheduleTitleUpdate();\n  }\n}\n","/**\n* A handy class to calculate color values.\n*\n* @version 1.0\n* @author Robert Eisele <robert@xarg.org>\n* @copyright Copyright (c) 2010, Robert Eisele\n* @link http://www.xarg.org/2010/03/generate-client-side-png-files-using-javascript/\n* @license http://www.opensource.org/licenses/bsd-license.php BSD License\n*\n*/\n\n(function() {\n\n\t// helper functions for that ctx\n\tfunction write(buffer, offs) {\n\t\tfor (var i = 2; i < arguments.length; i++) {\n\t\t\tfor (var j = 0; j < arguments[i].length; j++) {\n\t\t\t\tbuffer[offs++] = arguments[i].charAt(j);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction byte2(w) {\n\t\treturn String.fromCharCode((w >> 8) & 255, w & 255);\n\t}\n\n\tfunction byte4(w) {\n\t\treturn String.fromCharCode((w >> 24) & 255, (w >> 16) & 255, (w >> 8) & 255, w & 255);\n\t}\n\n\tfunction byte2lsb(w) {\n\t\treturn String.fromCharCode(w & 255, (w >> 8) & 255);\n\t}\n\n\t// modified from original source to support NPM\n\tvar PNGlib = function(width,height,depth) {\n\n\t\tthis.width   = width;\n\t\tthis.height  = height;\n\t\tthis.depth   = depth;\n\n\t\t// pixel data and row filter identifier size\n\t\tthis.pix_size = height * (width + 1);\n\n\t\t// deflate header, pix_size, block headers, adler32 checksum\n\t\tthis.data_size = 2 + this.pix_size + 5 * Math.floor((0xfffe + this.pix_size) / 0xffff) + 4;\n\n\t\t// offsets and sizes of Png chunks\n\t\tthis.ihdr_offs = 0;\t\t\t\t\t\t\t\t\t// IHDR offset and size\n\t\tthis.ihdr_size = 4 + 4 + 13 + 4;\n\t\tthis.plte_offs = this.ihdr_offs + this.ihdr_size;\t// PLTE offset and size\n\t\tthis.plte_size = 4 + 4 + 3 * depth + 4;\n\t\tthis.trns_offs = this.plte_offs + this.plte_size;\t// tRNS offset and size\n\t\tthis.trns_size = 4 + 4 + depth + 4;\n\t\tthis.idat_offs = this.trns_offs + this.trns_size;\t// IDAT offset and size\n\t\tthis.idat_size = 4 + 4 + this.data_size + 4;\n\t\tthis.iend_offs = this.idat_offs + this.idat_size;\t// IEND offset and size\n\t\tthis.iend_size = 4 + 4 + 4;\n\t\tthis.buffer_size  = this.iend_offs + this.iend_size;\t// total PNG size\n\n\t\tthis.buffer  = new Array();\n\t\tthis.palette = new Object();\n\t\tthis.pindex  = 0;\n\n\t\tvar _crc32 = new Array();\n\n\t\t// initialize buffer with zero bytes\n\t\tfor (var i = 0; i < this.buffer_size; i++) {\n\t\t\tthis.buffer[i] = \"\\x00\";\n\t\t}\n\n\t\t// initialize non-zero elements\n\t\twrite(this.buffer, this.ihdr_offs, byte4(this.ihdr_size - 12), 'IHDR', byte4(width), byte4(height), \"\\x08\\x03\");\n\t\twrite(this.buffer, this.plte_offs, byte4(this.plte_size - 12), 'PLTE');\n\t\twrite(this.buffer, this.trns_offs, byte4(this.trns_size - 12), 'tRNS');\n\t\twrite(this.buffer, this.idat_offs, byte4(this.idat_size - 12), 'IDAT');\n\t\twrite(this.buffer, this.iend_offs, byte4(this.iend_size - 12), 'IEND');\n\n\t\t// initialize deflate header\n\t\tvar header = ((8 + (7 << 4)) << 8) | (3 << 6);\n\t\theader+= 31 - (header % 31);\n\n\t\twrite(this.buffer, this.idat_offs + 8, byte2(header));\n\n\t\t// initialize deflate block headers\n\t\tfor (var i = 0; (i << 16) - 1 < this.pix_size; i++) {\n\t\t\tvar size, bits;\n\t\t\tif (i + 0xffff < this.pix_size) {\n\t\t\t\tsize = 0xffff;\n\t\t\t\tbits = \"\\x00\";\n\t\t\t} else {\n\t\t\t\tsize = this.pix_size - (i << 16) - i;\n\t\t\t\tbits = \"\\x01\";\n\t\t\t}\n\t\t\twrite(this.buffer, this.idat_offs + 8 + 2 + (i << 16) + (i << 2), bits, byte2lsb(size), byte2lsb(~size));\n\t\t}\n\n\t\t/* Create crc32 lookup table */\n\t\tfor (var i = 0; i < 256; i++) {\n\t\t\tvar c = i;\n\t\t\tfor (var j = 0; j < 8; j++) {\n\t\t\t\tif (c & 1) {\n\t\t\t\t\tc = -306674912 ^ ((c >> 1) & 0x7fffffff);\n\t\t\t\t} else {\n\t\t\t\t\tc = (c >> 1) & 0x7fffffff;\n\t\t\t\t}\n\t\t\t}\n\t\t\t_crc32[i] = c;\n\t\t}\n\n\t\t// compute the index into a png for a given pixel\n\t\tthis.index = function(x,y) {\n\t\t\tvar i = y * (this.width + 1) + x + 1;\n\t\t\tvar j = this.idat_offs + 8 + 2 + 5 * Math.floor((i / 0xffff) + 1) + i;\n\t\t\treturn j;\n\t\t}\n\n\t\t// convert a color and build up the palette\n\t\tthis.color = function(red, green, blue, alpha) {\n\n\t\t\talpha = alpha >= 0 ? alpha : 255;\n\t\t\tvar color = (((((alpha << 8) | red) << 8) | green) << 8) | blue;\n\n\t\t\tif (typeof this.palette[color] == \"undefined\") {\n\t\t\t\tif (this.pindex == this.depth) return \"\\x00\";\n\n\t\t\t\tvar ndx = this.plte_offs + 8 + 3 * this.pindex;\n\n\t\t\t\tthis.buffer[ndx + 0] = String.fromCharCode(red);\n\t\t\t\tthis.buffer[ndx + 1] = String.fromCharCode(green);\n\t\t\t\tthis.buffer[ndx + 2] = String.fromCharCode(blue);\n\t\t\t\tthis.buffer[this.trns_offs+8+this.pindex] = String.fromCharCode(alpha);\n\n\t\t\t\tthis.palette[color] = String.fromCharCode(this.pindex++);\n\t\t\t}\n\t\t\treturn this.palette[color];\n\t\t}\n\n\t\t// output a PNG string, Base64 encoded\n\t\tthis.getBase64 = function() {\n\n\t\t\tvar s = this.getDump();\n\n\t\t\tvar ch = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\t\t\tvar c1, c2, c3, e1, e2, e3, e4;\n\t\t\tvar l = s.length;\n\t\t\tvar i = 0;\n\t\t\tvar r = \"\";\n\n\t\t\tdo {\n\t\t\t\tc1 = s.charCodeAt(i);\n\t\t\t\te1 = c1 >> 2;\n\t\t\t\tc2 = s.charCodeAt(i+1);\n\t\t\t\te2 = ((c1 & 3) << 4) | (c2 >> 4);\n\t\t\t\tc3 = s.charCodeAt(i+2);\n\t\t\t\tif (l < i+2) { e3 = 64; } else { e3 = ((c2 & 0xf) << 2) | (c3 >> 6); }\n\t\t\t\tif (l < i+3) { e4 = 64; } else { e4 = c3 & 0x3f; }\n\t\t\t\tr+= ch.charAt(e1) + ch.charAt(e2) + ch.charAt(e3) + ch.charAt(e4);\n\t\t\t} while ((i+= 3) < l);\n\t\t\treturn r;\n\t\t}\n\n\t\t// output a PNG string\n\t\tthis.getDump = function() {\n\n\t\t\t// compute adler32 of output pixels + row filter bytes\n\t\t\tvar BASE = 65521; /* largest prime smaller than 65536 */\n\t\t\tvar NMAX = 5552;  /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */\n\t\t\tvar s1 = 1;\n\t\t\tvar s2 = 0;\n\t\t\tvar n = NMAX;\n\n\t\t\tfor (var y = 0; y < this.height; y++) {\n\t\t\t\tfor (var x = -1; x < this.width; x++) {\n\t\t\t\t\ts1+= this.buffer[this.index(x, y)].charCodeAt(0);\n\t\t\t\t\ts2+= s1;\n\t\t\t\t\tif ((n-= 1) == 0) {\n\t\t\t\t\t\ts1%= BASE;\n\t\t\t\t\t\ts2%= BASE;\n\t\t\t\t\t\tn = NMAX;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ts1%= BASE;\n\t\t\ts2%= BASE;\n\t\t\twrite(this.buffer, this.idat_offs + this.idat_size - 8, byte4((s2 << 16) | s1));\n\n\t\t\t// compute crc32 of the PNG chunks\n\t\t\tfunction crc32(png, offs, size) {\n\t\t\t\tvar crc = -1;\n\t\t\t\tfor (var i = 4; i < size-4; i += 1) {\n\t\t\t\t\tcrc = _crc32[(crc ^ png[offs+i].charCodeAt(0)) & 0xff] ^ ((crc >> 8) & 0x00ffffff);\n\t\t\t\t}\n\t\t\t\twrite(png, offs+size-4, byte4(crc ^ -1));\n\t\t\t}\n\n\t\t\tcrc32(this.buffer, this.ihdr_offs, this.ihdr_size);\n\t\t\tcrc32(this.buffer, this.plte_offs, this.plte_size);\n\t\t\tcrc32(this.buffer, this.trns_offs, this.trns_size);\n\t\t\tcrc32(this.buffer, this.idat_offs, this.idat_size);\n\t\t\tcrc32(this.buffer, this.iend_offs, this.iend_size);\n\n\t\t\t// convert PNG to string\n\t\t\treturn \"\\x89PNG\\r\\n\\x1a\\n\"+this.buffer.join('');\n\t\t}\n\t}\n\n\t// modified from original source to support NPM\n\tif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n\t\tmodule.exports = PNGlib;\n\t} else {\n\t\twindow.PNGlib = PNGlib;\n\t}\n})();\n","//! moment.js locale configuration\n//! locale : Afrikaans [af]\n//! author : Werner Mollentze : https://github.com/wernerm\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var af = moment.defineLocale('af', {\n        months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n        weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(\n            '_'\n        ),\n        weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n        weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n        meridiemParse: /vm|nm/i,\n        isPM: function (input) {\n            return /^nm$/i.test(input);\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'vm' : 'VM';\n            } else {\n                return isLower ? 'nm' : 'NM';\n            }\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Vandag om] LT',\n            nextDay: '[Môre om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[Gister om] LT',\n            lastWeek: '[Laas] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'oor %s',\n            past: '%s gelede',\n            s: \"'n paar sekondes\",\n            ss: '%d sekondes',\n            m: \"'n minuut\",\n            mm: '%d minute',\n            h: \"'n uur\",\n            hh: '%d ure',\n            d: \"'n dag\",\n            dd: '%d dae',\n            M: \"'n maand\",\n            MM: '%d maande',\n            y: \"'n jaar\",\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            ); // Thanks to Joris Röling : https://github.com/jjupiter\n        },\n        week: {\n            dow: 1, // Maandag is die eerste dag van die week.\n            doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n        },\n    });\n\n    return af;\n\n})));\n","//! moment.js locale configuration\n//! locale : Amharic (Ethiopia) [am-et]\n//! author : Tekle Ayele : https://github.com/tekleayele\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var amEt = moment.defineLocale('am-et', {\n        months: 'ጃንዩወሪ_ፌብሩወሪ_ማርች_ኤፕሪል_ሜይ_ጁን_ጁላይ_ኦገስት_ሴፕቴምበር_ኦክቶበር_ኖቬምበር_ዲሴምበር'.split(\n            '_'\n        ),\n        monthsShort: 'ጃን_ፌብ_ማር_ኤፕር_ሜይ_ጁን_ጁላይ_ኦገ_ሴፕ_ኦክቶ_ኖቬ_ዲሴ'.split('_'),\n        weekdays: 'እሑድ_ሰኞ_ማክሰኞ_እሮብ_ሀሙስ_ዓርብ_ቅዳሜ'.split('_'),\n        weekdaysShort: 'እሑ_ሰኞ_ማክ_እሮ_ሀሙ_ዓር_ቅዳ'.split('_'),\n        weekdaysMin: 'እሁ_ሰ_ማ_እ_ሀ_ዓ_ቅ'.split('_'),\n        meridiemParse: /ጥዋት|ከሰዓት/,\n        isPM: function (input) {\n            return input === 'ከሰዓት';\n        },\n        meridiem: function (hours) {\n            return hours < 12 ? 'ጥዋት' : 'ከሰዓት';\n        },\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[ዛሬ በ] LT',\n            nextDay: '[ነገ በ] LT',\n            nextWeek: 'dddd [በ] LT',\n            lastDay: '[ትናንትና በ] LT',\n            lastWeek: '[ያለፈው ሳምንት] dddd [በ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ውስጥ',\n            past: '%s በፊት',\n            s: 'ጥቂት ሰከንዶች',\n            ss: '%d ሰከንዶች',\n            m: 'አንድ ደቂቃ',\n            mm: '%d ደቂቃዎች',\n            h: 'አንድ ሰአት',\n            hh: '%d ሰአታት',\n            d: 'አንድ ቀን',\n            dd: '%d ቀናት',\n            M: 'አንድ ወር',\n            MM: '%d ወራት',\n            y: 'አንድ ዓመት',\n            yy: '%d ዓመታት',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ኛ)/,\n        ordinal: function (number) {\n            return number + 'ኛ';\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return amEt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic [ar]\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        },\n        pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                  ? 1\n                  : n === 2\n                    ? 2\n                    : n % 100 >= 3 && n % 100 <= 10\n                      ? 3\n                      : n % 100 >= 11\n                        ? 4\n                        : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months = [\n            'يناير',\n            'فبراير',\n            'مارس',\n            'أبريل',\n            'مايو',\n            'يونيو',\n            'يوليو',\n            'أغسطس',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    var ar = moment.defineLocale('ar', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return ar;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Algeria) [ar-dz]\n//! author : Amine Roukh: https://github.com/Amine27\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n//! author : Noureddine LOUAHEDJ : https://github.com/noureddinem\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                  ? 1\n                  : n === 2\n                    ? 2\n                    : n % 100 >= 3 && n % 100 <= 10\n                      ? 3\n                      : n % 100 >= 11\n                        ? 4\n                        : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months = [\n            'جانفي',\n            'فيفري',\n            'مارس',\n            'أفريل',\n            'ماي',\n            'جوان',\n            'جويلية',\n            'أوت',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    var arDz = moment.defineLocale('ar-dz', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return arDz;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Kuwait) [ar-kw]\n//! author : Nusret Parlak: https://github.com/nusretparlak\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var arKw = moment.defineLocale('ar-kw', {\n        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return arKw;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Libya) [ar-ly]\n//! author : Ali Hmer: https://github.com/kikoanis\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '1',\n            2: '2',\n            3: '3',\n            4: '4',\n            5: '5',\n            6: '6',\n            7: '7',\n            8: '8',\n            9: '9',\n            0: '0',\n        },\n        pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                  ? 1\n                  : n === 2\n                    ? 2\n                    : n % 100 >= 3 && n % 100 <= 10\n                      ? 3\n                      : n % 100 >= 11\n                        ? 4\n                        : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months = [\n            'يناير',\n            'فبراير',\n            'مارس',\n            'أبريل',\n            'مايو',\n            'يونيو',\n            'يوليو',\n            'أغسطس',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    var arLy = moment.defineLocale('ar-ly', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return arLy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Morocco) [ar-ma]\n//! author : ElFadili Yassine : https://github.com/ElFadiliY\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var arMa = moment.defineLocale('ar-ma', {\n        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return arMa;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Palestine) [ar-ps]\n//! author : Majd Al-Shihabi : https://github.com/majdal\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        };\n\n    var arPs = moment.defineLocale('ar-ps', {\n        months: 'كانون الثاني_شباط_آذار_نيسان_أيّار_حزيران_تمّوز_آب_أيلول_تشري الأوّل_تشرين الثاني_كانون الأوّل'.split(\n            '_'\n        ),\n        monthsShort:\n            'ك٢_شباط_آذار_نيسان_أيّار_حزيران_تمّوز_آب_أيلول_ت١_ت٢_ك١'.split('_'),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .split('') // reversed since negative lookbehind not supported everywhere\n                .reverse()\n                .join('')\n                .replace(/[١٢](?![\\u062a\\u0643])/g, function (match) {\n                    return numberMap[match];\n                })\n                .split('')\n                .reverse()\n                .join('')\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return arPs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Saudi Arabia) [ar-sa]\n//! author : Suhail Alkowaileet : https://github.com/xsoh\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        };\n\n    var arSa = moment.defineLocale('ar-sa', {\n        months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return arSa;\n\n})));\n","//! moment.js locale configuration\n//! locale  :  Arabic (Tunisia) [ar-tn]\n//! author : Nader Toukabri : https://github.com/naderio\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var arTn = moment.defineLocale('ar-tn', {\n        months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return arTn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Azerbaijani [az]\n//! author : topchiyev : https://github.com/topchiyev\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        1: '-inci',\n        5: '-inci',\n        8: '-inci',\n        70: '-inci',\n        80: '-inci',\n        2: '-nci',\n        7: '-nci',\n        20: '-nci',\n        50: '-nci',\n        3: '-üncü',\n        4: '-üncü',\n        100: '-üncü',\n        6: '-ncı',\n        9: '-uncu',\n        10: '-uncu',\n        30: '-uncu',\n        60: '-ıncı',\n        90: '-ıncı',\n    };\n\n    var az = moment.defineLocale('az', {\n        months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n        weekdays:\n            'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split(\n                '_'\n            ),\n        weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n        weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün saat] LT',\n            nextDay: '[sabah saat] LT',\n            nextWeek: '[gələn həftə] dddd [saat] LT',\n            lastDay: '[dünən] LT',\n            lastWeek: '[keçən həftə] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s sonra',\n            past: '%s əvvəl',\n            s: 'bir neçə saniyə',\n            ss: '%d saniyə',\n            m: 'bir dəqiqə',\n            mm: '%d dəqiqə',\n            h: 'bir saat',\n            hh: '%d saat',\n            d: 'bir gün',\n            dd: '%d gün',\n            M: 'bir ay',\n            MM: '%d ay',\n            y: 'bir il',\n            yy: '%d il',\n        },\n        meridiemParse: /gecə|səhər|gündüz|axşam/,\n        isPM: function (input) {\n            return /^(gündüz|axşam)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'gecə';\n            } else if (hour < 12) {\n                return 'səhər';\n            } else if (hour < 17) {\n                return 'gündüz';\n            } else {\n                return 'axşam';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n        ordinal: function (number) {\n            if (number === 0) {\n                // special case for zero\n                return number + '-ıncı';\n            }\n            var a = number % 10,\n                b = (number % 100) - a,\n                c = number >= 100 ? 100 : null;\n            return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return az;\n\n})));\n","//! moment.js locale configuration\n//! locale : Belarusian [be]\n//! author : Dmitry Demidov : https://github.com/demidov91\n//! author: Praleska: http://praleska.pro/\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n              ? forms[1]\n              : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n            hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n            dd: 'дзень_дні_дзён',\n            MM: 'месяц_месяцы_месяцаў',\n            yy: 'год_гады_гадоў',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвіліна' : 'хвіліну';\n        } else if (key === 'h') {\n            return withoutSuffix ? 'гадзіна' : 'гадзіну';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n\n    var be = moment.defineLocale('be', {\n        months: {\n            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split(\n                '_'\n            ),\n            standalone:\n                'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split(\n                    '_'\n                ),\n        },\n        monthsShort:\n            'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n        weekdays: {\n            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split(\n                '_'\n            ),\n            standalone:\n                'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split(\n                    '_'\n                ),\n            isFormat: /\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/,\n        },\n        weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY г.',\n            LLL: 'D MMMM YYYY г., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY г., HH:mm',\n        },\n        calendar: {\n            sameDay: '[Сёння ў] LT',\n            nextDay: '[Заўтра ў] LT',\n            lastDay: '[Учора ў] LT',\n            nextWeek: function () {\n                return '[У] dddd [ў] LT';\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return '[У мінулую] dddd [ў] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                        return '[У мінулы] dddd [ў] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'праз %s',\n            past: '%s таму',\n            s: 'некалькі секунд',\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: relativeTimeWithPlural,\n            hh: relativeTimeWithPlural,\n            d: 'дзень',\n            dd: relativeTimeWithPlural,\n            M: 'месяц',\n            MM: relativeTimeWithPlural,\n            y: 'год',\n            yy: relativeTimeWithPlural,\n        },\n        meridiemParse: /ночы|раніцы|дня|вечара/,\n        isPM: function (input) {\n            return /^(дня|вечара)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночы';\n            } else if (hour < 12) {\n                return 'раніцы';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечара';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return (number % 10 === 2 || number % 10 === 3) &&\n                        number % 100 !== 12 &&\n                        number % 100 !== 13\n                        ? number + '-і'\n                        : number + '-ы';\n                case 'D':\n                    return number + '-га';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return be;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bulgarian [bg]\n//! author : Krasen Borisov : https://github.com/kraz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var bg = moment.defineLocale('bg', {\n        months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split(\n            '_'\n        ),\n        monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split(\n            '_'\n        ),\n        weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Днес в] LT',\n            nextDay: '[Утре в] LT',\n            nextWeek: 'dddd [в] LT',\n            lastDay: '[Вчера в] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Миналата] dddd [в] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Миналия] dddd [в] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'след %s',\n            past: 'преди %s',\n            s: 'няколко секунди',\n            ss: '%d секунди',\n            m: 'минута',\n            mm: '%d минути',\n            h: 'час',\n            hh: '%d часа',\n            d: 'ден',\n            dd: '%d дена',\n            w: 'седмица',\n            ww: '%d седмици',\n            M: 'месец',\n            MM: '%d месеца',\n            y: 'година',\n            yy: '%d години',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal: function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return bg;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bambara [bm]\n//! author : Estelle Comment : https://github.com/estellecomment\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n    // Language contact person : Abdoufata Kane : https://github.com/abdoufata\n\n\n    var bm = moment.defineLocale('bm', {\n        months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split(\n            '_'\n        ),\n        monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n        weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n        weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n        weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'MMMM [tile] D [san] YYYY',\n            LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n            LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n        },\n        calendar: {\n            sameDay: '[Bi lɛrɛ] LT',\n            nextDay: '[Sini lɛrɛ] LT',\n            nextWeek: 'dddd [don lɛrɛ] LT',\n            lastDay: '[Kunu lɛrɛ] LT',\n            lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s kɔnɔ',\n            past: 'a bɛ %s bɔ',\n            s: 'sanga dama dama',\n            ss: 'sekondi %d',\n            m: 'miniti kelen',\n            mm: 'miniti %d',\n            h: 'lɛrɛ kelen',\n            hh: 'lɛrɛ %d',\n            d: 'tile kelen',\n            dd: 'tile %d',\n            M: 'kalo kelen',\n            MM: 'kalo %d',\n            y: 'san kelen',\n            yy: 'san %d',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return bm;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bengali [bn]\n//! author : Kaushik Gandhi : https://github.com/kaushikgandhi\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '১',\n            2: '২',\n            3: '৩',\n            4: '৪',\n            5: '৫',\n            6: '৬',\n            7: '৭',\n            8: '৮',\n            9: '৯',\n            0: '০',\n        },\n        numberMap = {\n            '১': '1',\n            '২': '2',\n            '৩': '3',\n            '৪': '4',\n            '৫': '5',\n            '৬': '6',\n            '৭': '7',\n            '৮': '8',\n            '৯': '9',\n            '০': '0',\n        };\n\n    var bn = moment.defineLocale('bn', {\n        months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n            '_'\n        ),\n        monthsShort:\n            'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n                '_'\n            ),\n        weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n            '_'\n        ),\n        weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm সময়',\n            LTS: 'A h:mm:ss সময়',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm সময়',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n        },\n        calendar: {\n            sameDay: '[আজ] LT',\n            nextDay: '[আগামীকাল] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[গতকাল] LT',\n            lastWeek: '[গত] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s পরে',\n            past: '%s আগে',\n            s: 'কয়েক সেকেন্ড',\n            ss: '%d সেকেন্ড',\n            m: 'এক মিনিট',\n            mm: '%d মিনিট',\n            h: 'এক ঘন্টা',\n            hh: '%d ঘন্টা',\n            d: 'এক দিন',\n            dd: '%d দিন',\n            M: 'এক মাস',\n            MM: '%d মাস',\n            y: 'এক বছর',\n            yy: '%d বছর',\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'রাত' && hour >= 4) ||\n                (meridiem === 'দুপুর' && hour < 5) ||\n                meridiem === 'বিকাল'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 10) {\n                return 'সকাল';\n            } else if (hour < 17) {\n                return 'দুপুর';\n            } else if (hour < 20) {\n                return 'বিকাল';\n            } else {\n                return 'রাত';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return bn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bengali (Bangladesh) [bn-bd]\n//! author : Asraf Hossain Patoary : https://github.com/ashwoolford\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '১',\n            2: '২',\n            3: '৩',\n            4: '৪',\n            5: '৫',\n            6: '৬',\n            7: '৭',\n            8: '৮',\n            9: '৯',\n            0: '০',\n        },\n        numberMap = {\n            '১': '1',\n            '২': '2',\n            '৩': '3',\n            '৪': '4',\n            '৫': '5',\n            '৬': '6',\n            '৭': '7',\n            '৮': '8',\n            '৯': '9',\n            '০': '0',\n        };\n\n    var bnBd = moment.defineLocale('bn-bd', {\n        months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n            '_'\n        ),\n        monthsShort:\n            'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n                '_'\n            ),\n        weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n            '_'\n        ),\n        weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm সময়',\n            LTS: 'A h:mm:ss সময়',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm সময়',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n        },\n        calendar: {\n            sameDay: '[আজ] LT',\n            nextDay: '[আগামীকাল] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[গতকাল] LT',\n            lastWeek: '[গত] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s পরে',\n            past: '%s আগে',\n            s: 'কয়েক সেকেন্ড',\n            ss: '%d সেকেন্ড',\n            m: 'এক মিনিট',\n            mm: '%d মিনিট',\n            h: 'এক ঘন্টা',\n            hh: '%d ঘন্টা',\n            d: 'এক দিন',\n            dd: '%d দিন',\n            M: 'এক মাস',\n            MM: '%d মাস',\n            y: 'এক বছর',\n            yy: '%d বছর',\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n\n        meridiemParse: /রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'রাত') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ভোর') {\n                return hour;\n            } else if (meridiem === 'সকাল') {\n                return hour;\n            } else if (meridiem === 'দুপুর') {\n                return hour >= 3 ? hour : hour + 12;\n            } else if (meridiem === 'বিকাল') {\n                return hour + 12;\n            } else if (meridiem === 'সন্ধ্যা') {\n                return hour + 12;\n            }\n        },\n\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 6) {\n                return 'ভোর';\n            } else if (hour < 12) {\n                return 'সকাল';\n            } else if (hour < 15) {\n                return 'দুপুর';\n            } else if (hour < 18) {\n                return 'বিকাল';\n            } else if (hour < 20) {\n                return 'সন্ধ্যা';\n            } else {\n                return 'রাত';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return bnBd;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tibetan [bo]\n//! author : Thupten N. Chakrishar : https://github.com/vajradog\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '༡',\n            2: '༢',\n            3: '༣',\n            4: '༤',\n            5: '༥',\n            6: '༦',\n            7: '༧',\n            8: '༨',\n            9: '༩',\n            0: '༠',\n        },\n        numberMap = {\n            '༡': '1',\n            '༢': '2',\n            '༣': '3',\n            '༤': '4',\n            '༥': '5',\n            '༦': '6',\n            '༧': '7',\n            '༨': '8',\n            '༩': '9',\n            '༠': '0',\n        };\n\n    var bo = moment.defineLocale('bo', {\n        months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split(\n                '_'\n            ),\n        monthsShortRegex: /^(ཟླ་\\d{1,2})/,\n        monthsParseExact: true,\n        weekdays:\n            'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split(\n                '_'\n            ),\n        weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split(\n            '_'\n        ),\n        weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[དི་རིང] LT',\n            nextDay: '[སང་ཉིན] LT',\n            nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',\n            lastDay: '[ཁ་སང] LT',\n            lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ལ་',\n            past: '%s སྔན་ལ',\n            s: 'ལམ་སང',\n            ss: '%d སྐར་ཆ།',\n            m: 'སྐར་མ་གཅིག',\n            mm: '%d སྐར་མ',\n            h: 'ཆུ་ཚོད་གཅིག',\n            hh: '%d ཆུ་ཚོད',\n            d: 'ཉིན་གཅིག',\n            dd: '%d ཉིན་',\n            M: 'ཟླ་བ་གཅིག',\n            MM: '%d ཟླ་བ',\n            y: 'ལོ་གཅིག',\n            yy: '%d ལོ',\n        },\n        preparse: function (string) {\n            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'མཚན་མོ' && hour >= 4) ||\n                (meridiem === 'ཉིན་གུང' && hour < 5) ||\n                meridiem === 'དགོང་དག'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'མཚན་མོ';\n            } else if (hour < 10) {\n                return 'ཞོགས་ཀས';\n            } else if (hour < 17) {\n                return 'ཉིན་གུང';\n            } else if (hour < 20) {\n                return 'དགོང་དག';\n            } else {\n                return 'མཚན་མོ';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return bo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Breton [br]\n//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function relativeTimeWithMutation(number, withoutSuffix, key) {\n        var format = {\n            mm: 'munutenn',\n            MM: 'miz',\n            dd: 'devezh',\n        };\n        return number + ' ' + mutation(format[key], number);\n    }\n    function specialMutationForYears(number) {\n        switch (lastNumber(number)) {\n            case 1:\n            case 3:\n            case 4:\n            case 5:\n            case 9:\n                return number + ' bloaz';\n            default:\n                return number + ' vloaz';\n        }\n    }\n    function lastNumber(number) {\n        if (number > 9) {\n            return lastNumber(number % 10);\n        }\n        return number;\n    }\n    function mutation(text, number) {\n        if (number === 2) {\n            return softMutation(text);\n        }\n        return text;\n    }\n    function softMutation(text) {\n        var mutationTable = {\n            m: 'v',\n            b: 'v',\n            d: 'z',\n        };\n        if (mutationTable[text.charAt(0)] === undefined) {\n            return text;\n        }\n        return mutationTable[text.charAt(0)] + text.substring(1);\n    }\n\n    var monthsParse = [\n            /^gen/i,\n            /^c[ʼ\\']hwe/i,\n            /^meu/i,\n            /^ebr/i,\n            /^mae/i,\n            /^(mez|eve)/i,\n            /^gou/i,\n            /^eos/i,\n            /^gwe/i,\n            /^her/i,\n            /^du/i,\n            /^ker/i,\n        ],\n        monthsRegex =\n            /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n        monthsStrictRegex =\n            /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,\n        monthsShortStrictRegex =\n            /^(gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n        fullWeekdaysParse = [\n            /^sul/i,\n            /^lun/i,\n            /^meurzh/i,\n            /^merc[ʼ\\']her/i,\n            /^yaou/i,\n            /^gwener/i,\n            /^sadorn/i,\n        ],\n        shortWeekdaysParse = [\n            /^Sul/i,\n            /^Lun/i,\n            /^Meu/i,\n            /^Mer/i,\n            /^Yao/i,\n            /^Gwe/i,\n            /^Sad/i,\n        ],\n        minWeekdaysParse = [\n            /^Su/i,\n            /^Lu/i,\n            /^Me([^r]|$)/i,\n            /^Mer/i,\n            /^Ya/i,\n            /^Gw/i,\n            /^Sa/i,\n        ];\n\n    var br = moment.defineLocale('br', {\n        months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(\n            '_'\n        ),\n        monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n        weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),\n        weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n        weekdaysParse: minWeekdaysParse,\n        fullWeekdaysParse: fullWeekdaysParse,\n        shortWeekdaysParse: shortWeekdaysParse,\n        minWeekdaysParse: minWeekdaysParse,\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: monthsStrictRegex,\n        monthsShortStrictRegex: monthsShortStrictRegex,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [a viz] MMMM YYYY',\n            LLL: 'D [a viz] MMMM YYYY HH:mm',\n            LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hiziv da] LT',\n            nextDay: '[Warcʼhoazh da] LT',\n            nextWeek: 'dddd [da] LT',\n            lastDay: '[Decʼh da] LT',\n            lastWeek: 'dddd [paset da] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'a-benn %s',\n            past: '%s ʼzo',\n            s: 'un nebeud segondennoù',\n            ss: '%d eilenn',\n            m: 'ur vunutenn',\n            mm: relativeTimeWithMutation,\n            h: 'un eur',\n            hh: '%d eur',\n            d: 'un devezh',\n            dd: relativeTimeWithMutation,\n            M: 'ur miz',\n            MM: relativeTimeWithMutation,\n            y: 'ur bloaz',\n            yy: specialMutationForYears,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'añ' : 'vet';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn\n        isPM: function (token) {\n            return token === 'g.m.';\n        },\n        meridiem: function (hour, minute, isLower) {\n            return hour < 12 ? 'a.m.' : 'g.m.';\n        },\n    });\n\n    return br;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bosnian [bs]\n//! author : Nedim Cholich : https://github.com/frontyard\n//! author : Rasid Redzic : https://github.com/rasidre\n//! based on (hr) translation by Bojan Marković\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        switch (key) {\n            case 'm':\n                return withoutSuffix\n                    ? 'jedna minuta'\n                    : isFuture\n                      ? 'jednu minutu'\n                      : 'jedne minute';\n        }\n    }\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jedan sat';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var bs = moment.defineLocale('bs', {\n        months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[jučer u] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'par sekundi',\n            ss: translate,\n            m: processRelativeTime,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: 'dan',\n            dd: translate,\n            M: 'mjesec',\n            MM: translate,\n            y: 'godinu',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return bs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Catalan [ca]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ca = moment.defineLocale('ca', {\n        months: {\n            standalone:\n                'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(\n                    '_'\n                ),\n            format: 'de gener_de febrer_de març_d’abril_de maig_de juny_de juliol_d’agost_de setembre_d’octubre_de novembre_de desembre'.split(\n                '_'\n            ),\n            isFormat: /D[oD]?(\\s)+MMMM/,\n        },\n        monthsShort:\n            'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(\n                '_'\n            ),\n        weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [de] YYYY',\n            ll: 'D MMM YYYY',\n            LLL: 'D MMMM [de] YYYY [a les] H:mm',\n            lll: 'D MMM YYYY, H:mm',\n            LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',\n            llll: 'ddd D MMM YYYY, H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            nextDay: function () {\n                return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            lastDay: function () {\n                return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [passat a ' +\n                    (this.hours() !== 1 ? 'les' : 'la') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: \"d'aquí %s\",\n            past: 'fa %s',\n            s: 'uns segons',\n            ss: '%d segons',\n            m: 'un minut',\n            mm: '%d minuts',\n            h: 'una hora',\n            hh: '%d hores',\n            d: 'un dia',\n            dd: '%d dies',\n            M: 'un mes',\n            MM: '%d mesos',\n            y: 'un any',\n            yy: '%d anys',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal: function (number, period) {\n            var output =\n                number === 1\n                    ? 'r'\n                    : number === 2\n                      ? 'n'\n                      : number === 3\n                        ? 'r'\n                        : number === 4\n                          ? 't'\n                          : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ca;\n\n})));\n","//! moment.js locale configuration\n//! locale : Czech [cs]\n//! author : petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = {\n            standalone:\n                'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split(\n                    '_'\n                ),\n            format: 'ledna_února_března_dubna_května_června_července_srpna_září_října_listopadu_prosince'.split(\n                '_'\n            ),\n            isFormat: /DD?[o.]?(\\[[^\\[\\]]*\\]|\\s)+MMMM/,\n        },\n        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),\n        monthsParse = [\n            /^led/i,\n            /^úno/i,\n            /^bře/i,\n            /^dub/i,\n            /^kvě/i,\n            /^(čvn|červen$|června)/i,\n            /^(čvc|červenec|července)/i,\n            /^srp/i,\n            /^zář/i,\n            /^říj/i,\n            /^lis/i,\n            /^pro/i,\n        ],\n        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n        monthsRegex =\n            /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;\n\n    function plural(n) {\n        return n > 1 && n < 5 && ~~(n / 10) !== 1;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's': // a few seconds / in a few seconds / a few seconds ago\n                return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekund');\n                } else {\n                    return result + 'sekundami';\n                }\n            case 'm': // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minuty' : 'minut');\n                } else {\n                    return result + 'minutami';\n                }\n            case 'h': // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodin');\n                } else {\n                    return result + 'hodinami';\n                }\n            case 'd': // a day / in a day / a day ago\n                return withoutSuffix || isFuture ? 'den' : 'dnem';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dny' : 'dní');\n                } else {\n                    return result + 'dny';\n                }\n            case 'M': // a month / in a month / a month ago\n                return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'měsíce' : 'měsíců');\n                } else {\n                    return result + 'měsíci';\n                }\n            case 'y': // a year / in a year / a year ago\n                return withoutSuffix || isFuture ? 'rok' : 'rokem';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'let');\n                } else {\n                    return result + 'lety';\n                }\n        }\n    }\n\n    var cs = moment.defineLocale('cs', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n        monthsStrictRegex:\n            /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,\n        monthsShortStrictRegex:\n            /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n        weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),\n        weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd D. MMMM YYYY H:mm',\n            l: 'D. M. YYYY',\n        },\n        calendar: {\n            sameDay: '[dnes v] LT',\n            nextDay: '[zítra v] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [v] LT';\n                    case 3:\n                        return '[ve středu v] LT';\n                    case 4:\n                        return '[ve čtvrtek v] LT';\n                    case 5:\n                        return '[v pátek v] LT';\n                    case 6:\n                        return '[v sobotu v] LT';\n                }\n            },\n            lastDay: '[včera v] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulou neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[minulé] dddd [v] LT';\n                    case 3:\n                        return '[minulou středu v] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [v] LT';\n                    case 6:\n                        return '[minulou sobotu v] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'před %s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return cs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chuvash [cv]\n//! author : Anatoly Mironov : https://github.com/mirontoli\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var cv = moment.defineLocale('cv', {\n        months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split(\n            '_'\n        ),\n        monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n        weekdays:\n            'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split(\n                '_'\n            ),\n        weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n        weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n            LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n            LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n        },\n        calendar: {\n            sameDay: '[Паян] LT [сехетре]',\n            nextDay: '[Ыран] LT [сехетре]',\n            lastDay: '[Ӗнер] LT [сехетре]',\n            nextWeek: '[Ҫитес] dddd LT [сехетре]',\n            lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (output) {\n                var affix = /сехет$/i.exec(output)\n                    ? 'рен'\n                    : /ҫул$/i.exec(output)\n                      ? 'тан'\n                      : 'ран';\n                return output + affix;\n            },\n            past: '%s каялла',\n            s: 'пӗр-ик ҫеккунт',\n            ss: '%d ҫеккунт',\n            m: 'пӗр минут',\n            mm: '%d минут',\n            h: 'пӗр сехет',\n            hh: '%d сехет',\n            d: 'пӗр кун',\n            dd: '%d кун',\n            M: 'пӗр уйӑх',\n            MM: '%d уйӑх',\n            y: 'пӗр ҫул',\n            yy: '%d ҫул',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n        ordinal: '%d-мӗш',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return cv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Welsh [cy]\n//! author : Robert Allen : https://github.com/robgallen\n//! author : https://github.com/ryangreaves\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var cy = moment.defineLocale('cy', {\n        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(\n            '_'\n        ),\n        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(\n            '_'\n        ),\n        weekdays:\n            'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(\n                '_'\n            ),\n        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n        weekdaysParseExact: true,\n        // time formats are the same as en-gb\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Heddiw am] LT',\n            nextDay: '[Yfory am] LT',\n            nextWeek: 'dddd [am] LT',\n            lastDay: '[Ddoe am] LT',\n            lastWeek: 'dddd [diwethaf am] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'mewn %s',\n            past: '%s yn ôl',\n            s: 'ychydig eiliadau',\n            ss: '%d eiliad',\n            m: 'munud',\n            mm: '%d munud',\n            h: 'awr',\n            hh: '%d awr',\n            d: 'diwrnod',\n            dd: '%d diwrnod',\n            M: 'mis',\n            MM: '%d mis',\n            y: 'blwyddyn',\n            yy: '%d flynedd',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n        ordinal: function (number) {\n            var b = number,\n                output = '',\n                lookup = [\n                    '',\n                    'af',\n                    'il',\n                    'ydd',\n                    'ydd',\n                    'ed',\n                    'ed',\n                    'ed',\n                    'fed',\n                    'fed',\n                    'fed', // 1af to 10fed\n                    'eg',\n                    'fed',\n                    'eg',\n                    'eg',\n                    'fed',\n                    'eg',\n                    'eg',\n                    'fed',\n                    'eg',\n                    'fed', // 11eg to 20fed\n                ];\n            if (b > 20) {\n                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n                    output = 'fed'; // not 30ain, 70ain or 90ain\n                } else {\n                    output = 'ain';\n                }\n            } else if (b > 0) {\n                output = lookup[b];\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return cy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Danish [da]\n//! author : Ulrik Nielsen : https://github.com/mrbase\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var da = moment.defineLocale('da', {\n        months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'på dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[i] dddd[s kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s siden',\n            s: 'få sekunder',\n            ss: '%d sekunder',\n            m: 'et minut',\n            mm: '%d minutter',\n            h: 'en time',\n            hh: '%d timer',\n            d: 'en dag',\n            dd: '%d dage',\n            M: 'en måned',\n            MM: '%d måneder',\n            y: 'et år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return da;\n\n})));\n","//! moment.js locale configuration\n//! locale : German [de]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsParse = [\n            /^jan/i,\n            /^feb/i,\n            /^mär/i,\n            /^apr/i,\n            /^mai/i,\n            /^jun/i,\n            /^jul/i,\n            /^aug/i,\n            /^sep/i,\n            /^okt/i,\n            /^nov/i,\n            /^dez/i,\n        ],\n        monthsRegex =\n            /^(Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember|Jan\\.?|Feb\\.?|Mär\\.?|Apr\\.?|Jun\\.?|Jul\\.?|Aug\\.?|Sep\\.?|Okt\\.?|Nov\\.?|Dez\\.?)/i;\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var de = moment.defineLocale('de', {\n        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)/i,\n        monthsShortStrictRegex:\n            /^(Jan\\.?|Feb\\.?|März|Mär\\.?|Apr\\.?|Mai|Juni|Jun\\.?|Juli|Jul\\.?|Aug\\.?|Sep\\.?|Okt\\.?|Nov\\.?|Dez\\.?)/i,\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return de;\n\n})));\n","//! moment.js locale configuration\n//! locale : German (Austria) [de-at]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Martin Groller : https://github.com/MadMG\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsParse = [\n            /^jän/i,\n            /^feb/i,\n            /^mär/i,\n            /^apr/i,\n            /^mai/i,\n            /^jun/i,\n            /^jul/i,\n            /^aug/i,\n            /^sep/i,\n            /^okt/i,\n            /^nov/i,\n            /^dez/i,\n        ],\n        monthsRegex =\n            /^(Jänner|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember|Jän\\.?|Feb\\.?|Mär\\.?|Apr\\.?|Jun\\.?|Jul\\.?|Aug\\.?|Sep\\.?|Okt\\.?|Nov\\.?|Dez\\.?)/i;\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deAt = moment.defineLocale('de-at', {\n        months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(Jänner|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)/i,\n        monthsShortStrictRegex:\n            /^(Jän\\.?|Feb\\.?|März|Mär\\.?|Apr\\.?|Mai|Juni|Jun\\.?|Juli|Jul\\.?|Aug\\.?|Sep\\.?|Okt\\.?|Nov\\.?|Dez\\.?)/i,\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return deAt;\n\n})));\n","//! moment.js locale configuration\n//! locale : German (Switzerland) [de-ch]\n//! author : sschueller : https://github.com/sschueller\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsParse = [\n            /^jan/i,\n            /^feb/i,\n            /^mär/i,\n            /^apr/i,\n            /^mai/i,\n            /^jun/i,\n            /^jul/i,\n            /^aug/i,\n            /^sep/i,\n            /^okt/i,\n            /^nov/i,\n            /^dez/i,\n        ],\n        monthsRegex =\n            /^(Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember|Jan\\.?|Feb\\.?|Mär\\.?|Apr\\.?|Jun\\.?|Jul\\.?|Aug\\.?|Sep\\.?|Okt\\.?|Nov\\.?|Dez\\.?)/i;\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deCh = moment.defineLocale('de-ch', {\n        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)/i,\n        monthsShortStrictRegex:\n            /^(Jan\\.?|Feb\\.?|März|Mär\\.?|Apr\\.?|Mai|Juni|Jun\\.?|Juli|Jul\\.?|Aug\\.?|Sep\\.?|Okt\\.?|Nov\\.?|Dez\\.?)/i,\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return deCh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Maldivian [dv]\n//! author : Jawish Hameed : https://github.com/jawish\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'ޖެނުއަރީ',\n            'ފެބްރުއަރީ',\n            'މާރިޗު',\n            'އޭޕްރީލު',\n            'މޭ',\n            'ޖޫން',\n            'ޖުލައި',\n            'އޯގަސްޓު',\n            'ސެޕްޓެމްބަރު',\n            'އޮކްޓޯބަރު',\n            'ނޮވެމްބަރު',\n            'ޑިސެމްބަރު',\n        ],\n        weekdays = [\n            'އާދިއްތަ',\n            'ހޯމަ',\n            'އަންގާރަ',\n            'ބުދަ',\n            'ބުރާސްފަތި',\n            'ހުކުރު',\n            'ހޮނިހިރު',\n        ];\n\n    var dv = moment.defineLocale('dv', {\n        months: months,\n        monthsShort: months,\n        weekdays: weekdays,\n        weekdaysShort: weekdays,\n        weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/M/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /މކ|މފ/,\n        isPM: function (input) {\n            return 'މފ' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'މކ';\n            } else {\n                return 'މފ';\n            }\n        },\n        calendar: {\n            sameDay: '[މިއަދު] LT',\n            nextDay: '[މާދަމާ] LT',\n            nextWeek: 'dddd LT',\n            lastDay: '[އިއްޔެ] LT',\n            lastWeek: '[ފާއިތުވި] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ތެރޭގައި %s',\n            past: 'ކުރިން %s',\n            s: 'ސިކުންތުކޮޅެއް',\n            ss: 'd% ސިކުންތު',\n            m: 'މިނިޓެއް',\n            mm: 'މިނިޓު %d',\n            h: 'ގަޑިއިރެއް',\n            hh: 'ގަޑިއިރު %d',\n            d: 'ދުވަހެއް',\n            dd: 'ދުވަސް %d',\n            M: 'މަހެއް',\n            MM: 'މަސް %d',\n            y: 'އަހަރެއް',\n            yy: 'އަހަރު %d',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 7, // Sunday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return dv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Greek [el]\n//! author : Aggelos Karalias : https://github.com/mehiel\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    var el = moment.defineLocale('el', {\n        monthsNominativeEl:\n            'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split(\n                '_'\n            ),\n        monthsGenitiveEl:\n            'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split(\n                '_'\n            ),\n        months: function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return this._monthsNominativeEl;\n            } else if (\n                typeof format === 'string' &&\n                /D/.test(format.substring(0, format.indexOf('MMMM')))\n            ) {\n                // if there is a day number before 'MMMM'\n                return this._monthsGenitiveEl[momentToFormat.month()];\n            } else {\n                return this._monthsNominativeEl[momentToFormat.month()];\n            }\n        },\n        monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n        weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split(\n            '_'\n        ),\n        weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n        weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'μμ' : 'ΜΜ';\n            } else {\n                return isLower ? 'πμ' : 'ΠΜ';\n            }\n        },\n        isPM: function (input) {\n            return (input + '').toLowerCase()[0] === 'μ';\n        },\n        meridiemParse: /[ΠΜ]\\.?Μ?\\.?/i,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendarEl: {\n            sameDay: '[Σήμερα {}] LT',\n            nextDay: '[Αύριο {}] LT',\n            nextWeek: 'dddd [{}] LT',\n            lastDay: '[Χθες {}] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 6:\n                        return '[το προηγούμενο] dddd [{}] LT';\n                    default:\n                        return '[την προηγούμενη] dddd [{}] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        calendar: function (key, mom) {\n            var output = this._calendarEl[key],\n                hours = mom && mom.hours();\n            if (isFunction(output)) {\n                output = output.apply(mom);\n            }\n            return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις');\n        },\n        relativeTime: {\n            future: 'σε %s',\n            past: '%s πριν',\n            s: 'λίγα δευτερόλεπτα',\n            ss: '%d δευτερόλεπτα',\n            m: 'ένα λεπτό',\n            mm: '%d λεπτά',\n            h: 'μία ώρα',\n            hh: '%d ώρες',\n            d: 'μία μέρα',\n            dd: '%d μέρες',\n            M: 'ένας μήνας',\n            MM: '%d μήνες',\n            y: 'ένας χρόνος',\n            yy: '%d χρόνια',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}η/,\n        ordinal: '%dη',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4st is the first week of the year.\n        },\n    });\n\n    return el;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Australia) [en-au]\n//! author : Jared Morse : https://github.com/jarcoal\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enAu = moment.defineLocale('en-au', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enAu;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Canada) [en-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enCa = moment.defineLocale('en-ca', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'YYYY-MM-DD',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY h:mm A',\n            LLLL: 'dddd, MMMM D, YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n    });\n\n    return enCa;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (United Kingdom) [en-gb]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enGb = moment.defineLocale('en-gb', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enGb;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Ireland) [en-ie]\n//! author : Chris Cartlidge : https://github.com/chriscartlidge\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enIe = moment.defineLocale('en-ie', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enIe;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Israel) [en-il]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enIl = moment.defineLocale('en-il', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n    });\n\n    return enIl;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (India) [en-in]\n//! author : Jatin Agrawal : https://github.com/jatinag22\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enIn = moment.defineLocale('en-in', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return enIn;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (New Zealand) [en-nz]\n//! author : Luke McGregor : https://github.com/lukemcgregor\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enNz = moment.defineLocale('en-nz', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enNz;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Singapore) [en-sg]\n//! author : Matthew Castrillon-Madrigal : https://github.com/techdimension\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enSg = moment.defineLocale('en-sg', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enSg;\n\n})));\n","//! moment.js locale configuration\n//! locale : Esperanto [eo]\n//! author : Colin Dean : https://github.com/colindean\n//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia\n//! comment : miestasmia corrected the translation by colindean\n//! comment : Vivakvo corrected the translation by colindean and miestasmia\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var eo = moment.defineLocale('eo', {\n        months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'),\n        weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n        weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: '[la] D[-an de] MMMM, YYYY',\n            LLL: '[la] D[-an de] MMMM, YYYY HH:mm',\n            LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',\n            llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm',\n        },\n        meridiemParse: /[ap]\\.t\\.m/i,\n        isPM: function (input) {\n            return input.charAt(0).toLowerCase() === 'p';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'p.t.m.' : 'P.T.M.';\n            } else {\n                return isLower ? 'a.t.m.' : 'A.T.M.';\n            }\n        },\n        calendar: {\n            sameDay: '[Hodiaŭ je] LT',\n            nextDay: '[Morgaŭ je] LT',\n            nextWeek: 'dddd[n je] LT',\n            lastDay: '[Hieraŭ je] LT',\n            lastWeek: '[pasintan] dddd[n je] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'post %s',\n            past: 'antaŭ %s',\n            s: 'kelkaj sekundoj',\n            ss: '%d sekundoj',\n            m: 'unu minuto',\n            mm: '%d minutoj',\n            h: 'unu horo',\n            hh: '%d horoj',\n            d: 'unu tago', //ne 'diurno', ĉar estas uzita por proksimumo\n            dd: '%d tagoj',\n            M: 'unu monato',\n            MM: '%d monatoj',\n            y: 'unu jaro',\n            yy: '%d jaroj',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}a/,\n        ordinal: '%da',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return eo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish [es]\n//! author : Julio Napurí : https://github.com/julionc\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var es = moment.defineLocale('es', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        invalidDate: 'Fecha inválida',\n    });\n\n    return es;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish (Dominican Republic) [es-do]\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esDo = moment.defineLocale('es-do', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return esDo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish (Mexico) [es-mx]\n//! author : JC Franco : https://github.com/jcfranco\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esMx = moment.defineLocale('es-mx', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        invalidDate: 'Fecha inválida',\n    });\n\n    return esMx;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish (United States) [es-us]\n//! author : bustta : https://github.com/bustta\n//! author : chrisrodz : https://github.com/chrisrodz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esUs = moment.defineLocale('es-us', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'MM/DD/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return esUs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Estonian [et]\n//! author : Henry Kehlmann : https://github.com/madhenry\n//! improvements : Illimar Tambek : https://github.com/ragulka\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n            ss: [number + 'sekundi', number + 'sekundit'],\n            m: ['ühe minuti', 'üks minut'],\n            mm: [number + ' minuti', number + ' minutit'],\n            h: ['ühe tunni', 'tund aega', 'üks tund'],\n            hh: [number + ' tunni', number + ' tundi'],\n            d: ['ühe päeva', 'üks päev'],\n            M: ['kuu aja', 'kuu aega', 'üks kuu'],\n            MM: [number + ' kuu', number + ' kuud'],\n            y: ['ühe aasta', 'aasta', 'üks aasta'],\n            yy: [number + ' aasta', number + ' aastat'],\n        };\n        if (withoutSuffix) {\n            return format[key][2] ? format[key][2] : format[key][1];\n        }\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var et = moment.defineLocale('et', {\n        months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(\n            '_'\n        ),\n        monthsShort:\n            'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n        weekdays:\n            'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split(\n                '_'\n            ),\n        weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),\n        weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Täna,] LT',\n            nextDay: '[Homme,] LT',\n            nextWeek: '[Järgmine] dddd LT',\n            lastDay: '[Eile,] LT',\n            lastWeek: '[Eelmine] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s pärast',\n            past: '%s tagasi',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: '%d päeva',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return et;\n\n})));\n","//! moment.js locale configuration\n//! locale : Basque [eu]\n//! author : Eneko Illarramendi : https://github.com/eillarra\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var eu = moment.defineLocale('eu', {\n        months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(\n            '_'\n        ),\n        monthsShort:\n            'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(\n                '_'\n            ),\n        weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),\n        weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY[ko] MMMM[ren] D[a]',\n            LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n            LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n            l: 'YYYY-M-D',\n            ll: 'YYYY[ko] MMM D[a]',\n            lll: 'YYYY[ko] MMM D[a] HH:mm',\n            llll: 'ddd, YYYY[ko] MMM D[a] HH:mm',\n        },\n        calendar: {\n            sameDay: '[gaur] LT[etan]',\n            nextDay: '[bihar] LT[etan]',\n            nextWeek: 'dddd LT[etan]',\n            lastDay: '[atzo] LT[etan]',\n            lastWeek: '[aurreko] dddd LT[etan]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s barru',\n            past: 'duela %s',\n            s: 'segundo batzuk',\n            ss: '%d segundo',\n            m: 'minutu bat',\n            mm: '%d minutu',\n            h: 'ordu bat',\n            hh: '%d ordu',\n            d: 'egun bat',\n            dd: '%d egun',\n            M: 'hilabete bat',\n            MM: '%d hilabete',\n            y: 'urte bat',\n            yy: '%d urte',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return eu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Persian [fa]\n//! author : Ebrahim Byagowi : https://github.com/ebraminio\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '۱',\n            2: '۲',\n            3: '۳',\n            4: '۴',\n            5: '۵',\n            6: '۶',\n            7: '۷',\n            8: '۸',\n            9: '۹',\n            0: '۰',\n        },\n        numberMap = {\n            '۱': '1',\n            '۲': '2',\n            '۳': '3',\n            '۴': '4',\n            '۵': '5',\n            '۶': '6',\n            '۷': '7',\n            '۸': '8',\n            '۹': '9',\n            '۰': '0',\n        };\n\n    var fa = moment.defineLocale('fa', {\n        months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n                '_'\n            ),\n        weekdays:\n            'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n                '_'\n            ),\n        weekdaysShort:\n            'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n                '_'\n            ),\n        weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /قبل از ظهر|بعد از ظهر/,\n        isPM: function (input) {\n            return /بعد از ظهر/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'قبل از ظهر';\n            } else {\n                return 'بعد از ظهر';\n            }\n        },\n        calendar: {\n            sameDay: '[امروز ساعت] LT',\n            nextDay: '[فردا ساعت] LT',\n            nextWeek: 'dddd [ساعت] LT',\n            lastDay: '[دیروز ساعت] LT',\n            lastWeek: 'dddd [پیش] [ساعت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'در %s',\n            past: '%s پیش',\n            s: 'چند ثانیه',\n            ss: '%d ثانیه',\n            m: 'یک دقیقه',\n            mm: '%d دقیقه',\n            h: 'یک ساعت',\n            hh: '%d ساعت',\n            d: 'یک روز',\n            dd: '%d روز',\n            M: 'یک ماه',\n            MM: '%d ماه',\n            y: 'یک سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[۰-۹]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}م/,\n        ordinal: '%dم',\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return fa;\n\n})));\n","//! moment.js locale configuration\n//! locale : Finnish [fi]\n//! author : Tarmo Aidantausta : https://github.com/bleadof\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var numbersPast =\n            'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(\n                ' '\n            ),\n        numbersFuture = [\n            'nolla',\n            'yhden',\n            'kahden',\n            'kolmen',\n            'neljän',\n            'viiden',\n            'kuuden',\n            numbersPast[7],\n            numbersPast[8],\n            numbersPast[9],\n        ];\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = '';\n        switch (key) {\n            case 's':\n                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n            case 'ss':\n                result = isFuture ? 'sekunnin' : 'sekuntia';\n                break;\n            case 'm':\n                return isFuture ? 'minuutin' : 'minuutti';\n            case 'mm':\n                result = isFuture ? 'minuutin' : 'minuuttia';\n                break;\n            case 'h':\n                return isFuture ? 'tunnin' : 'tunti';\n            case 'hh':\n                result = isFuture ? 'tunnin' : 'tuntia';\n                break;\n            case 'd':\n                return isFuture ? 'päivän' : 'päivä';\n            case 'dd':\n                result = isFuture ? 'päivän' : 'päivää';\n                break;\n            case 'M':\n                return isFuture ? 'kuukauden' : 'kuukausi';\n            case 'MM':\n                result = isFuture ? 'kuukauden' : 'kuukautta';\n                break;\n            case 'y':\n                return isFuture ? 'vuoden' : 'vuosi';\n            case 'yy':\n                result = isFuture ? 'vuoden' : 'vuotta';\n                break;\n        }\n        result = verbalNumber(number, isFuture) + ' ' + result;\n        return result;\n    }\n    function verbalNumber(number, isFuture) {\n        return number < 10\n            ? isFuture\n                ? numbersFuture[number]\n                : numbersPast[number]\n            : number;\n    }\n\n    var fi = moment.defineLocale('fi', {\n        months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split(\n            '_'\n        ),\n        monthsShort:\n            'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split(\n                '_'\n            ),\n        weekdays:\n            'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split(\n                '_'\n            ),\n        weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),\n        weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD.MM.YYYY',\n            LL: 'Do MMMM[ta] YYYY',\n            LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',\n            LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n            l: 'D.M.YYYY',\n            ll: 'Do MMM YYYY',\n            lll: 'Do MMM YYYY, [klo] HH.mm',\n            llll: 'ddd, Do MMM YYYY, [klo] HH.mm',\n        },\n        calendar: {\n            sameDay: '[tänään] [klo] LT',\n            nextDay: '[huomenna] [klo] LT',\n            nextWeek: 'dddd [klo] LT',\n            lastDay: '[eilen] [klo] LT',\n            lastWeek: '[viime] dddd[na] [klo] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s päästä',\n            past: '%s sitten',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Filipino [fil]\n//! author : Dan Hagman : https://github.com/hagmandan\n//! author : Matthew Co : https://github.com/matthewdeeco\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var fil = moment.defineLocale('fil', {\n        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n            '_'\n        ),\n        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n            '_'\n        ),\n        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'MM/D/YYYY',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY HH:mm',\n            LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'sa loob ng %s',\n            past: '%s ang nakalipas',\n            s: 'ilang segundo',\n            ss: '%d segundo',\n            m: 'isang minuto',\n            mm: '%d minuto',\n            h: 'isang oras',\n            hh: '%d oras',\n            d: 'isang araw',\n            dd: '%d araw',\n            M: 'isang buwan',\n            MM: '%d buwan',\n            y: 'isang taon',\n            yy: '%d taon',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fil;\n\n})));\n","//! moment.js locale configuration\n//! locale : Faroese [fo]\n//! author : Ragnar Johannesen : https://github.com/ragnar123\n//! author : Kristian Sakarisson : https://github.com/sakarisson\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var fo = moment.defineLocale('fo', {\n        months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays:\n            'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split(\n                '_'\n            ),\n        weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n        weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D. MMMM, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Í dag kl.] LT',\n            nextDay: '[Í morgin kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[Í gjár kl.] LT',\n            lastWeek: '[síðstu] dddd [kl] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'um %s',\n            past: '%s síðani',\n            s: 'fá sekund',\n            ss: '%d sekundir',\n            m: 'ein minuttur',\n            mm: '%d minuttir',\n            h: 'ein tími',\n            hh: '%d tímar',\n            d: 'ein dagur',\n            dd: '%d dagar',\n            M: 'ein mánaður',\n            MM: '%d mánaðir',\n            y: 'eitt ár',\n            yy: '%d ár',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fo;\n\n})));\n","//! moment.js locale configuration\n//! locale : French [fr]\n//! author : John Fischer : https://github.com/jfroffice\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsStrictRegex =\n            /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n        monthsShortStrictRegex =\n            /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?)/i,\n        monthsRegex =\n            /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n        monthsParse = [\n            /^janv/i,\n            /^févr/i,\n            /^mars/i,\n            /^avr/i,\n            /^mai/i,\n            /^juin/i,\n            /^juil/i,\n            /^août/i,\n            /^sept/i,\n            /^oct/i,\n            /^nov/i,\n            /^déc/i,\n        ];\n\n    var fr = moment.defineLocale('fr', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: monthsStrictRegex,\n        monthsShortStrictRegex: monthsShortStrictRegex,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            w: 'une semaine',\n            ww: '%d semaines',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // TODO: Return 'e' when day of month > 1. Move this case inside\n                // block for masculine words below.\n                // See https://github.com/moment/moment/issues/3375\n                case 'D':\n                    return number + (number === 1 ? 'er' : '');\n\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fr;\n\n})));\n","//! moment.js locale configuration\n//! locale : French (Canada) [fr-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var frCa = moment.defineLocale('fr-ca', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n    });\n\n    return frCa;\n\n})));\n","//! moment.js locale configuration\n//! locale : French (Switzerland) [fr-ch]\n//! author : Gaspard Bucher : https://github.com/gaspard\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var frCh = moment.defineLocale('fr-ch', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return frCh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Frisian [fy]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots =\n            'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n        monthsShortWithoutDots =\n            'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\n    var fy = moment.defineLocale('fy', {\n        months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n        monthsParseExact: true,\n        weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split(\n            '_'\n        ),\n        weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),\n        weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[hjoed om] LT',\n            nextDay: '[moarn om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[juster om] LT',\n            lastWeek: '[ôfrûne] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'oer %s',\n            past: '%s lyn',\n            s: 'in pear sekonden',\n            ss: '%d sekonden',\n            m: 'ien minút',\n            mm: '%d minuten',\n            h: 'ien oere',\n            hh: '%d oeren',\n            d: 'ien dei',\n            dd: '%d dagen',\n            M: 'ien moanne',\n            MM: '%d moannen',\n            y: 'ien jier',\n            yy: '%d jierren',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Irish or Irish Gaelic [ga]\n//! author : André Silva : https://github.com/askpt\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'Eanáir',\n            'Feabhra',\n            'Márta',\n            'Aibreán',\n            'Bealtaine',\n            'Meitheamh',\n            'Iúil',\n            'Lúnasa',\n            'Meán Fómhair',\n            'Deireadh Fómhair',\n            'Samhain',\n            'Nollaig',\n        ],\n        monthsShort = [\n            'Ean',\n            'Feabh',\n            'Márt',\n            'Aib',\n            'Beal',\n            'Meith',\n            'Iúil',\n            'Lún',\n            'M.F.',\n            'D.F.',\n            'Samh',\n            'Noll',\n        ],\n        weekdays = [\n            'Dé Domhnaigh',\n            'Dé Luain',\n            'Dé Máirt',\n            'Dé Céadaoin',\n            'Déardaoin',\n            'Dé hAoine',\n            'Dé Sathairn',\n        ],\n        weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'],\n        weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa'];\n\n    var ga = moment.defineLocale('ga', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsParseExact: true,\n        weekdays: weekdays,\n        weekdaysShort: weekdaysShort,\n        weekdaysMin: weekdaysMin,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Inniu ag] LT',\n            nextDay: '[Amárach ag] LT',\n            nextWeek: 'dddd [ag] LT',\n            lastDay: '[Inné ag] LT',\n            lastWeek: 'dddd [seo caite] [ag] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'i %s',\n            past: '%s ó shin',\n            s: 'cúpla soicind',\n            ss: '%d soicind',\n            m: 'nóiméad',\n            mm: '%d nóiméad',\n            h: 'uair an chloig',\n            hh: '%d uair an chloig',\n            d: 'lá',\n            dd: '%d lá',\n            M: 'mí',\n            MM: '%d míonna',\n            y: 'bliain',\n            yy: '%d bliain',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ga;\n\n})));\n","//! moment.js locale configuration\n//! locale : Scottish Gaelic [gd]\n//! author : Jon Ashdown : https://github.com/jonashdown\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'Am Faoilleach',\n            'An Gearran',\n            'Am Màrt',\n            'An Giblean',\n            'An Cèitean',\n            'An t-Ògmhios',\n            'An t-Iuchar',\n            'An Lùnastal',\n            'An t-Sultain',\n            'An Dàmhair',\n            'An t-Samhain',\n            'An Dùbhlachd',\n        ],\n        monthsShort = [\n            'Faoi',\n            'Gear',\n            'Màrt',\n            'Gibl',\n            'Cèit',\n            'Ògmh',\n            'Iuch',\n            'Lùn',\n            'Sult',\n            'Dàmh',\n            'Samh',\n            'Dùbh',\n        ],\n        weekdays = [\n            'Didòmhnaich',\n            'Diluain',\n            'Dimàirt',\n            'Diciadain',\n            'Diardaoin',\n            'Dihaoine',\n            'Disathairne',\n        ],\n        weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],\n        weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n    var gd = moment.defineLocale('gd', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsParseExact: true,\n        weekdays: weekdays,\n        weekdaysShort: weekdaysShort,\n        weekdaysMin: weekdaysMin,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[An-diugh aig] LT',\n            nextDay: '[A-màireach aig] LT',\n            nextWeek: 'dddd [aig] LT',\n            lastDay: '[An-dè aig] LT',\n            lastWeek: 'dddd [seo chaidh] [aig] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ann an %s',\n            past: 'bho chionn %s',\n            s: 'beagan diogan',\n            ss: '%d diogan',\n            m: 'mionaid',\n            mm: '%d mionaidean',\n            h: 'uair',\n            hh: '%d uairean',\n            d: 'latha',\n            dd: '%d latha',\n            M: 'mìos',\n            MM: '%d mìosan',\n            y: 'bliadhna',\n            yy: '%d bliadhna',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return gd;\n\n})));\n","//! moment.js locale configuration\n//! locale : Galician [gl]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var gl = moment.defineLocale('gl', {\n        months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split(\n            '_'\n        ),\n        monthsShort:\n            'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';\n            },\n            lastDay: function () {\n                return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (str) {\n                if (str.indexOf('un') === 0) {\n                    return 'n' + str;\n                }\n                return 'en ' + str;\n            },\n            past: 'hai %s',\n            s: 'uns segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'unha hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return gl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Konkani Devanagari script [gom-deva]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'],\n            ss: [number + ' सॅकंडांनी', number + ' सॅकंड'],\n            m: ['एका मिणटान', 'एक मिनूट'],\n            mm: [number + ' मिणटांनी', number + ' मिणटां'],\n            h: ['एका वरान', 'एक वर'],\n            hh: [number + ' वरांनी', number + ' वरां'],\n            d: ['एका दिसान', 'एक दीस'],\n            dd: [number + ' दिसांनी', number + ' दीस'],\n            M: ['एका म्हयन्यान', 'एक म्हयनो'],\n            MM: [number + ' म्हयन्यानी', number + ' म्हयने'],\n            y: ['एका वर्सान', 'एक वर्स'],\n            yy: [number + ' वर्सांनी', number + ' वर्सां'],\n        };\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var gomDeva = moment.defineLocale('gom-deva', {\n        months: {\n            standalone:\n                'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n                    '_'\n                ),\n            format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split(\n                '_'\n            ),\n            isFormat: /MMMM(\\s)+D[oD]?/,\n        },\n        monthsShort:\n            'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'),\n        weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'),\n        weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'A h:mm [वाजतां]',\n            LTS: 'A h:mm:ss [वाजतां]',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY A h:mm [वाजतां]',\n            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]',\n            llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]',\n        },\n        calendar: {\n            sameDay: '[आयज] LT',\n            nextDay: '[फाल्यां] LT',\n            nextWeek: '[फुडलो] dddd[,] LT',\n            lastDay: '[काल] LT',\n            lastWeek: '[फाटलो] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s',\n            past: '%s आदीं',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(वेर)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // the ordinal 'वेर' only applies to day of the month\n                case 'D':\n                    return number + 'वेर';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week\n            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n        },\n        meridiemParse: /राती|सकाळीं|दनपारां|सांजे/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राती') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सकाळीं') {\n                return hour;\n            } else if (meridiem === 'दनपारां') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'सांजे') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'राती';\n            } else if (hour < 12) {\n                return 'सकाळीं';\n            } else if (hour < 16) {\n                return 'दनपारां';\n            } else if (hour < 20) {\n                return 'सांजे';\n            } else {\n                return 'राती';\n            }\n        },\n    });\n\n    return gomDeva;\n\n})));\n","//! moment.js locale configuration\n//! locale : Konkani Latin script [gom-latn]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['thoddea sekondamni', 'thodde sekond'],\n            ss: [number + ' sekondamni', number + ' sekond'],\n            m: ['eka mintan', 'ek minut'],\n            mm: [number + ' mintamni', number + ' mintam'],\n            h: ['eka voran', 'ek vor'],\n            hh: [number + ' voramni', number + ' voram'],\n            d: ['eka disan', 'ek dis'],\n            dd: [number + ' disamni', number + ' dis'],\n            M: ['eka mhoinean', 'ek mhoino'],\n            MM: [number + ' mhoineamni', number + ' mhoine'],\n            y: ['eka vorsan', 'ek voros'],\n            yy: [number + ' vorsamni', number + ' vorsam'],\n        };\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var gomLatn = moment.defineLocale('gom-latn', {\n        months: {\n            standalone:\n                'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split(\n                    '_'\n                ),\n            format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split(\n                '_'\n            ),\n            isFormat: /MMMM(\\s)+D[oD]?/,\n        },\n        monthsShort:\n            'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays: \"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var\".split('_'),\n        weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n        weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'A h:mm [vazta]',\n            LTS: 'A h:mm:ss [vazta]',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY A h:mm [vazta]',\n            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',\n            llll: 'ddd, D MMM YYYY, A h:mm [vazta]',\n        },\n        calendar: {\n            sameDay: '[Aiz] LT',\n            nextDay: '[Faleam] LT',\n            nextWeek: '[Fuddlo] dddd[,] LT',\n            lastDay: '[Kal] LT',\n            lastWeek: '[Fattlo] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s',\n            past: '%s adim',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // the ordinal 'er' only applies to day of the month\n                case 'D':\n                    return number + 'er';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week\n            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n        },\n        meridiemParse: /rati|sokallim|donparam|sanje/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'rati') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'sokallim') {\n                return hour;\n            } else if (meridiem === 'donparam') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'sanje') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'rati';\n            } else if (hour < 12) {\n                return 'sokallim';\n            } else if (hour < 16) {\n                return 'donparam';\n            } else if (hour < 20) {\n                return 'sanje';\n            } else {\n                return 'rati';\n            }\n        },\n    });\n\n    return gomLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Gujarati [gu]\n//! author : Kaushik Thanki : https://github.com/Kaushik1987\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '૧',\n            2: '૨',\n            3: '૩',\n            4: '૪',\n            5: '૫',\n            6: '૬',\n            7: '૭',\n            8: '૮',\n            9: '૯',\n            0: '૦',\n        },\n        numberMap = {\n            '૧': '1',\n            '૨': '2',\n            '૩': '3',\n            '૪': '4',\n            '૫': '5',\n            '૬': '6',\n            '૭': '7',\n            '૮': '8',\n            '૯': '9',\n            '૦': '0',\n        };\n\n    var gu = moment.defineLocale('gu', {\n        months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split(\n            '_'\n        ),\n        monthsShort:\n            'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split(\n            '_'\n        ),\n        weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n        weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm વાગ્યે',\n            LTS: 'A h:mm:ss વાગ્યે',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે',\n        },\n        calendar: {\n            sameDay: '[આજ] LT',\n            nextDay: '[કાલે] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ગઇકાલે] LT',\n            lastWeek: '[પાછલા] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s મા',\n            past: '%s પહેલા',\n            s: 'અમુક પળો',\n            ss: '%d સેકંડ',\n            m: 'એક મિનિટ',\n            mm: '%d મિનિટ',\n            h: 'એક કલાક',\n            hh: '%d કલાક',\n            d: 'એક દિવસ',\n            dd: '%d દિવસ',\n            M: 'એક મહિનો',\n            MM: '%d મહિનો',\n            y: 'એક વર્ષ',\n            yy: '%d વર્ષ',\n        },\n        preparse: function (string) {\n            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n        meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'રાત') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'સવાર') {\n                return hour;\n            } else if (meridiem === 'બપોર') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'સાંજ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'રાત';\n            } else if (hour < 10) {\n                return 'સવાર';\n            } else if (hour < 17) {\n                return 'બપોર';\n            } else if (hour < 20) {\n                return 'સાંજ';\n            } else {\n                return 'રાત';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return gu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Hebrew [he]\n//! author : Tomer Cohen : https://github.com/tomer\n//! author : Moshe Simantov : https://github.com/DevelopmentIL\n//! author : Tal Ater : https://github.com/TalAter\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var he = moment.defineLocale('he', {\n        months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split(\n            '_'\n        ),\n        monthsShort:\n            'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n        weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n        weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n        weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [ב]MMMM YYYY',\n            LLL: 'D [ב]MMMM YYYY HH:mm',\n            LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',\n            l: 'D/M/YYYY',\n            ll: 'D MMM YYYY',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd, D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[היום ב־]LT',\n            nextDay: '[מחר ב־]LT',\n            nextWeek: 'dddd [בשעה] LT',\n            lastDay: '[אתמול ב־]LT',\n            lastWeek: '[ביום] dddd [האחרון בשעה] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'בעוד %s',\n            past: 'לפני %s',\n            s: 'מספר שניות',\n            ss: '%d שניות',\n            m: 'דקה',\n            mm: '%d דקות',\n            h: 'שעה',\n            hh: function (number) {\n                if (number === 2) {\n                    return 'שעתיים';\n                }\n                return number + ' שעות';\n            },\n            d: 'יום',\n            dd: function (number) {\n                if (number === 2) {\n                    return 'יומיים';\n                }\n                return number + ' ימים';\n            },\n            M: 'חודש',\n            MM: function (number) {\n                if (number === 2) {\n                    return 'חודשיים';\n                }\n                return number + ' חודשים';\n            },\n            y: 'שנה',\n            yy: function (number) {\n                if (number === 2) {\n                    return 'שנתיים';\n                } else if (number % 10 === 0 && number !== 10) {\n                    return number + ' שנה';\n                }\n                return number + ' שנים';\n            },\n        },\n        meridiemParse:\n            /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n        isPM: function (input) {\n            return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 5) {\n                return 'לפנות בוקר';\n            } else if (hour < 10) {\n                return 'בבוקר';\n            } else if (hour < 12) {\n                return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n            } else if (hour < 18) {\n                return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n            } else {\n                return 'בערב';\n            }\n        },\n    });\n\n    return he;\n\n})));\n","//! moment.js locale configuration\n//! locale : Hindi [hi]\n//! author : Mayank Singhal : https://github.com/mayanksinghal\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        },\n        monthsParse = [\n            /^जन/i,\n            /^फ़र|फर/i,\n            /^मार्च/i,\n            /^अप्रै/i,\n            /^मई/i,\n            /^जून/i,\n            /^जुल/i,\n            /^अग/i,\n            /^सितं|सित/i,\n            /^अक्टू/i,\n            /^नव|नवं/i,\n            /^दिसं|दिस/i,\n        ],\n        shortMonthsParse = [\n            /^जन/i,\n            /^फ़र/i,\n            /^मार्च/i,\n            /^अप्रै/i,\n            /^मई/i,\n            /^जून/i,\n            /^जुल/i,\n            /^अग/i,\n            /^सित/i,\n            /^अक्टू/i,\n            /^नव/i,\n            /^दिस/i,\n        ];\n\n    var hi = moment.defineLocale('hi', {\n        months: {\n            format: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split(\n                '_'\n            ),\n            standalone:\n                'जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर'.split(\n                    '_'\n                ),\n        },\n        monthsShort:\n            'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n        weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm बजे',\n            LTS: 'A h:mm:ss बजे',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm बजे',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm बजे',\n        },\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: shortMonthsParse,\n\n        monthsRegex:\n            /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n        monthsShortRegex:\n            /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n        monthsStrictRegex:\n            /^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i,\n\n        monthsShortStrictRegex:\n            /^(जन\\.?|फ़र\\.?|मार्च?|अप्रै\\.?|मई?|जून?|जुल\\.?|अग\\.?|सित\\.?|अक्टू\\.?|नव\\.?|दिस\\.?)/i,\n\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[कल] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[कल] LT',\n            lastWeek: '[पिछले] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s में',\n            past: '%s पहले',\n            s: 'कुछ ही क्षण',\n            ss: '%d सेकंड',\n            m: 'एक मिनट',\n            mm: '%d मिनट',\n            h: 'एक घंटा',\n            hh: '%d घंटे',\n            d: 'एक दिन',\n            dd: '%d दिन',\n            M: 'एक महीने',\n            MM: '%d महीने',\n            y: 'एक वर्ष',\n            yy: '%d वर्ष',\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n        meridiemParse: /रात|सुबह|दोपहर|शाम/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सुबह') {\n                return hour;\n            } else if (meridiem === 'दोपहर') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'शाम') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात';\n            } else if (hour < 10) {\n                return 'सुबह';\n            } else if (hour < 17) {\n                return 'दोपहर';\n            } else if (hour < 20) {\n                return 'शाम';\n            } else {\n                return 'रात';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return hi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Croatian [hr]\n//! author : Bojan Marković : https://github.com/bmarkovic\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var hr = moment.defineLocale('hr', {\n        months: {\n            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split(\n                '_'\n            ),\n            standalone:\n                'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(\n                    '_'\n                ),\n        },\n        monthsShort:\n            'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'Do MMMM YYYY',\n            LLL: 'Do MMMM YYYY H:mm',\n            LLLL: 'dddd, Do MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[jučer u] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prošlu] [nedjelju] [u] LT';\n                    case 3:\n                        return '[prošlu] [srijedu] [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'par sekundi',\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: 'dan',\n            dd: translate,\n            M: 'mjesec',\n            MM: translate,\n            y: 'godinu',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return hr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Hungarian [hu]\n//! author : Adam Brunner : https://github.com/adambrunner\n//! author : Peter Viszt  : https://github.com/passatgt\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var weekEndings =\n        'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n    function translate(number, withoutSuffix, key, isFuture) {\n        var num = number;\n        switch (key) {\n            case 's':\n                return isFuture || withoutSuffix\n                    ? 'néhány másodperc'\n                    : 'néhány másodperce';\n            case 'ss':\n                return (\n                    num + (isFuture || withoutSuffix ? ' másodperc' : ' másodperce')\n                );\n            case 'm':\n                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'mm':\n                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'h':\n                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'hh':\n                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'd':\n                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'dd':\n                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'M':\n                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'MM':\n                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'y':\n                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n            case 'yy':\n                return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n        }\n        return '';\n    }\n    function week(isFuture) {\n        return (\n            (isFuture ? '' : '[múlt] ') +\n            '[' +\n            weekEndings[this.day()] +\n            '] LT[-kor]'\n        );\n    }\n\n    var hu = moment.defineLocale('hu', {\n        months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n        weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n        weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'YYYY.MM.DD.',\n            LL: 'YYYY. MMMM D.',\n            LLL: 'YYYY. MMMM D. H:mm',\n            LLLL: 'YYYY. MMMM D., dddd H:mm',\n        },\n        meridiemParse: /de|du/i,\n        isPM: function (input) {\n            return input.charAt(1).toLowerCase() === 'u';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower === true ? 'de' : 'DE';\n            } else {\n                return isLower === true ? 'du' : 'DU';\n            }\n        },\n        calendar: {\n            sameDay: '[ma] LT[-kor]',\n            nextDay: '[holnap] LT[-kor]',\n            nextWeek: function () {\n                return week.call(this, true);\n            },\n            lastDay: '[tegnap] LT[-kor]',\n            lastWeek: function () {\n                return week.call(this, false);\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s múlva',\n            past: '%s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return hu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Armenian [hy-am]\n//! author : Armendarabyan : https://github.com/armendarabyan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var hyAm = moment.defineLocale('hy-am', {\n        months: {\n            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split(\n                '_'\n            ),\n            standalone:\n                'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n        weekdays:\n            'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split(\n                '_'\n            ),\n        weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY թ.',\n            LLL: 'D MMMM YYYY թ., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY թ., HH:mm',\n        },\n        calendar: {\n            sameDay: '[այսօր] LT',\n            nextDay: '[վաղը] LT',\n            lastDay: '[երեկ] LT',\n            nextWeek: function () {\n                return 'dddd [օրը ժամը] LT';\n            },\n            lastWeek: function () {\n                return '[անցած] dddd [օրը ժամը] LT';\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s հետո',\n            past: '%s առաջ',\n            s: 'մի քանի վայրկյան',\n            ss: '%d վայրկյան',\n            m: 'րոպե',\n            mm: '%d րոպե',\n            h: 'ժամ',\n            hh: '%d ժամ',\n            d: 'օր',\n            dd: '%d օր',\n            M: 'ամիս',\n            MM: '%d ամիս',\n            y: 'տարի',\n            yy: '%d տարի',\n        },\n        meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n        isPM: function (input) {\n            return /^(ցերեկվա|երեկոյան)$/.test(input);\n        },\n        meridiem: function (hour) {\n            if (hour < 4) {\n                return 'գիշերվա';\n            } else if (hour < 12) {\n                return 'առավոտվա';\n            } else if (hour < 17) {\n                return 'ցերեկվա';\n            } else {\n                return 'երեկոյան';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'DDD':\n                case 'w':\n                case 'W':\n                case 'DDDo':\n                    if (number === 1) {\n                        return number + '-ին';\n                    }\n                    return number + '-րդ';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return hyAm;\n\n})));\n","//! moment.js locale configuration\n//! locale : Indonesian [id]\n//! author : Mohammad Satrio Utomo : https://github.com/tyok\n//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsParse = [],\n        longMonthsParse = [],\n        shortMonthsParse = [];\n\n    monthsParse[7] = /^agustus|^agu|^agt/i;\n    longMonthsParse[7] = /^agustus$/i;\n    shortMonthsParse[7] = /^agu$|^agt$/i;\n\n    var id = moment.defineLocale('id', {\n        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agu_Sep_Okt_Nov_Des'.split('_'),\n        monthsParse: monthsParse,\n        longMonthsParse: longMonthsParse,\n        shortMonthsParse: shortMonthsParse,\n        weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n        weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|siang|sore|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'siang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sore' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'siang';\n            } else if (hours < 19) {\n                return 'sore';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Besok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kemarin pukul] LT',\n            lastWeek: 'dddd [lalu pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lalu',\n            s: 'beberapa detik',\n            ss: '%d detik',\n            m: 'semenit',\n            mm: '%d menit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return id;\n\n})));\n","//! moment.js locale configuration\n//! locale : Icelandic [is]\n//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(n) {\n        if (n % 100 === 11) {\n            return true;\n        } else if (n % 10 === 1) {\n            return false;\n        }\n        return true;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture\n                    ? 'nokkrar sekúndur'\n                    : 'nokkrum sekúndum';\n            case 'ss':\n                if (plural(number)) {\n                    return (\n                        result +\n                        (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum')\n                    );\n                }\n                return result + 'sekúnda';\n            case 'm':\n                return withoutSuffix ? 'mínúta' : 'mínútu';\n            case 'mm':\n                if (plural(number)) {\n                    return (\n                        result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum')\n                    );\n                } else if (withoutSuffix) {\n                    return result + 'mínúta';\n                }\n                return result + 'mínútu';\n            case 'hh':\n                if (plural(number)) {\n                    return (\n                        result +\n                        (withoutSuffix || isFuture\n                            ? 'klukkustundir'\n                            : 'klukkustundum')\n                    );\n                }\n                return result + 'klukkustund';\n            case 'd':\n                if (withoutSuffix) {\n                    return 'dagur';\n                }\n                return isFuture ? 'dag' : 'degi';\n            case 'dd':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'dagar';\n                    }\n                    return result + (isFuture ? 'daga' : 'dögum');\n                } else if (withoutSuffix) {\n                    return result + 'dagur';\n                }\n                return result + (isFuture ? 'dag' : 'degi');\n            case 'M':\n                if (withoutSuffix) {\n                    return 'mánuður';\n                }\n                return isFuture ? 'mánuð' : 'mánuði';\n            case 'MM':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'mánuðir';\n                    }\n                    return result + (isFuture ? 'mánuði' : 'mánuðum');\n                } else if (withoutSuffix) {\n                    return result + 'mánuður';\n                }\n                return result + (isFuture ? 'mánuð' : 'mánuði');\n            case 'y':\n                return withoutSuffix || isFuture ? 'ár' : 'ári';\n            case 'yy':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n                }\n                return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n        }\n    }\n\n    var is = moment.defineLocale('is', {\n        months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n        weekdays:\n            'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split(\n                '_'\n            ),\n        weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n        weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] H:mm',\n            LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm',\n        },\n        calendar: {\n            sameDay: '[í dag kl.] LT',\n            nextDay: '[á morgun kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[í gær kl.] LT',\n            lastWeek: '[síðasta] dddd [kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'eftir %s',\n            past: 'fyrir %s síðan',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: 'klukkustund',\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return is;\n\n})));\n","//! moment.js locale configuration\n//! locale : Italian [it]\n//! author : Lorenzo : https://github.com/aliem\n//! author: Mattia Larentis: https://github.com/nostalgiaz\n//! author: Marco : https://github.com/Manfre98\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var it = moment.defineLocale('it', {\n        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n            '_'\n        ),\n        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n            '_'\n        ),\n        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return (\n                    '[Oggi a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            nextDay: function () {\n                return (\n                    '[Domani a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            nextWeek: function () {\n                return (\n                    'dddd [a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            lastDay: function () {\n                return (\n                    '[Ieri a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return (\n                            '[La scorsa] dddd [a' +\n                            (this.hours() > 1\n                                ? 'lle '\n                                : this.hours() === 0\n                                  ? ' '\n                                  : \"ll'\") +\n                            ']LT'\n                        );\n                    default:\n                        return (\n                            '[Lo scorso] dddd [a' +\n                            (this.hours() > 1\n                                ? 'lle '\n                                : this.hours() === 0\n                                  ? ' '\n                                  : \"ll'\") +\n                            ']LT'\n                        );\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'tra %s',\n            past: '%s fa',\n            s: 'alcuni secondi',\n            ss: '%d secondi',\n            m: 'un minuto',\n            mm: '%d minuti',\n            h: \"un'ora\",\n            hh: '%d ore',\n            d: 'un giorno',\n            dd: '%d giorni',\n            w: 'una settimana',\n            ww: '%d settimane',\n            M: 'un mese',\n            MM: '%d mesi',\n            y: 'un anno',\n            yy: '%d anni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return it;\n\n})));\n","//! moment.js locale configuration\n//! locale : Italian (Switzerland) [it-ch]\n//! author : xfh : https://github.com/xfh\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var itCh = moment.defineLocale('it-ch', {\n        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n            '_'\n        ),\n        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n            '_'\n        ),\n        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Oggi alle] LT',\n            nextDay: '[Domani alle] LT',\n            nextWeek: 'dddd [alle] LT',\n            lastDay: '[Ieri alle] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[la scorsa] dddd [alle] LT';\n                    default:\n                        return '[lo scorso] dddd [alle] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (s) {\n                return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;\n            },\n            past: '%s fa',\n            s: 'alcuni secondi',\n            ss: '%d secondi',\n            m: 'un minuto',\n            mm: '%d minuti',\n            h: \"un'ora\",\n            hh: '%d ore',\n            d: 'un giorno',\n            dd: '%d giorni',\n            M: 'un mese',\n            MM: '%d mesi',\n            y: 'un anno',\n            yy: '%d anni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return itCh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Japanese [ja]\n//! author : LI Long : https://github.com/baryon\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ja = moment.defineLocale('ja', {\n        eras: [\n            {\n                since: '2019-05-01',\n                offset: 1,\n                name: '令和',\n                narrow: '㋿',\n                abbr: 'R',\n            },\n            {\n                since: '1989-01-08',\n                until: '2019-04-30',\n                offset: 1,\n                name: '平成',\n                narrow: '㍻',\n                abbr: 'H',\n            },\n            {\n                since: '1926-12-25',\n                until: '1989-01-07',\n                offset: 1,\n                name: '昭和',\n                narrow: '㍼',\n                abbr: 'S',\n            },\n            {\n                since: '1912-07-30',\n                until: '1926-12-24',\n                offset: 1,\n                name: '大正',\n                narrow: '㍽',\n                abbr: 'T',\n            },\n            {\n                since: '1873-01-01',\n                until: '1912-07-29',\n                offset: 6,\n                name: '明治',\n                narrow: '㍾',\n                abbr: 'M',\n            },\n            {\n                since: '0001-01-01',\n                until: '1873-12-31',\n                offset: 1,\n                name: '西暦',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: '紀元前',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        eraYearOrdinalRegex: /(元|\\d+)年/,\n        eraYearOrdinalParse: function (input, match) {\n            return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);\n        },\n        months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n        weekdaysShort: '日_月_火_水_木_金_土'.split('_'),\n        weekdaysMin: '日_月_火_水_木_金_土'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日 dddd HH:mm',\n            l: 'YYYY/MM/DD',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日(ddd) HH:mm',\n        },\n        meridiemParse: /午前|午後/i,\n        isPM: function (input) {\n            return input === '午後';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return '午前';\n            } else {\n                return '午後';\n            }\n        },\n        calendar: {\n            sameDay: '[今日] LT',\n            nextDay: '[明日] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    return '[来週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            lastDay: '[昨日] LT',\n            lastWeek: function (now) {\n                if (this.week() !== now.week()) {\n                    return '[先週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}日/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'y':\n                    return number === 1 ? '元年' : number + '年';\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '数秒',\n            ss: '%d秒',\n            m: '1分',\n            mm: '%d分',\n            h: '1時間',\n            hh: '%d時間',\n            d: '1日',\n            dd: '%d日',\n            M: '1ヶ月',\n            MM: '%dヶ月',\n            y: '1年',\n            yy: '%d年',\n        },\n    });\n\n    return ja;\n\n})));\n","//! moment.js locale configuration\n//! locale : Javanese [jv]\n//! author : Rony Lantip : https://github.com/lantip\n//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var jv = moment.defineLocale('jv', {\n        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n        weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n        weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /enjing|siyang|sonten|ndalu/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'enjing') {\n                return hour;\n            } else if (meridiem === 'siyang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'enjing';\n            } else if (hours < 15) {\n                return 'siyang';\n            } else if (hours < 19) {\n                return 'sonten';\n            } else {\n                return 'ndalu';\n            }\n        },\n        calendar: {\n            sameDay: '[Dinten puniko pukul] LT',\n            nextDay: '[Mbenjang pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kala wingi pukul] LT',\n            lastWeek: 'dddd [kepengker pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'wonten ing %s',\n            past: '%s ingkang kepengker',\n            s: 'sawetawis detik',\n            ss: '%d detik',\n            m: 'setunggal menit',\n            mm: '%d menit',\n            h: 'setunggal jam',\n            hh: '%d jam',\n            d: 'sedinten',\n            dd: '%d dinten',\n            M: 'sewulan',\n            MM: '%d wulan',\n            y: 'setaun',\n            yy: '%d taun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return jv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Georgian [ka]\n//! author : Irakli Janiashvili : https://github.com/IrakliJani\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ka = moment.defineLocale('ka', {\n        months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split(\n            '_'\n        ),\n        monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n        weekdays: {\n            standalone:\n                'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split(\n                    '_'\n                ),\n            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split(\n                '_'\n            ),\n            isFormat: /(წინა|შემდეგ)/,\n        },\n        weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n        weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[დღეს] LT[-ზე]',\n            nextDay: '[ხვალ] LT[-ზე]',\n            lastDay: '[გუშინ] LT[-ზე]',\n            nextWeek: '[შემდეგ] dddd LT[-ზე]',\n            lastWeek: '[წინა] dddd LT-ზე',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (s) {\n                return s.replace(\n                    /(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/,\n                    function ($0, $1, $2) {\n                        return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში';\n                    }\n                );\n            },\n            past: function (s) {\n                if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) {\n                    return s.replace(/(ი|ე)$/, 'ის წინ');\n                }\n                if (/წელი/.test(s)) {\n                    return s.replace(/წელი$/, 'წლის წინ');\n                }\n                return s;\n            },\n            s: 'რამდენიმე წამი',\n            ss: '%d წამი',\n            m: 'წუთი',\n            mm: '%d წუთი',\n            h: 'საათი',\n            hh: '%d საათი',\n            d: 'დღე',\n            dd: '%d დღე',\n            M: 'თვე',\n            MM: '%d თვე',\n            y: 'წელი',\n            yy: '%d წელი',\n        },\n        dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n        ordinal: function (number) {\n            if (number === 0) {\n                return number;\n            }\n            if (number === 1) {\n                return number + '-ლი';\n            }\n            if (\n                number < 20 ||\n                (number <= 100 && number % 20 === 0) ||\n                number % 100 === 0\n            ) {\n                return 'მე-' + number;\n            }\n            return number + '-ე';\n        },\n        week: {\n            dow: 1,\n            doy: 7,\n        },\n    });\n\n    return ka;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kazakh [kk]\n//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        0: '-ші',\n        1: '-ші',\n        2: '-ші',\n        3: '-ші',\n        4: '-ші',\n        5: '-ші',\n        6: '-шы',\n        7: '-ші',\n        8: '-ші',\n        9: '-шы',\n        10: '-шы',\n        20: '-шы',\n        30: '-шы',\n        40: '-шы',\n        50: '-ші',\n        60: '-шы',\n        70: '-ші',\n        80: '-ші',\n        90: '-шы',\n        100: '-ші',\n    };\n\n    var kk = moment.defineLocale('kk', {\n        months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split(\n            '_'\n        ),\n        monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n        weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split(\n            '_'\n        ),\n        weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n        weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бүгін сағат] LT',\n            nextDay: '[Ертең сағат] LT',\n            nextWeek: 'dddd [сағат] LT',\n            lastDay: '[Кеше сағат] LT',\n            lastWeek: '[Өткен аптаның] dddd [сағат] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ішінде',\n            past: '%s бұрын',\n            s: 'бірнеше секунд',\n            ss: '%d секунд',\n            m: 'бір минут',\n            mm: '%d минут',\n            h: 'бір сағат',\n            hh: '%d сағат',\n            d: 'бір күн',\n            dd: '%d күн',\n            M: 'бір ай',\n            MM: '%d ай',\n            y: 'бір жыл',\n            yy: '%d жыл',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return kk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Cambodian [km]\n//! author : Kruy Vanna : https://github.com/kruyvanna\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '១',\n            2: '២',\n            3: '៣',\n            4: '៤',\n            5: '៥',\n            6: '៦',\n            7: '៧',\n            8: '៨',\n            9: '៩',\n            0: '០',\n        },\n        numberMap = {\n            '១': '1',\n            '២': '2',\n            '៣': '3',\n            '៤': '4',\n            '៥': '5',\n            '៦': '6',\n            '៧': '7',\n            '៨': '8',\n            '៩': '9',\n            '០': '0',\n        };\n\n    var km = moment.defineLocale('km', {\n        months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        monthsShort:\n            'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n                '_'\n            ),\n        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n        weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ព្រឹក|ល្ងាច/,\n        isPM: function (input) {\n            return input === 'ល្ងាច';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ព្រឹក';\n            } else {\n                return 'ល្ងាច';\n            }\n        },\n        calendar: {\n            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n            nextDay: '[ស្អែក ម៉ោង] LT',\n            nextWeek: 'dddd [ម៉ោង] LT',\n            lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sទៀត',\n            past: '%sមុន',\n            s: 'ប៉ុន្មានវិនាទី',\n            ss: '%d វិនាទី',\n            m: 'មួយនាទី',\n            mm: '%d នាទី',\n            h: 'មួយម៉ោង',\n            hh: '%d ម៉ោង',\n            d: 'មួយថ្ងៃ',\n            dd: '%d ថ្ងៃ',\n            M: 'មួយខែ',\n            MM: '%d ខែ',\n            y: 'មួយឆ្នាំ',\n            yy: '%d ឆ្នាំ',\n        },\n        dayOfMonthOrdinalParse: /ទី\\d{1,2}/,\n        ordinal: 'ទី%d',\n        preparse: function (string) {\n            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return km;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kannada [kn]\n//! author : Rajeev Naik : https://github.com/rajeevnaikte\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '೧',\n            2: '೨',\n            3: '೩',\n            4: '೪',\n            5: '೫',\n            6: '೬',\n            7: '೭',\n            8: '೮',\n            9: '೯',\n            0: '೦',\n        },\n        numberMap = {\n            '೧': '1',\n            '೨': '2',\n            '೩': '3',\n            '೪': '4',\n            '೫': '5',\n            '೬': '6',\n            '೭': '7',\n            '೮': '8',\n            '೯': '9',\n            '೦': '0',\n        };\n\n    var kn = moment.defineLocale('kn', {\n        months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split(\n            '_'\n        ),\n        monthsShort:\n            'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split(\n            '_'\n        ),\n        weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n        weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[ಇಂದು] LT',\n            nextDay: '[ನಾಳೆ] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ನಿನ್ನೆ] LT',\n            lastWeek: '[ಕೊನೆಯ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ನಂತರ',\n            past: '%s ಹಿಂದೆ',\n            s: 'ಕೆಲವು ಕ್ಷಣಗಳು',\n            ss: '%d ಸೆಕೆಂಡುಗಳು',\n            m: 'ಒಂದು ನಿಮಿಷ',\n            mm: '%d ನಿಮಿಷ',\n            h: 'ಒಂದು ಗಂಟೆ',\n            hh: '%d ಗಂಟೆ',\n            d: 'ಒಂದು ದಿನ',\n            dd: '%d ದಿನ',\n            M: 'ಒಂದು ತಿಂಗಳು',\n            MM: '%d ತಿಂಗಳು',\n            y: 'ಒಂದು ವರ್ಷ',\n            yy: '%d ವರ್ಷ',\n        },\n        preparse: function (string) {\n            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ರಾತ್ರಿ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n                return hour;\n            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ಸಂಜೆ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ರಾತ್ರಿ';\n            } else if (hour < 10) {\n                return 'ಬೆಳಿಗ್ಗೆ';\n            } else if (hour < 17) {\n                return 'ಮಧ್ಯಾಹ್ನ';\n            } else if (hour < 20) {\n                return 'ಸಂಜೆ';\n            } else {\n                return 'ರಾತ್ರಿ';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n        ordinal: function (number) {\n            return number + 'ನೇ';\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return kn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Korean [ko]\n//! author : Kyungwook, Park : https://github.com/kyungw00k\n//! author : Jeeeyul Lee <jeeeyul@gmail.com>\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ko = moment.defineLocale('ko', {\n        months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split(\n            '_'\n        ),\n        weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n        weekdaysShort: '일_월_화_수_목_금_토'.split('_'),\n        weekdaysMin: '일_월_화_수_목_금_토'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'YYYY.MM.DD.',\n            LL: 'YYYY년 MMMM D일',\n            LLL: 'YYYY년 MMMM D일 A h:mm',\n            LLLL: 'YYYY년 MMMM D일 dddd A h:mm',\n            l: 'YYYY.MM.DD.',\n            ll: 'YYYY년 MMMM D일',\n            lll: 'YYYY년 MMMM D일 A h:mm',\n            llll: 'YYYY년 MMMM D일 dddd A h:mm',\n        },\n        calendar: {\n            sameDay: '오늘 LT',\n            nextDay: '내일 LT',\n            nextWeek: 'dddd LT',\n            lastDay: '어제 LT',\n            lastWeek: '지난주 dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s 후',\n            past: '%s 전',\n            s: '몇 초',\n            ss: '%d초',\n            m: '1분',\n            mm: '%d분',\n            h: '한 시간',\n            hh: '%d시간',\n            d: '하루',\n            dd: '%d일',\n            M: '한 달',\n            MM: '%d달',\n            y: '일 년',\n            yy: '%d년',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(일|월|주)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '일';\n                case 'M':\n                    return number + '월';\n                case 'w':\n                case 'W':\n                    return number + '주';\n                default:\n                    return number;\n            }\n        },\n        meridiemParse: /오전|오후/,\n        isPM: function (token) {\n            return token === '오후';\n        },\n        meridiem: function (hour, minute, isUpper) {\n            return hour < 12 ? '오전' : '오후';\n        },\n    });\n\n    return ko;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kurdish [ku]\n//! author : Shahram Mebashar : https://github.com/ShahramMebashar\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        },\n        months = [\n            'کانونی دووەم',\n            'شوبات',\n            'ئازار',\n            'نیسان',\n            'ئایار',\n            'حوزەیران',\n            'تەمموز',\n            'ئاب',\n            'ئەیلوول',\n            'تشرینی یەكەم',\n            'تشرینی دووەم',\n            'كانونی یەکەم',\n        ];\n\n    var ku = moment.defineLocale('ku', {\n        months: months,\n        monthsShort: months,\n        weekdays:\n            'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split(\n                '_'\n            ),\n        weekdaysShort:\n            'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split('_'),\n        weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ئێواره‌|به‌یانی/,\n        isPM: function (input) {\n            return /ئێواره‌/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'به‌یانی';\n            } else {\n                return 'ئێواره‌';\n            }\n        },\n        calendar: {\n            sameDay: '[ئه‌مرۆ كاتژمێر] LT',\n            nextDay: '[به‌یانی كاتژمێر] LT',\n            nextWeek: 'dddd [كاتژمێر] LT',\n            lastDay: '[دوێنێ كاتژمێر] LT',\n            lastWeek: 'dddd [كاتژمێر] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'له‌ %s',\n            past: '%s',\n            s: 'چه‌ند چركه‌یه‌ك',\n            ss: 'چركه‌ %d',\n            m: 'یه‌ك خوله‌ك',\n            mm: '%d خوله‌ك',\n            h: 'یه‌ك كاتژمێر',\n            hh: '%d كاتژمێر',\n            d: 'یه‌ك ڕۆژ',\n            dd: '%d ڕۆژ',\n            M: 'یه‌ك مانگ',\n            MM: '%d مانگ',\n            y: 'یه‌ك ساڵ',\n            yy: '%d ساڵ',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return ku;\n\n})));\n","//! moment.js locale configuration\n//! locale : Northern Kurdish [ku-kmr]\n//! authors : Mazlum Özdogan : https://github.com/mergehez\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(num, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['çend sanîye', 'çend sanîyeyan'],\n            ss: [num + ' sanîye', num + ' sanîyeyan'],\n            m: ['deqîqeyek', 'deqîqeyekê'],\n            mm: [num + ' deqîqe', num + ' deqîqeyan'],\n            h: ['saetek', 'saetekê'],\n            hh: [num + ' saet', num + ' saetan'],\n            d: ['rojek', 'rojekê'],\n            dd: [num + ' roj', num + ' rojan'],\n            w: ['hefteyek', 'hefteyekê'],\n            ww: [num + ' hefte', num + ' hefteyan'],\n            M: ['mehek', 'mehekê'],\n            MM: [num + ' meh', num + ' mehan'],\n            y: ['salek', 'salekê'],\n            yy: [num + ' sal', num + ' salan'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n    // function obliqueNumSuffix(num) {\n    //     if(num.includes(':'))\n    //         num = parseInt(num.split(':')[0]);\n    //     else\n    //         num = parseInt(num);\n    //     return num == 0 || num % 10 == 1 ? 'ê'\n    //                         : (num > 10 && num % 10 == 0 ? 'î' : 'an');\n    // }\n    function ezafeNumSuffix(num) {\n        num = '' + num;\n        var l = num.substring(num.length - 1),\n            ll = num.length > 1 ? num.substring(num.length - 2) : '';\n        if (\n            !(ll == 12 || ll == 13) &&\n            (l == '2' || l == '3' || ll == '50' || l == '70' || l == '80')\n        )\n            return 'yê';\n        return 'ê';\n    }\n\n    var kuKmr = moment.defineLocale('ku-kmr', {\n        // According to the spelling rules defined by the work group of Weqfa Mezopotamyayê (Mesopotamia Foundation)\n        // this should be: 'Kanûna Paşîn_Sibat_Adar_Nîsan_Gulan_Hezîran_Tîrmeh_Tebax_Îlon_Çirîya Pêşîn_Çirîya Paşîn_Kanûna Pêşîn'\n        // But the names below are more well known and handy\n        months: 'Rêbendan_Sibat_Adar_Nîsan_Gulan_Hezîran_Tîrmeh_Tebax_Îlon_Cotmeh_Mijdar_Berfanbar'.split(\n            '_'\n        ),\n        monthsShort: 'Rêb_Sib_Ada_Nîs_Gul_Hez_Tîr_Teb_Îlo_Cot_Mij_Ber'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'Yekşem_Duşem_Sêşem_Çarşem_Pêncşem_În_Şemî'.split('_'),\n        weekdaysShort: 'Yek_Du_Sê_Çar_Pên_În_Şem'.split('_'),\n        weekdaysMin: 'Ye_Du_Sê_Ça_Pê_În_Şe'.split('_'),\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'bn' : 'BN';\n            } else {\n                return isLower ? 'pn' : 'PN';\n            }\n        },\n        meridiemParse: /bn|BN|pn|PN/,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'Do MMMM[a] YYYY[an]',\n            LLL: 'Do MMMM[a] YYYY[an] HH:mm',\n            LLLL: 'dddd, Do MMMM[a] YYYY[an] HH:mm',\n            ll: 'Do MMM[.] YYYY[an]',\n            lll: 'Do MMM[.] YYYY[an] HH:mm',\n            llll: 'ddd[.], Do MMM[.] YYYY[an] HH:mm',\n        },\n        calendar: {\n            sameDay: '[Îro di saet] LT [de]',\n            nextDay: '[Sibê di saet] LT [de]',\n            nextWeek: 'dddd [di saet] LT [de]',\n            lastDay: '[Duh di saet] LT [de]',\n            lastWeek: 'dddd[a borî di saet] LT [de]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'di %s de',\n            past: 'berî %s',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(?:yê|ê|\\.)/,\n        ordinal: function (num, period) {\n            var p = period.toLowerCase();\n            if (p.includes('w') || p.includes('m')) return num + '.';\n\n            return num + ezafeNumSuffix(num);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return kuKmr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kyrgyz [ky]\n//! author : Chyngyz Arystan uulu : https://github.com/chyngyz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        0: '-чү',\n        1: '-чи',\n        2: '-чи',\n        3: '-чү',\n        4: '-чү',\n        5: '-чи',\n        6: '-чы',\n        7: '-чи',\n        8: '-чи',\n        9: '-чу',\n        10: '-чу',\n        20: '-чы',\n        30: '-чу',\n        40: '-чы',\n        50: '-чү',\n        60: '-чы',\n        70: '-чи',\n        80: '-чи',\n        90: '-чу',\n        100: '-чү',\n    };\n\n    var ky = moment.defineLocale('ky', {\n        months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n            '_'\n        ),\n        monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split(\n            '_'\n        ),\n        weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split(\n            '_'\n        ),\n        weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n        weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бүгүн саат] LT',\n            nextDay: '[Эртең саат] LT',\n            nextWeek: 'dddd [саат] LT',\n            lastDay: '[Кечээ саат] LT',\n            lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ичинде',\n            past: '%s мурун',\n            s: 'бирнече секунд',\n            ss: '%d секунд',\n            m: 'бир мүнөт',\n            mm: '%d мүнөт',\n            h: 'бир саат',\n            hh: '%d саат',\n            d: 'бир күн',\n            dd: '%d күн',\n            M: 'бир ай',\n            MM: '%d ай',\n            y: 'бир жыл',\n            yy: '%d жыл',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return ky;\n\n})));\n","//! moment.js locale configuration\n//! locale : Luxembourgish [lb]\n//! author : mweimerskirch : https://github.com/mweimerskirch\n//! author : David Raison : https://github.com/kwisatz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eng Minutt', 'enger Minutt'],\n            h: ['eng Stonn', 'enger Stonn'],\n            d: ['een Dag', 'engem Dag'],\n            M: ['ee Mount', 'engem Mount'],\n            y: ['ee Joer', 'engem Joer'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n    function processFutureTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'a ' + string;\n        }\n        return 'an ' + string;\n    }\n    function processPastTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'viru ' + string;\n        }\n        return 'virun ' + string;\n    }\n    /**\n     * Returns true if the word before the given number loses the '-n' ending.\n     * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n     *\n     * @param number {integer}\n     * @returns {boolean}\n     */\n    function eifelerRegelAppliesToNumber(number) {\n        number = parseInt(number, 10);\n        if (isNaN(number)) {\n            return false;\n        }\n        if (number < 0) {\n            // Negative Number --> always true\n            return true;\n        } else if (number < 10) {\n            // Only 1 digit\n            if (4 <= number && number <= 7) {\n                return true;\n            }\n            return false;\n        } else if (number < 100) {\n            // 2 digits\n            var lastDigit = number % 10,\n                firstDigit = number / 10;\n            if (lastDigit === 0) {\n                return eifelerRegelAppliesToNumber(firstDigit);\n            }\n            return eifelerRegelAppliesToNumber(lastDigit);\n        } else if (number < 10000) {\n            // 3 or 4 digits --> recursively check first digit\n            while (number >= 10) {\n                number = number / 10;\n            }\n            return eifelerRegelAppliesToNumber(number);\n        } else {\n            // Anything larger than 4 digits: recursively check first n-3 digits\n            number = number / 1000;\n            return eifelerRegelAppliesToNumber(number);\n        }\n    }\n\n    var lb = moment.defineLocale('lb', {\n        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm [Auer]',\n            LTS: 'H:mm:ss [Auer]',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm [Auer]',\n            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]',\n        },\n        calendar: {\n            sameDay: '[Haut um] LT',\n            sameElse: 'L',\n            nextDay: '[Muer um] LT',\n            nextWeek: 'dddd [um] LT',\n            lastDay: '[Gëschter um] LT',\n            lastWeek: function () {\n                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n                switch (this.day()) {\n                    case 2:\n                    case 4:\n                        return '[Leschten] dddd [um] LT';\n                    default:\n                        return '[Leschte] dddd [um] LT';\n                }\n            },\n        },\n        relativeTime: {\n            future: processFutureTime,\n            past: processPastTime,\n            s: 'e puer Sekonnen',\n            ss: '%d Sekonnen',\n            m: processRelativeTime,\n            mm: '%d Minutten',\n            h: processRelativeTime,\n            hh: '%d Stonnen',\n            d: processRelativeTime,\n            dd: '%d Deeg',\n            M: processRelativeTime,\n            MM: '%d Méint',\n            y: processRelativeTime,\n            yy: '%d Joer',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return lb;\n\n})));\n","//! moment.js locale configuration\n//! locale : Lao [lo]\n//! author : Ryan Hart : https://github.com/ryanhart2\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var lo = moment.defineLocale('lo', {\n        months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n                '_'\n            ),\n        weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'ວັນdddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n        isPM: function (input) {\n            return input === 'ຕອນແລງ';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ຕອນເຊົ້າ';\n            } else {\n                return 'ຕອນແລງ';\n            }\n        },\n        calendar: {\n            sameDay: '[ມື້ນີ້ເວລາ] LT',\n            nextDay: '[ມື້ອື່ນເວລາ] LT',\n            nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT',\n            lastDay: '[ມື້ວານນີ້ເວລາ] LT',\n            lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ອີກ %s',\n            past: '%sຜ່ານມາ',\n            s: 'ບໍ່ເທົ່າໃດວິນາທີ',\n            ss: '%d ວິນາທີ',\n            m: '1 ນາທີ',\n            mm: '%d ນາທີ',\n            h: '1 ຊົ່ວໂມງ',\n            hh: '%d ຊົ່ວໂມງ',\n            d: '1 ມື້',\n            dd: '%d ມື້',\n            M: '1 ເດືອນ',\n            MM: '%d ເດືອນ',\n            y: '1 ປີ',\n            yy: '%d ປີ',\n        },\n        dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n        ordinal: function (number) {\n            return 'ທີ່' + number;\n        },\n    });\n\n    return lo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Lithuanian [lt]\n//! author : Mindaugas Mozūras : https://github.com/mmozuras\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var units = {\n        ss: 'sekundė_sekundžių_sekundes',\n        m: 'minutė_minutės_minutę',\n        mm: 'minutės_minučių_minutes',\n        h: 'valanda_valandos_valandą',\n        hh: 'valandos_valandų_valandas',\n        d: 'diena_dienos_dieną',\n        dd: 'dienos_dienų_dienas',\n        M: 'mėnuo_mėnesio_mėnesį',\n        MM: 'mėnesiai_mėnesių_mėnesius',\n        y: 'metai_metų_metus',\n        yy: 'metai_metų_metus',\n    };\n    function translateSeconds(number, withoutSuffix, key, isFuture) {\n        if (withoutSuffix) {\n            return 'kelios sekundės';\n        } else {\n            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n        }\n    }\n    function translateSingular(number, withoutSuffix, key, isFuture) {\n        return withoutSuffix\n            ? forms(key)[0]\n            : isFuture\n              ? forms(key)[1]\n              : forms(key)[2];\n    }\n    function special(number) {\n        return number % 10 === 0 || (number > 10 && number < 20);\n    }\n    function forms(key) {\n        return units[key].split('_');\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        if (number === 1) {\n            return (\n                result + translateSingular(number, withoutSuffix, key[0], isFuture)\n            );\n        } else if (withoutSuffix) {\n            return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n        } else {\n            if (isFuture) {\n                return result + forms(key)[1];\n            } else {\n                return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n            }\n        }\n    }\n    var lt = moment.defineLocale('lt', {\n        months: {\n            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split(\n                '_'\n            ),\n            standalone:\n                'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split(\n                    '_'\n                ),\n            isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/,\n        },\n        monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n        weekdays: {\n            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split(\n                '_'\n            ),\n            standalone:\n                'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split(\n                    '_'\n                ),\n            isFormat: /dddd HH:mm/,\n        },\n        weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n        weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY [m.] MMMM D [d.]',\n            LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n            l: 'YYYY-MM-DD',\n            ll: 'YYYY [m.] MMMM D [d.]',\n            lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',\n        },\n        calendar: {\n            sameDay: '[Šiandien] LT',\n            nextDay: '[Rytoj] LT',\n            nextWeek: 'dddd LT',\n            lastDay: '[Vakar] LT',\n            lastWeek: '[Praėjusį] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'po %s',\n            past: 'prieš %s',\n            s: translateSeconds,\n            ss: translate,\n            m: translateSingular,\n            mm: translate,\n            h: translateSingular,\n            hh: translate,\n            d: translateSingular,\n            dd: translate,\n            M: translateSingular,\n            MM: translate,\n            y: translateSingular,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n        ordinal: function (number) {\n            return number + '-oji';\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return lt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Latvian [lv]\n//! author : Kristaps Karlsons : https://github.com/skakri\n//! author : Jānis Elmeris : https://github.com/JanisE\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var units = {\n        ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n        m: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        h: 'stundas_stundām_stunda_stundas'.split('_'),\n        hh: 'stundas_stundām_stunda_stundas'.split('_'),\n        d: 'dienas_dienām_diena_dienas'.split('_'),\n        dd: 'dienas_dienām_diena_dienas'.split('_'),\n        M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        y: 'gada_gadiem_gads_gadi'.split('_'),\n        yy: 'gada_gadiem_gads_gadi'.split('_'),\n    };\n    /**\n     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n     */\n    function format(forms, number, withoutSuffix) {\n        if (withoutSuffix) {\n            // E.g. \"21 minūte\", \"3 minūtes\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n        } else {\n            // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n            // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n        }\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        return number + ' ' + format(units[key], number, withoutSuffix);\n    }\n    function relativeTimeWithSingular(number, withoutSuffix, key) {\n        return format(units[key], number, withoutSuffix);\n    }\n    function relativeSeconds(number, withoutSuffix) {\n        return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n    }\n\n    var lv = moment.defineLocale('lv', {\n        months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n        weekdays:\n            'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split(\n                '_'\n            ),\n        weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY.',\n            LL: 'YYYY. [gada] D. MMMM',\n            LLL: 'YYYY. [gada] D. MMMM, HH:mm',\n            LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',\n        },\n        calendar: {\n            sameDay: '[Šodien pulksten] LT',\n            nextDay: '[Rīt pulksten] LT',\n            nextWeek: 'dddd [pulksten] LT',\n            lastDay: '[Vakar pulksten] LT',\n            lastWeek: '[Pagājušā] dddd [pulksten] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'pēc %s',\n            past: 'pirms %s',\n            s: relativeSeconds,\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithSingular,\n            mm: relativeTimeWithPlural,\n            h: relativeTimeWithSingular,\n            hh: relativeTimeWithPlural,\n            d: relativeTimeWithSingular,\n            dd: relativeTimeWithPlural,\n            M: relativeTimeWithSingular,\n            MM: relativeTimeWithPlural,\n            y: relativeTimeWithSingular,\n            yy: relativeTimeWithPlural,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return lv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Montenegrin [me]\n//! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['sekund', 'sekunda', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mjesec', 'mjeseca', 'mjeseci'],\n            yy: ['godina', 'godine', 'godina'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1\n                ? wordKey[0]\n                : number >= 2 && number <= 4\n                  ? wordKey[1]\n                  : wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return (\n                    number +\n                    ' ' +\n                    translator.correctGrammaticalCase(number, wordKey)\n                );\n            }\n        },\n    };\n\n    var me = moment.defineLocale('me', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sjutra u] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[juče u] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[prošle] [nedjelje] [u] LT',\n                    '[prošlog] [ponedjeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srijede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'nekoliko sekundi',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: 'dan',\n            dd: translator.translate,\n            M: 'mjesec',\n            MM: translator.translate,\n            y: 'godinu',\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return me;\n\n})));\n","//! moment.js locale configuration\n//! locale : Maori [mi]\n//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var mi = moment.defineLocale('mi', {\n        months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split(\n            '_'\n        ),\n        monthsShort:\n            'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(\n                '_'\n            ),\n        monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n        weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n        weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [i] HH:mm',\n            LLLL: 'dddd, D MMMM YYYY [i] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i teie mahana, i] LT',\n            nextDay: '[apopo i] LT',\n            nextWeek: 'dddd [i] LT',\n            lastDay: '[inanahi i] LT',\n            lastWeek: 'dddd [whakamutunga i] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'i roto i %s',\n            past: '%s i mua',\n            s: 'te hēkona ruarua',\n            ss: '%d hēkona',\n            m: 'he meneti',\n            mm: '%d meneti',\n            h: 'te haora',\n            hh: '%d haora',\n            d: 'he ra',\n            dd: '%d ra',\n            M: 'he marama',\n            MM: '%d marama',\n            y: 'he tau',\n            yy: '%d tau',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return mi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Macedonian [mk]\n//! author : Borislav Mickov : https://github.com/B0k0\n//! author : Sashko Todorov : https://github.com/bkyceh\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n    var mk = moment.defineLocale('mk', {\n        months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split(\n            '_'\n        ),\n        monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split(\n            '_'\n        ),\n        weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n        weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Денес во] LT',\n            nextDay: '[Утре во] LT',\n            nextWeek: '[Во] dddd [во] LT',\n            lastDay: '[Вчера во] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Изминатата] dddd [во] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Изминатиот] dddd [во] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: 'пред %s',\n            s: 'неколку секунди',\n            ss: '%d секунди',\n            m: 'една минута',\n            mm: '%d минути',\n            h: 'еден час',\n            hh: '%d часа',\n            d: 'еден ден',\n            dd: '%d дена',\n            M: 'еден месец',\n            MM: '%d месеци',\n            y: 'една година',\n            yy: '%d години',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal: function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return mk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Malayalam [ml]\n//! author : Floyd Pink : https://github.com/floydpink\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ml = moment.defineLocale('ml', {\n        months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split(\n                '_'\n            ),\n        weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n        weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm -നു',\n            LTS: 'A h:mm:ss -നു',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm -നു',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm -നു',\n        },\n        calendar: {\n            sameDay: '[ഇന്ന്] LT',\n            nextDay: '[നാളെ] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ഇന്നലെ] LT',\n            lastWeek: '[കഴിഞ്ഞ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s കഴിഞ്ഞ്',\n            past: '%s മുൻപ്',\n            s: 'അൽപ നിമിഷങ്ങൾ',\n            ss: '%d സെക്കൻഡ്',\n            m: 'ഒരു മിനിറ്റ്',\n            mm: '%d മിനിറ്റ്',\n            h: 'ഒരു മണിക്കൂർ',\n            hh: '%d മണിക്കൂർ',\n            d: 'ഒരു ദിവസം',\n            dd: '%d ദിവസം',\n            M: 'ഒരു മാസം',\n            MM: '%d മാസം',\n            y: 'ഒരു വർഷം',\n            yy: '%d വർഷം',\n        },\n        meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'രാത്രി' && hour >= 4) ||\n                meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n                meridiem === 'വൈകുന്നേരം'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'രാത്രി';\n            } else if (hour < 12) {\n                return 'രാവിലെ';\n            } else if (hour < 17) {\n                return 'ഉച്ച കഴിഞ്ഞ്';\n            } else if (hour < 20) {\n                return 'വൈകുന്നേരം';\n            } else {\n                return 'രാത്രി';\n            }\n        },\n    });\n\n    return ml;\n\n})));\n","//! moment.js locale configuration\n//! locale : Mongolian [mn]\n//! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function translate(number, withoutSuffix, key, isFuture) {\n        switch (key) {\n            case 's':\n                return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n            case 'ss':\n                return number + (withoutSuffix ? ' секунд' : ' секундын');\n            case 'm':\n            case 'mm':\n                return number + (withoutSuffix ? ' минут' : ' минутын');\n            case 'h':\n            case 'hh':\n                return number + (withoutSuffix ? ' цаг' : ' цагийн');\n            case 'd':\n            case 'dd':\n                return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n            case 'M':\n            case 'MM':\n                return number + (withoutSuffix ? ' сар' : ' сарын');\n            case 'y':\n            case 'yy':\n                return number + (withoutSuffix ? ' жил' : ' жилийн');\n            default:\n                return number;\n        }\n    }\n\n    var mn = moment.defineLocale('mn', {\n        months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split(\n            '_'\n        ),\n        monthsShort:\n            '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n        weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n        weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY оны MMMMын D',\n            LLL: 'YYYY оны MMMMын D HH:mm',\n            LLLL: 'dddd, YYYY оны MMMMын D HH:mm',\n        },\n        meridiemParse: /ҮӨ|ҮХ/i,\n        isPM: function (input) {\n            return input === 'ҮХ';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ҮӨ';\n            } else {\n                return 'ҮХ';\n            }\n        },\n        calendar: {\n            sameDay: '[Өнөөдөр] LT',\n            nextDay: '[Маргааш] LT',\n            nextWeek: '[Ирэх] dddd LT',\n            lastDay: '[Өчигдөр] LT',\n            lastWeek: '[Өнгөрсөн] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s дараа',\n            past: '%s өмнө',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + ' өдөр';\n                default:\n                    return number;\n            }\n        },\n    });\n\n    return mn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Marathi [mr]\n//! author : Harshad Kale : https://github.com/kalehv\n//! author : Vivek Athalye : https://github.com/vnathalye\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        };\n\n    function relativeTimeMr(number, withoutSuffix, string, isFuture) {\n        var output = '';\n        if (withoutSuffix) {\n            switch (string) {\n                case 's':\n                    output = 'काही सेकंद';\n                    break;\n                case 'ss':\n                    output = '%d सेकंद';\n                    break;\n                case 'm':\n                    output = 'एक मिनिट';\n                    break;\n                case 'mm':\n                    output = '%d मिनिटे';\n                    break;\n                case 'h':\n                    output = 'एक तास';\n                    break;\n                case 'hh':\n                    output = '%d तास';\n                    break;\n                case 'd':\n                    output = 'एक दिवस';\n                    break;\n                case 'dd':\n                    output = '%d दिवस';\n                    break;\n                case 'M':\n                    output = 'एक महिना';\n                    break;\n                case 'MM':\n                    output = '%d महिने';\n                    break;\n                case 'y':\n                    output = 'एक वर्ष';\n                    break;\n                case 'yy':\n                    output = '%d वर्षे';\n                    break;\n            }\n        } else {\n            switch (string) {\n                case 's':\n                    output = 'काही सेकंदां';\n                    break;\n                case 'ss':\n                    output = '%d सेकंदां';\n                    break;\n                case 'm':\n                    output = 'एका मिनिटा';\n                    break;\n                case 'mm':\n                    output = '%d मिनिटां';\n                    break;\n                case 'h':\n                    output = 'एका तासा';\n                    break;\n                case 'hh':\n                    output = '%d तासां';\n                    break;\n                case 'd':\n                    output = 'एका दिवसा';\n                    break;\n                case 'dd':\n                    output = '%d दिवसां';\n                    break;\n                case 'M':\n                    output = 'एका महिन्या';\n                    break;\n                case 'MM':\n                    output = '%d महिन्यां';\n                    break;\n                case 'y':\n                    output = 'एका वर्षा';\n                    break;\n                case 'yy':\n                    output = '%d वर्षां';\n                    break;\n            }\n        }\n        return output.replace(/%d/i, number);\n    }\n\n    var mr = moment.defineLocale('mr', {\n        months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n            '_'\n        ),\n        monthsShort:\n            'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm वाजता',\n            LTS: 'A h:mm:ss वाजता',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm वाजता',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता',\n        },\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[उद्या] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[काल] LT',\n            lastWeek: '[मागील] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sमध्ये',\n            past: '%sपूर्वी',\n            s: relativeTimeMr,\n            ss: relativeTimeMr,\n            m: relativeTimeMr,\n            mm: relativeTimeMr,\n            h: relativeTimeMr,\n            hh: relativeTimeMr,\n            d: relativeTimeMr,\n            dd: relativeTimeMr,\n            M: relativeTimeMr,\n            MM: relativeTimeMr,\n            y: relativeTimeMr,\n            yy: relativeTimeMr,\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'पहाटे' || meridiem === 'सकाळी') {\n                return hour;\n            } else if (\n                meridiem === 'दुपारी' ||\n                meridiem === 'सायंकाळी' ||\n                meridiem === 'रात्री'\n            ) {\n                return hour >= 12 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour >= 0 && hour < 6) {\n                return 'पहाटे';\n            } else if (hour < 12) {\n                return 'सकाळी';\n            } else if (hour < 17) {\n                return 'दुपारी';\n            } else if (hour < 20) {\n                return 'सायंकाळी';\n            } else {\n                return 'रात्री';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return mr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Malay [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ms = moment.defineLocale('ms', {\n        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Esok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kelmarin pukul] LT',\n            lastWeek: 'dddd [lepas pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lepas',\n            s: 'beberapa saat',\n            ss: '%d saat',\n            m: 'seminit',\n            mm: '%d minit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return ms;\n\n})));\n","//! moment.js locale configuration\n//! locale : Malay [ms-my]\n//! note : DEPRECATED, the correct one is [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var msMy = moment.defineLocale('ms-my', {\n        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Esok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kelmarin pukul] LT',\n            lastWeek: 'dddd [lepas pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lepas',\n            s: 'beberapa saat',\n            ss: '%d saat',\n            m: 'seminit',\n            mm: '%d minit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return msMy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Maltese (Malta) [mt]\n//! author : Alessandro Maruccia : https://github.com/alesma\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var mt = moment.defineLocale('mt', {\n        months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n        weekdays:\n            'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split(\n                '_'\n            ),\n        weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n        weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Illum fil-]LT',\n            nextDay: '[Għada fil-]LT',\n            nextWeek: 'dddd [fil-]LT',\n            lastDay: '[Il-bieraħ fil-]LT',\n            lastWeek: 'dddd [li għadda] [fil-]LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'f’ %s',\n            past: '%s ilu',\n            s: 'ftit sekondi',\n            ss: '%d sekondi',\n            m: 'minuta',\n            mm: '%d minuti',\n            h: 'siegħa',\n            hh: '%d siegħat',\n            d: 'ġurnata',\n            dd: '%d ġranet',\n            M: 'xahar',\n            MM: '%d xhur',\n            y: 'sena',\n            yy: '%d sni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return mt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Burmese [my]\n//! author : Squar team, mysquar.com\n//! author : David Rossellat : https://github.com/gholadr\n//! author : Tin Aung Lin : https://github.com/thanyawzinmin\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '၁',\n            2: '၂',\n            3: '၃',\n            4: '၄',\n            5: '၅',\n            6: '၆',\n            7: '၇',\n            8: '၈',\n            9: '၉',\n            0: '၀',\n        },\n        numberMap = {\n            '၁': '1',\n            '၂': '2',\n            '၃': '3',\n            '၄': '4',\n            '၅': '5',\n            '၆': '6',\n            '၇': '7',\n            '၈': '8',\n            '၉': '9',\n            '၀': '0',\n        };\n\n    var my = moment.defineLocale('my', {\n        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split(\n            '_'\n        ),\n        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split(\n            '_'\n        ),\n        weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n        weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[ယနေ.] LT [မှာ]',\n            nextDay: '[မနက်ဖြန်] LT [မှာ]',\n            nextWeek: 'dddd LT [မှာ]',\n            lastDay: '[မနေ.က] LT [မှာ]',\n            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'လာမည့် %s မှာ',\n            past: 'လွန်ခဲ့သော %s က',\n            s: 'စက္ကန်.အနည်းငယ်',\n            ss: '%d စက္ကန့်',\n            m: 'တစ်မိနစ်',\n            mm: '%d မိနစ်',\n            h: 'တစ်နာရီ',\n            hh: '%d နာရီ',\n            d: 'တစ်ရက်',\n            dd: '%d ရက်',\n            M: 'တစ်လ',\n            MM: '%d လ',\n            y: 'တစ်နှစ်',\n            yy: '%d နှစ်',\n        },\n        preparse: function (string) {\n            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return my;\n\n})));\n","//! moment.js locale configuration\n//! locale : Norwegian Bokmål [nb]\n//! authors : Espen Hovlandsdal : https://github.com/rexxars\n//!           Sigurd Gartmann : https://github.com/sigurdga\n//!           Stephen Ramthun : https://github.com/stephenramthun\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var nb = moment.defineLocale('nb', {\n        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] HH:mm',\n            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[forrige] dddd [kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s siden',\n            s: 'noen sekunder',\n            ss: '%d sekunder',\n            m: 'ett minutt',\n            mm: '%d minutter',\n            h: 'én time',\n            hh: '%d timer',\n            d: 'én dag',\n            dd: '%d dager',\n            w: 'én uke',\n            ww: '%d uker',\n            M: 'én måned',\n            MM: '%d måneder',\n            y: 'ett år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nb;\n\n})));\n","//! moment.js locale configuration\n//! locale : Nepalese [ne]\n//! author : suvash : https://github.com/suvash\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        };\n\n    var ne = moment.defineLocale('ne', {\n        months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split(\n            '_'\n        ),\n        monthsShort:\n            'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split(\n            '_'\n        ),\n        weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n        weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'Aको h:mm बजे',\n            LTS: 'Aको h:mm:ss बजे',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, Aको h:mm बजे',\n            LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे',\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राति') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'बिहान') {\n                return hour;\n            } else if (meridiem === 'दिउँसो') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'साँझ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 3) {\n                return 'राति';\n            } else if (hour < 12) {\n                return 'बिहान';\n            } else if (hour < 16) {\n                return 'दिउँसो';\n            } else if (hour < 20) {\n                return 'साँझ';\n            } else {\n                return 'राति';\n            }\n        },\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[भोलि] LT',\n            nextWeek: '[आउँदो] dddd[,] LT',\n            lastDay: '[हिजो] LT',\n            lastWeek: '[गएको] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sमा',\n            past: '%s अगाडि',\n            s: 'केही क्षण',\n            ss: '%d सेकेण्ड',\n            m: 'एक मिनेट',\n            mm: '%d मिनेट',\n            h: 'एक घण्टा',\n            hh: '%d घण्टा',\n            d: 'एक दिन',\n            dd: '%d दिन',\n            M: 'एक महिना',\n            MM: '%d महिना',\n            y: 'एक बर्ष',\n            yy: '%d बर्ष',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return ne;\n\n})));\n","//! moment.js locale configuration\n//! locale : Dutch [nl]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots =\n            'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots =\n            'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        monthsParse = [\n            /^jan/i,\n            /^feb/i,\n            /^(maart|mrt\\.?)$/i,\n            /^apr/i,\n            /^mei$/i,\n            /^jun[i.]?$/i,\n            /^jul[i.]?$/i,\n            /^aug/i,\n            /^sep/i,\n            /^okt/i,\n            /^nov/i,\n            /^dec/i,\n        ],\n        monthsRegex =\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nl = moment.defineLocale('nl', {\n        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex:\n            /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        weekdays:\n            'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'over %s',\n            past: '%s geleden',\n            s: 'een paar seconden',\n            ss: '%d seconden',\n            m: 'één minuut',\n            mm: '%d minuten',\n            h: 'één uur',\n            hh: '%d uur',\n            d: 'één dag',\n            dd: '%d dagen',\n            w: 'één week',\n            ww: '%d weken',\n            M: 'één maand',\n            MM: '%d maanden',\n            y: 'één jaar',\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Dutch (Belgium) [nl-be]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots =\n            'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots =\n            'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        monthsParse = [\n            /^jan/i,\n            /^feb/i,\n            /^(maart|mrt\\.?)$/i,\n            /^apr/i,\n            /^mei$/i,\n            /^jun[i.]?$/i,\n            /^jul[i.]?$/i,\n            /^aug/i,\n            /^sep/i,\n            /^okt/i,\n            /^nov/i,\n            /^dec/i,\n        ],\n        monthsRegex =\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nlBe = moment.defineLocale('nl-be', {\n        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex:\n            /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        weekdays:\n            'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'over %s',\n            past: '%s geleden',\n            s: 'een paar seconden',\n            ss: '%d seconden',\n            m: 'één minuut',\n            mm: '%d minuten',\n            h: 'één uur',\n            hh: '%d uur',\n            d: 'één dag',\n            dd: '%d dagen',\n            M: 'één maand',\n            MM: '%d maanden',\n            y: 'één jaar',\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nlBe;\n\n})));\n","//! moment.js locale configuration\n//! locale : Nynorsk [nn]\n//! authors : https://github.com/mechuwind\n//!           Stephen Ramthun : https://github.com/stephenramthun\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var nn = moment.defineLocale('nn', {\n        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n        weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'),\n        weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] H:mm',\n            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[I dag klokka] LT',\n            nextDay: '[I morgon klokka] LT',\n            nextWeek: 'dddd [klokka] LT',\n            lastDay: '[I går klokka] LT',\n            lastWeek: '[Føregåande] dddd [klokka] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s sidan',\n            s: 'nokre sekund',\n            ss: '%d sekund',\n            m: 'eit minutt',\n            mm: '%d minutt',\n            h: 'ein time',\n            hh: '%d timar',\n            d: 'ein dag',\n            dd: '%d dagar',\n            w: 'ei veke',\n            ww: '%d veker',\n            M: 'ein månad',\n            MM: '%d månader',\n            y: 'eit år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Occitan, lengadocian dialecte [oc-lnc]\n//! author : Quentin PAGÈS : https://github.com/Quenty31\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ocLnc = moment.defineLocale('oc-lnc', {\n        months: {\n            standalone:\n                'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split(\n                    '_'\n                ),\n            format: \"de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre\".split(\n                '_'\n            ),\n            isFormat: /D[oD]?(\\s)+MMMM/,\n        },\n        monthsShort:\n            'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split(\n            '_'\n        ),\n        weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [de] YYYY',\n            ll: 'D MMM YYYY',\n            LLL: 'D MMMM [de] YYYY [a] H:mm',\n            lll: 'D MMM YYYY, H:mm',\n            LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',\n            llll: 'ddd D MMM YYYY, H:mm',\n        },\n        calendar: {\n            sameDay: '[uèi a] LT',\n            nextDay: '[deman a] LT',\n            nextWeek: 'dddd [a] LT',\n            lastDay: '[ièr a] LT',\n            lastWeek: 'dddd [passat a] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: \"d'aquí %s\",\n            past: 'fa %s',\n            s: 'unas segondas',\n            ss: '%d segondas',\n            m: 'una minuta',\n            mm: '%d minutas',\n            h: 'una ora',\n            hh: '%d oras',\n            d: 'un jorn',\n            dd: '%d jorns',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal: function (number, period) {\n            var output =\n                number === 1\n                    ? 'r'\n                    : number === 2\n                      ? 'n'\n                      : number === 3\n                        ? 'r'\n                        : number === 4\n                          ? 't'\n                          : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4,\n        },\n    });\n\n    return ocLnc;\n\n})));\n","//! moment.js locale configuration\n//! locale : Punjabi (India) [pa-in]\n//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '੧',\n            2: '੨',\n            3: '੩',\n            4: '੪',\n            5: '੫',\n            6: '੬',\n            7: '੭',\n            8: '੮',\n            9: '੯',\n            0: '੦',\n        },\n        numberMap = {\n            '੧': '1',\n            '੨': '2',\n            '੩': '3',\n            '੪': '4',\n            '੫': '5',\n            '੬': '6',\n            '੭': '7',\n            '੮': '8',\n            '੯': '9',\n            '੦': '0',\n        };\n\n    var paIn = moment.defineLocale('pa-in', {\n        // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n        months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n                '_'\n            ),\n        weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split(\n            '_'\n        ),\n        weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm ਵਜੇ',\n            LTS: 'A h:mm:ss ਵਜੇ',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ',\n        },\n        calendar: {\n            sameDay: '[ਅਜ] LT',\n            nextDay: '[ਕਲ] LT',\n            nextWeek: '[ਅਗਲਾ] dddd, LT',\n            lastDay: '[ਕਲ] LT',\n            lastWeek: '[ਪਿਛਲੇ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ਵਿੱਚ',\n            past: '%s ਪਿਛਲੇ',\n            s: 'ਕੁਝ ਸਕਿੰਟ',\n            ss: '%d ਸਕਿੰਟ',\n            m: 'ਇਕ ਮਿੰਟ',\n            mm: '%d ਮਿੰਟ',\n            h: 'ਇੱਕ ਘੰਟਾ',\n            hh: '%d ਘੰਟੇ',\n            d: 'ਇੱਕ ਦਿਨ',\n            dd: '%d ਦਿਨ',\n            M: 'ਇੱਕ ਮਹੀਨਾ',\n            MM: '%d ਮਹੀਨੇ',\n            y: 'ਇੱਕ ਸਾਲ',\n            yy: '%d ਸਾਲ',\n        },\n        preparse: function (string) {\n            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n        meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ਰਾਤ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ਸਵੇਰ') {\n                return hour;\n            } else if (meridiem === 'ਦੁਪਹਿਰ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ਸ਼ਾਮ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ਰਾਤ';\n            } else if (hour < 10) {\n                return 'ਸਵੇਰ';\n            } else if (hour < 17) {\n                return 'ਦੁਪਹਿਰ';\n            } else if (hour < 20) {\n                return 'ਸ਼ਾਮ';\n            } else {\n                return 'ਰਾਤ';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return paIn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Polish [pl]\n//! author : Rafal Hirsz : https://github.com/evoL\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsNominative =\n            'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split(\n                '_'\n            ),\n        monthsSubjective =\n            'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split(\n                '_'\n            ),\n        monthsParse = [\n            /^sty/i,\n            /^lut/i,\n            /^mar/i,\n            /^kwi/i,\n            /^maj/i,\n            /^cze/i,\n            /^lip/i,\n            /^sie/i,\n            /^wrz/i,\n            /^paź/i,\n            /^lis/i,\n            /^gru/i,\n        ];\n    function plural(n) {\n        return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;\n    }\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                return result + (plural(number) ? 'sekundy' : 'sekund');\n            case 'm':\n                return withoutSuffix ? 'minuta' : 'minutę';\n            case 'mm':\n                return result + (plural(number) ? 'minuty' : 'minut');\n            case 'h':\n                return withoutSuffix ? 'godzina' : 'godzinę';\n            case 'hh':\n                return result + (plural(number) ? 'godziny' : 'godzin');\n            case 'ww':\n                return result + (plural(number) ? 'tygodnie' : 'tygodni');\n            case 'MM':\n                return result + (plural(number) ? 'miesiące' : 'miesięcy');\n            case 'yy':\n                return result + (plural(number) ? 'lata' : 'lat');\n        }\n    }\n\n    var pl = moment.defineLocale('pl', {\n        months: function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return monthsNominative;\n            } else if (/D\\.? MMMM/.test(format)) {\n                return monthsSubjective[momentToFormat.month()];\n            } else {\n                return monthsNominative[momentToFormat.month()];\n            }\n        },\n        monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays:\n            'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n        weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n        weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Dziś o] LT',\n            nextDay: '[Jutro o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W niedzielę o] LT';\n\n                    case 2:\n                        return '[We wtorek o] LT';\n\n                    case 3:\n                        return '[W środę o] LT';\n\n                    case 6:\n                        return '[W sobotę o] LT';\n\n                    default:\n                        return '[W] dddd [o] LT';\n                }\n            },\n            lastDay: '[Wczoraj o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W zeszłą niedzielę o] LT';\n                    case 3:\n                        return '[W zeszłą środę o] LT';\n                    case 6:\n                        return '[W zeszłą sobotę o] LT';\n                    default:\n                        return '[W zeszły] dddd [o] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: '%s temu',\n            s: 'kilka sekund',\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: '1 dzień',\n            dd: '%d dni',\n            w: 'tydzień',\n            ww: translate,\n            M: 'miesiąc',\n            MM: translate,\n            y: 'rok',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return pl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Pashto [ps]\n//! author : Hanif Hefaz : https://github.com/hanifhefaz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '۱',\n            2: '۲',\n            3: '۳',\n            4: '۴',\n            5: '۵',\n            6: '۶',\n            7: '۷',\n            8: '۸',\n            9: '۹',\n            0: '۰',\n        },\n        numberMap = {\n            '۱': '1',\n            '۲': '2',\n            '۳': '3',\n            '۴': '4',\n            '۵': '5',\n            '۶': '6',\n            '۷': '7',\n            '۸': '8',\n            '۹': '9',\n            '۰': '0',\n        },\n        months = {\n            format: 'جنوري_فبروري_مارچ_اپریل_مۍ_جون_جولای_اګست_سېپتمبر_اکتوبر_نومبر_دسمبر'.split(\n                '_'\n            ),\n            standalone:\n                'جنوري_فېبروري_مارچ_اپریل_مۍ_جون_جولای_اګست_سپتمبر_اکتوبر_نومبر_دسمبر'.split(\n                    '_'\n                ),\n            isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s|,)+MMMM?/,\n        },\n        monthsShort = {\n            format: 'جنوري_فبروري_مارچ_اپریل_مۍ_جون_جولای_اګست_سېپتمبر_اکتوبر_نومبر_دسمبر'.split(\n                '_'\n            ),\n            standalone:\n                'جنوري_فبروري_مارچ_اپریل_مۍ_جون_جولای_اګست_سپتمبر_اکتوبر_نومبر_دسمبر'.split(\n                    '_'\n                ),\n        },\n        monthsParse = [\n            /^جنوري$/i,\n            /^(فبروري|فېبروري)$/i,\n            /^مارچ$/i,\n            /^اپریل$/i,\n            /^مۍ$/i,\n            /^جون$/i,\n            /^جولای$/i,\n            /^اګست$/i,\n            /^(سپتمبر|سېپتمبر)$/i,\n            /^اکتوبر$/i,\n            /^نومبر$/i,\n            /^دسمبر$/i,\n        ],\n        monthsRegex =\n            /^(جنوري|فبروري|فېبروري|مارچ|اپریل|مۍ|جون|جولای|اګست|سپتمبر|سېپتمبر|اکتوبر|نومبر|دسمبر)/i;\n\n    function relativeTime(number, withoutSuffix, key, isFuture) {\n        var format =\n            isFuture && !withoutSuffix\n                ? {\n                      s: 'څو ثانيو',\n                      ss: '%d ثانيو',\n                      m: 'يوه دقيقه',\n                      mm: '%d دقيقو',\n                      h: 'يو ساعت',\n                      hh: '%d ساعتو',\n                      d: 'يوه ورځ',\n                      dd: '%d ورځو',\n                      M: 'يوه مياشت',\n                      MM: '%d مياشتو',\n                      y: 'يو کال',\n                      yy: '%d کالونو',\n                  }\n                : {\n                      s: 'څو ثانيې',\n                      ss: '%d ثانيې',\n                      m: 'يوه دقيقه',\n                      mm: '%d دقيقې',\n                      h: 'يو ساعت',\n                      hh: '%d ساعتونه',\n                      d: 'يوه ورځ',\n                      dd: '%d ورځې',\n                      M: 'يوه مياشت',\n                      MM: '%d مياشتې',\n                      y: 'يو کال',\n                      yy: '%d کاله',\n                  };\n\n        return format[key].replace('%d', number);\n    }\n\n    var ps = moment.defineLocale('ps', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: monthsRegex,\n        monthsShortStrictRegex: monthsRegex,\n        weekdays: 'یکشنبه_دوشنبه_سه شنبه_چهارشنبه_پنج شنبه_جمعه_شنبه'.split('_'),\n        weekdaysShort: 'یکشنبه_دوشنبه_سه شنبه_چهارشنبه_پنج شنبه_جمعه_شنبه'.split(\n            '_'\n        ),\n        weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'YYYY/M/D',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd D, MMMM, YYYY [په] H:mm',\n        },\n        meridiemParse: /غ\\.م|غ\\.و\\./,\n        isPM: function (input) {\n            return input === 'غ.و.';\n        },\n        meridiem: function (hour) {\n            return hour < 12 ? 'غ.م' : 'غ.و.';\n        },\n        calendar: {\n            sameDay: '[نن په] LT',\n            nextDay: '[سبا په] LT',\n            nextWeek: 'dddd [په] LT',\n            lastDay: '[پرون په] LT',\n            lastWeek: 'dddd [په] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'په %s کې',\n            past: '%s مخکې',\n            s: relativeTime,\n            ss: relativeTime,\n            m: relativeTime,\n            mm: relativeTime,\n            h: relativeTime,\n            hh: relativeTime,\n            d: relativeTime,\n            dd: relativeTime,\n            M: relativeTime,\n            MM: relativeTime,\n            y: relativeTime,\n            yy: relativeTime,\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[۰-۹]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: '%d',\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return ps;\n\n})));\n","//! moment.js locale configuration\n//! locale : Portuguese [pt]\n//! author : Jefferson : https://github.com/jalex79\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var pt = moment.defineLocale('pt', {\n        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays:\n            'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split(\n                '_'\n            ),\n        weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY HH:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return this.day() === 0 || this.day() === 6\n                    ? '[Último] dddd [às] LT' // Saturday + Sunday\n                    : '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'em %s',\n            past: 'há %s',\n            s: 'segundos',\n            ss: '%d segundos',\n            m: 'um minuto',\n            mm: '%d minutos',\n            h: 'uma hora',\n            hh: '%d horas',\n            d: 'um dia',\n            dd: '%d dias',\n            w: 'uma semana',\n            ww: '%d semanas',\n            M: 'um mês',\n            MM: '%d meses',\n            y: 'um ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return pt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Portuguese (Brazil) [pt-br]\n//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ptBr = moment.defineLocale('pt-br', {\n        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays:\n            'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split(\n                '_'\n            ),\n        weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),\n        weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[Hoje ' + (this.hours() >= 2 ? 'às' : 'à') + '] LT';\n            },\n            nextDay: function () {\n                return '[Amanhã ' + (this.hours() >= 2 ? 'às' : 'à') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [' + (this.hours() >= 2 ? 'às' : 'à') + '] LT';\n            },\n            lastDay: function () {\n                return '[Ontem ' + (this.hours() >= 2 ? 'às' : 'à') + '] LT';\n            },\n            lastWeek: function () {\n                return this.day() === 0 || this.day() === 6\n                    ? '[Último] dddd [' + (this.hours() >= 2 ? 'às' : 'à') + '] LT' // Saturday + Sunday\n                    : '[Última] dddd [' + (this.hours() >= 2 ? 'às' : 'à') + '] LT'; // Monday - Friday\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'em %s',\n            past: 'há %s',\n            s: 'poucos segundos',\n            ss: '%d segundos',\n            m: 'um minuto',\n            mm: '%d minutos',\n            h: 'uma hora',\n            hh: '%d horas',\n            d: 'um dia',\n            dd: '%d dias',\n            M: 'um mês',\n            MM: '%d meses',\n            y: 'um ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        invalidDate: 'Data inválida',\n    });\n\n    return ptBr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Romanian [ro]\n//! author : Vlad Gurdiga : https://github.com/gurdiga\n//! author : Valentin Agachi : https://github.com/avaly\n//! author : Emanuel Cepoi : https://github.com/cepem\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n                ss: 'secunde',\n                mm: 'minute',\n                hh: 'ore',\n                dd: 'zile',\n                ww: 'săptămâni',\n                MM: 'luni',\n                yy: 'ani',\n            },\n            separator = ' ';\n        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n            separator = ' de ';\n        }\n        return number + separator + format[key];\n    }\n\n    var ro = moment.defineLocale('ro', {\n        months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(\n            '_'\n        ),\n        monthsShort:\n            'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n        weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n        weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[azi la] LT',\n            nextDay: '[mâine la] LT',\n            nextWeek: 'dddd [la] LT',\n            lastDay: '[ieri la] LT',\n            lastWeek: '[fosta] dddd [la] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'peste %s',\n            past: '%s în urmă',\n            s: 'câteva secunde',\n            ss: relativeTimeWithPlural,\n            m: 'un minut',\n            mm: relativeTimeWithPlural,\n            h: 'o oră',\n            hh: relativeTimeWithPlural,\n            d: 'o zi',\n            dd: relativeTimeWithPlural,\n            w: 'o săptămână',\n            ww: relativeTimeWithPlural,\n            M: 'o lună',\n            MM: relativeTimeWithPlural,\n            y: 'un an',\n            yy: relativeTimeWithPlural,\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return ro;\n\n})));\n","//! moment.js locale configuration\n//! locale : Russian [ru]\n//! author : Viktorminator : https://github.com/Viktorminator\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Коренберг Марк : https://github.com/socketpair\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n              ? forms[1]\n              : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n            hh: 'час_часа_часов',\n            dd: 'день_дня_дней',\n            ww: 'неделя_недели_недель',\n            MM: 'месяц_месяца_месяцев',\n            yy: 'год_года_лет',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'минута' : 'минуту';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    var monthsParse = [\n        /^янв/i,\n        /^фев/i,\n        /^мар/i,\n        /^апр/i,\n        /^ма[йя]/i,\n        /^июн/i,\n        /^июл/i,\n        /^авг/i,\n        /^сен/i,\n        /^окт/i,\n        /^ноя/i,\n        /^дек/i,\n    ];\n\n    // http://new.gramota.ru/spravka/rules/139-prop : § 103\n    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n    var ru = moment.defineLocale('ru', {\n        months: {\n            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split(\n                '_'\n            ),\n            standalone:\n                'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n                    '_'\n                ),\n        },\n        monthsShort: {\n            // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку?\n            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split(\n                '_'\n            ),\n            standalone:\n                'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split(\n                    '_'\n                ),\n        },\n        weekdays: {\n            standalone:\n                'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split(\n                    '_'\n                ),\n            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split(\n                '_'\n            ),\n            isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/,\n        },\n        weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n        monthsRegex:\n            /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // копия предыдущего\n        monthsShortRegex:\n            /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // полные названия с падежами\n        monthsStrictRegex:\n            /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n        // Выражение, которое соответствует только сокращённым формам\n        monthsShortStrictRegex:\n            /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY г.',\n            LLL: 'D MMMM YYYY г., H:mm',\n            LLLL: 'dddd, D MMMM YYYY г., H:mm',\n        },\n        calendar: {\n            sameDay: '[Сегодня, в] LT',\n            nextDay: '[Завтра, в] LT',\n            lastDay: '[Вчера, в] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В следующее] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В следующий] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В следующую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            lastWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В прошлое] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В прошлый] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В прошлую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'через %s',\n            past: '%s назад',\n            s: 'несколько секунд',\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: 'час',\n            hh: relativeTimeWithPlural,\n            d: 'день',\n            dd: relativeTimeWithPlural,\n            w: 'неделя',\n            ww: relativeTimeWithPlural,\n            M: 'месяц',\n            MM: relativeTimeWithPlural,\n            y: 'год',\n            yy: relativeTimeWithPlural,\n        },\n        meridiemParse: /ночи|утра|дня|вечера/i,\n        isPM: function (input) {\n            return /^(дня|вечера)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночи';\n            } else if (hour < 12) {\n                return 'утра';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечера';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                case 'w':\n                case 'W':\n                    return number + '-я';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ru;\n\n})));\n","//! moment.js locale configuration\n//! locale : Sindhi [sd]\n//! author : Narain Sagar : https://github.com/narainsagar\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'جنوري',\n            'فيبروري',\n            'مارچ',\n            'اپريل',\n            'مئي',\n            'جون',\n            'جولاءِ',\n            'آگسٽ',\n            'سيپٽمبر',\n            'آڪٽوبر',\n            'نومبر',\n            'ڊسمبر',\n        ],\n        days = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر'];\n\n    var sd = moment.defineLocale('sd', {\n        months: months,\n        monthsShort: months,\n        weekdays: days,\n        weekdaysShort: days,\n        weekdaysMin: days,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd، D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /صبح|شام/,\n        isPM: function (input) {\n            return 'شام' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar: {\n            sameDay: '[اڄ] LT',\n            nextDay: '[سڀاڻي] LT',\n            nextWeek: 'dddd [اڳين هفتي تي] LT',\n            lastDay: '[ڪالهه] LT',\n            lastWeek: '[گزريل هفتي] dddd [تي] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s پوء',\n            past: '%s اڳ',\n            s: 'چند سيڪنڊ',\n            ss: '%d سيڪنڊ',\n            m: 'هڪ منٽ',\n            mm: '%d منٽ',\n            h: 'هڪ ڪلاڪ',\n            hh: '%d ڪلاڪ',\n            d: 'هڪ ڏينهن',\n            dd: '%d ڏينهن',\n            M: 'هڪ مهينو',\n            MM: '%d مهينا',\n            y: 'هڪ سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sd;\n\n})));\n","//! moment.js locale configuration\n//! locale : Northern Sami [se]\n//! authors : Bård Rolstad Henriksen : https://github.com/karamell\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var se = moment.defineLocale('se', {\n        months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split(\n            '_'\n        ),\n        monthsShort:\n            'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n        weekdays:\n            'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split(\n                '_'\n            ),\n        weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n        weekdaysMin: 's_v_m_g_d_b_L'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'MMMM D. [b.] YYYY',\n            LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',\n            LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[otne ti] LT',\n            nextDay: '[ihttin ti] LT',\n            nextWeek: 'dddd [ti] LT',\n            lastDay: '[ikte ti] LT',\n            lastWeek: '[ovddit] dddd [ti] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s geažes',\n            past: 'maŋit %s',\n            s: 'moadde sekunddat',\n            ss: '%d sekunddat',\n            m: 'okta minuhta',\n            mm: '%d minuhtat',\n            h: 'okta diimmu',\n            hh: '%d diimmut',\n            d: 'okta beaivi',\n            dd: '%d beaivvit',\n            M: 'okta mánnu',\n            MM: '%d mánut',\n            y: 'okta jahki',\n            yy: '%d jagit',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return se;\n\n})));\n","//! moment.js locale configuration\n//! locale : Sinhalese [si]\n//! author : Sampath Sitinamaluwa : https://github.com/sampathsris\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    /*jshint -W100*/\n    var si = moment.defineLocale('si', {\n        months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split(\n            '_'\n        ),\n        monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split(\n            '_'\n        ),\n        weekdays:\n            'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split(\n                '_'\n            ),\n        weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n        weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'a h:mm',\n            LTS: 'a h:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY MMMM D',\n            LLL: 'YYYY MMMM D, a h:mm',\n            LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss',\n        },\n        calendar: {\n            sameDay: '[අද] LT[ට]',\n            nextDay: '[හෙට] LT[ට]',\n            nextWeek: 'dddd LT[ට]',\n            lastDay: '[ඊයේ] LT[ට]',\n            lastWeek: '[පසුගිය] dddd LT[ට]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sකින්',\n            past: '%sකට පෙර',\n            s: 'තත්පර කිහිපය',\n            ss: 'තත්පර %d',\n            m: 'මිනිත්තුව',\n            mm: 'මිනිත්තු %d',\n            h: 'පැය',\n            hh: 'පැය %d',\n            d: 'දිනය',\n            dd: 'දින %d',\n            M: 'මාසය',\n            MM: 'මාස %d',\n            y: 'වසර',\n            yy: 'වසර %d',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n        ordinal: function (number) {\n            return number + ' වැනි';\n        },\n        meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n        isPM: function (input) {\n            return input === 'ප.ව.' || input === 'පස් වරු';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'ප.ව.' : 'පස් වරු';\n            } else {\n                return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n            }\n        },\n    });\n\n    return si;\n\n})));\n","//! moment.js locale configuration\n//! locale : Slovak [sk]\n//! author : Martin Minka : https://github.com/k2s\n//! based on work of petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months =\n            'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split(\n                '_'\n            ),\n        monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n    function plural(n) {\n        return n > 1 && n < 5;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's': // a few seconds / in a few seconds / a few seconds ago\n                return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekúnd');\n                } else {\n                    return result + 'sekundami';\n                }\n            case 'm': // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minúty' : 'minút');\n                } else {\n                    return result + 'minútami';\n                }\n            case 'h': // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodín');\n                } else {\n                    return result + 'hodinami';\n                }\n            case 'd': // a day / in a day / a day ago\n                return withoutSuffix || isFuture ? 'deň' : 'dňom';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dni' : 'dní');\n                } else {\n                    return result + 'dňami';\n                }\n            case 'M': // a month / in a month / a month ago\n                return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'mesiace' : 'mesiacov');\n                } else {\n                    return result + 'mesiacmi';\n                }\n            case 'y': // a year / in a year / a year ago\n                return withoutSuffix || isFuture ? 'rok' : 'rokom';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'rokov');\n                } else {\n                    return result + 'rokmi';\n                }\n        }\n    }\n\n    var sk = moment.defineLocale('sk', {\n        months: months,\n        monthsShort: monthsShort,\n        weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n        weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),\n        weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[dnes o] LT',\n            nextDay: '[zajtra o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [o] LT';\n                    case 3:\n                        return '[v stredu o] LT';\n                    case 4:\n                        return '[vo štvrtok o] LT';\n                    case 5:\n                        return '[v piatok o] LT';\n                    case 6:\n                        return '[v sobotu o] LT';\n                }\n            },\n            lastDay: '[včera o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulú nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[minulý] dddd [o] LT';\n                    case 3:\n                        return '[minulú stredu o] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [o] LT';\n                    case 6:\n                        return '[minulú sobotu o] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'pred %s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Slovenian [sl]\n//! author : Robert Sedovšek : https://github.com/sedovsek\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture\n                    ? 'nekaj sekund'\n                    : 'nekaj sekundami';\n            case 'ss':\n                if (number === 1) {\n                    result += withoutSuffix ? 'sekundo' : 'sekundi';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n                } else {\n                    result += 'sekund';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'ena minuta' : 'eno minuto';\n            case 'mm':\n                if (number === 1) {\n                    result += withoutSuffix ? 'minuta' : 'minuto';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'ena ura' : 'eno uro';\n            case 'hh':\n                if (number === 1) {\n                    result += withoutSuffix ? 'ura' : 'uro';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'uri' : 'urama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'ure' : 'urami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'ur' : 'urami';\n                }\n                return result;\n            case 'd':\n                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n            case 'dd':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n                } else {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n                }\n                return result;\n            case 'M':\n                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n            case 'MM':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n                } else {\n                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n                }\n                return result;\n            case 'y':\n                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n            case 'yy':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'leto' : 'letom';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'leta' : 'leti';\n                } else {\n                    result += withoutSuffix || isFuture ? 'let' : 'leti';\n                }\n                return result;\n        }\n    }\n\n    var sl = moment.defineLocale('sl', {\n        months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n        weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n        weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD. MM. YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danes ob] LT',\n            nextDay: '[jutri ob] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[v] [sredo] [ob] LT';\n                    case 6:\n                        return '[v] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[v] dddd [ob] LT';\n                }\n            },\n            lastDay: '[včeraj ob] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prejšnjo] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[prejšnjo] [sredo] [ob] LT';\n                    case 6:\n                        return '[prejšnjo] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prejšnji] dddd [ob] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'čez %s',\n            past: 'pred %s',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return sl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Albanian [sq]\n//! author : Flakërim Ismani : https://github.com/flakerimi\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Oerd Cukalla : https://github.com/oerd\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var sq = moment.defineLocale('sq', {\n        months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n        weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split(\n            '_'\n        ),\n        weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n        weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),\n        weekdaysParseExact: true,\n        meridiemParse: /PD|MD/,\n        isPM: function (input) {\n            return input.charAt(0) === 'M';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            return hours < 12 ? 'PD' : 'MD';\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Sot në] LT',\n            nextDay: '[Nesër në] LT',\n            nextWeek: 'dddd [në] LT',\n            lastDay: '[Dje në] LT',\n            lastWeek: 'dddd [e kaluar në] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'në %s',\n            past: '%s më parë',\n            s: 'disa sekonda',\n            ss: '%d sekonda',\n            m: 'një minutë',\n            mm: '%d minuta',\n            h: 'një orë',\n            hh: '%d orë',\n            d: 'një ditë',\n            dd: '%d ditë',\n            M: 'një muaj',\n            MM: '%d muaj',\n            y: 'një vit',\n            yy: '%d vite',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sq;\n\n})));\n","//! moment.js locale configuration\n//! locale : Serbian [sr]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['sekunda', 'sekunde', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            d: ['jedan dan', 'jednog dana'],\n            dd: ['dan', 'dana', 'dana'],\n            M: ['jedan mesec', 'jednog meseca'],\n            MM: ['mesec', 'meseca', 'meseci'],\n            y: ['jednu godinu', 'jedne godine'],\n            yy: ['godinu', 'godine', 'godina'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            if (\n                number % 10 >= 1 &&\n                number % 10 <= 4 &&\n                (number % 100 < 10 || number % 100 >= 20)\n            ) {\n                return number % 10 === 1 ? wordKey[0] : wordKey[1];\n            }\n            return wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key, isFuture) {\n            var wordKey = translator.words[key],\n                word;\n\n            if (key.length === 1) {\n                // Nominativ\n                if (key === 'y' && withoutSuffix) return 'jedna godina';\n                return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];\n            }\n\n            word = translator.correctGrammaticalCase(number, wordKey);\n            // Nominativ\n            if (key === 'yy' && withoutSuffix && word === 'godinu') {\n                return number + ' godina';\n            }\n\n            return number + ' ' + word;\n        },\n    };\n\n    var sr = moment.defineLocale('sr', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D. M. YYYY.',\n            LL: 'D. MMMM YYYY.',\n            LLL: 'D. MMMM YYYY. H:mm',\n            LLLL: 'dddd, D. MMMM YYYY. H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedelju] [u] LT';\n                    case 3:\n                        return '[u] [sredu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[juče u] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[prošle] [nedelje] [u] LT',\n                    '[prošlog] [ponedeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'pre %s',\n            s: 'nekoliko sekundi',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: translator.translate,\n            dd: translator.translate,\n            M: translator.translate,\n            MM: translator.translate,\n            y: translator.translate,\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return sr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Serbian Cyrillic [sr-cyrl]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['секунда', 'секунде', 'секунди'],\n            m: ['један минут', 'једног минута'],\n            mm: ['минут', 'минута', 'минута'],\n            h: ['један сат', 'једног сата'],\n            hh: ['сат', 'сата', 'сати'],\n            d: ['један дан', 'једног дана'],\n            dd: ['дан', 'дана', 'дана'],\n            M: ['један месец', 'једног месеца'],\n            MM: ['месец', 'месеца', 'месеци'],\n            y: ['једну годину', 'једне године'],\n            yy: ['годину', 'године', 'година'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            if (\n                number % 10 >= 1 &&\n                number % 10 <= 4 &&\n                (number % 100 < 10 || number % 100 >= 20)\n            ) {\n                return number % 10 === 1 ? wordKey[0] : wordKey[1];\n            }\n            return wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key, isFuture) {\n            var wordKey = translator.words[key],\n                word;\n\n            if (key.length === 1) {\n                // Nominativ\n                if (key === 'y' && withoutSuffix) return 'једна година';\n                return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];\n            }\n\n            word = translator.correctGrammaticalCase(number, wordKey);\n            // Nominativ\n            if (key === 'yy' && withoutSuffix && word === 'годину') {\n                return number + ' година';\n            }\n\n            return number + ' ' + word;\n        },\n    };\n\n    var srCyrl = moment.defineLocale('sr-cyrl', {\n        months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split(\n            '_'\n        ),\n        monthsShort:\n            'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n        weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n        weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D. M. YYYY.',\n            LL: 'D. MMMM YYYY.',\n            LLL: 'D. MMMM YYYY. H:mm',\n            LLLL: 'dddd, D. MMMM YYYY. H:mm',\n        },\n        calendar: {\n            sameDay: '[данас у] LT',\n            nextDay: '[сутра у] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[у] [недељу] [у] LT';\n                    case 3:\n                        return '[у] [среду] [у] LT';\n                    case 6:\n                        return '[у] [суботу] [у] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[у] dddd [у] LT';\n                }\n            },\n            lastDay: '[јуче у] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[прошле] [недеље] [у] LT',\n                    '[прошлог] [понедељка] [у] LT',\n                    '[прошлог] [уторка] [у] LT',\n                    '[прошле] [среде] [у] LT',\n                    '[прошлог] [четвртка] [у] LT',\n                    '[прошлог] [петка] [у] LT',\n                    '[прошле] [суботе] [у] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: 'пре %s',\n            s: 'неколико секунди',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: translator.translate,\n            dd: translator.translate,\n            M: translator.translate,\n            MM: translator.translate,\n            y: translator.translate,\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return srCyrl;\n\n})));\n","//! moment.js locale configuration\n//! locale : siSwati [ss]\n//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ss = moment.defineLocale('ss', {\n        months: \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split(\n            '_'\n        ),\n        monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n        weekdays:\n            'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(\n                '_'\n            ),\n        weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n        weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Namuhla nga] LT',\n            nextDay: '[Kusasa nga] LT',\n            nextWeek: 'dddd [nga] LT',\n            lastDay: '[Itolo nga] LT',\n            lastWeek: 'dddd [leliphelile] [nga] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'nga %s',\n            past: 'wenteka nga %s',\n            s: 'emizuzwana lomcane',\n            ss: '%d mzuzwana',\n            m: 'umzuzu',\n            mm: '%d emizuzu',\n            h: 'lihora',\n            hh: '%d emahora',\n            d: 'lilanga',\n            dd: '%d emalanga',\n            M: 'inyanga',\n            MM: '%d tinyanga',\n            y: 'umnyaka',\n            yy: '%d iminyaka',\n        },\n        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'ekuseni';\n            } else if (hours < 15) {\n                return 'emini';\n            } else if (hours < 19) {\n                return 'entsambama';\n            } else {\n                return 'ebusuku';\n            }\n        },\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ekuseni') {\n                return hour;\n            } else if (meridiem === 'emini') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n                if (hour === 0) {\n                    return 0;\n                }\n                return hour + 12;\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: '%d',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ss;\n\n})));\n","//! moment.js locale configuration\n//! locale : Swedish [sv]\n//! author : Jens Alm : https://github.com/ulmus\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var sv = moment.defineLocale('sv', {\n        months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n        weekdaysShort: 'sön_mån_tis_ons_tors_fre_lör'.split('_'),\n        weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [kl.] HH:mm',\n            LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Idag] LT',\n            nextDay: '[Imorgon] LT',\n            lastDay: '[Igår] LT',\n            nextWeek: '[På] dddd LT',\n            lastWeek: '[I] dddd[s] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: 'för %s sedan',\n            s: 'några sekunder',\n            ss: '%d sekunder',\n            m: 'en minut',\n            mm: '%d minuter',\n            h: 'en timme',\n            hh: '%d timmar',\n            d: 'en dag',\n            dd: '%d dagar',\n            M: 'en månad',\n            MM: '%d månader',\n            y: 'ett år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(\\:e|\\:a)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? ':e'\n                        : b === 1\n                          ? ':a'\n                          : b === 2\n                            ? ':a'\n                            : b === 3\n                              ? ':e'\n                              : ':e';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Swahili [sw]\n//! author : Fahad Kassim : https://github.com/fadsel\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var relativeTime = {\n        ss: 'sekunde %d',\n        m: 'dakika moja',\n        mm: 'dakika %d',\n        h: 'saa moja',\n        hh: 'saa %d',\n        d: 'siku moja',\n        dd: 'siku %d',\n        M: 'mwezi mmoja',\n        MM: 'miezi %d',\n        y: 'mwaka mmoja',\n        yy: 'miaka %d',\n    };\n\n    function relativeTimeWithSuffix(number, withoutSuffix, key, isFuture) {\n        var output = relativeTime[key].replace(/%d/i, number);\n\n        if (withoutSuffix || isFuture) {\n            return output;\n        }\n\n        switch (key) {\n            case 'ss':\n            case 'mm':\n            case 'hh':\n            case 'dd':\n                return output + (number === 1 ? ' iliyopita' : ' zilizopita');\n            case 'm':\n            case 'h':\n            case 'd':\n                return output + ' iliyopita';\n            case 'M':\n            case 'y':\n                return output + ' uliopita';\n            case 'MM':\n            case 'yy':\n                return output + ' iliyopita';\n        }\n    }\n\n    var sw = moment.defineLocale('sw', {\n        months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n        weekdays:\n            'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(\n                '_'\n            ),\n        weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n        weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'hh:mm A',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[leo saa] LT',\n            nextDay: '[kesho saa] LT',\n            nextWeek: 'dddd [ijayo saa] LT',\n            lastDay: '[jana] LT',\n            lastWeek: 'dddd [iliyopita saa] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s baadaye',\n            past: function (output) {\n                return output === 'hivi punde' ? 'tokea ' + output : output;\n            },\n            s: 'hivi punde',\n            ss: relativeTimeWithSuffix,\n            m: relativeTimeWithSuffix,\n            mm: relativeTimeWithSuffix,\n            h: relativeTimeWithSuffix,\n            hh: relativeTimeWithSuffix,\n            d: relativeTimeWithSuffix,\n            dd: relativeTimeWithSuffix,\n            M: relativeTimeWithSuffix,\n            MM: relativeTimeWithSuffix,\n            y: relativeTimeWithSuffix,\n            yy: relativeTimeWithSuffix,\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return sw;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tamil [ta]\n//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '௧',\n            2: '௨',\n            3: '௩',\n            4: '௪',\n            5: '௫',\n            6: '௬',\n            7: '௭',\n            8: '௮',\n            9: '௯',\n            0: '௦',\n        },\n        numberMap = {\n            '௧': '1',\n            '௨': '2',\n            '௩': '3',\n            '௪': '4',\n            '௫': '5',\n            '௬': '6',\n            '௭': '7',\n            '௮': '8',\n            '௯': '9',\n            '௦': '0',\n        };\n\n    var ta = moment.defineLocale('ta', {\n        months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n            '_'\n        ),\n        monthsShort:\n            'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n                '_'\n            ),\n        weekdays:\n            'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split(\n                '_'\n            ),\n        weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split(\n            '_'\n        ),\n        weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, HH:mm',\n            LLLL: 'dddd, D MMMM YYYY, HH:mm',\n        },\n        calendar: {\n            sameDay: '[இன்று] LT',\n            nextDay: '[நாளை] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[நேற்று] LT',\n            lastWeek: '[கடந்த வாரம்] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s இல்',\n            past: '%s முன்',\n            s: 'ஒரு சில விநாடிகள்',\n            ss: '%d விநாடிகள்',\n            m: 'ஒரு நிமிடம்',\n            mm: '%d நிமிடங்கள்',\n            h: 'ஒரு மணி நேரம்',\n            hh: '%d மணி நேரம்',\n            d: 'ஒரு நாள்',\n            dd: '%d நாட்கள்',\n            M: 'ஒரு மாதம்',\n            MM: '%d மாதங்கள்',\n            y: 'ஒரு வருடம்',\n            yy: '%d ஆண்டுகள்',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n        ordinal: function (number) {\n            return number + 'வது';\n        },\n        preparse: function (string) {\n            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // refer http://ta.wikipedia.org/s/1er1\n        meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 2) {\n                return ' யாமம்';\n            } else if (hour < 6) {\n                return ' வைகறை'; // வைகறை\n            } else if (hour < 10) {\n                return ' காலை'; // காலை\n            } else if (hour < 14) {\n                return ' நண்பகல்'; // நண்பகல்\n            } else if (hour < 18) {\n                return ' எற்பாடு'; // எற்பாடு\n            } else if (hour < 22) {\n                return ' மாலை'; // மாலை\n            } else {\n                return ' யாமம்';\n            }\n        },\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'யாமம்') {\n                return hour < 2 ? hour : hour + 12;\n            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n                return hour;\n            } else if (meridiem === 'நண்பகல்') {\n                return hour >= 10 ? hour : hour + 12;\n            } else {\n                return hour + 12;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return ta;\n\n})));\n","//! moment.js locale configuration\n//! locale : Telugu [te]\n//! author : Krishna Chaitanya Thota : https://github.com/kcthota\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var te = moment.defineLocale('te', {\n        months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split(\n            '_'\n        ),\n        monthsShort:\n            'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split(\n                '_'\n            ),\n        weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n        weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[నేడు] LT',\n            nextDay: '[రేపు] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[నిన్న] LT',\n            lastWeek: '[గత] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s లో',\n            past: '%s క్రితం',\n            s: 'కొన్ని క్షణాలు',\n            ss: '%d సెకన్లు',\n            m: 'ఒక నిమిషం',\n            mm: '%d నిమిషాలు',\n            h: 'ఒక గంట',\n            hh: '%d గంటలు',\n            d: 'ఒక రోజు',\n            dd: '%d రోజులు',\n            M: 'ఒక నెల',\n            MM: '%d నెలలు',\n            y: 'ఒక సంవత్సరం',\n            yy: '%d సంవత్సరాలు',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}వ/,\n        ordinal: '%dవ',\n        meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'రాత్రి') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ఉదయం') {\n                return hour;\n            } else if (meridiem === 'మధ్యాహ్నం') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'సాయంత్రం') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'రాత్రి';\n            } else if (hour < 10) {\n                return 'ఉదయం';\n            } else if (hour < 17) {\n                return 'మధ్యాహ్నం';\n            } else if (hour < 20) {\n                return 'సాయంత్రం';\n            } else {\n                return 'రాత్రి';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return te;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tetun Dili (East Timor) [tet]\n//! author : Joshua Brooks : https://github.com/joshbrooks\n//! author : Onorio De J. Afonso : https://github.com/marobo\n//! author : Sonia Simoes : https://github.com/soniasimoes\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tet = moment.defineLocale('tet', {\n        months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n        weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n        weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Ohin iha] LT',\n            nextDay: '[Aban iha] LT',\n            nextWeek: 'dddd [iha] LT',\n            lastDay: '[Horiseik iha] LT',\n            lastWeek: 'dddd [semana kotuk] [iha] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'iha %s',\n            past: '%s liuba',\n            s: 'segundu balun',\n            ss: 'segundu %d',\n            m: 'minutu ida',\n            mm: 'minutu %d',\n            h: 'oras ida',\n            hh: 'oras %d',\n            d: 'loron ida',\n            dd: 'loron %d',\n            M: 'fulan ida',\n            MM: 'fulan %d',\n            y: 'tinan ida',\n            yy: 'tinan %d',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return tet;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tajik [tg]\n//! author : Orif N. Jr. : https://github.com/orif-jr\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        0: '-ум',\n        1: '-ум',\n        2: '-юм',\n        3: '-юм',\n        4: '-ум',\n        5: '-ум',\n        6: '-ум',\n        7: '-ум',\n        8: '-ум',\n        9: '-ум',\n        10: '-ум',\n        12: '-ум',\n        13: '-ум',\n        20: '-ум',\n        30: '-юм',\n        40: '-ум',\n        50: '-ум',\n        60: '-ум',\n        70: '-ум',\n        80: '-ум',\n        90: '-ум',\n        100: '-ум',\n    };\n\n    var tg = moment.defineLocale('tg', {\n        months: {\n            format: 'январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри'.split(\n                '_'\n            ),\n            standalone:\n                'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split(\n            '_'\n        ),\n        weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n        weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Имрӯз соати] LT',\n            nextDay: '[Фардо соати] LT',\n            lastDay: '[Дирӯз соати] LT',\n            nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT',\n            lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'баъди %s',\n            past: '%s пеш',\n            s: 'якчанд сония',\n            m: 'як дақиқа',\n            mm: '%d дақиқа',\n            h: 'як соат',\n            hh: '%d соат',\n            d: 'як рӯз',\n            dd: '%d рӯз',\n            M: 'як моҳ',\n            MM: '%d моҳ',\n            y: 'як сол',\n            yy: '%d сол',\n        },\n        meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'шаб') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'субҳ') {\n                return hour;\n            } else if (meridiem === 'рӯз') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'бегоҳ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'шаб';\n            } else if (hour < 11) {\n                return 'субҳ';\n            } else if (hour < 16) {\n                return 'рӯз';\n            } else if (hour < 19) {\n                return 'бегоҳ';\n            } else {\n                return 'шаб';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1th is the first week of the year.\n        },\n    });\n\n    return tg;\n\n})));\n","//! moment.js locale configuration\n//! locale : Thai [th]\n//! author : Kridsada Thanabulpong : https://github.com/sirn\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var th = moment.defineLocale('th', {\n        months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split(\n            '_'\n        ),\n        monthsShort:\n            'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n        weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n        weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY เวลา H:mm',\n            LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm',\n        },\n        meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n        isPM: function (input) {\n            return input === 'หลังเที่ยง';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ก่อนเที่ยง';\n            } else {\n                return 'หลังเที่ยง';\n            }\n        },\n        calendar: {\n            sameDay: '[วันนี้ เวลา] LT',\n            nextDay: '[พรุ่งนี้ เวลา] LT',\n            nextWeek: 'dddd[หน้า เวลา] LT',\n            lastDay: '[เมื่อวานนี้ เวลา] LT',\n            lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'อีก %s',\n            past: '%sที่แล้ว',\n            s: 'ไม่กี่วินาที',\n            ss: '%d วินาที',\n            m: '1 นาที',\n            mm: '%d นาที',\n            h: '1 ชั่วโมง',\n            hh: '%d ชั่วโมง',\n            d: '1 วัน',\n            dd: '%d วัน',\n            w: '1 สัปดาห์',\n            ww: '%d สัปดาห์',\n            M: '1 เดือน',\n            MM: '%d เดือน',\n            y: '1 ปี',\n            yy: '%d ปี',\n        },\n    });\n\n    return th;\n\n})));\n","//! moment.js locale configuration\n//! locale : Turkmen [tk]\n//! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        1: \"'inji\",\n        5: \"'inji\",\n        8: \"'inji\",\n        70: \"'inji\",\n        80: \"'inji\",\n        2: \"'nji\",\n        7: \"'nji\",\n        20: \"'nji\",\n        50: \"'nji\",\n        3: \"'ünji\",\n        4: \"'ünji\",\n        100: \"'ünji\",\n        6: \"'njy\",\n        9: \"'unjy\",\n        10: \"'unjy\",\n        30: \"'unjy\",\n        60: \"'ynjy\",\n        90: \"'ynjy\",\n    };\n\n    var tk = moment.defineLocale('tk', {\n        months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'),\n        weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split(\n            '_'\n        ),\n        weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'),\n        weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün sagat] LT',\n            nextDay: '[ertir sagat] LT',\n            nextWeek: '[indiki] dddd [sagat] LT',\n            lastDay: '[düýn] LT',\n            lastWeek: '[geçen] dddd [sagat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s soň',\n            past: '%s öň',\n            s: 'birnäçe sekunt',\n            m: 'bir minut',\n            mm: '%d minut',\n            h: 'bir sagat',\n            hh: '%d sagat',\n            d: 'bir gün',\n            dd: '%d gün',\n            M: 'bir aý',\n            MM: '%d aý',\n            y: 'bir ýyl',\n            yy: '%d ýyl',\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {\n                        // special case for zero\n                        return number + \"'unjy\";\n                    }\n                    var a = number % 10,\n                        b = (number % 100) - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return tk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tagalog (Philippines) [tl-ph]\n//! author : Dan Hagman : https://github.com/hagmandan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tlPh = moment.defineLocale('tl-ph', {\n        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n            '_'\n        ),\n        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n            '_'\n        ),\n        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'MM/D/YYYY',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY HH:mm',\n            LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'sa loob ng %s',\n            past: '%s ang nakalipas',\n            s: 'ilang segundo',\n            ss: '%d segundo',\n            m: 'isang minuto',\n            mm: '%d minuto',\n            h: 'isang oras',\n            hh: '%d oras',\n            d: 'isang araw',\n            dd: '%d araw',\n            M: 'isang buwan',\n            MM: '%d buwan',\n            y: 'isang taon',\n            yy: '%d taon',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return tlPh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Klingon [tlh]\n//! author : Dominika Kruk : https://github.com/amaranthrose\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n    function translateFuture(output) {\n        var time = output;\n        time =\n            output.indexOf('jaj') !== -1\n                ? time.slice(0, -3) + 'leS'\n                : output.indexOf('jar') !== -1\n                  ? time.slice(0, -3) + 'waQ'\n                  : output.indexOf('DIS') !== -1\n                    ? time.slice(0, -3) + 'nem'\n                    : time + ' pIq';\n        return time;\n    }\n\n    function translatePast(output) {\n        var time = output;\n        time =\n            output.indexOf('jaj') !== -1\n                ? time.slice(0, -3) + 'Hu’'\n                : output.indexOf('jar') !== -1\n                  ? time.slice(0, -3) + 'wen'\n                  : output.indexOf('DIS') !== -1\n                    ? time.slice(0, -3) + 'ben'\n                    : time + ' ret';\n        return time;\n    }\n\n    function translate(number, withoutSuffix, string, isFuture) {\n        var numberNoun = numberAsNoun(number);\n        switch (string) {\n            case 'ss':\n                return numberNoun + ' lup';\n            case 'mm':\n                return numberNoun + ' tup';\n            case 'hh':\n                return numberNoun + ' rep';\n            case 'dd':\n                return numberNoun + ' jaj';\n            case 'MM':\n                return numberNoun + ' jar';\n            case 'yy':\n                return numberNoun + ' DIS';\n        }\n    }\n\n    function numberAsNoun(number) {\n        var hundred = Math.floor((number % 1000) / 100),\n            ten = Math.floor((number % 100) / 10),\n            one = number % 10,\n            word = '';\n        if (hundred > 0) {\n            word += numbersNouns[hundred] + 'vatlh';\n        }\n        if (ten > 0) {\n            word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';\n        }\n        if (one > 0) {\n            word += (word !== '' ? ' ' : '') + numbersNouns[one];\n        }\n        return word === '' ? 'pagh' : word;\n    }\n\n    var tlh = moment.defineLocale('tlh', {\n        months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split(\n            '_'\n        ),\n        monthsShort:\n            'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(\n            '_'\n        ),\n        weekdaysShort:\n            'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        weekdaysMin:\n            'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[DaHjaj] LT',\n            nextDay: '[wa’leS] LT',\n            nextWeek: 'LLL',\n            lastDay: '[wa’Hu’] LT',\n            lastWeek: 'LLL',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: translateFuture,\n            past: translatePast,\n            s: 'puS lup',\n            ss: translate,\n            m: 'wa’ tup',\n            mm: translate,\n            h: 'wa’ rep',\n            hh: translate,\n            d: 'wa’ jaj',\n            dd: translate,\n            M: 'wa’ jar',\n            MM: translate,\n            y: 'wa’ DIS',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return tlh;\n\n})));\n","//! moment.js locale configuration\n//! locale : Turkish [tr]\n//! authors : Erhan Gundogan : https://github.com/erhangundogan,\n//!           Burak Yiğit Kaya: https://github.com/BYK\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        1: \"'inci\",\n        5: \"'inci\",\n        8: \"'inci\",\n        70: \"'inci\",\n        80: \"'inci\",\n        2: \"'nci\",\n        7: \"'nci\",\n        20: \"'nci\",\n        50: \"'nci\",\n        3: \"'üncü\",\n        4: \"'üncü\",\n        100: \"'üncü\",\n        6: \"'ncı\",\n        9: \"'uncu\",\n        10: \"'uncu\",\n        30: \"'uncu\",\n        60: \"'ıncı\",\n        90: \"'ıncı\",\n    };\n\n    var tr = moment.defineLocale('tr', {\n        months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split(\n            '_'\n        ),\n        monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n        weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split(\n            '_'\n        ),\n        weekdaysShort: 'Paz_Pzt_Sal_Çar_Per_Cum_Cmt'.split('_'),\n        weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'öö' : 'ÖÖ';\n            } else {\n                return isLower ? 'ös' : 'ÖS';\n            }\n        },\n        meridiemParse: /öö|ÖÖ|ös|ÖS/,\n        isPM: function (input) {\n            return input === 'ös' || input === 'ÖS';\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün saat] LT',\n            nextDay: '[yarın saat] LT',\n            nextWeek: '[gelecek] dddd [saat] LT',\n            lastDay: '[dün] LT',\n            lastWeek: '[geçen] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s sonra',\n            past: '%s önce',\n            s: 'birkaç saniye',\n            ss: '%d saniye',\n            m: 'bir dakika',\n            mm: '%d dakika',\n            h: 'bir saat',\n            hh: '%d saat',\n            d: 'bir gün',\n            dd: '%d gün',\n            w: 'bir hafta',\n            ww: '%d hafta',\n            M: 'bir ay',\n            MM: '%d ay',\n            y: 'bir yıl',\n            yy: '%d yıl',\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {\n                        // special case for zero\n                        return number + \"'ıncı\";\n                    }\n                    var a = number % 10,\n                        b = (number % 100) - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return tr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Talossan [tzl]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n//! author : Iustì Canun\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n    // This is currently too difficult (maybe even impossible) to add.\n    var tzl = moment.defineLocale('tzl', {\n        months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n        weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n        weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n        weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM [dallas] YYYY',\n            LLL: 'D. MMMM [dallas] YYYY HH.mm',\n            LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',\n        },\n        meridiemParse: /d\\'o|d\\'a/i,\n        isPM: function (input) {\n            return \"d'o\" === input.toLowerCase();\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? \"d'o\" : \"D'O\";\n            } else {\n                return isLower ? \"d'a\" : \"D'A\";\n            }\n        },\n        calendar: {\n            sameDay: '[oxhi à] LT',\n            nextDay: '[demà à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[ieiri à] LT',\n            lastWeek: '[sür el] dddd [lasteu à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'osprei %s',\n            past: 'ja%s',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['viensas secunds', \"'iensas secunds\"],\n            ss: [number + ' secunds', '' + number + ' secunds'],\n            m: [\"'n míut\", \"'iens míut\"],\n            mm: [number + ' míuts', '' + number + ' míuts'],\n            h: [\"'n þora\", \"'iensa þora\"],\n            hh: [number + ' þoras', '' + number + ' þoras'],\n            d: [\"'n ziua\", \"'iensa ziua\"],\n            dd: [number + ' ziuas', '' + number + ' ziuas'],\n            M: [\"'n mes\", \"'iens mes\"],\n            MM: [number + ' mesen', '' + number + ' mesen'],\n            y: [\"'n ar\", \"'iens ar\"],\n            yy: [number + ' ars', '' + number + ' ars'],\n        };\n        return isFuture\n            ? format[key][0]\n            : withoutSuffix\n              ? format[key][0]\n              : format[key][1];\n    }\n\n    return tzl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Central Atlas Tamazight [tzm]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tzm = moment.defineLocale('tzm', {\n        months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n                '_'\n            ),\n        weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n            nextWeek: 'dddd [ⴴ] LT',\n            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n            lastWeek: 'dddd [ⴴ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n            past: 'ⵢⴰⵏ %s',\n            s: 'ⵉⵎⵉⴽ',\n            ss: '%d ⵉⵎⵉⴽ',\n            m: 'ⵎⵉⵏⵓⴺ',\n            mm: '%d ⵎⵉⵏⵓⴺ',\n            h: 'ⵙⴰⵄⴰ',\n            hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n            d: 'ⴰⵙⵙ',\n            dd: '%d oⵙⵙⴰⵏ',\n            M: 'ⴰⵢoⵓⵔ',\n            MM: '%d ⵉⵢⵢⵉⵔⵏ',\n            y: 'ⴰⵙⴳⴰⵙ',\n            yy: '%d ⵉⵙⴳⴰⵙⵏ',\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return tzm;\n\n})));\n","//! moment.js locale configuration\n//! locale : Central Atlas Tamazight Latin [tzm-latn]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tzmLatn = moment.defineLocale('tzm-latn', {\n        months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(\n            '_'\n        ),\n        monthsShort:\n            'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(\n                '_'\n            ),\n        weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[asdkh g] LT',\n            nextDay: '[aska g] LT',\n            nextWeek: 'dddd [g] LT',\n            lastDay: '[assant g] LT',\n            lastWeek: 'dddd [g] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dadkh s yan %s',\n            past: 'yan %s',\n            s: 'imik',\n            ss: '%d imik',\n            m: 'minuḍ',\n            mm: '%d minuḍ',\n            h: 'saɛa',\n            hh: '%d tassaɛin',\n            d: 'ass',\n            dd: '%d ossan',\n            M: 'ayowr',\n            MM: '%d iyyirn',\n            y: 'asgas',\n            yy: '%d isgasn',\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return tzmLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Uyghur (China) [ug-cn]\n//! author: boyaq : https://github.com/boyaq\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ugCn = moment.defineLocale('ug-cn', {\n        months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n                '_'\n            ),\n        weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n            '_'\n        ),\n        weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n        },\n        meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                meridiem === 'يېرىم كېچە' ||\n                meridiem === 'سەھەر' ||\n                meridiem === 'چۈشتىن بۇرۇن'\n            ) {\n                return hour;\n            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n                return hour + 12;\n            } else {\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return 'يېرىم كېچە';\n            } else if (hm < 900) {\n                return 'سەھەر';\n            } else if (hm < 1130) {\n                return 'چۈشتىن بۇرۇن';\n            } else if (hm < 1230) {\n                return 'چۈش';\n            } else if (hm < 1800) {\n                return 'چۈشتىن كېيىن';\n            } else {\n                return 'كەچ';\n            }\n        },\n        calendar: {\n            sameDay: '[بۈگۈن سائەت] LT',\n            nextDay: '[ئەتە سائەت] LT',\n            nextWeek: '[كېلەركى] dddd [سائەت] LT',\n            lastDay: '[تۆنۈگۈن] LT',\n            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s كېيىن',\n            past: '%s بۇرۇن',\n            s: 'نەچچە سېكونت',\n            ss: '%d سېكونت',\n            m: 'بىر مىنۇت',\n            mm: '%d مىنۇت',\n            h: 'بىر سائەت',\n            hh: '%d سائەت',\n            d: 'بىر كۈن',\n            dd: '%d كۈن',\n            M: 'بىر ئاي',\n            MM: '%d ئاي',\n            y: 'بىر يىل',\n            yy: '%d يىل',\n        },\n\n        dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '-كۈنى';\n                case 'w':\n                case 'W':\n                    return number + '-ھەپتە';\n                default:\n                    return number;\n            }\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return ugCn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Ukrainian [uk]\n//! author : zemlanin : https://github.com/zemlanin\n//! Author : Menelion Elensúle : https://github.com/Oire\n//! Author : Oleksandr Trukhnii : https://github.com/JohnJunior\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n              ? forms[1]\n              : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n            mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n            hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n            dd: 'день_дні_днів',\n            MM: 'місяць_місяці_місяців',\n            yy: 'рік_роки_років',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвилина' : 'хвилину';\n        } else if (key === 'h') {\n            return withoutSuffix ? 'година' : 'годину';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    function weekdaysCaseReplace(m, format) {\n        var weekdays = {\n                nominative:\n                    'неділя_понеділок_вівторок_середа_четвер_пʼятниця_субота'.split(\n                        '_'\n                    ),\n                accusative:\n                    'неділю_понеділок_вівторок_середу_четвер_пʼятницю_суботу'.split(\n                        '_'\n                    ),\n                genitive:\n                    'неділі_понеділка_вівторка_середи_четверга_пʼятниці_суботи'.split(\n                        '_'\n                    ),\n            },\n            nounCase;\n\n        if (m === true) {\n            return weekdays['nominative']\n                .slice(1, 7)\n                .concat(weekdays['nominative'].slice(0, 1));\n        }\n        if (!m) {\n            return weekdays['nominative'];\n        }\n\n        nounCase = /(\\[[ВвУу]\\]) ?dddd/.test(format)\n            ? 'accusative'\n            : /\\[?(?:минулої|наступної)? ?\\] ?dddd/.test(format)\n              ? 'genitive'\n              : 'nominative';\n        return weekdays[nounCase][m.day()];\n    }\n    function processHoursFunction(str) {\n        return function () {\n            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n        };\n    }\n\n    var uk = moment.defineLocale('uk', {\n        months: {\n            format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split(\n                '_'\n            ),\n            standalone:\n                'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split(\n            '_'\n        ),\n        weekdays: weekdaysCaseReplace,\n        weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY р.',\n            LLL: 'D MMMM YYYY р., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY р., HH:mm',\n        },\n        calendar: {\n            sameDay: processHoursFunction('[Сьогодні '),\n            nextDay: processHoursFunction('[Завтра '),\n            lastDay: processHoursFunction('[Вчора '),\n            nextWeek: processHoursFunction('[У] dddd ['),\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return processHoursFunction('[Минулої] dddd [').call(this);\n                    case 1:\n                    case 2:\n                    case 4:\n                        return processHoursFunction('[Минулого] dddd [').call(this);\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: '%s тому',\n            s: 'декілька секунд',\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: 'годину',\n            hh: relativeTimeWithPlural,\n            d: 'день',\n            dd: relativeTimeWithPlural,\n            M: 'місяць',\n            MM: relativeTimeWithPlural,\n            y: 'рік',\n            yy: relativeTimeWithPlural,\n        },\n        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n        meridiemParse: /ночі|ранку|дня|вечора/,\n        isPM: function (input) {\n            return /^(дня|вечора)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночі';\n            } else if (hour < 12) {\n                return 'ранку';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечора';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return uk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Urdu [ur]\n//! author : Sawood Alam : https://github.com/ibnesayeed\n//! author : Zack : https://github.com/ZackVision\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'جنوری',\n            'فروری',\n            'مارچ',\n            'اپریل',\n            'مئی',\n            'جون',\n            'جولائی',\n            'اگست',\n            'ستمبر',\n            'اکتوبر',\n            'نومبر',\n            'دسمبر',\n        ],\n        days = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];\n\n    var ur = moment.defineLocale('ur', {\n        months: months,\n        monthsShort: months,\n        weekdays: days,\n        weekdaysShort: days,\n        weekdaysMin: days,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd، D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /صبح|شام/,\n        isPM: function (input) {\n            return 'شام' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar: {\n            sameDay: '[آج بوقت] LT',\n            nextDay: '[کل بوقت] LT',\n            nextWeek: 'dddd [بوقت] LT',\n            lastDay: '[گذشتہ روز بوقت] LT',\n            lastWeek: '[گذشتہ] dddd [بوقت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s بعد',\n            past: '%s قبل',\n            s: 'چند سیکنڈ',\n            ss: '%d سیکنڈ',\n            m: 'ایک منٹ',\n            mm: '%d منٹ',\n            h: 'ایک گھنٹہ',\n            hh: '%d گھنٹے',\n            d: 'ایک دن',\n            dd: '%d دن',\n            M: 'ایک ماہ',\n            MM: '%d ماہ',\n            y: 'ایک سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ur;\n\n})));\n","//! moment.js locale configuration\n//! locale : Uzbek [uz]\n//! author : Sardor Muminov : https://github.com/muminoff\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var uz = moment.defineLocale('uz', {\n        months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n            '_'\n        ),\n        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n        weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n        weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'D MMMM YYYY, dddd HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бугун соат] LT [да]',\n            nextDay: '[Эртага] LT [да]',\n            nextWeek: 'dddd [куни соат] LT [да]',\n            lastDay: '[Кеча соат] LT [да]',\n            lastWeek: '[Утган] dddd [куни соат] LT [да]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'Якин %s ичида',\n            past: '%s олдин',\n            s: 'фурсат',\n            ss: '%d фурсат',\n            m: 'бир дакика',\n            mm: '%d дакика',\n            h: 'бир соат',\n            hh: '%d соат',\n            d: 'бир кун',\n            dd: '%d кун',\n            M: 'бир ой',\n            MM: '%d ой',\n            y: 'бир йил',\n            yy: '%d йил',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return uz;\n\n})));\n","//! moment.js locale configuration\n//! locale : Uzbek Latin [uz-latn]\n//! author : Rasulbek Mirzayev : github.com/Rasulbeeek\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var uzLatn = moment.defineLocale('uz-latn', {\n        months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n        weekdays:\n            'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(\n                '_'\n            ),\n        weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n        weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'D MMMM YYYY, dddd HH:mm',\n        },\n        calendar: {\n            sameDay: '[Bugun soat] LT [da]',\n            nextDay: '[Ertaga] LT [da]',\n            nextWeek: 'dddd [kuni soat] LT [da]',\n            lastDay: '[Kecha soat] LT [da]',\n            lastWeek: \"[O'tgan] dddd [kuni soat] LT [da]\",\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'Yaqin %s ichida',\n            past: '%s oldin',\n            s: 'soniya',\n            ss: '%d soniya',\n            m: 'bir daqiqa',\n            mm: '%d daqiqa',\n            h: 'bir soat',\n            hh: '%d soat',\n            d: 'bir kun',\n            dd: '%d kun',\n            M: 'bir oy',\n            MM: '%d oy',\n            y: 'bir yil',\n            yy: '%d yil',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return uzLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Vietnamese [vi]\n//! author : Bang Nguyen : https://github.com/bangnk\n//! author : Chien Kira : https://github.com/chienkira\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var vi = moment.defineLocale('vi', {\n        months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split(\n            '_'\n        ),\n        monthsShort:\n            'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split(\n            '_'\n        ),\n        weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysParseExact: true,\n        meridiemParse: /sa|ch/i,\n        isPM: function (input) {\n            return /^ch$/i.test(input);\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'sa' : 'SA';\n            } else {\n                return isLower ? 'ch' : 'CH';\n            }\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [năm] YYYY',\n            LLL: 'D MMMM [năm] YYYY HH:mm',\n            LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',\n            l: 'DD/M/YYYY',\n            ll: 'D MMM YYYY',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd, D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hôm nay lúc] LT',\n            nextDay: '[Ngày mai lúc] LT',\n            nextWeek: 'dddd [tuần tới lúc] LT',\n            lastDay: '[Hôm qua lúc] LT',\n            lastWeek: 'dddd [tuần trước lúc] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s tới',\n            past: '%s trước',\n            s: 'vài giây',\n            ss: '%d giây',\n            m: 'một phút',\n            mm: '%d phút',\n            h: 'một giờ',\n            hh: '%d giờ',\n            d: 'một ngày',\n            dd: '%d ngày',\n            w: 'một tuần',\n            ww: '%d tuần',\n            M: 'một tháng',\n            MM: '%d tháng',\n            y: 'một năm',\n            yy: '%d năm',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return vi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Pseudo [x-pseudo]\n//! author : Andrew Hood : https://github.com/andrewhood125\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var xPseudo = moment.defineLocale('x-pseudo', {\n        months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split(\n            '_'\n        ),\n        monthsShort:\n            'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split(\n                '_'\n            ),\n        weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n        weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[T~ódá~ý át] LT',\n            nextDay: '[T~ómó~rró~w át] LT',\n            nextWeek: 'dddd [át] LT',\n            lastDay: '[Ý~ést~érdá~ý át] LT',\n            lastWeek: '[L~ást] dddd [át] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'í~ñ %s',\n            past: '%s á~gó',\n            s: 'á ~féw ~sécó~ñds',\n            ss: '%d s~écóñ~ds',\n            m: 'á ~míñ~úté',\n            mm: '%d m~íñú~tés',\n            h: 'á~ñ hó~úr',\n            hh: '%d h~óúrs',\n            d: 'á ~dáý',\n            dd: '%d d~áýs',\n            M: 'á ~móñ~th',\n            MM: '%d m~óñt~hs',\n            y: 'á ~ýéár',\n            yy: '%d ý~éárs',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return xPseudo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Yoruba Nigeria [yo]\n//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var yo = moment.defineLocale('yo', {\n        months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split(\n            '_'\n        ),\n        monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n        weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n        weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n        weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Ònì ni] LT',\n            nextDay: '[Ọ̀la ni] LT',\n            nextWeek: \"dddd [Ọsẹ̀ tón'bọ] [ni] LT\",\n            lastDay: '[Àna ni] LT',\n            lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ní %s',\n            past: '%s kọjá',\n            s: 'ìsẹjú aayá die',\n            ss: 'aayá %d',\n            m: 'ìsẹjú kan',\n            mm: 'ìsẹjú %d',\n            h: 'wákati kan',\n            hh: 'wákati %d',\n            d: 'ọjọ́ kan',\n            dd: 'ọjọ́ %d',\n            M: 'osù kan',\n            MM: 'osù %d',\n            y: 'ọdún kan',\n            yy: 'ọdún %d',\n        },\n        dayOfMonthOrdinalParse: /ọjọ́\\s\\d{1,2}/,\n        ordinal: 'ọjọ́ %d',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return yo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (China) [zh-cn]\n//! author : suupic : https://github.com/suupic\n//! author : Zeno Zeng : https://github.com/zenozeng\n//! author : uu109 : https://github.com/uu109\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhCn = moment.defineLocale('zh-cn', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日Ah点mm分',\n            LLLL: 'YYYY年M月D日ddddAh点mm分',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            } else {\n                // '中午'\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天]LT',\n            nextDay: '[明天]LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    return '[下]dddLT';\n                } else {\n                    return '[本]dddLT';\n                }\n            },\n            lastDay: '[昨天]LT',\n            lastWeek: function (now) {\n                if (this.week() !== now.week()) {\n                    return '[上]dddLT';\n                } else {\n                    return '[本]dddLT';\n                }\n            },\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '周';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s后',\n            past: '%s前',\n            s: '几秒',\n            ss: '%d 秒',\n            m: '1 分钟',\n            mm: '%d 分钟',\n            h: '1 小时',\n            hh: '%d 小时',\n            d: '1 天',\n            dd: '%d 天',\n            w: '1 周',\n            ww: '%d 周',\n            M: '1 个月',\n            MM: '%d 个月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return zhCn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Hong Kong) [zh-hk]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Konstantin : https://github.com/skfd\n//! author : Anthony : https://github.com/anthonylau\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhHk = moment.defineLocale('zh-hk', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1200) {\n                return '上午';\n            } else if (hm === 1200) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天]LT',\n            nextDay: '[明天]LT',\n            nextWeek: '[下]ddddLT',\n            lastDay: '[昨天]LT',\n            lastWeek: '[上]ddddLT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    return zhHk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Macau) [zh-mo]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Tan Yuanhong : https://github.com/le0tan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhMo = moment.defineLocale('zh-mo', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'D/M/YYYY',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天] LT',\n            nextDay: '[明天] LT',\n            nextWeek: '[下]dddd LT',\n            lastDay: '[昨天] LT',\n            lastWeek: '[上]dddd LT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s內',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    return zhMo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Taiwan) [zh-tw]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhTw = moment.defineLocale('zh-tw', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天] LT',\n            nextDay: '[明天] LT',\n            nextWeek: '[下]dddd LT',\n            lastDay: '[昨天] LT',\n            lastWeek: '[上]dddd LT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    return zhTw;\n\n})));\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n/* eslint-disable max-depth, max-statements, complexity, max-lines-per-function */\nvar SLASH = 47;\nvar DOT = 46;\nvar assertPath = function assertPath(path) {\n  var t = _typeof(path);\n  if (t !== 'string') {\n    throw new TypeError(\"Expected a string, got a \".concat(t));\n  }\n};\n\n// this function is directly from node source\nvar posixNormalize = function posixNormalize(path, allowAboveRoot) {\n  var res = '';\n  var lastSegmentLength = 0;\n  var lastSlash = -1;\n  var dots = 0;\n  var code;\n  for (var i = 0; i <= path.length; ++i) {\n    if (i < path.length) {\n      code = path.charCodeAt(i);\n    } else if (code === SLASH) {\n      break;\n    } else {\n      code = SLASH;\n    }\n    if (code === SLASH) {\n      if (lastSlash === i - 1 || dots === 1) {\n        // NOOP\n      } else if (lastSlash !== i - 1 && dots === 2) {\n        if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== DOT || res.charCodeAt(res.length - 2) !== DOT) {\n          if (res.length > 2) {\n            var lastSlashIndex = res.lastIndexOf('/');\n            if (lastSlashIndex !== res.length - 1) {\n              if (lastSlashIndex === -1) {\n                res = '';\n                lastSegmentLength = 0;\n              } else {\n                res = res.slice(0, lastSlashIndex);\n                lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n              }\n              lastSlash = i;\n              dots = 0;\n              continue;\n            }\n          } else if (res.length === 2 || res.length === 1) {\n            res = '';\n            lastSegmentLength = 0;\n            lastSlash = i;\n            dots = 0;\n            continue;\n          }\n        }\n        if (allowAboveRoot) {\n          if (res.length > 0) {\n            res += '/..';\n          } else {\n            res = '..';\n          }\n          lastSegmentLength = 2;\n        }\n      } else {\n        if (res.length > 0) {\n          res += '/' + path.slice(lastSlash + 1, i);\n        } else {\n          res = path.slice(lastSlash + 1, i);\n        }\n        lastSegmentLength = i - lastSlash - 1;\n      }\n      lastSlash = i;\n      dots = 0;\n    } else if (code === DOT && dots !== -1) {\n      ++dots;\n    } else {\n      dots = -1;\n    }\n  }\n  return res;\n};\nvar decode = function decode(s) {\n  try {\n    return decodeURIComponent(s);\n  } catch (_unused) {\n    return s;\n  }\n};\nvar normalize = function normalize(p) {\n  assertPath(p);\n  var path = p;\n  if (path.length === 0) {\n    return '.';\n  }\n  var isAbsolute = path.charCodeAt(0) === SLASH;\n  var trailingSeparator = path.charCodeAt(path.length - 1) === SLASH;\n  path = decode(path);\n  path = posixNormalize(path, !isAbsolute);\n  if (path.length === 0 && !isAbsolute) {\n    path = '.';\n  }\n  if (path.length > 0 && trailingSeparator) {\n    path += '/';\n  }\n  if (isAbsolute) {\n    return '/' + path;\n  }\n  return path;\n};\nvar _default = normalize;\nexports[\"default\"] = _default;\nmodule.exports = exports.default;\n","const Utils = require('./utils')\nconst ECCode = require('./error-correction-code')\nconst ECLevel = require('./error-correction-level')\nconst Mode = require('./mode')\nconst VersionCheck = require('./version-check')\n\n// Generator polynomial used to encode version information\nconst G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)\nconst G18_BCH = Utils.getBCHDigit(G18)\n\nfunction getBestVersionForDataLength (mode, length, errorCorrectionLevel) {\n  for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n    if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {\n      return currentVersion\n    }\n  }\n\n  return undefined\n}\n\nfunction getReservedBitsCount (mode, version) {\n  // Character count indicator + mode indicator bits\n  return Mode.getCharCountIndicator(mode, version) + 4\n}\n\nfunction getTotalBitsFromDataArray (segments, version) {\n  let totalBits = 0\n\n  segments.forEach(function (data) {\n    const reservedBits = getReservedBitsCount(data.mode, version)\n    totalBits += reservedBits + data.getBitsLength()\n  })\n\n  return totalBits\n}\n\nfunction getBestVersionForMixedData (segments, errorCorrectionLevel) {\n  for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n    const length = getTotalBitsFromDataArray(segments, currentVersion)\n    if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {\n      return currentVersion\n    }\n  }\n\n  return undefined\n}\n\n/**\n * Returns version number from a value.\n * If value is not a valid version, returns defaultValue\n *\n * @param  {Number|String} value        QR Code version\n * @param  {Number}        defaultValue Fallback value\n * @return {Number}                     QR Code version number\n */\nexports.from = function from (value, defaultValue) {\n  if (VersionCheck.isValid(value)) {\n    return parseInt(value, 10)\n  }\n\n  return defaultValue\n}\n\n/**\n * Returns how much data can be stored with the specified QR code version\n * and error correction level\n *\n * @param  {Number} version              QR Code version (1-40)\n * @param  {Number} errorCorrectionLevel Error correction level\n * @param  {Mode}   mode                 Data mode\n * @return {Number}                      Quantity of storable data\n */\nexports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode) {\n  if (!VersionCheck.isValid(version)) {\n    throw new Error('Invalid QR Code version')\n  }\n\n  // Use Byte mode as default\n  if (typeof mode === 'undefined') mode = Mode.BYTE\n\n  // Total codewords for this QR code version (Data + Error correction)\n  const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n  // Total number of error correction codewords\n  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n  // Total number of data codewords\n  const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n  if (mode === Mode.MIXED) return dataTotalCodewordsBits\n\n  const usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)\n\n  // Return max number of storable codewords\n  switch (mode) {\n    case Mode.NUMERIC:\n      return Math.floor((usableBits / 10) * 3)\n\n    case Mode.ALPHANUMERIC:\n      return Math.floor((usableBits / 11) * 2)\n\n    case Mode.KANJI:\n      return Math.floor(usableBits / 13)\n\n    case Mode.BYTE:\n    default:\n      return Math.floor(usableBits / 8)\n  }\n}\n\n/**\n * Returns the minimum version needed to contain the amount of data\n *\n * @param  {Segment} data                    Segment of data\n * @param  {Number} [errorCorrectionLevel=H] Error correction level\n * @param  {Mode} mode                       Data mode\n * @return {Number}                          QR Code version\n */\nexports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {\n  let seg\n\n  const ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)\n\n  if (Array.isArray(data)) {\n    if (data.length > 1) {\n      return getBestVersionForMixedData(data, ecl)\n    }\n\n    if (data.length === 0) {\n      return 1\n    }\n\n    seg = data[0]\n  } else {\n    seg = data\n  }\n\n  return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl)\n}\n\n/**\n * Returns version information with relative error correction bits\n *\n * The version information is included in QR Code symbols of version 7 or larger.\n * It consists of an 18-bit sequence containing 6 data bits,\n * with 12 error correction bits calculated using the (18, 6) Golay code.\n *\n * @param  {Number} version QR Code version\n * @return {Number}         Encoded version info bits\n */\nexports.getEncodedBits = function getEncodedBits (version) {\n  if (!VersionCheck.isValid(version) || version < 7) {\n    throw new Error('Invalid QR Code version')\n  }\n\n  let d = version << 12\n\n  while (Utils.getBCHDigit(d) - G18_BCH >= 0) {\n    d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))\n  }\n\n  return (version << 12) | d\n}\n","const Mode = require('./mode')\nconst NumericData = require('./numeric-data')\nconst AlphanumericData = require('./alphanumeric-data')\nconst ByteData = require('./byte-data')\nconst KanjiData = require('./kanji-data')\nconst Regex = require('./regex')\nconst Utils = require('./utils')\nconst dijkstra = require('dijkstrajs')\n\n/**\n * Returns UTF8 byte length\n *\n * @param  {String} str Input string\n * @return {Number}     Number of byte\n */\nfunction getStringByteLength (str) {\n  return unescape(encodeURIComponent(str)).length\n}\n\n/**\n * Get a list of segments of the specified mode\n * from a string\n *\n * @param  {Mode}   mode Segment mode\n * @param  {String} str  String to process\n * @return {Array}       Array of object with segments data\n */\nfunction getSegments (regex, mode, str) {\n  const segments = []\n  let result\n\n  while ((result = regex.exec(str)) !== null) {\n    segments.push({\n      data: result[0],\n      index: result.index,\n      mode: mode,\n      length: result[0].length\n    })\n  }\n\n  return segments\n}\n\n/**\n * Extracts a series of segments with the appropriate\n * modes from a string\n *\n * @param  {String} dataStr Input string\n * @return {Array}          Array of object with segments data\n */\nfunction getSegmentsFromString (dataStr) {\n  const numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)\n  const alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)\n  let byteSegs\n  let kanjiSegs\n\n  if (Utils.isKanjiModeEnabled()) {\n    byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)\n    kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr)\n  } else {\n    byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr)\n    kanjiSegs = []\n  }\n\n  const segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)\n\n  return segs\n    .sort(function (s1, s2) {\n      return s1.index - s2.index\n    })\n    .map(function (obj) {\n      return {\n        data: obj.data,\n        mode: obj.mode,\n        length: obj.length\n      }\n    })\n}\n\n/**\n * Returns how many bits are needed to encode a string of\n * specified length with the specified mode\n *\n * @param  {Number} length String length\n * @param  {Mode} mode     Segment mode\n * @return {Number}        Bit length\n */\nfunction getSegmentBitsLength (length, mode) {\n  switch (mode) {\n    case Mode.NUMERIC:\n      return NumericData.getBitsLength(length)\n    case Mode.ALPHANUMERIC:\n      return AlphanumericData.getBitsLength(length)\n    case Mode.KANJI:\n      return KanjiData.getBitsLength(length)\n    case Mode.BYTE:\n      return ByteData.getBitsLength(length)\n  }\n}\n\n/**\n * Merges adjacent segments which have the same mode\n *\n * @param  {Array} segs Array of object with segments data\n * @return {Array}      Array of object with segments data\n */\nfunction mergeSegments (segs) {\n  return segs.reduce(function (acc, curr) {\n    const prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null\n    if (prevSeg && prevSeg.mode === curr.mode) {\n      acc[acc.length - 1].data += curr.data\n      return acc\n    }\n\n    acc.push(curr)\n    return acc\n  }, [])\n}\n\n/**\n * Generates a list of all possible nodes combination which\n * will be used to build a segments graph.\n *\n * Nodes are divided by groups. Each group will contain a list of all the modes\n * in which is possible to encode the given text.\n *\n * For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.\n * The group for '12345' will contain then 3 objects, one for each\n * possible encoding mode.\n *\n * Each node represents a possible segment.\n *\n * @param  {Array} segs Array of object with segments data\n * @return {Array}      Array of object with segments data\n */\nfunction buildNodes (segs) {\n  const nodes = []\n  for (let i = 0; i < segs.length; i++) {\n    const seg = segs[i]\n\n    switch (seg.mode) {\n      case Mode.NUMERIC:\n        nodes.push([seg,\n          { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length },\n          { data: seg.data, mode: Mode.BYTE, length: seg.length }\n        ])\n        break\n      case Mode.ALPHANUMERIC:\n        nodes.push([seg,\n          { data: seg.data, mode: Mode.BYTE, length: seg.length }\n        ])\n        break\n      case Mode.KANJI:\n        nodes.push([seg,\n          { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n        ])\n        break\n      case Mode.BYTE:\n        nodes.push([\n          { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n        ])\n    }\n  }\n\n  return nodes\n}\n\n/**\n * Builds a graph from a list of nodes.\n * All segments in each node group will be connected with all the segments of\n * the next group and so on.\n *\n * At each connection will be assigned a weight depending on the\n * segment's byte length.\n *\n * @param  {Array} nodes    Array of object with segments data\n * @param  {Number} version QR Code version\n * @return {Object}         Graph of all possible segments\n */\nfunction buildGraph (nodes, version) {\n  const table = {}\n  const graph = { start: {} }\n  let prevNodeIds = ['start']\n\n  for (let i = 0; i < nodes.length; i++) {\n    const nodeGroup = nodes[i]\n    const currentNodeIds = []\n\n    for (let j = 0; j < nodeGroup.length; j++) {\n      const node = nodeGroup[j]\n      const key = '' + i + j\n\n      currentNodeIds.push(key)\n      table[key] = { node: node, lastCount: 0 }\n      graph[key] = {}\n\n      for (let n = 0; n < prevNodeIds.length; n++) {\n        const prevNodeId = prevNodeIds[n]\n\n        if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {\n          graph[prevNodeId][key] =\n            getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) -\n            getSegmentBitsLength(table[prevNodeId].lastCount, node.mode)\n\n          table[prevNodeId].lastCount += node.length\n        } else {\n          if (table[prevNodeId]) table[prevNodeId].lastCount = node.length\n\n          graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) +\n            4 + Mode.getCharCountIndicator(node.mode, version) // switch cost\n        }\n      }\n    }\n\n    prevNodeIds = currentNodeIds\n  }\n\n  for (let n = 0; n < prevNodeIds.length; n++) {\n    graph[prevNodeIds[n]].end = 0\n  }\n\n  return { map: graph, table: table }\n}\n\n/**\n * Builds a segment from a specified data and mode.\n * If a mode is not specified, the more suitable will be used.\n *\n * @param  {String} data             Input data\n * @param  {Mode | String} modesHint Data mode\n * @return {Segment}                 Segment\n */\nfunction buildSingleSegment (data, modesHint) {\n  let mode\n  const bestMode = Mode.getBestModeForData(data)\n\n  mode = Mode.from(modesHint, bestMode)\n\n  // Make sure data can be encoded\n  if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {\n    throw new Error('\"' + data + '\"' +\n      ' cannot be encoded with mode ' + Mode.toString(mode) +\n      '.\\n Suggested mode is: ' + Mode.toString(bestMode))\n  }\n\n  // Use Mode.BYTE if Kanji support is disabled\n  if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {\n    mode = Mode.BYTE\n  }\n\n  switch (mode) {\n    case Mode.NUMERIC:\n      return new NumericData(data)\n\n    case Mode.ALPHANUMERIC:\n      return new AlphanumericData(data)\n\n    case Mode.KANJI:\n      return new KanjiData(data)\n\n    case Mode.BYTE:\n      return new ByteData(data)\n  }\n}\n\n/**\n * Builds a list of segments from an array.\n * Array can contain Strings or Objects with segment's info.\n *\n * For each item which is a string, will be generated a segment with the given\n * string and the more appropriate encoding mode.\n *\n * For each item which is an object, will be generated a segment with the given\n * data and mode.\n * Objects must contain at least the property \"data\".\n * If property \"mode\" is not present, the more suitable mode will be used.\n *\n * @param  {Array} array Array of objects with segments data\n * @return {Array}       Array of Segments\n */\nexports.fromArray = function fromArray (array) {\n  return array.reduce(function (acc, seg) {\n    if (typeof seg === 'string') {\n      acc.push(buildSingleSegment(seg, null))\n    } else if (seg.data) {\n      acc.push(buildSingleSegment(seg.data, seg.mode))\n    }\n\n    return acc\n  }, [])\n}\n\n/**\n * Builds an optimized sequence of segments from a string,\n * which will produce the shortest possible bitstream.\n *\n * @param  {String} data    Input string\n * @param  {Number} version QR Code version\n * @return {Array}          Array of segments\n */\nexports.fromString = function fromString (data, version) {\n  const segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n\n  const nodes = buildNodes(segs)\n  const graph = buildGraph(nodes, version)\n  const path = dijkstra.find_path(graph.map, 'start', 'end')\n\n  const optimizedSegs = []\n  for (let i = 1; i < path.length - 1; i++) {\n    optimizedSegs.push(graph.table[path[i]].node)\n  }\n\n  return exports.fromArray(mergeSegments(optimizedSegs))\n}\n\n/**\n * Splits a string in various segments with the modes which\n * best represent their content.\n * The produced segments are far from being optimized.\n * The output of this function is only used to estimate a QR Code version\n * which may contain the data.\n *\n * @param  {string} data Input string\n * @return {Array}       Array of segments\n */\nexports.rawSplit = function rawSplit (data) {\n  return exports.fromArray(\n    getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n  )\n}\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getInstance = exports.load = void 0;\nvar ReCaptchaInstance_1 = require(\"./ReCaptchaInstance\");\nvar ELoadingState;\n(function (ELoadingState) {\n    ELoadingState[ELoadingState[\"NOT_LOADED\"] = 0] = \"NOT_LOADED\";\n    ELoadingState[ELoadingState[\"LOADING\"] = 1] = \"LOADING\";\n    ELoadingState[ELoadingState[\"LOADED\"] = 2] = \"LOADED\";\n})(ELoadingState || (ELoadingState = {}));\nvar ReCaptchaLoader = (function () {\n    function ReCaptchaLoader() {\n    }\n    ReCaptchaLoader.load = function (siteKey, options) {\n        if (options === void 0) { options = {}; }\n        if (typeof document === \"undefined\") {\n            return Promise.reject(new Error(\"This is a library for the browser!\"));\n        }\n        if (ReCaptchaLoader.getLoadingState() === ELoadingState.LOADED) {\n            if (ReCaptchaLoader.instance.getSiteKey() === siteKey) {\n                return Promise.resolve(ReCaptchaLoader.instance);\n            }\n            else {\n                return Promise.reject(new Error(\"reCAPTCHA already loaded with different site key!\"));\n            }\n        }\n        if (ReCaptchaLoader.getLoadingState() === ELoadingState.LOADING) {\n            if (siteKey !== ReCaptchaLoader.instanceSiteKey) {\n                return Promise.reject(new Error(\"reCAPTCHA already loaded with different site key!\"));\n            }\n            return new Promise(function (resolve, reject) {\n                ReCaptchaLoader.successfulLoadingConsumers.push(function (instance) { return resolve(instance); });\n                ReCaptchaLoader.errorLoadingRunnable.push(function (reason) {\n                    return reject(reason);\n                });\n            });\n        }\n        ReCaptchaLoader.instanceSiteKey = siteKey;\n        ReCaptchaLoader.setLoadingState(ELoadingState.LOADING);\n        var loader = new ReCaptchaLoader();\n        return new Promise(function (resolve, reject) {\n            loader\n                .loadScript(siteKey, options.useRecaptchaNet || false, options.useEnterprise || false, options.renderParameters ? options.renderParameters : {}, options.customUrl)\n                .then(function () {\n                ReCaptchaLoader.setLoadingState(ELoadingState.LOADED);\n                var widgetID = loader.doExplicitRender(grecaptcha, siteKey, options.explicitRenderParameters\n                    ? options.explicitRenderParameters\n                    : {}, options.useEnterprise || false);\n                var instance = new ReCaptchaInstance_1.ReCaptchaInstance(siteKey, widgetID, grecaptcha);\n                ReCaptchaLoader.successfulLoadingConsumers.forEach(function (v) {\n                    return v(instance);\n                });\n                ReCaptchaLoader.successfulLoadingConsumers = [];\n                if (options.autoHideBadge) {\n                    instance.hideBadge();\n                }\n                ReCaptchaLoader.instance = instance;\n                resolve(instance);\n            })\n                .catch(function (error) {\n                ReCaptchaLoader.errorLoadingRunnable.forEach(function (v) { return v(error); });\n                ReCaptchaLoader.errorLoadingRunnable = [];\n                reject(error);\n            });\n        });\n    };\n    ReCaptchaLoader.getInstance = function () {\n        return ReCaptchaLoader.instance;\n    };\n    ReCaptchaLoader.setLoadingState = function (state) {\n        ReCaptchaLoader.loadingState = state;\n    };\n    ReCaptchaLoader.getLoadingState = function () {\n        if (ReCaptchaLoader.loadingState === null) {\n            return ELoadingState.NOT_LOADED;\n        }\n        else {\n            return ReCaptchaLoader.loadingState;\n        }\n    };\n    ReCaptchaLoader.prototype.loadScript = function (siteKey, useRecaptchaNet, useEnterprise, renderParameters, customUrl) {\n        var _this = this;\n        if (useRecaptchaNet === void 0) { useRecaptchaNet = false; }\n        if (useEnterprise === void 0) { useEnterprise = false; }\n        if (renderParameters === void 0) { renderParameters = {}; }\n        if (customUrl === void 0) { customUrl = \"\"; }\n        var scriptElement = document.createElement(\"script\");\n        scriptElement.setAttribute(\"recaptcha-v3-script\", \"\");\n        scriptElement.setAttribute(\"async\", \"\");\n        scriptElement.setAttribute(\"defer\", \"\");\n        var scriptBase = \"https://www.google.com/recaptcha/api.js\";\n        if (useRecaptchaNet) {\n            if (useEnterprise) {\n                scriptBase = \"https://recaptcha.net/recaptcha/enterprise.js\";\n            }\n            else {\n                scriptBase = \"https://recaptcha.net/recaptcha/api.js\";\n            }\n        }\n        else if (useEnterprise) {\n            scriptBase = \"https://www.google.com/recaptcha/enterprise.js\";\n        }\n        if (customUrl) {\n            scriptBase = customUrl;\n        }\n        if (renderParameters.render) {\n            renderParameters.render = undefined;\n        }\n        var parametersQuery = this.buildQueryString(renderParameters);\n        scriptElement.src = scriptBase + \"?render=explicit\" + parametersQuery;\n        return new Promise(function (resolve, reject) {\n            scriptElement.addEventListener(\"load\", _this.waitForScriptToLoad(function () {\n                resolve(scriptElement);\n            }, useEnterprise), false);\n            scriptElement.onerror = function (error) {\n                ReCaptchaLoader.setLoadingState(ELoadingState.NOT_LOADED);\n                reject(error);\n            };\n            document.head.appendChild(scriptElement);\n        });\n    };\n    ReCaptchaLoader.prototype.buildQueryString = function (parameters) {\n        var parameterKeys = Object.keys(parameters);\n        if (parameterKeys.length < 1) {\n            return \"\";\n        }\n        return (\"&\" +\n            Object.keys(parameters)\n                .filter(function (parameterKey) {\n                return !!parameters[parameterKey];\n            })\n                .map(function (parameterKey) {\n                return parameterKey + \"=\" + parameters[parameterKey];\n            })\n                .join(\"&\"));\n    };\n    ReCaptchaLoader.prototype.waitForScriptToLoad = function (callback, useEnterprise) {\n        var _this = this;\n        return function () {\n            if (window.grecaptcha === undefined) {\n                setTimeout(function () {\n                    _this.waitForScriptToLoad(callback, useEnterprise);\n                }, ReCaptchaLoader.SCRIPT_LOAD_DELAY);\n            }\n            else {\n                if (useEnterprise) {\n                    window.grecaptcha.enterprise.ready(function () {\n                        callback();\n                    });\n                }\n                else {\n                    window.grecaptcha.ready(function () {\n                        callback();\n                    });\n                }\n            }\n        };\n    };\n    ReCaptchaLoader.prototype.doExplicitRender = function (grecaptcha, siteKey, parameters, isEnterprise) {\n        var augmentedParameters = __assign({ sitekey: siteKey }, parameters);\n        if (parameters.container) {\n            if (isEnterprise) {\n                return grecaptcha.enterprise.render(parameters.container, augmentedParameters);\n            }\n            else {\n                return grecaptcha.render(parameters.container, augmentedParameters);\n            }\n        }\n        else {\n            if (isEnterprise) {\n                return grecaptcha.enterprise.render(augmentedParameters);\n            }\n            else {\n                return grecaptcha.render(augmentedParameters);\n            }\n        }\n    };\n    ReCaptchaLoader.loadingState = null;\n    ReCaptchaLoader.instance = null;\n    ReCaptchaLoader.instanceSiteKey = null;\n    ReCaptchaLoader.successfulLoadingConsumers = [];\n    ReCaptchaLoader.errorLoadingRunnable = [];\n    ReCaptchaLoader.SCRIPT_LOAD_DELAY = 25;\n    return ReCaptchaLoader;\n}());\nexports.load = ReCaptchaLoader.load;\nexports.getInstance = ReCaptchaLoader.getInstance;\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),Y=_.prototype;return O.prototype=Y,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){Y[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","const parser = require('./parser')\n\nmodule.exports = function executeScript(input, script) {\n  const opCodes = parser.parse(script)\n\n  return evaluateOpCodes([input], opCodes)\n}\n\nfunction evaluateOpCodes(context, opCodes, callback) {\n  if (!Array.isArray(opCodes)) {\n    opCodes = [opCodes]\n  }\n\n  do {\n    const opCode = opCodes.shift()\n\n    switch (opCode.op) {\n      case 'current_context':\n        break\n\n      case 'literal':\n        context = [opCode.value]\n        break\n\n      case 'pick':\n        context = evaluateOpCode_pick(context, opCode)\n        break\n\n      case 'index':\n        context = evaluateOpCode_index(context, opCode)\n        break\n\n      case 'slice':\n        context = evaluateOpCode_slice(context, opCode)\n        break\n\n      case 'explode':\n        context = evaluateOpCode_explode(context, opCode, callback)\n        break\n\n      case 'create_array':\n        context = evaluateOpCode_create_array(context, opCode)\n        break\n\n      case 'create_object':\n        context = evaluateOpCode_create_object(context, opCode, callback)\n        break\n\n      case 'pipe':\n        context = evaluateOpCode_pipe(context, opCode, callback)\n        break\n\n      default:\n        throw new Error('Unknown op code: ' + opCode.op)\n    }\n  } while (opCodes.length > 0)\n\n  return context.length > 1 ? context : context[0]\n}\n\nfunction evaluateOpCode_pick(context, opCode) {\n  return context.reduce((result, each) => {\n    if (each != null && typeof each !== 'object') {\n      if (opCode.strict) {\n        throw new Error(`Cannot index ${typeof each} with ${opCode.key}`)\n      }\n      // Skip this value entirely\n      return result\n    }\n    let picked = null\n    if (each && each[opCode.key]) {\n      picked = each[opCode.key]\n    }\n    result.push(picked)\n    return result\n  }, [])\n}\n\nfunction evaluateOpCode_index(context, opCode) {\n  return context.reduce((result, each) => {\n    if (!Array.isArray(each)) {\n      if (opCode.strict) {\n        throw new Error('Can only index into arrays')\n      }\n      return result\n    }\n    let indexed\n    if (Math.abs(opCode.index) > each.length || opCode.index === each.length) {\n      indexed = null\n    } else if (opCode.index < 0) {\n      indexed = each.slice(opCode.index)[0]\n    } else {\n      indexed = each[opCode.index]\n    }\n    result.push(indexed)\n    return result\n  }, [])\n}\n\nfunction evaluateOpCode_slice(context, opCode) {\n  return context.reduce((result, each) => {\n    if ('undefined' === typeof each.slice) {\n      if (opCode.strict) {\n        throw new Error('Cannot slice ' + typeof each)\n      }\n      return result\n    }\n    if (undefined === opCode.start && undefined === opCode.end) {\n      throw new Error('Cannot slice with no offsets')\n    }\n    result.push(each.slice(opCode.start, opCode.end))\n    return result\n  }, [])\n}\n\nfunction evaluateOpCode_explode(context, opCode, callback) {\n  context = context.reduce((result, each) => {\n    if (Array.isArray(each)) {\n      return result.concat(each)\n    } else if (typeof each === 'object' && each != null) {\n      return result.concat(Object.values(each))\n    }\n    if (opCode.strict) {\n      let type = typeof each\n      if (each === null) {\n        // jq throws an error specifically for null, so let's\n        // distinguish that from object.\n        type = 'null'\n      }\n      throw new Error('Cannot iterate over ' + type)\n    }\n    return result\n  }, [])\n  if (callback) {\n    callback(context.length)\n  }\n  return context\n}\n\nfunction evaluateOpCode_create_array(context, opCode) {\n  return [\n    opCode.values.reduce((result, each) => {\n      const exploder = makeExploder()\n      // Array creation terminates an explode chain - all generated\n      // results will get collected in the singular array. As such,\n      // no parent is called to makeExploderCb, and none is taken by\n      // this function.\n      let values = evaluateOpCodes(context, [...each], makeExploderCb(exploder))\n      if (!exploder.exploded) {\n        result.push(values)\n      } else {\n        switch (exploder.length) {\n          case 0:\n            break\n\n          case 1:\n            result.push(values)\n            break\n\n          default:\n            result = result.concat(values)\n        }\n      }\n\n      return result\n    }, []),\n  ]\n}\n\nfunction evaluateOpCode_create_object(context, opCode, callback) {\n  return evaluateOpCode_create_object_build(\n    {},\n    Object.entries(\n      opCode.entries.reduce((result, each) => {\n        const exploder = makeExploder()\n        let values = evaluateOpCodes(context, [...each.value], makeExploderCb(exploder, callback))\n        if (!exploder.exploded) {\n          result[each.key] = [values]\n        } else {\n          switch (exploder.length) {\n            case 0:\n              result[each.key] = []\n              break\n\n            case 1:\n              result[each.key] = [values]\n              break\n\n            default:\n              result[each.key] = values\n              break\n          }\n        }\n        return result\n      }, {})\n    )\n  )\n}\n\nfunction evaluateOpCode_create_object_build(current, ops) {\n  let result = []\n  let key, values\n  ;[key, values] = ops.shift()\n  values.forEach((value) => {\n    current[key] = value\n    if (ops.length > 0) {\n      result = result.concat(evaluateOpCode_create_object_build({ ...current }, [...ops]))\n    } else {\n      result.push({ ...current })\n    }\n  })\n  return result\n}\n\nfunction evaluateOpCode_pipe(context, opCode, callback) {\n  const exploder = makeExploder()\n  context = evaluateOpCodes(context, [...opCode.in], makeExploderCb(exploder, callback))\n  if (!exploder.exploded) {\n    context = evaluateOpCodes([context], [...opCode.out])\n  } else {\n    switch (exploder.length) {\n      case 0:\n        context = []\n        break\n\n      case 1:\n        context = [context]\n        break\n    }\n    context = context.map((each) => evaluateOpCodes([each], [...opCode.out]))\n  }\n  return context\n}\n\nfunction makeExploder() {\n  return { exploded: false, length: 0 }\n}\n\nfunction makeExploderCb(exploder, callback) {\n  return (length) => {\n    exploder.exploded = true\n    exploder.length = length\n    if (callback) {\n      callback(length)\n    }\n  }\n}\n","/*\n * Generated by PEG.js 0.10.0.\n *\n * http://pegjs.org/\n */\n\n\"use strict\";\n\nfunction peg$subclass(child, parent) {\n  function ctor() { this.constructor = child; }\n  ctor.prototype = parent.prototype;\n  child.prototype = new ctor();\n}\n\nfunction peg$SyntaxError(message, expected, found, location) {\n  this.message  = message;\n  this.expected = expected;\n  this.found    = found;\n  this.location = location;\n  this.name     = \"SyntaxError\";\n\n  if (typeof Error.captureStackTrace === \"function\") {\n    Error.captureStackTrace(this, peg$SyntaxError);\n  }\n}\n\npeg$subclass(peg$SyntaxError, Error);\n\npeg$SyntaxError.buildMessage = function(expected, found) {\n  var DESCRIBE_EXPECTATION_FNS = {\n        literal: function(expectation) {\n          return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n        },\n\n        \"class\": function(expectation) {\n          var escapedParts = \"\",\n              i;\n\n          for (i = 0; i < expectation.parts.length; i++) {\n            escapedParts += expectation.parts[i] instanceof Array\n              ? classEscape(expectation.parts[i][0]) + \"-\" + classEscape(expectation.parts[i][1])\n              : classEscape(expectation.parts[i]);\n          }\n\n          return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n        },\n\n        any: function(expectation) {\n          return \"any character\";\n        },\n\n        end: function(expectation) {\n          return \"end of input\";\n        },\n\n        other: function(expectation) {\n          return expectation.description;\n        }\n      };\n\n  function hex(ch) {\n    return ch.charCodeAt(0).toString(16).toUpperCase();\n  }\n\n  function literalEscape(s) {\n    return s\n      .replace(/\\\\/g, '\\\\\\\\')\n      .replace(/\"/g,  '\\\\\"')\n      .replace(/\\0/g, '\\\\0')\n      .replace(/\\t/g, '\\\\t')\n      .replace(/\\n/g, '\\\\n')\n      .replace(/\\r/g, '\\\\r')\n      .replace(/[\\x00-\\x0F]/g,          function(ch) { return '\\\\x0' + hex(ch); })\n      .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return '\\\\x'  + hex(ch); });\n  }\n\n  function classEscape(s) {\n    return s\n      .replace(/\\\\/g, '\\\\\\\\')\n      .replace(/\\]/g, '\\\\]')\n      .replace(/\\^/g, '\\\\^')\n      .replace(/-/g,  '\\\\-')\n      .replace(/\\0/g, '\\\\0')\n      .replace(/\\t/g, '\\\\t')\n      .replace(/\\n/g, '\\\\n')\n      .replace(/\\r/g, '\\\\r')\n      .replace(/[\\x00-\\x0F]/g,          function(ch) { return '\\\\x0' + hex(ch); })\n      .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return '\\\\x'  + hex(ch); });\n  }\n\n  function describeExpectation(expectation) {\n    return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n  }\n\n  function describeExpected(expected) {\n    var descriptions = new Array(expected.length),\n        i, j;\n\n    for (i = 0; i < expected.length; i++) {\n      descriptions[i] = describeExpectation(expected[i]);\n    }\n\n    descriptions.sort();\n\n    if (descriptions.length > 0) {\n      for (i = 1, j = 1; i < descriptions.length; i++) {\n        if (descriptions[i - 1] !== descriptions[i]) {\n          descriptions[j] = descriptions[i];\n          j++;\n        }\n      }\n      descriptions.length = j;\n    }\n\n    switch (descriptions.length) {\n      case 1:\n        return descriptions[0];\n\n      case 2:\n        return descriptions[0] + \" or \" + descriptions[1];\n\n      default:\n        return descriptions.slice(0, -1).join(\", \")\n          + \", or \"\n          + descriptions[descriptions.length - 1];\n    }\n  }\n\n  function describeFound(found) {\n    return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n  }\n\n  return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\nfunction peg$parse(input, options) {\n  options = options !== void 0 ? options : {};\n\n  var peg$FAILED = {},\n\n      peg$startRuleFunctions = { Script: peg$parseScript },\n      peg$startRuleFunction  = peg$parseScript,\n\n      peg$c0 = function(head, tail) {\n          return tail.reduce(function(result, element) {\n            return [{\n              op:  'pipe',\n              in:  result,\n              out: Array.isArray(element[3]) ? element[3] : [element[3]],\n            }]\n          }, Array.isArray(head) ? head : [head])\n        },\n      peg$c1 = peg$otherExpectation(\"whitespace\"),\n      peg$c2 = /^[ \\t\\n\\r]/,\n      peg$c3 = peg$classExpectation([\" \", \"\\t\", \"\\n\", \"\\r\"], false, false),\n      peg$c4 = \"|\",\n      peg$c5 = peg$literalExpectation(\"|\", false),\n      peg$c6 = \"[\",\n      peg$c7 = peg$literalExpectation(\"[\", false),\n      peg$c8 = \"]\",\n      peg$c9 = peg$literalExpectation(\"]\", false),\n      peg$c10 = \"?\",\n      peg$c11 = peg$literalExpectation(\"?\", false),\n      peg$c12 = function(index, strict) {\n          return {\n            op: 'index',\n            index: index,\n            strict: strict == null,\n          }\n        },\n      peg$c13 = \":\",\n      peg$c14 = peg$literalExpectation(\":\", false),\n      peg$c15 = function(start, end, strict) {\n          return {\n            op: 'slice',\n            start: null === start ? undefined : start,\n            end: null === end ? undefined : end,\n            strict: strict == null,\n          }\n        },\n      peg$c16 = \"[]\",\n      peg$c17 = peg$literalExpectation(\"[]\", false),\n      peg$c18 = function(strict) {\n          return {\n            op: 'explode',\n            strict: strict == null,\n          }\n        },\n      peg$c19 = \".\",\n      peg$c20 = peg$literalExpectation(\".\", false),\n      peg$c21 = function(name, strict) {\n          return {\n            op: 'pick',\n            key: name,\n            strict: strict == null,\n          }\n        },\n      peg$c22 = function() {\n          return {\n            op: 'current_context'\n          }\n        },\n      peg$c23 = function(number) { return literal(number) },\n      peg$c24 = \"null\",\n      peg$c25 = peg$literalExpectation(\"null\", false),\n      peg$c26 = function() { return literal(null) },\n      peg$c27 = \"undefined\",\n      peg$c28 = peg$literalExpectation(\"undefined\", false),\n      peg$c29 = function() { return literal(undefined) },\n      peg$c30 = function(string) { return literal(string) },\n      peg$c31 = \"-\",\n      peg$c32 = peg$literalExpectation(\"-\", false),\n      peg$c33 = /^[0-9]/,\n      peg$c34 = peg$classExpectation([[\"0\", \"9\"]], false, false),\n      peg$c35 = function(negative, number) { return toNumber(number, negative) },\n      peg$c36 = \"'\",\n      peg$c37 = peg$literalExpectation(\"'\", false),\n      peg$c38 = /^[^']/,\n      peg$c39 = peg$classExpectation([\"'\"], true, false),\n      peg$c40 = function(string) { return string.join('') },\n      peg$c41 = \"\\\"\",\n      peg$c42 = peg$literalExpectation(\"\\\"\", false),\n      peg$c43 = /^[^\"]/,\n      peg$c44 = peg$classExpectation([\"\\\"\"], true, false),\n      peg$c45 = \",\",\n      peg$c46 = peg$literalExpectation(\",\", false),\n      peg$c47 = function(head, tail) {\n        return {\n          op: 'create_array',\n          values: tail.reduce((result, element) => result.concat([element[3]]), [head])\n        }\n      },\n      peg$c48 = \"{\",\n      peg$c49 = peg$literalExpectation(\"{\", false),\n      peg$c50 = \"}\",\n      peg$c51 = peg$literalExpectation(\"}\", false),\n      peg$c52 = function(head, tail) {\n        return {\n          op: 'create_object',\n          entries: tail.reduce(function(result, element) {\n            result.push(element[3])\n            return result\n          }, [head])\n        }\n      },\n      peg$c53 = function(key, value) {\n          return { key, value }\n        },\n      peg$c54 = function(key) { return key },\n      peg$c55 = function(key) { return key.join('') },\n      peg$c56 = function(name) { return name },\n      peg$c57 = peg$otherExpectation(\"identifier\"),\n      peg$c58 = function(head, tail) { return head + tail.join(\"\") },\n      peg$c59 = \"$\",\n      peg$c60 = peg$literalExpectation(\"$\", false),\n      peg$c61 = \"_\",\n      peg$c62 = peg$literalExpectation(\"_\", false),\n      peg$c63 = \"\\\\\",\n      peg$c64 = peg$literalExpectation(\"\\\\\", false),\n      peg$c65 = function(sequence) { return sequence },\n      peg$c66 = \"\\u200C\",\n      peg$c67 = peg$literalExpectation(\"\\u200C\", false),\n      peg$c68 = \"\\u200D\",\n      peg$c69 = peg$literalExpectation(\"\\u200D\", false),\n      peg$c70 = \"u\",\n      peg$c71 = peg$literalExpectation(\"u\", false),\n      peg$c72 = function(digits) {\n        return String.fromCharCode(parseInt(digits, 16))\n      },\n      peg$c73 = /^[a-z\\xB5\\xDF-\\xF6\\xF8-\\xFF\\u0101\\u0103\\u0105\\u0107\\u0109\\u010B\\u010D\\u010F\\u0111\\u0113\\u0115\\u0117\\u0119\\u011B\\u011D\\u011F\\u0121\\u0123\\u0125\\u0127\\u0129\\u012B\\u012D\\u012F\\u0131\\u0133\\u0135\\u0137-\\u0138\\u013A\\u013C\\u013E\\u0140\\u0142\\u0144\\u0146\\u0148-\\u0149\\u014B\\u014D\\u014F\\u0151\\u0153\\u0155\\u0157\\u0159\\u015B\\u015D\\u015F\\u0161\\u0163\\u0165\\u0167\\u0169\\u016B\\u016D\\u016F\\u0171\\u0173\\u0175\\u0177\\u017A\\u017C\\u017E-\\u0180\\u0183\\u0185\\u0188\\u018C-\\u018D\\u0192\\u0195\\u0199-\\u019B\\u019E\\u01A1\\u01A3\\u01A5\\u01A8\\u01AA-\\u01AB\\u01AD\\u01B0\\u01B4\\u01B6\\u01B9-\\u01BA\\u01BD-\\u01BF\\u01C6\\u01C9\\u01CC\\u01CE\\u01D0\\u01D2\\u01D4\\u01D6\\u01D8\\u01DA\\u01DC-\\u01DD\\u01DF\\u01E1\\u01E3\\u01E5\\u01E7\\u01E9\\u01EB\\u01ED\\u01EF-\\u01F0\\u01F3\\u01F5\\u01F9\\u01FB\\u01FD\\u01FF\\u0201\\u0203\\u0205\\u0207\\u0209\\u020B\\u020D\\u020F\\u0211\\u0213\\u0215\\u0217\\u0219\\u021B\\u021D\\u021F\\u0221\\u0223\\u0225\\u0227\\u0229\\u022B\\u022D\\u022F\\u0231\\u0233-\\u0239\\u023C\\u023F-\\u0240\\u0242\\u0247\\u0249\\u024B\\u024D\\u024F-\\u0293\\u0295-\\u02AF\\u0371\\u0373\\u0377\\u037B-\\u037D\\u0390\\u03AC-\\u03CE\\u03D0-\\u03D1\\u03D5-\\u03D7\\u03D9\\u03DB\\u03DD\\u03DF\\u03E1\\u03E3\\u03E5\\u03E7\\u03E9\\u03EB\\u03ED\\u03EF-\\u03F3\\u03F5\\u03F8\\u03FB-\\u03FC\\u0430-\\u045F\\u0461\\u0463\\u0465\\u0467\\u0469\\u046B\\u046D\\u046F\\u0471\\u0473\\u0475\\u0477\\u0479\\u047B\\u047D\\u047F\\u0481\\u048B\\u048D\\u048F\\u0491\\u0493\\u0495\\u0497\\u0499\\u049B\\u049D\\u049F\\u04A1\\u04A3\\u04A5\\u04A7\\u04A9\\u04AB\\u04AD\\u04AF\\u04B1\\u04B3\\u04B5\\u04B7\\u04B9\\u04BB\\u04BD\\u04BF\\u04C2\\u04C4\\u04C6\\u04C8\\u04CA\\u04CC\\u04CE-\\u04CF\\u04D1\\u04D3\\u04D5\\u04D7\\u04D9\\u04DB\\u04DD\\u04DF\\u04E1\\u04E3\\u04E5\\u04E7\\u04E9\\u04EB\\u04ED\\u04EF\\u04F1\\u04F3\\u04F5\\u04F7\\u04F9\\u04FB\\u04FD\\u04FF\\u0501\\u0503\\u0505\\u0507\\u0509\\u050B\\u050D\\u050F\\u0511\\u0513\\u0515\\u0517\\u0519\\u051B\\u051D\\u051F\\u0521\\u0523\\u0525\\u0527\\u0529\\u052B\\u052D\\u052F\\u0560-\\u0588\\u10D0-\\u10FA\\u10FD-\\u10FF\\u13F8-\\u13FD\\u1C80-\\u1C88\\u1D00-\\u1D2B\\u1D6B-\\u1D77\\u1D79-\\u1D9A\\u1E01\\u1E03\\u1E05\\u1E07\\u1E09\\u1E0B\\u1E0D\\u1E0F\\u1E11\\u1E13\\u1E15\\u1E17\\u1E19\\u1E1B\\u1E1D\\u1E1F\\u1E21\\u1E23\\u1E25\\u1E27\\u1E29\\u1E2B\\u1E2D\\u1E2F\\u1E31\\u1E33\\u1E35\\u1E37\\u1E39\\u1E3B\\u1E3D\\u1E3F\\u1E41\\u1E43\\u1E45\\u1E47\\u1E49\\u1E4B\\u1E4D\\u1E4F\\u1E51\\u1E53\\u1E55\\u1E57\\u1E59\\u1E5B\\u1E5D\\u1E5F\\u1E61\\u1E63\\u1E65\\u1E67\\u1E69\\u1E6B\\u1E6D\\u1E6F\\u1E71\\u1E73\\u1E75\\u1E77\\u1E79\\u1E7B\\u1E7D\\u1E7F\\u1E81\\u1E83\\u1E85\\u1E87\\u1E89\\u1E8B\\u1E8D\\u1E8F\\u1E91\\u1E93\\u1E95-\\u1E9D\\u1E9F\\u1EA1\\u1EA3\\u1EA5\\u1EA7\\u1EA9\\u1EAB\\u1EAD\\u1EAF\\u1EB1\\u1EB3\\u1EB5\\u1EB7\\u1EB9\\u1EBB\\u1EBD\\u1EBF\\u1EC1\\u1EC3\\u1EC5\\u1EC7\\u1EC9\\u1ECB\\u1ECD\\u1ECF\\u1ED1\\u1ED3\\u1ED5\\u1ED7\\u1ED9\\u1EDB\\u1EDD\\u1EDF\\u1EE1\\u1EE3\\u1EE5\\u1EE7\\u1EE9\\u1EEB\\u1EED\\u1EEF\\u1EF1\\u1EF3\\u1EF5\\u1EF7\\u1EF9\\u1EFB\\u1EFD\\u1EFF-\\u1F07\\u1F10-\\u1F15\\u1F20-\\u1F27\\u1F30-\\u1F37\\u1F40-\\u1F45\\u1F50-\\u1F57\\u1F60-\\u1F67\\u1F70-\\u1F7D\\u1F80-\\u1F87\\u1F90-\\u1F97\\u1FA0-\\u1FA7\\u1FB0-\\u1FB4\\u1FB6-\\u1FB7\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FC7\\u1FD0-\\u1FD3\\u1FD6-\\u1FD7\\u1FE0-\\u1FE7\\u1FF2-\\u1FF4\\u1FF6-\\u1FF7\\u210A\\u210E-\\u210F\\u2113\\u212F\\u2134\\u2139\\u213C-\\u213D\\u2146-\\u2149\\u214E\\u2184\\u2C30-\\u2C5E\\u2C61\\u2C65-\\u2C66\\u2C68\\u2C6A\\u2C6C\\u2C71\\u2C73-\\u2C74\\u2C76-\\u2C7B\\u2C81\\u2C83\\u2C85\\u2C87\\u2C89\\u2C8B\\u2C8D\\u2C8F\\u2C91\\u2C93\\u2C95\\u2C97\\u2C99\\u2C9B\\u2C9D\\u2C9F\\u2CA1\\u2CA3\\u2CA5\\u2CA7\\u2CA9\\u2CAB\\u2CAD\\u2CAF\\u2CB1\\u2CB3\\u2CB5\\u2CB7\\u2CB9\\u2CBB\\u2CBD\\u2CBF\\u2CC1\\u2CC3\\u2CC5\\u2CC7\\u2CC9\\u2CCB\\u2CCD\\u2CCF\\u2CD1\\u2CD3\\u2CD5\\u2CD7\\u2CD9\\u2CDB\\u2CDD\\u2CDF\\u2CE1\\u2CE3-\\u2CE4\\u2CEC\\u2CEE\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\uA641\\uA643\\uA645\\uA647\\uA649\\uA64B\\uA64D\\uA64F\\uA651\\uA653\\uA655\\uA657\\uA659\\uA65B\\uA65D\\uA65F\\uA661\\uA663\\uA665\\uA667\\uA669\\uA66B\\uA66D\\uA681\\uA683\\uA685\\uA687\\uA689\\uA68B\\uA68D\\uA68F\\uA691\\uA693\\uA695\\uA697\\uA699\\uA69B\\uA723\\uA725\\uA727\\uA729\\uA72B\\uA72D\\uA72F-\\uA731\\uA733\\uA735\\uA737\\uA739\\uA73B\\uA73D\\uA73F\\uA741\\uA743\\uA745\\uA747\\uA749\\uA74B\\uA74D\\uA74F\\uA751\\uA753\\uA755\\uA757\\uA759\\uA75B\\uA75D\\uA75F\\uA761\\uA763\\uA765\\uA767\\uA769\\uA76B\\uA76D\\uA76F\\uA771-\\uA778\\uA77A\\uA77C\\uA77F\\uA781\\uA783\\uA785\\uA787\\uA78C\\uA78E\\uA791\\uA793-\\uA795\\uA797\\uA799\\uA79B\\uA79D\\uA79F\\uA7A1\\uA7A3\\uA7A5\\uA7A7\\uA7A9\\uA7AF\\uA7B5\\uA7B7\\uA7B9\\uA7FA\\uAB30-\\uAB5A\\uAB60-\\uAB65\\uAB70-\\uABBF\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF41-\\uFF5A]/,\n      peg$c74 = peg$classExpectation([[\"a\", \"z\"], \"\\xB5\", [\"\\xDF\", \"\\xF6\"], [\"\\xF8\", \"\\xFF\"], \"\\u0101\", \"\\u0103\", \"\\u0105\", \"\\u0107\", \"\\u0109\", \"\\u010B\", \"\\u010D\", \"\\u010F\", \"\\u0111\", \"\\u0113\", \"\\u0115\", \"\\u0117\", \"\\u0119\", \"\\u011B\", \"\\u011D\", \"\\u011F\", \"\\u0121\", \"\\u0123\", \"\\u0125\", \"\\u0127\", \"\\u0129\", \"\\u012B\", \"\\u012D\", \"\\u012F\", \"\\u0131\", \"\\u0133\", \"\\u0135\", [\"\\u0137\", \"\\u0138\"], \"\\u013A\", \"\\u013C\", \"\\u013E\", \"\\u0140\", \"\\u0142\", \"\\u0144\", \"\\u0146\", [\"\\u0148\", \"\\u0149\"], \"\\u014B\", \"\\u014D\", \"\\u014F\", \"\\u0151\", \"\\u0153\", \"\\u0155\", \"\\u0157\", \"\\u0159\", \"\\u015B\", \"\\u015D\", \"\\u015F\", \"\\u0161\", \"\\u0163\", \"\\u0165\", \"\\u0167\", \"\\u0169\", \"\\u016B\", \"\\u016D\", \"\\u016F\", \"\\u0171\", \"\\u0173\", \"\\u0175\", \"\\u0177\", \"\\u017A\", \"\\u017C\", [\"\\u017E\", \"\\u0180\"], \"\\u0183\", \"\\u0185\", \"\\u0188\", [\"\\u018C\", \"\\u018D\"], \"\\u0192\", \"\\u0195\", [\"\\u0199\", \"\\u019B\"], \"\\u019E\", \"\\u01A1\", \"\\u01A3\", \"\\u01A5\", \"\\u01A8\", [\"\\u01AA\", \"\\u01AB\"], \"\\u01AD\", \"\\u01B0\", \"\\u01B4\", \"\\u01B6\", [\"\\u01B9\", \"\\u01BA\"], [\"\\u01BD\", \"\\u01BF\"], \"\\u01C6\", \"\\u01C9\", \"\\u01CC\", \"\\u01CE\", \"\\u01D0\", \"\\u01D2\", \"\\u01D4\", \"\\u01D6\", \"\\u01D8\", \"\\u01DA\", [\"\\u01DC\", \"\\u01DD\"], \"\\u01DF\", \"\\u01E1\", \"\\u01E3\", \"\\u01E5\", \"\\u01E7\", \"\\u01E9\", \"\\u01EB\", \"\\u01ED\", [\"\\u01EF\", \"\\u01F0\"], \"\\u01F3\", \"\\u01F5\", \"\\u01F9\", \"\\u01FB\", \"\\u01FD\", \"\\u01FF\", \"\\u0201\", \"\\u0203\", \"\\u0205\", \"\\u0207\", \"\\u0209\", \"\\u020B\", \"\\u020D\", \"\\u020F\", \"\\u0211\", \"\\u0213\", \"\\u0215\", \"\\u0217\", \"\\u0219\", \"\\u021B\", \"\\u021D\", \"\\u021F\", \"\\u0221\", \"\\u0223\", \"\\u0225\", \"\\u0227\", \"\\u0229\", \"\\u022B\", \"\\u022D\", \"\\u022F\", \"\\u0231\", [\"\\u0233\", \"\\u0239\"], \"\\u023C\", [\"\\u023F\", \"\\u0240\"], \"\\u0242\", \"\\u0247\", \"\\u0249\", \"\\u024B\", \"\\u024D\", [\"\\u024F\", \"\\u0293\"], [\"\\u0295\", \"\\u02AF\"], \"\\u0371\", \"\\u0373\", \"\\u0377\", [\"\\u037B\", \"\\u037D\"], \"\\u0390\", [\"\\u03AC\", \"\\u03CE\"], [\"\\u03D0\", \"\\u03D1\"], [\"\\u03D5\", \"\\u03D7\"], \"\\u03D9\", \"\\u03DB\", \"\\u03DD\", \"\\u03DF\", \"\\u03E1\", \"\\u03E3\", \"\\u03E5\", \"\\u03E7\", \"\\u03E9\", \"\\u03EB\", \"\\u03ED\", [\"\\u03EF\", \"\\u03F3\"], \"\\u03F5\", \"\\u03F8\", [\"\\u03FB\", \"\\u03FC\"], [\"\\u0430\", \"\\u045F\"], \"\\u0461\", \"\\u0463\", \"\\u0465\", \"\\u0467\", \"\\u0469\", \"\\u046B\", \"\\u046D\", \"\\u046F\", \"\\u0471\", \"\\u0473\", \"\\u0475\", \"\\u0477\", \"\\u0479\", \"\\u047B\", \"\\u047D\", \"\\u047F\", \"\\u0481\", \"\\u048B\", \"\\u048D\", \"\\u048F\", \"\\u0491\", \"\\u0493\", \"\\u0495\", \"\\u0497\", \"\\u0499\", \"\\u049B\", \"\\u049D\", \"\\u049F\", \"\\u04A1\", \"\\u04A3\", \"\\u04A5\", \"\\u04A7\", \"\\u04A9\", \"\\u04AB\", \"\\u04AD\", \"\\u04AF\", \"\\u04B1\", \"\\u04B3\", \"\\u04B5\", \"\\u04B7\", \"\\u04B9\", \"\\u04BB\", \"\\u04BD\", \"\\u04BF\", \"\\u04C2\", \"\\u04C4\", \"\\u04C6\", \"\\u04C8\", \"\\u04CA\", \"\\u04CC\", [\"\\u04CE\", \"\\u04CF\"], \"\\u04D1\", \"\\u04D3\", \"\\u04D5\", \"\\u04D7\", \"\\u04D9\", \"\\u04DB\", \"\\u04DD\", \"\\u04DF\", \"\\u04E1\", \"\\u04E3\", \"\\u04E5\", \"\\u04E7\", \"\\u04E9\", \"\\u04EB\", \"\\u04ED\", \"\\u04EF\", \"\\u04F1\", \"\\u04F3\", \"\\u04F5\", \"\\u04F7\", \"\\u04F9\", \"\\u04FB\", \"\\u04FD\", \"\\u04FF\", \"\\u0501\", \"\\u0503\", \"\\u0505\", \"\\u0507\", \"\\u0509\", \"\\u050B\", \"\\u050D\", \"\\u050F\", \"\\u0511\", \"\\u0513\", \"\\u0515\", \"\\u0517\", \"\\u0519\", \"\\u051B\", \"\\u051D\", \"\\u051F\", \"\\u0521\", \"\\u0523\", \"\\u0525\", \"\\u0527\", \"\\u0529\", \"\\u052B\", \"\\u052D\", \"\\u052F\", [\"\\u0560\", \"\\u0588\"], [\"\\u10D0\", \"\\u10FA\"], [\"\\u10FD\", \"\\u10FF\"], [\"\\u13F8\", \"\\u13FD\"], [\"\\u1C80\", \"\\u1C88\"], [\"\\u1D00\", \"\\u1D2B\"], [\"\\u1D6B\", \"\\u1D77\"], [\"\\u1D79\", \"\\u1D9A\"], \"\\u1E01\", \"\\u1E03\", \"\\u1E05\", \"\\u1E07\", \"\\u1E09\", \"\\u1E0B\", \"\\u1E0D\", \"\\u1E0F\", \"\\u1E11\", \"\\u1E13\", \"\\u1E15\", \"\\u1E17\", \"\\u1E19\", \"\\u1E1B\", \"\\u1E1D\", \"\\u1E1F\", \"\\u1E21\", \"\\u1E23\", \"\\u1E25\", \"\\u1E27\", \"\\u1E29\", \"\\u1E2B\", \"\\u1E2D\", \"\\u1E2F\", \"\\u1E31\", \"\\u1E33\", \"\\u1E35\", \"\\u1E37\", \"\\u1E39\", \"\\u1E3B\", \"\\u1E3D\", \"\\u1E3F\", \"\\u1E41\", \"\\u1E43\", \"\\u1E45\", \"\\u1E47\", \"\\u1E49\", \"\\u1E4B\", \"\\u1E4D\", \"\\u1E4F\", \"\\u1E51\", \"\\u1E53\", \"\\u1E55\", \"\\u1E57\", \"\\u1E59\", \"\\u1E5B\", \"\\u1E5D\", \"\\u1E5F\", \"\\u1E61\", \"\\u1E63\", \"\\u1E65\", \"\\u1E67\", \"\\u1E69\", \"\\u1E6B\", \"\\u1E6D\", \"\\u1E6F\", \"\\u1E71\", \"\\u1E73\", \"\\u1E75\", \"\\u1E77\", \"\\u1E79\", \"\\u1E7B\", \"\\u1E7D\", \"\\u1E7F\", \"\\u1E81\", \"\\u1E83\", \"\\u1E85\", \"\\u1E87\", \"\\u1E89\", \"\\u1E8B\", \"\\u1E8D\", \"\\u1E8F\", \"\\u1E91\", \"\\u1E93\", [\"\\u1E95\", \"\\u1E9D\"], \"\\u1E9F\", \"\\u1EA1\", \"\\u1EA3\", \"\\u1EA5\", \"\\u1EA7\", \"\\u1EA9\", \"\\u1EAB\", \"\\u1EAD\", \"\\u1EAF\", \"\\u1EB1\", \"\\u1EB3\", \"\\u1EB5\", \"\\u1EB7\", \"\\u1EB9\", \"\\u1EBB\", \"\\u1EBD\", \"\\u1EBF\", \"\\u1EC1\", \"\\u1EC3\", \"\\u1EC5\", \"\\u1EC7\", \"\\u1EC9\", \"\\u1ECB\", \"\\u1ECD\", \"\\u1ECF\", \"\\u1ED1\", \"\\u1ED3\", \"\\u1ED5\", \"\\u1ED7\", \"\\u1ED9\", \"\\u1EDB\", \"\\u1EDD\", \"\\u1EDF\", \"\\u1EE1\", \"\\u1EE3\", \"\\u1EE5\", \"\\u1EE7\", \"\\u1EE9\", \"\\u1EEB\", \"\\u1EED\", \"\\u1EEF\", \"\\u1EF1\", \"\\u1EF3\", \"\\u1EF5\", \"\\u1EF7\", \"\\u1EF9\", \"\\u1EFB\", \"\\u1EFD\", [\"\\u1EFF\", \"\\u1F07\"], [\"\\u1F10\", \"\\u1F15\"], [\"\\u1F20\", \"\\u1F27\"], [\"\\u1F30\", \"\\u1F37\"], [\"\\u1F40\", \"\\u1F45\"], [\"\\u1F50\", \"\\u1F57\"], [\"\\u1F60\", \"\\u1F67\"], [\"\\u1F70\", \"\\u1F7D\"], [\"\\u1F80\", \"\\u1F87\"], [\"\\u1F90\", \"\\u1F97\"], [\"\\u1FA0\", \"\\u1FA7\"], [\"\\u1FB0\", \"\\u1FB4\"], [\"\\u1FB6\", \"\\u1FB7\"], \"\\u1FBE\", [\"\\u1FC2\", \"\\u1FC4\"], [\"\\u1FC6\", \"\\u1FC7\"], [\"\\u1FD0\", \"\\u1FD3\"], [\"\\u1FD6\", \"\\u1FD7\"], [\"\\u1FE0\", \"\\u1FE7\"], [\"\\u1FF2\", \"\\u1FF4\"], [\"\\u1FF6\", \"\\u1FF7\"], \"\\u210A\", [\"\\u210E\", \"\\u210F\"], \"\\u2113\", \"\\u212F\", \"\\u2134\", \"\\u2139\", [\"\\u213C\", \"\\u213D\"], [\"\\u2146\", \"\\u2149\"], \"\\u214E\", \"\\u2184\", [\"\\u2C30\", \"\\u2C5E\"], \"\\u2C61\", [\"\\u2C65\", \"\\u2C66\"], \"\\u2C68\", \"\\u2C6A\", \"\\u2C6C\", \"\\u2C71\", [\"\\u2C73\", \"\\u2C74\"], [\"\\u2C76\", \"\\u2C7B\"], \"\\u2C81\", \"\\u2C83\", \"\\u2C85\", \"\\u2C87\", \"\\u2C89\", \"\\u2C8B\", \"\\u2C8D\", \"\\u2C8F\", \"\\u2C91\", \"\\u2C93\", \"\\u2C95\", \"\\u2C97\", \"\\u2C99\", \"\\u2C9B\", \"\\u2C9D\", \"\\u2C9F\", \"\\u2CA1\", \"\\u2CA3\", \"\\u2CA5\", \"\\u2CA7\", \"\\u2CA9\", \"\\u2CAB\", \"\\u2CAD\", \"\\u2CAF\", \"\\u2CB1\", \"\\u2CB3\", \"\\u2CB5\", \"\\u2CB7\", \"\\u2CB9\", \"\\u2CBB\", \"\\u2CBD\", \"\\u2CBF\", \"\\u2CC1\", \"\\u2CC3\", \"\\u2CC5\", \"\\u2CC7\", \"\\u2CC9\", \"\\u2CCB\", \"\\u2CCD\", \"\\u2CCF\", \"\\u2CD1\", \"\\u2CD3\", \"\\u2CD5\", \"\\u2CD7\", \"\\u2CD9\", \"\\u2CDB\", \"\\u2CDD\", \"\\u2CDF\", \"\\u2CE1\", [\"\\u2CE3\", \"\\u2CE4\"], \"\\u2CEC\", \"\\u2CEE\", \"\\u2CF3\", [\"\\u2D00\", \"\\u2D25\"], \"\\u2D27\", \"\\u2D2D\", \"\\uA641\", \"\\uA643\", \"\\uA645\", \"\\uA647\", \"\\uA649\", \"\\uA64B\", \"\\uA64D\", \"\\uA64F\", \"\\uA651\", \"\\uA653\", \"\\uA655\", \"\\uA657\", \"\\uA659\", \"\\uA65B\", \"\\uA65D\", \"\\uA65F\", \"\\uA661\", \"\\uA663\", \"\\uA665\", \"\\uA667\", \"\\uA669\", \"\\uA66B\", \"\\uA66D\", \"\\uA681\", \"\\uA683\", \"\\uA685\", \"\\uA687\", \"\\uA689\", \"\\uA68B\", \"\\uA68D\", \"\\uA68F\", \"\\uA691\", \"\\uA693\", \"\\uA695\", \"\\uA697\", \"\\uA699\", \"\\uA69B\", \"\\uA723\", \"\\uA725\", \"\\uA727\", \"\\uA729\", \"\\uA72B\", \"\\uA72D\", [\"\\uA72F\", \"\\uA731\"], \"\\uA733\", \"\\uA735\", \"\\uA737\", \"\\uA739\", \"\\uA73B\", \"\\uA73D\", \"\\uA73F\", \"\\uA741\", \"\\uA743\", \"\\uA745\", \"\\uA747\", \"\\uA749\", \"\\uA74B\", \"\\uA74D\", \"\\uA74F\", \"\\uA751\", \"\\uA753\", \"\\uA755\", \"\\uA757\", \"\\uA759\", \"\\uA75B\", \"\\uA75D\", \"\\uA75F\", \"\\uA761\", \"\\uA763\", \"\\uA765\", \"\\uA767\", \"\\uA769\", \"\\uA76B\", \"\\uA76D\", \"\\uA76F\", [\"\\uA771\", \"\\uA778\"], \"\\uA77A\", \"\\uA77C\", \"\\uA77F\", \"\\uA781\", \"\\uA783\", \"\\uA785\", \"\\uA787\", \"\\uA78C\", \"\\uA78E\", \"\\uA791\", [\"\\uA793\", \"\\uA795\"], \"\\uA797\", \"\\uA799\", \"\\uA79B\", \"\\uA79D\", \"\\uA79F\", \"\\uA7A1\", \"\\uA7A3\", \"\\uA7A5\", \"\\uA7A7\", \"\\uA7A9\", \"\\uA7AF\", \"\\uA7B5\", \"\\uA7B7\", \"\\uA7B9\", \"\\uA7FA\", [\"\\uAB30\", \"\\uAB5A\"], [\"\\uAB60\", \"\\uAB65\"], [\"\\uAB70\", \"\\uABBF\"], [\"\\uFB00\", \"\\uFB06\"], [\"\\uFB13\", \"\\uFB17\"], [\"\\uFF41\", \"\\uFF5A\"]], false, false),\n      peg$c75 = /^[\\u02B0-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0374\\u037A\\u0559\\u0640\\u06E5-\\u06E6\\u07F4-\\u07F5\\u07FA\\u081A\\u0824\\u0828\\u0971\\u0E46\\u0EC6\\u10FC\\u17D7\\u1843\\u1AA7\\u1C78-\\u1C7D\\u1D2C-\\u1D6A\\u1D78\\u1D9B-\\u1DBF\\u2071\\u207F\\u2090-\\u209C\\u2C7C-\\u2C7D\\u2D6F\\u2E2F\\u3005\\u3031-\\u3035\\u303B\\u309D-\\u309E\\u30FC-\\u30FE\\uA015\\uA4F8-\\uA4FD\\uA60C\\uA67F\\uA69C-\\uA69D\\uA717-\\uA71F\\uA770\\uA788\\uA7F8-\\uA7F9\\uA9CF\\uA9E6\\uAA70\\uAADD\\uAAF3-\\uAAF4\\uAB5C-\\uAB5F\\uFF70\\uFF9E-\\uFF9F]/,\n      peg$c76 = peg$classExpectation([[\"\\u02B0\", \"\\u02C1\"], [\"\\u02C6\", \"\\u02D1\"], [\"\\u02E0\", \"\\u02E4\"], \"\\u02EC\", \"\\u02EE\", \"\\u0374\", \"\\u037A\", \"\\u0559\", \"\\u0640\", [\"\\u06E5\", \"\\u06E6\"], [\"\\u07F4\", \"\\u07F5\"], \"\\u07FA\", \"\\u081A\", \"\\u0824\", \"\\u0828\", \"\\u0971\", \"\\u0E46\", \"\\u0EC6\", \"\\u10FC\", \"\\u17D7\", \"\\u1843\", \"\\u1AA7\", [\"\\u1C78\", \"\\u1C7D\"], [\"\\u1D2C\", \"\\u1D6A\"], \"\\u1D78\", [\"\\u1D9B\", \"\\u1DBF\"], \"\\u2071\", \"\\u207F\", [\"\\u2090\", \"\\u209C\"], [\"\\u2C7C\", \"\\u2C7D\"], \"\\u2D6F\", \"\\u2E2F\", \"\\u3005\", [\"\\u3031\", \"\\u3035\"], \"\\u303B\", [\"\\u309D\", \"\\u309E\"], [\"\\u30FC\", \"\\u30FE\"], \"\\uA015\", [\"\\uA4F8\", \"\\uA4FD\"], \"\\uA60C\", \"\\uA67F\", [\"\\uA69C\", \"\\uA69D\"], [\"\\uA717\", \"\\uA71F\"], \"\\uA770\", \"\\uA788\", [\"\\uA7F8\", \"\\uA7F9\"], \"\\uA9CF\", \"\\uA9E6\", \"\\uAA70\", \"\\uAADD\", [\"\\uAAF3\", \"\\uAAF4\"], [\"\\uAB5C\", \"\\uAB5F\"], \"\\uFF70\", [\"\\uFF9E\", \"\\uFF9F\"]], false, false),\n      peg$c77 = /^[\\xAA\\xBA\\u01BB\\u01C0-\\u01C3\\u0294\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u063F\\u0641-\\u064A\\u066E-\\u066F\\u0671-\\u06D3\\u06D5\\u06EE-\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u0800-\\u0815\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0972-\\u0980\\u0985-\\u098C\\u098F-\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC-\\u09DD\\u09DF-\\u09E1\\u09F0-\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F-\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32-\\u0A33\\u0A35-\\u0A36\\u0A38-\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2-\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0-\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F-\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32-\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C-\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99-\\u0B9A\\u0B9C\\u0B9E-\\u0B9F\\u0BA3-\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60-\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0-\\u0CE1\\u0CF1-\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32-\\u0E33\\u0E40-\\u0E45\\u0E81-\\u0E82\\u0E84\\u0E87-\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA-\\u0EAB\\u0EAD-\\u0EB0\\u0EB2-\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065-\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1100-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17DC\\u1820-\\u1842\\u1844-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE-\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C77\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5-\\u1CF6\\u2135-\\u2138\\u2D30-\\u2D67\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3006\\u303C\\u3041-\\u3096\\u309F\\u30A1-\\u30FA\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEF\\uA000-\\uA014\\uA016-\\uA48C\\uA4D0-\\uA4F7\\uA500-\\uA60B\\uA610-\\uA61F\\uA62A-\\uA62B\\uA66E\\uA6A0-\\uA6E5\\uA78F\\uA7F7\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD-\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9E0-\\uA9E4\\uA9E7-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA6F\\uAA71-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5-\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADC\\uAAE0-\\uAAEA\\uAAF2\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40-\\uFB41\\uFB43-\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF66-\\uFF6F\\uFF71-\\uFF9D\\uFFA0-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/,\n      peg$c78 = peg$classExpectation([\"\\xAA\", \"\\xBA\", \"\\u01BB\", [\"\\u01C0\", \"\\u01C3\"], \"\\u0294\", [\"\\u05D0\", \"\\u05EA\"], [\"\\u05EF\", \"\\u05F2\"], [\"\\u0620\", \"\\u063F\"], [\"\\u0641\", \"\\u064A\"], [\"\\u066E\", \"\\u066F\"], [\"\\u0671\", \"\\u06D3\"], \"\\u06D5\", [\"\\u06EE\", \"\\u06EF\"], [\"\\u06FA\", \"\\u06FC\"], \"\\u06FF\", \"\\u0710\", [\"\\u0712\", \"\\u072F\"], [\"\\u074D\", \"\\u07A5\"], \"\\u07B1\", [\"\\u07CA\", \"\\u07EA\"], [\"\\u0800\", \"\\u0815\"], [\"\\u0840\", \"\\u0858\"], [\"\\u0860\", \"\\u086A\"], [\"\\u08A0\", \"\\u08B4\"], [\"\\u08B6\", \"\\u08BD\"], [\"\\u0904\", \"\\u0939\"], \"\\u093D\", \"\\u0950\", [\"\\u0958\", \"\\u0961\"], [\"\\u0972\", \"\\u0980\"], [\"\\u0985\", \"\\u098C\"], [\"\\u098F\", \"\\u0990\"], [\"\\u0993\", \"\\u09A8\"], [\"\\u09AA\", \"\\u09B0\"], \"\\u09B2\", [\"\\u09B6\", \"\\u09B9\"], \"\\u09BD\", \"\\u09CE\", [\"\\u09DC\", \"\\u09DD\"], [\"\\u09DF\", \"\\u09E1\"], [\"\\u09F0\", \"\\u09F1\"], \"\\u09FC\", [\"\\u0A05\", \"\\u0A0A\"], [\"\\u0A0F\", \"\\u0A10\"], [\"\\u0A13\", \"\\u0A28\"], [\"\\u0A2A\", \"\\u0A30\"], [\"\\u0A32\", \"\\u0A33\"], [\"\\u0A35\", \"\\u0A36\"], [\"\\u0A38\", \"\\u0A39\"], [\"\\u0A59\", \"\\u0A5C\"], \"\\u0A5E\", [\"\\u0A72\", \"\\u0A74\"], [\"\\u0A85\", \"\\u0A8D\"], [\"\\u0A8F\", \"\\u0A91\"], [\"\\u0A93\", \"\\u0AA8\"], [\"\\u0AAA\", \"\\u0AB0\"], [\"\\u0AB2\", \"\\u0AB3\"], [\"\\u0AB5\", \"\\u0AB9\"], \"\\u0ABD\", \"\\u0AD0\", [\"\\u0AE0\", \"\\u0AE1\"], \"\\u0AF9\", [\"\\u0B05\", \"\\u0B0C\"], [\"\\u0B0F\", \"\\u0B10\"], [\"\\u0B13\", \"\\u0B28\"], [\"\\u0B2A\", \"\\u0B30\"], [\"\\u0B32\", \"\\u0B33\"], [\"\\u0B35\", \"\\u0B39\"], \"\\u0B3D\", [\"\\u0B5C\", \"\\u0B5D\"], [\"\\u0B5F\", \"\\u0B61\"], \"\\u0B71\", \"\\u0B83\", [\"\\u0B85\", \"\\u0B8A\"], [\"\\u0B8E\", \"\\u0B90\"], [\"\\u0B92\", \"\\u0B95\"], [\"\\u0B99\", \"\\u0B9A\"], \"\\u0B9C\", [\"\\u0B9E\", \"\\u0B9F\"], [\"\\u0BA3\", \"\\u0BA4\"], [\"\\u0BA8\", \"\\u0BAA\"], [\"\\u0BAE\", \"\\u0BB9\"], \"\\u0BD0\", [\"\\u0C05\", \"\\u0C0C\"], [\"\\u0C0E\", \"\\u0C10\"], [\"\\u0C12\", \"\\u0C28\"], [\"\\u0C2A\", \"\\u0C39\"], \"\\u0C3D\", [\"\\u0C58\", \"\\u0C5A\"], [\"\\u0C60\", \"\\u0C61\"], \"\\u0C80\", [\"\\u0C85\", \"\\u0C8C\"], [\"\\u0C8E\", \"\\u0C90\"], [\"\\u0C92\", \"\\u0CA8\"], [\"\\u0CAA\", \"\\u0CB3\"], [\"\\u0CB5\", \"\\u0CB9\"], \"\\u0CBD\", \"\\u0CDE\", [\"\\u0CE0\", \"\\u0CE1\"], [\"\\u0CF1\", \"\\u0CF2\"], [\"\\u0D05\", \"\\u0D0C\"], [\"\\u0D0E\", \"\\u0D10\"], [\"\\u0D12\", \"\\u0D3A\"], \"\\u0D3D\", \"\\u0D4E\", [\"\\u0D54\", \"\\u0D56\"], [\"\\u0D5F\", \"\\u0D61\"], [\"\\u0D7A\", \"\\u0D7F\"], [\"\\u0D85\", \"\\u0D96\"], [\"\\u0D9A\", \"\\u0DB1\"], [\"\\u0DB3\", \"\\u0DBB\"], \"\\u0DBD\", [\"\\u0DC0\", \"\\u0DC6\"], [\"\\u0E01\", \"\\u0E30\"], [\"\\u0E32\", \"\\u0E33\"], [\"\\u0E40\", \"\\u0E45\"], [\"\\u0E81\", \"\\u0E82\"], \"\\u0E84\", [\"\\u0E87\", \"\\u0E88\"], \"\\u0E8A\", \"\\u0E8D\", [\"\\u0E94\", \"\\u0E97\"], [\"\\u0E99\", \"\\u0E9F\"], [\"\\u0EA1\", \"\\u0EA3\"], \"\\u0EA5\", \"\\u0EA7\", [\"\\u0EAA\", \"\\u0EAB\"], [\"\\u0EAD\", \"\\u0EB0\"], [\"\\u0EB2\", \"\\u0EB3\"], \"\\u0EBD\", [\"\\u0EC0\", \"\\u0EC4\"], [\"\\u0EDC\", \"\\u0EDF\"], \"\\u0F00\", [\"\\u0F40\", \"\\u0F47\"], [\"\\u0F49\", \"\\u0F6C\"], [\"\\u0F88\", \"\\u0F8C\"], [\"\\u1000\", \"\\u102A\"], \"\\u103F\", [\"\\u1050\", \"\\u1055\"], [\"\\u105A\", \"\\u105D\"], \"\\u1061\", [\"\\u1065\", \"\\u1066\"], [\"\\u106E\", \"\\u1070\"], [\"\\u1075\", \"\\u1081\"], \"\\u108E\", [\"\\u1100\", \"\\u1248\"], [\"\\u124A\", \"\\u124D\"], [\"\\u1250\", \"\\u1256\"], \"\\u1258\", [\"\\u125A\", \"\\u125D\"], [\"\\u1260\", \"\\u1288\"], [\"\\u128A\", \"\\u128D\"], [\"\\u1290\", \"\\u12B0\"], [\"\\u12B2\", \"\\u12B5\"], [\"\\u12B8\", \"\\u12BE\"], \"\\u12C0\", [\"\\u12C2\", \"\\u12C5\"], [\"\\u12C8\", \"\\u12D6\"], [\"\\u12D8\", \"\\u1310\"], [\"\\u1312\", \"\\u1315\"], [\"\\u1318\", \"\\u135A\"], [\"\\u1380\", \"\\u138F\"], [\"\\u1401\", \"\\u166C\"], [\"\\u166F\", \"\\u167F\"], [\"\\u1681\", \"\\u169A\"], [\"\\u16A0\", \"\\u16EA\"], [\"\\u16F1\", \"\\u16F8\"], [\"\\u1700\", \"\\u170C\"], [\"\\u170E\", \"\\u1711\"], [\"\\u1720\", \"\\u1731\"], [\"\\u1740\", \"\\u1751\"], [\"\\u1760\", \"\\u176C\"], [\"\\u176E\", \"\\u1770\"], [\"\\u1780\", \"\\u17B3\"], \"\\u17DC\", [\"\\u1820\", \"\\u1842\"], [\"\\u1844\", \"\\u1878\"], [\"\\u1880\", \"\\u1884\"], [\"\\u1887\", \"\\u18A8\"], \"\\u18AA\", [\"\\u18B0\", \"\\u18F5\"], [\"\\u1900\", \"\\u191E\"], [\"\\u1950\", \"\\u196D\"], [\"\\u1970\", \"\\u1974\"], [\"\\u1980\", \"\\u19AB\"], [\"\\u19B0\", \"\\u19C9\"], [\"\\u1A00\", \"\\u1A16\"], [\"\\u1A20\", \"\\u1A54\"], [\"\\u1B05\", \"\\u1B33\"], [\"\\u1B45\", \"\\u1B4B\"], [\"\\u1B83\", \"\\u1BA0\"], [\"\\u1BAE\", \"\\u1BAF\"], [\"\\u1BBA\", \"\\u1BE5\"], [\"\\u1C00\", \"\\u1C23\"], [\"\\u1C4D\", \"\\u1C4F\"], [\"\\u1C5A\", \"\\u1C77\"], [\"\\u1CE9\", \"\\u1CEC\"], [\"\\u1CEE\", \"\\u1CF1\"], [\"\\u1CF5\", \"\\u1CF6\"], [\"\\u2135\", \"\\u2138\"], [\"\\u2D30\", \"\\u2D67\"], [\"\\u2D80\", \"\\u2D96\"], [\"\\u2DA0\", \"\\u2DA6\"], [\"\\u2DA8\", \"\\u2DAE\"], [\"\\u2DB0\", \"\\u2DB6\"], [\"\\u2DB8\", \"\\u2DBE\"], [\"\\u2DC0\", \"\\u2DC6\"], [\"\\u2DC8\", \"\\u2DCE\"], [\"\\u2DD0\", \"\\u2DD6\"], [\"\\u2DD8\", \"\\u2DDE\"], \"\\u3006\", \"\\u303C\", [\"\\u3041\", \"\\u3096\"], \"\\u309F\", [\"\\u30A1\", \"\\u30FA\"], \"\\u30FF\", [\"\\u3105\", \"\\u312F\"], [\"\\u3131\", \"\\u318E\"], [\"\\u31A0\", \"\\u31BA\"], [\"\\u31F0\", \"\\u31FF\"], [\"\\u3400\", \"\\u4DB5\"], [\"\\u4E00\", \"\\u9FEF\"], [\"\\uA000\", \"\\uA014\"], [\"\\uA016\", \"\\uA48C\"], [\"\\uA4D0\", \"\\uA4F7\"], [\"\\uA500\", \"\\uA60B\"], [\"\\uA610\", \"\\uA61F\"], [\"\\uA62A\", \"\\uA62B\"], \"\\uA66E\", [\"\\uA6A0\", \"\\uA6E5\"], \"\\uA78F\", \"\\uA7F7\", [\"\\uA7FB\", \"\\uA801\"], [\"\\uA803\", \"\\uA805\"], [\"\\uA807\", \"\\uA80A\"], [\"\\uA80C\", \"\\uA822\"], [\"\\uA840\", \"\\uA873\"], [\"\\uA882\", \"\\uA8B3\"], [\"\\uA8F2\", \"\\uA8F7\"], \"\\uA8FB\", [\"\\uA8FD\", \"\\uA8FE\"], [\"\\uA90A\", \"\\uA925\"], [\"\\uA930\", \"\\uA946\"], [\"\\uA960\", \"\\uA97C\"], [\"\\uA984\", \"\\uA9B2\"], [\"\\uA9E0\", \"\\uA9E4\"], [\"\\uA9E7\", \"\\uA9EF\"], [\"\\uA9FA\", \"\\uA9FE\"], [\"\\uAA00\", \"\\uAA28\"], [\"\\uAA40\", \"\\uAA42\"], [\"\\uAA44\", \"\\uAA4B\"], [\"\\uAA60\", \"\\uAA6F\"], [\"\\uAA71\", \"\\uAA76\"], \"\\uAA7A\", [\"\\uAA7E\", \"\\uAAAF\"], \"\\uAAB1\", [\"\\uAAB5\", \"\\uAAB6\"], [\"\\uAAB9\", \"\\uAABD\"], \"\\uAAC0\", \"\\uAAC2\", [\"\\uAADB\", \"\\uAADC\"], [\"\\uAAE0\", \"\\uAAEA\"], \"\\uAAF2\", [\"\\uAB01\", \"\\uAB06\"], [\"\\uAB09\", \"\\uAB0E\"], [\"\\uAB11\", \"\\uAB16\"], [\"\\uAB20\", \"\\uAB26\"], [\"\\uAB28\", \"\\uAB2E\"], [\"\\uABC0\", \"\\uABE2\"], [\"\\uAC00\", \"\\uD7A3\"], [\"\\uD7B0\", \"\\uD7C6\"], [\"\\uD7CB\", \"\\uD7FB\"], [\"\\uF900\", \"\\uFA6D\"], [\"\\uFA70\", \"\\uFAD9\"], \"\\uFB1D\", [\"\\uFB1F\", \"\\uFB28\"], [\"\\uFB2A\", \"\\uFB36\"], [\"\\uFB38\", \"\\uFB3C\"], \"\\uFB3E\", [\"\\uFB40\", \"\\uFB41\"], [\"\\uFB43\", \"\\uFB44\"], [\"\\uFB46\", \"\\uFBB1\"], [\"\\uFBD3\", \"\\uFD3D\"], [\"\\uFD50\", \"\\uFD8F\"], [\"\\uFD92\", \"\\uFDC7\"], [\"\\uFDF0\", \"\\uFDFB\"], [\"\\uFE70\", \"\\uFE74\"], [\"\\uFE76\", \"\\uFEFC\"], [\"\\uFF66\", \"\\uFF6F\"], [\"\\uFF71\", \"\\uFF9D\"], [\"\\uFFA0\", \"\\uFFBE\"], [\"\\uFFC2\", \"\\uFFC7\"], [\"\\uFFCA\", \"\\uFFCF\"], [\"\\uFFD2\", \"\\uFFD7\"], [\"\\uFFDA\", \"\\uFFDC\"]], false, false),\n      peg$c79 = /^[\\u01C5\\u01C8\\u01CB\\u01F2\\u1F88-\\u1F8F\\u1F98-\\u1F9F\\u1FA8-\\u1FAF\\u1FBC\\u1FCC\\u1FFC]/,\n      peg$c80 = peg$classExpectation([\"\\u01C5\", \"\\u01C8\", \"\\u01CB\", \"\\u01F2\", [\"\\u1F88\", \"\\u1F8F\"], [\"\\u1F98\", \"\\u1F9F\"], [\"\\u1FA8\", \"\\u1FAF\"], \"\\u1FBC\", \"\\u1FCC\", \"\\u1FFC\"], false, false),\n      peg$c81 = /^[A-Z\\xC0-\\xD6\\xD8-\\xDE\\u0100\\u0102\\u0104\\u0106\\u0108\\u010A\\u010C\\u010E\\u0110\\u0112\\u0114\\u0116\\u0118\\u011A\\u011C\\u011E\\u0120\\u0122\\u0124\\u0126\\u0128\\u012A\\u012C\\u012E\\u0130\\u0132\\u0134\\u0136\\u0139\\u013B\\u013D\\u013F\\u0141\\u0143\\u0145\\u0147\\u014A\\u014C\\u014E\\u0150\\u0152\\u0154\\u0156\\u0158\\u015A\\u015C\\u015E\\u0160\\u0162\\u0164\\u0166\\u0168\\u016A\\u016C\\u016E\\u0170\\u0172\\u0174\\u0176\\u0178-\\u0179\\u017B\\u017D\\u0181-\\u0182\\u0184\\u0186-\\u0187\\u0189-\\u018B\\u018E-\\u0191\\u0193-\\u0194\\u0196-\\u0198\\u019C-\\u019D\\u019F-\\u01A0\\u01A2\\u01A4\\u01A6-\\u01A7\\u01A9\\u01AC\\u01AE-\\u01AF\\u01B1-\\u01B3\\u01B5\\u01B7-\\u01B8\\u01BC\\u01C4\\u01C7\\u01CA\\u01CD\\u01CF\\u01D1\\u01D3\\u01D5\\u01D7\\u01D9\\u01DB\\u01DE\\u01E0\\u01E2\\u01E4\\u01E6\\u01E8\\u01EA\\u01EC\\u01EE\\u01F1\\u01F4\\u01F6-\\u01F8\\u01FA\\u01FC\\u01FE\\u0200\\u0202\\u0204\\u0206\\u0208\\u020A\\u020C\\u020E\\u0210\\u0212\\u0214\\u0216\\u0218\\u021A\\u021C\\u021E\\u0220\\u0222\\u0224\\u0226\\u0228\\u022A\\u022C\\u022E\\u0230\\u0232\\u023A-\\u023B\\u023D-\\u023E\\u0241\\u0243-\\u0246\\u0248\\u024A\\u024C\\u024E\\u0370\\u0372\\u0376\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u038F\\u0391-\\u03A1\\u03A3-\\u03AB\\u03CF\\u03D2-\\u03D4\\u03D8\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2\\u03E4\\u03E6\\u03E8\\u03EA\\u03EC\\u03EE\\u03F4\\u03F7\\u03F9-\\u03FA\\u03FD-\\u042F\\u0460\\u0462\\u0464\\u0466\\u0468\\u046A\\u046C\\u046E\\u0470\\u0472\\u0474\\u0476\\u0478\\u047A\\u047C\\u047E\\u0480\\u048A\\u048C\\u048E\\u0490\\u0492\\u0494\\u0496\\u0498\\u049A\\u049C\\u049E\\u04A0\\u04A2\\u04A4\\u04A6\\u04A8\\u04AA\\u04AC\\u04AE\\u04B0\\u04B2\\u04B4\\u04B6\\u04B8\\u04BA\\u04BC\\u04BE\\u04C0-\\u04C1\\u04C3\\u04C5\\u04C7\\u04C9\\u04CB\\u04CD\\u04D0\\u04D2\\u04D4\\u04D6\\u04D8\\u04DA\\u04DC\\u04DE\\u04E0\\u04E2\\u04E4\\u04E6\\u04E8\\u04EA\\u04EC\\u04EE\\u04F0\\u04F2\\u04F4\\u04F6\\u04F8\\u04FA\\u04FC\\u04FE\\u0500\\u0502\\u0504\\u0506\\u0508\\u050A\\u050C\\u050E\\u0510\\u0512\\u0514\\u0516\\u0518\\u051A\\u051C\\u051E\\u0520\\u0522\\u0524\\u0526\\u0528\\u052A\\u052C\\u052E\\u0531-\\u0556\\u10A0-\\u10C5\\u10C7\\u10CD\\u13A0-\\u13F5\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1E00\\u1E02\\u1E04\\u1E06\\u1E08\\u1E0A\\u1E0C\\u1E0E\\u1E10\\u1E12\\u1E14\\u1E16\\u1E18\\u1E1A\\u1E1C\\u1E1E\\u1E20\\u1E22\\u1E24\\u1E26\\u1E28\\u1E2A\\u1E2C\\u1E2E\\u1E30\\u1E32\\u1E34\\u1E36\\u1E38\\u1E3A\\u1E3C\\u1E3E\\u1E40\\u1E42\\u1E44\\u1E46\\u1E48\\u1E4A\\u1E4C\\u1E4E\\u1E50\\u1E52\\u1E54\\u1E56\\u1E58\\u1E5A\\u1E5C\\u1E5E\\u1E60\\u1E62\\u1E64\\u1E66\\u1E68\\u1E6A\\u1E6C\\u1E6E\\u1E70\\u1E72\\u1E74\\u1E76\\u1E78\\u1E7A\\u1E7C\\u1E7E\\u1E80\\u1E82\\u1E84\\u1E86\\u1E88\\u1E8A\\u1E8C\\u1E8E\\u1E90\\u1E92\\u1E94\\u1E9E\\u1EA0\\u1EA2\\u1EA4\\u1EA6\\u1EA8\\u1EAA\\u1EAC\\u1EAE\\u1EB0\\u1EB2\\u1EB4\\u1EB6\\u1EB8\\u1EBA\\u1EBC\\u1EBE\\u1EC0\\u1EC2\\u1EC4\\u1EC6\\u1EC8\\u1ECA\\u1ECC\\u1ECE\\u1ED0\\u1ED2\\u1ED4\\u1ED6\\u1ED8\\u1EDA\\u1EDC\\u1EDE\\u1EE0\\u1EE2\\u1EE4\\u1EE6\\u1EE8\\u1EEA\\u1EEC\\u1EEE\\u1EF0\\u1EF2\\u1EF4\\u1EF6\\u1EF8\\u1EFA\\u1EFC\\u1EFE\\u1F08-\\u1F0F\\u1F18-\\u1F1D\\u1F28-\\u1F2F\\u1F38-\\u1F3F\\u1F48-\\u1F4D\\u1F59\\u1F5B\\u1F5D\\u1F5F\\u1F68-\\u1F6F\\u1FB8-\\u1FBB\\u1FC8-\\u1FCB\\u1FD8-\\u1FDB\\u1FE8-\\u1FEC\\u1FF8-\\u1FFB\\u2102\\u2107\\u210B-\\u210D\\u2110-\\u2112\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u2130-\\u2133\\u213E-\\u213F\\u2145\\u2183\\u2C00-\\u2C2E\\u2C60\\u2C62-\\u2C64\\u2C67\\u2C69\\u2C6B\\u2C6D-\\u2C70\\u2C72\\u2C75\\u2C7E-\\u2C80\\u2C82\\u2C84\\u2C86\\u2C88\\u2C8A\\u2C8C\\u2C8E\\u2C90\\u2C92\\u2C94\\u2C96\\u2C98\\u2C9A\\u2C9C\\u2C9E\\u2CA0\\u2CA2\\u2CA4\\u2CA6\\u2CA8\\u2CAA\\u2CAC\\u2CAE\\u2CB0\\u2CB2\\u2CB4\\u2CB6\\u2CB8\\u2CBA\\u2CBC\\u2CBE\\u2CC0\\u2CC2\\u2CC4\\u2CC6\\u2CC8\\u2CCA\\u2CCC\\u2CCE\\u2CD0\\u2CD2\\u2CD4\\u2CD6\\u2CD8\\u2CDA\\u2CDC\\u2CDE\\u2CE0\\u2CE2\\u2CEB\\u2CED\\u2CF2\\uA640\\uA642\\uA644\\uA646\\uA648\\uA64A\\uA64C\\uA64E\\uA650\\uA652\\uA654\\uA656\\uA658\\uA65A\\uA65C\\uA65E\\uA660\\uA662\\uA664\\uA666\\uA668\\uA66A\\uA66C\\uA680\\uA682\\uA684\\uA686\\uA688\\uA68A\\uA68C\\uA68E\\uA690\\uA692\\uA694\\uA696\\uA698\\uA69A\\uA722\\uA724\\uA726\\uA728\\uA72A\\uA72C\\uA72E\\uA732\\uA734\\uA736\\uA738\\uA73A\\uA73C\\uA73E\\uA740\\uA742\\uA744\\uA746\\uA748\\uA74A\\uA74C\\uA74E\\uA750\\uA752\\uA754\\uA756\\uA758\\uA75A\\uA75C\\uA75E\\uA760\\uA762\\uA764\\uA766\\uA768\\uA76A\\uA76C\\uA76E\\uA779\\uA77B\\uA77D-\\uA77E\\uA780\\uA782\\uA784\\uA786\\uA78B\\uA78D\\uA790\\uA792\\uA796\\uA798\\uA79A\\uA79C\\uA79E\\uA7A0\\uA7A2\\uA7A4\\uA7A6\\uA7A8\\uA7AA-\\uA7AE\\uA7B0-\\uA7B4\\uA7B6\\uA7B8\\uFF21-\\uFF3A]/,\n      peg$c82 = peg$classExpectation([[\"A\", \"Z\"], [\"\\xC0\", \"\\xD6\"], [\"\\xD8\", \"\\xDE\"], \"\\u0100\", \"\\u0102\", \"\\u0104\", \"\\u0106\", \"\\u0108\", \"\\u010A\", \"\\u010C\", \"\\u010E\", \"\\u0110\", \"\\u0112\", \"\\u0114\", \"\\u0116\", \"\\u0118\", \"\\u011A\", \"\\u011C\", \"\\u011E\", \"\\u0120\", \"\\u0122\", \"\\u0124\", \"\\u0126\", \"\\u0128\", \"\\u012A\", \"\\u012C\", \"\\u012E\", \"\\u0130\", \"\\u0132\", \"\\u0134\", \"\\u0136\", \"\\u0139\", \"\\u013B\", \"\\u013D\", \"\\u013F\", \"\\u0141\", \"\\u0143\", \"\\u0145\", \"\\u0147\", \"\\u014A\", \"\\u014C\", \"\\u014E\", \"\\u0150\", \"\\u0152\", \"\\u0154\", \"\\u0156\", \"\\u0158\", \"\\u015A\", \"\\u015C\", \"\\u015E\", \"\\u0160\", \"\\u0162\", \"\\u0164\", \"\\u0166\", \"\\u0168\", \"\\u016A\", \"\\u016C\", \"\\u016E\", \"\\u0170\", \"\\u0172\", \"\\u0174\", \"\\u0176\", [\"\\u0178\", \"\\u0179\"], \"\\u017B\", \"\\u017D\", [\"\\u0181\", \"\\u0182\"], \"\\u0184\", [\"\\u0186\", \"\\u0187\"], [\"\\u0189\", \"\\u018B\"], [\"\\u018E\", \"\\u0191\"], [\"\\u0193\", \"\\u0194\"], [\"\\u0196\", \"\\u0198\"], [\"\\u019C\", \"\\u019D\"], [\"\\u019F\", \"\\u01A0\"], \"\\u01A2\", \"\\u01A4\", [\"\\u01A6\", \"\\u01A7\"], \"\\u01A9\", \"\\u01AC\", [\"\\u01AE\", \"\\u01AF\"], [\"\\u01B1\", \"\\u01B3\"], \"\\u01B5\", [\"\\u01B7\", \"\\u01B8\"], \"\\u01BC\", \"\\u01C4\", \"\\u01C7\", \"\\u01CA\", \"\\u01CD\", \"\\u01CF\", \"\\u01D1\", \"\\u01D3\", \"\\u01D5\", \"\\u01D7\", \"\\u01D9\", \"\\u01DB\", \"\\u01DE\", \"\\u01E0\", \"\\u01E2\", \"\\u01E4\", \"\\u01E6\", \"\\u01E8\", \"\\u01EA\", \"\\u01EC\", \"\\u01EE\", \"\\u01F1\", \"\\u01F4\", [\"\\u01F6\", \"\\u01F8\"], \"\\u01FA\", \"\\u01FC\", \"\\u01FE\", \"\\u0200\", \"\\u0202\", \"\\u0204\", \"\\u0206\", \"\\u0208\", \"\\u020A\", \"\\u020C\", \"\\u020E\", \"\\u0210\", \"\\u0212\", \"\\u0214\", \"\\u0216\", \"\\u0218\", \"\\u021A\", \"\\u021C\", \"\\u021E\", \"\\u0220\", \"\\u0222\", \"\\u0224\", \"\\u0226\", \"\\u0228\", \"\\u022A\", \"\\u022C\", \"\\u022E\", \"\\u0230\", \"\\u0232\", [\"\\u023A\", \"\\u023B\"], [\"\\u023D\", \"\\u023E\"], \"\\u0241\", [\"\\u0243\", \"\\u0246\"], \"\\u0248\", \"\\u024A\", \"\\u024C\", \"\\u024E\", \"\\u0370\", \"\\u0372\", \"\\u0376\", \"\\u037F\", \"\\u0386\", [\"\\u0388\", \"\\u038A\"], \"\\u038C\", [\"\\u038E\", \"\\u038F\"], [\"\\u0391\", \"\\u03A1\"], [\"\\u03A3\", \"\\u03AB\"], \"\\u03CF\", [\"\\u03D2\", \"\\u03D4\"], \"\\u03D8\", \"\\u03DA\", \"\\u03DC\", \"\\u03DE\", \"\\u03E0\", \"\\u03E2\", \"\\u03E4\", \"\\u03E6\", \"\\u03E8\", \"\\u03EA\", \"\\u03EC\", \"\\u03EE\", \"\\u03F4\", \"\\u03F7\", [\"\\u03F9\", \"\\u03FA\"], [\"\\u03FD\", \"\\u042F\"], \"\\u0460\", \"\\u0462\", \"\\u0464\", \"\\u0466\", \"\\u0468\", \"\\u046A\", \"\\u046C\", \"\\u046E\", \"\\u0470\", \"\\u0472\", \"\\u0474\", \"\\u0476\", \"\\u0478\", \"\\u047A\", \"\\u047C\", \"\\u047E\", \"\\u0480\", \"\\u048A\", \"\\u048C\", \"\\u048E\", \"\\u0490\", \"\\u0492\", \"\\u0494\", \"\\u0496\", \"\\u0498\", \"\\u049A\", \"\\u049C\", \"\\u049E\", \"\\u04A0\", \"\\u04A2\", \"\\u04A4\", \"\\u04A6\", \"\\u04A8\", \"\\u04AA\", \"\\u04AC\", \"\\u04AE\", \"\\u04B0\", \"\\u04B2\", \"\\u04B4\", \"\\u04B6\", \"\\u04B8\", \"\\u04BA\", \"\\u04BC\", \"\\u04BE\", [\"\\u04C0\", \"\\u04C1\"], \"\\u04C3\", \"\\u04C5\", \"\\u04C7\", \"\\u04C9\", \"\\u04CB\", \"\\u04CD\", \"\\u04D0\", \"\\u04D2\", \"\\u04D4\", \"\\u04D6\", \"\\u04D8\", \"\\u04DA\", \"\\u04DC\", \"\\u04DE\", \"\\u04E0\", \"\\u04E2\", \"\\u04E4\", \"\\u04E6\", \"\\u04E8\", \"\\u04EA\", \"\\u04EC\", \"\\u04EE\", \"\\u04F0\", \"\\u04F2\", \"\\u04F4\", \"\\u04F6\", \"\\u04F8\", \"\\u04FA\", \"\\u04FC\", \"\\u04FE\", \"\\u0500\", \"\\u0502\", \"\\u0504\", \"\\u0506\", \"\\u0508\", \"\\u050A\", \"\\u050C\", \"\\u050E\", \"\\u0510\", \"\\u0512\", \"\\u0514\", \"\\u0516\", \"\\u0518\", \"\\u051A\", \"\\u051C\", \"\\u051E\", \"\\u0520\", \"\\u0522\", \"\\u0524\", \"\\u0526\", \"\\u0528\", \"\\u052A\", \"\\u052C\", \"\\u052E\", [\"\\u0531\", \"\\u0556\"], [\"\\u10A0\", \"\\u10C5\"], \"\\u10C7\", \"\\u10CD\", [\"\\u13A0\", \"\\u13F5\"], [\"\\u1C90\", \"\\u1CBA\"], [\"\\u1CBD\", \"\\u1CBF\"], \"\\u1E00\", \"\\u1E02\", \"\\u1E04\", \"\\u1E06\", \"\\u1E08\", \"\\u1E0A\", \"\\u1E0C\", \"\\u1E0E\", \"\\u1E10\", \"\\u1E12\", \"\\u1E14\", \"\\u1E16\", \"\\u1E18\", \"\\u1E1A\", \"\\u1E1C\", \"\\u1E1E\", \"\\u1E20\", \"\\u1E22\", \"\\u1E24\", \"\\u1E26\", \"\\u1E28\", \"\\u1E2A\", \"\\u1E2C\", \"\\u1E2E\", \"\\u1E30\", \"\\u1E32\", \"\\u1E34\", \"\\u1E36\", \"\\u1E38\", \"\\u1E3A\", \"\\u1E3C\", \"\\u1E3E\", \"\\u1E40\", \"\\u1E42\", \"\\u1E44\", \"\\u1E46\", \"\\u1E48\", \"\\u1E4A\", \"\\u1E4C\", \"\\u1E4E\", \"\\u1E50\", \"\\u1E52\", \"\\u1E54\", \"\\u1E56\", \"\\u1E58\", \"\\u1E5A\", \"\\u1E5C\", \"\\u1E5E\", \"\\u1E60\", \"\\u1E62\", \"\\u1E64\", \"\\u1E66\", \"\\u1E68\", \"\\u1E6A\", \"\\u1E6C\", \"\\u1E6E\", \"\\u1E70\", \"\\u1E72\", \"\\u1E74\", \"\\u1E76\", \"\\u1E78\", \"\\u1E7A\", \"\\u1E7C\", \"\\u1E7E\", \"\\u1E80\", \"\\u1E82\", \"\\u1E84\", \"\\u1E86\", \"\\u1E88\", \"\\u1E8A\", \"\\u1E8C\", \"\\u1E8E\", \"\\u1E90\", \"\\u1E92\", \"\\u1E94\", \"\\u1E9E\", \"\\u1EA0\", \"\\u1EA2\", \"\\u1EA4\", \"\\u1EA6\", \"\\u1EA8\", \"\\u1EAA\", \"\\u1EAC\", \"\\u1EAE\", \"\\u1EB0\", \"\\u1EB2\", \"\\u1EB4\", \"\\u1EB6\", \"\\u1EB8\", \"\\u1EBA\", \"\\u1EBC\", \"\\u1EBE\", \"\\u1EC0\", \"\\u1EC2\", \"\\u1EC4\", \"\\u1EC6\", \"\\u1EC8\", \"\\u1ECA\", \"\\u1ECC\", \"\\u1ECE\", \"\\u1ED0\", \"\\u1ED2\", \"\\u1ED4\", \"\\u1ED6\", \"\\u1ED8\", \"\\u1EDA\", \"\\u1EDC\", \"\\u1EDE\", \"\\u1EE0\", \"\\u1EE2\", \"\\u1EE4\", \"\\u1EE6\", \"\\u1EE8\", \"\\u1EEA\", \"\\u1EEC\", \"\\u1EEE\", \"\\u1EF0\", \"\\u1EF2\", \"\\u1EF4\", \"\\u1EF6\", \"\\u1EF8\", \"\\u1EFA\", \"\\u1EFC\", \"\\u1EFE\", [\"\\u1F08\", \"\\u1F0F\"], [\"\\u1F18\", \"\\u1F1D\"], [\"\\u1F28\", \"\\u1F2F\"], [\"\\u1F38\", \"\\u1F3F\"], [\"\\u1F48\", \"\\u1F4D\"], \"\\u1F59\", \"\\u1F5B\", \"\\u1F5D\", \"\\u1F5F\", [\"\\u1F68\", \"\\u1F6F\"], [\"\\u1FB8\", \"\\u1FBB\"], [\"\\u1FC8\", \"\\u1FCB\"], [\"\\u1FD8\", \"\\u1FDB\"], [\"\\u1FE8\", \"\\u1FEC\"], [\"\\u1FF8\", \"\\u1FFB\"], \"\\u2102\", \"\\u2107\", [\"\\u210B\", \"\\u210D\"], [\"\\u2110\", \"\\u2112\"], \"\\u2115\", [\"\\u2119\", \"\\u211D\"], \"\\u2124\", \"\\u2126\", \"\\u2128\", [\"\\u212A\", \"\\u212D\"], [\"\\u2130\", \"\\u2133\"], [\"\\u213E\", \"\\u213F\"], \"\\u2145\", \"\\u2183\", [\"\\u2C00\", \"\\u2C2E\"], \"\\u2C60\", [\"\\u2C62\", \"\\u2C64\"], \"\\u2C67\", \"\\u2C69\", \"\\u2C6B\", [\"\\u2C6D\", \"\\u2C70\"], \"\\u2C72\", \"\\u2C75\", [\"\\u2C7E\", \"\\u2C80\"], \"\\u2C82\", \"\\u2C84\", \"\\u2C86\", \"\\u2C88\", \"\\u2C8A\", \"\\u2C8C\", \"\\u2C8E\", \"\\u2C90\", \"\\u2C92\", \"\\u2C94\", \"\\u2C96\", \"\\u2C98\", \"\\u2C9A\", \"\\u2C9C\", \"\\u2C9E\", \"\\u2CA0\", \"\\u2CA2\", \"\\u2CA4\", \"\\u2CA6\", \"\\u2CA8\", \"\\u2CAA\", \"\\u2CAC\", \"\\u2CAE\", \"\\u2CB0\", \"\\u2CB2\", \"\\u2CB4\", \"\\u2CB6\", \"\\u2CB8\", \"\\u2CBA\", \"\\u2CBC\", \"\\u2CBE\", \"\\u2CC0\", \"\\u2CC2\", \"\\u2CC4\", \"\\u2CC6\", \"\\u2CC8\", \"\\u2CCA\", \"\\u2CCC\", \"\\u2CCE\", \"\\u2CD0\", \"\\u2CD2\", \"\\u2CD4\", \"\\u2CD6\", \"\\u2CD8\", \"\\u2CDA\", \"\\u2CDC\", \"\\u2CDE\", \"\\u2CE0\", \"\\u2CE2\", \"\\u2CEB\", \"\\u2CED\", \"\\u2CF2\", \"\\uA640\", \"\\uA642\", \"\\uA644\", \"\\uA646\", \"\\uA648\", \"\\uA64A\", \"\\uA64C\", \"\\uA64E\", \"\\uA650\", \"\\uA652\", \"\\uA654\", \"\\uA656\", \"\\uA658\", \"\\uA65A\", \"\\uA65C\", \"\\uA65E\", \"\\uA660\", \"\\uA662\", \"\\uA664\", \"\\uA666\", \"\\uA668\", \"\\uA66A\", \"\\uA66C\", \"\\uA680\", \"\\uA682\", \"\\uA684\", \"\\uA686\", \"\\uA688\", \"\\uA68A\", \"\\uA68C\", \"\\uA68E\", \"\\uA690\", \"\\uA692\", \"\\uA694\", \"\\uA696\", \"\\uA698\", \"\\uA69A\", \"\\uA722\", \"\\uA724\", \"\\uA726\", \"\\uA728\", \"\\uA72A\", \"\\uA72C\", \"\\uA72E\", \"\\uA732\", \"\\uA734\", \"\\uA736\", \"\\uA738\", \"\\uA73A\", \"\\uA73C\", \"\\uA73E\", \"\\uA740\", \"\\uA742\", \"\\uA744\", \"\\uA746\", \"\\uA748\", \"\\uA74A\", \"\\uA74C\", \"\\uA74E\", \"\\uA750\", \"\\uA752\", \"\\uA754\", \"\\uA756\", \"\\uA758\", \"\\uA75A\", \"\\uA75C\", \"\\uA75E\", \"\\uA760\", \"\\uA762\", \"\\uA764\", \"\\uA766\", \"\\uA768\", \"\\uA76A\", \"\\uA76C\", \"\\uA76E\", \"\\uA779\", \"\\uA77B\", [\"\\uA77D\", \"\\uA77E\"], \"\\uA780\", \"\\uA782\", \"\\uA784\", \"\\uA786\", \"\\uA78B\", \"\\uA78D\", \"\\uA790\", \"\\uA792\", \"\\uA796\", \"\\uA798\", \"\\uA79A\", \"\\uA79C\", \"\\uA79E\", \"\\uA7A0\", \"\\uA7A2\", \"\\uA7A4\", \"\\uA7A6\", \"\\uA7A8\", [\"\\uA7AA\", \"\\uA7AE\"], [\"\\uA7B0\", \"\\uA7B4\"], \"\\uA7B6\", \"\\uA7B8\", [\"\\uFF21\", \"\\uFF3A\"]], false, false),\n      peg$c83 = /^[\\u0903\\u093B\\u093E-\\u0940\\u0949-\\u094C\\u094E-\\u094F\\u0982-\\u0983\\u09BE-\\u09C0\\u09C7-\\u09C8\\u09CB-\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB-\\u0ACC\\u0B02-\\u0B03\\u0B3E\\u0B40\\u0B47-\\u0B48\\u0B4B-\\u0B4C\\u0B57\\u0BBE-\\u0BBF\\u0BC1-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82-\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7-\\u0CC8\\u0CCA-\\u0CCB\\u0CD5-\\u0CD6\\u0D02-\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D57\\u0D82-\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DDF\\u0DF2-\\u0DF3\\u0F3E-\\u0F3F\\u0F7F\\u102B-\\u102C\\u1031\\u1038\\u103B-\\u103C\\u1056-\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u1083-\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u17B6\\u17BE-\\u17C5\\u17C7-\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930-\\u1931\\u1933-\\u1938\\u1A19-\\u1A1A\\u1A55\\u1A57\\u1A61\\u1A63-\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3D-\\u1B41\\u1B43-\\u1B44\\u1B82\\u1BA1\\u1BA6-\\u1BA7\\u1BAA\\u1BE7\\u1BEA-\\u1BEC\\u1BEE\\u1BF2-\\u1BF3\\u1C24-\\u1C2B\\u1C34-\\u1C35\\u1CE1\\u1CF2-\\u1CF3\\u1CF7\\u302E-\\u302F\\uA823-\\uA824\\uA827\\uA880-\\uA881\\uA8B4-\\uA8C3\\uA952-\\uA953\\uA983\\uA9B4-\\uA9B5\\uA9BA-\\uA9BB\\uA9BD-\\uA9C0\\uAA2F-\\uAA30\\uAA33-\\uAA34\\uAA4D\\uAA7B\\uAA7D\\uAAEB\\uAAEE-\\uAAEF\\uAAF5\\uABE3-\\uABE4\\uABE6-\\uABE7\\uABE9-\\uABEA\\uABEC]/,\n      peg$c84 = peg$classExpectation([\"\\u0903\", \"\\u093B\", [\"\\u093E\", \"\\u0940\"], [\"\\u0949\", \"\\u094C\"], [\"\\u094E\", \"\\u094F\"], [\"\\u0982\", \"\\u0983\"], [\"\\u09BE\", \"\\u09C0\"], [\"\\u09C7\", \"\\u09C8\"], [\"\\u09CB\", \"\\u09CC\"], \"\\u09D7\", \"\\u0A03\", [\"\\u0A3E\", \"\\u0A40\"], \"\\u0A83\", [\"\\u0ABE\", \"\\u0AC0\"], \"\\u0AC9\", [\"\\u0ACB\", \"\\u0ACC\"], [\"\\u0B02\", \"\\u0B03\"], \"\\u0B3E\", \"\\u0B40\", [\"\\u0B47\", \"\\u0B48\"], [\"\\u0B4B\", \"\\u0B4C\"], \"\\u0B57\", [\"\\u0BBE\", \"\\u0BBF\"], [\"\\u0BC1\", \"\\u0BC2\"], [\"\\u0BC6\", \"\\u0BC8\"], [\"\\u0BCA\", \"\\u0BCC\"], \"\\u0BD7\", [\"\\u0C01\", \"\\u0C03\"], [\"\\u0C41\", \"\\u0C44\"], [\"\\u0C82\", \"\\u0C83\"], \"\\u0CBE\", [\"\\u0CC0\", \"\\u0CC4\"], [\"\\u0CC7\", \"\\u0CC8\"], [\"\\u0CCA\", \"\\u0CCB\"], [\"\\u0CD5\", \"\\u0CD6\"], [\"\\u0D02\", \"\\u0D03\"], [\"\\u0D3E\", \"\\u0D40\"], [\"\\u0D46\", \"\\u0D48\"], [\"\\u0D4A\", \"\\u0D4C\"], \"\\u0D57\", [\"\\u0D82\", \"\\u0D83\"], [\"\\u0DCF\", \"\\u0DD1\"], [\"\\u0DD8\", \"\\u0DDF\"], [\"\\u0DF2\", \"\\u0DF3\"], [\"\\u0F3E\", \"\\u0F3F\"], \"\\u0F7F\", [\"\\u102B\", \"\\u102C\"], \"\\u1031\", \"\\u1038\", [\"\\u103B\", \"\\u103C\"], [\"\\u1056\", \"\\u1057\"], [\"\\u1062\", \"\\u1064\"], [\"\\u1067\", \"\\u106D\"], [\"\\u1083\", \"\\u1084\"], [\"\\u1087\", \"\\u108C\"], \"\\u108F\", [\"\\u109A\", \"\\u109C\"], \"\\u17B6\", [\"\\u17BE\", \"\\u17C5\"], [\"\\u17C7\", \"\\u17C8\"], [\"\\u1923\", \"\\u1926\"], [\"\\u1929\", \"\\u192B\"], [\"\\u1930\", \"\\u1931\"], [\"\\u1933\", \"\\u1938\"], [\"\\u1A19\", \"\\u1A1A\"], \"\\u1A55\", \"\\u1A57\", \"\\u1A61\", [\"\\u1A63\", \"\\u1A64\"], [\"\\u1A6D\", \"\\u1A72\"], \"\\u1B04\", \"\\u1B35\", \"\\u1B3B\", [\"\\u1B3D\", \"\\u1B41\"], [\"\\u1B43\", \"\\u1B44\"], \"\\u1B82\", \"\\u1BA1\", [\"\\u1BA6\", \"\\u1BA7\"], \"\\u1BAA\", \"\\u1BE7\", [\"\\u1BEA\", \"\\u1BEC\"], \"\\u1BEE\", [\"\\u1BF2\", \"\\u1BF3\"], [\"\\u1C24\", \"\\u1C2B\"], [\"\\u1C34\", \"\\u1C35\"], \"\\u1CE1\", [\"\\u1CF2\", \"\\u1CF3\"], \"\\u1CF7\", [\"\\u302E\", \"\\u302F\"], [\"\\uA823\", \"\\uA824\"], \"\\uA827\", [\"\\uA880\", \"\\uA881\"], [\"\\uA8B4\", \"\\uA8C3\"], [\"\\uA952\", \"\\uA953\"], \"\\uA983\", [\"\\uA9B4\", \"\\uA9B5\"], [\"\\uA9BA\", \"\\uA9BB\"], [\"\\uA9BD\", \"\\uA9C0\"], [\"\\uAA2F\", \"\\uAA30\"], [\"\\uAA33\", \"\\uAA34\"], \"\\uAA4D\", \"\\uAA7B\", \"\\uAA7D\", \"\\uAAEB\", [\"\\uAAEE\", \"\\uAAEF\"], \"\\uAAF5\", [\"\\uABE3\", \"\\uABE4\"], [\"\\uABE6\", \"\\uABE7\"], [\"\\uABE9\", \"\\uABEA\"], \"\\uABEC\"], false, false),\n      peg$c85 = /^[\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1-\\u05C2\\u05C4-\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7-\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08D3-\\u08E1\\u08E3-\\u0902\\u093A\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0957\\u0962-\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2-\\u09E3\\u09FE\\u0A01-\\u0A02\\u0A3C\\u0A41-\\u0A42\\u0A47-\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70-\\u0A71\\u0A75\\u0A81-\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7-\\u0AC8\\u0ACD\\u0AE2-\\u0AE3\\u0AFA-\\u0AFF\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62-\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C00\\u0C04\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55-\\u0C56\\u0C62-\\u0C63\\u0C81\\u0CBC\\u0CBF\\u0CC6\\u0CCC-\\u0CCD\\u0CE2-\\u0CE3\\u0D00-\\u0D01\\u0D3B-\\u0D3C\\u0D41-\\u0D44\\u0D4D\\u0D62-\\u0D63\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB-\\u0EBC\\u0EC8-\\u0ECD\\u0F18-\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86-\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039-\\u103A\\u103D-\\u103E\\u1058-\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085-\\u1086\\u108D\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752-\\u1753\\u1772-\\u1773\\u17B4-\\u17B5\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u1885-\\u1886\\u18A9\\u1920-\\u1922\\u1927-\\u1928\\u1932\\u1939-\\u193B\\u1A17-\\u1A18\\u1A1B\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1AB0-\\u1ABD\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80-\\u1B81\\u1BA2-\\u1BA5\\u1BA8-\\u1BA9\\u1BAB-\\u1BAD\\u1BE6\\u1BE8-\\u1BE9\\u1BED\\u1BEF-\\u1BF1\\u1C2C-\\u1C33\\u1C36-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1CF4\\u1CF8-\\u1CF9\\u1DC0-\\u1DF9\\u1DFB-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302D\\u3099-\\u309A\\uA66F\\uA674-\\uA67D\\uA69E-\\uA69F\\uA6F0-\\uA6F1\\uA802\\uA806\\uA80B\\uA825-\\uA826\\uA8C4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uA9E5\\uAA29-\\uAA2E\\uAA31-\\uAA32\\uAA35-\\uAA36\\uAA43\\uAA4C\\uAA7C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7-\\uAAB8\\uAABE-\\uAABF\\uAAC1\\uAAEC-\\uAAED\\uAAF6\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F]/,\n      peg$c86 = peg$classExpectation([[\"\\u0300\", \"\\u036F\"], [\"\\u0483\", \"\\u0487\"], [\"\\u0591\", \"\\u05BD\"], \"\\u05BF\", [\"\\u05C1\", \"\\u05C2\"], [\"\\u05C4\", \"\\u05C5\"], \"\\u05C7\", [\"\\u0610\", \"\\u061A\"], [\"\\u064B\", \"\\u065F\"], \"\\u0670\", [\"\\u06D6\", \"\\u06DC\"], [\"\\u06DF\", \"\\u06E4\"], [\"\\u06E7\", \"\\u06E8\"], [\"\\u06EA\", \"\\u06ED\"], \"\\u0711\", [\"\\u0730\", \"\\u074A\"], [\"\\u07A6\", \"\\u07B0\"], [\"\\u07EB\", \"\\u07F3\"], \"\\u07FD\", [\"\\u0816\", \"\\u0819\"], [\"\\u081B\", \"\\u0823\"], [\"\\u0825\", \"\\u0827\"], [\"\\u0829\", \"\\u082D\"], [\"\\u0859\", \"\\u085B\"], [\"\\u08D3\", \"\\u08E1\"], [\"\\u08E3\", \"\\u0902\"], \"\\u093A\", \"\\u093C\", [\"\\u0941\", \"\\u0948\"], \"\\u094D\", [\"\\u0951\", \"\\u0957\"], [\"\\u0962\", \"\\u0963\"], \"\\u0981\", \"\\u09BC\", [\"\\u09C1\", \"\\u09C4\"], \"\\u09CD\", [\"\\u09E2\", \"\\u09E3\"], \"\\u09FE\", [\"\\u0A01\", \"\\u0A02\"], \"\\u0A3C\", [\"\\u0A41\", \"\\u0A42\"], [\"\\u0A47\", \"\\u0A48\"], [\"\\u0A4B\", \"\\u0A4D\"], \"\\u0A51\", [\"\\u0A70\", \"\\u0A71\"], \"\\u0A75\", [\"\\u0A81\", \"\\u0A82\"], \"\\u0ABC\", [\"\\u0AC1\", \"\\u0AC5\"], [\"\\u0AC7\", \"\\u0AC8\"], \"\\u0ACD\", [\"\\u0AE2\", \"\\u0AE3\"], [\"\\u0AFA\", \"\\u0AFF\"], \"\\u0B01\", \"\\u0B3C\", \"\\u0B3F\", [\"\\u0B41\", \"\\u0B44\"], \"\\u0B4D\", \"\\u0B56\", [\"\\u0B62\", \"\\u0B63\"], \"\\u0B82\", \"\\u0BC0\", \"\\u0BCD\", \"\\u0C00\", \"\\u0C04\", [\"\\u0C3E\", \"\\u0C40\"], [\"\\u0C46\", \"\\u0C48\"], [\"\\u0C4A\", \"\\u0C4D\"], [\"\\u0C55\", \"\\u0C56\"], [\"\\u0C62\", \"\\u0C63\"], \"\\u0C81\", \"\\u0CBC\", \"\\u0CBF\", \"\\u0CC6\", [\"\\u0CCC\", \"\\u0CCD\"], [\"\\u0CE2\", \"\\u0CE3\"], [\"\\u0D00\", \"\\u0D01\"], [\"\\u0D3B\", \"\\u0D3C\"], [\"\\u0D41\", \"\\u0D44\"], \"\\u0D4D\", [\"\\u0D62\", \"\\u0D63\"], \"\\u0DCA\", [\"\\u0DD2\", \"\\u0DD4\"], \"\\u0DD6\", \"\\u0E31\", [\"\\u0E34\", \"\\u0E3A\"], [\"\\u0E47\", \"\\u0E4E\"], \"\\u0EB1\", [\"\\u0EB4\", \"\\u0EB9\"], [\"\\u0EBB\", \"\\u0EBC\"], [\"\\u0EC8\", \"\\u0ECD\"], [\"\\u0F18\", \"\\u0F19\"], \"\\u0F35\", \"\\u0F37\", \"\\u0F39\", [\"\\u0F71\", \"\\u0F7E\"], [\"\\u0F80\", \"\\u0F84\"], [\"\\u0F86\", \"\\u0F87\"], [\"\\u0F8D\", \"\\u0F97\"], [\"\\u0F99\", \"\\u0FBC\"], \"\\u0FC6\", [\"\\u102D\", \"\\u1030\"], [\"\\u1032\", \"\\u1037\"], [\"\\u1039\", \"\\u103A\"], [\"\\u103D\", \"\\u103E\"], [\"\\u1058\", \"\\u1059\"], [\"\\u105E\", \"\\u1060\"], [\"\\u1071\", \"\\u1074\"], \"\\u1082\", [\"\\u1085\", \"\\u1086\"], \"\\u108D\", \"\\u109D\", [\"\\u135D\", \"\\u135F\"], [\"\\u1712\", \"\\u1714\"], [\"\\u1732\", \"\\u1734\"], [\"\\u1752\", \"\\u1753\"], [\"\\u1772\", \"\\u1773\"], [\"\\u17B4\", \"\\u17B5\"], [\"\\u17B7\", \"\\u17BD\"], \"\\u17C6\", [\"\\u17C9\", \"\\u17D3\"], \"\\u17DD\", [\"\\u180B\", \"\\u180D\"], [\"\\u1885\", \"\\u1886\"], \"\\u18A9\", [\"\\u1920\", \"\\u1922\"], [\"\\u1927\", \"\\u1928\"], \"\\u1932\", [\"\\u1939\", \"\\u193B\"], [\"\\u1A17\", \"\\u1A18\"], \"\\u1A1B\", \"\\u1A56\", [\"\\u1A58\", \"\\u1A5E\"], \"\\u1A60\", \"\\u1A62\", [\"\\u1A65\", \"\\u1A6C\"], [\"\\u1A73\", \"\\u1A7C\"], \"\\u1A7F\", [\"\\u1AB0\", \"\\u1ABD\"], [\"\\u1B00\", \"\\u1B03\"], \"\\u1B34\", [\"\\u1B36\", \"\\u1B3A\"], \"\\u1B3C\", \"\\u1B42\", [\"\\u1B6B\", \"\\u1B73\"], [\"\\u1B80\", \"\\u1B81\"], [\"\\u1BA2\", \"\\u1BA5\"], [\"\\u1BA8\", \"\\u1BA9\"], [\"\\u1BAB\", \"\\u1BAD\"], \"\\u1BE6\", [\"\\u1BE8\", \"\\u1BE9\"], \"\\u1BED\", [\"\\u1BEF\", \"\\u1BF1\"], [\"\\u1C2C\", \"\\u1C33\"], [\"\\u1C36\", \"\\u1C37\"], [\"\\u1CD0\", \"\\u1CD2\"], [\"\\u1CD4\", \"\\u1CE0\"], [\"\\u1CE2\", \"\\u1CE8\"], \"\\u1CED\", \"\\u1CF4\", [\"\\u1CF8\", \"\\u1CF9\"], [\"\\u1DC0\", \"\\u1DF9\"], [\"\\u1DFB\", \"\\u1DFF\"], [\"\\u20D0\", \"\\u20DC\"], \"\\u20E1\", [\"\\u20E5\", \"\\u20F0\"], [\"\\u2CEF\", \"\\u2CF1\"], \"\\u2D7F\", [\"\\u2DE0\", \"\\u2DFF\"], [\"\\u302A\", \"\\u302D\"], [\"\\u3099\", \"\\u309A\"], \"\\uA66F\", [\"\\uA674\", \"\\uA67D\"], [\"\\uA69E\", \"\\uA69F\"], [\"\\uA6F0\", \"\\uA6F1\"], \"\\uA802\", \"\\uA806\", \"\\uA80B\", [\"\\uA825\", \"\\uA826\"], [\"\\uA8C4\", \"\\uA8C5\"], [\"\\uA8E0\", \"\\uA8F1\"], \"\\uA8FF\", [\"\\uA926\", \"\\uA92D\"], [\"\\uA947\", \"\\uA951\"], [\"\\uA980\", \"\\uA982\"], \"\\uA9B3\", [\"\\uA9B6\", \"\\uA9B9\"], \"\\uA9BC\", \"\\uA9E5\", [\"\\uAA29\", \"\\uAA2E\"], [\"\\uAA31\", \"\\uAA32\"], [\"\\uAA35\", \"\\uAA36\"], \"\\uAA43\", \"\\uAA4C\", \"\\uAA7C\", \"\\uAAB0\", [\"\\uAAB2\", \"\\uAAB4\"], [\"\\uAAB7\", \"\\uAAB8\"], [\"\\uAABE\", \"\\uAABF\"], \"\\uAAC1\", [\"\\uAAEC\", \"\\uAAED\"], \"\\uAAF6\", \"\\uABE5\", \"\\uABE8\", \"\\uABED\", \"\\uFB1E\", [\"\\uFE00\", \"\\uFE0F\"], [\"\\uFE20\", \"\\uFE2F\"]], false, false),\n      peg$c87 = /^[0-9\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19]/,\n      peg$c88 = peg$classExpectation([[\"0\", \"9\"], [\"\\u0660\", \"\\u0669\"], [\"\\u06F0\", \"\\u06F9\"], [\"\\u07C0\", \"\\u07C9\"], [\"\\u0966\", \"\\u096F\"], [\"\\u09E6\", \"\\u09EF\"], [\"\\u0A66\", \"\\u0A6F\"], [\"\\u0AE6\", \"\\u0AEF\"], [\"\\u0B66\", \"\\u0B6F\"], [\"\\u0BE6\", \"\\u0BEF\"], [\"\\u0C66\", \"\\u0C6F\"], [\"\\u0CE6\", \"\\u0CEF\"], [\"\\u0D66\", \"\\u0D6F\"], [\"\\u0DE6\", \"\\u0DEF\"], [\"\\u0E50\", \"\\u0E59\"], [\"\\u0ED0\", \"\\u0ED9\"], [\"\\u0F20\", \"\\u0F29\"], [\"\\u1040\", \"\\u1049\"], [\"\\u1090\", \"\\u1099\"], [\"\\u17E0\", \"\\u17E9\"], [\"\\u1810\", \"\\u1819\"], [\"\\u1946\", \"\\u194F\"], [\"\\u19D0\", \"\\u19D9\"], [\"\\u1A80\", \"\\u1A89\"], [\"\\u1A90\", \"\\u1A99\"], [\"\\u1B50\", \"\\u1B59\"], [\"\\u1BB0\", \"\\u1BB9\"], [\"\\u1C40\", \"\\u1C49\"], [\"\\u1C50\", \"\\u1C59\"], [\"\\uA620\", \"\\uA629\"], [\"\\uA8D0\", \"\\uA8D9\"], [\"\\uA900\", \"\\uA909\"], [\"\\uA9D0\", \"\\uA9D9\"], [\"\\uA9F0\", \"\\uA9F9\"], [\"\\uAA50\", \"\\uAA59\"], [\"\\uABF0\", \"\\uABF9\"], [\"\\uFF10\", \"\\uFF19\"]], false, false),\n      peg$c89 = /^[\\u16EE-\\u16F0\\u2160-\\u2182\\u2185-\\u2188\\u3007\\u3021-\\u3029\\u3038-\\u303A\\uA6E6-\\uA6EF]/,\n      peg$c90 = peg$classExpectation([[\"\\u16EE\", \"\\u16F0\"], [\"\\u2160\", \"\\u2182\"], [\"\\u2185\", \"\\u2188\"], \"\\u3007\", [\"\\u3021\", \"\\u3029\"], [\"\\u3038\", \"\\u303A\"], [\"\\uA6E6\", \"\\uA6EF\"]], false, false),\n      peg$c91 = /^[_\\u203F-\\u2040\\u2054\\uFE33-\\uFE34\\uFE4D-\\uFE4F\\uFF3F]/,\n      peg$c92 = peg$classExpectation([\"_\", [\"\\u203F\", \"\\u2040\"], \"\\u2054\", [\"\\uFE33\", \"\\uFE34\"], [\"\\uFE4D\", \"\\uFE4F\"], \"\\uFF3F\"], false, false),\n      peg$c93 = /^[0-9a-f]/i,\n      peg$c94 = peg$classExpectation([[\"0\", \"9\"], [\"a\", \"f\"]], false, true),\n\n      peg$currPos          = 0,\n      peg$savedPos         = 0,\n      peg$posDetailsCache  = [{ line: 1, column: 1 }],\n      peg$maxFailPos       = 0,\n      peg$maxFailExpected  = [],\n      peg$silentFails      = 0,\n\n      peg$result;\n\n  if (\"startRule\" in options) {\n    if (!(options.startRule in peg$startRuleFunctions)) {\n      throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n    }\n\n    peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n  }\n\n  function text() {\n    return input.substring(peg$savedPos, peg$currPos);\n  }\n\n  function location() {\n    return peg$computeLocation(peg$savedPos, peg$currPos);\n  }\n\n  function expected(description, location) {\n    location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos)\n\n    throw peg$buildStructuredError(\n      [peg$otherExpectation(description)],\n      input.substring(peg$savedPos, peg$currPos),\n      location\n    );\n  }\n\n  function error(message, location) {\n    location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos)\n\n    throw peg$buildSimpleError(message, location);\n  }\n\n  function peg$literalExpectation(text, ignoreCase) {\n    return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n  }\n\n  function peg$classExpectation(parts, inverted, ignoreCase) {\n    return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n  }\n\n  function peg$anyExpectation() {\n    return { type: \"any\" };\n  }\n\n  function peg$endExpectation() {\n    return { type: \"end\" };\n  }\n\n  function peg$otherExpectation(description) {\n    return { type: \"other\", description: description };\n  }\n\n  function peg$computePosDetails(pos) {\n    var details = peg$posDetailsCache[pos], p;\n\n    if (details) {\n      return details;\n    } else {\n      p = pos - 1;\n      while (!peg$posDetailsCache[p]) {\n        p--;\n      }\n\n      details = peg$posDetailsCache[p];\n      details = {\n        line:   details.line,\n        column: details.column\n      };\n\n      while (p < pos) {\n        if (input.charCodeAt(p) === 10) {\n          details.line++;\n          details.column = 1;\n        } else {\n          details.column++;\n        }\n\n        p++;\n      }\n\n      peg$posDetailsCache[pos] = details;\n      return details;\n    }\n  }\n\n  function peg$computeLocation(startPos, endPos) {\n    var startPosDetails = peg$computePosDetails(startPos),\n        endPosDetails   = peg$computePosDetails(endPos);\n\n    return {\n      start: {\n        offset: startPos,\n        line:   startPosDetails.line,\n        column: startPosDetails.column\n      },\n      end: {\n        offset: endPos,\n        line:   endPosDetails.line,\n        column: endPosDetails.column\n      }\n    };\n  }\n\n  function peg$fail(expected) {\n    if (peg$currPos < peg$maxFailPos) { return; }\n\n    if (peg$currPos > peg$maxFailPos) {\n      peg$maxFailPos = peg$currPos;\n      peg$maxFailExpected = [];\n    }\n\n    peg$maxFailExpected.push(expected);\n  }\n\n  function peg$buildSimpleError(message, location) {\n    return new peg$SyntaxError(message, null, null, location);\n  }\n\n  function peg$buildStructuredError(expected, found, location) {\n    return new peg$SyntaxError(\n      peg$SyntaxError.buildMessage(expected, found),\n      expected,\n      found,\n      location\n    );\n  }\n\n  function peg$parseScript() {\n    var s0;\n\n    s0 = peg$parseExpression();\n\n    return s0;\n  }\n\n  function peg$parseExpression() {\n    var s0, s1, s2, s3, s4, s5, s6, s7;\n\n    s0 = peg$currPos;\n    s1 = peg$parseOperation();\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      s3 = peg$currPos;\n      s4 = peg$parse_();\n      if (s4 !== peg$FAILED) {\n        s5 = [];\n        s6 = peg$parsePipe();\n        while (s6 !== peg$FAILED) {\n          s5.push(s6);\n          s6 = peg$parsePipe();\n        }\n        if (s5 !== peg$FAILED) {\n          s6 = peg$parse_();\n          if (s6 !== peg$FAILED) {\n            s7 = peg$parseOperation();\n            if (s7 !== peg$FAILED) {\n              s4 = [s4, s5, s6, s7];\n              s3 = s4;\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        s3 = peg$currPos;\n        s4 = peg$parse_();\n        if (s4 !== peg$FAILED) {\n          s5 = [];\n          s6 = peg$parsePipe();\n          while (s6 !== peg$FAILED) {\n            s5.push(s6);\n            s6 = peg$parsePipe();\n          }\n          if (s5 !== peg$FAILED) {\n            s6 = peg$parse_();\n            if (s6 !== peg$FAILED) {\n              s7 = peg$parseOperation();\n              if (s7 !== peg$FAILED) {\n                s4 = [s4, s5, s6, s7];\n                s3 = s4;\n              } else {\n                peg$currPos = s3;\n                s3 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      }\n      if (s2 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c0(s1, s2);\n        s0 = s1;\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parse_() {\n    var s0, s1;\n\n    peg$silentFails++;\n    s0 = [];\n    if (peg$c2.test(input.charAt(peg$currPos))) {\n      s1 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c3); }\n    }\n    while (s1 !== peg$FAILED) {\n      s0.push(s1);\n      if (peg$c2.test(input.charAt(peg$currPos))) {\n        s1 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c3); }\n      }\n    }\n    peg$silentFails--;\n    if (s0 === peg$FAILED) {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c1); }\n    }\n\n    return s0;\n  }\n\n  function peg$parsePipe() {\n    var s0;\n\n    if (input.charCodeAt(peg$currPos) === 124) {\n      s0 = peg$c4;\n      peg$currPos++;\n    } else {\n      s0 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c5); }\n    }\n\n    return s0;\n  }\n\n  function peg$parseFilter() {\n    var s0, s1;\n\n    s0 = [];\n    s1 = peg$parseTraversal();\n    if (s1 !== peg$FAILED) {\n      while (s1 !== peg$FAILED) {\n        s0.push(s1);\n        s1 = peg$parseTraversal();\n      }\n    } else {\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseTraversal() {\n    var s0;\n\n    s0 = peg$parseIndex();\n    if (s0 === peg$FAILED) {\n      s0 = peg$parseSlice();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseExplode();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parsePick();\n          if (s0 === peg$FAILED) {\n            s0 = peg$parseContext();\n          }\n        }\n      }\n    }\n\n    return s0;\n  }\n\n  function peg$parseIndex() {\n    var s0, s1, s2, s3, s4, s5, s6;\n\n    s0 = peg$currPos;\n    if (input.charCodeAt(peg$currPos) === 91) {\n      s1 = peg$c6;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c7); }\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = peg$parse_();\n      if (s2 !== peg$FAILED) {\n        s3 = peg$parseNumber();\n        if (s3 !== peg$FAILED) {\n          s4 = peg$parse_();\n          if (s4 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 93) {\n              s5 = peg$c8;\n              peg$currPos++;\n            } else {\n              s5 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c9); }\n            }\n            if (s5 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 63) {\n                s6 = peg$c10;\n                peg$currPos++;\n              } else {\n                s6 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c11); }\n              }\n              if (s6 === peg$FAILED) {\n                s6 = null;\n              }\n              if (s6 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c12(s3, s6);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseSlice() {\n    var s0, s1, s2, s3, s4, s5, s6;\n\n    s0 = peg$currPos;\n    if (input.charCodeAt(peg$currPos) === 91) {\n      s1 = peg$c6;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c7); }\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = peg$parseNumber();\n      if (s2 === peg$FAILED) {\n        s2 = null;\n      }\n      if (s2 !== peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 58) {\n          s3 = peg$c13;\n          peg$currPos++;\n        } else {\n          s3 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c14); }\n        }\n        if (s3 !== peg$FAILED) {\n          s4 = peg$parseNumber();\n          if (s4 === peg$FAILED) {\n            s4 = null;\n          }\n          if (s4 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 93) {\n              s5 = peg$c8;\n              peg$currPos++;\n            } else {\n              s5 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c9); }\n            }\n            if (s5 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 63) {\n                s6 = peg$c10;\n                peg$currPos++;\n              } else {\n                s6 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c11); }\n              }\n              if (s6 === peg$FAILED) {\n                s6 = null;\n              }\n              if (s6 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c15(s2, s4, s6);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseExplode() {\n    var s0, s1, s2;\n\n    s0 = peg$currPos;\n    if (input.substr(peg$currPos, 2) === peg$c16) {\n      s1 = peg$c16;\n      peg$currPos += 2;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c17); }\n    }\n    if (s1 !== peg$FAILED) {\n      if (input.charCodeAt(peg$currPos) === 63) {\n        s2 = peg$c10;\n        peg$currPos++;\n      } else {\n        s2 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c11); }\n      }\n      if (s2 === peg$FAILED) {\n        s2 = null;\n      }\n      if (s2 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c18(s2);\n        s0 = s1;\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parsePick() {\n    var s0, s1, s2, s3, s4, s5, s6;\n\n    s0 = peg$currPos;\n    if (input.charCodeAt(peg$currPos) === 46) {\n      s1 = peg$c19;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c20); }\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = peg$parseIdentifier();\n      if (s2 !== peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 63) {\n          s3 = peg$c10;\n          peg$currPos++;\n        } else {\n          s3 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c11); }\n        }\n        if (s3 === peg$FAILED) {\n          s3 = null;\n        }\n        if (s3 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c21(s2, s3);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n    if (s0 === peg$FAILED) {\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 91) {\n        s1 = peg$c6;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c7); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseString();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 93) {\n                s5 = peg$c8;\n                peg$currPos++;\n              } else {\n                s5 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c9); }\n              }\n              if (s5 !== peg$FAILED) {\n                if (input.charCodeAt(peg$currPos) === 63) {\n                  s6 = peg$c10;\n                  peg$currPos++;\n                } else {\n                  s6 = peg$FAILED;\n                  if (peg$silentFails === 0) { peg$fail(peg$c11); }\n                }\n                if (s6 === peg$FAILED) {\n                  s6 = null;\n                }\n                if (s6 !== peg$FAILED) {\n                  peg$savedPos = s0;\n                  s1 = peg$c21(s3, s6);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    }\n\n    return s0;\n  }\n\n  function peg$parseContext() {\n    var s0, s1;\n\n    s0 = peg$currPos;\n    if (input.charCodeAt(peg$currPos) === 46) {\n      s1 = peg$c19;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c20); }\n    }\n    if (s1 !== peg$FAILED) {\n      peg$savedPos = s0;\n      s1 = peg$c22();\n    }\n    s0 = s1;\n\n    return s0;\n  }\n\n  function peg$parseOperation() {\n    var s0;\n\n    s0 = peg$parseLiteral();\n    if (s0 === peg$FAILED) {\n      s0 = peg$parseCreateArray();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseCreateObject();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseFilter();\n        }\n      }\n    }\n\n    return s0;\n  }\n\n  function peg$parseLiteral() {\n    var s0, s1;\n\n    s0 = peg$currPos;\n    s1 = peg$parseNumber();\n    if (s1 !== peg$FAILED) {\n      peg$savedPos = s0;\n      s1 = peg$c23(s1);\n    }\n    s0 = s1;\n    if (s0 === peg$FAILED) {\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 4) === peg$c24) {\n        s1 = peg$c24;\n        peg$currPos += 4;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c25); }\n      }\n      if (s1 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c26();\n      }\n      s0 = s1;\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 9) === peg$c27) {\n          s1 = peg$c27;\n          peg$currPos += 9;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c28); }\n        }\n        if (s1 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c29();\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          s1 = peg$parseString();\n          if (s1 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c30(s1);\n          }\n          s0 = s1;\n        }\n      }\n    }\n\n    return s0;\n  }\n\n  function peg$parseNumber() {\n    var s0, s1, s2, s3;\n\n    s0 = peg$currPos;\n    if (input.charCodeAt(peg$currPos) === 45) {\n      s1 = peg$c31;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c32); }\n    }\n    if (s1 === peg$FAILED) {\n      s1 = null;\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      if (peg$c33.test(input.charAt(peg$currPos))) {\n        s3 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s3 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c34); }\n      }\n      if (s3 !== peg$FAILED) {\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          if (peg$c33.test(input.charAt(peg$currPos))) {\n            s3 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c34); }\n          }\n        }\n      } else {\n        s2 = peg$FAILED;\n      }\n      if (s2 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c35(s1, s2);\n        s0 = s1;\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseString() {\n    var s0, s1, s2, s3;\n\n    s0 = peg$currPos;\n    if (input.charCodeAt(peg$currPos) === 39) {\n      s1 = peg$c36;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c37); }\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      if (peg$c38.test(input.charAt(peg$currPos))) {\n        s3 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s3 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c39); }\n      }\n      if (s3 !== peg$FAILED) {\n        while (s3 !== peg$FAILED) {\n          s2.push(s3);\n          if (peg$c38.test(input.charAt(peg$currPos))) {\n            s3 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c39); }\n          }\n        }\n      } else {\n        s2 = peg$FAILED;\n      }\n      if (s2 !== peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 39) {\n          s3 = peg$c36;\n          peg$currPos++;\n        } else {\n          s3 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c37); }\n        }\n        if (s3 !== peg$FAILED) {\n          peg$savedPos = s0;\n          s1 = peg$c40(s2);\n          s0 = s1;\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n    if (s0 === peg$FAILED) {\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 34) {\n        s1 = peg$c41;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c42); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        if (peg$c43.test(input.charAt(peg$currPos))) {\n          s3 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s3 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c44); }\n        }\n        if (s3 !== peg$FAILED) {\n          while (s3 !== peg$FAILED) {\n            s2.push(s3);\n            if (peg$c43.test(input.charAt(peg$currPos))) {\n              s3 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s3 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c44); }\n            }\n          }\n        } else {\n          s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 34) {\n            s3 = peg$c41;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c42); }\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c40(s2);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    }\n\n    return s0;\n  }\n\n  function peg$parseCreateArray() {\n    var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n    s0 = peg$currPos;\n    if (input.charCodeAt(peg$currPos) === 91) {\n      s1 = peg$c6;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c7); }\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = peg$parse_();\n      if (s2 !== peg$FAILED) {\n        s3 = peg$parseExpression();\n        if (s3 !== peg$FAILED) {\n          s4 = [];\n          s5 = peg$currPos;\n          s6 = peg$parse_();\n          if (s6 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 44) {\n              s7 = peg$c45;\n              peg$currPos++;\n            } else {\n              s7 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c46); }\n            }\n            if (s7 !== peg$FAILED) {\n              s8 = peg$parse_();\n              if (s8 !== peg$FAILED) {\n                s9 = peg$parseExpression();\n                if (s9 !== peg$FAILED) {\n                  s6 = [s6, s7, s8, s9];\n                  s5 = s6;\n                } else {\n                  peg$currPos = s5;\n                  s5 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s5;\n                s5 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s5;\n              s5 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s5;\n            s5 = peg$FAILED;\n          }\n          while (s5 !== peg$FAILED) {\n            s4.push(s5);\n            s5 = peg$currPos;\n            s6 = peg$parse_();\n            if (s6 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 44) {\n                s7 = peg$c45;\n                peg$currPos++;\n              } else {\n                s7 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c46); }\n              }\n              if (s7 !== peg$FAILED) {\n                s8 = peg$parse_();\n                if (s8 !== peg$FAILED) {\n                  s9 = peg$parseExpression();\n                  if (s9 !== peg$FAILED) {\n                    s6 = [s6, s7, s8, s9];\n                    s5 = s6;\n                  } else {\n                    peg$currPos = s5;\n                    s5 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s5;\n                  s5 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s5;\n                s5 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s5;\n              s5 = peg$FAILED;\n            }\n          }\n          if (s4 !== peg$FAILED) {\n            s5 = peg$parse_();\n            if (s5 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 93) {\n                s6 = peg$c8;\n                peg$currPos++;\n              } else {\n                s6 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c9); }\n              }\n              if (s6 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c47(s3, s4);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseCreateObject() {\n    var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;\n\n    s0 = peg$currPos;\n    if (input.charCodeAt(peg$currPos) === 123) {\n      s1 = peg$c48;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c49); }\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = peg$parse_();\n      if (s2 !== peg$FAILED) {\n        s3 = peg$parseKeyValue();\n        if (s3 !== peg$FAILED) {\n          s4 = [];\n          s5 = peg$currPos;\n          s6 = peg$parse_();\n          if (s6 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 44) {\n              s7 = peg$c45;\n              peg$currPos++;\n            } else {\n              s7 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c46); }\n            }\n            if (s7 !== peg$FAILED) {\n              s8 = peg$parse_();\n              if (s8 !== peg$FAILED) {\n                s9 = peg$parseKeyValue();\n                if (s9 !== peg$FAILED) {\n                  s6 = [s6, s7, s8, s9];\n                  s5 = s6;\n                } else {\n                  peg$currPos = s5;\n                  s5 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s5;\n                s5 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s5;\n              s5 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s5;\n            s5 = peg$FAILED;\n          }\n          while (s5 !== peg$FAILED) {\n            s4.push(s5);\n            s5 = peg$currPos;\n            s6 = peg$parse_();\n            if (s6 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 44) {\n                s7 = peg$c45;\n                peg$currPos++;\n              } else {\n                s7 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c46); }\n              }\n              if (s7 !== peg$FAILED) {\n                s8 = peg$parse_();\n                if (s8 !== peg$FAILED) {\n                  s9 = peg$parseKeyValue();\n                  if (s9 !== peg$FAILED) {\n                    s6 = [s6, s7, s8, s9];\n                    s5 = s6;\n                  } else {\n                    peg$currPos = s5;\n                    s5 = peg$FAILED;\n                  }\n                } else {\n                  peg$currPos = s5;\n                  s5 = peg$FAILED;\n                }\n              } else {\n                peg$currPos = s5;\n                s5 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s5;\n              s5 = peg$FAILED;\n            }\n          }\n          if (s4 !== peg$FAILED) {\n            s5 = peg$parse_();\n            if (s5 !== peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 125) {\n                s6 = peg$c50;\n                peg$currPos++;\n              } else {\n                s6 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c51); }\n              }\n              if (s6 !== peg$FAILED) {\n                peg$savedPos = s0;\n                s1 = peg$c52(s3, s4);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$FAILED;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseKeyValue() {\n    var s0, s1, s2, s3, s4, s5;\n\n    s0 = peg$currPos;\n    s1 = peg$parseKey();\n    if (s1 !== peg$FAILED) {\n      s2 = peg$parse_();\n      if (s2 !== peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 58) {\n          s3 = peg$c13;\n          peg$currPos++;\n        } else {\n          s3 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c14); }\n        }\n        if (s3 !== peg$FAILED) {\n          s4 = peg$parse_();\n          if (s4 !== peg$FAILED) {\n            s5 = peg$parseExpression();\n            if (s5 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c53(s1, s5);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseKey() {\n    var s0, s1, s2, s3;\n\n    s0 = peg$currPos;\n    s1 = peg$parseIdentifier();\n    if (s1 !== peg$FAILED) {\n      peg$savedPos = s0;\n      s1 = peg$c54(s1);\n    }\n    s0 = s1;\n    if (s0 === peg$FAILED) {\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 39) {\n        s1 = peg$c36;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c37); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = [];\n        if (peg$c38.test(input.charAt(peg$currPos))) {\n          s3 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s3 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c39); }\n        }\n        if (s3 !== peg$FAILED) {\n          while (s3 !== peg$FAILED) {\n            s2.push(s3);\n            if (peg$c38.test(input.charAt(peg$currPos))) {\n              s3 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s3 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c39); }\n            }\n          }\n        } else {\n          s2 = peg$FAILED;\n        }\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 39) {\n            s3 = peg$c36;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c37); }\n          }\n          if (s3 !== peg$FAILED) {\n            peg$savedPos = s0;\n            s1 = peg$c55(s2);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.charCodeAt(peg$currPos) === 34) {\n          s1 = peg$c41;\n          peg$currPos++;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c42); }\n        }\n        if (s1 !== peg$FAILED) {\n          s2 = [];\n          if (peg$c43.test(input.charAt(peg$currPos))) {\n            s3 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c44); }\n          }\n          if (s3 !== peg$FAILED) {\n            while (s3 !== peg$FAILED) {\n              s2.push(s3);\n              if (peg$c43.test(input.charAt(peg$currPos))) {\n                s3 = input.charAt(peg$currPos);\n                peg$currPos++;\n              } else {\n                s3 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c44); }\n              }\n            }\n          } else {\n            s2 = peg$FAILED;\n          }\n          if (s2 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 34) {\n              s3 = peg$c41;\n              peg$currPos++;\n            } else {\n              s3 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c42); }\n            }\n            if (s3 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c55(s2);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$FAILED;\n        }\n      }\n    }\n\n    return s0;\n  }\n\n  function peg$parseIdentifier() {\n    var s0, s1;\n\n    s0 = peg$currPos;\n    s1 = peg$parseIdentifierName();\n    if (s1 !== peg$FAILED) {\n      peg$savedPos = s0;\n      s1 = peg$c56(s1);\n    }\n    s0 = s1;\n\n    return s0;\n  }\n\n  function peg$parseIdentifierName() {\n    var s0, s1, s2, s3;\n\n    peg$silentFails++;\n    s0 = peg$currPos;\n    s1 = peg$parseIdentifierStart();\n    if (s1 !== peg$FAILED) {\n      s2 = [];\n      s3 = peg$parseIdentifierPart();\n      while (s3 !== peg$FAILED) {\n        s2.push(s3);\n        s3 = peg$parseIdentifierPart();\n      }\n      if (s2 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c58(s1, s2);\n        s0 = s1;\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n    peg$silentFails--;\n    if (s0 === peg$FAILED) {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c57); }\n    }\n\n    return s0;\n  }\n\n  function peg$parseIdentifierStart() {\n    var s0, s1, s2;\n\n    s0 = peg$parseUnicodeLetter();\n    if (s0 === peg$FAILED) {\n      if (input.charCodeAt(peg$currPos) === 36) {\n        s0 = peg$c59;\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c60); }\n      }\n      if (s0 === peg$FAILED) {\n        if (input.charCodeAt(peg$currPos) === 95) {\n          s0 = peg$c61;\n          peg$currPos++;\n        } else {\n          s0 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c62); }\n        }\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 92) {\n            s1 = peg$c63;\n            peg$currPos++;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c64); }\n          }\n          if (s1 !== peg$FAILED) {\n            s2 = peg$parseUnicodeEscapeSequence();\n            if (s2 !== peg$FAILED) {\n              peg$savedPos = s0;\n              s1 = peg$c65(s2);\n              s0 = s1;\n            } else {\n              peg$currPos = s0;\n              s0 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$FAILED;\n          }\n        }\n      }\n    }\n\n    return s0;\n  }\n\n  function peg$parseIdentifierPart() {\n    var s0;\n\n    s0 = peg$parseIdentifierStart();\n    if (s0 === peg$FAILED) {\n      s0 = peg$parseUnicodeCombiningMark();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseNd();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parsePc();\n          if (s0 === peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 8204) {\n              s0 = peg$c66;\n              peg$currPos++;\n            } else {\n              s0 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c67); }\n            }\n            if (s0 === peg$FAILED) {\n              if (input.charCodeAt(peg$currPos) === 8205) {\n                s0 = peg$c68;\n                peg$currPos++;\n              } else {\n                s0 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c69); }\n              }\n            }\n          }\n        }\n      }\n    }\n\n    return s0;\n  }\n\n  function peg$parseUnicodeLetter() {\n    var s0;\n\n    s0 = peg$parseLu();\n    if (s0 === peg$FAILED) {\n      s0 = peg$parseLl();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseLt();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseLm();\n          if (s0 === peg$FAILED) {\n            s0 = peg$parseLo();\n            if (s0 === peg$FAILED) {\n              s0 = peg$parseNl();\n            }\n          }\n        }\n      }\n    }\n\n    return s0;\n  }\n\n  function peg$parseUnicodeCombiningMark() {\n    var s0;\n\n    s0 = peg$parseMn();\n    if (s0 === peg$FAILED) {\n      s0 = peg$parseMc();\n    }\n\n    return s0;\n  }\n\n  function peg$parseUnicodeEscapeSequence() {\n    var s0, s1, s2, s3, s4, s5, s6, s7;\n\n    s0 = peg$currPos;\n    if (input.charCodeAt(peg$currPos) === 117) {\n      s1 = peg$c70;\n      peg$currPos++;\n    } else {\n      s1 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c71); }\n    }\n    if (s1 !== peg$FAILED) {\n      s2 = peg$currPos;\n      s3 = peg$currPos;\n      s4 = peg$parseHexDigit();\n      if (s4 !== peg$FAILED) {\n        s5 = peg$parseHexDigit();\n        if (s5 !== peg$FAILED) {\n          s6 = peg$parseHexDigit();\n          if (s6 !== peg$FAILED) {\n            s7 = peg$parseHexDigit();\n            if (s7 !== peg$FAILED) {\n              s4 = [s4, s5, s6, s7];\n              s3 = s4;\n            } else {\n              peg$currPos = s3;\n              s3 = peg$FAILED;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$FAILED;\n          }\n        } else {\n          peg$currPos = s3;\n          s3 = peg$FAILED;\n        }\n      } else {\n        peg$currPos = s3;\n        s3 = peg$FAILED;\n      }\n      if (s3 !== peg$FAILED) {\n        s2 = input.substring(s2, peg$currPos);\n      } else {\n        s2 = s3;\n      }\n      if (s2 !== peg$FAILED) {\n        peg$savedPos = s0;\n        s1 = peg$c72(s2);\n        s0 = s1;\n      } else {\n        peg$currPos = s0;\n        s0 = peg$FAILED;\n      }\n    } else {\n      peg$currPos = s0;\n      s0 = peg$FAILED;\n    }\n\n    return s0;\n  }\n\n  function peg$parseLl() {\n    var s0;\n\n    if (peg$c73.test(input.charAt(peg$currPos))) {\n      s0 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s0 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c74); }\n    }\n\n    return s0;\n  }\n\n  function peg$parseLm() {\n    var s0;\n\n    if (peg$c75.test(input.charAt(peg$currPos))) {\n      s0 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s0 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c76); }\n    }\n\n    return s0;\n  }\n\n  function peg$parseLo() {\n    var s0;\n\n    if (peg$c77.test(input.charAt(peg$currPos))) {\n      s0 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s0 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c78); }\n    }\n\n    return s0;\n  }\n\n  function peg$parseLt() {\n    var s0;\n\n    if (peg$c79.test(input.charAt(peg$currPos))) {\n      s0 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s0 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c80); }\n    }\n\n    return s0;\n  }\n\n  function peg$parseLu() {\n    var s0;\n\n    if (peg$c81.test(input.charAt(peg$currPos))) {\n      s0 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s0 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c82); }\n    }\n\n    return s0;\n  }\n\n  function peg$parseMc() {\n    var s0;\n\n    if (peg$c83.test(input.charAt(peg$currPos))) {\n      s0 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s0 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c84); }\n    }\n\n    return s0;\n  }\n\n  function peg$parseMn() {\n    var s0;\n\n    if (peg$c85.test(input.charAt(peg$currPos))) {\n      s0 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s0 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c86); }\n    }\n\n    return s0;\n  }\n\n  function peg$parseNd() {\n    var s0;\n\n    if (peg$c87.test(input.charAt(peg$currPos))) {\n      s0 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s0 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c88); }\n    }\n\n    return s0;\n  }\n\n  function peg$parseNl() {\n    var s0;\n\n    if (peg$c89.test(input.charAt(peg$currPos))) {\n      s0 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s0 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c90); }\n    }\n\n    return s0;\n  }\n\n  function peg$parsePc() {\n    var s0;\n\n    if (peg$c91.test(input.charAt(peg$currPos))) {\n      s0 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s0 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c92); }\n    }\n\n    return s0;\n  }\n\n  function peg$parseHexDigit() {\n    var s0;\n\n    if (peg$c93.test(input.charAt(peg$currPos))) {\n      s0 = input.charAt(peg$currPos);\n      peg$currPos++;\n    } else {\n      s0 = peg$FAILED;\n      if (peg$silentFails === 0) { peg$fail(peg$c94); }\n    }\n\n    return s0;\n  }\n\n\n    function toNumber(stringArray, negative) {\n      return parseInt(stringArray.join(''), 10) * ( negative ? -1 : 1 )\n    }\n\n    function literal(value) {\n      return {\n        op: 'literal',\n        value\n      }\n    }\n\n\n  peg$result = peg$startRuleFunction();\n\n  if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n    return peg$result;\n  } else {\n    if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n      peg$fail(peg$endExpectation());\n    }\n\n    throw peg$buildStructuredError(\n      peg$maxFailExpected,\n      peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n      peg$maxFailPos < input.length\n        ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n        : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n    );\n  }\n}\n\nmodule.exports = {\n  SyntaxError: peg$SyntaxError,\n  parse:       peg$parse\n};\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { on } from '@ember/modifier';\n\nimport HdsIcon from '../../icon/index.gts';\nimport { HdsAccordionSizeValues } from '../types.ts';\n\nimport type { HdsAccordionSizes } from '../types.ts';\n\nexport interface HdsAccordionItemButtonSignature {\n  Args: {\n    ariaLabel?: string;\n    ariaLabelledBy?: string;\n    contentId?: string;\n    isOpen?: boolean;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    onClickToggle?: (event: MouseEvent, ...args: any[]) => void;\n    parentContainsInteractive?: boolean;\n    size?: HdsAccordionSizes;\n    id?: string;\n  };\n  Element: HTMLButtonElement;\n}\n\nexport default class HdsAccordionItemButton extends Component<HdsAccordionItemButtonSignature> {\n  onClick = (event: MouseEvent): void => {\n    if (this.args.onClickToggle) {\n      this.args.onClickToggle(event);\n    }\n  };\n\n  get iconSize() {\n    return this.args.size === HdsAccordionSizeValues.Large ? '24' : '16';\n  }\n\n  get classNames() {\n    const classes = ['hds-accordion-item__button'];\n\n    // add a class based on the @isOpen argument\n    if (this.args.isOpen) {\n      classes.push('hds-accordion-item__button--is-open');\n    }\n\n    // add a class based on the @size argument\n    if (this.args.size) {\n      classes.push(`hds-accordion-item__button--size-${this.args.size}`);\n    }\n\n    if (this.args.parentContainsInteractive === false) {\n      classes.push(\n        'hds-accordion-item__button--parent-does-not-contain-interactive'\n      );\n    } else {\n      classes.push('hds-accordion-item__button--parent-contains-interactive');\n    }\n    return classes.join(' ');\n  }\n\n  <template>\n    <button\n      class={{this.classNames}}\n      type=\"button\"\n      {{on \"click\" this.onClick}}\n      aria-controls={{@contentId}}\n      aria-expanded={{if @isOpen \"true\" \"false\"}}\n      aria-label={{@ariaLabel}}\n      aria-labelledby={{@ariaLabelledBy}}\n      ...attributes\n    >\n      <HdsIcon @name=\"chevron-down\" @size={{this.iconSize}} />\n    </button>\n  </template>\n}\n","/**\n * @deprecated since ember 3.25 (with polyfill) and ember 4.5, this utility is not needed as functions can be directly invoked\n *\n * Calls a function passed within a template and returns its value.\n * In order to pass arguments to the function being called, you must\n * curry the function using the `fn` helper.\n *\n ```example\n    <div data-metrics={{call (fn this.myMetrics (hash item=@item))}}\n  ```\n *\n * @function apply\n * @param fn The function to be called\n * @param thisArg An optional `this` context\n */\nexport function call<ThisArg, Fn extends (this: ThisArg) => unknown>([\n  fn,\n  thisArg,\n]: [fn: Fn, thisArg: ThisArg]): ReturnType<Fn>;\nexport function call<Fn extends (this: never) => unknown>([fn]: [\n  fn: Fn,\n]): ReturnType<Fn>;\nexport function call([fn, thisArg]: [fn?: undefined, thisArg?: unknown]): void;\nexport function call([fn, thisArg]: [\n  fn?: (() => unknown) | undefined,\n  thisArg?: unknown,\n]): unknown {\n  if (fn) {\n    if (thisArg) {\n      return fn.apply(thisArg);\n    } else {\n      return fn();\n    }\n  }\n}\n\nexport default function callHelper<\n  ThisArg,\n  Fn extends (this: ThisArg) => unknown,\n>(fn: Fn, thisArg: ThisArg): ReturnType<Fn>;\nexport default function callHelper<Fn extends (this: never) => unknown>(\n  fn: Fn,\n): ReturnType<Fn>;\nexport default function callHelper(fn?: undefined, thisArg?: unknown): void;\nexport default function callHelper(fn?: () => unknown, thisArg?: unknown) {\n  // @ts-expect-error -- This is fine, but TS doesn't like it with the overrides\n  return call([fn, thisArg]);\n}\n","import isEqual from '../utils/is-equal.ts';\n\nexport default function getIndex<T>(\n  array: T[],\n  currentValue: T,\n  useDeepEqual: boolean,\n) {\n  let needle = currentValue;\n\n  if (useDeepEqual) {\n    needle = array.find((object) => {\n      return isEqual(object, currentValue, useDeepEqual);\n    }) as T;\n  }\n\n  const index = (array || []).indexOf(needle);\n\n  return index >= 0 ? index : null;\n}\n","import type { AnyFn } from '../utils/types';\n\nexport function optional<Fn extends AnyFn>([action]: [fn: Fn]): Fn;\nexport function optional<Fn extends AnyFn>([action]: [fn: Fn | undefined]):\n  | Fn\n  | (<Arg>(arg: Arg) => Arg);\nexport function optional([action]: [fn?: undefined]): <Arg>(arg: Arg) => Arg;\nexport function optional<Fn extends AnyFn>([action]: [fn?: Fn | undefined]):\n  | Fn\n  | (<Arg>(arg: Arg) => Arg) {\n  if (typeof action === 'function') {\n    return action;\n  }\n\n  return <Arg>(i: Arg) => i;\n}\n\nexport default function optionalHelper<Fn extends AnyFn>(action: Fn): Fn;\nexport default function optionalHelper<Fn extends AnyFn>(\n  action: Fn | undefined,\n): Fn | (<Arg>(arg: Arg) => Arg);\nexport default function optionalHelper(\n  action?: undefined,\n): <Arg>(arg: Arg) => Arg;\nexport default function optionalHelper(action?: AnyFn) {\n  return optional([action]);\n}\n","/* eslint-disable @typescript-eslint/unbound-method */\nimport { typeOf } from '@ember/utils';\nimport isObject from './is-object.ts';\n\nfunction isPromiseLike(obj: unknown = {}) {\n  return (\n    typeOf((obj as Promise<unknown>).then) === 'function' &&\n    typeOf((obj as Promise<unknown>).catch) === 'function'\n  );\n}\n\nexport default function isPromise(obj: unknown): obj is Promise<void> {\n  return isObject(obj) && isPromiseLike(obj);\n}\n","import { typeOf } from '@ember/utils';\n\nexport default function isObject(val: unknown) {\n  return typeOf(val) === 'object' || typeOf(val) === 'instance';\n}\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { modifier } from 'ember-modifier';\nexport interface HdsRegisterEventSignature {\n  Element: HTMLElement;\n  Args: {\n    Positional: [keyof ElementEventMap, EventListener];\n    Named: { useCapture?: boolean };\n  };\n}\n\n// Notice: we use a function-based modifier here instead of a class-based one\n// because it's quite simple in its logic, and doesn't require injecting services\n// see: https://github.com/ember-modifier/ember-modifier#function-based-modifiers\n\n// this modifier is a \"replacement\" of the standard `{{on 'event' myFunction}}`\n// it's needed because the {{on}} modifier can't be applied conditionally, apparently\n// see: https://github.com/emberjs/ember.js/issues/19869#issuecomment-1909118910\n// see: https://github.com/emberjs/ember.js/pull/20629\n// see also: https://github.com/emberjs/ember.js/blob/main/packages/%40ember/-internals/glimmer/lib/modifiers/on.ts#L30\nexport default modifier<HdsRegisterEventSignature>(\n  (element, positional, named = {}) => {\n    // the \"target\" element the listeners are added to\n    // notice: this is the element the Ember modifier is attached to\n    const _targetElement = element;\n    // the event name and handler to apply to the element\n    // notice: it's expressed as \"positional\" argument (array) for the modifier\n    const [_event, _eventHandler] = positional;\n    // the options for the `addEventListener()` method\n    // see: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n    // notice: it's expressed as \"named\" argument (object) for the modifier\n    const { useCapture = false } = named;\n\n    _targetElement.addEventListener(_event, _eventHandler, useCapture);\n\n    // this (teardown) function is run when the element is removed from the DOM\n    return (): void => {\n      _targetElement.removeEventListener(_event, _eventHandler, useCapture);\n    };\n  }\n);\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsTagColorValues {\n  Primary = 'primary',\n  Secondary = 'secondary',\n}\nexport type HdsTagColors = `${HdsTagColorValues}`;\n\nexport enum HdsTagTooltipPlacementValues {\n  Top = 'top',\n  TopStart = 'top-start',\n  TopEnd = 'top-end',\n  Right = 'right',\n  RightStart = 'right-start',\n  RightEnd = 'right-end',\n  Bottom = 'bottom',\n  BottomStart = 'bottom-start',\n  BottomEnd = 'bottom-end',\n  Left = 'left',\n  LeftStart = 'left-start',\n  LeftEnd = 'left-end',\n}\n\nexport type HdsTagTooltipPlacements = `${HdsTagTooltipPlacementValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { fn, hash } from '@ember/helper';\nimport { assert } from '@ember/debug';\nimport { guidFor } from '@ember/object/internals';\nimport { scheduleOnce } from '@ember/runloop';\nimport { tracked } from '@glimmer/tracking';\nimport { modifier } from 'ember-modifier';\nimport { TrackedMap } from 'tracked-built-ins';\nimport { HdsAdvancedTableColumnReorderSideValues } from '../types.ts';\nimport { requestAnimationFrameWaiter } from '../utils.ts';\n\nimport type {\n  HdsAdvancedTableColumnReorderCallback,\n  HdsAdvancedTableColumnReorderSide,\n  HdsAdvancedTableNormalizedColumn,\n} from '../types.ts';\nimport type { ModifierLike } from '@glint/template';\n\nexport interface HdsAdvancedTableSyncColumnOrderSignature {\n  Element: HTMLDivElement;\n  Args: {\n    Positional: [HdsAdvancedTableNormalizedColumn[], string[] | undefined];\n  };\n}\n\ninterface HdsAdvancedTableColumnManagerOrderSignature {\n  Args: {\n    columns: HdsAdvancedTableNormalizedColumn[];\n    columnOrder: string[] | undefined;\n    hasReorderableColumns?: boolean;\n    hasStickyFirstColumn?: boolean;\n    onColumnReorder: HdsAdvancedTableColumnReorderCallback | undefined;\n    getColumnByKey: (\n      key: string\n    ) => HdsAdvancedTableNormalizedColumn | undefined;\n    thElements: TrackedMap<string, HTMLDivElement>;\n  };\n  Blocks: {\n    default: [\n      {\n        orderedColumns: HdsAdvancedTableNormalizedColumn[];\n        columnOrder: string[];\n        draggedColumnKey: string | null;\n        reorderHoveredColumnKey: string | null;\n        firstColumnKey: string | undefined;\n        firstNonStickyColumnKey: string | undefined;\n        lastColumnKey: string | undefined;\n        syncColumnOrder: ModifierLike<HdsAdvancedTableSyncColumnOrderSignature>;\n        moveColumnToDropTarget: (\n          columnKey: HdsAdvancedTableNormalizedColumn['key'],\n          side: HdsAdvancedTableColumnReorderSide\n        ) => void;\n        moveColumnToTarget: (\n          columnKey: HdsAdvancedTableNormalizedColumn['key'],\n          targetColumnKey: HdsAdvancedTableNormalizedColumn['key'],\n          side: HdsAdvancedTableColumnReorderSide\n        ) => void;\n        moveColumnToTerminalPosition: (\n          columnKey: HdsAdvancedTableNormalizedColumn['key'],\n          position: 'start' | 'end'\n        ) => void;\n        stepColumn: (\n          columnKey: HdsAdvancedTableNormalizedColumn['key'],\n          step: number\n        ) => void;\n        setDraggedColumnKey: (\n          columnKey: HdsAdvancedTableNormalizedColumn['key'] | null\n        ) => void;\n        setReorderHoveredColumnKey: (\n          key: HdsAdvancedTableNormalizedColumn['key'] | null\n        ) => void;\n      },\n    ];\n  };\n}\n\nexport default class HdsAdvancedTableColumnManagerOrder extends Component<HdsAdvancedTableColumnManagerOrderSignature> {\n  @tracked draggedColumnKey: HdsAdvancedTableNormalizedColumn['key'] | null =\n    null;\n  @tracked reorderHoveredColumnKey:\n    | HdsAdvancedTableNormalizedColumn['key']\n    | null = null;\n  @tracked private _columnOrder: string[] = [];\n\n  syncColumnOrder = modifier<HdsAdvancedTableSyncColumnOrderSignature>(\n    (_element, [columns, columnOrder]) => {\n      const columnKeys = columns.map((column) => this._getColumnKey(column));\n\n      let nextOrder = this._columnOrder;\n\n      if (columnOrder !== undefined) {\n        const visibleSet = new Set(columnOrder);\n        const hiddenKeys = nextOrder.filter((key) => !visibleSet.has(key));\n\n        const reordered: string[] = [];\n\n        let visibleIdx = 0;\n        let hiddenIdx = 0;\n\n        for (let i = 0; i < nextOrder.length; i++) {\n          if (hiddenKeys.includes(nextOrder[i]!)) {\n            reordered.push(hiddenKeys[hiddenIdx++]!);\n          } else {\n            reordered.push(columnOrder[visibleIdx++]!);\n          }\n        }\n\n        nextOrder = reordered;\n      }\n\n      const missingKeys = columnKeys.filter((key) => !nextOrder.includes(key));\n\n      if (missingKeys.length > 0) {\n        nextOrder = [...nextOrder, ...missingKeys];\n      }\n\n      const isSame =\n        nextOrder.length === this._columnOrder.length &&\n        nextOrder.every((value, index) => value === this._columnOrder[index]);\n\n      const setColumnOrder = () => (this.columnOrder = nextOrder);\n\n      if (!isSame) {\n        // eslint-disable-next-line ember/no-runloop\n        scheduleOnce('afterRender', this, setColumnOrder);\n      }\n    }\n  );\n\n  get columnOrder(): string[] {\n    return this._columnOrder.length > 0\n      ? this._columnOrder\n      : this.args.columns.map((column) => this._getColumnKey(column));\n  }\n  set columnOrder(value: string[]) {\n    this._columnOrder = value;\n  }\n\n  get visibleColumnOrder(): string[] {\n    const visibleKeys = new Set(\n      this.args.columns.map((column) => this._getColumnKey(column))\n    );\n\n    return this._columnOrder.filter((key) => visibleKeys.has(key));\n  }\n\n  get orderedColumns(): HdsAdvancedTableNormalizedColumn[] {\n    const { hasReorderableColumns, columns } = this.args;\n\n    if (hasReorderableColumns && this.columnOrder !== undefined) {\n      const columnMap = new Map(columns.map((column) => [column.key, column]));\n\n      return this.columnOrder.reduce<HdsAdvancedTableNormalizedColumn[]>(\n        (acc, key) => {\n          const column = columnMap.get(key);\n\n          if (column !== undefined) {\n            acc.push(column);\n          }\n\n          return acc;\n        },\n        []\n      );\n    } else {\n      return columns;\n    }\n  }\n\n  get firstColumnKey(): HdsAdvancedTableNormalizedColumn['key'] | undefined {\n    const firstColumn = this.orderedColumns[0];\n\n    return firstColumn?.key;\n  }\n\n  get firstNonStickyColumnIndex(): number {\n    return this.args.hasStickyFirstColumn ? 1 : 0;\n  }\n\n  get firstNonStickyColumnKey():\n    | HdsAdvancedTableNormalizedColumn['key']\n    | undefined {\n    const firstNonStickyColumn =\n      this.orderedColumns[this.firstNonStickyColumnIndex];\n\n    return firstNonStickyColumn?.key;\n  }\n\n  get lastColumnKey(): HdsAdvancedTableNormalizedColumn['key'] | undefined {\n    const lastColumn = this.orderedColumns[this.orderedColumns.length - 1];\n\n    return lastColumn?.key;\n  }\n\n  moveColumnToTerminalPosition = (\n    columnKey: HdsAdvancedTableNormalizedColumn['key'],\n    position: 'start' | 'end'\n  ): void => {\n    let targetColumnKey: HdsAdvancedTableNormalizedColumn['key'];\n    let side: HdsAdvancedTableColumnReorderSide;\n\n    const lastColumn = this.orderedColumns[this.orderedColumns.length - 1];\n\n    if (\n      this.firstNonStickyColumnKey === undefined ||\n      lastColumn === undefined\n    ) {\n      return;\n    }\n\n    if (position === 'start') {\n      targetColumnKey = this.firstNonStickyColumnKey;\n      side = HdsAdvancedTableColumnReorderSideValues.Left;\n    } else {\n      targetColumnKey = lastColumn.key!;\n      side = HdsAdvancedTableColumnReorderSideValues.Right;\n    }\n\n    // Move the column to the target position\n    this.moveColumnToTarget(columnKey, targetColumnKey, side);\n  };\n\n  stepColumn = (\n    columnKey: HdsAdvancedTableNormalizedColumn['key'],\n    step: number\n  ): void => {\n    const oldIndex = this.columnOrder.indexOf(columnKey);\n    const newIndex = oldIndex + step;\n\n    // Check if the new position is within the array bounds.\n    if (\n      newIndex < this.firstNonStickyColumnIndex ||\n      newIndex >= this.columnOrder.length\n    ) {\n      return;\n    }\n\n    const targetColumnKey = this.columnOrder[newIndex];\n\n    if (targetColumnKey === undefined) {\n      return;\n    }\n\n    // Determine the side based on the step direction.\n    const side: HdsAdvancedTableColumnReorderSide =\n      step > 0\n        ? HdsAdvancedTableColumnReorderSideValues.Right\n        : HdsAdvancedTableColumnReorderSideValues.Left;\n\n    this.moveColumnToTarget(columnKey, targetColumnKey, side);\n  };\n\n  moveColumnToDropTarget = (\n    targetColumnKey: HdsAdvancedTableNormalizedColumn['key'],\n    side: HdsAdvancedTableColumnReorderSide\n  ): void => {\n    const sourceColumnKey = this.draggedColumnKey;\n\n    if (sourceColumnKey === null || sourceColumnKey === targetColumnKey) {\n      return;\n    }\n\n    this.moveColumnToTarget(sourceColumnKey, targetColumnKey, side);\n  };\n\n  moveColumnToTarget = (\n    sourceColumnKey: HdsAdvancedTableNormalizedColumn['key'],\n    targetColumnKey: HdsAdvancedTableNormalizedColumn['key'],\n    side: HdsAdvancedTableColumnReorderSide\n  ): void => {\n    const oldIndex = this.columnOrder.indexOf(sourceColumnKey);\n    const newIndex = this.columnOrder.indexOf(targetColumnKey);\n\n    if (oldIndex !== -1 && newIndex !== -1) {\n      const updated = [...this.columnOrder];\n\n      updated.splice(oldIndex, 1); // Remove from old position\n\n      // Calculate the insertion index based on the side\n      // If dropping to the right of the target, insert after the target\n      // If dropping to the left of the target, insert before the target\n      // Adjust for the shift in indices caused by removing the source column\n      const adjustedIndex =\n        side === HdsAdvancedTableColumnReorderSideValues.Right\n          ? newIndex > oldIndex\n            ? newIndex\n            : newIndex + 1\n          : newIndex > oldIndex\n            ? newIndex - 1\n            : newIndex;\n\n      updated.splice(adjustedIndex, 0, sourceColumnKey); // Insert at new position\n\n      this.columnOrder = updated;\n\n      // we need to wait until the reposition has finished\n      requestAnimationFrameWaiter(() => {\n        const thElement = this.args.thElements.get(sourceColumnKey);\n\n        if (thElement === undefined) {\n          return;\n        }\n\n        thElement.scrollIntoView({\n          behavior: 'smooth',\n          block: 'nearest',\n          inline: 'center',\n        });\n\n        this.draggedColumnKey = null;\n\n        const column = this.args.getColumnByKey(sourceColumnKey);\n\n        assert('No column found with that key', column !== undefined);\n\n        this.setColumnOrder({\n          column,\n          newOrder: updated,\n          insertedAt: updated.indexOf(sourceColumnKey),\n        });\n      });\n    }\n  };\n\n  setColumnOrder: HdsAdvancedTableColumnReorderCallback = ({\n    column,\n    newOrder,\n    insertedAt,\n  }) => {\n    const { onColumnReorder } = this.args;\n\n    this.columnOrder = newOrder;\n\n    onColumnReorder?.({ column, newOrder, insertedAt });\n  };\n\n  private _getColumnKey(column: HdsAdvancedTableNormalizedColumn): string {\n    return column.key ?? guidFor(column);\n  }\n\n  <template>\n    {{yield\n      (hash\n        orderedColumns=this.orderedColumns\n        columnOrder=this.visibleColumnOrder\n        draggedColumnKey=this.draggedColumnKey\n        reorderHoveredColumnKey=this.reorderHoveredColumnKey\n        firstColumnKey=this.firstColumnKey\n        firstNonStickyColumnKey=this.firstNonStickyColumnKey\n        lastColumnKey=this.lastColumnKey\n        syncColumnOrder=this.syncColumnOrder\n        moveColumnToDropTarget=this.moveColumnToDropTarget\n        moveColumnToTarget=this.moveColumnToTarget\n        moveColumnToTerminalPosition=this.moveColumnToTerminalPosition\n        stepColumn=this.stepColumn\n        setDraggedColumnKey=(fn (mut this.draggedColumnKey))\n        setReorderHoveredColumnKey=(fn (mut this.reorderHoveredColumnKey))\n      )\n    }}\n  </template>\n}\n","import Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { next } from '@ember/runloop';\nimport { use, resource } from 'ember-resources';\nimport type PortalService from '../services/-portal';\nimport type { Target } from '../services/-portal';\nimport { setOwner } from '@ember/application';\n\nclass Tracker {\n  @service('-portal')\n  portalService!: PortalService;\n\n  _target?: string;\n\n  modify(newTarget: string): void {\n    const previousTarget = this._target;\n    next(() => {\n      this.portalService.registerPortal(newTarget);\n      if (previousTarget) {\n        this.portalService.unregisterPortal(previousTarget);\n      }\n    });\n    this._target = newTarget;\n  }\n\n  get target(): Target | undefined {\n    return this._target\n      ? this.portalService.getTarget(this._target)\n      : undefined;\n  }\n\n  destroy(): void {\n    if (!this._target) {\n      return;\n    }\n\n    this.portalService.unregisterPortal(this._target);\n  }\n}\n\nfunction PortalTrackerResource(inputFn: () => string): Tracker {\n  const state = new Tracker();\n\n  return resource(({ on, owner }) => {\n    setOwner(state, owner);\n\n    on.cleanup(() => state.destroy());\n\n    return (): Tracker => {\n      state.modify(inputFn());\n\n      return state;\n    };\n  });\n}\n\nexport interface PortalSignature {\n  Args: {\n    target: string;\n    renderInPlace?: boolean;\n    fallback?: 'inplace';\n  };\n  Blocks: { default: [] };\n}\n\nexport default class Portal extends Component<PortalSignature> {\n  @use tracker = PortalTrackerResource(() => this.args.target);\n\n  get target(): Target | undefined {\n    return this.tracker.target;\n  }\n\n  get renderInPlace(): boolean {\n    return (\n      this.args.renderInPlace === true ||\n      (!this.target && this.args.fallback === 'inplace')\n    );\n  }\n}\n","import Component from '@glimmer/component';\nimport { modifier } from 'ember-modifier';\nimport { service } from '@ember/service';\nimport { assert } from '@ember/debug';\nimport type PortalService from '../services/-portal';\n\nexport interface PortalTargetSignature {\n  Element: HTMLDivElement;\n  Args: {\n    name: string;\n    multiple?: boolean;\n    onChange?: (count: number) => void;\n  };\n  Blocks: { default: [number] };\n}\n\nexport default class PortalTarget extends Component<PortalTargetSignature> {\n  @service('-portal')\n  portalService!: PortalService;\n\n  register = modifier((element) => {\n    assert('PortalTargets needs a name', this.args.name);\n    const options = {\n      multiple: this.args.multiple,\n      onChange: this.args.onChange,\n    };\n    this.portalService.registerTarget(this.args.name, element, options);\n\n    return (): void => this.portalService.unregisterTarget(this.args.name);\n  });\n\n  get count(): number {\n    return this.portalService.getPortalCount(this.args.name);\n  }\n}\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Modifier from 'ember-modifier';\nimport { assert, warn } from '@ember/debug';\nimport { registerDestructor } from '@ember/destroyable';\nimport { task } from 'ember-concurrency';\nimport { macroCondition, isTesting } from '@embroider/macros';\nimport { Compartment } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { guidFor } from '@ember/object/internals';\nimport { isEmpty } from '@ember/utils';\nimport { service } from '@ember/service';\n\n// hds-dark theme\nimport hdsDarkTheme from './hds-code-editor/themes/hds-dark-theme.ts';\nimport hdsDarkHighlightStyle from './hds-code-editor/highlight-styles/hds-dark-highlight-style.ts';\n\nimport type HdsIntlService from '../services/hds-intl.ts';\nimport type { HdsCodeEditorLanguages } from './hds-code-editor/types.ts';\nimport type { ArgsFor, PositionalArgs, NamedArgs } from 'ember-modifier';\nimport type {\n  StreamLanguage as StreamLanguageType,\n  StreamParser as StreamParserType,\n} from '@codemirror/language';\nimport type { Extension } from '@codemirror/state';\nimport type {\n  EditorView as EditorViewType,\n  KeyBinding,\n  ViewUpdate,\n} from '@codemirror/view';\nimport type { Diagnostic as DiagnosticType } from '@codemirror/lint';\nimport type Owner from '@ember/owner';\n\ntype HTMLElementWithEditor = HTMLElement & { editor: EditorViewType };\n\ntype HdsCodeEditorBlurHandler = (\n  editor: EditorViewType,\n  event: FocusEvent\n) => void;\n\ninterface HdsCodeEditorExtraKeys {\n  [key: string]: () => boolean;\n}\n\nexport interface HdsCodeEditorSignature {\n  Args: {\n    Named: {\n      ariaDescribedBy?: string;\n      ariaLabel?: string;\n      ariaLabelledBy?: string;\n      cspNonce?: string;\n      extraKeys?: HdsCodeEditorExtraKeys;\n      customExtensions?: Extension[];\n      hasLineWrapping?: boolean;\n      isLintingEnabled?: boolean;\n      language?: HdsCodeEditorLanguages;\n      value?: string;\n      onInput?: (newValue: string, editor: EditorViewType) => void;\n      onBlur?: HdsCodeEditorBlurHandler;\n      onLint?: (\n        diagnostics: DiagnosticType[],\n        newValue: string,\n        editor: EditorViewType\n      ) => void;\n      onSetup?: (editor: EditorViewType) => unknown;\n    };\n  };\n}\n\nasync function defineStreamLanguage(streamParser: StreamParserType<unknown>) {\n  const { StreamLanguage } = await import('@codemirror/language');\n\n  return StreamLanguage.define(streamParser);\n}\n\nexport function getErrorMessage(error: unknown): string {\n  if (error instanceof Error) {\n    return error.message;\n  }\n\n  if (typeof error === 'object' && error !== null) {\n    return JSON.stringify(error);\n  }\n\n  return String(error);\n}\n\nexport function getCSPNonceFromMeta(): string | undefined {\n  const meta = document.querySelector(\n    'meta[http-equiv=\"Content-Security-Policy\"]'\n  );\n\n  if (meta === null) {\n    return undefined;\n  }\n\n  const content = meta.getAttribute('content');\n\n  if (content === null) {\n    return undefined;\n  }\n\n  // searches for either \"style-src\" or \"script-src\" followed by anything until a token like 'nonce-<value>'\n  const match = content.match(/(?:style-src|script-src)[^;]*'nonce-([^']+)'/);\n\n  return match ? match[1] : undefined;\n}\n\nconst LOADER_HEIGHT = '164px';\n\nconst LANGUAGES: Record<\n  HdsCodeEditorLanguages,\n  {\n    load: () => Promise<Extension | StreamLanguageType<unknown>>;\n    loadLinter?: (\n      onLint?: HdsCodeEditorSignature['Args']['Named']['onLint']\n    ) => Promise<Extension>;\n  }\n> = {\n  rego: {\n    load: async () => {\n      const { rego } = await import('./hds-code-editor/languages/rego.ts');\n      return defineStreamLanguage(rego);\n    },\n  },\n  ruby: {\n    load: async () => {\n      const { ruby } = await import('@codemirror/legacy-modes/mode/ruby');\n      return defineStreamLanguage(ruby);\n    },\n  },\n  sentinel: {\n    load: async () => {\n      const { sentinel } = await import(\n        './hds-code-editor/languages/sentinel.ts'\n      );\n      return defineStreamLanguage(sentinel);\n    },\n  },\n  shell: {\n    load: async () => {\n      const { shell } = await import('@codemirror/legacy-modes/mode/shell');\n      return defineStreamLanguage(shell);\n    },\n  },\n  go: {\n    load: async () => (await import('@codemirror/lang-go')).go(),\n  },\n  hcl: {\n    load: async () => (await import('codemirror-lang-hcl')).hcl(),\n  },\n  javascript: {\n    load: async () =>\n      (await import('@codemirror/lang-javascript')).javascript(),\n  },\n  json: {\n    load: async () => (await import('@codemirror/lang-json')).json(),\n    loadLinter: async (onLint) => {\n      const linter = await import('./hds-code-editor/linters/json-linter.ts');\n\n      return linter.default(onLint);\n    },\n  },\n  markdown: {\n    load: async () => (await import('@codemirror/lang-markdown')).markdown(),\n  },\n  sql: {\n    load: async () => (await import('@codemirror/lang-sql')).sql(),\n  },\n  yaml: {\n    load: async () => (await import('@codemirror/lang-yaml')).yaml(),\n  },\n} as const;\n\nexport default class HdsCodeEditorModifier extends Modifier<HdsCodeEditorSignature> {\n  @service declare readonly hdsIntl: HdsIntlService;\n\n  editor!: EditorViewType;\n  element!: HTMLElementWithEditor;\n\n  onBlur: HdsCodeEditorSignature['Args']['Named']['onBlur'];\n  onInput: HdsCodeEditorSignature['Args']['Named']['onInput'];\n\n  blurHandler!: (event: FocusEvent) => void;\n  intersectionObserver!: IntersectionObserver;\n  mutationObserver!: MutationObserver;\n\n  lineWrappingCompartment = new Compartment();\n\n  constructor(owner: Owner, args: ArgsFor<HdsCodeEditorSignature>) {\n    super(owner, args);\n\n    registerDestructor(this, () => {\n      this.intersectionObserver?.disconnect();\n      this.mutationObserver?.disconnect();\n\n      if (this.onBlur !== undefined) {\n        this.element.removeEventListener('blur', this.blurHandler);\n      }\n    });\n  }\n\n  modify(\n    element: HTMLElementWithEditor,\n    positional: PositionalArgs<HdsCodeEditorSignature>,\n    named: NamedArgs<HdsCodeEditorSignature>\n  ): void {\n    const { hasLineWrapping = false } = named;\n\n    // if the editor already exists, update the line wrapping\n    if (this.editor) {\n      this.editor.dispatch({\n        effects: this.lineWrappingCompartment.reconfigure(\n          hasLineWrapping ? EditorView.lineWrapping : []\n        ),\n      });\n    }\n    // if the editor does not exist, setup the editor\n    else {\n      // the intersection observer makes loading unreliable in tests\n      if (macroCondition(isTesting())) {\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        this._setupTask.perform(element, positional, named);\n      } else {\n        this.intersectionObserver = new IntersectionObserver(\n          (entries) => {\n            entries.forEach((entry) => {\n              if (entry.isIntersecting && this.editor === undefined) {\n                // eslint-disable-next-line @typescript-eslint/no-floating-promises\n                this._setupTask.perform(element, positional, named);\n              }\n            });\n          },\n          {\n            rootMargin: LOADER_HEIGHT,\n          }\n        );\n\n        this.intersectionObserver.observe(element);\n      }\n    }\n  }\n\n  private _setupEditorBlurHandler(\n    element: HTMLElementWithEditor,\n    onBlur: HdsCodeEditorBlurHandler\n  ) {\n    const inputElement = element.querySelector('.cm-content');\n\n    if (inputElement === null) {\n      return;\n    }\n\n    this.blurHandler = (event: FocusEvent) => onBlur(this.editor, event);\n\n    (inputElement as HTMLElement).addEventListener('blur', this.blurHandler);\n  }\n\n  private _setupEditorAriaLabel(\n    editor: EditorViewType,\n    {\n      ariaLabel,\n      ariaLabelledBy,\n    }: Pick<\n      HdsCodeEditorSignature['Args']['Named'],\n      'ariaLabel' | 'ariaLabelledBy'\n    >\n  ) {\n    assert(\n      '`hds-code-editor` modifier - Either `ariaLabel` or `ariaLabelledBy` must be provided',\n      ariaLabel !== undefined || ariaLabelledBy !== undefined\n    );\n\n    if (ariaLabel !== undefined) {\n      editor.dom\n        .querySelector('[role=\"textbox\"]')\n        ?.setAttribute('aria-label', ariaLabel);\n    } else if (ariaLabelledBy !== undefined) {\n      editor.dom\n        .querySelector('[role=\"textbox\"]')\n        ?.setAttribute('aria-labelledby', ariaLabelledBy);\n    }\n  }\n\n  private _setupEditorAriaDescribedBy(\n    editor: EditorViewType,\n    {\n      ariaDescribedBy,\n      lintingDescriptionElement,\n    }: {\n      ariaDescribedBy?: string;\n      lintingDescriptionElement?: HTMLParagraphElement;\n    }\n  ) {\n    if (\n      ariaDescribedBy === undefined &&\n      lintingDescriptionElement === undefined\n    ) {\n      return;\n    }\n\n    const ariaDescribedByArray = [];\n\n    if (ariaDescribedBy !== undefined) {\n      ariaDescribedByArray.push(ariaDescribedBy);\n    }\n\n    if (lintingDescriptionElement !== undefined) {\n      ariaDescribedByArray.push(lintingDescriptionElement.id);\n    }\n\n    editor.dom\n      .querySelector('[role=\"textbox\"]')\n      ?.setAttribute('aria-describedby', ariaDescribedByArray.join(' '));\n  }\n\n  private _createLintingDescriptionElement(): HTMLParagraphElement {\n    const element = document.createElement('p');\n\n    element.id = `lint-panel-instructions-${this.element.id}`;\n    element.classList.add('sr-only');\n    element.textContent = this.hdsIntl.t(\n      'hds.modifiers.hds-code-editor.lint-panel-description',\n      {\n        default:\n          'Press `Ctrl-Shift-m` (`Cmd-Shift-m` on macOS) while focus is on the textbox to open the linting panel',\n      }\n    );\n\n    this.element.insertAdjacentElement('beforebegin', element);\n\n    return element;\n  }\n\n  private _setupEditorAriaAttributes(\n    editor: EditorViewType,\n    {\n      ariaDescribedBy,\n      ariaLabel,\n      ariaLabelledBy,\n      lintingDescriptionElement,\n    }: Pick<\n      HdsCodeEditorSignature['Args']['Named'],\n      'ariaDescribedBy' | 'ariaLabel' | 'ariaLabelledBy'\n    > & { lintingDescriptionElement?: HTMLParagraphElement }\n  ) {\n    this._setupEditorAriaLabel(editor, { ariaLabel, ariaLabelledBy });\n    this._setupEditorAriaDescribedBy(editor, {\n      ariaDescribedBy,\n      lintingDescriptionElement,\n    });\n  }\n\n  private _loadLanguageExtensionsTask = task(\n    { drop: true },\n    async ({\n      language,\n      isLintingEnabled,\n      onLint,\n    }: {\n      language?: HdsCodeEditorLanguages;\n      isLintingEnabled?: boolean;\n      onLint?: HdsCodeEditorSignature['Args']['Named']['onLint'];\n    }) => {\n      if (language === undefined) {\n        return;\n      }\n\n      try {\n        const validLanguageKeys = Object.keys(LANGUAGES);\n\n        assert(\n          `\\`hds-code-editor\\` modifier - \\`language\\` must be one of the following: ${validLanguageKeys.join(\n            ', '\n          )}; received: ${language}`,\n          validLanguageKeys.includes(language)\n        );\n\n        let extensionPromises = [LANGUAGES[language].load()];\n\n        if (isLintingEnabled && LANGUAGES[language].loadLinter) {\n          extensionPromises = [\n            ...extensionPromises,\n            LANGUAGES[language].loadLinter(onLint),\n          ];\n        }\n\n        return Promise.all(extensionPromises);\n      } catch (error) {\n        warn(\n          `\\`hds-code-editor\\` modifier - Failed to dynamically import the CodeMirror language module for '${language}'. Error: ${getErrorMessage(error)}`,\n          {\n            id: 'hds-code-editor.load-language-task.import-failed',\n          }\n        );\n      }\n    }\n  );\n\n  private _buildExtensionsTask = task(\n    { drop: true },\n    async ({\n      cspNonce,\n      extraKeys,\n      language,\n      hasLineWrapping,\n      isLintingEnabled,\n      customExtensions,\n      onLint,\n    }: Pick<\n      HdsCodeEditorSignature['Args']['Named'],\n      | 'cspNonce'\n      | 'extraKeys'\n      | 'language'\n      | 'hasLineWrapping'\n      | 'isLintingEnabled'\n      | 'customExtensions'\n      | 'onLint'\n    >) => {\n      const [\n        {\n          keymap,\n          lineNumbers,\n          highlightActiveLineGutter,\n          highlightSpecialChars,\n          highlightActiveLine,\n        },\n        { defaultKeymap, history, historyKeymap },\n        { bracketMatching, syntaxHighlighting },\n      ] = await Promise.all([\n        import('@codemirror/view'),\n        import('@codemirror/commands'),\n        import('@codemirror/language'),\n      ]);\n\n      const languageExtensions = await this._loadLanguageExtensionsTask.perform(\n        {\n          language,\n          isLintingEnabled,\n          onLint,\n        }\n      );\n\n      const handleUpdateExtension = EditorView.updateListener.of(\n        (update: ViewUpdate) => {\n          // toggle a class if the update has/does not have a selection\n          if (update.selectionSet) {\n            update.view.dom.classList.toggle(\n              'cm-hasSelection',\n              !update.state.selection.main.empty\n            );\n          }\n\n          // call the onInput callback if the document has changed\n          if (!update.docChanged || this.onInput === undefined) {\n            return;\n          }\n          this.onInput(update.state.doc.toString(), update.view);\n        }\n      );\n\n      const lineWrappingExtension = this.lineWrappingCompartment.of(\n        hasLineWrapping ? EditorView.lineWrapping : []\n      );\n\n      let extensions: Extension[] = [\n        lineWrappingExtension,\n        bracketMatching(),\n        highlightActiveLine(),\n        highlightActiveLineGutter(),\n        highlightSpecialChars(),\n        history(),\n        keymap.of([...defaultKeymap, ...historyKeymap]),\n        // custom extensions\n        handleUpdateExtension,\n        // user-provided extensions\n        ...(customExtensions ?? []),\n        // hds dark theme\n        hdsDarkTheme,\n        syntaxHighlighting(hdsDarkHighlightStyle),\n      ];\n\n      if (extraKeys !== undefined) {\n        const customKeyMap = Object.entries(extraKeys).map(([key, value]) => ({\n          key: key,\n          run: value,\n        }));\n\n        extensions = [keymap.of(customKeyMap as KeyBinding[]), ...extensions];\n      }\n\n      if (languageExtensions !== undefined) {\n        extensions = [...extensions, ...languageExtensions];\n      }\n\n      // add nonce to the editor view if it exists\n      const nonce = cspNonce ?? getCSPNonceFromMeta();\n\n      if (nonce !== undefined) {\n        extensions = [...extensions, EditorView.cspNonce.of(nonce)];\n      }\n\n      // ensure we add lineNumber last in the stack to create the right gutter order for linting\n      extensions = [...extensions, lineNumbers()];\n\n      return extensions;\n    }\n  );\n\n  private _createEditorTask = task(\n    { drop: true },\n    async (\n      element: HTMLElementWithEditor,\n      {\n        cspNonce,\n        language,\n        extraKeys,\n        value,\n        hasLineWrapping,\n        isLintingEnabled,\n        customExtensions,\n        onLint,\n      }: Pick<\n        HdsCodeEditorSignature['Args']['Named'],\n        | 'cspNonce'\n        | 'language'\n        | 'extraKeys'\n        | 'value'\n        | 'hasLineWrapping'\n        | 'isLintingEnabled'\n        | 'customExtensions'\n        | 'onLint'\n      >\n    ) => {\n      try {\n        const { EditorState } = await import('@codemirror/state');\n\n        const extensions = await this._buildExtensionsTask.perform({\n          cspNonce,\n          extraKeys,\n          language,\n          hasLineWrapping: hasLineWrapping ?? false,\n          isLintingEnabled,\n          customExtensions,\n          onLint,\n        });\n\n        const state = EditorState.create({\n          doc: value,\n          extensions,\n        });\n\n        const editor = new EditorView({\n          state,\n          parent: element,\n        });\n\n        return editor;\n      } catch (error) {\n        console.error(\n          `\\`hds-code-editor\\` modifier - Failed to setup the CodeMirror editor. Error: ${getErrorMessage(error)}`\n        );\n      }\n    }\n  );\n\n  private _setupEditorMutationObserver() {\n    this.mutationObserver = new MutationObserver((mutations) => {\n      mutations.forEach((mutation) => {\n        mutation.removedNodes.forEach((node) => {\n          if (!(node instanceof HTMLElement)) {\n            return;\n          }\n\n          const removedNodeContainsLintPanel =\n            node.querySelector('.cm-panel-lint') !== null;\n\n          if (removedNodeContainsLintPanel) {\n            this.editor.focus();\n          }\n        });\n      });\n    });\n\n    this.mutationObserver.observe(this.element, {\n      childList: true,\n      subtree: true,\n    });\n  }\n\n  private _setupTask = task(\n    { drop: true },\n    async (\n      element: HTMLElementWithEditor,\n      _positional: PositionalArgs<HdsCodeEditorSignature>,\n      named: NamedArgs<HdsCodeEditorSignature>\n    ) => {\n      const {\n        onBlur,\n        onInput,\n        onLint,\n        onSetup,\n        ariaDescribedBy,\n        ariaLabel,\n        ariaLabelledBy,\n        cspNonce,\n        extraKeys,\n        hasLineWrapping,\n        isLintingEnabled,\n        language,\n        value,\n        customExtensions,\n      } = named;\n\n      this.onInput = onInput;\n      this.onBlur = onBlur;\n\n      this.element = element;\n      this.element.id = isEmpty(this.element.id)\n        ? guidFor(this)\n        : this.element.id;\n\n      const editor = await this._createEditorTask.perform(element, {\n        onLint,\n        cspNonce,\n        hasLineWrapping,\n        isLintingEnabled,\n        extraKeys,\n        language,\n        value,\n        customExtensions,\n      });\n\n      if (editor === undefined) {\n        return;\n      }\n\n      this.editor = editor;\n      element.editor = editor;\n\n      if (onBlur !== undefined) {\n        this._setupEditorBlurHandler(element, onBlur);\n      }\n\n      let lintingDescriptionElement: HTMLParagraphElement | null = null;\n\n      if (\n        isLintingEnabled &&\n        language !== undefined &&\n        LANGUAGES[language]?.loadLinter !== undefined\n      ) {\n        // insert a new dom element above the editor\n        lintingDescriptionElement = this._createLintingDescriptionElement();\n\n        this._setupEditorMutationObserver();\n      }\n\n      this._setupEditorAriaAttributes(editor, {\n        ariaDescribedBy,\n        ariaLabel,\n        ariaLabelledBy,\n        lintingDescriptionElement: lintingDescriptionElement ?? undefined,\n      });\n\n      onSetup?.(this.editor);\n    }\n  );\n}\n","import {\n  TYPE_STARTED,\n  TYPE_QUEUED,\n  TYPE_CANCELLED,\n} from './policies/execution-states';\n\nconst LAST_APPLIED_TAGS = new Map();\n\nclass Refresh {\n  constructor(schedulerPolicy, stateTracker, taskInstances) {\n    this.stateTracker = stateTracker;\n    this.schedulerPolicy = schedulerPolicy;\n    this.initialTaskInstances = taskInstances;\n    this.startingInstances = [];\n  }\n\n  process() {\n    let [taskInstances, numRunning, numQueued] =\n      this.filterFinishedTaskInstances();\n    let reducer = this.schedulerPolicy.makeReducer(numRunning, numQueued);\n\n    let finalTaskInstances = taskInstances.filter((taskInstance) => {\n      return this.setTaskInstanceExecutionState(taskInstance, reducer.step());\n    });\n\n    this.stateTracker.computeFinalStates((state) => this.applyState(state));\n    this.startingInstances.forEach((taskInstance) => taskInstance.start());\n\n    return finalTaskInstances;\n  }\n\n  filterFinishedTaskInstances() {\n    let numRunning = 0,\n      numQueued = 0;\n    let taskInstances = this.initialTaskInstances.filter((taskInstance) => {\n      let taskState = this.stateTracker.stateFor(taskInstance.task);\n      let executorState = taskInstance.executor.state;\n\n      if (executorState.isFinished) {\n        taskState.onCompletion(taskInstance);\n        return false;\n      }\n\n      if (executorState.hasStarted) {\n        numRunning += 1;\n      } else {\n        numQueued += 1;\n      }\n\n      return true;\n    });\n    return [taskInstances, numRunning, numQueued];\n  }\n\n  setTaskInstanceExecutionState(taskInstance, desiredState) {\n    let taskState = this.stateTracker.stateFor(taskInstance.task);\n\n    if (!taskInstance.executor.counted) {\n      taskInstance.executor.counted = true;\n      taskState.onPerformed(taskInstance);\n    }\n\n    switch (desiredState.type) {\n      case TYPE_CANCELLED:\n        // this will cause a follow up flush which will detect and recompute cancellation state\n        taskInstance.cancel(desiredState.reason);\n        return false;\n      case TYPE_STARTED:\n        if (!taskInstance.executor.state.hasStarted) {\n          this.startingInstances.push(taskInstance);\n          taskState.onStart(taskInstance);\n        }\n        taskState.onRunning(taskInstance);\n        return true;\n      case TYPE_QUEUED:\n        taskState.onQueued(taskInstance);\n        // TODO: assert taskInstance hasn't started?\n        // Or perhaps this can be a way to pause a task?\n        return true;\n    }\n  }\n\n  applyState(state) {\n    let { taskable } = state;\n\n    if (!taskable.onState) {\n      return;\n    }\n\n    const { guid } = taskable;\n\n    if (\n      LAST_APPLIED_TAGS.has(guid) &&\n      state.tag < LAST_APPLIED_TAGS.get(guid)\n    ) {\n      return;\n    }\n\n    let props = Object.assign(\n      {\n        numRunning: state.numRunning,\n        numQueued: state.numQueued,\n        numPerformedInc: state.numPerformedInc,\n      },\n      state.attrs,\n    );\n\n    taskable.onState(props, taskable);\n\n    LAST_APPLIED_TAGS.set(guid, state.tag);\n  }\n}\n\nexport default Refresh;\n","import {\n  COMPLETION_SUCCESS,\n  COMPLETION_ERROR,\n  COMPLETION_CANCEL,\n} from '../../task-instance/completion-states';\n\nclass RefreshState {\n  constructor(taskable, tag) {\n    this.taskable = taskable;\n    this.group = taskable.group;\n    this.numRunning = 0;\n    this.numQueued = 0;\n    this.numPerformedInc = 0;\n    this.attrs = {};\n    this.tag = tag;\n  }\n\n  onCompletion(taskInstance) {\n    let state = taskInstance.completionState;\n    this.attrs.lastRunning = null;\n    this.attrs.lastComplete = taskInstance;\n    if (state === COMPLETION_SUCCESS) {\n      this.attrs.lastSuccessful = taskInstance;\n    } else {\n      if (state === COMPLETION_ERROR) {\n        this.attrs.lastErrored = taskInstance;\n      } else if (state === COMPLETION_CANCEL) {\n        this.attrs.lastCanceled = taskInstance;\n      }\n      this.attrs.lastIncomplete = taskInstance;\n    }\n  }\n\n  onPerformed(taskInstance) {\n    this.numPerformedInc += 1;\n    this.attrs.lastPerformed = taskInstance;\n  }\n\n  onStart(taskInstance) {\n    this.attrs.last = taskInstance;\n  }\n\n  onRunning(taskInstance) {\n    this.attrs.lastRunning = taskInstance;\n    this.numRunning += 1;\n  }\n\n  onQueued() {\n    this.numQueued += 1;\n  }\n\n  recurseTaskGroups(callback) {\n    let group = this.group;\n    while (group) {\n      callback(group);\n      group = group.group;\n    }\n  }\n\n  applyStateFrom(other) {\n    Object.assign(this.attrs, other.attrs);\n    this.numRunning += other.numRunning;\n    this.numQueued += other.numQueued;\n    this.numPerformedInc += other.numPerformedInc;\n  }\n}\n\nexport default RefreshState;\n","import RefreshState from './state';\n\nconst CURRENT_REFRESH_TAGS = new Map();\n\nclass StateTracker {\n  constructor() {\n    this.states = new Map();\n  }\n\n  stateFor(taskable) {\n    let guid = taskable.guid;\n    let taskState = this.states.get(guid);\n    if (!taskState) {\n      let currentTag = CURRENT_REFRESH_TAGS.has(guid)\n        ? CURRENT_REFRESH_TAGS.get(guid)\n        : 0;\n      taskState = new RefreshState(taskable, ++currentTag);\n      this.states.set(guid, taskState);\n      CURRENT_REFRESH_TAGS.set(guid, currentTag);\n    }\n    return taskState;\n  }\n\n  // After cancelling/queueing task instances, we have to recompute the derived state\n  // of all the tasks that had/have task instances in this scheduler. We do this by\n  // looping through all the Tasks that we've accumulated state for, and then recursively\n  // applying/adding to the state of any TaskGroups they belong to.\n  computeFinalStates(callback) {\n    this.computeRecursiveState();\n    this.forEachState((state) => callback(state));\n  }\n\n  computeRecursiveState() {\n    this.forEachState((taskState) => {\n      let lastState = taskState;\n      taskState.recurseTaskGroups((taskGroup) => {\n        let state = this.stateFor(taskGroup);\n        state.applyStateFrom(lastState);\n        lastState = state;\n      });\n    });\n  }\n\n  forEachState(callback) {\n    this.states.forEach((state) => callback(state));\n  }\n}\n\nexport default StateTracker;\n","import NullState from './null-state';\n\nconst NULL_STATE = new NullState();\n\nclass NullStateTracker {\n  stateFor() {\n    return NULL_STATE;\n  }\n\n  computeFinalStates() {}\n}\n\nexport default NullStateTracker;\n","class NullState {\n  onCompletion() {}\n  onPerformed() {}\n  onStart() {}\n  onRunning() {}\n  onQueued() {}\n}\n\nexport default NullState;\n","import SchedulerRefresh from './refresh';\nimport StateTracker from './state-tracker/state-tracker';\nimport NullStateTracker from './state-tracker/null-state-tracker';\n\n// Scheduler base class\n\n// When a Task is performed, it creates an unstarted TaskInstance and\n// passes it to the Scheduler to determine when it should run. The\n// scheduler consults the schedulerPolicy (e.g. DropPolicy, RestartablePolicy, etc)\n// to determine whether the task instance should start executing, be enqueued\n// for later execution, or be immediately cancelled. As TaskInstances start\n// and run to completion, the Scheduler's `refresh()` method is called to\n// give it an opportunity to start (or cancel) previously enqueued task instances,\n// as well as update the derived state on Tasks and TaskGroups.\n\n// Every Task has its own Scheduler instance, unless it is part of a group,\n// in which case all the Tasks in a group share a single Scheduler.\n\nclass Scheduler {\n  constructor(schedulerPolicy, stateTrackingEnabled) {\n    this.schedulerPolicy = schedulerPolicy;\n    this.stateTrackingEnabled = stateTrackingEnabled;\n    this.taskInstances = [];\n  }\n\n  cancelAll(guid, cancelRequest) {\n    let cancelations = this.taskInstances\n      .map((taskInstance) => {\n        if (taskInstance.task.guids[guid]) {\n          taskInstance.executor.cancel(cancelRequest);\n        }\n      })\n      .filter((cancelation) => !!cancelation);\n\n    return Promise.all(cancelations);\n  }\n\n  perform(taskInstance) {\n    taskInstance.onFinalize(() => this.scheduleRefresh());\n    this.taskInstances.push(taskInstance);\n    this.refresh();\n  }\n\n  scheduleRefresh() {\n    Promise.resolve().then(() => this.refresh());\n  }\n\n  refresh() {\n    let stateTracker = this.stateTrackingEnabled\n      ? new StateTracker()\n      : new NullStateTracker();\n    let refresh = new SchedulerRefresh(\n      this.schedulerPolicy,\n      stateTracker,\n      this.taskInstances,\n    );\n    this.taskInstances = refresh.process();\n  }\n}\n\nexport default Scheduler;\n","import { DEFAULT_STATE } from './default-state';\nimport {\n  CancelRequest,\n  CANCEL_KIND_EXPLICIT,\n} from '../task-instance/cancelation';\n\nlet guidId = 0;\nfunction makeGuid() {\n  return `ec_${guidId++}`;\n}\n\nexport class Taskable {\n  constructor(options) {\n    this.context = options.context;\n    this.debug = options.debug || false;\n    this.enabledModifiers = options.enabledModifiers;\n    this.env = options.env;\n    this.group = options.group;\n    this.hasEnabledEvents = options.hasEnabledEvents;\n    this.modifierOptions = options.modifierOptions;\n    this.name = options.name;\n    this.onStateCallback = options.onStateCallback;\n    this.scheduler = options.scheduler;\n\n    this.guid = makeGuid();\n    this.guids = {};\n    this.guids[this.guid] = true;\n    if (this.group) {\n      Object.assign(this.guids, this.group.guids);\n    }\n  }\n\n  cancelAll(options) {\n    let { reason, cancelRequestKind, resetState } = options || {};\n    reason = reason || '.cancelAll() was explicitly called on the Task';\n\n    let cancelRequest = new CancelRequest(\n      cancelRequestKind || CANCEL_KIND_EXPLICIT,\n      reason,\n    );\n    return this.scheduler.cancelAll(this.guid, cancelRequest).then(() => {\n      if (resetState) {\n        this._resetState();\n      }\n    });\n  }\n\n  get _isAlive() {\n    return true;\n  }\n\n  _resetState() {\n    this.setState(DEFAULT_STATE);\n  }\n\n  // override\n  setState() {}\n}\n\nObject.assign(Taskable.prototype, DEFAULT_STATE);\nObject.assign(Taskable.prototype, {\n  numRunning: 0,\n  numQueued: 0,\n  isRunning: false,\n  isQueued: false,\n  isIdle: true,\n  state: 'idle',\n});\n","export const DEFAULT_STATE = {\n  last: null,\n  lastRunning: null,\n  lastPerformed: null,\n  lastSuccessful: null,\n  lastComplete: null,\n  lastErrored: null,\n  lastCanceled: null,\n  lastIncomplete: null,\n  performCount: 0,\n};\n\nObject.freeze(DEFAULT_STATE);\n","export class GeneratorStepResult {\n  constructor(value, done, errored) {\n    this.value = value;\n    this.done = done;\n    this.errored = errored;\n  }\n}\n\nexport class GeneratorState {\n  constructor(generatorFactory) {\n    this.done = false;\n    this.generatorFactory = generatorFactory;\n    this.iterator = null;\n  }\n\n  step(resolvedValue, iteratorMethod) {\n    try {\n      let iterator = this.getIterator();\n      let { value, done } = iterator[iteratorMethod](resolvedValue);\n\n      if (done) {\n        return this.finalize(value, false);\n      } else {\n        return new GeneratorStepResult(value, false, false);\n      }\n    } catch (e) {\n      return this.finalize(e, true);\n    }\n  }\n\n  getIterator() {\n    if (!this.iterator && !this.done) {\n      this.iterator = this.generatorFactory();\n    }\n    return this.iterator;\n  }\n\n  finalize(value, errored) {\n    this.done = true;\n    this.iterator = null;\n    return new GeneratorStepResult(value, true, errored);\n  }\n}\n","import { GeneratorState } from '../generator-state';\nimport {\n  cancelableSymbol,\n  YIELDABLE_CANCEL,\n  YIELDABLE_CONTINUE,\n  YIELDABLE_RETURN,\n  YIELDABLE_THROW,\n  yieldableSymbol,\n} from '../yieldables';\nimport { INITIAL_STATE } from './initial-state';\n\nimport {\n  CANCEL_KIND_LIFESPAN_END,\n  CANCEL_KIND_PARENT_CANCEL,\n  CANCEL_KIND_YIELDABLE_CANCEL,\n  CancelRequest,\n  didCancel,\n  TASK_CANCELATION_NAME,\n} from './cancelation';\nimport {\n  COMPLETION_CANCEL,\n  COMPLETION_ERROR,\n  COMPLETION_SUCCESS,\n} from './completion-states';\n\nexport const PERFORM_TYPE_DEFAULT = 'PERFORM_TYPE_DEFAULT';\nexport const PERFORM_TYPE_UNLINKED = 'PERFORM_TYPE_UNLINKED';\nexport const PERFORM_TYPE_LINKED = 'PERFORM_TYPE_LINKED';\n\nconst CANCEL_RETURN_VALUE_SENTINEL = {};\nlet TASK_INSTANCE_STACK = [];\n\nexport function getRunningInstance() {\n  return TASK_INSTANCE_STACK[TASK_INSTANCE_STACK.length - 1];\n}\n\nexport class TaskInstanceExecutor {\n  constructor({ generatorFactory, env, debug }) {\n    this.generatorState = new GeneratorState(generatorFactory);\n    this.state = Object.assign({}, INITIAL_STATE);\n    this.index = 1;\n    this.disposers = [];\n    this.finalizeCallbacks = [];\n    this.env = env;\n    this.debug = debug;\n    this.cancelRequest = null;\n  }\n\n  start() {\n    if (this.state.hasStarted || this.cancelRequest) {\n      return;\n    }\n    this.setState({ hasStarted: true });\n    this.proceedSync(YIELDABLE_CONTINUE, undefined);\n    this.taskInstance.onStarted();\n  }\n\n  cancel(cancelRequest) {\n    if (!this.requestCancel(cancelRequest)) {\n      cancelRequest.finalize();\n      return cancelRequest.promise;\n    }\n\n    if (this.state.hasStarted) {\n      this.proceedWithCancelAsync();\n    } else {\n      this.finalizeWithCancel();\n    }\n\n    return this.cancelRequest.promise;\n  }\n\n  setState(state) {\n    Object.assign(this.state, state);\n    this.taskInstance.setState(this.state);\n  }\n\n  proceedChecked(index, yieldResumeType, value) {\n    if (this.state.isFinished) {\n      return;\n    }\n    if (!this.advanceIndex(index)) {\n      return;\n    }\n\n    if (yieldResumeType === YIELDABLE_CANCEL) {\n      this.requestCancel(\n        new CancelRequest(CANCEL_KIND_YIELDABLE_CANCEL),\n        value,\n      );\n      this.proceedWithCancelAsync();\n    } else {\n      this.proceedAsync(yieldResumeType, value);\n    }\n  }\n\n  proceedWithCancelAsync() {\n    this.proceedAsync(YIELDABLE_RETURN, CANCEL_RETURN_VALUE_SENTINEL);\n  }\n\n  proceedAsync(yieldResumeType, value) {\n    this.advanceIndex(this.index);\n    this.env.async(() => this.proceedSync(yieldResumeType, value));\n  }\n\n  proceedSync(yieldResumeType, value) {\n    if (this.state.isFinished) {\n      return;\n    }\n\n    this.dispose();\n\n    if (this.generatorState.done) {\n      this.handleResolvedReturnedValue(yieldResumeType, value);\n    } else {\n      this.handleResolvedContinueValue(yieldResumeType, value);\n    }\n  }\n\n  /**\n   * This method is called when a previously yielded value from\n   * the generator has been resolved, and now it's time to pass\n   * it back into the generator. There are 3 ways to \"resume\" a\n   * generator:\n   *\n   * - call `.next(value)` on it, which is used to pass in a resolved\n   *   value (the fulfilled value of a promise), e.g. if a task generator fn\n   *   does `yield Promise.resolve(5)`, then we take that promise yielded\n   *   by the generator, detect that it's a promise, resolve it, and then\n   *   pass its fulfilled value `5` back into the generator function so\n   *   that it can continue executing.\n   * - call `.throw(error)` on it, which throw an exception from where the\n   *   the generator previously yielded. We do this when the previously\n   *   yielded value resolves to an error value (e.g. a rejected promise\n   *   or a TaskInstance that finished with an error). Note that when you\n   *   resume a generator with a `.throw()`, it can still recover from that\n   *   thrown error and continue executing normally so long as the `yield`\n   *   was inside a `try/catch` statement.\n   * - call `.return(value)` on it, causes the generator function to return\n   *   from where it previously `yield`ed. We use `.return()` when cancelling\n   *   a TaskInstance; by `.return`ing, rather than `.throw`ing, it allows\n   *   the generator function to skip `catch(e) {}` blocks, which is usually\n   *   reserved for actual errors/exceptions; if we `.throw`'d cancellations,\n   *   it would require all tasks that used try/catch to conditionally ignore\n   *   cancellations, which is annoying. So we `.return()` from generator functions\n   *   in the case of errors as a matter of convenience.\n   *\n   * @private\n   */\n  handleResolvedContinueValue(iteratorMethod, resumeValue) {\n    let beforeIndex = this.index;\n    let stepResult = this.generatorStep(resumeValue, iteratorMethod);\n\n    // TODO: what is this doing? write breaking test.\n    if (!this.advanceIndex(beforeIndex)) {\n      return;\n    }\n\n    if (stepResult.errored) {\n      this.finalize(stepResult.value, COMPLETION_ERROR);\n      return;\n    }\n\n    this.handleYieldedValue(stepResult);\n  }\n\n  /**\n   * This method is called when the generator function is all\n   * out of values, and the last value returned from the function\n   * (possible a thenable/yieldable/promise/etc) has been resolved.\n   *\n   * Possible cases:\n   * - `return \"simple value\";` // resolved value is \"simple value\"\n   * - `return undefined;` // (or omitted return) resolved value is undefined\n   * - `return someTask.perform()` // resolved value is the value returned/resolved from someTask\n   *\n   * @private\n   */\n  handleResolvedReturnedValue(yieldResumeType, value) {\n    switch (yieldResumeType) {\n      case YIELDABLE_CONTINUE:\n      case YIELDABLE_RETURN:\n        this.finalize(value, COMPLETION_SUCCESS);\n        break;\n      case YIELDABLE_THROW:\n        this.finalize(value, COMPLETION_ERROR);\n        break;\n    }\n  }\n\n  handleYieldedUnknownThenable(thenable) {\n    let resumeIndex = this.index;\n    thenable.then(\n      (value) => {\n        this.proceedChecked(resumeIndex, YIELDABLE_CONTINUE, value);\n      },\n      (error) => {\n        this.proceedChecked(resumeIndex, YIELDABLE_THROW, error);\n      },\n    );\n  }\n\n  /**\n   * The TaskInstance internally tracks an index/sequence number\n   * (the `index` property) which gets incremented every time the\n   * task generator function iterator takes a step. When a task\n   * function is paused at a `yield`, there are two events that\n   * cause the TaskInstance to take a step: 1) the yielded value\n   * \"resolves\", thus resuming the TaskInstance's execution, or\n   * 2) the TaskInstance is canceled. We need some mechanism to prevent\n   * stale yielded value resolutions from resuming the TaskFunction\n   * after the TaskInstance has already moved on (either because\n   * the TaskInstance has since been canceled or because an\n   * implementation of the Yieldable API tried to resume the\n   * TaskInstance more than once). The `index` serves as\n   * that simple mechanism: anyone resuming a TaskInstance\n   * needs to pass in the `index` they were provided that acts\n   * as a ticket to resume the TaskInstance that expires once\n   * the TaskInstance has moved on.\n   *\n   * @private\n   */\n  advanceIndex(index) {\n    if (this.index === index) {\n      return ++this.index;\n    }\n  }\n\n  handleYieldedValue(stepResult) {\n    let yieldedValue = stepResult.value;\n    if (!yieldedValue) {\n      this.proceedWithSimpleValue(yieldedValue);\n      return;\n    }\n\n    this.addDisposer(yieldedValue[cancelableSymbol]);\n\n    if (yieldedValue[yieldableSymbol]) {\n      this.invokeYieldable(yieldedValue);\n    } else if (typeof yieldedValue.then === 'function') {\n      this.handleYieldedUnknownThenable(yieldedValue);\n    } else {\n      this.proceedWithSimpleValue(yieldedValue);\n    }\n  }\n\n  proceedWithSimpleValue(yieldedValue) {\n    this.proceedAsync(YIELDABLE_CONTINUE, yieldedValue);\n  }\n\n  addDisposer(maybeDisposer) {\n    if (typeof maybeDisposer !== 'function') {\n      return;\n    }\n\n    this.disposers.push(maybeDisposer);\n  }\n\n  /**\n   * Runs any disposers attached to the task's most recent `yield`.\n   * For instance, when a task yields a TaskInstance, it registers that\n   * child TaskInstance's disposer, so that if the parent task is canceled,\n   * dispose() will run that disposer and cancel the child TaskInstance.\n   *\n   * @private\n   */\n  dispose() {\n    let disposers = this.disposers;\n    if (disposers.length === 0) {\n      return;\n    }\n    this.disposers = [];\n    disposers.forEach((disposer) => disposer());\n  }\n\n  /**\n   * Calls .next()/.throw()/.return() on the task's generator function iterator,\n   * essentially taking a single step of execution on the task function.\n   *\n   * @private\n   */\n  generatorStep(nextValue, iteratorMethod) {\n    TASK_INSTANCE_STACK.push(this);\n    let stepResult = this.generatorState.step(nextValue, iteratorMethod);\n    TASK_INSTANCE_STACK.pop();\n\n    // TODO: fix this!\n    if (this._expectsLinkedYield) {\n      let value = stepResult.value;\n      if (!value || value.performType !== PERFORM_TYPE_LINKED) {\n        // eslint-disable-next-line no-console\n        console.warn(\n          'You performed a .linked() task without immediately yielding/returning it. This is currently unsupported (but might be supported in future version of ember-concurrency).',\n        );\n      }\n      this._expectsLinkedYield = false;\n    }\n\n    return stepResult;\n  }\n\n  maybeResolveDefer() {\n    if (!this.defer || !this.state.isFinished) {\n      return;\n    }\n\n    if (this.state.completionState === COMPLETION_SUCCESS) {\n      this.defer.resolve(this.state.value);\n    } else {\n      this.defer.reject(this.state.error);\n    }\n  }\n\n  onFinalize(callback) {\n    this.finalizeCallbacks.push(callback);\n\n    if (this.state.isFinished) {\n      this.runFinalizeCallbacks();\n    }\n  }\n\n  runFinalizeCallbacks() {\n    this.finalizeCallbacks.forEach((cb) => cb());\n    this.finalizeCallbacks = [];\n    this.maybeResolveDefer();\n    this.maybeThrowUnhandledTaskErrorLater();\n  }\n\n  promise() {\n    if (!this.defer) {\n      this.defer = this.env.defer();\n      this.asyncErrorsHandled = true;\n      this.maybeResolveDefer();\n    }\n    return this.defer.promise;\n  }\n\n  maybeThrowUnhandledTaskErrorLater() {\n    if (\n      !this.asyncErrorsHandled &&\n      this.state.completionState === COMPLETION_ERROR &&\n      !didCancel(this.state.error)\n    ) {\n      this.env.async(() => {\n        if (!this.asyncErrorsHandled) {\n          this.env.reportUncaughtRejection(this.state.error);\n        }\n      });\n    }\n  }\n\n  requestCancel(request) {\n    if (this.cancelRequest || this.state.isFinished) {\n      return false;\n    }\n    this.cancelRequest = request;\n    return true;\n  }\n\n  finalize(value, completionState) {\n    if (this.cancelRequest) {\n      return this.finalizeWithCancel();\n    }\n\n    let state = { completionState };\n\n    if (completionState === COMPLETION_SUCCESS) {\n      state.isSuccessful = true;\n      state.value = value;\n    } else if (completionState === COMPLETION_ERROR) {\n      state.isError = true;\n      state.error = value;\n    } else if (completionState === COMPLETION_CANCEL) {\n      state.error = value;\n    }\n\n    this.finalizeShared(state);\n  }\n\n  finalizeWithCancel() {\n    let cancelReason = this.taskInstance.formatCancelReason(\n      this.cancelRequest.reason,\n    );\n    let error = new Error(cancelReason);\n\n    if (this.debugEnabled()) {\n      // eslint-disable-next-line no-console\n      console.log(cancelReason);\n    }\n\n    error.name = TASK_CANCELATION_NAME;\n\n    this.finalizeShared({\n      isCanceled: true,\n      completionState: COMPLETION_CANCEL,\n      error,\n      cancelReason,\n    });\n\n    this.cancelRequest.finalize();\n  }\n\n  debugEnabled() {\n    return this.debug || this.env.globalDebuggingEnabled();\n  }\n\n  finalizeShared(state) {\n    this.index++;\n    state.isFinished = true;\n    this.setState(state);\n    this.runFinalizeCallbacks();\n    this.dispatchFinalizeEvents(state.completionState);\n  }\n\n  dispatchFinalizeEvents(completionState) {\n    switch (completionState) {\n      case COMPLETION_SUCCESS:\n        this.taskInstance.onSuccess();\n        break;\n      case COMPLETION_ERROR:\n        this.taskInstance.onError(this.state.error);\n        break;\n      case COMPLETION_CANCEL:\n        this.taskInstance.onCancel(this.state.cancelReason);\n        break;\n    }\n  }\n\n  invokeYieldable(yieldedValue) {\n    try {\n      let maybeDisposer = yieldedValue[yieldableSymbol](\n        this.taskInstance,\n        this.index,\n      );\n      this.addDisposer(maybeDisposer);\n    } catch (e) {\n      this.env.reportUncaughtRejection(e);\n    }\n  }\n\n  /**\n   * `onYielded` is called when this task instance has been\n   * yielded in another task instance's execution. We take\n   * this opportunity to conditionally link up the tasks\n   * so that when the parent or child cancels, the other\n   * is cancelled.\n   *\n   * Given the following case:\n   *\n   * ```js\n   * parentTask = task(async () => {\n   *   await otherTask.perform();\n   * });\n   * ```\n   *\n   * Then the `parent` param is the task instance that is executing, `this`\n   * is the `otherTask` task instance that was yielded.\n   *\n   * @private\n   */\n  onYielded(parent, resumeIndex) {\n    this.asyncErrorsHandled = true;\n\n    this.onFinalize(() => {\n      let completionState = this.state.completionState;\n      if (completionState === COMPLETION_SUCCESS) {\n        parent.proceed(resumeIndex, YIELDABLE_CONTINUE, this.state.value);\n      } else if (completionState === COMPLETION_ERROR) {\n        parent.proceed(resumeIndex, YIELDABLE_THROW, this.state.error);\n      } else if (completionState === COMPLETION_CANCEL) {\n        parent.proceed(resumeIndex, YIELDABLE_CANCEL, null);\n      }\n    });\n\n    let performType = this.getPerformType();\n    if (performType === PERFORM_TYPE_UNLINKED) {\n      return;\n    }\n\n    return () => {\n      this.detectSelfCancelLoop(performType, parent);\n      this.cancel(new CancelRequest(CANCEL_KIND_PARENT_CANCEL));\n    };\n  }\n\n  getPerformType() {\n    return this.taskInstance.performType || PERFORM_TYPE_DEFAULT;\n  }\n\n  detectSelfCancelLoop(performType, parent) {\n    if (performType !== PERFORM_TYPE_DEFAULT) {\n      return;\n    }\n\n    let parentCancelRequest = parent.executor && parent.executor.cancelRequest;\n\n    // Detect that the parent was cancelled by a lifespan ending and\n    // that the child is still running and not cancelled.\n    if (\n      parentCancelRequest &&\n      parentCancelRequest.kind === CANCEL_KIND_LIFESPAN_END &&\n      !this.cancelRequest &&\n      !this.state.isFinished\n    ) {\n      this.taskInstance.selfCancelLoopWarning(parent);\n    }\n  }\n}\n","import Ember from 'ember';\nimport { defer } from 'rsvp';\nimport { Environment } from './external/environment';\nimport { assert } from '@ember/debug';\nimport { join, next, schedule } from '@ember/runloop';\n\nexport class EmberEnvironment extends Environment {\n  assert(...args) {\n    assert(...args);\n  }\n\n  async(callback) {\n    join(() => schedule('actions', callback));\n  }\n\n  reportUncaughtRejection(error) {\n    next(null, function () {\n      if (Ember.onerror) {\n        Ember.onerror(error);\n      } else {\n        throw error;\n      }\n    });\n  }\n\n  defer() {\n    return defer();\n  }\n\n  globalDebuggingEnabled() {\n    return Ember.ENV.DEBUG_TASKS;\n  }\n}\n\nexport const EMBER_ENVIRONMENT = new EmberEnvironment();\n","import { tracked } from '@glimmer/tracking';\nimport { DEFAULT_STATE as INITIAL_TASK_STATE } from './external/task/default-state';\nimport { INITIAL_STATE as INITIAL_INSTANCE_STATE } from './external/task-instance/initial-state';\n\nfunction trackMixin(proto, obj, key) {\n  const propDesc = Object.getOwnPropertyDescriptor(proto, key);\n  propDesc.initializer = propDesc.initializer || (() => proto[key]);\n  delete propDesc.value;\n  const desc = tracked(obj, key, propDesc);\n  obj[key] = desc;\n  return obj;\n}\n\nfunction applyTracked(proto, initial) {\n  return Object.keys(proto).reduce((acc, key) => {\n    return trackMixin(proto, acc, key);\n  }, initial);\n}\n\nexport let TRACKED_INITIAL_TASK_STATE;\nexport let TRACKED_INITIAL_INSTANCE_STATE;\n\nTRACKED_INITIAL_TASK_STATE = applyTracked(INITIAL_TASK_STATE, {});\nTRACKED_INITIAL_TASK_STATE = applyTracked(\n  {\n    numRunning: 0,\n    numQueued: 0,\n    isRunning: false,\n    isQueued: false,\n    isIdle: true,\n    state: 'idle',\n  },\n  TRACKED_INITIAL_TASK_STATE,\n);\n\nTRACKED_INITIAL_INSTANCE_STATE = applyTracked(INITIAL_INSTANCE_STATE, {});\nTRACKED_INITIAL_INSTANCE_STATE = applyTracked(\n  {\n    state: 'waiting',\n    isDropped: false,\n    isRunning: false,\n  },\n  TRACKED_INITIAL_INSTANCE_STATE,\n);\n\nObject.freeze(TRACKED_INITIAL_TASK_STATE);\nObject.freeze(TRACKED_INITIAL_INSTANCE_STATE);\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { EditorView } from '@codemirror/view';\nimport {\n  HDS_CODE_BLOCK_LINE_HIGHLIGHT,\n  HDS_CODE_BLOCK_LINE_HIGHLIGHT_BORDER,\n  HDS_CODE_BLOCK_GREEN,\n  HDS_CODE_BLOCK_WHITE,\n  HDS_CODE_EDITOR_COLOR_SURFACE_FAINT,\n  HDS_CODE_EDITOR_COLOR_SURFACE_PRIMARY,\n  HDS_CODE_EDITOR_COLOR_SURFACE_INTERACTIVE_ACTIVE,\n  HDS_CODE_EDITOR_COLOR_FOREGROUND_CRITICAL,\n  HDS_CODE_EDITOR_COLOR_FOREGROUND_FAINT,\n  HDS_CODE_EDITOR_COLOR_FOCUS_ACTION_INTERNAL,\n  HDS_CODE_EDITOR_COLOR_FOCUS_ACTION_EXTERNAL,\n} from '../palettes/hds-dark-palette.ts';\n\nconst CLOSE_BUTTON_SELECTOR = '.cm-panel.cm-panel-lint button[name=\"close\"]';\nconst PANEL_DIAGNOSTIC_ITEM_SELECTOR =\n  '.cm-panel.cm-panel-lint ul li.cm-diagnostic';\n\nconst hdsDark = EditorView.theme(\n  {\n    '&': {\n      color: HDS_CODE_BLOCK_WHITE,\n      backgroundColor: HDS_CODE_EDITOR_COLOR_SURFACE_PRIMARY,\n      height: '100%',\n    },\n    '.cm-content': {\n      borderLeft: `1px solid var(--token-color-palette-neutral-500)`,\n      height: '100%',\n      padding: '16px 0',\n    },\n    '.cm-content ::selection': {\n      backgroundColor: HDS_CODE_BLOCK_GREEN,\n      color: HDS_CODE_EDITOR_COLOR_SURFACE_PRIMARY,\n    },\n    '.cm-gutters': {\n      backgroundColor: HDS_CODE_EDITOR_COLOR_SURFACE_PRIMARY,\n    },\n    '.cm-gutter:first-of-type .cm-gutterElement': {\n      borderLeft: '4px solid transparent',\n    },\n    '.cm-lineNumbers': {\n      color: HDS_CODE_EDITOR_COLOR_FOREGROUND_FAINT,\n    },\n    '.cm-lineNumbers .cm-gutterElement': {\n      display: 'flex',\n      alignItems: 'center',\n      justifyContent: 'end',\n      padding: '0px 16px',\n    },\n    '.cm-gutterElement.cm-activeLineGutter': {\n      backgroundColor: HDS_CODE_EDITOR_COLOR_SURFACE_PRIMARY,\n    },\n    '&:not(.cm-hasSelection).cm-focused .cm-gutterElement.cm-activeLineGutter':\n      {\n        borderColor: HDS_CODE_BLOCK_LINE_HIGHLIGHT_BORDER,\n        backgroundColor: HDS_CODE_BLOCK_LINE_HIGHLIGHT,\n        color: 'var(--token-color-foreground-high-contrast)',\n        outline: `1px solid ${HDS_CODE_BLOCK_LINE_HIGHLIGHT_BORDER}`,\n      },\n    '.cm-line': {\n      padding: '4px 16px',\n    },\n    '.cm-activeLine': {\n      backgroundColor: HDS_CODE_EDITOR_COLOR_SURFACE_PRIMARY,\n    },\n    '&:not(.cm-hasSelection).cm-focused .cm-activeLine': {\n      backgroundColor: HDS_CODE_BLOCK_LINE_HIGHLIGHT,\n      outline: `1px solid ${HDS_CODE_BLOCK_LINE_HIGHLIGHT_BORDER}`,\n    },\n    '.cm-matchingBracket': {\n      outline: `1px solid ${HDS_CODE_BLOCK_WHITE}`,\n    },\n\n    // set a minimum height on the editor content when linting is enabled\n    '&.cm-lintingEnabled .cm-content': {\n      minHeight: '160px',\n    },\n\n    // replace the underline svg\n    '.cm-lintRange-error': {\n      backgroundImage: `url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"6\" height=\"3\">%3Cpath%20d%3D%22m0%202.5%20l2%20-1.5%20l1%200%20l2%201.5%20l1%200%22%20stroke%3D%22${encodeURIComponent(HDS_CODE_EDITOR_COLOR_FOREGROUND_CRITICAL)}%22%20fill%3D%22none%22%20stroke-width%3D%22.7%22%2F%3E</svg>')`,\n    },\n\n    // linting gutter\n    '&.cm-lintingEnabled .cm-lineNumbers .cm-gutterElement': {\n      paddingLeft: '8px',\n    },\n    '.cm-gutter-lint': {\n      width: '28px',\n    },\n    '.cm-gutter-lint .cm-gutterElement': {\n      padding: '0',\n    },\n    '.cm-lint-marker-error': {\n      width: '24px',\n      height: '24px',\n      padding: '6px',\n      content: `url('data:image/svg+xml,<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.56912 0.752289C8.69045 -0.126408 7.26581 -0.126415 6.38713 0.752272L0.730298 6.40911C-0.148388 7.28779 -0.148379 8.71243 0.730316 9.5911L6.38715 15.2478C7.26583 16.1265 8.69044 16.1265 9.56911 15.2478L15.2258 9.59109C16.1045 8.71241 16.1045 7.2878 15.2258 6.40912L9.56912 0.752289ZM5.21967 5.21955C5.51256 4.92665 5.98744 4.92665 6.28033 5.21955L8 6.93922L9.71967 5.21955C10.0126 4.92665 10.4874 4.92665 10.7803 5.21955C11.0732 5.51244 11.0732 5.98731 10.7803 6.28021L9.06066 7.99988L10.7803 9.71955C11.0732 10.0124 11.0732 10.4873 10.7803 10.7802C10.4874 11.0731 10.0126 11.0731 9.71967 10.7802L8 9.06054L6.28033 10.7802C5.98744 11.0731 5.51256 11.0731 5.21967 10.7802C4.92678 10.4873 4.92678 10.0124 5.21967 9.71955L6.93934 7.99988L5.21967 6.28021C4.92678 5.98731 4.92678 5.51244 5.21967 5.21955Z\" fill=\"${encodeURIComponent(HDS_CODE_EDITOR_COLOR_FOREGROUND_CRITICAL)}\"/></svg>');`,\n    },\n\n    // linter diagnostics panel\n    '.cm-panel.cm-panel-lint ul': {\n      backgroundColor: 'var(--token-color-palette-neutral-500)',\n      maxHeight: '85px',\n    },\n    [`${PANEL_DIAGNOSTIC_ITEM_SELECTOR}`]: {\n      backgroundColor: HDS_CODE_EDITOR_COLOR_SURFACE_PRIMARY,\n      border: '4px solid transparent',\n      color: 'var(--token-color-foreground-high-contrast)',\n      fontFamily: 'var(--token-typography-body-100-font-family)',\n      fontSize: '13px',\n      marginBottom: '1px',\n      padding: '16px 12px',\n    },\n    [`${PANEL_DIAGNOSTIC_ITEM_SELECTOR}:last-of-type`]: {\n      marginBottom: '0',\n    },\n    [`${PANEL_DIAGNOSTIC_ITEM_SELECTOR}:hover`]: {\n      backgroundColor: HDS_CODE_EDITOR_COLOR_SURFACE_FAINT,\n    },\n    '.cm-panel.cm-panel-lint ul:focus li.cm-diagnostic[aria-selected]': {\n      background: 'none',\n      backgroundColor: 'var(--token-color-palette-neutral-700)',\n      border: `4px solid ${HDS_CODE_EDITOR_COLOR_FOCUS_ACTION_EXTERNAL}`,\n      boxShadow: `inset 0 0 0 1px ${HDS_CODE_EDITOR_COLOR_FOCUS_ACTION_INTERNAL}`,\n      color: 'var(--token-color-foreground-high-contrast)',\n    },\n    '.cm-panels-bottom .cm-panel.cm-panel-lint': {\n      borderTop: `3px solid var(--token-color-palette-neutral-500)`,\n    },\n    '.cm-diagnostic': {\n      borderLeft: 'none',\n    },\n    '.cm-diagnosticText-inner': {\n      alignItems: 'center',\n      display: 'flex',\n      gap: '16px',\n    },\n    '.cm-diagnosticText-inner .cm-lint-marker-error': {\n      width: '16px',\n      height: '16px',\n      padding: '0',\n    },\n    // linter diagnostics panel close button\n    [`${CLOSE_BUTTON_SELECTOR}`]: {\n      alignItems: 'center',\n      borderRadius: 'var(--token-border-radius-small)',\n      color: 'var(--token-color-palette-neutral-300)',\n      cursor: 'pointer',\n      display: 'flex',\n      fontFamily: 'var(--token-typography-body-100-font-family)',\n      fontSize: '20px',\n      height: '20px',\n      lineHeight: '20px',\n      paddingBottom: '3px',\n      justifyContent: 'center',\n      right: '22px',\n      top: '6px',\n      width: '20px',\n    },\n    [`${CLOSE_BUTTON_SELECTOR}:hover, ${CLOSE_BUTTON_SELECTOR}:active, ${CLOSE_BUTTON_SELECTOR}:focus`]:\n      {\n        backgroundColor: HDS_CODE_EDITOR_COLOR_SURFACE_INTERACTIVE_ACTIVE,\n        border: '1px solid transparent',\n        color: 'var(--token-color-palette-neutral-400)',\n      },\n    [`${CLOSE_BUTTON_SELECTOR}:focus`]: {\n      borderColor: 'var(--token-color-focus-action-internal)',\n      outline: `3px solid var(--token-color-focus-action-external)`,\n    },\n\n    // tooltips\n    '.cm-tooltip': {\n      backgroundColor: 'var(--token-color-palette-neutral-600)',\n      borderRadius: 'var(--token-border-radius-small)',\n      color: 'var(--token-color-foreground-high-contrast)',\n      fontFamily: 'var(--token-typography-body-100-font-family)',\n      fontSize: '13px',\n      padding: '8px 12px',\n    },\n    '.cm-tooltip-above': {\n      transform: 'translateX(-4px) translateY(-6px)',\n    },\n    '.cm-tooltip-below': {\n      transform: 'translateX(-4px) translateY(6px)',\n    },\n    // tooltips arrow\n    '.cm-tooltip::before': {\n      borderLeft: '8px solid transparent',\n      borderRight: '8px solid transparent',\n      content: '\"\"',\n      left: '16px',\n      position: 'absolute',\n      transform: 'translateX(-50%)',\n    },\n    '.cm-tooltip-above::before': {\n      borderTop: `8px solid var(--token-color-palette-neutral-600)`,\n      bottom: '-8px',\n    },\n    '.cm-tooltip-below::before': {\n      borderBottom: `8px solid var(--token-color-palette-neutral-600)`,\n      top: '-8px',\n    },\n    // only show the marker within the diagnostics panel\n    '.cm-tooltip .cm-lint-marker-error': {\n      display: 'none',\n    },\n  },\n  { dark: true }\n);\n\nexport default hdsDark;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { tags } from '@lezer/highlight';\nimport { HighlightStyle } from '@codemirror/language';\nimport {\n  HDS_CODE_BLOCK_BLUE,\n  HDS_CODE_BLOCK_GREEN,\n  HDS_CODE_BLOCK_ORANGE,\n  HDS_CODE_BLOCK_PURPLE,\n  HDS_CODE_BLOCK_RED,\n  HDS_CODE_BLOCK_CYAN,\n  HDS_CODE_BLOCK_WHITE,\n  HDS_CODE_EDITOR_COLOR_FOREGROUND_PRIMARY,\n} from '../palettes/hds-dark-palette.ts';\n\nconst hdsDarkHighlightStyle = HighlightStyle.define([\n  // Cyan | Property, url, or operator\n  { tag: tags.propertyName, color: HDS_CODE_BLOCK_CYAN },\n  { tag: tags.url, color: HDS_CODE_BLOCK_CYAN },\n  { tag: tags.operator, color: HDS_CODE_BLOCK_CYAN },\n  { tag: tags.attributeValue, color: HDS_CODE_BLOCK_CYAN },\n\n  // Blue | Function, builtins\n  { tag: tags.attributeName, color: HDS_CODE_BLOCK_BLUE },\n  { tag: tags.function(tags.variableName), color: HDS_CODE_BLOCK_BLUE },\n  { tag: tags.function(tags.propertyName), color: HDS_CODE_BLOCK_BLUE },\n\n  // Orange | Strings, characters\n  { tag: tags.string, color: HDS_CODE_BLOCK_ORANGE },\n  { tag: tags.regexp, color: HDS_CODE_BLOCK_ORANGE },\n\n  // Purple | Booleans, numbers\n  { tag: tags.bool, color: HDS_CODE_BLOCK_PURPLE },\n  { tag: tags.number, color: HDS_CODE_BLOCK_PURPLE },\n\n  // Green | Keywords, class names, saving the world\n  { tag: tags.keyword, color: HDS_CODE_BLOCK_GREEN },\n  { tag: tags.className, color: HDS_CODE_BLOCK_GREEN },\n\n  // Red | Important items\n  { tag: tags.deleted, color: HDS_CODE_BLOCK_RED },\n\n  // White | Default color within the code block, also used for punctuation\n  { tag: tags.name, color: HDS_CODE_BLOCK_WHITE },\n  { tag: tags.punctuation, color: HDS_CODE_BLOCK_WHITE },\n\n  // Gray | Used for comments across languages\n  { tag: tags.comment, color: HDS_CODE_EDITOR_COLOR_FOREGROUND_PRIMARY },\n\n  // Markdown specific\n  { tag: tags.heading, color: HDS_CODE_BLOCK_BLUE, fontWeight: 'bold' },\n  { tag: tags.strong, color: HDS_CODE_BLOCK_ORANGE, fontWeight: 'bold' },\n  { tag: tags.emphasis, color: HDS_CODE_BLOCK_ORANGE, fontStyle: 'italic' },\n  { tag: tags.link, color: HDS_CODE_BLOCK_CYAN, textDecoration: 'underline' },\n  {\n    tag: tags.quote,\n    color: HDS_CODE_EDITOR_COLOR_FOREGROUND_PRIMARY,\n    fontStyle: 'italic',\n  },\n  { tag: tags.list, color: HDS_CODE_BLOCK_WHITE },\n  { tag: tags.monospace, color: HDS_CODE_BLOCK_GREEN },\n]);\n\nexport default hdsDarkHighlightStyle;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\n\nexport interface HdsCodeEditorGenericSignature {\n  Blocks: {\n    default: [];\n  };\n  Element: HTMLDivElement;\n}\n\nconst HdsCodeEditorGeneric: TemplateOnlyComponent<HdsCodeEditorGenericSignature> =\n  <template>\n    <div class=\"hds-code-editor__header-generic\" ...attributes>\n      {{yield}}\n    </div>\n  </template>;\n\nexport default HdsCodeEditorGeneric;\n","import { isEqual } from '@ember/utils';\n\nexport type MatcherFn = (option: any, text: string) => number;\nexport function isGroup(entry: any): boolean {\n  return !!entry && !!entry.groupName && !!entry.options;\n}\n\nexport function countOptions(collection: any): number {\n  let counter = 0;\n  (function walk(collection): void {\n    if (!collection) {\n      return;\n    }\n    for (let i = 0; i < collection.length; i++) {\n      const entry = collection.objectAt\n        ? collection.objectAt(i)\n        : collection[i];\n      if (isGroup(entry)) {\n        walk(entry.options);\n      } else {\n        counter++;\n      }\n    }\n  })(collection);\n  return counter;\n}\n\nexport function indexOfOption(collection: any, option: any): number {\n  let index = 0;\n  return (function walk(collection): number {\n    if (!collection) {\n      return -1;\n    }\n    for (let i = 0; i < collection.length; i++) {\n      const entry = collection.objectAt\n        ? collection.objectAt(i)\n        : collection[i];\n      if (isGroup(entry)) {\n        const result = walk(entry.options);\n        if (result > -1) {\n          return result;\n        }\n      } else if (isEqual(entry, option)) {\n        return index;\n      } else {\n        index++;\n      }\n    }\n    return -1;\n  })(collection);\n}\n\nexport function pathForOption(collection: any, option: any): string {\n  return (function walk(collection): string {\n    if (!collection) {\n      return '';\n    }\n    for (let i = 0; i < collection.length; i++) {\n      const entry = collection.objectAt\n        ? collection.objectAt(i)\n        : collection[i];\n      if (isGroup(entry)) {\n        const result = walk(entry.options);\n        if (result.length > 0) {\n          return i + '.' + result;\n        }\n      } else if (isEqual(entry, option)) {\n        return i + '';\n      }\n    }\n    return '';\n  })(collection);\n}\n\nexport function optionAtIndex(\n  originalCollection: any,\n  index: number,\n): { disabled: boolean; option: any } {\n  let counter = 0;\n  return (\n    (function walk(\n      collection,\n      ancestorIsDisabled,\n    ): { disabled: boolean; option: any } | void {\n      if (!collection || index < 0) {\n        return { disabled: false, option: undefined };\n      }\n      let localCounter = 0;\n      const length = collection.length;\n      while (counter <= index && localCounter < length) {\n        const entry = collection.objectAt\n          ? collection.objectAt(localCounter)\n          : collection[localCounter];\n        if (isGroup(entry)) {\n          const found = walk(\n            entry.options,\n            ancestorIsDisabled || !!entry.disabled,\n          );\n          if (found) {\n            return found;\n          }\n        } else if (counter === index) {\n          return {\n            disabled: ancestorIsDisabled || !!entry.disabled,\n            option: entry,\n          };\n        } else {\n          counter++;\n        }\n        localCounter++;\n      }\n    })(originalCollection, false) || { disabled: false, option: undefined }\n  );\n}\n\nexport interface Group {\n  groupName: string;\n  options: any[];\n  disabled?: boolean;\n  [key: string]: unknown;\n}\nfunction copyGroup(group: Group, suboptions: any[]): Group {\n  const groupCopy: Group = { ...group, options: suboptions };\n  if (Object.prototype.hasOwnProperty.call(group, 'disabled')) {\n    groupCopy.disabled = group.disabled;\n  }\n  return groupCopy;\n}\n\nexport function findOptionWithOffset(\n  options: any,\n  text: string,\n  matcher: MatcherFn,\n  offset: number,\n  skipDisabled = false,\n): any {\n  let counter = 0;\n  let foundBeforeOffset;\n  let foundAfterOffset = false;\n  const canStop = () => !!foundAfterOffset;\n\n  (function walk(options: any, ancestorIsDisabled: boolean): any {\n    const length = options.length;\n\n    for (let i = 0; i < length; i++) {\n      const entry = options.objectAt ? options.objectAt(i) : options[i];\n      const entryIsDisabled = !!entry.disabled;\n      if (!skipDisabled || !entryIsDisabled) {\n        if (isGroup(entry)) {\n          walk(entry.options, ancestorIsDisabled || entryIsDisabled);\n          if (canStop()) {\n            return;\n          }\n        } else if (matcher(entry, text) >= 0) {\n          if (counter < offset) {\n            if (!foundBeforeOffset) {\n              foundBeforeOffset = entry;\n            }\n          } else {\n            foundAfterOffset = entry;\n          }\n          counter++;\n        } else {\n          counter++;\n        }\n\n        if (canStop()) {\n          return;\n        }\n      }\n    }\n  })(options, false);\n\n  return foundAfterOffset ? foundAfterOffset : foundBeforeOffset;\n}\n\nexport function filterOptions(\n  options: any,\n  text: string,\n  matcher: MatcherFn,\n  skipDisabled = false,\n): any[] {\n  const opts = [];\n  const length = options.length;\n  for (let i = 0; i < length; i++) {\n    const entry = options.objectAt ? options.objectAt(i) : options[i];\n    if (!skipDisabled || !entry.disabled) {\n      if (isGroup(entry)) {\n        const suboptions = filterOptions(\n          entry.options,\n          text,\n          matcher,\n          skipDisabled,\n        );\n        if (suboptions.length > 0) {\n          opts.push(copyGroup(entry, suboptions));\n        }\n      } else if (matcher(entry, text) >= 0) {\n        opts.push(entry);\n      }\n    }\n  }\n  return opts;\n}\n\nexport function defaultHighlighted<T>({\n  results,\n  highlighted,\n  selected,\n}: {\n  results: T[];\n  highlighted: T | undefined;\n  selected: T | undefined;\n}): T {\n  const option = highlighted || selected;\n  if (option === undefined || indexOfOption(results, option) === -1) {\n    return advanceSelectableOption(results, option, 1);\n  }\n  return option;\n}\n\nexport function advanceSelectableOption(\n  options: any,\n  currentOption: any,\n  step: 1 | -1,\n) {\n  const resultsLength = countOptions(options);\n  let startIndex = Math.min(\n    Math.max(indexOfOption(options, currentOption) + step, 0),\n    resultsLength - 1,\n  );\n  let { disabled, option } = optionAtIndex(options, startIndex);\n  while (option && disabled) {\n    const next = optionAtIndex(options, (startIndex += step));\n    disabled = next.disabled;\n    option = next.option;\n  }\n  return option;\n}\n\nconst DIACRITICS: Record<string, string> = {\n  'Ⓐ': 'A',\n  Ａ: 'A',\n  À: 'A',\n  Á: 'A',\n  Â: 'A',\n  Ầ: 'A',\n  Ấ: 'A',\n  Ẫ: 'A',\n  Ẩ: 'A',\n  Ã: 'A',\n  Ā: 'A',\n  Ă: 'A',\n  Ằ: 'A',\n  Ắ: 'A',\n  Ẵ: 'A',\n  Ẳ: 'A',\n  Ȧ: 'A',\n  Ǡ: 'A',\n  Ä: 'A',\n  Ǟ: 'A',\n  Ả: 'A',\n  Å: 'A',\n  Ǻ: 'A',\n  Ǎ: 'A',\n  Ȁ: 'A',\n  Ȃ: 'A',\n  Ạ: 'A',\n  Ậ: 'A',\n  Ặ: 'A',\n  Ḁ: 'A',\n  Ą: 'A',\n  Ⱥ: 'A',\n  Ɐ: 'A',\n  Ꜳ: 'AA',\n  Æ: 'AE',\n  Ǽ: 'AE',\n  Ǣ: 'AE',\n  Ꜵ: 'AO',\n  Ꜷ: 'AU',\n  Ꜹ: 'AV',\n  Ꜻ: 'AV',\n  Ꜽ: 'AY',\n  'Ⓑ': 'B',\n  Ｂ: 'B',\n  Ḃ: 'B',\n  Ḅ: 'B',\n  Ḇ: 'B',\n  Ƀ: 'B',\n  Ƃ: 'B',\n  Ɓ: 'B',\n  'Ⓒ': 'C',\n  Ｃ: 'C',\n  Ć: 'C',\n  Ĉ: 'C',\n  Ċ: 'C',\n  Č: 'C',\n  Ç: 'C',\n  Ḉ: 'C',\n  Ƈ: 'C',\n  Ȼ: 'C',\n  Ꜿ: 'C',\n  'Ⓓ': 'D',\n  Ｄ: 'D',\n  Ḋ: 'D',\n  Ď: 'D',\n  Ḍ: 'D',\n  Ḑ: 'D',\n  Ḓ: 'D',\n  Ḏ: 'D',\n  Đ: 'D',\n  Ƌ: 'D',\n  Ɗ: 'D',\n  Ɖ: 'D',\n  Ꝺ: 'D',\n  Ǳ: 'DZ',\n  Ǆ: 'DZ',\n  ǲ: 'Dz',\n  ǅ: 'Dz',\n  'Ⓔ': 'E',\n  Ｅ: 'E',\n  È: 'E',\n  É: 'E',\n  Ê: 'E',\n  Ề: 'E',\n  Ế: 'E',\n  Ễ: 'E',\n  Ể: 'E',\n  Ẽ: 'E',\n  Ē: 'E',\n  Ḕ: 'E',\n  Ḗ: 'E',\n  Ĕ: 'E',\n  Ė: 'E',\n  Ë: 'E',\n  Ẻ: 'E',\n  Ě: 'E',\n  Ȅ: 'E',\n  Ȇ: 'E',\n  Ẹ: 'E',\n  Ệ: 'E',\n  Ȩ: 'E',\n  Ḝ: 'E',\n  Ę: 'E',\n  Ḙ: 'E',\n  Ḛ: 'E',\n  Ɛ: 'E',\n  Ǝ: 'E',\n  'Ⓕ': 'F',\n  Ｆ: 'F',\n  Ḟ: 'F',\n  Ƒ: 'F',\n  Ꝼ: 'F',\n  'Ⓖ': 'G',\n  Ｇ: 'G',\n  Ǵ: 'G',\n  Ĝ: 'G',\n  Ḡ: 'G',\n  Ğ: 'G',\n  Ġ: 'G',\n  Ǧ: 'G',\n  Ģ: 'G',\n  Ǥ: 'G',\n  Ɠ: 'G',\n  Ꞡ: 'G',\n  Ᵹ: 'G',\n  Ꝿ: 'G',\n  'Ⓗ': 'H',\n  Ｈ: 'H',\n  Ĥ: 'H',\n  Ḣ: 'H',\n  Ḧ: 'H',\n  Ȟ: 'H',\n  Ḥ: 'H',\n  Ḩ: 'H',\n  Ḫ: 'H',\n  Ħ: 'H',\n  Ⱨ: 'H',\n  Ⱶ: 'H',\n  Ɥ: 'H',\n  'Ⓘ': 'I',\n  Ｉ: 'I',\n  Ì: 'I',\n  Í: 'I',\n  Î: 'I',\n  Ĩ: 'I',\n  Ī: 'I',\n  Ĭ: 'I',\n  İ: 'I',\n  Ï: 'I',\n  Ḯ: 'I',\n  Ỉ: 'I',\n  Ǐ: 'I',\n  Ȉ: 'I',\n  Ȋ: 'I',\n  Ị: 'I',\n  Į: 'I',\n  Ḭ: 'I',\n  Ɨ: 'I',\n  'Ⓙ': 'J',\n  Ｊ: 'J',\n  Ĵ: 'J',\n  Ɉ: 'J',\n  'Ⓚ': 'K',\n  Ｋ: 'K',\n  Ḱ: 'K',\n  Ǩ: 'K',\n  Ḳ: 'K',\n  Ķ: 'K',\n  Ḵ: 'K',\n  Ƙ: 'K',\n  Ⱪ: 'K',\n  Ꝁ: 'K',\n  Ꝃ: 'K',\n  Ꝅ: 'K',\n  Ꞣ: 'K',\n  'Ⓛ': 'L',\n  Ｌ: 'L',\n  Ŀ: 'L',\n  Ĺ: 'L',\n  Ľ: 'L',\n  Ḷ: 'L',\n  Ḹ: 'L',\n  Ļ: 'L',\n  Ḽ: 'L',\n  Ḻ: 'L',\n  Ł: 'L',\n  Ƚ: 'L',\n  Ɫ: 'L',\n  Ⱡ: 'L',\n  Ꝉ: 'L',\n  Ꝇ: 'L',\n  Ꞁ: 'L',\n  Ǉ: 'LJ',\n  ǈ: 'Lj',\n  'Ⓜ': 'M',\n  Ｍ: 'M',\n  Ḿ: 'M',\n  Ṁ: 'M',\n  Ṃ: 'M',\n  Ɱ: 'M',\n  Ɯ: 'M',\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  Ǌ: 'NJ',\n  ǋ: 'Nj',\n  'Ⓞ': 'O',\n  Ｏ: 'O',\n  Ò: 'O',\n  Ó: 'O',\n  Ô: 'O',\n  Ồ: 'O',\n  Ố: 'O',\n  Ỗ: 'O',\n  Ổ: 'O',\n  Õ: 'O',\n  Ṍ: 'O',\n  Ȭ: 'O',\n  Ṏ: 'O',\n  Ō: 'O',\n  Ṑ: 'O',\n  Ṓ: 'O',\n  Ŏ: 'O',\n  Ȯ: 'O',\n  Ȱ: 'O',\n  Ö: 'O',\n  Ȫ: 'O',\n  Ỏ: 'O',\n  Ő: 'O',\n  Ǒ: 'O',\n  Ȍ: 'O',\n  Ȏ: 'O',\n  Ơ: 'O',\n  Ờ: 'O',\n  Ớ: 'O',\n  Ỡ: 'O',\n  Ở: 'O',\n  Ợ: 'O',\n  Ọ: 'O',\n  Ộ: 'O',\n  Ǫ: 'O',\n  Ǭ: 'O',\n  Ø: 'O',\n  Ǿ: 'O',\n  Ɔ: 'O',\n  Ɵ: 'O',\n  Ꝋ: 'O',\n  Ꝍ: 'O',\n  Ƣ: 'OI',\n  Ꝏ: 'OO',\n  Ȣ: 'OU',\n  'Ⓟ': 'P',\n  Ｐ: 'P',\n  Ṕ: 'P',\n  Ṗ: 'P',\n  Ƥ: 'P',\n  Ᵽ: 'P',\n  Ꝑ: 'P',\n  Ꝓ: 'P',\n  Ꝕ: 'P',\n  'Ⓠ': 'Q',\n  Ｑ: 'Q',\n  Ꝗ: 'Q',\n  Ꝙ: 'Q',\n  Ɋ: 'Q',\n  'Ⓡ': 'R',\n  Ｒ: 'R',\n  Ŕ: 'R',\n  Ṙ: 'R',\n  Ř: 'R',\n  Ȑ: 'R',\n  Ȓ: 'R',\n  Ṛ: 'R',\n  Ṝ: 'R',\n  Ŗ: 'R',\n  Ṟ: 'R',\n  Ɍ: 'R',\n  Ɽ: 'R',\n  Ꝛ: 'R',\n  Ꞧ: 'R',\n  Ꞃ: 'R',\n  'Ⓢ': 'S',\n  Ｓ: 'S',\n  ẞ: 'S',\n  Ś: 'S',\n  Ṥ: 'S',\n  Ŝ: 'S',\n  Ṡ: 'S',\n  Š: 'S',\n  Ṧ: 'S',\n  Ṣ: 'S',\n  Ṩ: 'S',\n  Ș: 'S',\n  Ş: 'S',\n  Ȿ: 'S',\n  Ꞩ: 'S',\n  Ꞅ: 'S',\n  'Ⓣ': 'T',\n  Ｔ: 'T',\n  Ṫ: 'T',\n  Ť: 'T',\n  Ṭ: 'T',\n  Ț: 'T',\n  Ţ: 'T',\n  Ṱ: 'T',\n  Ṯ: 'T',\n  Ŧ: 'T',\n  Ƭ: 'T',\n  Ʈ: 'T',\n  Ⱦ: 'T',\n  Ꞇ: 'T',\n  Ꜩ: 'TZ',\n  'Ⓤ': 'U',\n  Ｕ: 'U',\n  Ù: 'U',\n  Ú: 'U',\n  Û: 'U',\n  Ũ: 'U',\n  Ṹ: 'U',\n  Ū: 'U',\n  Ṻ: 'U',\n  Ŭ: 'U',\n  Ü: 'U',\n  Ǜ: 'U',\n  Ǘ: 'U',\n  Ǖ: 'U',\n  Ǚ: 'U',\n  Ủ: 'U',\n  Ů: 'U',\n  Ű: 'U',\n  Ǔ: 'U',\n  Ȕ: 'U',\n  Ȗ: 'U',\n  Ư: 'U',\n  Ừ: 'U',\n  Ứ: 'U',\n  Ữ: 'U',\n  Ử: 'U',\n  Ự: 'U',\n  Ụ: 'U',\n  Ṳ: 'U',\n  Ų: 'U',\n  Ṷ: 'U',\n  Ṵ: 'U',\n  Ʉ: 'U',\n  'Ⓥ': 'V',\n  Ｖ: 'V',\n  Ṽ: 'V',\n  Ṿ: 'V',\n  Ʋ: 'V',\n  Ꝟ: 'V',\n  Ʌ: 'V',\n  Ꝡ: 'VY',\n  'Ⓦ': 'W',\n  Ｗ: 'W',\n  Ẁ: 'W',\n  Ẃ: 'W',\n  Ŵ: 'W',\n  Ẇ: 'W',\n  Ẅ: 'W',\n  Ẉ: 'W',\n  Ⱳ: 'W',\n  'Ⓧ': 'X',\n  Ｘ: 'X',\n  Ẋ: 'X',\n  Ẍ: 'X',\n  'Ⓨ': 'Y',\n  Ｙ: 'Y',\n  Ỳ: 'Y',\n  Ý: 'Y',\n  Ŷ: 'Y',\n  Ỹ: 'Y',\n  Ȳ: 'Y',\n  Ẏ: 'Y',\n  Ÿ: 'Y',\n  Ỷ: 'Y',\n  Ỵ: 'Y',\n  Ƴ: 'Y',\n  Ɏ: 'Y',\n  Ỿ: 'Y',\n  'Ⓩ': 'Z',\n  Ｚ: 'Z',\n  Ź: 'Z',\n  Ẑ: 'Z',\n  Ż: 'Z',\n  Ž: 'Z',\n  Ẓ: 'Z',\n  Ẕ: 'Z',\n  Ƶ: 'Z',\n  Ȥ: 'Z',\n  Ɀ: 'Z',\n  Ⱬ: 'Z',\n  Ꝣ: 'Z',\n  'ⓐ': 'a',\n  ａ: 'a',\n  ẚ: 'a',\n  à: 'a',\n  á: 'a',\n  â: 'a',\n  ầ: 'a',\n  ấ: 'a',\n  ẫ: 'a',\n  ẩ: 'a',\n  ã: 'a',\n  ā: 'a',\n  ă: 'a',\n  ằ: 'a',\n  ắ: 'a',\n  ẵ: 'a',\n  ẳ: 'a',\n  ȧ: 'a',\n  ǡ: 'a',\n  ä: 'a',\n  ǟ: 'a',\n  ả: 'a',\n  å: 'a',\n  ǻ: 'a',\n  ǎ: 'a',\n  ȁ: 'a',\n  ȃ: 'a',\n  ạ: 'a',\n  ậ: 'a',\n  ặ: 'a',\n  ḁ: 'a',\n  ą: 'a',\n  ⱥ: 'a',\n  ɐ: 'a',\n  ꜳ: 'aa',\n  æ: 'ae',\n  ǽ: 'ae',\n  ǣ: 'ae',\n  ꜵ: 'ao',\n  ꜷ: 'au',\n  ꜹ: 'av',\n  ꜻ: 'av',\n  ꜽ: 'ay',\n  'ⓑ': 'b',\n  ｂ: 'b',\n  ḃ: 'b',\n  ḅ: 'b',\n  ḇ: 'b',\n  ƀ: 'b',\n  ƃ: 'b',\n  ɓ: 'b',\n  'ⓒ': 'c',\n  ｃ: 'c',\n  ć: 'c',\n  ĉ: 'c',\n  ċ: 'c',\n  č: 'c',\n  ç: 'c',\n  ḉ: 'c',\n  ƈ: 'c',\n  ȼ: 'c',\n  ꜿ: 'c',\n  ↄ: 'c',\n  'ⓓ': 'd',\n  ｄ: 'd',\n  ḋ: 'd',\n  ď: 'd',\n  ḍ: 'd',\n  ḑ: 'd',\n  ḓ: 'd',\n  ḏ: 'd',\n  đ: 'd',\n  ƌ: 'd',\n  ɖ: 'd',\n  ɗ: 'd',\n  ꝺ: 'd',\n  ǳ: 'dz',\n  ǆ: 'dz',\n  'ⓔ': 'e',\n  ｅ: 'e',\n  è: 'e',\n  é: 'e',\n  ê: 'e',\n  ề: 'e',\n  ế: 'e',\n  ễ: 'e',\n  ể: 'e',\n  ẽ: 'e',\n  ē: 'e',\n  ḕ: 'e',\n  ḗ: 'e',\n  ĕ: 'e',\n  ė: 'e',\n  ë: 'e',\n  ẻ: 'e',\n  ě: 'e',\n  ȅ: 'e',\n  ȇ: 'e',\n  ẹ: 'e',\n  ệ: 'e',\n  ȩ: 'e',\n  ḝ: 'e',\n  ę: 'e',\n  ḙ: 'e',\n  ḛ: 'e',\n  ɇ: 'e',\n  ɛ: 'e',\n  ǝ: 'e',\n  'ⓕ': 'f',\n  ｆ: 'f',\n  ḟ: 'f',\n  ƒ: 'f',\n  ꝼ: 'f',\n  'ⓖ': 'g',\n  ｇ: 'g',\n  ǵ: 'g',\n  ĝ: 'g',\n  ḡ: 'g',\n  ğ: 'g',\n  ġ: 'g',\n  ǧ: 'g',\n  ģ: 'g',\n  ǥ: 'g',\n  ɠ: 'g',\n  ꞡ: 'g',\n  ᵹ: 'g',\n  ꝿ: 'g',\n  'ⓗ': 'h',\n  ｈ: 'h',\n  ĥ: 'h',\n  ḣ: 'h',\n  ḧ: 'h',\n  ȟ: 'h',\n  ḥ: 'h',\n  ḩ: 'h',\n  ḫ: 'h',\n  ẖ: 'h',\n  ħ: 'h',\n  ⱨ: 'h',\n  ⱶ: 'h',\n  ɥ: 'h',\n  ƕ: 'hv',\n  'ⓘ': 'i',\n  ｉ: 'i',\n  ì: 'i',\n  í: 'i',\n  î: 'i',\n  ĩ: 'i',\n  ī: 'i',\n  ĭ: 'i',\n  ï: 'i',\n  ḯ: 'i',\n  ỉ: 'i',\n  ǐ: 'i',\n  ȉ: 'i',\n  ȋ: 'i',\n  ị: 'i',\n  į: 'i',\n  ḭ: 'i',\n  ɨ: 'i',\n  ı: 'i',\n  'ⓙ': 'j',\n  ｊ: 'j',\n  ĵ: 'j',\n  ǰ: 'j',\n  ɉ: 'j',\n  'ⓚ': 'k',\n  ｋ: 'k',\n  ḱ: 'k',\n  ǩ: 'k',\n  ḳ: 'k',\n  ķ: 'k',\n  ḵ: 'k',\n  ƙ: 'k',\n  ⱪ: 'k',\n  ꝁ: 'k',\n  ꝃ: 'k',\n  ꝅ: 'k',\n  ꞣ: 'k',\n  'ⓛ': 'l',\n  ｌ: 'l',\n  ŀ: 'l',\n  ĺ: 'l',\n  ľ: 'l',\n  ḷ: 'l',\n  ḹ: 'l',\n  ļ: 'l',\n  ḽ: 'l',\n  ḻ: 'l',\n  ſ: 'l',\n  ł: 'l',\n  ƚ: 'l',\n  ɫ: 'l',\n  ⱡ: 'l',\n  ꝉ: 'l',\n  ꞁ: 'l',\n  ꝇ: 'l',\n  ǉ: 'lj',\n  'ⓜ': 'm',\n  ｍ: 'm',\n  ḿ: 'm',\n  ṁ: 'm',\n  ṃ: 'm',\n  ɱ: 'm',\n  ɯ: 'm',\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  ǌ: 'nj',\n  'ⓞ': 'o',\n  ｏ: 'o',\n  ò: 'o',\n  ó: 'o',\n  ô: 'o',\n  ồ: 'o',\n  ố: 'o',\n  ỗ: 'o',\n  ổ: 'o',\n  õ: 'o',\n  ṍ: 'o',\n  ȭ: 'o',\n  ṏ: 'o',\n  ō: 'o',\n  ṑ: 'o',\n  ṓ: 'o',\n  ŏ: 'o',\n  ȯ: 'o',\n  ȱ: 'o',\n  ö: 'o',\n  ȫ: 'o',\n  ỏ: 'o',\n  ő: 'o',\n  ǒ: 'o',\n  ȍ: 'o',\n  ȏ: 'o',\n  ơ: 'o',\n  ờ: 'o',\n  ớ: 'o',\n  ỡ: 'o',\n  ở: 'o',\n  ợ: 'o',\n  ọ: 'o',\n  ộ: 'o',\n  ǫ: 'o',\n  ǭ: 'o',\n  ø: 'o',\n  ǿ: 'o',\n  ɔ: 'o',\n  ꝋ: 'o',\n  ꝍ: 'o',\n  ɵ: 'o',\n  ƣ: 'oi',\n  ȣ: 'ou',\n  ꝏ: 'oo',\n  'ⓟ': 'p',\n  ｐ: 'p',\n  ṕ: 'p',\n  ṗ: 'p',\n  ƥ: 'p',\n  ᵽ: 'p',\n  ꝑ: 'p',\n  ꝓ: 'p',\n  ꝕ: 'p',\n  'ⓠ': 'q',\n  ｑ: 'q',\n  ɋ: 'q',\n  ꝗ: 'q',\n  ꝙ: 'q',\n  'ⓡ': 'r',\n  ｒ: 'r',\n  ŕ: 'r',\n  ṙ: 'r',\n  ř: 'r',\n  ȑ: 'r',\n  ȓ: 'r',\n  ṛ: 'r',\n  ṝ: 'r',\n  ŗ: 'r',\n  ṟ: 'r',\n  ɍ: 'r',\n  ɽ: 'r',\n  ꝛ: 'r',\n  ꞧ: 'r',\n  ꞃ: 'r',\n  'ⓢ': 's',\n  ｓ: 's',\n  ß: 's',\n  ś: 's',\n  ṥ: 's',\n  ŝ: 's',\n  ṡ: 's',\n  š: 's',\n  ṧ: 's',\n  ṣ: 's',\n  ṩ: 's',\n  ș: 's',\n  ş: 's',\n  ȿ: 's',\n  ꞩ: 's',\n  ꞅ: 's',\n  ẛ: 's',\n  'ⓣ': 't',\n  ｔ: 't',\n  ṫ: 't',\n  ẗ: 't',\n  ť: 't',\n  ṭ: 't',\n  ț: 't',\n  ţ: 't',\n  ṱ: 't',\n  ṯ: 't',\n  ŧ: 't',\n  ƭ: 't',\n  ʈ: 't',\n  ⱦ: 't',\n  ꞇ: 't',\n  ꜩ: 'tz',\n  'ⓤ': 'u',\n  ｕ: 'u',\n  ù: 'u',\n  ú: 'u',\n  û: 'u',\n  ũ: 'u',\n  ṹ: 'u',\n  ū: 'u',\n  ṻ: 'u',\n  ŭ: 'u',\n  ü: 'u',\n  ǜ: 'u',\n  ǘ: 'u',\n  ǖ: 'u',\n  ǚ: 'u',\n  ủ: 'u',\n  ů: 'u',\n  ű: 'u',\n  ǔ: 'u',\n  ȕ: 'u',\n  ȗ: 'u',\n  ư: 'u',\n  ừ: 'u',\n  ứ: 'u',\n  ữ: 'u',\n  ử: 'u',\n  ự: 'u',\n  ụ: 'u',\n  ṳ: 'u',\n  ų: 'u',\n  ṷ: 'u',\n  ṵ: 'u',\n  ʉ: 'u',\n  'ⓥ': 'v',\n  ｖ: 'v',\n  ṽ: 'v',\n  ṿ: 'v',\n  ʋ: 'v',\n  ꝟ: 'v',\n  ʌ: 'v',\n  ꝡ: 'vy',\n  'ⓦ': 'w',\n  ｗ: 'w',\n  ẁ: 'w',\n  ẃ: 'w',\n  ŵ: 'w',\n  ẇ: 'w',\n  ẅ: 'w',\n  ẘ: 'w',\n  ẉ: 'w',\n  ⱳ: 'w',\n  'ⓧ': 'x',\n  ｘ: 'x',\n  ẋ: 'x',\n  ẍ: 'x',\n  'ⓨ': 'y',\n  ｙ: 'y',\n  ỳ: 'y',\n  ý: 'y',\n  ŷ: 'y',\n  ỹ: 'y',\n  ȳ: 'y',\n  ẏ: 'y',\n  ÿ: 'y',\n  ỷ: 'y',\n  ẙ: 'y',\n  ỵ: 'y',\n  ƴ: 'y',\n  ɏ: 'y',\n  ỿ: 'y',\n  'ⓩ': 'z',\n  ｚ: 'z',\n  ź: 'z',\n  ẑ: 'z',\n  ż: 'z',\n  ž: 'z',\n  ẓ: 'z',\n  ẕ: 'z',\n  ƶ: 'z',\n  ȥ: 'z',\n  ɀ: 'z',\n  ⱬ: 'z',\n  ꝣ: 'z',\n  Ά: 'Α',\n  Έ: 'Ε',\n  Ή: 'Η',\n  Ί: 'Ι',\n  Ϊ: 'Ι',\n  Ό: 'Ο',\n  Ύ: 'Υ',\n  Ϋ: 'Υ',\n  Ώ: 'Ω',\n  ά: 'α',\n  έ: 'ε',\n  ή: 'η',\n  ί: 'ι',\n  ϊ: 'ι',\n  ΐ: 'ι',\n  ό: 'ο',\n  ύ: 'υ',\n  ϋ: 'υ',\n  ΰ: 'υ',\n  ω: 'ω',\n  ς: 'σ',\n};\n\n// Copied from Select2\nexport function stripDiacritics(text: string | number) {\n  // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n  function match(a: string) {\n    return DIACRITICS[a] || a;\n  }\n\n  return `${text}`.replace(/[^\\u0000-\\u007E]/g, match); // eslint-disable-line\n}\n\nexport function defaultMatcher(value: string, text: string) {\n  return stripDiacritics(value)\n    .toUpperCase()\n    .indexOf(stripDiacritics(text).toUpperCase());\n}\n\nexport function defaultTypeAheadMatcher(value: string, text: string) {\n  return stripDiacritics(value)\n    .toUpperCase()\n    .startsWith(stripDiacritics(text).toUpperCase())\n    ? 1\n    : -1;\n}\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsFormRadioCardControlPositionValues {\n  Bottom = 'bottom',\n  Left = 'left',\n}\n\nexport type HdsFormRadioCardControlPositions =\n  `${HdsFormRadioCardControlPositionValues}`;\n\nexport enum HdsFormRadioCardAlignmentValues {\n  Left = 'left',\n  Center = 'center',\n}\n\nexport type HdsFormRadioCardAlignments = `${HdsFormRadioCardAlignmentValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsModalSizeValues {\n  Small = 'small',\n  Medium = 'medium',\n  Large = 'large',\n}\nexport type HdsModalSizes = `${HdsModalSizeValues}`;\n\nexport enum HdsModalColorValues {\n  Neutral = 'neutral',\n  Warning = 'warning',\n  Critical = 'critical',\n}\nexport type HdsModalColors = `${HdsModalColorValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsRichTooltipToggleIconPositionValues {\n  Leading = 'leading',\n  Trailing = 'trailing',\n}\n\nexport type HdsRichTooltipToggleIconPositions =\n  `${HdsRichTooltipToggleIconPositionValues}`;\n\nexport enum HdsRichTooltipToggleSizeValues {\n  Small = 'small',\n  Medium = 'medium',\n  Large = 'large',\n}\n\nexport type HdsRichTooltipToggleSizes = `${HdsRichTooltipToggleSizeValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { helper } from '@ember/component/helper';\n\n/*\n * This helper can be used to format dates relative to the current time.\n *\n * Example:\n *\n * ```hbs\n * ({{hds-format-relative @display.relative.value @display.relative.unit}})\n * ```\n */\n\nexport function hdsFormatRelative([value, unit]: [\n  value: number,\n  unit?: Intl.RelativeTimeFormatUnit,\n]): string {\n  if (unit) {\n    return new Intl.RelativeTimeFormat(navigator.language).format(value, unit);\n  } else {\n    return new Intl.RelativeTimeFormat(navigator.language).format(value, 'day');\n  }\n}\n\nconst hdsFormatRelativeHelper = helper(hdsFormatRelative);\nexport default hdsFormatRelativeHelper;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsLayoutGridAlignValues {\n  Start = 'start',\n  Center = 'center',\n  End = 'end',\n  Stretch = 'stretch',\n}\n\nexport type HdsLayoutGridAligns = `${HdsLayoutGridAlignValues}`;\n\nexport enum HdsLayoutGridGapValues {\n  'Zero' = '0',\n  'Four' = '4',\n  'Eight' = '8',\n  'Twelve' = '12',\n  'Sixteen' = '16',\n  'TwentyFour' = '24',\n  'ThirtyTwo' = '32',\n  'FortyEight' = '48',\n}\n\nexport type HdsLayoutGridGaps = `${HdsLayoutGridGapValues}`;\n\n// A list of all existing tag names in the HTMLElementTagNameMap interface\nexport type AvailableTagNames = keyof HTMLElementTagNameMap;\n// A union of all types in the HTMLElementTagNameMap interface\nexport type AvailableElements =\n  HTMLElementTagNameMap[keyof HTMLElementTagNameMap];\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { StringStream } from '@codemirror/language';\n\ntype Quote = '\"' | \"'\";\n\ninterface ParserConfig {\n  delimiters?: RegExp;\n  operators?: RegExp;\n}\n\ninterface RegoState {\n  tokenize: (stream: StringStream, state: RegoState) => string | null;\n}\n\nfunction wordRegexp(words: string[]): RegExp {\n  return new RegExp('^((' + words.join(')|(') + '))\\\\b');\n}\n\n// keywords\nconst regoKeywords = [\n  'as',\n  'contains',\n  'data',\n  'default',\n  'else',\n  'every',\n  'false',\n  'if',\n  'in',\n  'import',\n  'input',\n  'package',\n  'not',\n  'null',\n  'some',\n  'true',\n  'with',\n];\n\n// built-ins / constants\nconst regoBuiltins = [\n  // numbers\n  'abs',\n  'ceil',\n  'floor',\n  'numbers.range',\n  'numbers.range_step',\n  'rand.intn',\n  'round',\n  // aggregates\n  'count',\n  'max',\n  'min',\n  'product',\n  'sort',\n  'sum',\n  // arrays\n  'array.concat',\n  'array.reverse',\n  'array.slice',\n  // sets\n  'intersection',\n  'union',\n  // objects\n  'json.filter',\n  'json.match_scema',\n  'json.patch',\n  'json.remove',\n  'json.verify_schema',\n  'object.filter',\n  'object.get',\n  'object.keys',\n  'object.remove',\n  'object.subset',\n  'object.union',\n  'object.union_n',\n  // strings\n  'concat',\n  'contains',\n  'endswith',\n  'format_int',\n  'indexof_n',\n  'lower',\n  'replace',\n  'split',\n  'sprintf',\n  'startswith',\n  'strings.any_prefix_match',\n  'strings.count',\n  'strings.render_template',\n  'strings.replace_n',\n  'strings.reverse',\n  'substring',\n  'trim',\n  'trim_left',\n  'trim_prefix',\n  'trim_right',\n  'trim_space',\n  'trim_suffix',\n  'upper',\n  // regex\n  'regex.find_all_string_submatch_n',\n  'regex.find_n',\n  'regex.globs_match',\n  'regex.is_valid',\n  'regex.match',\n  'regex.replace',\n  'regex.split',\n  'regex.template_match',\n  // glob\n  'glob.match',\n  'glob.quote_meta',\n  // bitwise\n  'bits.and',\n  'bits.lsh',\n  'bits.negate',\n  'bits.or',\n  'bits.rsh',\n  'bits.xor',\n  // conversions\n  'to_number',\n  // units\n  'units.parse',\n  'units.parse_bytes',\n  // types\n  'is_array',\n  'is_boolean',\n  'is_null',\n  'is_number',\n  'is_object',\n  'is_set',\n  'is_string',\n  'type_name',\n  // encoding\n  'base64.decode',\n  'base64.encode',\n  'base64.is_valid',\n  'base64url.decode',\n  'base64url.encode',\n  'base64url.encode_no_pad',\n  'hex.decode',\n  'hex.encode',\n  'json.is_valid',\n  'json.marshal',\n  'json.marshal_with_options',\n  'json.unmarshal',\n  'urlquery.decode',\n  'urlquery.decode_object',\n  'urlquery.encode',\n  'urlquery.encode_object',\n  'yaml.is_valid',\n  'yaml.marshal',\n  'yaml.unmarshal',\n  // token signing\n  'io.jwt.encode_sign',\n  'io.jwt.encode_sign_raw',\n  // token verification\n  'io.jwt.decode',\n  'io.jwt.decode_verify',\n  'io.jwt.verify_es256',\n  'io.jwt.verify_es384',\n  'io.jwt.verify_es512',\n  'io.jwt.verify_hs256',\n  'io.jwt.verify_hs384',\n  'io.jwt.verify_hs512',\n  'io.jwt.verify_ps384',\n  'io.jwt.verify_ps512',\n  'io.jwt.verify_rs256',\n  'io.jwt.verify_rs384',\n  'io.jwt.verify_rs512',\n  // time\n  'time.add_date',\n  'time.clock',\n  'time.date',\n  'time.diff',\n  'time.format',\n  'time.now_ns',\n  'time.parse_duration_ns',\n  'time.parse_ns',\n  'time.parse_rfc3339_ns',\n  'time.weekday',\n  // crypto\n  'crypto.hmac.equal',\n  'crypto.hmac.md5',\n  'crypto.hmac.sha1',\n  'crypto.hmac.sha256',\n  'crypto.hmac.sha512',\n  'crypto.md5',\n  'crypto.parse_private_keys',\n  'crypto.sha1',\n  'crypto.sha256',\n  'crypto.x509.parse_and_verify_certificates',\n  'crypto.x509.parse_and_verify_certificates_with_options',\n  'crypto.x509.parse_certificates',\n  'crypto.x509.parse_keypair',\n  'crypto.x509.parse_rsa_private_key',\n  // graphs\n  'graph.reachable',\n  'graph.reachable_paths',\n  'walk',\n  // graphql\n  'graphql.is_valid',\n  'graphql.parse',\n  'graphql.parse_and_verify',\n  'graphql.parse_query',\n  'graphql.parse_schema',\n  'graphql.parse_schema_is_valid',\n  // http\n  'http.send',\n  // aws\n  'providers.aws.sign_req',\n  // net\n  'net.cidr_contains',\n  'net.cidr_contains_matches',\n  'net.cidr_expand',\n  'net.cidr_intersects',\n  'net.cidr_is_valid',\n  'net.cidr_merge',\n  'net.lookup_ip_addr',\n  // uuid\n  'uuid.parse',\n  'uuid.rfc4122',\n  // semantic versions\n  'semver.compare',\n  'semver.is_valid',\n  // rego\n  'rego.metadata.chain',\n  'rego.metadata.rule',\n  'rego.metadata.parse_module',\n];\n\nconst keywords = wordRegexp(regoKeywords);\nconst builtins = wordRegexp(regoBuiltins);\n\nexport function mkRego(parserConf: ParserConfig = {}) {\n  const ERRORCLASS = 'error';\n\n  // delimiters, operators, etc.\n  const delimiters = parserConf.delimiters ?? /^[()[\\]{},:;.|]/;\n  const operators = [\n    parserConf.operators ?? /^(?:in|\\+|-|\\*|\\/|%|<=|>=|<|>|==|!=|&&|\\|\\|)\\b/,\n  ];\n\n  // tokenizer\n  function tokenBase(stream: StringStream, state: RegoState): string | null {\n    if (stream.eatSpace()) return null;\n\n    // comments\n    // single-line comment starting with #\n    if (stream.match('#')) {\n      stream.skipToEnd();\n      return 'comment';\n    }\n    // multi-line comment starting with /* ... */\n    if (stream.match('/*')) {\n      state.tokenize = tokenComment;\n      return state.tokenize(stream, state);\n    }\n\n    // strings\n    // only double-quoted strings are standard\n    if (stream.match('\"')) {\n      state.tokenize = tokenString('\"');\n      return state.tokenize(stream, state);\n    }\n\n    // numbers\n    if (stream.match(/^[0-9]+(?:\\.[0-9]*)?(?:[eE][+-]?[0-9]+)?/)) {\n      return 'number';\n    }\n\n    // operators\n    for (let i = 0; i < operators.length; i++) {\n      if (stream.match(operators[i]!)) {\n        return 'operator';\n      }\n    }\n\n    // delimiters/punctuation\n    if (stream.match(delimiters)) {\n      return 'punctuation';\n    }\n\n    // keywords, operators, builtins\n    if (stream.match(keywords)) {\n      return 'keyword';\n    }\n    if (stream.match(builtins)) {\n      return 'builtin';\n    }\n\n    // identifiers (variables, function names, etc.)\n    if (stream.match(/^[_A-Za-z][_A-Za-z0-9]*/)) {\n      return 'variable';\n    }\n\n    // if nothing matched, consume one character and mark it as error\n    stream.next();\n\n    return ERRORCLASS;\n  }\n\n  /**\n   * Tokenizer for multi-line (block) comments.\n   */\n  function tokenComment(stream: StringStream, state: RegoState): string {\n    while (!stream.eol()) {\n      if (stream.match('*/')) {\n        state.tokenize = tokenBase;\n        break;\n      }\n      stream.next();\n    }\n    return 'comment';\n  }\n\n  // string tokenizer factory\n  function tokenString(\n    quote: Quote\n  ): (stream: StringStream, state: RegoState) => string {\n    return function (stream: StringStream, state: RegoState): string {\n      let escaped = false;\n      let ch = null;\n\n      while ((ch = stream.next()) != null) {\n        if (ch === quote && !escaped) {\n          // end of string\n          state.tokenize = tokenBase;\n          break;\n        }\n        escaped = !escaped && ch === '\\\\';\n      }\n\n      return 'string';\n    };\n  }\n\n  // CodeMirror API\n  return {\n    name: 'rego',\n\n    startState: function (): RegoState {\n      return { tokenize: tokenBase };\n    },\n\n    token: function (stream: StringStream, state: RegoState): string | null {\n      return state.tokenize(stream, state);\n    },\n\n    languageData: {\n      commentTokens: { line: '#', block: { open: '/*', close: '*/' } },\n      closeBrackets: { brackets: ['(', '[', '{', '\"', \"'\"] },\n    },\n  };\n}\n\nexport const rego = mkRego();\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { StringStream } from '@codemirror/language';\n\ntype Quote = '\"' | \"'\";\n\ninterface ParserConfig {\n  delimiters?: RegExp;\n  operators?: RegExp;\n}\n\ninterface SentinelState {\n  tokenize: (stream: StringStream, state: SentinelState) => string | null;\n}\n\nfunction wordRegexp(words: string[]): RegExp {\n  return new RegExp('^((' + words.join(')|(') + '))\\\\b');\n}\n\n// logical operators\nconst wordOperators = wordRegexp([\n  'and',\n  'contains',\n  'else',\n  'in',\n  'is',\n  'matches',\n  'not',\n  'or',\n  'xor',\n]);\n\n// keywords\nconst sentinelKeywords = [\n  'all',\n  'any',\n  'as',\n  'break',\n  'case',\n  'continue',\n  'default',\n  'else',\n  'empty',\n  'filter',\n  'for',\n  'func',\n  'if',\n  'import',\n  'map',\n  'param',\n  'return',\n  'rule',\n  'when',\n];\n\n// built-ins / constants\nconst sentinelBuiltins = [\n  'true',\n  'false',\n  'null',\n  'undefined',\n  'length',\n  'append',\n  'delete',\n  'keys',\n  'values',\n  'range',\n  'print',\n  'int',\n  'float',\n  'string',\n  'bool',\n];\n\nconst keywords = wordRegexp(sentinelKeywords);\nconst builtins = wordRegexp(sentinelBuiltins);\n\nexport function mkSentinel(parserConf: ParserConfig) {\n  const ERRORCLASS = 'error';\n\n  // delimiters, operators, etc.\n  const delimiters = parserConf.delimiters ?? /^[()[\\]{},:;=.]/;\n  const operators = [\n    parserConf.operators ?? /^(\\+|-|\\*|\\/|%|<=|>=|<|>|==|!=|!|&&|\\|\\|)/,\n  ];\n\n  // tokenizer\n  function tokenBase(\n    stream: StringStream,\n    state: SentinelState\n  ): string | null {\n    return tokenBaseInner(stream, state);\n  }\n\n  function tokenBaseInner(\n    stream: StringStream,\n    state: SentinelState\n  ): string | null {\n    if (stream.eatSpace()) {\n      return null;\n    }\n\n    // comments\n    // single-line `//`\n    if (stream.match('//')) {\n      stream.skipToEnd();\n      return 'comment';\n    }\n    // multi-line `/* ... */`\n    if (stream.match('/*')) {\n      state.tokenize = tokenComment;\n      return state.tokenize(stream, state);\n    }\n\n    // strings\n    if (stream.match(/\"/) || stream.match(/'/)) {\n      // We’ve just consumed either \" or '\n      const quote = stream.current();\n      state.tokenize = tokenString(quote as Quote);\n      return state.tokenize(stream, state);\n    }\n\n    // numbers\n    if (stream.match(/^[0-9]+(\\.[0-9]+)?/)) {\n      return 'number';\n    }\n\n    // operators\n    for (let i = 0; i < operators.length; i++) {\n      if (stream.match(operators[i]!)) {\n        return 'operator';\n      }\n    }\n\n    // delimiters/punctuation\n    if (stream.match(delimiters)) {\n      return 'punctuation';\n    }\n\n    // keywords, operators, builtins\n    if (stream.match(keywords) || stream.match(wordOperators)) {\n      return 'keyword';\n    }\n    if (stream.match(builtins)) {\n      return 'builtin';\n    }\n\n    // identifiers (variables, function names, etc.)\n    if (stream.match(/^[_A-Za-z][_A-Za-z0-9]*/)) {\n      return 'variable';\n    }\n\n    // if nothing matched, consume one character and mark it as error\n    stream.next();\n\n    return ERRORCLASS;\n  }\n\n  // multi-line comment tokenizer\n  function tokenComment(stream: StringStream, state: SentinelState): string {\n    while (!stream.eol()) {\n      if (stream.match('*/')) {\n        state.tokenize = tokenBase;\n        break;\n      }\n      stream.next();\n    }\n    return 'comment';\n  }\n\n  // string tokenizer factory\n  function tokenString(\n    quote: Quote\n  ): (stream: StringStream, state: SentinelState) => string {\n    return function (stream: StringStream, state: SentinelState) {\n      let escaped = false;\n      let ch = null;\n\n      while ((ch = stream.next()) != null) {\n        if (ch === quote && !escaped) {\n          // end of string\n          state.tokenize = tokenBase;\n          break;\n        }\n        escaped = !escaped && ch === '\\\\';\n      }\n\n      return 'string';\n    };\n  }\n\n  // CodeMirror API\n  return {\n    name: 'sentinel',\n\n    startState: function (): SentinelState {\n      return {\n        tokenize: tokenBase,\n      };\n    },\n\n    token: function (\n      stream: StringStream,\n      state: SentinelState\n    ): string | null {\n      return state.tokenize(stream, state);\n    },\n\n    languageData: {\n      commentTokens: { line: '//', block: { open: '/*', close: '*/' } },\n      closeBrackets: { brackets: ['(', '[', '{', '\"', \"'\"] },\n    },\n  };\n}\n\nexport const sentinel = mkSentinel({});\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { Diagnostic as DiagnosticType } from '@codemirror/lint';\nimport type { HdsCodeEditorSignature } from '../../hds-code-editor';\nimport type { Extension, Text } from '@codemirror/state';\n\nexport enum HdsCodeEditorJsonLintingError {\n  InvalidSyntax = 'Invalid syntax',\n  KeyExpected = 'Key expected',\n  KeyMustBeDoubleQuoted = 'Key must be double quoted',\n  MissingComma = 'Missing comma',\n  TrailingComma = 'Trailing comma',\n  ValueExpected = 'Value expected',\n}\n\nexport function findNextToken(\n  doc: Text,\n  index: number,\n  step: number = 1\n): string {\n  while (index >= 0 && index < doc.length) {\n    const token = doc.sliceString(index, index + 1);\n\n    if (token.trim() !== '') {\n      return token;\n    }\n\n    index += step;\n  }\n  return '';\n}\n\nexport function determineErrorMessage({\n  previousToken,\n  nextToken,\n  errorToken,\n}: {\n  previousToken: string;\n  nextToken: string;\n  errorToken: string;\n}): HdsCodeEditorJsonLintingError {\n  let message: HdsCodeEditorJsonLintingError =\n    HdsCodeEditorJsonLintingError.InvalidSyntax;\n\n  if (errorToken === '') {\n    if (previousToken === '{' && nextToken === ':') {\n      message = HdsCodeEditorJsonLintingError.KeyExpected;\n    } else if (previousToken === '\"' && nextToken === '\"') {\n      message = HdsCodeEditorJsonLintingError.MissingComma;\n    } else if (\n      previousToken === ',' &&\n      (nextToken === '}' || nextToken === ']')\n    ) {\n      message = HdsCodeEditorJsonLintingError.TrailingComma;\n    }\n  } else {\n    if (\n      (previousToken === '{' || previousToken === ',') &&\n      (nextToken === '\"' || nextToken === ':')\n    ) {\n      message = HdsCodeEditorJsonLintingError.KeyMustBeDoubleQuoted;\n    } else if (\n      previousToken === ':' &&\n      (nextToken === ',' || nextToken === '}' || nextToken === ']')\n    ) {\n      message = HdsCodeEditorJsonLintingError.ValueExpected;\n    }\n  }\n\n  return message;\n}\n\n// this renders the error message for both the tooltip and the drawer item\nexport function renderErrorMessage(\n  message: string,\n  lineNumber: number\n): HTMLElement {\n  const wrapper = document.createElement('div');\n  wrapper.classList.add('cm-diagnosticText-inner');\n\n  const icon = document.createElement('div');\n  icon.classList.add('cm-lint-marker-error');\n  icon.setAttribute('aria-hidden', 'true');\n\n  const text = document.createElement('span');\n  text.textContent = `Line ${lineNumber}: ${message}`;\n\n  wrapper.append(icon, text);\n\n  return wrapper;\n}\n\n// lezer JSON parser uses '⚠' as a placeholder for syntax errors\nconst errorNodeName = '⚠';\n\nexport default async function jsonLinter(\n  onLint: HdsCodeEditorSignature['Args']['Named']['onLint']\n): Promise<Extension[]> {\n  const [\n    { EditorView, keymap },\n    { syntaxTree },\n    { linter, lintGutter, lintKeymap },\n  ] = await Promise.all([\n    import('@codemirror/view'),\n    import('@codemirror/language'),\n    import('@codemirror/lint'),\n  ]);\n\n  const jsonLinter = linter((editor) => {\n    const diagnostics: DiagnosticType[] = [];\n    const doc = editor.state.doc;\n    const tree = syntaxTree(editor.state);\n    const seenLines = new Set();\n\n    tree.cursor().iterate((node) => {\n      if (node.name === errorNodeName) {\n        const lineNumber = doc.lineAt(node.from).number;\n\n        if (seenLines.has(lineNumber)) {\n          return;\n        }\n\n        const message = determineErrorMessage({\n          previousToken: findNextToken(doc, node.from - 1, -1),\n          nextToken: findNextToken(doc, node.to),\n          errorToken: doc.sliceString(node.from, node.to),\n        });\n\n        diagnostics.push({\n          from: node.from,\n          to: node.to,\n          message,\n          severity: 'error',\n          renderMessage: () => renderErrorMessage(message, lineNumber),\n        });\n\n        seenLines.add(lineNumber);\n      }\n    });\n\n    onLint?.(diagnostics, doc.toString(), editor);\n\n    return diagnostics;\n  });\n\n  return [\n    jsonLinter,\n    lintGutter(),\n    keymap.of([...lintKeymap]),\n    EditorView.editorAttributes.of({ class: 'cm-lintingEnabled' }),\n  ];\n}\n","/**\n * Note that this file *at all* is deprecated in ember-source v6,\n * and will not work in v7 as this import is being removed in v7.\n * Do not use closure-action with ember-composable-helpers.\n */\nimport Ember from 'ember';\n\nconst { __loader } = Ember;\n\nlet ClosureActionModule = { ACTION: null };\n\nif (\n  __loader?.registry &&\n  'ember-htmlbars/keywords/closure-action' in __loader.registry\n) {\n  ClosureActionModule = __loader.require(\n    'ember-htmlbars/keywords/closure-action',\n  );\n} else if (\n  __loader?.registry &&\n  'ember-routing-htmlbars/keywords/closure-action' in __loader.registry\n) {\n  ClosureActionModule = __loader.require(\n    'ember-routing-htmlbars/keywords/closure-action',\n  );\n}\n\nexport default ClosureActionModule.ACTION;\n","import type { Client } from '../client';\nimport { getDefaultCurrentScope, getDefaultIsolationScope } from '../defaultScopes';\nimport { Scope } from '../scope';\nimport { isThenable } from '../utils-hoist/is';\nimport { getMainCarrier, getSentryCarrier } from './../carrier';\nimport type { AsyncContextStrategy } from './types';\n\ninterface Layer {\n  client?: Client;\n  scope: Scope;\n}\n\n/**\n * This is an object that holds a stack of scopes.\n */\nexport class AsyncContextStack {\n  private readonly _stack: [Layer, ...Layer[]];\n  private _isolationScope: Scope;\n\n  public constructor(scope?: Scope, isolationScope?: Scope) {\n    let assignedScope;\n    if (!scope) {\n      assignedScope = new Scope();\n    } else {\n      assignedScope = scope;\n    }\n\n    let assignedIsolationScope;\n    if (!isolationScope) {\n      assignedIsolationScope = new Scope();\n    } else {\n      assignedIsolationScope = isolationScope;\n    }\n\n    // scope stack for domains or the process\n    this._stack = [{ scope: assignedScope }];\n    this._isolationScope = assignedIsolationScope;\n  }\n\n  /**\n   * Fork a scope for the stack.\n   */\n  public withScope<T>(callback: (scope: Scope) => T): T {\n    const scope = this._pushScope();\n\n    let maybePromiseResult: T;\n    try {\n      maybePromiseResult = callback(scope);\n    } catch (e) {\n      this._popScope();\n      throw e;\n    }\n\n    if (isThenable(maybePromiseResult)) {\n      // @ts-expect-error - isThenable returns the wrong type\n      return maybePromiseResult.then(\n        res => {\n          this._popScope();\n          return res;\n        },\n        e => {\n          this._popScope();\n          throw e;\n        },\n      );\n    }\n\n    this._popScope();\n    return maybePromiseResult;\n  }\n\n  /**\n   * Get the client of the stack.\n   */\n  public getClient<C extends Client>(): C | undefined {\n    return this.getStackTop().client as C;\n  }\n\n  /**\n   * Returns the scope of the top stack.\n   */\n  public getScope(): Scope {\n    return this.getStackTop().scope;\n  }\n\n  /**\n   * Get the isolation scope for the stack.\n   */\n  public getIsolationScope(): Scope {\n    return this._isolationScope;\n  }\n\n  /**\n   * Returns the topmost scope layer in the order domain > local > process.\n   */\n  public getStackTop(): Layer {\n    return this._stack[this._stack.length - 1] as Layer;\n  }\n\n  /**\n   * Push a scope to the stack.\n   */\n  private _pushScope(): Scope {\n    // We want to clone the content of prev scope\n    const scope = this.getScope().clone();\n    this._stack.push({\n      client: this.getClient(),\n      scope,\n    });\n    return scope;\n  }\n\n  /**\n   * Pop a scope from the stack.\n   */\n  private _popScope(): boolean {\n    if (this._stack.length <= 1) return false;\n    return !!this._stack.pop();\n  }\n}\n\n/**\n * Get the global async context stack.\n * This will be removed during the v8 cycle and is only here to make migration easier.\n */\nfunction getAsyncContextStack(): AsyncContextStack {\n  const registry = getMainCarrier();\n  const sentry = getSentryCarrier(registry);\n\n  return (sentry.stack = sentry.stack || new AsyncContextStack(getDefaultCurrentScope(), getDefaultIsolationScope()));\n}\n\nfunction withScope<T>(callback: (scope: Scope) => T): T {\n  return getAsyncContextStack().withScope(callback);\n}\n\nfunction withSetScope<T>(scope: Scope, callback: (scope: Scope) => T): T {\n  const stack = getAsyncContextStack() as AsyncContextStack;\n  return stack.withScope(() => {\n    stack.getStackTop().scope = scope;\n    return callback(scope);\n  });\n}\n\nfunction withIsolationScope<T>(callback: (isolationScope: Scope) => T): T {\n  return getAsyncContextStack().withScope(() => {\n    return callback(getAsyncContextStack().getIsolationScope());\n  });\n}\n\n/**\n * Get the stack-based async context strategy.\n */\nexport function getStackAsyncContextStrategy(): AsyncContextStrategy {\n  return {\n    withIsolationScope,\n    withScope,\n    withSetScope,\n    withSetIsolationScope: <T>(_isolationScope: Scope, callback: (isolationScope: Scope) => T) => {\n      return withIsolationScope(callback);\n    },\n    getCurrentScope: () => getAsyncContextStack().getScope(),\n    getIsolationScope: () => getAsyncContextStack().getIsolationScope(),\n  };\n}\n","import { getClient, getCurrentScope } from '../currentScopes';\nimport type { DynamicSamplingContext, Span, StartSpanOptions } from '../types-hoist';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON } from '../semanticAttributes';\nimport { logger } from '../utils-hoist/logger';\nimport { timestampInSeconds } from '../utils-hoist/time';\nimport { hasSpansEnabled } from '../utils/hasSpansEnabled';\nimport { _setSpanForScope } from '../utils/spanOnScope';\nimport {\n  getActiveSpan,\n  getSpanDescendants,\n  removeChildSpanFromSpan,\n  spanTimeInputToSeconds,\n  spanToJSON,\n} from '../utils/spanUtils';\nimport { freezeDscOnSpan, getDynamicSamplingContextFromSpan } from './dynamicSamplingContext';\nimport { SentryNonRecordingSpan } from './sentryNonRecordingSpan';\nimport { SPAN_STATUS_ERROR } from './spanstatus';\nimport { startInactiveSpan } from './trace';\n\nexport const TRACING_DEFAULTS = {\n  idleTimeout: 1_000,\n  finalTimeout: 30_000,\n  childSpanTimeout: 15_000,\n};\n\nconst FINISH_REASON_HEARTBEAT_FAILED = 'heartbeatFailed';\nconst FINISH_REASON_IDLE_TIMEOUT = 'idleTimeout';\nconst FINISH_REASON_FINAL_TIMEOUT = 'finalTimeout';\nconst FINISH_REASON_EXTERNAL_FINISH = 'externalFinish';\nconst FINISH_REASON_CANCELLED = 'cancelled';\n\n// unused\nconst FINISH_REASON_DOCUMENT_HIDDEN = 'documentHidden';\n\n// unused in this file, but used in BrowserTracing\nconst FINISH_REASON_INTERRUPTED = 'interactionInterrupted';\n\ntype IdleSpanFinishReason =\n  | typeof FINISH_REASON_CANCELLED\n  | typeof FINISH_REASON_DOCUMENT_HIDDEN\n  | typeof FINISH_REASON_EXTERNAL_FINISH\n  | typeof FINISH_REASON_FINAL_TIMEOUT\n  | typeof FINISH_REASON_HEARTBEAT_FAILED\n  | typeof FINISH_REASON_IDLE_TIMEOUT\n  | typeof FINISH_REASON_INTERRUPTED;\n\ninterface IdleSpanOptions {\n  /**\n   * The time that has to pass without any span being created.\n   * If this time is exceeded, the idle span will finish.\n   */\n  idleTimeout: number;\n  /**\n   * The max. time an idle span may run.\n   * If this time is exceeded, the idle span will finish no matter what.\n   */\n  finalTimeout: number;\n  /**\n   * The max. time a child span may run.\n   * If the time since the last span was started exceeds this time, the idle span will finish.\n   */\n  childSpanTimeout?: number;\n  /**\n   * When set to `true`, will disable the idle timeout and child timeout\n   * until the `idleSpanEnableAutoFinish` hook is emitted for the idle span.\n   * The final timeout mechanism will not be affected by this option,\n   * meaning the idle span will definitely be finished when the final timeout is\n   * reached, no matter what this option is configured to.\n   *\n   * Defaults to `false`.\n   */\n  disableAutoFinish?: boolean;\n  /** Allows to configure a hook that is called when the idle span is ended, before it is processed. */\n  beforeSpanEnd?: (span: Span) => void;\n}\n\n/**\n * An idle span is a span that automatically finishes. It does this by tracking child spans as activities.\n * An idle span is always the active span.\n */\nexport function startIdleSpan(startSpanOptions: StartSpanOptions, options: Partial<IdleSpanOptions> = {}): Span {\n  // Activities store a list of active spans\n  const activities = new Map<string, boolean>();\n\n  // We should not use heartbeat if we finished a span\n  let _finished = false;\n\n  // Timer that tracks idleTimeout\n  let _idleTimeoutID: ReturnType<typeof setTimeout> | undefined;\n\n  // Timer that tracks maxSpanTime for child spans\n  let _childSpanTimeoutID: ReturnType<typeof setTimeout> | undefined;\n\n  // The reason why the span was finished\n  let _finishReason: IdleSpanFinishReason = FINISH_REASON_EXTERNAL_FINISH;\n\n  let _autoFinishAllowed: boolean = !options.disableAutoFinish;\n\n  const _cleanupHooks: (() => void)[] = [];\n\n  const {\n    idleTimeout = TRACING_DEFAULTS.idleTimeout,\n    finalTimeout = TRACING_DEFAULTS.finalTimeout,\n    childSpanTimeout = TRACING_DEFAULTS.childSpanTimeout,\n    beforeSpanEnd,\n  } = options;\n\n  const client = getClient();\n\n  if (!client || !hasSpansEnabled()) {\n    const span = new SentryNonRecordingSpan();\n\n    const dsc = {\n      sample_rate: '0',\n      sampled: 'false',\n      ...getDynamicSamplingContextFromSpan(span),\n    } satisfies Partial<DynamicSamplingContext>;\n    freezeDscOnSpan(span, dsc);\n\n    return span;\n  }\n\n  const scope = getCurrentScope();\n  const previousActiveSpan = getActiveSpan();\n  const span = _startIdleSpan(startSpanOptions);\n\n  // We patch span.end to ensure we can run some things before the span is ended\n  // eslint-disable-next-line @typescript-eslint/unbound-method\n  span.end = new Proxy(span.end, {\n    apply(target, thisArg, args: Parameters<Span['end']>) {\n      if (beforeSpanEnd) {\n        beforeSpanEnd(span);\n      }\n\n      // If the span is non-recording, nothing more to do here...\n      // This is the case if tracing is enabled but this specific span was not sampled\n      if (thisArg instanceof SentryNonRecordingSpan) {\n        return;\n      }\n\n      // Just ensuring that this keeps working, even if we ever have more arguments here\n      const [definedEndTimestamp, ...rest] = args;\n      const timestamp = definedEndTimestamp || timestampInSeconds();\n      const spanEndTimestamp = spanTimeInputToSeconds(timestamp);\n\n      // Ensure we end with the last span timestamp, if possible\n      const spans = getSpanDescendants(span).filter(child => child !== span);\n\n      // If we have no spans, we just end, nothing else to do here\n      if (!spans.length) {\n        onIdleSpanEnded(spanEndTimestamp);\n        return Reflect.apply(target, thisArg, [spanEndTimestamp, ...rest]);\n      }\n\n      const childEndTimestamps = spans\n        .map(span => spanToJSON(span).timestamp)\n        .filter(timestamp => !!timestamp) as number[];\n      const latestSpanEndTimestamp = childEndTimestamps.length ? Math.max(...childEndTimestamps) : undefined;\n\n      // In reality this should always exist here, but type-wise it may be undefined...\n      const spanStartTimestamp = spanToJSON(span).start_timestamp;\n\n      // The final endTimestamp should:\n      // * Never be before the span start timestamp\n      // * Be the latestSpanEndTimestamp, if there is one, and it is smaller than the passed span end timestamp\n      // * Otherwise be the passed end timestamp\n      // Final timestamp can never be after finalTimeout\n      const endTimestamp = Math.min(\n        spanStartTimestamp ? spanStartTimestamp + finalTimeout / 1000 : Infinity,\n        Math.max(spanStartTimestamp || -Infinity, Math.min(spanEndTimestamp, latestSpanEndTimestamp || Infinity)),\n      );\n\n      onIdleSpanEnded(endTimestamp);\n      return Reflect.apply(target, thisArg, [endTimestamp, ...rest]);\n    },\n  });\n\n  /**\n   * Cancels the existing idle timeout, if there is one.\n   */\n  function _cancelIdleTimeout(): void {\n    if (_idleTimeoutID) {\n      clearTimeout(_idleTimeoutID);\n      _idleTimeoutID = undefined;\n    }\n  }\n\n  /**\n   * Cancels the existing child span timeout, if there is one.\n   */\n  function _cancelChildSpanTimeout(): void {\n    if (_childSpanTimeoutID) {\n      clearTimeout(_childSpanTimeoutID);\n      _childSpanTimeoutID = undefined;\n    }\n  }\n\n  /**\n   * Restarts idle timeout, if there is no running idle timeout it will start one.\n   */\n  function _restartIdleTimeout(endTimestamp?: number): void {\n    _cancelIdleTimeout();\n    _idleTimeoutID = setTimeout(() => {\n      if (!_finished && activities.size === 0 && _autoFinishAllowed) {\n        _finishReason = FINISH_REASON_IDLE_TIMEOUT;\n        span.end(endTimestamp);\n      }\n    }, idleTimeout);\n  }\n\n  /**\n   * Restarts child span timeout, if there is none running it will start one.\n   */\n  function _restartChildSpanTimeout(endTimestamp?: number): void {\n    _cancelChildSpanTimeout();\n    _idleTimeoutID = setTimeout(() => {\n      if (!_finished && _autoFinishAllowed) {\n        _finishReason = FINISH_REASON_HEARTBEAT_FAILED;\n        span.end(endTimestamp);\n      }\n    }, childSpanTimeout);\n  }\n\n  /**\n   * Start tracking a specific activity.\n   * @param spanId The span id that represents the activity\n   */\n  function _pushActivity(spanId: string): void {\n    _cancelIdleTimeout();\n    activities.set(spanId, true);\n\n    const endTimestamp = timestampInSeconds();\n    // We need to add the timeout here to have the real endtimestamp of the idle span\n    // Remember timestampInSeconds is in seconds, timeout is in ms\n    _restartChildSpanTimeout(endTimestamp + childSpanTimeout / 1000);\n  }\n\n  /**\n   * Remove an activity from usage\n   * @param spanId The span id that represents the activity\n   */\n  function _popActivity(spanId: string): void {\n    if (activities.has(spanId)) {\n      activities.delete(spanId);\n    }\n\n    if (activities.size === 0) {\n      const endTimestamp = timestampInSeconds();\n      // We need to add the timeout here to have the real endtimestamp of the idle span\n      // Remember timestampInSeconds is in seconds, timeout is in ms\n      _restartIdleTimeout(endTimestamp + idleTimeout / 1000);\n      _cancelChildSpanTimeout();\n    }\n  }\n\n  function onIdleSpanEnded(endTimestamp: number): void {\n    _finished = true;\n    activities.clear();\n\n    _cleanupHooks.forEach(cleanup => cleanup());\n\n    _setSpanForScope(scope, previousActiveSpan);\n\n    const spanJSON = spanToJSON(span);\n\n    const { start_timestamp: startTimestamp } = spanJSON;\n    // This should never happen, but to make TS happy...\n    if (!startTimestamp) {\n      return;\n    }\n\n    const attributes = spanJSON.data;\n    if (!attributes[SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON]) {\n      span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, _finishReason);\n    }\n\n    logger.log(`[Tracing] Idle span \"${spanJSON.op}\" finished`);\n\n    const childSpans = getSpanDescendants(span).filter(child => child !== span);\n\n    let discardedSpans = 0;\n    childSpans.forEach(childSpan => {\n      // We cancel all pending spans with status \"cancelled\" to indicate the idle span was finished early\n      if (childSpan.isRecording()) {\n        childSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'cancelled' });\n        childSpan.end(endTimestamp);\n        DEBUG_BUILD &&\n          logger.log('[Tracing] Cancelling span since span ended early', JSON.stringify(childSpan, undefined, 2));\n      }\n\n      const childSpanJSON = spanToJSON(childSpan);\n      const { timestamp: childEndTimestamp = 0, start_timestamp: childStartTimestamp = 0 } = childSpanJSON;\n\n      const spanStartedBeforeIdleSpanEnd = childStartTimestamp <= endTimestamp;\n\n      // Add a delta with idle timeout so that we prevent false positives\n      const timeoutWithMarginOfError = (finalTimeout + idleTimeout) / 1000;\n      const spanEndedBeforeFinalTimeout = childEndTimestamp - childStartTimestamp <= timeoutWithMarginOfError;\n\n      if (DEBUG_BUILD) {\n        const stringifiedSpan = JSON.stringify(childSpan, undefined, 2);\n        if (!spanStartedBeforeIdleSpanEnd) {\n          logger.log('[Tracing] Discarding span since it happened after idle span was finished', stringifiedSpan);\n        } else if (!spanEndedBeforeFinalTimeout) {\n          logger.log('[Tracing] Discarding span since it finished after idle span final timeout', stringifiedSpan);\n        }\n      }\n\n      if (!spanEndedBeforeFinalTimeout || !spanStartedBeforeIdleSpanEnd) {\n        removeChildSpanFromSpan(span, childSpan);\n        discardedSpans++;\n      }\n    });\n\n    if (discardedSpans > 0) {\n      span.setAttribute('sentry.idle_span_discarded_spans', discardedSpans);\n    }\n  }\n\n  _cleanupHooks.push(\n    client.on('spanStart', startedSpan => {\n      // If we already finished the idle span,\n      // or if this is the idle span itself being started,\n      // or if the started span has already been closed,\n      // we don't care about it for activity\n      if (_finished || startedSpan === span || !!spanToJSON(startedSpan).timestamp) {\n        return;\n      }\n\n      const allSpans = getSpanDescendants(span);\n\n      // If the span that was just started is a child of the idle span, we should track it\n      if (allSpans.includes(startedSpan)) {\n        _pushActivity(startedSpan.spanContext().spanId);\n      }\n    }),\n  );\n\n  _cleanupHooks.push(\n    client.on('spanEnd', endedSpan => {\n      if (_finished) {\n        return;\n      }\n\n      _popActivity(endedSpan.spanContext().spanId);\n    }),\n  );\n\n  _cleanupHooks.push(\n    client.on('idleSpanEnableAutoFinish', spanToAllowAutoFinish => {\n      if (spanToAllowAutoFinish === span) {\n        _autoFinishAllowed = true;\n        _restartIdleTimeout();\n\n        if (activities.size) {\n          _restartChildSpanTimeout();\n        }\n      }\n    }),\n  );\n\n  // We only start the initial idle timeout if we are not delaying the auto finish\n  if (!options.disableAutoFinish) {\n    _restartIdleTimeout();\n  }\n\n  setTimeout(() => {\n    if (!_finished) {\n      span.setStatus({ code: SPAN_STATUS_ERROR, message: 'deadline_exceeded' });\n      _finishReason = FINISH_REASON_FINAL_TIMEOUT;\n      span.end();\n    }\n  }, finalTimeout);\n\n  return span;\n}\n\nfunction _startIdleSpan(options: StartSpanOptions): Span {\n  const span = startInactiveSpan(options);\n\n  _setSpanForScope(getCurrentScope(), span);\n\n  DEBUG_BUILD && logger.log('[Tracing] Started span is an idle span');\n\n  return span;\n}\n","import { SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_PROFILE_ID } from '../semanticAttributes';\nimport type { SpanJSON, TransactionEvent } from '../types-hoist';\nimport { dropUndefinedKeys } from '../utils-hoist';\n\n/**\n * Converts a transaction event to a span JSON object.\n */\nexport function convertTransactionEventToSpanJson(event: TransactionEvent): SpanJSON {\n  const { trace_id, parent_span_id, span_id, status, origin, data, op } = event.contexts?.trace ?? {};\n\n  return dropUndefinedKeys({\n    data: data ?? {},\n    description: event.transaction,\n    op,\n    parent_span_id,\n    span_id: span_id ?? '',\n    start_timestamp: event.start_timestamp ?? 0,\n    status,\n    timestamp: event.timestamp,\n    trace_id: trace_id ?? '',\n    origin,\n    profile_id: data?.[SEMANTIC_ATTRIBUTE_PROFILE_ID] as string | undefined,\n    exclusive_time: data?.[SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME] as number | undefined,\n    measurements: event.measurements,\n    is_segment: true,\n  });\n}\n\n/**\n * Converts a span JSON object to a transaction event.\n */\nexport function convertSpanJsonToTransactionEvent(span: SpanJSON): TransactionEvent {\n  const event: TransactionEvent = {\n    type: 'transaction',\n    timestamp: span.timestamp,\n    start_timestamp: span.start_timestamp,\n    transaction: span.description,\n    contexts: {\n      trace: {\n        trace_id: span.trace_id,\n        span_id: span.span_id,\n        parent_span_id: span.parent_span_id,\n        op: span.op,\n        status: span.status,\n        origin: span.origin,\n        data: {\n          ...span.data,\n          ...(span.profile_id && { [SEMANTIC_ATTRIBUTE_PROFILE_ID]: span.profile_id }),\n          ...(span.exclusive_time && { [SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME]: span.exclusive_time }),\n        },\n      },\n    },\n    measurements: span.measurements,\n  };\n\n  return dropUndefinedKeys(event);\n}\n","import type {\n  BaseTransportOptions,\n  CheckIn,\n  ClientOptions,\n  DynamicSamplingContext,\n  Event,\n  EventHint,\n  MonitorConfig,\n  ParameterizedString,\n  SerializedCheckIn,\n  SeverityLevel,\n  TraceContext,\n} from './types-hoist';\n\nimport { createCheckInEnvelope } from './checkin';\nimport { Client } from './client';\nimport { getIsolationScope, getTraceContextFromScope } from './currentScopes';\nimport { DEBUG_BUILD } from './debug-build';\nimport type { Scope } from './scope';\nimport {\n  getDynamicSamplingContextFromScope,\n  getDynamicSamplingContextFromSpan,\n  registerSpanErrorInstrumentation,\n} from './tracing';\nimport { eventFromMessage, eventFromUnknownInput } from './utils-hoist/eventbuilder';\nimport { logger } from './utils-hoist/logger';\nimport { uuid4 } from './utils-hoist/misc';\nimport { resolvedSyncPromise } from './utils-hoist/syncpromise';\nimport { _getSpanForScope } from './utils/spanOnScope';\nimport { spanToTraceContext } from './utils/spanUtils';\n\nexport interface ServerRuntimeClientOptions extends ClientOptions<BaseTransportOptions> {\n  platform?: string;\n  runtime?: { name: string; version?: string };\n  serverName?: string;\n}\n\n/**\n * The Sentry Server Runtime Client SDK.\n */\nexport class ServerRuntimeClient<\n  O extends ClientOptions & ServerRuntimeClientOptions = ServerRuntimeClientOptions,\n> extends Client<O> {\n  /**\n   * Creates a new Edge SDK instance.\n   * @param options Configuration options for this SDK.\n   */\n  public constructor(options: O) {\n    // Server clients always support tracing\n    registerSpanErrorInstrumentation();\n\n    super(options);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromException(exception: unknown, hint?: EventHint): PromiseLike<Event> {\n    const event = eventFromUnknownInput(this, this._options.stackParser, exception, hint);\n    event.level = 'error';\n\n    return resolvedSyncPromise(event);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromMessage(\n    message: ParameterizedString,\n    level: SeverityLevel = 'info',\n    hint?: EventHint,\n  ): PromiseLike<Event> {\n    return resolvedSyncPromise(\n      eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace),\n    );\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureException(exception: unknown, hint?: EventHint, scope?: Scope): string {\n    setCurrentRequestSessionErroredOrCrashed(hint);\n    return super.captureException(exception, hint, scope);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureEvent(event: Event, hint?: EventHint, scope?: Scope): string {\n    // If the event is of type Exception, then a request session should be captured\n    const isException = !event.type && event.exception?.values && event.exception.values.length > 0;\n    if (isException) {\n      setCurrentRequestSessionErroredOrCrashed(hint);\n    }\n\n    return super.captureEvent(event, hint, scope);\n  }\n\n  /**\n   * Create a cron monitor check in and send it to Sentry.\n   *\n   * @param checkIn An object that describes a check in.\n   * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n   * to create a monitor automatically when sending a check in.\n   */\n  public captureCheckIn(checkIn: CheckIn, monitorConfig?: MonitorConfig, scope?: Scope): string {\n    const id = 'checkInId' in checkIn && checkIn.checkInId ? checkIn.checkInId : uuid4();\n    if (!this._isEnabled()) {\n      DEBUG_BUILD && logger.warn('SDK not enabled, will not capture check-in.');\n      return id;\n    }\n\n    const options = this.getOptions();\n    const { release, environment, tunnel } = options;\n\n    const serializedCheckIn: SerializedCheckIn = {\n      check_in_id: id,\n      monitor_slug: checkIn.monitorSlug,\n      status: checkIn.status,\n      release,\n      environment,\n    };\n\n    if ('duration' in checkIn) {\n      serializedCheckIn.duration = checkIn.duration;\n    }\n\n    if (monitorConfig) {\n      serializedCheckIn.monitor_config = {\n        schedule: monitorConfig.schedule,\n        checkin_margin: monitorConfig.checkinMargin,\n        max_runtime: monitorConfig.maxRuntime,\n        timezone: monitorConfig.timezone,\n        failure_issue_threshold: monitorConfig.failureIssueThreshold,\n        recovery_threshold: monitorConfig.recoveryThreshold,\n      };\n    }\n\n    const [dynamicSamplingContext, traceContext] = this._getTraceInfoFromScope(scope);\n    if (traceContext) {\n      serializedCheckIn.contexts = {\n        trace: traceContext,\n      };\n    }\n\n    const envelope = createCheckInEnvelope(\n      serializedCheckIn,\n      dynamicSamplingContext,\n      this.getSdkMetadata(),\n      tunnel,\n      this.getDsn(),\n    );\n\n    DEBUG_BUILD && logger.info('Sending checkin:', checkIn.monitorSlug, checkIn.status);\n\n    // sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this.sendEnvelope(envelope);\n\n    return id;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  protected _prepareEvent(\n    event: Event,\n    hint: EventHint,\n    currentScope: Scope,\n    isolationScope: Scope,\n  ): PromiseLike<Event | null> {\n    if (this._options.platform) {\n      event.platform = event.platform || this._options.platform;\n    }\n\n    if (this._options.runtime) {\n      event.contexts = {\n        ...event.contexts,\n        runtime: event.contexts?.runtime || this._options.runtime,\n      };\n    }\n\n    if (this._options.serverName) {\n      event.server_name = event.server_name || this._options.serverName;\n    }\n\n    return super._prepareEvent(event, hint, currentScope, isolationScope);\n  }\n\n  /** Extract trace information from scope */\n  protected _getTraceInfoFromScope(\n    scope: Scope | undefined,\n  ): [dynamicSamplingContext: Partial<DynamicSamplingContext> | undefined, traceContext: TraceContext | undefined] {\n    if (!scope) {\n      return [undefined, undefined];\n    }\n\n    const span = _getSpanForScope(scope);\n\n    const traceContext = span ? spanToTraceContext(span) : getTraceContextFromScope(scope);\n    const dynamicSamplingContext = span\n      ? getDynamicSamplingContextFromSpan(span)\n      : getDynamicSamplingContextFromScope(this, scope);\n    return [dynamicSamplingContext, traceContext];\n  }\n}\n\nfunction setCurrentRequestSessionErroredOrCrashed(eventHint?: EventHint): void {\n  const requestSession = getIsolationScope().getScopeData().sdkProcessingMetadata.requestSession;\n  if (requestSession) {\n    // We mutate instead of doing `setSdkProcessingMetadata` because the http integration stores away a particular\n    // isolationScope. If that isolation scope is forked, setting the processing metadata here will not mutate the\n    // original isolation scope that the http integration stored away.\n    const isHandledException = eventHint?.mechanism?.handled ?? true;\n    // A request session can go from \"errored\" -> \"crashed\" but not \"crashed\" -> \"errored\".\n    // Crashed (unhandled exception) is worse than errored (handled exception).\n    if (isHandledException && requestSession.status !== 'crashed') {\n      requestSession.status = 'errored';\n    } else if (!isHandledException) {\n      requestSession.status = 'crashed';\n    }\n  }\n}\n","import type { Client } from './client';\nimport { getCurrentScope } from './currentScopes';\nimport { DEBUG_BUILD } from './debug-build';\nimport type { ClientOptions } from './types-hoist';\nimport { consoleSandbox, logger } from './utils-hoist/logger';\n\n/** A class object that can instantiate Client objects. */\nexport type ClientClass<F extends Client, O extends ClientOptions> = new (options: O) => F;\n\n/**\n * Internal function to create a new SDK client instance. The client is\n * installed and then bound to the current scope.\n *\n * @param clientClass The client class to instantiate.\n * @param options Options to pass to the client.\n */\nexport function initAndBind<F extends Client, O extends ClientOptions>(\n  clientClass: ClientClass<F, O>,\n  options: O,\n): Client {\n  if (options.debug === true) {\n    if (DEBUG_BUILD) {\n      logger.enable();\n    } else {\n      // use `console.warn` rather than `logger.warn` since by non-debug bundles have all `logger.x` statements stripped\n      consoleSandbox(() => {\n        // eslint-disable-next-line no-console\n        console.warn('[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.');\n      });\n    }\n  }\n  const scope = getCurrentScope();\n  scope.update(options.initialScope);\n\n  const client = new clientClass(options);\n  setCurrentClient(client);\n  client.init();\n  return client;\n}\n\n/**\n * Make the given client the current client.\n */\nexport function setCurrentClient(client: Client): void {\n  getCurrentScope().setClient(client);\n}\n","import { DEBUG_BUILD } from '../debug-build';\nimport type {\n  Envelope,\n  EnvelopeItem,\n  EventDropReason,\n  InternalBaseTransportOptions,\n  Transport,\n  TransportMakeRequestResponse,\n  TransportRequestExecutor,\n} from '../types-hoist';\nimport {\n  createEnvelope,\n  envelopeItemTypeToDataCategory,\n  forEachEnvelopeItem,\n  serializeEnvelope,\n} from '../utils-hoist/envelope';\nimport { SentryError } from '../utils-hoist/error';\nimport { logger } from '../utils-hoist/logger';\nimport { type PromiseBuffer, makePromiseBuffer } from '../utils-hoist/promisebuffer';\nimport { type RateLimits, isRateLimited, updateRateLimits } from '../utils-hoist/ratelimit';\nimport { resolvedSyncPromise } from '../utils-hoist/syncpromise';\n\nexport const DEFAULT_TRANSPORT_BUFFER_SIZE = 64;\n\n/**\n * Creates an instance of a Sentry `Transport`\n *\n * @param options\n * @param makeRequest\n */\nexport function createTransport(\n  options: InternalBaseTransportOptions,\n  makeRequest: TransportRequestExecutor,\n  buffer: PromiseBuffer<TransportMakeRequestResponse> = makePromiseBuffer(\n    options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE,\n  ),\n): Transport {\n  let rateLimits: RateLimits = {};\n  const flush = (timeout?: number): PromiseLike<boolean> => buffer.drain(timeout);\n\n  function send(envelope: Envelope): PromiseLike<TransportMakeRequestResponse> {\n    const filteredEnvelopeItems: EnvelopeItem[] = [];\n\n    // Drop rate limited items from envelope\n    forEachEnvelopeItem(envelope, (item, type) => {\n      const dataCategory = envelopeItemTypeToDataCategory(type);\n      if (isRateLimited(rateLimits, dataCategory)) {\n        options.recordDroppedEvent('ratelimit_backoff', dataCategory);\n      } else {\n        filteredEnvelopeItems.push(item);\n      }\n    });\n\n    // Skip sending if envelope is empty after filtering out rate limited events\n    if (filteredEnvelopeItems.length === 0) {\n      return resolvedSyncPromise({});\n    }\n\n    const filteredEnvelope: Envelope = createEnvelope(envelope[0], filteredEnvelopeItems as (typeof envelope)[1]);\n\n    // Creates client report for each item in an envelope\n    const recordEnvelopeLoss = (reason: EventDropReason): void => {\n      forEachEnvelopeItem(filteredEnvelope, (item, type) => {\n        options.recordDroppedEvent(reason, envelopeItemTypeToDataCategory(type));\n      });\n    };\n\n    const requestTask = (): PromiseLike<TransportMakeRequestResponse> =>\n      makeRequest({ body: serializeEnvelope(filteredEnvelope) }).then(\n        response => {\n          // We don't want to throw on NOK responses, but we want to at least log them\n          if (response.statusCode !== undefined && (response.statusCode < 200 || response.statusCode >= 300)) {\n            DEBUG_BUILD && logger.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n          }\n\n          rateLimits = updateRateLimits(rateLimits, response);\n          return response;\n        },\n        error => {\n          recordEnvelopeLoss('network_error');\n          throw error;\n        },\n      );\n\n    return buffer.add(requestTask).then(\n      result => result,\n      error => {\n        if (error instanceof SentryError) {\n          DEBUG_BUILD && logger.error('Skipped sending event because buffer is full.');\n          recordEnvelopeLoss('queue_overflow');\n          return resolvedSyncPromise({});\n        } else {\n          throw error;\n        }\n      },\n    );\n  }\n\n  return {\n    send,\n    flush,\n  };\n}\n","import type { Envelope, InternalBaseTransportOptions, Transport, TransportMakeRequestResponse } from '../types-hoist';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { envelopeContainsItemType } from '../utils-hoist/envelope';\nimport { logger } from '../utils-hoist/logger';\nimport { parseRetryAfterHeader } from '../utils-hoist/ratelimit';\n\nexport const MIN_DELAY = 100; // 100 ms\nexport const START_DELAY = 5_000; // 5 seconds\nconst MAX_DELAY = 3.6e6; // 1 hour\n\nexport interface OfflineStore {\n  push(env: Envelope): Promise<void>;\n  unshift(env: Envelope): Promise<void>;\n  shift(): Promise<Envelope | undefined>;\n}\n\nexport type CreateOfflineStore = (options: OfflineTransportOptions) => OfflineStore;\n\nexport interface OfflineTransportOptions extends InternalBaseTransportOptions {\n  /**\n   * A function that creates the offline store instance.\n   */\n  createStore?: CreateOfflineStore;\n\n  /**\n   * Flush the offline store shortly after startup.\n   *\n   * Defaults: false\n   */\n  flushAtStartup?: boolean;\n\n  /**\n   * Called before an event is stored.\n   *\n   * Return false to drop the envelope rather than store it.\n   *\n   * @param envelope The envelope that failed to send.\n   * @param error The error that occurred.\n   * @param retryDelay The current retry delay in milliseconds.\n   */\n  shouldStore?: (envelope: Envelope, error: Error, retryDelay: number) => boolean | Promise<boolean>;\n}\n\ntype Timer = number | { unref?: () => void };\n\n/**\n * Wraps a transport and stores and retries events when they fail to send.\n *\n * @param createTransport The transport to wrap.\n */\nexport function makeOfflineTransport<TO>(\n  createTransport: (options: TO) => Transport,\n): (options: TO & OfflineTransportOptions) => Transport {\n  function log(...args: unknown[]): void {\n    DEBUG_BUILD && logger.info('[Offline]:', ...args);\n  }\n\n  return options => {\n    const transport = createTransport(options);\n\n    if (!options.createStore) {\n      throw new Error('No `createStore` function was provided');\n    }\n\n    const store = options.createStore(options);\n\n    let retryDelay = START_DELAY;\n    let flushTimer: Timer | undefined;\n\n    function shouldQueue(env: Envelope, error: Error, retryDelay: number): boolean | Promise<boolean> {\n      // We want to drop client reports because they can be generated when we retry sending events while offline.\n      if (envelopeContainsItemType(env, ['client_report'])) {\n        return false;\n      }\n\n      if (options.shouldStore) {\n        return options.shouldStore(env, error, retryDelay);\n      }\n\n      return true;\n    }\n\n    function flushIn(delay: number): void {\n      if (flushTimer) {\n        clearTimeout(flushTimer as ReturnType<typeof setTimeout>);\n      }\n\n      flushTimer = setTimeout(async () => {\n        flushTimer = undefined;\n\n        const found = await store.shift();\n        if (found) {\n          log('Attempting to send previously queued event');\n\n          // We should to update the sent_at timestamp to the current time.\n          found[0].sent_at = new Date().toISOString();\n\n          void send(found, true).catch(e => {\n            log('Failed to retry sending', e);\n          });\n        }\n      }, delay) as Timer;\n\n      // We need to unref the timer in node.js, otherwise the node process never exit.\n      if (typeof flushTimer !== 'number' && flushTimer.unref) {\n        flushTimer.unref();\n      }\n    }\n\n    function flushWithBackOff(): void {\n      if (flushTimer) {\n        return;\n      }\n\n      flushIn(retryDelay);\n\n      retryDelay = Math.min(retryDelay * 2, MAX_DELAY);\n    }\n\n    async function send(envelope: Envelope, isRetry: boolean = false): Promise<TransportMakeRequestResponse> {\n      // We queue all replay envelopes to avoid multiple replay envelopes being sent at the same time. If one fails, we\n      // need to retry them in order.\n      if (!isRetry && envelopeContainsItemType(envelope, ['replay_event', 'replay_recording'])) {\n        await store.push(envelope);\n        flushIn(MIN_DELAY);\n        return {};\n      }\n\n      try {\n        const result = await transport.send(envelope);\n\n        let delay = MIN_DELAY;\n\n        if (result) {\n          // If there's a retry-after header, use that as the next delay.\n          if (result.headers?.['retry-after']) {\n            delay = parseRetryAfterHeader(result.headers['retry-after']);\n          } else if (result.headers?.['x-sentry-rate-limits']) {\n            delay = 60_000; // 60 seconds\n          } // If we have a server error, return now so we don't flush the queue.\n          else if ((result.statusCode || 0) >= 400) {\n            return result;\n          }\n        }\n\n        flushIn(delay);\n        retryDelay = START_DELAY;\n        return result;\n      } catch (e) {\n        if (await shouldQueue(envelope, e as Error, retryDelay)) {\n          // If this envelope was a retry, we want to add it to the front of the queue so it's retried again first.\n          if (isRetry) {\n            await store.unshift(envelope);\n          } else {\n            await store.push(envelope);\n          }\n          flushWithBackOff();\n          log('Error sending. Event queued.', e as Error);\n          return {};\n        } else {\n          throw e;\n        }\n      }\n    }\n\n    if (options.flushAtStartup) {\n      flushWithBackOff();\n    }\n\n    return {\n      send,\n      flush: timeout => {\n        // If there's no timeout, we should attempt to flush the offline queue.\n        if (timeout === undefined) {\n          retryDelay = START_DELAY;\n          flushIn(MIN_DELAY);\n        }\n\n        return transport.flush(timeout);\n      },\n    };\n  };\n}\n","import type {\n  BaseTransportOptions,\n  Envelope,\n  EnvelopeItemType,\n  Event,\n  EventItem,\n  Transport,\n  TransportMakeRequestResponse,\n} from '../types-hoist';\n\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from '../api';\nimport { dsnFromString } from '../utils-hoist/dsn';\nimport { createEnvelope, forEachEnvelopeItem } from '../utils-hoist/envelope';\n\ninterface MatchParam {\n  /** The envelope to be sent */\n  envelope: Envelope;\n  /**\n   * A function that returns an event from the envelope if one exists. You can optionally pass an array of envelope item\n   * types to filter by - only envelopes matching the given types will be multiplexed.\n   * Allowed values are: 'event', 'transaction', 'profile', 'replay_event'\n   *\n   * @param types Defaults to ['event']\n   */\n  getEvent(types?: EnvelopeItemType[]): Event | undefined;\n}\n\ntype RouteTo = { dsn: string; release: string };\ntype Matcher = (param: MatchParam) => (string | RouteTo)[];\n\n/**\n * Gets an event from an envelope.\n *\n * This is only exported for use in the tests\n */\nexport function eventFromEnvelope(env: Envelope, types: EnvelopeItemType[]): Event | undefined {\n  let event: Event | undefined;\n\n  forEachEnvelopeItem(env, (item, type) => {\n    if (types.includes(type)) {\n      event = Array.isArray(item) ? (item as EventItem)[1] : undefined;\n    }\n    // bail out if we found an event\n    return !!event;\n  });\n\n  return event;\n}\n\n/**\n * Creates a transport that overrides the release on all events.\n */\nfunction makeOverrideReleaseTransport<TO extends BaseTransportOptions>(\n  createTransport: (options: TO) => Transport,\n  release: string,\n): (options: TO) => Transport {\n  return options => {\n    const transport = createTransport(options);\n\n    return {\n      ...transport,\n      send: async (envelope: Envelope): Promise<TransportMakeRequestResponse> => {\n        const event = eventFromEnvelope(envelope, ['event', 'transaction', 'profile', 'replay_event']);\n\n        if (event) {\n          event.release = release;\n        }\n        return transport.send(envelope);\n      },\n    };\n  };\n}\n\n/** Overrides the DSN in the envelope header  */\nfunction overrideDsn(envelope: Envelope, dsn: string): Envelope {\n  return createEnvelope(\n    dsn\n      ? {\n          ...envelope[0],\n          dsn,\n        }\n      : envelope[0],\n    envelope[1],\n  );\n}\n\n/**\n * Creates a transport that can send events to different DSNs depending on the envelope contents.\n */\nexport function makeMultiplexedTransport<TO extends BaseTransportOptions>(\n  createTransport: (options: TO) => Transport,\n  matcher: Matcher,\n): (options: TO) => Transport {\n  return options => {\n    const fallbackTransport = createTransport(options);\n    const otherTransports: Map<string, Transport> = new Map();\n\n    function getTransport(dsn: string, release: string | undefined): [string, Transport] | undefined {\n      // We create a transport for every unique dsn/release combination as there may be code from multiple releases in\n      // use at the same time\n      const key = release ? `${dsn}:${release}` : dsn;\n\n      let transport = otherTransports.get(key);\n\n      if (!transport) {\n        const validatedDsn = dsnFromString(dsn);\n        if (!validatedDsn) {\n          return undefined;\n        }\n        const url = getEnvelopeEndpointWithUrlEncodedAuth(validatedDsn, options.tunnel);\n\n        transport = release\n          ? makeOverrideReleaseTransport(createTransport, release)({ ...options, url })\n          : createTransport({ ...options, url });\n\n        otherTransports.set(key, transport);\n      }\n\n      return [dsn, transport];\n    }\n\n    async function send(envelope: Envelope): Promise<TransportMakeRequestResponse> {\n      function getEvent(types?: EnvelopeItemType[]): Event | undefined {\n        const eventTypes: EnvelopeItemType[] = types?.length ? types : ['event'];\n        return eventFromEnvelope(envelope, eventTypes);\n      }\n\n      const transports = matcher({ envelope, getEvent })\n        .map(result => {\n          if (typeof result === 'string') {\n            return getTransport(result, undefined);\n          } else {\n            return getTransport(result.dsn, result.release);\n          }\n        })\n        .filter((t): t is [string, Transport] => !!t);\n\n      // If we have no transports to send to, use the fallback transport\n      // Don't override the DSN in the header for the fallback transport. '' is falsy\n      const transportsWithFallback: [string, Transport][] = transports.length ? transports : [['', fallbackTransport]];\n\n      const results = (await Promise.all(\n        transportsWithFallback.map(([dsn, transport]) => transport.send(overrideDsn(envelope, dsn))),\n      )) as [TransportMakeRequestResponse, ...TransportMakeRequestResponse[]];\n\n      return results[0];\n    }\n\n    async function flush(timeout: number | undefined): Promise<boolean> {\n      const allTransports = [...otherTransports.values(), fallbackTransport];\n      const results = await Promise.all(allTransports.map(transport => transport.flush(timeout)));\n      return results.every(r => r);\n    }\n\n    return {\n      send,\n      flush,\n    };\n  };\n}\n","import type { Client } from '../client';\nimport type { DsnComponents } from '../types-hoist';\n\n/**\n * Checks whether given url points to Sentry server\n *\n * @param url url to verify\n */\nexport function isSentryRequestUrl(url: string, client: Client | undefined): boolean {\n  const dsn = client?.getDsn();\n  const tunnel = client?.getOptions().tunnel;\n  return checkDsn(url, dsn) || checkTunnel(url, tunnel);\n}\n\nfunction checkTunnel(url: string, tunnel: string | undefined): boolean {\n  if (!tunnel) {\n    return false;\n  }\n\n  return removeTrailingSlash(url) === removeTrailingSlash(tunnel);\n}\n\nfunction checkDsn(url: string, dsn: DsnComponents | undefined): boolean {\n  return dsn ? url.includes(dsn.host) : false;\n}\n\nfunction removeTrailingSlash(str: string): string {\n  return str[str.length - 1] === '/' ? str.slice(0, -1) : str;\n}\n","import type { ParameterizedString } from '../types-hoist';\n\n/**\n * Tagged template function which returns parameterized representation of the message\n * For example: parameterize`This is a log statement with ${x} and ${y} params`, would return:\n * \"__sentry_template_string__\": 'This is a log statement with %s and %s params',\n * \"__sentry_template_values__\": ['first', 'second']\n * @param strings An array of string values splitted between expressions\n * @param values Expressions extracted from template string\n * @returns String with template information in __sentry_template_string__ and __sentry_template_values__ properties\n */\nexport function parameterize(strings: TemplateStringsArray, ...values: string[]): ParameterizedString {\n  const formatted = new String(String.raw(strings, ...values)) as ParameterizedString;\n  formatted.__sentry_template_string__ = strings.join('\\x00').replace(/%/g, '%%').replace(/\\0/g, '%s');\n  formatted.__sentry_template_values__ = values;\n  return formatted;\n}\n","import type { Session, SessionAggregates, User } from '../types-hoist';\n\n// By default, we want to infer the IP address, unless this is explicitly set to `null`\n// We do this after all other processing is done\n// If `ip_address` is explicitly set to `null` or a value, we leave it as is\n\n/**\n * @internal\n */\nexport function addAutoIpAddressToUser(objWithMaybeUser: { user?: User | null }): void {\n  if (objWithMaybeUser.user?.ip_address === undefined) {\n    objWithMaybeUser.user = {\n      ...objWithMaybeUser.user,\n      ip_address: '{{auto}}',\n    };\n  }\n}\n\n/**\n * @internal\n */\nexport function addAutoIpAddressToSession(session: Session | SessionAggregates): void {\n  if ('aggregates' in session) {\n    if (session.attrs?.['ip_address'] === undefined) {\n      session.attrs = {\n        ...session.attrs,\n        ip_address: '{{auto}}',\n      };\n    }\n  } else {\n    if (session.ipAddress === undefined) {\n      session.ipAddress = '{{auto}}';\n    }\n  }\n}\n","import type { Options } from '../types-hoist';\nimport { SDK_VERSION } from '../utils-hoist/version';\n\n/**\n * A builder for the SDK metadata in the options for the SDK initialization.\n *\n * Note: This function is identical to `buildMetadata` in Remix and NextJS and SvelteKit.\n * We don't extract it for bundle size reasons.\n * @see https://github.com/getsentry/sentry-javascript/pull/7404\n * @see https://github.com/getsentry/sentry-javascript/pull/4196\n *\n * If you make changes to this function consider updating the others as well.\n *\n * @param options SDK options object that gets mutated\n * @param names list of package names\n */\nexport function applySdkMetadata(options: Options, name: string, names = [name], source = 'npm'): void {\n  const metadata = options._metadata || {};\n\n  if (!metadata.sdk) {\n    metadata.sdk = {\n      name: `sentry.javascript.${name}`,\n      packages: names.map(name => ({\n        name: `${source}:@sentry/${name}`,\n        version: SDK_VERSION,\n      })),\n      version: SDK_VERSION,\n    };\n  }\n\n  options._metadata = metadata;\n}\n","import { getTraceData } from './traceData';\n\n/**\n * Returns a string of meta tags that represent the current trace data.\n *\n * You can use this to propagate a trace from your server-side rendered Html to the browser.\n * This function returns up to two meta tags, `sentry-trace` and `baggage`, depending on the\n * current trace data state.\n *\n * @example\n * Usage example:\n *\n * ```js\n * function renderHtml() {\n *   return `\n *     <head>\n *       ${getTraceMetaTags()}\n *     </head>\n *   `;\n * }\n * ```\n *\n */\nexport function getTraceMetaTags(): string {\n  return Object.entries(getTraceData())\n    .map(([key, value]) => `<meta name=\"${key}\" content=\"${value}\"/>`)\n    .join('\\n');\n}\n","import type { PolymorphicRequest, RequestEventData } from '../types-hoist';\nimport type { WebFetchHeaders, WebFetchRequest } from '../types-hoist/webfetchapi';\nimport { dropUndefinedKeys } from '../utils-hoist/object';\n\n/**\n * Transforms a `Headers` object that implements the `Web Fetch API` (https://developer.mozilla.org/en-US/docs/Web/API/Headers) into a simple key-value dict.\n * The header keys will be lower case: e.g. A \"Content-Type\" header will be stored as \"content-type\".\n */\nexport function winterCGHeadersToDict(winterCGHeaders: WebFetchHeaders): Record<string, string> {\n  const headers: Record<string, string> = {};\n  try {\n    winterCGHeaders.forEach((value, key) => {\n      if (typeof value === 'string') {\n        // We check that value is a string even though it might be redundant to make sure prototype pollution is not possible.\n        headers[key] = value;\n      }\n    });\n  } catch {\n    // just return the empty headers\n  }\n\n  return headers;\n}\n\n/**\n * Convert common request headers to a simple dictionary.\n */\nexport function headersToDict(reqHeaders: Record<string, string | string[] | undefined>): Record<string, string> {\n  const headers: Record<string, string> = Object.create(null);\n\n  try {\n    Object.entries(reqHeaders).forEach(([key, value]) => {\n      if (typeof value === 'string') {\n        headers[key] = value;\n      }\n    });\n  } catch {\n    // just return the empty headers\n  }\n\n  return headers;\n}\n\n/**\n * Converts a `Request` object that implements the `Web Fetch API` (https://developer.mozilla.org/en-US/docs/Web/API/Headers) into the format that the `RequestData` integration understands.\n */\nexport function winterCGRequestToRequestData(req: WebFetchRequest): RequestEventData {\n  const headers = winterCGHeadersToDict(req.headers);\n\n  return {\n    method: req.method,\n    url: req.url,\n    query_string: extractQueryParamsFromUrl(req.url),\n    headers,\n    // TODO: Can we extract body data from the request?\n  };\n}\n\n/**\n * Convert a HTTP request object to RequestEventData to be passed as normalizedRequest.\n * Instead of allowing `PolymorphicRequest` to be passed,\n * we want to be more specific and generally require a http.IncomingMessage-like object.\n */\nexport function httpRequestToRequestData(request: {\n  method?: string;\n  url?: string;\n  headers?: {\n    [key: string]: string | string[] | undefined;\n  };\n  protocol?: string;\n  socket?: {\n    encrypted?: boolean;\n    remoteAddress?: string;\n  };\n}): RequestEventData {\n  const headers = request.headers || {};\n  const host = typeof headers.host === 'string' ? headers.host : undefined;\n  const protocol = request.protocol || (request.socket?.encrypted ? 'https' : 'http');\n  const url = request.url || '';\n\n  const absoluteUrl = getAbsoluteUrl({\n    url,\n    host,\n    protocol,\n  });\n\n  // This is non-standard, but may be sometimes set\n  // It may be overwritten later by our own body handling\n  const data = (request as PolymorphicRequest).body || undefined;\n\n  // This is non-standard, but may be set on e.g. Next.js or Express requests\n  const cookies = (request as PolymorphicRequest).cookies;\n\n  return dropUndefinedKeys({\n    url: absoluteUrl,\n    method: request.method,\n    query_string: extractQueryParamsFromUrl(url),\n    headers: headersToDict(headers),\n    cookies,\n    data,\n  });\n}\n\nfunction getAbsoluteUrl({\n  url,\n  protocol,\n  host,\n}: {\n  url?: string;\n  protocol: string;\n  host?: string;\n}): string | undefined {\n  if (url?.startsWith('http')) {\n    return url;\n  }\n\n  if (url && host) {\n    return `${protocol}://${host}${url}`;\n  }\n\n  return undefined;\n}\n\n/** Extract the query params from an URL. */\nexport function extractQueryParamsFromUrl(url: string): string | undefined {\n  // url is path and query string\n  if (!url) {\n    return;\n  }\n\n  try {\n    // The `URL` constructor can't handle internal URLs of the form `/some/path/here`, so stick a dummy protocol and\n    // hostname as the base. Since the point here is just to grab the query string, it doesn't matter what we use.\n    const queryParams = new URL(url, 'http://s.io').search.slice(1);\n    return queryParams.length ? queryParams : undefined;\n  } catch {\n    return undefined;\n  }\n}\n","import { getClient, getIsolationScope } from './currentScopes';\nimport type { Breadcrumb, BreadcrumbHint } from './types-hoist';\nimport { consoleSandbox } from './utils-hoist/logger';\nimport { dateTimestampInSeconds } from './utils-hoist/time';\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nconst DEFAULT_BREADCRUMBS = 100;\n\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n */\nexport function addBreadcrumb(breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void {\n  const client = getClient();\n  const isolationScope = getIsolationScope();\n\n  if (!client) return;\n\n  const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } = client.getOptions();\n\n  if (maxBreadcrumbs <= 0) return;\n\n  const timestamp = dateTimestampInSeconds();\n  const mergedBreadcrumb = { timestamp, ...breadcrumb };\n  const finalBreadcrumb = beforeBreadcrumb\n    ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) as Breadcrumb | null)\n    : mergedBreadcrumb;\n\n  if (finalBreadcrumb === null) return;\n\n  if (client.emit) {\n    client.emit('beforeAddBreadcrumb', finalBreadcrumb, hint);\n  }\n\n  isolationScope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n}\n","import type { Client } from '../client';\nimport { getClient } from '../currentScopes';\nimport { defineIntegration } from '../integration';\nimport type { IntegrationFn, WrappedFunction } from '../types-hoist';\nimport { getOriginalFunction } from '../utils-hoist/object';\n\nlet originalFunctionToString: () => void;\n\nconst INTEGRATION_NAME = 'FunctionToString';\n\nconst SETUP_CLIENTS = new WeakMap<Client, boolean>();\n\nconst _functionToStringIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      originalFunctionToString = Function.prototype.toString;\n\n      // intrinsics (like Function.prototype) might be immutable in some environments\n      // e.g. Node with --frozen-intrinsics, XS (an embedded JavaScript engine) or SES (a JavaScript proposal)\n      try {\n        Function.prototype.toString = function (this: WrappedFunction, ...args: unknown[]): string {\n          const originalFunction = getOriginalFunction(this);\n          const context =\n            SETUP_CLIENTS.has(getClient() as Client) && originalFunction !== undefined ? originalFunction : this;\n          return originalFunctionToString.apply(context, args);\n        };\n      } catch {\n        // ignore errors here, just don't patch this\n      }\n    },\n    setup(client) {\n      SETUP_CLIENTS.set(client, true);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Patch toString calls to return proper name for wrapped functions.\n *\n * ```js\n * Sentry.init({\n *   integrations: [\n *     functionToStringIntegration(),\n *   ],\n * });\n * ```\n */\nexport const functionToStringIntegration = defineIntegration(_functionToStringIntegration);\n","import type { Event, IntegrationFn, StackFrame } from '../types-hoist';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { defineIntegration } from '../integration';\nimport { logger } from '../utils-hoist/logger';\nimport { getEventDescription } from '../utils-hoist/misc';\nimport { stringMatchesSomePattern } from '../utils-hoist/string';\nimport { getPossibleEventMessages } from '../utils/eventUtils';\n\n// \"Script error.\" is hard coded into browsers for errors that it can't read.\n// this is the result of a script being pulled in from an external domain and CORS.\nconst DEFAULT_IGNORE_ERRORS = [\n  /^Script error\\.?$/,\n  /^Javascript error: Script error\\.? on line 0$/,\n  /^ResizeObserver loop completed with undelivered notifications.$/, // The browser logs this when a ResizeObserver handler takes a bit longer. Usually this is not an actual issue though. It indicates slowness.\n  /^Cannot redefine property: googletag$/, // This is thrown when google tag manager is used in combination with an ad blocker\n  /^Can't find variable: gmo$/, // Error from Google Search App https://issuetracker.google.com/issues/396043331\n  /^undefined is not an object \\(evaluating 'a\\.[A-Z]'\\)$/, // Random error that happens but not actionable or noticeable to end-users.\n  'can\\'t redefine non-configurable property \"solana\"', // Probably a browser extension or custom browser (Brave) throwing this error\n  \"vv().getRestrictions is not a function. (In 'vv().getRestrictions(1,a)', 'vv().getRestrictions' is undefined)\", // Error thrown by GTM, seemingly not affecting end-users\n  \"Can't find variable: _AutofillCallbackHandler\", // Unactionable error in instagram webview https://developers.facebook.com/community/threads/320013549791141/\n  /^Non-Error promise rejection captured with value: Object Not Found Matching Id:\\d+, MethodName:simulateEvent, ParamCount:\\d+$/, // unactionable error from CEFSharp, a .NET library that embeds chromium in .NET apps\n  /^Java exception was raised during method invocation$/, // error from Facebook Mobile browser (https://github.com/getsentry/sentry-javascript/issues/15065)\n];\n\n/** Options for the EventFilters integration */\nexport interface EventFiltersOptions {\n  allowUrls: Array<string | RegExp>;\n  denyUrls: Array<string | RegExp>;\n  ignoreErrors: Array<string | RegExp>;\n  ignoreTransactions: Array<string | RegExp>;\n  ignoreInternal: boolean;\n  disableErrorDefaults: boolean;\n}\n\nconst INTEGRATION_NAME = 'EventFilters';\n\nconst _eventFiltersIntegration = ((options: Partial<EventFiltersOptions> = {}) => {\n  return {\n    name: INTEGRATION_NAME,\n    processEvent(event, _hint, client) {\n      const clientOptions = client.getOptions();\n      const mergedOptions = _mergeOptions(options, clientOptions);\n      return _shouldDropEvent(event, mergedOptions) ? null : event;\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * An integration that filters out events (errors and transactions) based on:\n *\n * - (Errors) A curated list of known low-value or irrelevant errors (see {@link DEFAULT_IGNORE_ERRORS})\n * - (Errors) A list of error messages or urls/filenames passed in via\n *   - Top level Sentry.init options (`ignoreErrors`, `denyUrls`, `allowUrls`)\n *   - The same options passed to the integration directly via @param options\n * - (Transactions/Spans) A list of root span (transaction) names passed in via\n *   - Top level Sentry.init option (`ignoreTransactions`)\n *   - The same option passed to the integration directly via @param options\n *\n * Events filtered by this integration will not be sent to Sentry.\n */\nexport const eventFiltersIntegration = defineIntegration(_eventFiltersIntegration);\n\n/**\n * An integration that filters out events (errors and transactions) based on:\n *\n * - (Errors) A curated list of known low-value or irrelevant errors (see {@link DEFAULT_IGNORE_ERRORS})\n * - (Errors) A list of error messages or urls/filenames passed in via\n *   - Top level Sentry.init options (`ignoreErrors`, `denyUrls`, `allowUrls`)\n *   - The same options passed to the integration directly via @param options\n * - (Transactions/Spans) A list of root span (transaction) names passed in via\n *   - Top level Sentry.init option (`ignoreTransactions`)\n *   - The same option passed to the integration directly via @param options\n *\n * Events filtered by this integration will not be sent to Sentry.\n *\n * @deprecated this integration was renamed and will be removed in a future major version.\n * Use `eventFiltersIntegration` instead.\n */\nexport const inboundFiltersIntegration = defineIntegration(((options: Partial<EventFiltersOptions> = {}) => {\n  return {\n    ...eventFiltersIntegration(options),\n    name: 'InboundFilters',\n  };\n}) satisfies IntegrationFn);\n\nfunction _mergeOptions(\n  internalOptions: Partial<EventFiltersOptions> = {},\n  clientOptions: Partial<EventFiltersOptions> = {},\n): Partial<EventFiltersOptions> {\n  return {\n    allowUrls: [...(internalOptions.allowUrls || []), ...(clientOptions.allowUrls || [])],\n    denyUrls: [...(internalOptions.denyUrls || []), ...(clientOptions.denyUrls || [])],\n    ignoreErrors: [\n      ...(internalOptions.ignoreErrors || []),\n      ...(clientOptions.ignoreErrors || []),\n      ...(internalOptions.disableErrorDefaults ? [] : DEFAULT_IGNORE_ERRORS),\n    ],\n    ignoreTransactions: [...(internalOptions.ignoreTransactions || []), ...(clientOptions.ignoreTransactions || [])],\n    ignoreInternal: internalOptions.ignoreInternal !== undefined ? internalOptions.ignoreInternal : true,\n  };\n}\n\nfunction _shouldDropEvent(event: Event, options: Partial<EventFiltersOptions>): boolean {\n  if (options.ignoreInternal && _isSentryError(event)) {\n    DEBUG_BUILD &&\n      logger.warn(`Event dropped due to being internal Sentry Error.\\nEvent: ${getEventDescription(event)}`);\n    return true;\n  }\n  if (_isIgnoredError(event, options.ignoreErrors)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to being matched by \\`ignoreErrors\\` option.\\nEvent: ${getEventDescription(event)}`,\n      );\n    return true;\n  }\n  if (_isUselessError(event)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to not having an error message, error type or stacktrace.\\nEvent: ${getEventDescription(\n          event,\n        )}`,\n      );\n    return true;\n  }\n  if (_isIgnoredTransaction(event, options.ignoreTransactions)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to being matched by \\`ignoreTransactions\\` option.\\nEvent: ${getEventDescription(event)}`,\n      );\n    return true;\n  }\n  if (_isDeniedUrl(event, options.denyUrls)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to being matched by \\`denyUrls\\` option.\\nEvent: ${getEventDescription(\n          event,\n        )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n      );\n    return true;\n  }\n  if (!_isAllowedUrl(event, options.allowUrls)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to not being matched by \\`allowUrls\\` option.\\nEvent: ${getEventDescription(\n          event,\n        )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n      );\n    return true;\n  }\n  return false;\n}\n\nfunction _isIgnoredError(event: Event, ignoreErrors?: Array<string | RegExp>): boolean {\n  // If event.type, this is not an error\n  if (event.type || !ignoreErrors || !ignoreErrors.length) {\n    return false;\n  }\n\n  return getPossibleEventMessages(event).some(message => stringMatchesSomePattern(message, ignoreErrors));\n}\n\nfunction _isIgnoredTransaction(event: Event, ignoreTransactions?: Array<string | RegExp>): boolean {\n  if (event.type !== 'transaction' || !ignoreTransactions || !ignoreTransactions.length) {\n    return false;\n  }\n\n  const name = event.transaction;\n  return name ? stringMatchesSomePattern(name, ignoreTransactions) : false;\n}\n\nfunction _isDeniedUrl(event: Event, denyUrls?: Array<string | RegExp>): boolean {\n  if (!denyUrls?.length) {\n    return false;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? false : stringMatchesSomePattern(url, denyUrls);\n}\n\nfunction _isAllowedUrl(event: Event, allowUrls?: Array<string | RegExp>): boolean {\n  if (!allowUrls?.length) {\n    return true;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? true : stringMatchesSomePattern(url, allowUrls);\n}\n\nfunction _isSentryError(event: Event): boolean {\n  try {\n    // @ts-expect-error can't be a sentry error if undefined\n    return event.exception.values[0].type === 'SentryError';\n  } catch (e) {\n    // ignore\n  }\n  return false;\n}\n\nfunction _getLastValidUrl(frames: StackFrame[] = []): string | null {\n  for (let i = frames.length - 1; i >= 0; i--) {\n    const frame = frames[i];\n\n    if (frame && frame.filename !== '<anonymous>' && frame.filename !== '[native code]') {\n      return frame.filename || null;\n    }\n  }\n\n  return null;\n}\n\nfunction _getEventFilterUrl(event: Event): string | null {\n  try {\n    // If there are linked exceptions or exception aggregates we only want to match against the top frame of the \"root\" (the main exception)\n    // The root always comes last in linked exceptions\n    const rootException = [...(event.exception?.values ?? [])]\n      .reverse()\n      .find(value => value.mechanism?.parent_id === undefined && value.stacktrace?.frames?.length);\n    const frames = rootException?.stacktrace?.frames;\n    return frames ? _getLastValidUrl(frames) : null;\n  } catch (oO) {\n    DEBUG_BUILD && logger.error(`Cannot extract url for event ${getEventDescription(event)}`);\n    return null;\n  }\n}\n\nfunction _isUselessError(event: Event): boolean {\n  if (event.type) {\n    // event is not an error\n    return false;\n  }\n\n  // We only want to consider events for dropping that actually have recorded exception values.\n  if (!event.exception?.values?.length) {\n    return false;\n  }\n\n  return (\n    // No top-level message\n    !event.message &&\n    // There are no exception values that have a stacktrace, a non-generic-Error type or value\n    !event.exception.values.some(value => value.stacktrace || (value.type && value.type !== 'Error') || value.value)\n  );\n}\n","import { defineIntegration } from '../integration';\nimport type { EventItem } from '../types-hoist';\n\nimport { addMetadataToStackFrames, stripMetadataFromStackFrames } from '../metadata';\nimport { forEachEnvelopeItem } from '../utils-hoist/envelope';\n\n/**\n * Adds module metadata to stack frames.\n *\n * Metadata can be injected by the Sentry bundler plugins using the `moduleMetadata` config option.\n *\n * When this integration is added, the metadata passed to the bundler plugin is added to the stack frames of all events\n * under the `module_metadata` property. This can be used to help in tagging or routing of events from different teams\n * our sources\n */\nexport const moduleMetadataIntegration = defineIntegration(() => {\n  return {\n    name: 'ModuleMetadata',\n    setup(client) {\n      // We need to strip metadata from stack frames before sending them to Sentry since these are client side only.\n      client.on('beforeEnvelope', envelope => {\n        forEachEnvelopeItem(envelope, (item, type) => {\n          if (type === 'event') {\n            const event = Array.isArray(item) ? (item as EventItem)[1] : undefined;\n\n            if (event) {\n              stripMetadataFromStackFrames(event);\n              item[1] = event;\n            }\n          }\n        });\n      });\n\n      client.on('applyFrameMetadata', event => {\n        // Only apply stack frame metadata to error events\n        if (event.type) {\n          return;\n        }\n\n        const stackParser = client.getOptions().stackParser;\n        addMetadataToStackFrames(stackParser, event);\n      });\n    },\n  };\n});\n","import { defineIntegration } from '../integration';\nimport type { Event, IntegrationFn, RequestEventData } from '../types-hoist';\nimport { parseCookie } from '../utils/cookie';\nimport { getClientIPAddress, ipHeaderNames } from '../vendor/getIpAddress';\n\ninterface RequestDataIncludeOptions {\n  cookies?: boolean;\n  data?: boolean;\n  headers?: boolean;\n  ip?: boolean;\n  query_string?: boolean;\n  url?: boolean;\n}\n\ntype RequestDataIntegrationOptions = {\n  /**\n   * Controls what data is pulled from the request and added to the event.\n   */\n  include?: RequestDataIncludeOptions;\n};\n\nconst DEFAULT_INCLUDE: RequestDataIncludeOptions = {\n  cookies: true,\n  data: true,\n  headers: true,\n  query_string: true,\n  url: true,\n};\n\nconst INTEGRATION_NAME = 'RequestData';\n\nconst _requestDataIntegration = ((options: RequestDataIntegrationOptions = {}) => {\n  const include = {\n    ...DEFAULT_INCLUDE,\n    ...options.include,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    processEvent(event, _hint, client) {\n      const { sdkProcessingMetadata = {} } = event;\n      const { normalizedRequest, ipAddress } = sdkProcessingMetadata;\n\n      const includeWithDefaultPiiApplied: RequestDataIncludeOptions = {\n        ...include,\n        ip: include.ip ?? client.getOptions().sendDefaultPii,\n      };\n\n      if (normalizedRequest) {\n        addNormalizedRequestDataToEvent(event, normalizedRequest, { ipAddress }, includeWithDefaultPiiApplied);\n      }\n\n      return event;\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Add data about a request to an event. Primarily for use in Node-based SDKs, but included in `@sentry/core`\n * so it can be used in cross-platform SDKs like `@sentry/nextjs`.\n */\nexport const requestDataIntegration = defineIntegration(_requestDataIntegration);\n\n/**\n * Add already normalized request data to an event.\n * This mutates the passed in event.\n */\nfunction addNormalizedRequestDataToEvent(\n  event: Event,\n  req: RequestEventData,\n  // Data that should not go into `event.request` but is somehow related to requests\n  additionalData: { ipAddress?: string },\n  include: RequestDataIncludeOptions,\n): void {\n  event.request = {\n    ...event.request,\n    ...extractNormalizedRequestData(req, include),\n  };\n\n  if (include.ip) {\n    const ip = (req.headers && getClientIPAddress(req.headers)) || additionalData.ipAddress;\n    if (ip) {\n      event.user = {\n        ...event.user,\n        ip_address: ip,\n      };\n    }\n  }\n}\n\nfunction extractNormalizedRequestData(\n  normalizedRequest: RequestEventData,\n  include: RequestDataIncludeOptions,\n): RequestEventData {\n  const requestData: RequestEventData = {};\n  const headers = { ...normalizedRequest.headers };\n\n  if (include.headers) {\n    requestData.headers = headers;\n\n    // Remove the Cookie header in case cookie data should not be included in the event\n    if (!include.cookies) {\n      delete (headers as { cookie?: string }).cookie;\n    }\n\n    // Remove IP headers in case IP data should not be included in the event\n    if (!include.ip) {\n      ipHeaderNames.forEach(ipHeaderName => {\n        // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n        delete (headers as Record<string, unknown>)[ipHeaderName];\n      });\n    }\n  }\n\n  requestData.method = normalizedRequest.method;\n\n  if (include.url) {\n    requestData.url = normalizedRequest.url;\n  }\n\n  if (include.cookies) {\n    const cookies = normalizedRequest.cookies || (headers?.cookie ? parseCookie(headers.cookie) : undefined);\n    requestData.cookies = cookies || {};\n  }\n\n  if (include.query_string) {\n    requestData.query_string = normalizedRequest.query_string;\n  }\n\n  if (include.data) {\n    requestData.data = normalizedRequest.data;\n  }\n\n  return requestData;\n}\n","/**\n * This code was originally copied from the 'cookie` module at v0.5.0 and was simplified for our use case.\n * https://github.com/jshttp/cookie/blob/a0c84147aab6266bdb3996cf4062e93907c0b0fc/index.js\n * It had the following license:\n *\n * (The MIT License)\n *\n * Copyright (c) 2012-2014 Roman Shtylman <shtylman@gmail.com>\n * Copyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * 'Software'), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * Parses a cookie string\n */\nexport function parseCookie(str: string): Record<string, string> {\n  const obj: Record<string, string> = {};\n  let index = 0;\n\n  while (index < str.length) {\n    const eqIdx = str.indexOf('=', index);\n\n    // no more cookie pairs\n    if (eqIdx === -1) {\n      break;\n    }\n\n    let endIdx = str.indexOf(';', index);\n\n    if (endIdx === -1) {\n      endIdx = str.length;\n    } else if (endIdx < eqIdx) {\n      // backtrack on prior semicolon\n      index = str.lastIndexOf(';', eqIdx - 1) + 1;\n      continue;\n    }\n\n    const key = str.slice(index, eqIdx).trim();\n\n    // only assign once\n    if (undefined === obj[key]) {\n      let val = str.slice(eqIdx + 1, endIdx).trim();\n\n      // quoted values\n      if (val.charCodeAt(0) === 0x22) {\n        val = val.slice(1, -1);\n      }\n\n      try {\n        obj[key] = val.indexOf('%') !== -1 ? decodeURIComponent(val) : val;\n      } catch (e) {\n        obj[key] = val;\n      }\n    }\n\n    index = endIdx + 1;\n  }\n\n  return obj;\n}\n","// Vendored / modified from @sergiodxa/remix-utils\n\n// https://github.com/sergiodxa/remix-utils/blob/02af80e12829a53696bfa8f3c2363975cf59f55e/src/server/get-client-ip-address.ts\n// MIT License\n\n// Copyright (c) 2021 Sergio Xalambrí\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\n// The headers to check, in priority order\nexport const ipHeaderNames = [\n  'X-Client-IP',\n  'X-Forwarded-For',\n  'Fly-Client-IP',\n  'CF-Connecting-IP',\n  'Fastly-Client-Ip',\n  'True-Client-Ip',\n  'X-Real-IP',\n  'X-Cluster-Client-IP',\n  'X-Forwarded',\n  'Forwarded-For',\n  'Forwarded',\n  'X-Vercel-Forwarded-For',\n];\n\n/**\n * Get the IP address of the client sending a request.\n *\n * It receives a Request headers object and use it to get the\n * IP address from one of the following headers in order.\n *\n * If the IP address is valid, it will be returned. Otherwise, null will be\n * returned.\n *\n * If the header values contains more than one IP address, the first valid one\n * will be returned.\n */\nexport function getClientIPAddress(headers: { [key: string]: string | string[] | undefined }): string | null {\n  // This will end up being Array<string | string[] | undefined | null> because of the various possible values a header\n  // can take\n  const headerValues = ipHeaderNames.map((headerName: string) => {\n    const rawValue = headers[headerName];\n    const value = Array.isArray(rawValue) ? rawValue.join(';') : rawValue;\n\n    if (headerName === 'Forwarded') {\n      return parseForwardedHeader(value);\n    }\n\n    return value?.split(',').map((v: string) => v.trim());\n  });\n\n  // Flatten the array and filter out any falsy entries\n  const flattenedHeaderValues = headerValues.reduce((acc: string[], val) => {\n    if (!val) {\n      return acc;\n    }\n\n    return acc.concat(val);\n  }, []);\n\n  // Find the first value which is a valid IP address, if any\n  const ipAddress = flattenedHeaderValues.find(ip => ip !== null && isIP(ip));\n\n  return ipAddress || null;\n}\n\nfunction parseForwardedHeader(value: string | null | undefined): string | null {\n  if (!value) {\n    return null;\n  }\n\n  for (const part of value.split(';')) {\n    if (part.startsWith('for=')) {\n      return part.slice(4);\n    }\n  }\n\n  return null;\n}\n\n//\n/**\n * Custom method instead of importing this from `net` package, as this only exists in node\n * Accepts:\n * 127.0.0.1\n * 192.168.1.1\n * 192.168.1.255\n * 255.255.255.255\n * 10.1.1.1\n * 0.0.0.0\n * 2b01:cb19:8350:ed00:d0dd:fa5b:de31:8be5\n *\n * Rejects:\n * 1.1.1.01\n * 30.168.1.255.1\n * 127.1\n * 192.168.1.256\n * -1.2.3.4\n * 1.1.1.1.\n * 3...3\n * 192.168.1.099\n */\nfunction isIP(str: string): boolean {\n  const regex =\n    /(?:^(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}$)|(?:^(?:(?:[a-fA-F\\d]{1,4}:){7}(?:[a-fA-F\\d]{1,4}|:)|(?:[a-fA-F\\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|:[a-fA-F\\d]{1,4}|:)|(?:[a-fA-F\\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,2}|:)|(?:[a-fA-F\\d]{1,4}:){4}(?:(?::[a-fA-F\\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,3}|:)|(?:[a-fA-F\\d]{1,4}:){3}(?:(?::[a-fA-F\\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,4}|:)|(?:[a-fA-F\\d]{1,4}:){2}(?:(?::[a-fA-F\\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,5}|:)|(?:[a-fA-F\\d]{1,4}:){1}(?:(?::[a-fA-F\\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,6}|:)|(?::(?:(?::[a-fA-F\\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,7}|:)))(?:%[0-9a-zA-Z]{1,})?$)/;\n  return regex.test(str);\n}\n","import { getClient, withScope } from '../currentScopes';\nimport { captureException, captureMessage } from '../exports';\nimport { defineIntegration } from '../integration';\nimport type { CaptureContext } from '../scope';\nimport type { IntegrationFn } from '../types-hoist';\nimport { addConsoleInstrumentationHandler } from '../utils-hoist/instrument/console';\nimport { CONSOLE_LEVELS } from '../utils-hoist/logger';\nimport { addExceptionMechanism } from '../utils-hoist/misc';\nimport { severityLevelFromString } from '../utils-hoist/severity';\nimport { safeJoin } from '../utils-hoist/string';\nimport { GLOBAL_OBJ } from '../utils-hoist/worldwide';\n\ninterface CaptureConsoleOptions {\n  levels?: string[];\n\n  /**\n   * By default, Sentry will mark captured console messages as handled.\n   * Set this to `false` if you want to mark them as unhandled instead.\n   *\n   * @default true\n   */\n  handled?: boolean;\n}\n\nconst INTEGRATION_NAME = 'CaptureConsole';\n\nconst _captureConsoleIntegration = ((options: CaptureConsoleOptions = {}) => {\n  const levels = options.levels || CONSOLE_LEVELS;\n  const handled = options.handled ?? true;\n\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      if (!('console' in GLOBAL_OBJ)) {\n        return;\n      }\n\n      addConsoleInstrumentationHandler(({ args, level }) => {\n        if (getClient() !== client || !levels.includes(level)) {\n          return;\n        }\n\n        consoleHandler(args, level, handled);\n      });\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Send Console API calls as Sentry Events.\n */\nexport const captureConsoleIntegration = defineIntegration(_captureConsoleIntegration);\n\nfunction consoleHandler(args: unknown[], level: string, handled: boolean): void {\n  const captureContext: CaptureContext = {\n    level: severityLevelFromString(level),\n    extra: {\n      arguments: args,\n    },\n  };\n\n  withScope(scope => {\n    scope.addEventProcessor(event => {\n      event.logger = 'console';\n\n      addExceptionMechanism(event, {\n        handled,\n        type: 'console',\n      });\n\n      return event;\n    });\n\n    if (level === 'assert') {\n      if (!args[0]) {\n        const message = `Assertion failed: ${safeJoin(args.slice(1), ' ') || 'console.assert'}`;\n        scope.setExtra('arguments', args.slice(1));\n        captureMessage(message, captureContext);\n      }\n      return;\n    }\n\n    const error = args.find(arg => arg instanceof Error);\n    if (error) {\n      captureException(error, captureContext);\n      return;\n    }\n\n    const message = safeJoin(args, ' ');\n    captureMessage(message, captureContext);\n  });\n}\n","import { defineIntegration } from '../integration';\nimport type { Event, Exception, IntegrationFn, StackFrame } from '../types-hoist';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { logger } from '../utils-hoist/logger';\nimport { getFramesFromEvent } from '../utils-hoist/stacktrace';\n\nconst INTEGRATION_NAME = 'Dedupe';\n\nconst _dedupeIntegration = (() => {\n  let previousEvent: Event | undefined;\n\n  return {\n    name: INTEGRATION_NAME,\n    processEvent(currentEvent) {\n      // We want to ignore any non-error type events, e.g. transactions or replays\n      // These should never be deduped, and also not be compared against as _previousEvent.\n      if (currentEvent.type) {\n        return currentEvent;\n      }\n\n      // Juuust in case something goes wrong\n      try {\n        if (_shouldDropEvent(currentEvent, previousEvent)) {\n          DEBUG_BUILD && logger.warn('Event dropped due to being a duplicate of previously captured event.');\n          return null;\n        }\n      } catch (_oO) {} // eslint-disable-line no-empty\n\n      return (previousEvent = currentEvent);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Deduplication filter.\n */\nexport const dedupeIntegration = defineIntegration(_dedupeIntegration);\n\n/** only exported for tests. */\nexport function _shouldDropEvent(currentEvent: Event, previousEvent?: Event): boolean {\n  if (!previousEvent) {\n    return false;\n  }\n\n  if (_isSameMessageEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n\n  if (_isSameExceptionEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction _isSameMessageEvent(currentEvent: Event, previousEvent: Event): boolean {\n  const currentMessage = currentEvent.message;\n  const previousMessage = previousEvent.message;\n\n  // If neither event has a message property, they were both exceptions, so bail out\n  if (!currentMessage && !previousMessage) {\n    return false;\n  }\n\n  // If only one event has a stacktrace, but not the other one, they are not the same\n  if ((currentMessage && !previousMessage) || (!currentMessage && previousMessage)) {\n    return false;\n  }\n\n  if (currentMessage !== previousMessage) {\n    return false;\n  }\n\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction _isSameExceptionEvent(currentEvent: Event, previousEvent: Event): boolean {\n  const previousException = _getExceptionFromEvent(previousEvent);\n  const currentException = _getExceptionFromEvent(currentEvent);\n\n  if (!previousException || !currentException) {\n    return false;\n  }\n\n  if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n    return false;\n  }\n\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction _isSameStacktrace(currentEvent: Event, previousEvent: Event): boolean {\n  let currentFrames = getFramesFromEvent(currentEvent);\n  let previousFrames = getFramesFromEvent(previousEvent);\n\n  // If neither event has a stacktrace, they are assumed to be the same\n  if (!currentFrames && !previousFrames) {\n    return true;\n  }\n\n  // If only one event has a stacktrace, but not the other one, they are not the same\n  if ((currentFrames && !previousFrames) || (!currentFrames && previousFrames)) {\n    return false;\n  }\n\n  currentFrames = currentFrames as StackFrame[];\n  previousFrames = previousFrames as StackFrame[];\n\n  // If number of frames differ, they are not the same\n  if (previousFrames.length !== currentFrames.length) {\n    return false;\n  }\n\n  // Otherwise, compare the two\n  for (let i = 0; i < previousFrames.length; i++) {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const frameA = previousFrames[i]!;\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const frameB = currentFrames[i]!;\n\n    if (\n      frameA.filename !== frameB.filename ||\n      frameA.lineno !== frameB.lineno ||\n      frameA.colno !== frameB.colno ||\n      frameA.function !== frameB.function\n    ) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction _isSameFingerprint(currentEvent: Event, previousEvent: Event): boolean {\n  let currentFingerprint = currentEvent.fingerprint;\n  let previousFingerprint = previousEvent.fingerprint;\n\n  // If neither event has a fingerprint, they are assumed to be the same\n  if (!currentFingerprint && !previousFingerprint) {\n    return true;\n  }\n\n  // If only one event has a fingerprint, but not the other one, they are not the same\n  if ((currentFingerprint && !previousFingerprint) || (!currentFingerprint && previousFingerprint)) {\n    return false;\n  }\n\n  currentFingerprint = currentFingerprint as string[];\n  previousFingerprint = previousFingerprint as string[];\n\n  // Otherwise, compare the two\n  try {\n    return !!(currentFingerprint.join('') === previousFingerprint.join(''));\n  } catch (_oO) {\n    return false;\n  }\n}\n\nfunction _getExceptionFromEvent(event: Event): Exception | undefined {\n  return event.exception?.values && event.exception.values[0];\n}\n","import { defineIntegration } from '../integration';\nimport type { Contexts, Event, EventHint, ExtendedError, IntegrationFn } from '../types-hoist';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { isError, isPlainObject } from '../utils-hoist/is';\nimport { logger } from '../utils-hoist/logger';\nimport { normalize } from '../utils-hoist/normalize';\nimport { addNonEnumerableProperty } from '../utils-hoist/object';\nimport { truncate } from '../utils-hoist/string';\n\nconst INTEGRATION_NAME = 'ExtraErrorData';\n\ninterface ExtraErrorDataOptions {\n  /**\n   * The object depth up to which to capture data on error objects.\n   */\n  depth: number;\n\n  /**\n   * Whether to capture error causes. Defaults to true.\n   *\n   * More information: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause\n   */\n  captureErrorCause: boolean;\n}\n\n/**\n * Extract additional data for from original exceptions.\n */\nconst _extraErrorDataIntegration = ((options: Partial<ExtraErrorDataOptions> = {}) => {\n  const { depth = 3, captureErrorCause = true } = options;\n  return {\n    name: INTEGRATION_NAME,\n    processEvent(event, hint, client) {\n      const { maxValueLength = 250 } = client.getOptions();\n      return _enhanceEventWithErrorData(event, hint, depth, captureErrorCause, maxValueLength);\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const extraErrorDataIntegration = defineIntegration(_extraErrorDataIntegration);\n\nfunction _enhanceEventWithErrorData(\n  event: Event,\n  hint: EventHint = {},\n  depth: number,\n  captureErrorCause: boolean,\n  maxValueLength: number,\n): Event {\n  if (!hint.originalException || !isError(hint.originalException)) {\n    return event;\n  }\n  const exceptionName = (hint.originalException as ExtendedError).name || hint.originalException.constructor.name;\n\n  const errorData = _extractErrorData(hint.originalException as ExtendedError, captureErrorCause, maxValueLength);\n\n  if (errorData) {\n    const contexts: Contexts = {\n      ...event.contexts,\n    };\n\n    const normalizedErrorData = normalize(errorData, depth);\n\n    if (isPlainObject(normalizedErrorData)) {\n      // We mark the error data as \"already normalized\" here, because we don't want other normalization procedures to\n      // potentially truncate the data we just already normalized, with a certain depth setting.\n      addNonEnumerableProperty(normalizedErrorData, '__sentry_skip_normalization__', true);\n      contexts[exceptionName] = normalizedErrorData;\n    }\n\n    return {\n      ...event,\n      contexts,\n    };\n  }\n\n  return event;\n}\n\n/**\n * Extract extra information from the Error object\n */\nfunction _extractErrorData(\n  error: ExtendedError,\n  captureErrorCause: boolean,\n  maxValueLength: number,\n): Record<string, unknown> | null {\n  // We are trying to enhance already existing event, so no harm done if it won't succeed\n  try {\n    const nativeKeys = [\n      'name',\n      'message',\n      'stack',\n      'line',\n      'column',\n      'fileName',\n      'lineNumber',\n      'columnNumber',\n      'toJSON',\n    ];\n\n    const extraErrorInfo: Record<string, unknown> = {};\n\n    // We want only enumerable properties, thus `getOwnPropertyNames` is redundant here, as we filter keys anyway.\n    for (const key of Object.keys(error)) {\n      if (nativeKeys.indexOf(key) !== -1) {\n        continue;\n      }\n      const value = error[key];\n      extraErrorInfo[key] = isError(value) || typeof value === 'string' ? truncate(`${value}`, maxValueLength) : value;\n    }\n\n    // Error.cause is a standard property that is non enumerable, we therefore need to access it separately.\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause\n    if (captureErrorCause && error.cause !== undefined) {\n      extraErrorInfo.cause = isError(error.cause) ? error.cause.toString() : error.cause;\n    }\n\n    // Check if someone attached `toJSON` method to grab even more properties (eg. axios is doing that)\n    if (typeof error.toJSON === 'function') {\n      const serializedError = error.toJSON() as Record<string, unknown>;\n\n      for (const key of Object.keys(serializedError)) {\n        const value = serializedError[key];\n        extraErrorInfo[key] = isError(value) ? value.toString() : value;\n      }\n    }\n\n    return extraErrorInfo;\n  } catch (oO) {\n    DEBUG_BUILD && logger.error('Unable to extract extra data from the Error object:', oO);\n  }\n\n  return null;\n}\n","import { defineIntegration } from '../integration';\nimport type { Event, StackFrame, Stacktrace } from '../types-hoist';\nimport { basename, relative } from '../utils-hoist/path';\nimport { GLOBAL_OBJ } from '../utils-hoist/worldwide';\n\ntype StackFrameIteratee = (frame: StackFrame) => StackFrame;\n\nconst INTEGRATION_NAME = 'RewriteFrames';\n\ninterface RewriteFramesOptions {\n  /**\n   * Root path (the beginning of the path) that will be stripped from the frames' filename.\n   *\n   * This option has slightly different behaviour in the browser and on servers:\n   * - In the browser, the value you provide in `root` will be stripped from the beginning stack frames' paths (if the path started with the value).\n   * - On the server, the root value will only replace the beginning of stack frame filepaths, when the path is absolute. If no `root` value is provided and the path is absolute, the frame will be reduced to only the filename and the provided `prefix` option.\n   *\n   * Browser example:\n   * - Original frame: `'http://example.com/my/path/static/asset.js'`\n   * - `root: 'http://example.com/my/path'`\n   * - `assetPrefix: 'app://'`\n   * - Resulting frame: `'app:///static/asset.js'`\n   *\n   * Server example:\n   * - Original frame: `'/User/local/my/path/static/asset.js'`\n   * - `root: '/User/local/my/path'`\n   * - `assetPrefix: 'app://'`\n   * - Resulting frame: `'app:///static/asset.js'`\n   */\n  root?: string;\n\n  /**\n   * A custom prefix that stack frames will be prepended with.\n   *\n   * Default: `'app://'`\n   *\n   * This option has slightly different behaviour in the browser and on servers:\n   * - In the browser, the value you provide in `prefix` will prefix the resulting filename when the value you provided in `root` was applied. Effectively replacing whatever `root` matched in the beginning of the frame with `prefix`.\n   * - On the server, the prefix is applied to all stackframes with absolute paths. On Windows, the drive identifier (e.g. \"C://\") is replaced with the prefix.\n   */\n  prefix?: string;\n\n  /**\n   * Defines an iterator that is used to iterate through all of the stack frames for modification before being sent to Sentry.\n   * Setting this option will effectively disable both the `root` and the `prefix` options.\n   */\n  iteratee?: StackFrameIteratee;\n}\n\n/**\n * Rewrite event frames paths.\n */\nexport const rewriteFramesIntegration = defineIntegration((options: RewriteFramesOptions = {}) => {\n  const root = options.root;\n  const prefix = options.prefix || 'app:///';\n\n  const isBrowser = 'window' in GLOBAL_OBJ && !!GLOBAL_OBJ.window;\n\n  const iteratee: StackFrameIteratee = options.iteratee || generateIteratee({ isBrowser, root, prefix });\n\n  /** Process an exception event. */\n  function _processExceptionsEvent(event: Event): Event {\n    try {\n      return {\n        ...event,\n        exception: {\n          ...event.exception,\n          // The check for this is performed inside `process` call itself, safe to skip here\n          // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n          values: event.exception!.values!.map(value => ({\n            ...value,\n            ...(value.stacktrace && { stacktrace: _processStacktrace(value.stacktrace) }),\n          })),\n        },\n      };\n    } catch (_oO) {\n      return event;\n    }\n  }\n\n  /** Process a stack trace. */\n  function _processStacktrace(stacktrace?: Stacktrace): Stacktrace {\n    return {\n      ...stacktrace,\n      frames: stacktrace?.frames && stacktrace.frames.map(f => iteratee(f)),\n    };\n  }\n\n  return {\n    name: INTEGRATION_NAME,\n    processEvent(originalEvent) {\n      let processedEvent = originalEvent;\n\n      if (originalEvent.exception && Array.isArray(originalEvent.exception.values)) {\n        processedEvent = _processExceptionsEvent(processedEvent);\n      }\n\n      return processedEvent;\n    },\n  };\n});\n\n/**\n * Exported only for tests.\n */\nexport function generateIteratee({\n  isBrowser,\n  root,\n  prefix,\n}: {\n  isBrowser: boolean;\n  root?: string;\n  prefix: string;\n}): StackFrameIteratee {\n  return (frame: StackFrame) => {\n    if (!frame.filename) {\n      return frame;\n    }\n\n    // Determine if this is a Windows frame by checking for a Windows-style prefix such as `C:\\`\n    const isWindowsFrame =\n      /^[a-zA-Z]:\\\\/.test(frame.filename) ||\n      // or the presence of a backslash without a forward slash (which are not allowed on Windows)\n      (frame.filename.includes('\\\\') && !frame.filename.includes('/'));\n\n    // Check if the frame filename begins with `/`\n    const startsWithSlash = /^\\//.test(frame.filename);\n\n    if (isBrowser) {\n      if (root) {\n        const oldFilename = frame.filename;\n        if (oldFilename.indexOf(root) === 0) {\n          frame.filename = oldFilename.replace(root, prefix);\n        }\n      }\n    } else {\n      if (isWindowsFrame || startsWithSlash) {\n        const filename = isWindowsFrame\n          ? frame.filename\n              .replace(/^[a-zA-Z]:/, '') // remove Windows-style prefix\n              .replace(/\\\\/g, '/') // replace all `\\\\` instances with `/`\n          : frame.filename;\n        const base = root ? relative(root, filename) : basename(filename);\n        frame.filename = `${prefix}${base}`;\n      }\n    }\n\n    return frame;\n  };\n}\n","import { defineIntegration } from '../integration';\nimport type { Event, EventHint, IntegrationFn } from '../types-hoist';\nimport { isError } from '../utils-hoist/is';\nimport { truncate } from '../utils-hoist/string';\n\ninterface ZodErrorsOptions {\n  key?: string;\n  /**\n   * Limits the number of Zod errors inlined in each Sentry event.\n   *\n   * @default 10\n   */\n  limit?: number;\n  /**\n   * Save full list of Zod issues as an attachment in Sentry\n   *\n   * @default false\n   */\n  saveZodIssuesAsAttachment?: boolean;\n}\n\nconst DEFAULT_LIMIT = 10;\nconst INTEGRATION_NAME = 'ZodErrors';\n\n/**\n * Simplified ZodIssue type definition\n */\ninterface ZodIssue {\n  path: (string | number)[];\n  message?: string;\n  expected?: unknown;\n  received?: unknown;\n  unionErrors?: unknown[];\n  keys?: unknown[];\n  invalid_literal?: unknown;\n}\n\ninterface ZodError extends Error {\n  issues: ZodIssue[];\n}\n\nfunction originalExceptionIsZodError(originalException: unknown): originalException is ZodError {\n  return (\n    isError(originalException) &&\n    originalException.name === 'ZodError' &&\n    Array.isArray((originalException as ZodError).issues)\n  );\n}\n\ntype SingleLevelZodIssue<T extends ZodIssue> = {\n  [P in keyof T]: T[P] extends string | number | undefined\n    ? T[P]\n    : T[P] extends unknown[]\n      ? string | undefined\n      : unknown;\n};\n\n/**\n * Formats child objects or arrays to a string\n * that is preserved when sent to Sentry.\n *\n * Without this, we end up with something like this in Sentry:\n *\n * [\n *  [Object],\n *  [Object],\n *  [Object],\n *  [Object]\n * ]\n */\nexport function flattenIssue(issue: ZodIssue): SingleLevelZodIssue<ZodIssue> {\n  return {\n    ...issue,\n    path: 'path' in issue && Array.isArray(issue.path) ? issue.path.join('.') : undefined,\n    keys: 'keys' in issue ? JSON.stringify(issue.keys) : undefined,\n    unionErrors: 'unionErrors' in issue ? JSON.stringify(issue.unionErrors) : undefined,\n  };\n}\n\n/**\n * Takes ZodError issue path array and returns a flattened version as a string.\n * This makes it easier to display paths within a Sentry error message.\n *\n * Array indexes are normalized to reduce duplicate entries\n *\n * @param path ZodError issue path\n * @returns flattened path\n *\n * @example\n * flattenIssuePath([0, 'foo', 1, 'bar']) // -> '<array>.foo.<array>.bar'\n */\nexport function flattenIssuePath(path: Array<string | number>): string {\n  return path\n    .map(p => {\n      if (typeof p === 'number') {\n        return '<array>';\n      } else {\n        return p;\n      }\n    })\n    .join('.');\n}\n\n/**\n * Zod error message is a stringified version of ZodError.issues\n * This doesn't display well in the Sentry UI. Replace it with something shorter.\n */\nexport function formatIssueMessage(zodError: ZodError): string {\n  const errorKeyMap = new Set<string | number | symbol>();\n  for (const iss of zodError.issues) {\n    const issuePath = flattenIssuePath(iss.path);\n    if (issuePath.length > 0) {\n      errorKeyMap.add(issuePath);\n    }\n  }\n\n  const errorKeys = Array.from(errorKeyMap);\n  if (errorKeys.length === 0) {\n    // If there are no keys, then we're likely validating the root\n    // variable rather than a key within an object. This attempts\n    // to extract what type it was that failed to validate.\n    // For example, z.string().parse(123) would return \"string\" here.\n    let rootExpectedType = 'variable';\n    if (zodError.issues.length > 0) {\n      const iss = zodError.issues[0];\n      if (iss !== undefined && 'expected' in iss && typeof iss.expected === 'string') {\n        rootExpectedType = iss.expected;\n      }\n    }\n    return `Failed to validate ${rootExpectedType}`;\n  }\n  return `Failed to validate keys: ${truncate(errorKeys.join(', '), 100)}`;\n}\n\n/**\n * Applies ZodError issues to an event extra and replaces the error message\n */\nexport function applyZodErrorsToEvent(\n  limit: number,\n  saveZodIssuesAsAttachment: boolean = false,\n  event: Event,\n  hint: EventHint,\n): Event {\n  if (\n    !event.exception?.values ||\n    !hint.originalException ||\n    !originalExceptionIsZodError(hint.originalException) ||\n    hint.originalException.issues.length === 0\n  ) {\n    return event;\n  }\n\n  try {\n    const issuesToFlatten = saveZodIssuesAsAttachment\n      ? hint.originalException.issues\n      : hint.originalException.issues.slice(0, limit);\n    const flattenedIssues = issuesToFlatten.map(flattenIssue);\n\n    if (saveZodIssuesAsAttachment) {\n      // Sometimes having the full error details can be helpful.\n      // Attachments have much higher limits, so we can include the full list of issues.\n      if (!Array.isArray(hint.attachments)) {\n        hint.attachments = [];\n      }\n      hint.attachments.push({\n        filename: 'zod_issues.json',\n        data: JSON.stringify({\n          issues: flattenedIssues,\n        }),\n      });\n    }\n\n    return {\n      ...event,\n      exception: {\n        ...event.exception,\n        values: [\n          {\n            ...event.exception.values[0],\n            value: formatIssueMessage(hint.originalException),\n          },\n          ...event.exception.values.slice(1),\n        ],\n      },\n      extra: {\n        ...event.extra,\n        'zoderror.issues': flattenedIssues.slice(0, limit),\n      },\n    };\n  } catch (e) {\n    // Hopefully we never throw errors here, but record it\n    // with the event just in case.\n    return {\n      ...event,\n      extra: {\n        ...event.extra,\n        'zoderrors sentry integration parse error': {\n          message: 'an exception was thrown while processing ZodError within applyZodErrorsToEvent()',\n          error: e instanceof Error ? `${e.name}: ${e.message}\\n${e.stack}` : 'unknown',\n        },\n      },\n    };\n  }\n}\n\nconst _zodErrorsIntegration = ((options: ZodErrorsOptions = {}) => {\n  const limit = options.limit ?? DEFAULT_LIMIT;\n\n  return {\n    name: INTEGRATION_NAME,\n    processEvent(originalEvent, hint): Event {\n      const processedEvent = applyZodErrorsToEvent(limit, options.saveZodIssuesAsAttachment, originalEvent, hint);\n      return processedEvent;\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Sentry integration to process Zod errors, making them easier to work with in Sentry.\n */\nexport const zodErrorsIntegration = defineIntegration(_zodErrorsIntegration);\n","import { defineIntegration } from '../integration';\nimport { addMetadataToStackFrames, stripMetadataFromStackFrames } from '../metadata';\nimport type { Event, EventItem } from '../types-hoist';\nimport { forEachEnvelopeItem } from '../utils-hoist/envelope';\nimport { getFramesFromEvent } from '../utils-hoist/stacktrace';\n\ninterface Options {\n  /**\n   * Keys that have been provided in the Sentry bundler plugin via the the `applicationKey` option, identifying your bundles.\n   *\n   * - Webpack plugin: https://www.npmjs.com/package/@sentry/webpack-plugin#applicationkey\n   * - Vite plugin: https://www.npmjs.com/package/@sentry/vite-plugin#applicationkey\n   * - Esbuild plugin: https://www.npmjs.com/package/@sentry/esbuild-plugin#applicationkey\n   * - Rollup plugin: https://www.npmjs.com/package/@sentry/rollup-plugin#applicationkey\n   */\n  filterKeys: string[];\n\n  /**\n   * Defines how the integration should behave. \"Third-Party Stack Frames\" are stack frames that did not come from files marked with a matching bundle key.\n   *\n   * You can define the behaviour with one of 4 modes:\n   * - `drop-error-if-contains-third-party-frames`: Drop error events that contain at least one third-party stack frame.\n   * - `drop-error-if-exclusively-contains-third-party-frames`: Drop error events that exclusively contain third-party stack frames.\n   * - `apply-tag-if-contains-third-party-frames`: Keep all error events, but apply a `third_party_code: true` tag in case the error contains at least one third-party stack frame.\n   * - `apply-tag-if-exclusively-contains-third-party-frames`: Keep all error events, but apply a `third_party_code: true` tag in case the error contains exclusively third-party stack frames.\n   *\n   * If you chose the mode to only apply tags, the tags can then be used in Sentry to filter your issue stream by entering `!third_party_code:True` in the search bar.\n   */\n  behaviour:\n    | 'drop-error-if-contains-third-party-frames'\n    | 'drop-error-if-exclusively-contains-third-party-frames'\n    | 'apply-tag-if-contains-third-party-frames'\n    | 'apply-tag-if-exclusively-contains-third-party-frames';\n}\n\n/**\n * This integration allows you to filter out, or tag error events that do not come from user code marked with a bundle key via the Sentry bundler plugins.\n */\nexport const thirdPartyErrorFilterIntegration = defineIntegration((options: Options) => {\n  return {\n    name: 'ThirdPartyErrorsFilter',\n    setup(client) {\n      // We need to strip metadata from stack frames before sending them to Sentry since these are client side only.\n      // TODO(lforst): Move this cleanup logic into a more central place in the SDK.\n      client.on('beforeEnvelope', envelope => {\n        forEachEnvelopeItem(envelope, (item, type) => {\n          if (type === 'event') {\n            const event = Array.isArray(item) ? (item as EventItem)[1] : undefined;\n\n            if (event) {\n              stripMetadataFromStackFrames(event);\n              item[1] = event;\n            }\n          }\n        });\n      });\n\n      client.on('applyFrameMetadata', event => {\n        // Only apply stack frame metadata to error events\n        if (event.type) {\n          return;\n        }\n\n        const stackParser = client.getOptions().stackParser;\n        addMetadataToStackFrames(stackParser, event);\n      });\n    },\n\n    processEvent(event) {\n      const frameKeys = getBundleKeysForAllFramesWithFilenames(event);\n\n      if (frameKeys) {\n        const arrayMethod =\n          options.behaviour === 'drop-error-if-contains-third-party-frames' ||\n          options.behaviour === 'apply-tag-if-contains-third-party-frames'\n            ? 'some'\n            : 'every';\n\n        const behaviourApplies = frameKeys[arrayMethod](keys => !keys.some(key => options.filterKeys.includes(key)));\n\n        if (behaviourApplies) {\n          const shouldDrop =\n            options.behaviour === 'drop-error-if-contains-third-party-frames' ||\n            options.behaviour === 'drop-error-if-exclusively-contains-third-party-frames';\n          if (shouldDrop) {\n            return null;\n          } else {\n            event.tags = {\n              ...event.tags,\n              third_party_code: true,\n            };\n          }\n        }\n      }\n\n      return event;\n    },\n  };\n});\n\nfunction getBundleKeysForAllFramesWithFilenames(event: Event): string[][] | undefined {\n  const frames = getFramesFromEvent(event);\n\n  if (!frames) {\n    return undefined;\n  }\n\n  return (\n    frames\n      // Exclude frames without a filename since these are likely native code or built-ins\n      .filter(frame => !!frame.filename)\n      .map(frame => {\n        if (frame.module_metadata) {\n          return Object.keys(frame.module_metadata)\n            .filter(key => key.startsWith(BUNDLER_PLUGIN_APP_KEY_PREFIX))\n            .map(key => key.slice(BUNDLER_PLUGIN_APP_KEY_PREFIX.length));\n        }\n        return [];\n      })\n  );\n}\n\nconst BUNDLER_PLUGIN_APP_KEY_PREFIX = '_sentryBundlerPluginAppKey:';\n","import type { Profiler, ProfilingIntegration } from './types-hoist';\n\nimport { getClient } from './currentScopes';\nimport { DEBUG_BUILD } from './debug-build';\nimport { logger } from './utils-hoist/logger';\n\nfunction isProfilingIntegrationWithProfiler(\n  integration: ProfilingIntegration<any> | undefined,\n): integration is ProfilingIntegration<any> {\n  return (\n    !!integration &&\n    typeof integration['_profiler'] !== 'undefined' &&\n    typeof integration['_profiler']['start'] === 'function' &&\n    typeof integration['_profiler']['stop'] === 'function'\n  );\n}\n/**\n * Starts the Sentry continuous profiler.\n * This mode is exclusive with the transaction profiler and will only work if the profilesSampleRate is set to a falsy value.\n * In continuous profiling mode, the profiler will keep reporting profile chunks to Sentry until it is stopped, which allows for continuous profiling of the application.\n */\nfunction startProfiler(): void {\n  const client = getClient();\n  if (!client) {\n    DEBUG_BUILD && logger.warn('No Sentry client available, profiling is not started');\n    return;\n  }\n\n  const integration = client.getIntegrationByName<ProfilingIntegration<any>>('ProfilingIntegration');\n\n  if (!integration) {\n    DEBUG_BUILD && logger.warn('ProfilingIntegration is not available');\n    return;\n  }\n\n  if (!isProfilingIntegrationWithProfiler(integration)) {\n    DEBUG_BUILD && logger.warn('Profiler is not available on profiling integration.');\n    return;\n  }\n\n  integration._profiler.start();\n}\n\n/**\n * Stops the Sentry continuous profiler.\n * Calls to stop will stop the profiler and flush the currently collected profile data to Sentry.\n */\nfunction stopProfiler(): void {\n  const client = getClient();\n  if (!client) {\n    DEBUG_BUILD && logger.warn('No Sentry client available, profiling is not started');\n    return;\n  }\n\n  const integration = client.getIntegrationByName<ProfilingIntegration<any>>('ProfilingIntegration');\n  if (!integration) {\n    DEBUG_BUILD && logger.warn('ProfilingIntegration is not available');\n    return;\n  }\n\n  if (!isProfilingIntegrationWithProfiler(integration)) {\n    DEBUG_BUILD && logger.warn('Profiler is not available on profiling integration.');\n    return;\n  }\n\n  integration._profiler.stop();\n}\n\nexport const profiler: Profiler = {\n  startProfiler,\n  stopProfiler,\n};\n","import { getClient } from './currentScopes';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from './semanticAttributes';\nimport { SPAN_STATUS_ERROR, setHttpStatus, startInactiveSpan } from './tracing';\nimport { SentryNonRecordingSpan } from './tracing/sentryNonRecordingSpan';\nimport type { FetchBreadcrumbHint, HandlerDataFetch, Span, SpanOrigin } from './types-hoist';\nimport { SENTRY_BAGGAGE_KEY_PREFIX } from './utils-hoist/baggage';\nimport { isInstanceOf } from './utils-hoist/is';\nimport { parseUrl, stripUrlQueryAndFragment } from './utils-hoist/url';\nimport { hasSpansEnabled } from './utils/hasSpansEnabled';\nimport { getActiveSpan } from './utils/spanUtils';\nimport { getTraceData } from './utils/traceData';\n\ntype PolymorphicRequestHeaders =\n  | Record<string, string | undefined>\n  | Array<[string, string]>\n  // the below is not precisely the Header type used in Request, but it'll pass duck-typing\n  | {\n      append: (key: string, value: string) => void;\n      get: (key: string) => string | null | undefined;\n    };\n\n/**\n * Create and track fetch request spans for usage in combination with `addFetchInstrumentationHandler`.\n *\n * @returns Span if a span was created, otherwise void.\n */\nexport function instrumentFetchRequest(\n  handlerData: HandlerDataFetch,\n  shouldCreateSpan: (url: string) => boolean,\n  shouldAttachHeaders: (url: string) => boolean,\n  spans: Record<string, Span>,\n  spanOrigin: SpanOrigin = 'auto.http.browser',\n): Span | undefined {\n  if (!handlerData.fetchData) {\n    return undefined;\n  }\n\n  const { method, url } = handlerData.fetchData;\n\n  const shouldCreateSpanResult = hasSpansEnabled() && shouldCreateSpan(url);\n\n  if (handlerData.endTimestamp && shouldCreateSpanResult) {\n    const spanId = handlerData.fetchData.__span;\n    if (!spanId) return;\n\n    const span = spans[spanId];\n    if (span) {\n      endSpan(span, handlerData);\n\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete spans[spanId];\n    }\n    return undefined;\n  }\n\n  const fullUrl = getFullURL(url);\n  const parsedUrl = fullUrl ? parseUrl(fullUrl) : parseUrl(url);\n\n  const hasParent = !!getActiveSpan();\n\n  const span =\n    shouldCreateSpanResult && hasParent\n      ? startInactiveSpan({\n          name: `${method} ${stripUrlQueryAndFragment(url)}`,\n          attributes: {\n            url,\n            type: 'fetch',\n            'http.method': method,\n            'http.url': fullUrl,\n            'server.address': parsedUrl?.host,\n            [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: spanOrigin,\n            [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.client',\n            ...(parsedUrl?.search && { 'http.query': parsedUrl?.search }),\n            ...(parsedUrl?.hash && { 'http.fragment': parsedUrl?.hash }),\n          },\n        })\n      : new SentryNonRecordingSpan();\n\n  handlerData.fetchData.__span = span.spanContext().spanId;\n  spans[span.spanContext().spanId] = span;\n\n  if (shouldAttachHeaders(handlerData.fetchData.url)) {\n    const request: string | Request = handlerData.args[0];\n\n    const options: { [key: string]: unknown } = handlerData.args[1] || {};\n\n    const headers = _addTracingHeadersToFetchRequest(\n      request,\n      options,\n      // If performance is disabled (TWP) or there's no active root span (pageload/navigation/interaction),\n      // we do not want to use the span as base for the trace headers,\n      // which means that the headers will be generated from the scope and the sampling decision is deferred\n      hasSpansEnabled() && hasParent ? span : undefined,\n    );\n    if (headers) {\n      // Ensure this is actually set, if no options have been passed previously\n      handlerData.args[1] = options;\n      options.headers = headers;\n    }\n  }\n\n  const client = getClient();\n\n  if (client) {\n    const fetchHint = {\n      input: handlerData.args,\n      response: handlerData.response,\n      startTimestamp: handlerData.startTimestamp,\n      endTimestamp: handlerData.endTimestamp,\n    } satisfies FetchBreadcrumbHint;\n\n    client.emit('beforeOutgoingRequestSpan', span, fetchHint);\n  }\n\n  return span;\n}\n\n/**\n * Adds sentry-trace and baggage headers to the various forms of fetch headers.\n */\nfunction _addTracingHeadersToFetchRequest(\n  request: string | Request,\n  fetchOptionsObj: {\n    headers?:\n      | {\n          [key: string]: string[] | string | undefined;\n        }\n      | PolymorphicRequestHeaders;\n  },\n  span?: Span,\n): PolymorphicRequestHeaders | undefined {\n  const traceHeaders = getTraceData({ span });\n  const sentryTrace = traceHeaders['sentry-trace'];\n  const baggage = traceHeaders.baggage;\n\n  // Nothing to do, when we return undefined here, the original headers will be used\n  if (!sentryTrace) {\n    return undefined;\n  }\n\n  const headers = fetchOptionsObj.headers || (isRequest(request) ? request.headers : undefined);\n\n  if (!headers) {\n    return { ...traceHeaders };\n  } else if (isHeaders(headers)) {\n    const newHeaders = new Headers(headers);\n    newHeaders.set('sentry-trace', sentryTrace);\n\n    if (baggage) {\n      const prevBaggageHeader = newHeaders.get('baggage');\n      if (prevBaggageHeader) {\n        const prevHeaderStrippedFromSentryBaggage = stripBaggageHeaderOfSentryBaggageValues(prevBaggageHeader);\n        newHeaders.set(\n          'baggage',\n          // If there are non-sentry entries (i.e. if the stripped string is non-empty/truthy) combine the stripped header and sentry baggage header\n          // otherwise just set the sentry baggage header\n          prevHeaderStrippedFromSentryBaggage ? `${prevHeaderStrippedFromSentryBaggage},${baggage}` : baggage,\n        );\n      } else {\n        newHeaders.set('baggage', baggage);\n      }\n    }\n\n    return newHeaders;\n  } else if (Array.isArray(headers)) {\n    const newHeaders = [\n      ...headers\n        // Remove any existing sentry-trace headers\n        .filter(header => {\n          return !(Array.isArray(header) && header[0] === 'sentry-trace');\n        })\n        // Get rid of previous sentry baggage values in baggage header\n        .map(header => {\n          if (Array.isArray(header) && header[0] === 'baggage' && typeof header[1] === 'string') {\n            const [headerName, headerValue, ...rest] = header;\n            return [headerName, stripBaggageHeaderOfSentryBaggageValues(headerValue), ...rest];\n          } else {\n            return header;\n          }\n        }),\n      // Attach the new sentry-trace header\n      ['sentry-trace', sentryTrace],\n    ];\n\n    if (baggage) {\n      // If there are multiple entries with the same key, the browser will merge the values into a single request header.\n      // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n      newHeaders.push(['baggage', baggage]);\n    }\n\n    return newHeaders as PolymorphicRequestHeaders;\n  } else {\n    const existingBaggageHeader = 'baggage' in headers ? headers.baggage : undefined;\n    let newBaggageHeaders: string[] = [];\n\n    if (Array.isArray(existingBaggageHeader)) {\n      newBaggageHeaders = existingBaggageHeader\n        .map(headerItem =>\n          typeof headerItem === 'string' ? stripBaggageHeaderOfSentryBaggageValues(headerItem) : headerItem,\n        )\n        .filter(headerItem => headerItem === '');\n    } else if (existingBaggageHeader) {\n      newBaggageHeaders.push(stripBaggageHeaderOfSentryBaggageValues(existingBaggageHeader));\n    }\n\n    if (baggage) {\n      newBaggageHeaders.push(baggage);\n    }\n\n    return {\n      ...(headers as Exclude<typeof headers, Headers>),\n      'sentry-trace': sentryTrace,\n      baggage: newBaggageHeaders.length > 0 ? newBaggageHeaders.join(',') : undefined,\n    };\n  }\n}\n\nfunction getFullURL(url: string): string | undefined {\n  try {\n    const parsed = new URL(url);\n    return parsed.href;\n  } catch {\n    return undefined;\n  }\n}\n\nfunction endSpan(span: Span, handlerData: HandlerDataFetch): void {\n  if (handlerData.response) {\n    setHttpStatus(span, handlerData.response.status);\n\n    const contentLength = handlerData.response?.headers && handlerData.response.headers.get('content-length');\n\n    if (contentLength) {\n      const contentLengthNum = parseInt(contentLength);\n      if (contentLengthNum > 0) {\n        span.setAttribute('http.response_content_length', contentLengthNum);\n      }\n    }\n  } else if (handlerData.error) {\n    span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n  }\n  span.end();\n}\n\nfunction stripBaggageHeaderOfSentryBaggageValues(baggageHeader: string): string {\n  return (\n    baggageHeader\n      .split(',')\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      .filter(baggageEntry => !baggageEntry.split('=')[0]!.startsWith(SENTRY_BAGGAGE_KEY_PREFIX))\n      .join(',')\n  );\n}\n\nfunction isRequest(request: unknown): request is Request {\n  return typeof Request !== 'undefined' && isInstanceOf(request, Request);\n}\n\nfunction isHeaders(headers: unknown): headers is Headers {\n  return typeof Headers !== 'undefined' && isInstanceOf(headers, Headers);\n}\n","import { getClient, withScope } from './currentScopes';\nimport { captureException } from './exports';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from './semanticAttributes';\nimport { startSpanManual } from './tracing';\nimport { addNonEnumerableProperty } from './utils-hoist';\nimport { normalize } from './utils-hoist/normalize';\n\ninterface SentryTrpcMiddlewareOptions {\n  /** Whether to include procedure inputs in reported events. Defaults to `false`. */\n  attachRpcInput?: boolean;\n  forceTransaction?: boolean;\n}\n\nexport interface SentryTrpcMiddlewareArguments<T> {\n  path?: unknown;\n  type?: unknown;\n  next: () => T;\n  rawInput?: unknown;\n  getRawInput?: () => Promise<unknown>;\n}\n\nconst trpcCaptureContext = { mechanism: { handled: false, data: { function: 'trpcMiddleware' } } };\n\nfunction captureIfError(nextResult: unknown): void {\n  // TODO: Set span status based on what TRPCError was encountered\n  if (\n    typeof nextResult === 'object' &&\n    nextResult !== null &&\n    'ok' in nextResult &&\n    !nextResult.ok &&\n    'error' in nextResult\n  ) {\n    captureException(nextResult.error, trpcCaptureContext);\n  }\n}\n\ntype SentryTrpcMiddleware<T> = T extends Promise<unknown> ? T : Promise<T>;\n\n/**\n * Sentry tRPC middleware that captures errors and creates spans for tRPC procedures.\n */\nexport function trpcMiddleware(options: SentryTrpcMiddlewareOptions = {}) {\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  return async function <T>(opts: SentryTrpcMiddlewareArguments<T>): SentryTrpcMiddleware<T> {\n    const { path, type, next, rawInput, getRawInput } = opts;\n\n    const client = getClient();\n    const clientOptions = client?.getOptions();\n\n    const trpcContext: Record<string, unknown> = {\n      procedure_path: path,\n      procedure_type: type,\n    };\n\n    addNonEnumerableProperty(\n      trpcContext,\n      '__sentry_override_normalization_depth__',\n      1 + // 1 for context.input + the normal normalization depth\n        (clientOptions?.normalizeDepth ?? 5), // 5 is a sane depth\n    );\n\n    if (options.attachRpcInput !== undefined ? options.attachRpcInput : clientOptions?.sendDefaultPii) {\n      if (rawInput !== undefined) {\n        trpcContext.input = normalize(rawInput);\n      }\n\n      if (getRawInput !== undefined && typeof getRawInput === 'function') {\n        try {\n          const rawRes = await getRawInput();\n\n          trpcContext.input = normalize(rawRes);\n        } catch (err) {\n          // noop\n        }\n      }\n    }\n\n    return withScope(scope => {\n      scope.setContext('trpc', trpcContext);\n      return startSpanManual(\n        {\n          name: `trpc/${path}`,\n          op: 'rpc.server',\n          attributes: {\n            [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route',\n            [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.rpc.trpc',\n          },\n          forceTransaction: !!options.forceTransaction,\n        },\n        async span => {\n          try {\n            const nextResult = await next();\n            captureIfError(nextResult);\n            span.end();\n            return nextResult;\n          } catch (e) {\n            captureException(e, trpcCaptureContext);\n            span.end();\n            throw e;\n          }\n        },\n      ) as SentryTrpcMiddleware<T>;\n    });\n  };\n}\n","import { getClient, getCurrentScope } from './currentScopes';\nimport type { EventHint, FeedbackEvent, SendFeedbackParams } from './types-hoist';\nimport { dropUndefinedKeys } from './utils-hoist/object';\n\n/**\n * Send user feedback to Sentry.\n */\nexport function captureFeedback(\n  params: SendFeedbackParams,\n  hint: EventHint & { includeReplay?: boolean } = {},\n  scope = getCurrentScope(),\n): string {\n  const { message, name, email, url, source, associatedEventId, tags } = params;\n\n  const feedbackEvent: FeedbackEvent = {\n    contexts: {\n      feedback: dropUndefinedKeys({\n        contact_email: email,\n        name,\n        message,\n        url,\n        source,\n        associated_event_id: associatedEventId,\n      }),\n    },\n    type: 'feedback',\n    level: 'info',\n    tags,\n  };\n\n  const client = scope?.getClient() || getClient();\n\n  if (client) {\n    client.emit('beforeSendFeedback', feedbackEvent, hint);\n  }\n\n  const eventId = scope.captureEvent(feedbackEvent, hint);\n\n  return eventId;\n}\n","import type { SeverityLevel } from '../types-hoist';\n\n/**\n * Determine a breadcrumb's log level (only `warning` or `error`) based on an HTTP status code.\n */\nexport function getBreadcrumbLogLevelFromHttpStatusCode(statusCode: number | undefined): SeverityLevel | undefined {\n  // NOTE: undefined defaults to 'info' in Sentry\n  if (statusCode === undefined) {\n    return undefined;\n  } else if (statusCode >= 400 && statusCode < 500) {\n    return 'warning';\n  } else if (statusCode >= 500) {\n    return 'error';\n  } else {\n    return undefined;\n  }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { HandlerDataFetch } from '../../types-hoist';\n\nimport { isError } from '../is';\nimport { addNonEnumerableProperty, fill } from '../object';\nimport { supportsNativeFetch } from '../supports';\nimport { timestampInSeconds } from '../time';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers';\n\ntype FetchResource = string | { toString(): string } | { url: string };\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addFetchInstrumentationHandler(\n  handler: (data: HandlerDataFetch) => void,\n  skipNativeFetchCheck?: boolean,\n): void {\n  const type = 'fetch';\n  addHandler(type, handler);\n  maybeInstrument(type, () => instrumentFetch(undefined, skipNativeFetchCheck));\n}\n\n/**\n * Add an instrumentation handler for long-lived fetch requests, like consuming server-sent events (SSE) via fetch.\n * The handler will resolve the request body and emit the actual `endTimestamp`, so that the\n * span can be updated accordingly.\n *\n * Only used internally\n * @hidden\n */\nexport function addFetchEndInstrumentationHandler(handler: (data: HandlerDataFetch) => void): void {\n  const type = 'fetch-body-resolved';\n  addHandler(type, handler);\n  maybeInstrument(type, () => instrumentFetch(streamHandler));\n}\n\nfunction instrumentFetch(onFetchResolved?: (response: Response) => void, skipNativeFetchCheck: boolean = false): void {\n  if (skipNativeFetchCheck && !supportsNativeFetch()) {\n    return;\n  }\n\n  fill(GLOBAL_OBJ, 'fetch', function (originalFetch: () => void): () => void {\n    return function (...args: any[]): void {\n      // We capture the error right here and not in the Promise error callback because Safari (and probably other\n      // browsers too) will wipe the stack trace up to this point, only leaving us with this file which is useless.\n\n      // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n      //       it means the error, that was caused by your fetch call did not\n      //       have a stack trace, so the SDK backfilled the stack trace so\n      //       you can see which fetch call failed.\n      const virtualError = new Error();\n\n      const { method, url } = parseFetchArgs(args);\n      const handlerData: HandlerDataFetch = {\n        args,\n        fetchData: {\n          method,\n          url,\n        },\n        startTimestamp: timestampInSeconds() * 1000,\n        // // Adding the error to be able to fingerprint the failed fetch event in HttpClient instrumentation\n        virtualError,\n      };\n\n      // if there is no callback, fetch is instrumented directly\n      if (!onFetchResolved) {\n        triggerHandlers('fetch', {\n          ...handlerData,\n        });\n      }\n\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      return originalFetch.apply(GLOBAL_OBJ, args).then(\n        async (response: Response) => {\n          if (onFetchResolved) {\n            onFetchResolved(response);\n          } else {\n            triggerHandlers('fetch', {\n              ...handlerData,\n              endTimestamp: timestampInSeconds() * 1000,\n              response,\n            });\n          }\n\n          return response;\n        },\n        (error: Error) => {\n          triggerHandlers('fetch', {\n            ...handlerData,\n            endTimestamp: timestampInSeconds() * 1000,\n            error,\n          });\n\n          if (isError(error) && error.stack === undefined) {\n            // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n            //       it means the error, that was caused by your fetch call did not\n            //       have a stack trace, so the SDK backfilled the stack trace so\n            //       you can see which fetch call failed.\n            error.stack = virtualError.stack;\n            addNonEnumerableProperty(error, 'framesToPop', 1);\n          }\n\n          // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n          //       it means the sentry.javascript SDK caught an error invoking your application code.\n          //       This is expected behavior and NOT indicative of a bug with sentry.javascript.\n          throw error;\n        },\n      );\n    };\n  });\n}\n\nasync function resolveResponse(res: Response | undefined, onFinishedResolving: () => void): Promise<void> {\n  if (res?.body) {\n    const body = res.body;\n    const responseReader = body.getReader();\n\n    // Define a maximum duration after which we just cancel\n    const maxFetchDurationTimeout = setTimeout(\n      () => {\n        body.cancel().then(null, () => {\n          // noop\n        });\n      },\n      90 * 1000, // 90s\n    );\n\n    let readingActive = true;\n    while (readingActive) {\n      let chunkTimeout;\n      try {\n        // abort reading if read op takes more than 5s\n        chunkTimeout = setTimeout(() => {\n          body.cancel().then(null, () => {\n            // noop on error\n          });\n        }, 5000);\n\n        // This .read() call will reject/throw when we abort due to timeouts through `body.cancel()`\n        const { done } = await responseReader.read();\n\n        clearTimeout(chunkTimeout);\n\n        if (done) {\n          onFinishedResolving();\n          readingActive = false;\n        }\n      } catch (error) {\n        readingActive = false;\n      } finally {\n        clearTimeout(chunkTimeout);\n      }\n    }\n\n    clearTimeout(maxFetchDurationTimeout);\n\n    responseReader.releaseLock();\n    body.cancel().then(null, () => {\n      // noop on error\n    });\n  }\n}\n\nfunction streamHandler(response: Response): void {\n  // clone response for awaiting stream\n  let clonedResponseForResolving: Response;\n  try {\n    clonedResponseForResolving = response.clone();\n  } catch {\n    return;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-floating-promises\n  resolveResponse(clonedResponseForResolving, () => {\n    triggerHandlers('fetch-body-resolved', {\n      endTimestamp: timestampInSeconds() * 1000,\n      response,\n    });\n  });\n}\n\nfunction hasProp<T extends string>(obj: unknown, prop: T): obj is Record<string, string> {\n  return !!obj && typeof obj === 'object' && !!(obj as Record<string, string>)[prop];\n}\n\nfunction getUrlFromResource(resource: FetchResource): string {\n  if (typeof resource === 'string') {\n    return resource;\n  }\n\n  if (!resource) {\n    return '';\n  }\n\n  if (hasProp(resource, 'url')) {\n    return resource.url;\n  }\n\n  if (resource.toString) {\n    return resource.toString();\n  }\n\n  return '';\n}\n\n/**\n * Parses the fetch arguments to find the used Http method and the url of the request.\n * Exported for tests only.\n */\nexport function parseFetchArgs(fetchArgs: unknown[]): { method: string; url: string } {\n  if (fetchArgs.length === 0) {\n    return { method: 'GET', url: '' };\n  }\n\n  if (fetchArgs.length === 2) {\n    const [url, options] = fetchArgs as [FetchResource, object];\n\n    return {\n      url: getUrlFromResource(url),\n      method: hasProp(options, 'method') ? String(options.method).toUpperCase() : 'GET',\n    };\n  }\n\n  const arg = fetchArgs[0];\n  return {\n    url: getUrlFromResource(arg as FetchResource),\n    method: hasProp(arg, 'method') ? String(arg.method).toUpperCase() : 'GET',\n  };\n}\n","import { isNodeEnv } from './node';\nimport { GLOBAL_OBJ } from './worldwide';\n\n/**\n * Returns true if we are in the browser.\n */\nexport function isBrowser(): boolean {\n  // eslint-disable-next-line no-restricted-globals\n  return typeof window !== 'undefined' && (!isNodeEnv() || isElectronNodeRenderer());\n}\n\ntype ElectronProcess = { type?: string };\n\n// Electron renderers with nodeIntegration enabled are detected as Node.js so we specifically test for them\nfunction isElectronNodeRenderer(): boolean {\n  const process = (GLOBAL_OBJ as typeof GLOBAL_OBJ & { process?: ElectronProcess }).process;\n  return process?.type === 'renderer';\n}\n","import type { StackFrame } from '../types-hoist';\nimport { filenameIsInApp } from './node-stack-trace';\nimport { dropUndefinedKeys } from './object';\nimport { UNKNOWN_FUNCTION } from './stacktrace';\n\ntype WatchdogReturn = {\n  /** Resets the watchdog timer */\n  poll: () => void;\n  /** Enables or disables the watchdog timer */\n  enabled: (state: boolean) => void;\n};\n\ntype CreateTimerImpl = () => { getTimeMs: () => number; reset: () => void };\n\n/**\n * A node.js watchdog timer\n * @param pollInterval The interval that we expect to get polled at\n * @param anrThreshold The threshold for when we consider ANR\n * @param callback The callback to call for ANR\n * @returns An object with `poll` and `enabled` functions {@link WatchdogReturn}\n */\nexport function watchdogTimer(\n  createTimer: CreateTimerImpl,\n  pollInterval: number,\n  anrThreshold: number,\n  callback: () => void,\n): WatchdogReturn {\n  const timer = createTimer();\n  let triggered = false;\n  let enabled = true;\n\n  setInterval(() => {\n    const diffMs = timer.getTimeMs();\n\n    if (triggered === false && diffMs > pollInterval + anrThreshold) {\n      triggered = true;\n      if (enabled) {\n        callback();\n      }\n    }\n\n    if (diffMs < pollInterval + anrThreshold) {\n      triggered = false;\n    }\n  }, 20);\n\n  return {\n    poll: () => {\n      timer.reset();\n    },\n    enabled: (state: boolean) => {\n      enabled = state;\n    },\n  };\n}\n\n// types copied from inspector.d.ts\ninterface Location {\n  scriptId: string;\n  lineNumber: number;\n  columnNumber?: number;\n}\n\ninterface CallFrame {\n  functionName: string;\n  location: Location;\n  url: string;\n}\n\n/**\n * Converts Debugger.CallFrame to Sentry StackFrame\n */\nexport function callFrameToStackFrame(\n  frame: CallFrame,\n  url: string | undefined,\n  getModuleFromFilename: (filename: string | undefined) => string | undefined,\n): StackFrame {\n  const filename = url ? url.replace(/^file:\\/\\//, '') : undefined;\n\n  // CallFrame row/col are 0 based, whereas StackFrame are 1 based\n  const colno = frame.location.columnNumber ? frame.location.columnNumber + 1 : undefined;\n  const lineno = frame.location.lineNumber ? frame.location.lineNumber + 1 : undefined;\n\n  return dropUndefinedKeys({\n    filename,\n    module: getModuleFromFilename(filename),\n    function: frame.functionName || UNKNOWN_FUNCTION,\n    colno,\n    lineno,\n    in_app: filename ? filenameIsInApp(filename) : undefined,\n  });\n}\n","/** A simple Least Recently Used map */\nexport class LRUMap<K, V> {\n  private readonly _cache: Map<K, V>;\n\n  public constructor(private readonly _maxSize: number) {\n    this._cache = new Map<K, V>();\n  }\n\n  /** Get the current size of the cache */\n  public get size(): number {\n    return this._cache.size;\n  }\n\n  /** Get an entry or undefined if it was not in the cache. Re-inserts to update the recently used order */\n  public get(key: K): V | undefined {\n    const value = this._cache.get(key);\n    if (value === undefined) {\n      return undefined;\n    }\n    // Remove and re-insert to update the order\n    this._cache.delete(key);\n    this._cache.set(key, value);\n    return value;\n  }\n\n  /** Insert an entry and evict an older entry if we've reached maxSize */\n  public set(key: K, value: V): void {\n    if (this._cache.size >= this._maxSize) {\n      // keys() returns an iterator in insertion order so keys().next() gives us the oldest key\n      this._cache.delete(this._cache.keys().next().value);\n    }\n    this._cache.set(key, value);\n  }\n\n  /** Remove an entry and return the entry if it was in the cache */\n  public remove(key: K): V | undefined {\n    const value = this._cache.get(key);\n    if (value) {\n      this._cache.delete(key);\n    }\n    return value;\n  }\n\n  /** Clear all entries */\n  public clear(): void {\n    this._cache.clear();\n  }\n\n  /** Get all the keys */\n  public keys(): Array<K> {\n    return Array.from(this._cache.keys());\n  }\n\n  /** Get all the values */\n  public values(): Array<V> {\n    const values: V[] = [];\n    this._cache.forEach(value => values.push(value));\n    return values;\n  }\n}\n","import { GLOBAL_OBJ } from './worldwide';\n\ninterface VercelRequestContextGlobal {\n  get?():\n    | {\n        waitUntil?: (task: Promise<unknown>) => void;\n      }\n    | undefined;\n}\n\n/**\n * Function that delays closing of a Vercel lambda until the provided promise is resolved.\n *\n * Vendored from https://www.npmjs.com/package/@vercel/functions\n */\nexport function vercelWaitUntil(task: Promise<unknown>): void {\n  const vercelRequestContextGlobal: VercelRequestContextGlobal | undefined =\n    // @ts-expect-error This is not typed\n    GLOBAL_OBJ[Symbol.for('@vercel/request-context')];\n\n  const ctx =\n    vercelRequestContextGlobal?.get && vercelRequestContextGlobal.get() ? vercelRequestContextGlobal.get() : {};\n\n  if (ctx?.waitUntil) {\n    ctx.waitUntil(task);\n  }\n}\n","// Based on https://github.com/sindresorhus/escape-string-regexp but with modifications to:\n//   a) reduce the size by skipping the runtime type - checking\n//   b) ensure it gets down - compiled for old versions of Node(the published package only supports Node 14+).\n//\n// MIT License\n//\n// Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n// documentation files(the \"Software\"), to deal in the Software without restriction, including without limitation\n// the rights to use, copy, modify, merge, publish, distribute, sublicense, and / or sell copies of the Software, and\n// to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n// the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n/**\n * Given a string, escape characters which have meaning in the regex grammar, such that the result is safe to feed to\n * `new RegExp()`.\n *\n * @param regexString The string to escape\n * @returns An version of the string with all special regex characters escaped\n */\nexport function escapeStringForRegex(regexString: string): string {\n  // escape the hyphen separately so we can also replace it with a unicode literal hyphen, to avoid the problems\n  // discussed in https://github.com/sindresorhus/escape-string-regexp/issues/20.\n  return regexString.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d');\n}\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://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,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport { runOnce } from './lib/runOnce';\nimport { onFCP } from './onFCP';\nimport type { CLSMetric, MetricRatingThresholds, ReportOpts } from './types';\n\n/** Thresholds for CLS. See https://web.dev/articles/cls#what_is_a_good_cls_score */\nexport const CLSThresholds: MetricRatingThresholds = [0.1, 0.25];\n\n/**\n * Calculates the [CLS](https://web.dev/articles/cls) value for the current page and\n * calls the `callback` function once the value is ready to be reported, along\n * with all `layout-shift` performance entries that were used in the metric\n * value calculation. The reported value is a `double` (corresponding to a\n * [layout shift score](https://web.dev/articles/cls#layout_shift_score)).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** CLS should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nexport const onCLS = (onReport: (metric: CLSMetric) => void, opts: ReportOpts = {}) => {\n  // Start monitoring FCP so we can only report CLS if FCP is also reported.\n  // Note: this is done to match the current behavior of CrUX.\n  onFCP(\n    runOnce(() => {\n      const metric = initMetric('CLS', 0);\n      let report: ReturnType<typeof bindReporter>;\n\n      let sessionValue = 0;\n      let sessionEntries: LayoutShift[] = [];\n\n      const handleEntries = (entries: LayoutShift[]) => {\n        entries.forEach(entry => {\n          // Only count layout shifts without recent user input.\n          if (!entry.hadRecentInput) {\n            const firstSessionEntry = sessionEntries[0];\n            const lastSessionEntry = sessionEntries[sessionEntries.length - 1];\n\n            // If the entry occurred less than 1 second after the previous entry\n            // and less than 5 seconds after the first entry in the session,\n            // include the entry in the current session. Otherwise, start a new\n            // session.\n            if (\n              sessionValue &&\n              firstSessionEntry &&\n              lastSessionEntry &&\n              entry.startTime - lastSessionEntry.startTime < 1000 &&\n              entry.startTime - firstSessionEntry.startTime < 5000\n            ) {\n              sessionValue += entry.value;\n              sessionEntries.push(entry);\n            } else {\n              sessionValue = entry.value;\n              sessionEntries = [entry];\n            }\n          }\n        });\n\n        // If the current session value is larger than the current CLS value,\n        // update CLS and the entries contributing to it.\n        if (sessionValue > metric.value) {\n          metric.value = sessionValue;\n          metric.entries = sessionEntries;\n          report();\n        }\n      };\n\n      const po = observe('layout-shift', handleEntries);\n      if (po) {\n        report = bindReporter(onReport, metric, CLSThresholds, opts.reportAllChanges);\n\n        onHidden(() => {\n          handleEntries(po.takeRecords() as CLSMetric['entries']);\n          report(true);\n        });\n\n        // Queue a task to report (if nothing else triggers a report first).\n        // This allows CLS to be reported as soon as FCP fires when\n        // `reportAllChanges` is true.\n        setTimeout(report, 0);\n      }\n    }),\n  );\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://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,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Performantly generate a unique, 30-char string by combining a version\n * number, the current timestamp with a 13-digit number integer.\n * @return {string}\n */\nexport const generateUniqueID = () => {\n  return `v4-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://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,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { getActivationStart } from './lib/getActivationStart';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { whenActivated } from './lib/whenActivated';\nimport type { FCPMetric, MetricRatingThresholds, ReportOpts } from './types';\n\n/** Thresholds for FCP. See https://web.dev/articles/fcp#what_is_a_good_fcp_score */\nexport const FCPThresholds: MetricRatingThresholds = [1800, 3000];\n\n/**\n * Calculates the [FCP](https://web.dev/articles/fcp) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `paint` performance entry used to determine the value. The reported\n * value is a `DOMHighResTimeStamp`.\n */\nexport const onFCP = (onReport: (metric: FCPMetric) => void, opts: ReportOpts = {}) => {\n  whenActivated(() => {\n    const visibilityWatcher = getVisibilityWatcher();\n    const metric = initMetric('FCP');\n    let report: ReturnType<typeof bindReporter>;\n\n    const handleEntries = (entries: FCPMetric['entries']) => {\n      entries.forEach(entry => {\n        if (entry.name === 'first-contentful-paint') {\n          po!.disconnect();\n\n          // Only report if the page wasn't hidden prior to the first paint.\n          if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n            // The activationStart reference is used because FCP should be\n            // relative to page activation rather than navigation start if the\n            // page was prerendered. But in cases where `activationStart` occurs\n            // after the FCP, this time should be clamped at 0.\n            metric.value = Math.max(entry.startTime - getActivationStart(), 0);\n            metric.entries.push(entry);\n            report(true);\n          }\n        }\n      });\n    };\n\n    const po = observe('paint', handleEntries);\n\n    if (po) {\n      report = bindReporter(onReport, metric, FCPThresholds, opts.reportAllChanges);\n    }\n  });\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://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,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport { runOnce } from './lib/runOnce';\nimport { whenActivated } from './lib/whenActivated';\nimport type { FIDMetric, MetricRatingThresholds, ReportOpts } from './types';\n\n/** Thresholds for FID. See https://web.dev/articles/fid#what_is_a_good_fid_score */\nexport const FIDThresholds: MetricRatingThresholds = [100, 300];\n\n/**\n * Calculates the [FID](https://web.dev/articles/fid) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `first-input` performance entry used to determine the value. The\n * reported value is a `DOMHighResTimeStamp`.\n *\n * _**Important:** since FID is only reported after the user interacts with the\n * page, it's possible that it will not be reported for some page loads._\n */\nexport const onFID = (onReport: (metric: FIDMetric) => void, opts: ReportOpts = {}) => {\n  whenActivated(() => {\n    const visibilityWatcher = getVisibilityWatcher();\n    const metric = initMetric('FID');\n    // eslint-disable-next-line prefer-const\n    let report: ReturnType<typeof bindReporter>;\n\n    const handleEntry = (entry: PerformanceEventTiming): void => {\n      // Only report if the page wasn't hidden prior to the first input.\n      if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n        metric.value = entry.processingStart - entry.startTime;\n        metric.entries.push(entry);\n        report(true);\n      }\n    };\n\n    const handleEntries = (entries: FIDMetric['entries']) => {\n      (entries as PerformanceEventTiming[]).forEach(handleEntry);\n    };\n\n    const po = observe('first-input', handleEntries);\n\n    report = bindReporter(onReport, metric, FIDThresholds, opts.reportAllChanges);\n\n    if (po) {\n      onHidden(\n        runOnce(() => {\n          handleEntries(po.takeRecords() as FIDMetric['entries']);\n          po.disconnect();\n        }),\n      );\n    }\n  });\n};\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://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,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\nimport { bindReporter } from './lib/bindReporter';\nimport { initMetric } from './lib/initMetric';\nimport { DEFAULT_DURATION_THRESHOLD, estimateP98LongestInteraction, processInteractionEntry } from './lib/interactions';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport { initInteractionCountPolyfill } from './lib/polyfills/interactionCountPolyfill';\nimport { whenActivated } from './lib/whenActivated';\nimport { whenIdle } from './lib/whenIdle';\n\nimport type { INPMetric, MetricRatingThresholds, ReportOpts } from './types';\n\n/** Thresholds for INP. See https://web.dev/articles/inp#what_is_a_good_inp_score */\nexport const INPThresholds: MetricRatingThresholds = [200, 500];\n\n/**\n * Calculates the [INP](https://web.dev/articles/inp) value for the current\n * page and calls the `callback` function once the value is ready, along with\n * the `event` performance entries reported for that interaction. The reported\n * value is a `DOMHighResTimeStamp`.\n *\n * A custom `durationThreshold` configuration option can optionally be passed to\n * control what `event-timing` entries are considered for INP reporting. The\n * default threshold is `40`, which means INP scores of less than 40 are\n * reported as 0. Note that this will not affect your 75th percentile INP value\n * unless that value is also less than 40 (well below the recommended\n * [good](https://web.dev/articles/inp#what_is_a_good_inp_score) threshold).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** INP should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nexport const onINP = (onReport: (metric: INPMetric) => void, opts: ReportOpts = {}) => {\n  // Return if the browser doesn't support all APIs needed to measure INP.\n  if (!('PerformanceEventTiming' in WINDOW && 'interactionId' in PerformanceEventTiming.prototype)) {\n    return;\n  }\n\n  whenActivated(() => {\n    // TODO(philipwalton): remove once the polyfill is no longer needed.\n    initInteractionCountPolyfill();\n\n    const metric = initMetric('INP');\n    // eslint-disable-next-line prefer-const\n    let report: ReturnType<typeof bindReporter>;\n\n    const handleEntries = (entries: INPMetric['entries']) => {\n      // Queue the `handleEntries()` callback in the next idle task.\n      // This is needed to increase the chances that all event entries that\n      // occurred between the user interaction and the next paint\n      // have been dispatched. Note: there is currently an experiment\n      // running in Chrome (EventTimingKeypressAndCompositionInteractionId)\n      // 123+ that if rolled out fully may make this no longer necessary.\n      whenIdle(() => {\n        entries.forEach(processInteractionEntry);\n\n        const inp = estimateP98LongestInteraction();\n\n        if (inp && inp.latency !== metric.value) {\n          metric.value = inp.latency;\n          metric.entries = inp.entries;\n          report();\n        }\n      });\n    };\n\n    const po = observe('event', handleEntries, {\n      // Event Timing entries have their durations rounded to the nearest 8ms,\n      // so a duration of 40ms would be any event that spans 2.5 or more frames\n      // at 60Hz. This threshold is chosen to strike a balance between usefulness\n      // and performance. Running this callback for any interaction that spans\n      // just one or two frames is likely not worth the insight that could be\n      // gained.\n      durationThreshold: opts.durationThreshold != null ? opts.durationThreshold : DEFAULT_DURATION_THRESHOLD,\n    });\n\n    report = bindReporter(onReport, metric, INPThresholds, opts.reportAllChanges);\n\n    if (po) {\n      // Also observe entries of type `first-input`. This is useful in cases\n      // where the first interaction is less than the `durationThreshold`.\n      po.observe({ type: 'first-input', buffered: true });\n\n      onHidden(() => {\n        handleEntries(po.takeRecords() as INPMetric['entries']);\n        report(true);\n      });\n    }\n  });\n};\n","/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://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,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getInteractionCount } from './polyfills/interactionCountPolyfill';\n\ninterface Interaction {\n  id: number;\n  latency: number;\n  entries: PerformanceEventTiming[];\n}\n\ninterface EntryPreProcessingHook {\n  (entry: PerformanceEventTiming): void;\n}\n\n// A list of longest interactions on the page (by latency) sorted so the\n// longest one is first. The list is at most MAX_INTERACTIONS_TO_CONSIDER long.\nexport const longestInteractionList: Interaction[] = [];\n\n// A mapping of longest interactions by their interaction ID.\n// This is used for faster lookup.\nexport const longestInteractionMap: Map<number, Interaction> = new Map();\n\n// The default `durationThreshold` used across this library for observing\n// `event` entries via PerformanceObserver.\nexport const DEFAULT_DURATION_THRESHOLD = 40;\n\n// Used to store the interaction count after a bfcache restore, since p98\n// interaction latencies should only consider the current navigation.\nlet prevInteractionCount = 0;\n\n/**\n * Returns the interaction count since the last bfcache restore (or for the\n * full page lifecycle if there were no bfcache restores).\n */\nconst getInteractionCountForNavigation = () => {\n  return getInteractionCount() - prevInteractionCount;\n};\n\nexport const resetInteractions = () => {\n  prevInteractionCount = getInteractionCount();\n  longestInteractionList.length = 0;\n  longestInteractionMap.clear();\n};\n\n/**\n * Returns the estimated p98 longest interaction based on the stored\n * interaction candidates and the interaction count for the current page.\n */\nexport const estimateP98LongestInteraction = () => {\n  const candidateInteractionIndex = Math.min(\n    longestInteractionList.length - 1,\n    Math.floor(getInteractionCountForNavigation() / 50),\n  );\n\n  return longestInteractionList[candidateInteractionIndex];\n};\n\n// To prevent unnecessary memory usage on pages with lots of interactions,\n// store at most 10 of the longest interactions to consider as INP candidates.\nconst MAX_INTERACTIONS_TO_CONSIDER = 10;\n\n/**\n * A list of callback functions to run before each entry is processed.\n * Exposing this list allows the attribution build to hook into the\n * entry processing pipeline.\n */\nexport const entryPreProcessingCallbacks: EntryPreProcessingHook[] = [];\n\n/**\n * Takes a performance entry and adds it to the list of worst interactions\n * if its duration is long enough to make it among the worst. If the\n * entry is part of an existing interaction, it is merged and the latency\n * and entries list is updated as needed.\n */\nexport const processInteractionEntry = (entry: PerformanceEventTiming) => {\n  entryPreProcessingCallbacks.forEach(cb => cb(entry));\n\n  // Skip further processing for entries that cannot be INP candidates.\n  if (!(entry.interactionId || entry.entryType === 'first-input')) return;\n\n  // The least-long of the 10 longest interactions.\n  const minLongestInteraction = longestInteractionList[longestInteractionList.length - 1];\n\n  const existingInteraction = longestInteractionMap.get(entry.interactionId!);\n\n  // Only process the entry if it's possibly one of the ten longest,\n  // or if it's part of an existing interaction.\n  if (\n    existingInteraction ||\n    longestInteractionList.length < MAX_INTERACTIONS_TO_CONSIDER ||\n    (minLongestInteraction && entry.duration > minLongestInteraction.latency)\n  ) {\n    // If the interaction already exists, update it. Otherwise create one.\n    if (existingInteraction) {\n      // If the new entry has a longer duration, replace the old entries,\n      // otherwise add to the array.\n      if (entry.duration > existingInteraction.latency) {\n        existingInteraction.entries = [entry];\n        existingInteraction.latency = entry.duration;\n      } else if (\n        entry.duration === existingInteraction.latency &&\n        entry.startTime === existingInteraction.entries[0]?.startTime\n      ) {\n        existingInteraction.entries.push(entry);\n      }\n    } else {\n      const interaction = {\n        id: entry.interactionId!,\n        latency: entry.duration,\n        entries: [entry],\n      };\n      longestInteractionMap.set(interaction.id, interaction);\n      longestInteractionList.push(interaction);\n    }\n\n    // Sort the entries by latency (descending) and keep only the top ten.\n    longestInteractionList.sort((a, b) => b.latency - a.latency);\n    if (longestInteractionList.length > MAX_INTERACTIONS_TO_CONSIDER) {\n      longestInteractionList.splice(MAX_INTERACTIONS_TO_CONSIDER).forEach(i => longestInteractionMap.delete(i.id));\n    }\n  }\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://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,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\nimport { bindReporter } from './lib/bindReporter';\nimport { getActivationStart } from './lib/getActivationStart';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport { runOnce } from './lib/runOnce';\nimport { whenActivated } from './lib/whenActivated';\nimport { whenIdle } from './lib/whenIdle';\nimport type { LCPMetric, MetricRatingThresholds, ReportOpts } from './types';\n\n/** Thresholds for LCP. See https://web.dev/articles/lcp#what_is_a_good_lcp_score */\nexport const LCPThresholds: MetricRatingThresholds = [2500, 4000];\n\nconst reportedMetricIDs: Record<string, boolean> = {};\n\n/**\n * Calculates the [LCP](https://web.dev/articles/lcp) value for the current page and\n * calls the `callback` function once the value is ready (along with the\n * relevant `largest-contentful-paint` performance entry used to determine the\n * value). The reported value is a `DOMHighResTimeStamp`.\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called any time a new `largest-contentful-paint`\n * performance entry is dispatched, or once the final value of the metric has\n * been determined.\n */\nexport const onLCP = (onReport: (metric: LCPMetric) => void, opts: ReportOpts = {}) => {\n  whenActivated(() => {\n    const visibilityWatcher = getVisibilityWatcher();\n    const metric = initMetric('LCP');\n    let report: ReturnType<typeof bindReporter>;\n\n    const handleEntries = (entries: LCPMetric['entries']) => {\n      // If reportAllChanges is set then call this function for each entry,\n      // otherwise only consider the last one.\n      if (!opts.reportAllChanges) {\n        // eslint-disable-next-line no-param-reassign\n        entries = entries.slice(-1);\n      }\n\n      entries.forEach(entry => {\n        // Only report if the page wasn't hidden prior to LCP.\n        if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n          // The startTime attribute returns the value of the renderTime if it is\n          // not 0, and the value of the loadTime otherwise. The activationStart\n          // reference is used because LCP should be relative to page activation\n          // rather than navigation start if the page was pre-rendered. But in cases\n          // where `activationStart` occurs after the LCP, this time should be\n          // clamped at 0.\n          metric.value = Math.max(entry.startTime - getActivationStart(), 0);\n          metric.entries = [entry];\n          report();\n        }\n      });\n    };\n\n    const po = observe('largest-contentful-paint', handleEntries);\n\n    if (po) {\n      report = bindReporter(onReport, metric, LCPThresholds, opts.reportAllChanges);\n\n      const stopListening = runOnce(() => {\n        if (!reportedMetricIDs[metric.id]) {\n          handleEntries(po.takeRecords() as LCPMetric['entries']);\n          po.disconnect();\n          reportedMetricIDs[metric.id] = true;\n          report(true);\n        }\n      });\n\n      // Stop listening after input. Note: while scrolling is an input that\n      // stops LCP observation, it's unreliable since it can be programmatically\n      // generated. See: https://github.com/GoogleChrome/web-vitals/issues/75\n      ['keydown', 'click'].forEach(type => {\n        // Wrap in a setTimeout so the callback is run in a separate task\n        // to avoid extending the keyboard/click handler to reduce INP impact\n        // https://github.com/GoogleChrome/web-vitals/issues/383\n        if (WINDOW.document) {\n          addEventListener(type, () => whenIdle(stopListening as () => void), {\n            once: true,\n            capture: true,\n          });\n        }\n      });\n\n      onHidden(stopListening);\n    }\n  });\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://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,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\nimport { bindReporter } from './lib/bindReporter';\nimport { getActivationStart } from './lib/getActivationStart';\nimport { getNavigationEntry } from './lib/getNavigationEntry';\nimport { initMetric } from './lib/initMetric';\nimport { whenActivated } from './lib/whenActivated';\nimport type { MetricRatingThresholds, ReportOpts, TTFBMetric } from './types';\n\n/** Thresholds for TTFB. See https://web.dev/articles/ttfb#what_is_a_good_ttfb_score */\nexport const TTFBThresholds: MetricRatingThresholds = [800, 1800];\n\n/**\n * Runs in the next task after the page is done loading and/or prerendering.\n * @param callback\n */\nconst whenReady = (callback: () => void) => {\n  if (WINDOW.document?.prerendering) {\n    whenActivated(() => whenReady(callback));\n  } else if (WINDOW.document?.readyState !== 'complete') {\n    addEventListener('load', () => whenReady(callback), true);\n  } else {\n    // Queue a task so the callback runs after `loadEventEnd`.\n    setTimeout(callback, 0);\n  }\n};\n\n/**\n * Calculates the [TTFB](https://web.dev/articles/ttfb) value for the\n * current page and calls the `callback` function once the page has loaded,\n * along with the relevant `navigation` performance entry used to determine the\n * value. The reported value is a `DOMHighResTimeStamp`.\n *\n * Note, this function waits until after the page is loaded to call `callback`\n * in order to ensure all properties of the `navigation` entry are populated.\n * This is useful if you want to report on other metrics exposed by the\n * [Navigation Timing API](https://w3c.github.io/navigation-timing/). For\n * example, the TTFB metric starts from the page's [time\n * origin](https://www.w3.org/TR/hr-time-2/#sec-time-origin), which means it\n * includes time spent on DNS lookup, connection negotiation, network latency,\n * and server processing time.\n */\nexport const onTTFB = (onReport: (metric: TTFBMetric) => void, opts: ReportOpts = {}) => {\n  const metric = initMetric('TTFB');\n  const report = bindReporter(onReport, metric, TTFBThresholds, opts.reportAllChanges);\n\n  whenReady(() => {\n    const navigationEntry = getNavigationEntry();\n\n    if (navigationEntry) {\n      // The activationStart reference is used because TTFB should be\n      // relative to page activation rather than navigation start if the\n      // page was prerendered. But in cases where `activationStart` occurs\n      // after the first byte is received, this time should be clamped at 0.\n      metric.value = Math.max(navigationEntry.responseStart - getActivationStart(), 0);\n\n      metric.entries = [navigationEntry];\n      report(true);\n    }\n  });\n};\n","/* eslint-disable max-lines */\nimport type { Measurements, Span, SpanAttributes, StartSpanOptions } from '@sentry/core';\nimport {\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  browserPerformanceTimeOrigin,\n  getActiveSpan,\n  getComponentName,\n  htmlTreeAsString,\n  parseUrl,\n  setMeasurement,\n  spanToJSON,\n} from '@sentry/core';\nimport { WINDOW } from '../types';\nimport { trackClsAsStandaloneSpan } from './cls';\nimport {\n  type PerformanceLongAnimationFrameTiming,\n  addClsInstrumentationHandler,\n  addFidInstrumentationHandler,\n  addLcpInstrumentationHandler,\n  addPerformanceInstrumentationHandler,\n  addTtfbInstrumentationHandler,\n} from './instrument';\nimport {\n  extractNetworkProtocol,\n  getBrowserPerformanceAPI,\n  isMeasurementValue,\n  msToSec,\n  startAndEndSpan,\n} from './utils';\nimport { getActivationStart } from './web-vitals/lib/getActivationStart';\nimport { getNavigationEntry } from './web-vitals/lib/getNavigationEntry';\nimport { getVisibilityWatcher } from './web-vitals/lib/getVisibilityWatcher';\n\ninterface NavigatorNetworkInformation {\n  readonly connection?: NetworkInformation;\n}\n\n// http://wicg.github.io/netinfo/#connection-types\ntype ConnectionType = 'bluetooth' | 'cellular' | 'ethernet' | 'mixed' | 'none' | 'other' | 'unknown' | 'wifi' | 'wimax';\n\n// http://wicg.github.io/netinfo/#effectiveconnectiontype-enum\ntype EffectiveConnectionType = '2g' | '3g' | '4g' | 'slow-2g';\n\n// http://wicg.github.io/netinfo/#dom-megabit\ntype Megabit = number;\n// http://wicg.github.io/netinfo/#dom-millisecond\ntype Millisecond = number;\n\n// http://wicg.github.io/netinfo/#networkinformation-interface\ninterface NetworkInformation extends EventTarget {\n  // http://wicg.github.io/netinfo/#type-attribute\n  readonly type?: ConnectionType;\n  // http://wicg.github.io/netinfo/#effectivetype-attribute\n  readonly effectiveType?: EffectiveConnectionType;\n  // http://wicg.github.io/netinfo/#downlinkmax-attribute\n  readonly downlinkMax?: Megabit;\n  // http://wicg.github.io/netinfo/#downlink-attribute\n  readonly downlink?: Megabit;\n  // http://wicg.github.io/netinfo/#rtt-attribute\n  readonly rtt?: Millisecond;\n  // http://wicg.github.io/netinfo/#savedata-attribute\n  readonly saveData?: boolean;\n  // http://wicg.github.io/netinfo/#handling-changes-to-the-underlying-connection\n  onchange?: EventListener;\n}\n\n// https://w3c.github.io/device-memory/#sec-device-memory-js-api\ninterface NavigatorDeviceMemory {\n  readonly deviceMemory?: number;\n}\n\nconst MAX_INT_AS_BYTES = 2147483647;\n\nlet _performanceCursor: number = 0;\n\nlet _measurements: Measurements = {};\nlet _lcpEntry: LargestContentfulPaint | undefined;\nlet _clsEntry: LayoutShift | undefined;\n\ninterface StartTrackingWebVitalsOptions {\n  recordClsStandaloneSpans: boolean;\n}\n\n/**\n * Start tracking web vitals.\n * The callback returned by this function can be used to stop tracking & ensure all measurements are final & captured.\n *\n * @returns A function that forces web vitals collection\n */\nexport function startTrackingWebVitals({ recordClsStandaloneSpans }: StartTrackingWebVitalsOptions): () => void {\n  const performance = getBrowserPerformanceAPI();\n  if (performance && browserPerformanceTimeOrigin()) {\n    // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n    if (performance.mark) {\n      WINDOW.performance.mark('sentry-tracing-init');\n    }\n    const fidCleanupCallback = _trackFID();\n    const lcpCleanupCallback = _trackLCP();\n    const ttfbCleanupCallback = _trackTtfb();\n    const clsCleanupCallback = recordClsStandaloneSpans ? trackClsAsStandaloneSpan() : _trackCLS();\n\n    return (): void => {\n      fidCleanupCallback();\n      lcpCleanupCallback();\n      ttfbCleanupCallback();\n      clsCleanupCallback?.();\n    };\n  }\n\n  return () => undefined;\n}\n\n/**\n * Start tracking long tasks.\n */\nexport function startTrackingLongTasks(): void {\n  addPerformanceInstrumentationHandler('longtask', ({ entries }) => {\n    const parent = getActiveSpan();\n    if (!parent) {\n      return;\n    }\n\n    const { op: parentOp, start_timestamp: parentStartTimestamp } = spanToJSON(parent);\n\n    for (const entry of entries) {\n      const startTime = msToSec((browserPerformanceTimeOrigin() as number) + entry.startTime);\n      const duration = msToSec(entry.duration);\n\n      if (parentOp === 'navigation' && parentStartTimestamp && startTime < parentStartTimestamp) {\n        // Skip adding a span if the long task started before the navigation started.\n        // `startAndEndSpan` will otherwise adjust the parent's start time to the span's start\n        // time, potentially skewing the duration of the actual navigation as reported via our\n        // routing instrumentations\n        continue;\n      }\n\n      startAndEndSpan(parent, startTime, startTime + duration, {\n        name: 'Main UI thread blocked',\n        op: 'ui.long-task',\n        attributes: {\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n        },\n      });\n    }\n  });\n}\n\n/**\n * Start tracking long animation frames.\n */\nexport function startTrackingLongAnimationFrames(): void {\n  // NOTE: the current web-vitals version (3.5.2) does not support long-animation-frame, so\n  // we directly observe `long-animation-frame` events instead of through the web-vitals\n  // `observe` helper function.\n  const observer = new PerformanceObserver(list => {\n    const parent = getActiveSpan();\n    if (!parent) {\n      return;\n    }\n    for (const entry of list.getEntries() as PerformanceLongAnimationFrameTiming[]) {\n      if (!entry.scripts[0]) {\n        continue;\n      }\n\n      const startTime = msToSec((browserPerformanceTimeOrigin() as number) + entry.startTime);\n\n      const { start_timestamp: parentStartTimestamp, op: parentOp } = spanToJSON(parent);\n\n      if (parentOp === 'navigation' && parentStartTimestamp && startTime < parentStartTimestamp) {\n        // Skip adding the span if the long animation frame started before the navigation started.\n        // `startAndEndSpan` will otherwise adjust the parent's start time to the span's start\n        // time, potentially skewing the duration of the actual navigation as reported via our\n        // routing instrumentations\n        continue;\n      }\n      const duration = msToSec(entry.duration);\n\n      const attributes: SpanAttributes = {\n        [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n      };\n\n      const initialScript = entry.scripts[0];\n      const { invoker, invokerType, sourceURL, sourceFunctionName, sourceCharPosition } = initialScript;\n      attributes['browser.script.invoker'] = invoker;\n      attributes['browser.script.invoker_type'] = invokerType;\n      if (sourceURL) {\n        attributes['code.filepath'] = sourceURL;\n      }\n      if (sourceFunctionName) {\n        attributes['code.function'] = sourceFunctionName;\n      }\n      if (sourceCharPosition !== -1) {\n        attributes['browser.script.source_char_position'] = sourceCharPosition;\n      }\n\n      startAndEndSpan(parent, startTime, startTime + duration, {\n        name: 'Main UI thread blocked',\n        op: 'ui.long-animation-frame',\n        attributes,\n      });\n    }\n  });\n\n  observer.observe({ type: 'long-animation-frame', buffered: true });\n}\n\n/**\n * Start tracking interaction events.\n */\nexport function startTrackingInteractions(): void {\n  addPerformanceInstrumentationHandler('event', ({ entries }) => {\n    const parent = getActiveSpan();\n    if (!parent) {\n      return;\n    }\n    for (const entry of entries) {\n      if (entry.name === 'click') {\n        const startTime = msToSec((browserPerformanceTimeOrigin() as number) + entry.startTime);\n        const duration = msToSec(entry.duration);\n\n        const spanOptions: StartSpanOptions & Required<Pick<StartSpanOptions, 'attributes'>> = {\n          name: htmlTreeAsString(entry.target),\n          op: `ui.interaction.${entry.name}`,\n          startTime: startTime,\n          attributes: {\n            [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n          },\n        };\n\n        const componentName = getComponentName(entry.target);\n        if (componentName) {\n          spanOptions.attributes['ui.component_name'] = componentName;\n        }\n\n        startAndEndSpan(parent, startTime, startTime + duration, spanOptions);\n      }\n    }\n  });\n}\n\nexport { registerInpInteractionListener, startTrackingINP } from './inp';\n\n/**\n * Starts tracking the Cumulative Layout Shift on the current page and collects the value and last entry\n * to the `_measurements` object which ultimately is applied to the pageload span's measurements.\n */\nfunction _trackCLS(): () => void {\n  return addClsInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1] as LayoutShift | undefined;\n    if (!entry) {\n      return;\n    }\n    _measurements['cls'] = { value: metric.value, unit: '' };\n    _clsEntry = entry;\n  }, true);\n}\n\n/** Starts tracking the Largest Contentful Paint on the current page. */\nfunction _trackLCP(): () => void {\n  return addLcpInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n\n    _measurements['lcp'] = { value: metric.value, unit: 'millisecond' };\n    _lcpEntry = entry as LargestContentfulPaint;\n  }, true);\n}\n\n/** Starts tracking the First Input Delay on the current page. */\nfunction _trackFID(): () => void {\n  return addFidInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n\n    const timeOrigin = msToSec(browserPerformanceTimeOrigin() as number);\n    const startTime = msToSec(entry.startTime);\n    _measurements['fid'] = { value: metric.value, unit: 'millisecond' };\n    _measurements['mark.fid'] = { value: timeOrigin + startTime, unit: 'second' };\n  });\n}\n\nfunction _trackTtfb(): () => void {\n  return addTtfbInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n\n    _measurements['ttfb'] = { value: metric.value, unit: 'millisecond' };\n  });\n}\n\ninterface AddPerformanceEntriesOptions {\n  /**\n   * Flag to determine if CLS should be recorded as a measurement on the span or\n   * sent as a standalone span instead.\n   */\n  recordClsOnPageloadSpan: boolean;\n}\n\n/** Add performance related spans to a transaction */\nexport function addPerformanceEntries(span: Span, options: AddPerformanceEntriesOptions): void {\n  const performance = getBrowserPerformanceAPI();\n  const origin = browserPerformanceTimeOrigin();\n  if (!performance?.getEntries || !origin) {\n    // Gatekeeper if performance API not available\n    return;\n  }\n\n  const timeOrigin = msToSec(origin);\n\n  const performanceEntries = performance.getEntries();\n\n  const { op, start_timestamp: transactionStartTime } = spanToJSON(span);\n\n  performanceEntries.slice(_performanceCursor).forEach(entry => {\n    const startTime = msToSec(entry.startTime);\n    const duration = msToSec(\n      // Inexplicably, Chrome sometimes emits a negative duration. We need to work around this.\n      // There is a SO post attempting to explain this, but it leaves one with open questions: https://stackoverflow.com/questions/23191918/peformance-getentries-and-negative-duration-display\n      // The way we clamp the value is probably not accurate, since we have observed this happen for things that may take a while to load, like for example the replay worker.\n      // TODO: Investigate why this happens and how to properly mitigate. For now, this is a workaround to prevent transactions being dropped due to negative duration spans.\n      Math.max(0, entry.duration),\n    );\n\n    if (op === 'navigation' && transactionStartTime && timeOrigin + startTime < transactionStartTime) {\n      return;\n    }\n\n    switch (entry.entryType) {\n      case 'navigation': {\n        _addNavigationSpans(span, entry as PerformanceNavigationTiming, timeOrigin);\n        break;\n      }\n      case 'mark':\n      case 'paint':\n      case 'measure': {\n        _addMeasureSpans(span, entry, startTime, duration, timeOrigin);\n\n        // capture web vitals\n        const firstHidden = getVisibilityWatcher();\n        // Only report if the page wasn't hidden prior to the web vital.\n        const shouldRecord = entry.startTime < firstHidden.firstHiddenTime;\n\n        if (entry.name === 'first-paint' && shouldRecord) {\n          _measurements['fp'] = { value: entry.startTime, unit: 'millisecond' };\n        }\n        if (entry.name === 'first-contentful-paint' && shouldRecord) {\n          _measurements['fcp'] = { value: entry.startTime, unit: 'millisecond' };\n        }\n        break;\n      }\n      case 'resource': {\n        _addResourceSpans(span, entry as PerformanceResourceTiming, entry.name, startTime, duration, timeOrigin);\n        break;\n      }\n      // Ignore other entry types.\n    }\n  });\n\n  _performanceCursor = Math.max(performanceEntries.length - 1, 0);\n\n  _trackNavigator(span);\n\n  // Measurements are only available for pageload transactions\n  if (op === 'pageload') {\n    _addTtfbRequestTimeToMeasurements(_measurements);\n\n    const fidMark = _measurements['mark.fid'];\n    if (fidMark && _measurements['fid']) {\n      // create span for FID\n      startAndEndSpan(span, fidMark.value, fidMark.value + msToSec(_measurements['fid'].value), {\n        name: 'first input delay',\n        op: 'ui.action',\n        attributes: {\n          [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n        },\n      });\n\n      // Delete mark.fid as we don't want it to be part of final payload\n      delete _measurements['mark.fid'];\n    }\n\n    // If FCP is not recorded we should not record the cls value\n    // according to the new definition of CLS.\n    // TODO: Check if the first condition is still necessary: `onCLS` already only fires once `onFCP` was called.\n    if (!('fcp' in _measurements) || !options.recordClsOnPageloadSpan) {\n      delete _measurements.cls;\n    }\n\n    Object.entries(_measurements).forEach(([measurementName, measurement]) => {\n      setMeasurement(measurementName, measurement.value, measurement.unit);\n    });\n\n    // Set timeOrigin which denotes the timestamp which to base the LCP/FCP/FP/TTFB measurements on\n    span.setAttribute('performance.timeOrigin', timeOrigin);\n\n    // In prerendering scenarios, where a page might be prefetched and pre-rendered before the user clicks the link,\n    // the navigation starts earlier than when the user clicks it. Web Vitals should always be based on the\n    // user-perceived time, so they are not reported from the actual start of the navigation, but rather from the\n    // time where the user actively started the navigation, for example by clicking a link.\n    // This is user action is called \"activation\" and the time between navigation and activation is stored in\n    // the `activationStart` attribute of the \"navigation\" PerformanceEntry.\n    span.setAttribute('performance.activationStart', getActivationStart());\n\n    _setWebVitalAttributes(span);\n  }\n\n  _lcpEntry = undefined;\n  _clsEntry = undefined;\n  _measurements = {};\n}\n\n/**\n * Create measure related spans.\n * Exported only for tests.\n */\nexport function _addMeasureSpans(\n  span: Span,\n  entry: PerformanceEntry,\n  startTime: number,\n  duration: number,\n  timeOrigin: number,\n): void {\n  const navEntry = getNavigationEntry(false);\n  const requestTime = msToSec(navEntry ? navEntry.requestStart : 0);\n  // Because performance.measure accepts arbitrary timestamps it can produce\n  // spans that happen before the browser even makes a request for the page.\n  //\n  // An example of this is the automatically generated Next.js-before-hydration\n  // spans created by the Next.js framework.\n  //\n  // To prevent this we will pin the start timestamp to the request start time\n  // This does make duration inaccurate, so if this does happen, we will add\n  // an attribute to the span\n  const measureStartTimestamp = timeOrigin + Math.max(startTime, requestTime);\n  const startTimeStamp = timeOrigin + startTime;\n  const measureEndTimestamp = startTimeStamp + duration;\n\n  const attributes: SpanAttributes = {\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.resource.browser.metrics',\n  };\n\n  if (measureStartTimestamp !== startTimeStamp) {\n    attributes['sentry.browser.measure_happened_before_request'] = true;\n    attributes['sentry.browser.measure_start_time'] = measureStartTimestamp;\n  }\n\n  // Measurements from third parties can be off, which would create invalid spans, dropping transactions in the process.\n  if (measureStartTimestamp <= measureEndTimestamp) {\n    startAndEndSpan(span, measureStartTimestamp, measureEndTimestamp, {\n      name: entry.name as string,\n      op: entry.entryType as string,\n      attributes,\n    });\n  }\n}\n\n/** Instrument navigation entries */\nfunction _addNavigationSpans(span: Span, entry: PerformanceNavigationTiming, timeOrigin: number): void {\n  (['unloadEvent', 'redirect', 'domContentLoadedEvent', 'loadEvent', 'connect'] as const).forEach(event => {\n    _addPerformanceNavigationTiming(span, entry, event, timeOrigin);\n  });\n  _addPerformanceNavigationTiming(span, entry, 'secureConnection', timeOrigin, 'TLS/SSL');\n  _addPerformanceNavigationTiming(span, entry, 'fetch', timeOrigin, 'cache');\n  _addPerformanceNavigationTiming(span, entry, 'domainLookup', timeOrigin, 'DNS');\n\n  _addRequest(span, entry, timeOrigin);\n}\n\ntype StartEventName =\n  | 'secureConnection'\n  | 'fetch'\n  | 'domainLookup'\n  | 'unloadEvent'\n  | 'redirect'\n  | 'connect'\n  | 'domContentLoadedEvent'\n  | 'loadEvent';\n\ntype EndEventName =\n  | 'connectEnd'\n  | 'domainLookupStart'\n  | 'domainLookupEnd'\n  | 'unloadEventEnd'\n  | 'redirectEnd'\n  | 'connectEnd'\n  | 'domContentLoadedEventEnd'\n  | 'loadEventEnd';\n\n/** Create performance navigation related spans */\nfunction _addPerformanceNavigationTiming(\n  span: Span,\n  entry: PerformanceNavigationTiming,\n  event: StartEventName,\n  timeOrigin: number,\n  name: string = event,\n): void {\n  const eventEnd = _getEndPropertyNameForNavigationTiming(event) satisfies keyof PerformanceNavigationTiming;\n  const end = entry[eventEnd];\n  const start = entry[`${event}Start`];\n  if (!start || !end) {\n    return;\n  }\n  startAndEndSpan(span, timeOrigin + msToSec(start), timeOrigin + msToSec(end), {\n    op: `browser.${name}`,\n    name: entry.name,\n    attributes: {\n      [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n    },\n  });\n}\n\nfunction _getEndPropertyNameForNavigationTiming(event: StartEventName): EndEventName {\n  if (event === 'secureConnection') {\n    return 'connectEnd';\n  }\n  if (event === 'fetch') {\n    return 'domainLookupStart';\n  }\n  return `${event}End`;\n}\n\n/** Create request and response related spans */\nfunction _addRequest(span: Span, entry: PerformanceNavigationTiming, timeOrigin: number): void {\n  const requestStartTimestamp = timeOrigin + msToSec(entry.requestStart as number);\n  const responseEndTimestamp = timeOrigin + msToSec(entry.responseEnd as number);\n  const responseStartTimestamp = timeOrigin + msToSec(entry.responseStart as number);\n  if (entry.responseEnd) {\n    // It is possible that we are collecting these metrics when the page hasn't finished loading yet, for example when the HTML slowly streams in.\n    // In this case, ie. when the document request hasn't finished yet, `entry.responseEnd` will be 0.\n    // In order not to produce faulty spans, where the end timestamp is before the start timestamp, we will only collect\n    // these spans when the responseEnd value is available. The backend (Relay) would drop the entire span if it contained faulty spans.\n    startAndEndSpan(span, requestStartTimestamp, responseEndTimestamp, {\n      op: 'browser.request',\n      name: entry.name,\n      attributes: {\n        [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n      },\n    });\n\n    startAndEndSpan(span, responseStartTimestamp, responseEndTimestamp, {\n      op: 'browser.response',\n      name: entry.name,\n      attributes: {\n        [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n      },\n    });\n  }\n}\n\n/**\n * Create resource-related spans.\n * Exported only for tests.\n */\nexport function _addResourceSpans(\n  span: Span,\n  entry: PerformanceResourceTiming,\n  resourceUrl: string,\n  startTime: number,\n  duration: number,\n  timeOrigin: number,\n): void {\n  // we already instrument based on fetch and xhr, so we don't need to\n  // duplicate spans here.\n  if (entry.initiatorType === 'xmlhttprequest' || entry.initiatorType === 'fetch') {\n    return;\n  }\n\n  const parsedUrl = parseUrl(resourceUrl);\n\n  const attributes: SpanAttributes = {\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.resource.browser.metrics',\n  };\n  setResourceEntrySizeData(attributes, entry, 'transferSize', 'http.response_transfer_size');\n  setResourceEntrySizeData(attributes, entry, 'encodedBodySize', 'http.response_content_length');\n  setResourceEntrySizeData(attributes, entry, 'decodedBodySize', 'http.decoded_response_content_length');\n\n  // `deliveryType` is experimental and does not exist everywhere\n  const deliveryType = (entry as { deliveryType?: 'cache' | 'navigational-prefetch' | '' }).deliveryType;\n  if (deliveryType != null) {\n    attributes['http.response_delivery_type'] = deliveryType;\n  }\n\n  // Types do not reflect this property yet\n  const renderBlockingStatus = (entry as { renderBlockingStatus?: 'render-blocking' | 'non-render-blocking' })\n    .renderBlockingStatus;\n  if (renderBlockingStatus) {\n    attributes['resource.render_blocking_status'] = renderBlockingStatus;\n  }\n\n  if (parsedUrl.protocol) {\n    attributes['url.scheme'] = parsedUrl.protocol.split(':').pop(); // the protocol returned by parseUrl includes a :, but OTEL spec does not, so we remove it.\n  }\n\n  if (parsedUrl.host) {\n    attributes['server.address'] = parsedUrl.host;\n  }\n\n  attributes['url.same_origin'] = resourceUrl.includes(WINDOW.location.origin);\n\n  const { name, version } = extractNetworkProtocol(entry.nextHopProtocol);\n  attributes['network.protocol.name'] = name;\n  attributes['network.protocol.version'] = version;\n\n  const startTimestamp = timeOrigin + startTime;\n  const endTimestamp = startTimestamp + duration;\n\n  startAndEndSpan(span, startTimestamp, endTimestamp, {\n    name: resourceUrl.replace(WINDOW.location.origin, ''),\n    op: entry.initiatorType ? `resource.${entry.initiatorType}` : 'resource.other',\n    attributes,\n  });\n}\n\n/**\n * Capture the information of the user agent.\n */\nfunction _trackNavigator(span: Span): void {\n  const navigator = WINDOW.navigator as null | (Navigator & NavigatorNetworkInformation & NavigatorDeviceMemory);\n  if (!navigator) {\n    return;\n  }\n\n  // track network connectivity\n  const connection = navigator.connection;\n  if (connection) {\n    if (connection.effectiveType) {\n      span.setAttribute('effectiveConnectionType', connection.effectiveType);\n    }\n\n    if (connection.type) {\n      span.setAttribute('connectionType', connection.type);\n    }\n\n    if (isMeasurementValue(connection.rtt)) {\n      _measurements['connection.rtt'] = { value: connection.rtt, unit: 'millisecond' };\n    }\n  }\n\n  if (isMeasurementValue(navigator.deviceMemory)) {\n    span.setAttribute('deviceMemory', `${navigator.deviceMemory} GB`);\n  }\n\n  if (isMeasurementValue(navigator.hardwareConcurrency)) {\n    span.setAttribute('hardwareConcurrency', String(navigator.hardwareConcurrency));\n  }\n}\n\n/** Add LCP / CLS data to span to allow debugging */\nfunction _setWebVitalAttributes(span: Span): void {\n  if (_lcpEntry) {\n    // Capture Properties of the LCP element that contributes to the LCP.\n\n    if (_lcpEntry.element) {\n      span.setAttribute('lcp.element', htmlTreeAsString(_lcpEntry.element));\n    }\n\n    if (_lcpEntry.id) {\n      span.setAttribute('lcp.id', _lcpEntry.id);\n    }\n\n    if (_lcpEntry.url) {\n      // Trim URL to the first 200 characters.\n      span.setAttribute('lcp.url', _lcpEntry.url.trim().slice(0, 200));\n    }\n\n    if (_lcpEntry.loadTime != null) {\n      // loadTime is the time of LCP that's related to receiving the LCP element response..\n      span.setAttribute('lcp.loadTime', _lcpEntry.loadTime);\n    }\n\n    if (_lcpEntry.renderTime != null) {\n      // renderTime is loadTime + rendering time\n      // it's 0 if the LCP element is loaded from a 3rd party origin that doesn't send the\n      // `Timing-Allow-Origin` header.\n      span.setAttribute('lcp.renderTime', _lcpEntry.renderTime);\n    }\n\n    span.setAttribute('lcp.size', _lcpEntry.size);\n  }\n\n  // See: https://developer.mozilla.org/en-US/docs/Web/API/LayoutShift\n  if (_clsEntry?.sources) {\n    _clsEntry.sources.forEach((source, index) =>\n      span.setAttribute(`cls.source.${index + 1}`, htmlTreeAsString(source.node)),\n    );\n  }\n}\n\nfunction setResourceEntrySizeData(\n  attributes: SpanAttributes,\n  entry: PerformanceResourceTiming,\n  key: keyof Pick<PerformanceResourceTiming, 'transferSize' | 'encodedBodySize' | 'decodedBodySize'>,\n  dataKey: 'http.response_transfer_size' | 'http.response_content_length' | 'http.decoded_response_content_length',\n): void {\n  const entryVal = entry[key];\n  if (entryVal != null && entryVal < MAX_INT_AS_BYTES) {\n    attributes[dataKey] = entryVal;\n  }\n}\n\n/**\n * Add ttfb request time information to measurements.\n *\n * ttfb information is added via vendored web vitals library.\n */\nfunction _addTtfbRequestTimeToMeasurements(_measurements: Measurements): void {\n  const navEntry = getNavigationEntry(false);\n  if (!navEntry) {\n    return;\n  }\n\n  const { responseStart, requestStart } = navEntry;\n\n  if (requestStart <= responseStart) {\n    _measurements['ttfb.requestTime'] = {\n      value: responseStart - requestStart,\n      unit: 'millisecond',\n    };\n  }\n}\n","import {\n  SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME,\n  SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT,\n  SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  getActiveSpan,\n  getClient,\n  getCurrentScope,\n  getRootSpan,\n  spanToJSON,\n} from '@sentry/core';\nimport { browserPerformanceTimeOrigin, dropUndefinedKeys, htmlTreeAsString, logger } from '@sentry/core';\nimport type { SpanAttributes } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { addClsInstrumentationHandler } from './instrument';\nimport { msToSec, startStandaloneWebVitalSpan } from './utils';\nimport { onHidden } from './web-vitals/lib/onHidden';\n\n/**\n * Starts tracking the Cumulative Layout Shift on the current page and collects the value once\n *\n * - the page visibility is hidden\n * - a navigation span is started (to stop CLS measurement for SPA soft navigations)\n *\n * Once either of these events triggers, the CLS value is sent as a standalone span and we stop\n * measuring CLS.\n */\nexport function trackClsAsStandaloneSpan(): void {\n  let standaloneCLsValue = 0;\n  let standaloneClsEntry: LayoutShift | undefined;\n  let pageloadSpanId: string | undefined;\n\n  if (!supportsLayoutShift()) {\n    return;\n  }\n\n  let sentSpan = false;\n  function _collectClsOnce() {\n    if (sentSpan) {\n      return;\n    }\n    sentSpan = true;\n    if (pageloadSpanId) {\n      sendStandaloneClsSpan(standaloneCLsValue, standaloneClsEntry, pageloadSpanId);\n    }\n    cleanupClsHandler();\n  }\n\n  const cleanupClsHandler = addClsInstrumentationHandler(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1] as LayoutShift | undefined;\n    if (!entry) {\n      return;\n    }\n    standaloneCLsValue = metric.value;\n    standaloneClsEntry = entry;\n  }, true);\n\n  // use pagehide event from web-vitals\n  onHidden(() => {\n    _collectClsOnce();\n  });\n\n  // Since the call chain of this function is synchronous and evaluates before the SDK client is created,\n  // we need to wait with subscribing to a client hook until the client is created. Therefore, we defer\n  // to the next tick after the SDK setup.\n  setTimeout(() => {\n    const client = getClient();\n\n    if (!client) {\n      return;\n    }\n\n    const unsubscribeStartNavigation = client.on('startNavigationSpan', () => {\n      _collectClsOnce();\n      unsubscribeStartNavigation?.();\n    });\n\n    const activeSpan = getActiveSpan();\n    if (activeSpan) {\n      const rootSpan = getRootSpan(activeSpan);\n      const spanJSON = spanToJSON(rootSpan);\n      if (spanJSON.op === 'pageload') {\n        pageloadSpanId = rootSpan.spanContext().spanId;\n      }\n    }\n  }, 0);\n}\n\nfunction sendStandaloneClsSpan(clsValue: number, entry: LayoutShift | undefined, pageloadSpanId: string) {\n  DEBUG_BUILD && logger.log(`Sending CLS span (${clsValue})`);\n\n  const startTime = msToSec((browserPerformanceTimeOrigin() || 0) + (entry?.startTime || 0));\n  const routeName = getCurrentScope().getScopeData().transactionName;\n\n  const name = entry ? htmlTreeAsString(entry.sources[0]?.node) : 'Layout shift';\n\n  const attributes: SpanAttributes = dropUndefinedKeys({\n    [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser.cls',\n    [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'ui.webvital.cls',\n    [SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME]: entry?.duration || 0,\n    // attach the pageload span id to the CLS span so that we can link them in the UI\n    'sentry.pageload.span_id': pageloadSpanId,\n  });\n\n  const span = startStandaloneWebVitalSpan({\n    name,\n    transaction: routeName,\n    attributes,\n    startTime,\n  });\n\n  if (span) {\n    span.addEvent('cls', {\n      [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: '',\n      [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: clsValue,\n    });\n\n    // LayoutShift performance entries always have a duration of 0, so we don't need to add `entry.duration` here\n    // see: https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntry/duration\n    span.end(startTime);\n  }\n}\n\nfunction supportsLayoutShift(): boolean {\n  try {\n    return PerformanceObserver.supportedEntryTypes.includes('layout-shift');\n  } catch {\n    return false;\n  }\n}\n","import type { HandlerDataDom } from '@sentry/core';\nimport { addHandler, addNonEnumerableProperty, fill, maybeInstrument, triggerHandlers, uuid4 } from '@sentry/core';\nimport { WINDOW } from '../types';\n\ntype SentryWrappedTarget = HTMLElement & { _sentryId?: string };\n\ntype AddEventListener = (\n  type: string,\n  listener: EventListenerOrEventListenerObject,\n  options?: boolean | AddEventListenerOptions,\n) => void;\ntype RemoveEventListener = (\n  type: string,\n  listener: EventListenerOrEventListenerObject,\n  options?: boolean | EventListenerOptions,\n) => void;\n\ntype InstrumentedElement = Element & {\n  __sentry_instrumentation_handlers__?: {\n    [key in 'click' | 'keypress']?: {\n      handler?: unknown;\n      /** The number of custom listeners attached to this element */\n      refCount: number;\n    };\n  };\n};\n\nconst DEBOUNCE_DURATION = 1000;\n\nlet debounceTimerID: number | undefined;\nlet lastCapturedEventType: string | undefined;\nlet lastCapturedEventTargetId: string | undefined;\n\n/**\n * Add an instrumentation handler for when a click or a keypress happens.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addClickKeypressInstrumentationHandler(handler: (data: HandlerDataDom) => void): void {\n  const type = 'dom';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentDOM);\n}\n\n/** Exported for tests only. */\nexport function instrumentDOM(): void {\n  if (!WINDOW.document) {\n    return;\n  }\n\n  // Make it so that any click or keypress that is unhandled / bubbled up all the way to the document triggers our dom\n  // handlers. (Normally we have only one, which captures a breadcrumb for each click or keypress.) Do this before\n  // we instrument `addEventListener` so that we don't end up attaching this handler twice.\n  const triggerDOMHandler = triggerHandlers.bind(null, 'dom');\n  const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n  WINDOW.document.addEventListener('click', globalDOMEventHandler, false);\n  WINDOW.document.addEventListener('keypress', globalDOMEventHandler, false);\n\n  // After hooking into click and keypress events bubbled up to `document`, we also hook into user-handled\n  // clicks & keypresses, by adding an event listener of our own to any element to which they add a listener. That\n  // way, whenever one of their handlers is triggered, ours will be, too. (This is needed because their handler\n  // could potentially prevent the event from bubbling up to our global listeners. This way, our handler are still\n  // guaranteed to fire at least once.)\n  ['EventTarget', 'Node'].forEach((target: string) => {\n    const globalObject = WINDOW as unknown as Record<string, { prototype?: object }>;\n    const proto = globalObject[target]?.prototype;\n\n    // eslint-disable-next-line no-prototype-builtins\n    if (!proto?.hasOwnProperty?.('addEventListener')) {\n      return;\n    }\n\n    fill(proto, 'addEventListener', function (originalAddEventListener: AddEventListener): AddEventListener {\n      return function (this: InstrumentedElement, type, listener, options): AddEventListener {\n        if (type === 'click' || type == 'keypress') {\n          try {\n            const handlers = (this.__sentry_instrumentation_handlers__ =\n              this.__sentry_instrumentation_handlers__ || {});\n            const handlerForType = (handlers[type] = handlers[type] || { refCount: 0 });\n\n            if (!handlerForType.handler) {\n              const handler = makeDOMEventHandler(triggerDOMHandler);\n              handlerForType.handler = handler;\n              originalAddEventListener.call(this, type, handler, options);\n            }\n\n            handlerForType.refCount++;\n          } catch (e) {\n            // Accessing dom properties is always fragile.\n            // Also allows us to skip `addEventListeners` calls with no proper `this` context.\n          }\n        }\n\n        return originalAddEventListener.call(this, type, listener, options);\n      };\n    });\n\n    fill(\n      proto,\n      'removeEventListener',\n      function (originalRemoveEventListener: RemoveEventListener): RemoveEventListener {\n        return function (this: InstrumentedElement, type, listener, options): () => void {\n          if (type === 'click' || type == 'keypress') {\n            try {\n              const handlers = this.__sentry_instrumentation_handlers__ || {};\n              const handlerForType = handlers[type];\n\n              if (handlerForType) {\n                handlerForType.refCount--;\n                // If there are no longer any custom handlers of the current type on this element, we can remove ours, too.\n                if (handlerForType.refCount <= 0) {\n                  originalRemoveEventListener.call(this, type, handlerForType.handler, options);\n                  handlerForType.handler = undefined;\n                  delete handlers[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n                }\n\n                // If there are no longer any custom handlers of any type on this element, cleanup everything.\n                if (Object.keys(handlers).length === 0) {\n                  delete this.__sentry_instrumentation_handlers__;\n                }\n              }\n            } catch (e) {\n              // Accessing dom properties is always fragile.\n              // Also allows us to skip `addEventListeners` calls with no proper `this` context.\n            }\n          }\n\n          return originalRemoveEventListener.call(this, type, listener, options);\n        };\n      },\n    );\n  });\n}\n\n/**\n * Check whether the event is similar to the last captured one. For example, two click events on the same button.\n */\nfunction isSimilarToLastCapturedEvent(event: Event): boolean {\n  // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n  if (event.type !== lastCapturedEventType) {\n    return false;\n  }\n\n  try {\n    // If both events have the same type, it's still possible that actions were performed on different targets.\n    // e.g. 2 clicks on different buttons.\n    if (!event.target || (event.target as SentryWrappedTarget)._sentryId !== lastCapturedEventTargetId) {\n      return false;\n    }\n  } catch (e) {\n    // just accessing `target` property can throw an exception in some rare circumstances\n    // see: https://github.com/getsentry/sentry-javascript/issues/838\n  }\n\n  // If both events have the same type _and_ same `target` (an element which triggered an event, _not necessarily_\n  // to which an event listener was attached), we treat them as the same action, as we want to capture\n  // only one breadcrumb. e.g. multiple clicks on the same button, or typing inside a user input box.\n  return true;\n}\n\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\nfunction shouldSkipDOMEvent(eventType: string, target: SentryWrappedTarget | null): boolean {\n  // We are only interested in filtering `keypress` events for now.\n  if (eventType !== 'keypress') {\n    return false;\n  }\n\n  if (!target?.tagName) {\n    return true;\n  }\n\n  // Only consider keypress events on actual input elements. This will disregard keypresses targeting body\n  // e.g.tabbing through elements, hotkeys, etc.\n  if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n */\nfunction makeDOMEventHandler(\n  handler: (data: HandlerDataDom) => void,\n  globalListener: boolean = false,\n): (event: Event) => void {\n  return (event: Event & { _sentryCaptured?: true }): void => {\n    // It's possible this handler might trigger multiple times for the same\n    // event (e.g. event propagation through node ancestors).\n    // Ignore if we've already captured that event.\n    if (!event || event['_sentryCaptured']) {\n      return;\n    }\n\n    const target = getEventTarget(event);\n\n    // We always want to skip _some_ events.\n    if (shouldSkipDOMEvent(event.type, target)) {\n      return;\n    }\n\n    // Mark event as \"seen\"\n    addNonEnumerableProperty(event, '_sentryCaptured', true);\n\n    if (target && !target._sentryId) {\n      // Add UUID to event target so we can identify if\n      addNonEnumerableProperty(target, '_sentryId', uuid4());\n    }\n\n    const name = event.type === 'keypress' ? 'input' : event.type;\n\n    // If there is no last captured event, it means that we can safely capture the new event and store it for future comparisons.\n    // If there is a last captured event, see if the new event is different enough to treat it as a unique one.\n    // If that's the case, emit the previous event and store locally the newly-captured DOM event.\n    if (!isSimilarToLastCapturedEvent(event)) {\n      const handlerData: HandlerDataDom = { event, name, global: globalListener };\n      handler(handlerData);\n      lastCapturedEventType = event.type;\n      lastCapturedEventTargetId = target ? target._sentryId : undefined;\n    }\n\n    // Start a new debounce timer that will prevent us from capturing multiple events that should be grouped together.\n    clearTimeout(debounceTimerID);\n    debounceTimerID = WINDOW.setTimeout(() => {\n      lastCapturedEventTargetId = undefined;\n      lastCapturedEventType = undefined;\n    }, DEBOUNCE_DURATION);\n  };\n}\n\nfunction getEventTarget(event: Event): SentryWrappedTarget | null {\n  try {\n    return event.target as SentryWrappedTarget | null;\n  } catch (e) {\n    // just accessing `target` property can throw an exception in some rare circumstances\n    // see: https://github.com/getsentry/sentry-javascript/issues/838\n    return null;\n  }\n}\n","import type { HandlerDataHistory } from '@sentry/core';\nimport { addHandler, fill, maybeInstrument, supportsHistory, triggerHandlers } from '@sentry/core';\nimport { WINDOW } from '../types';\n\nlet lastHref: string | undefined;\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addHistoryInstrumentationHandler(handler: (data: HandlerDataHistory) => void): void {\n  const type = 'history';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentHistory);\n}\n\n/**\n * Exported just for testing\n */\nexport function instrumentHistory(): void {\n  // The `popstate` event may also be triggered on `pushState`, but it may not always reliably be emitted by the browser\n  // Which is why we also monkey-patch methods below, in addition to this\n  WINDOW.addEventListener('popstate', () => {\n    const to = WINDOW.location.href;\n    // keep track of the current URL state, as we always receive only the updated state\n    const from = lastHref;\n    lastHref = to;\n\n    if (from === to) {\n      return;\n    }\n\n    const handlerData = { from, to } satisfies HandlerDataHistory;\n    triggerHandlers('history', handlerData);\n  });\n\n  // Just guard against this not being available, in weird environments\n  if (!supportsHistory()) {\n    return;\n  }\n\n  function historyReplacementFunction(originalHistoryFunction: () => void): () => void {\n    return function (this: History, ...args: unknown[]): void {\n      const url = args.length > 2 ? args[2] : undefined;\n      if (url) {\n        // coerce to string (this is what pushState does)\n        const from = lastHref;\n        const to = String(url);\n        // keep track of the current URL state, as we always receive only the updated state\n        lastHref = to;\n\n        if (from === to) {\n          return originalHistoryFunction.apply(this, args);\n        }\n\n        const handlerData = { from, to } satisfies HandlerDataHistory;\n        triggerHandlers('history', handlerData);\n      }\n      return originalHistoryFunction.apply(this, args);\n    };\n  }\n\n  fill(WINDOW.history, 'pushState', historyReplacementFunction);\n  fill(WINDOW.history, 'replaceState', historyReplacementFunction);\n}\n","import { isNativeFunction, logger } from '@sentry/core';\nimport { DEBUG_BUILD } from './debug-build';\nimport { WINDOW } from './types';\n\n/**\n * We generally want to use window.fetch / window.setTimeout.\n * However, in some cases this may be wrapped (e.g. by Zone.js for Angular),\n * so we try to get an unpatched version of this from a sandboxed iframe.\n */\n\ninterface CacheableImplementations {\n  setTimeout: typeof WINDOW.setTimeout;\n  fetch: typeof WINDOW.fetch;\n}\n\nconst cachedImplementations: Partial<CacheableImplementations> = {};\n\n/**\n * Get the native implementation of a browser function.\n *\n * This can be used to ensure we get an unwrapped version of a function, in cases where a wrapped function can lead to problems.\n *\n * The following methods can be retrieved:\n * - `setTimeout`: This can be wrapped by e.g. Angular, causing change detection to be triggered.\n * - `fetch`: This can be wrapped by e.g. ad-blockers, causing an infinite loop when a request is blocked.\n */\nexport function getNativeImplementation<T extends keyof CacheableImplementations>(\n  name: T,\n): CacheableImplementations[T] {\n  const cached = cachedImplementations[name];\n  if (cached) {\n    return cached;\n  }\n\n  let impl = WINDOW[name] as CacheableImplementations[T];\n\n  // Fast path to avoid DOM I/O\n  if (isNativeFunction(impl)) {\n    return (cachedImplementations[name] = impl.bind(WINDOW) as CacheableImplementations[T]);\n  }\n\n  const document = WINDOW.document;\n  // eslint-disable-next-line deprecation/deprecation\n  if (document && typeof document.createElement === 'function') {\n    try {\n      const sandbox = document.createElement('iframe');\n      sandbox.hidden = true;\n      document.head.appendChild(sandbox);\n      const contentWindow = sandbox.contentWindow;\n      if (contentWindow?.[name]) {\n        impl = contentWindow[name] as CacheableImplementations[T];\n      }\n      document.head.removeChild(sandbox);\n    } catch (e) {\n      // Could not create sandbox iframe, just use window.xxx\n      DEBUG_BUILD && logger.warn(`Could not create sandbox iframe for ${name} check, bailing to window.${name}: `, e);\n    }\n  }\n\n  // Sanity check: This _should_ not happen, but if it does, we just skip caching...\n  // This can happen e.g. in tests where fetch may not be available in the env, or similar.\n  if (!impl) {\n    return impl;\n  }\n\n  return (cachedImplementations[name] = impl.bind(WINDOW) as CacheableImplementations[T]);\n}\n\n/** Clear a cached implementation. */\nexport function clearCachedImplementation(name: keyof CacheableImplementations): void {\n  cachedImplementations[name] = undefined;\n}\n\n/**\n * A special usecase for incorrectly wrapped Fetch APIs in conjunction with ad-blockers.\n * Whenever someone wraps the Fetch API and returns the wrong promise chain,\n * this chain becomes orphaned and there is no possible way to capture it's rejections\n * other than allowing it bubble up to this very handler. eg.\n *\n * const f = window.fetch;\n * window.fetch = function () {\n *   const p = f.apply(this, arguments);\n *\n *   p.then(function() {\n *     console.log('hi.');\n *   });\n *\n *   return p;\n * }\n *\n * `p.then(function () { ... })` is producing a completely separate promise chain,\n * however, what's returned is `p` - the result of original `fetch` call.\n *\n * This mean, that whenever we use the Fetch API to send our own requests, _and_\n * some ad-blocker blocks it, this orphaned chain will _always_ reject,\n * effectively causing another event to be captured.\n * This makes a whole process become an infinite loop, which we need to somehow\n * deal with, and break it in one way or another.\n *\n * To deal with this issue, we are making sure that we _always_ use the real\n * browser Fetch API, instead of relying on what `window.fetch` exposes.\n * The only downside to this would be missing our own requests as breadcrumbs,\n * but because we are already not doing this, it should be just fine.\n *\n * Possible failed fetch error messages per-browser:\n *\n * Chrome:  Failed to fetch\n * Edge:    Failed to Fetch\n * Firefox: NetworkError when attempting to fetch resource\n * Safari:  resource blocked by content blocker\n */\nexport function fetch(...rest: Parameters<typeof WINDOW.fetch>): ReturnType<typeof WINDOW.fetch> {\n  return getNativeImplementation('fetch')(...rest);\n}\n\n/**\n * Get an unwrapped `setTimeout` method.\n * This ensures that even if e.g. Angular wraps `setTimeout`, we get the native implementation,\n * avoiding triggering change detection.\n */\nexport function setTimeout(...rest: Parameters<typeof WINDOW.setTimeout>): ReturnType<typeof WINDOW.setTimeout> {\n  return getNativeImplementation('setTimeout')(...rest);\n}\n","import type { HandlerDataXhr, SentryWrappedXMLHttpRequest } from '@sentry/core';\nimport { addHandler, isString, maybeInstrument, timestampInSeconds, triggerHandlers } from '@sentry/core';\nimport { WINDOW } from '../types';\n\nexport const SENTRY_XHR_DATA_KEY = '__sentry_xhr_v3__';\n\ntype WindowWithXhr = Window & { XMLHttpRequest?: typeof XMLHttpRequest };\n\n/**\n * Add an instrumentation handler for when an XHR request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addXhrInstrumentationHandler(handler: (data: HandlerDataXhr) => void): void {\n  const type = 'xhr';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentXHR);\n}\n\n/** Exported only for tests. */\nexport function instrumentXHR(): void {\n  if (!(WINDOW as WindowWithXhr).XMLHttpRequest) {\n    return;\n  }\n\n  const xhrproto = XMLHttpRequest.prototype;\n\n  // eslint-disable-next-line @typescript-eslint/unbound-method\n  xhrproto.open = new Proxy(xhrproto.open, {\n    apply(originalOpen, xhrOpenThisArg: XMLHttpRequest & SentryWrappedXMLHttpRequest, xhrOpenArgArray) {\n      // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n      //       it means the error, that was caused by your XHR call did not\n      //       have a stack trace. If you are using HttpClient integration,\n      //       this is the expected behavior, as we are using this virtual error to capture\n      //       the location of your XHR call, and group your HttpClient events accordingly.\n      const virtualError = new Error();\n\n      const startTimestamp = timestampInSeconds() * 1000;\n\n      // open() should always be called with two or more arguments\n      // But to be on the safe side, we actually validate this and bail out if we don't have a method & url\n      const method = isString(xhrOpenArgArray[0]) ? xhrOpenArgArray[0].toUpperCase() : undefined;\n      const url = parseUrl(xhrOpenArgArray[1]);\n\n      if (!method || !url) {\n        return originalOpen.apply(xhrOpenThisArg, xhrOpenArgArray);\n      }\n\n      xhrOpenThisArg[SENTRY_XHR_DATA_KEY] = {\n        method,\n        url,\n        request_headers: {},\n      };\n\n      // if Sentry key appears in URL, don't capture it as a request\n      if (method === 'POST' && url.match(/sentry_key/)) {\n        xhrOpenThisArg.__sentry_own_request__ = true;\n      }\n\n      const onreadystatechangeHandler: () => void = () => {\n        // For whatever reason, this is not the same instance here as from the outer method\n        const xhrInfo = xhrOpenThisArg[SENTRY_XHR_DATA_KEY];\n\n        if (!xhrInfo) {\n          return;\n        }\n\n        if (xhrOpenThisArg.readyState === 4) {\n          try {\n            // touching statusCode in some platforms throws\n            // an exception\n            xhrInfo.status_code = xhrOpenThisArg.status;\n          } catch (e) {\n            /* do nothing */\n          }\n\n          const handlerData: HandlerDataXhr = {\n            endTimestamp: timestampInSeconds() * 1000,\n            startTimestamp,\n            xhr: xhrOpenThisArg,\n            virtualError,\n          };\n          triggerHandlers('xhr', handlerData);\n        }\n      };\n\n      if ('onreadystatechange' in xhrOpenThisArg && typeof xhrOpenThisArg.onreadystatechange === 'function') {\n        xhrOpenThisArg.onreadystatechange = new Proxy(xhrOpenThisArg.onreadystatechange, {\n          apply(originalOnreadystatechange, onreadystatechangeThisArg, onreadystatechangeArgArray: unknown[]) {\n            onreadystatechangeHandler();\n            return originalOnreadystatechange.apply(onreadystatechangeThisArg, onreadystatechangeArgArray);\n          },\n        });\n      } else {\n        xhrOpenThisArg.addEventListener('readystatechange', onreadystatechangeHandler);\n      }\n\n      // Intercepting `setRequestHeader` to access the request headers of XHR instance.\n      // This will only work for user/library defined headers, not for the default/browser-assigned headers.\n      // Request cookies are also unavailable for XHR, as `Cookie` header can't be defined by `setRequestHeader`.\n      xhrOpenThisArg.setRequestHeader = new Proxy(xhrOpenThisArg.setRequestHeader, {\n        apply(\n          originalSetRequestHeader,\n          setRequestHeaderThisArg: SentryWrappedXMLHttpRequest,\n          setRequestHeaderArgArray: unknown[],\n        ) {\n          const [header, value] = setRequestHeaderArgArray;\n\n          const xhrInfo = setRequestHeaderThisArg[SENTRY_XHR_DATA_KEY];\n\n          if (xhrInfo && isString(header) && isString(value)) {\n            xhrInfo.request_headers[header.toLowerCase()] = value;\n          }\n\n          return originalSetRequestHeader.apply(setRequestHeaderThisArg, setRequestHeaderArgArray);\n        },\n      });\n\n      return originalOpen.apply(xhrOpenThisArg, xhrOpenArgArray);\n    },\n  });\n\n  // eslint-disable-next-line @typescript-eslint/unbound-method\n  xhrproto.send = new Proxy(xhrproto.send, {\n    apply(originalSend, sendThisArg: XMLHttpRequest & SentryWrappedXMLHttpRequest, sendArgArray: unknown[]) {\n      const sentryXhrData = sendThisArg[SENTRY_XHR_DATA_KEY];\n\n      if (!sentryXhrData) {\n        return originalSend.apply(sendThisArg, sendArgArray);\n      }\n\n      if (sendArgArray[0] !== undefined) {\n        sentryXhrData.body = sendArgArray[0];\n      }\n\n      const handlerData: HandlerDataXhr = {\n        startTimestamp: timestampInSeconds() * 1000,\n        xhr: sendThisArg,\n      };\n      triggerHandlers('xhr', handlerData);\n\n      return originalSend.apply(sendThisArg, sendArgArray);\n    },\n  });\n}\n\nfunction parseUrl(url: string | unknown): string | undefined {\n  if (isString(url)) {\n    return url;\n  }\n\n  try {\n    // url can be a string or URL\n    // but since URL is not available in IE11, we do not check for it,\n    // but simply assume it is an URL and return `toString()` from it (which returns the full URL)\n    // If that fails, we just return undefined\n    return (url as URL).toString();\n  } catch {} // eslint-disable-line no-empty\n\n  return undefined;\n}\n","import { logger } from '@sentry/core';\nimport type { Logger } from '@sentry/core';\nimport { DEBUG_BUILD } from './debug-build';\nimport type { NetworkMetaWarning } from './types';\n\n/**\n * Serializes FormData.\n *\n * This is a bit simplified, but gives us a decent estimate.\n * This converts e.g. { name: 'Anne Smith', age: 13 } to 'name=Anne+Smith&age=13'.\n *\n */\nexport function serializeFormData(formData: FormData): string {\n  // @ts-expect-error passing FormData to URLSearchParams actually works\n  return new URLSearchParams(formData).toString();\n}\n\n/** Get the string representation of a body. */\nexport function getBodyString(body: unknown, _logger: Logger = logger): [string | undefined, NetworkMetaWarning?] {\n  try {\n    if (typeof body === 'string') {\n      return [body];\n    }\n\n    if (body instanceof URLSearchParams) {\n      return [body.toString()];\n    }\n\n    if (body instanceof FormData) {\n      return [serializeFormData(body)];\n    }\n\n    if (!body) {\n      return [undefined];\n    }\n  } catch (error) {\n    DEBUG_BUILD && _logger.error(error, 'Failed to serialize body', body);\n    return [undefined, 'BODY_PARSE_ERROR'];\n  }\n\n  DEBUG_BUILD && _logger.info('Skipping network body because of body type', body);\n\n  return [undefined, 'UNPARSEABLE_BODY_TYPE'];\n}\n\n/**\n * Parses the fetch arguments to extract the request payload.\n *\n * We only support getting the body from the fetch options.\n */\nexport function getFetchRequestArgBody(fetchArgs: unknown[] = []): RequestInit['body'] | undefined {\n  if (fetchArgs.length !== 2 || typeof fetchArgs[1] !== 'object') {\n    return undefined;\n  }\n\n  return (fetchArgs[1] as RequestInit).body;\n}\n","import type { Span, SpanAttributes } from '@sentry/core';\nimport {\n  SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME,\n  SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT,\n  SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  browserPerformanceTimeOrigin,\n  dropUndefinedKeys,\n  getActiveSpan,\n  getCurrentScope,\n  getRootSpan,\n  htmlTreeAsString,\n  spanToJSON,\n} from '@sentry/core';\nimport {\n  addInpInstrumentationHandler,\n  addPerformanceInstrumentationHandler,\n  isPerformanceEventTiming,\n} from './instrument';\nimport { getBrowserPerformanceAPI, msToSec, startStandaloneWebVitalSpan } from './utils';\n\nconst LAST_INTERACTIONS: number[] = [];\nconst INTERACTIONS_SPAN_MAP = new Map<number, Span>();\n\n/**\n * Start tracking INP webvital events.\n */\nexport function startTrackingINP(): () => void {\n  const performance = getBrowserPerformanceAPI();\n  if (performance && browserPerformanceTimeOrigin()) {\n    const inpCallback = _trackINP();\n\n    return (): void => {\n      inpCallback();\n    };\n  }\n\n  return () => undefined;\n}\n\nconst INP_ENTRY_MAP: Record<string, 'click' | 'hover' | 'drag' | 'press'> = {\n  click: 'click',\n  pointerdown: 'click',\n  pointerup: 'click',\n  mousedown: 'click',\n  mouseup: 'click',\n  touchstart: 'click',\n  touchend: 'click',\n  mouseover: 'hover',\n  mouseout: 'hover',\n  mouseenter: 'hover',\n  mouseleave: 'hover',\n  pointerover: 'hover',\n  pointerout: 'hover',\n  pointerenter: 'hover',\n  pointerleave: 'hover',\n  dragstart: 'drag',\n  dragend: 'drag',\n  drag: 'drag',\n  dragenter: 'drag',\n  dragleave: 'drag',\n  dragover: 'drag',\n  drop: 'drag',\n  keydown: 'press',\n  keyup: 'press',\n  keypress: 'press',\n  input: 'press',\n};\n\n/** Starts tracking the Interaction to Next Paint on the current page. */\nfunction _trackINP(): () => void {\n  return addInpInstrumentationHandler(({ metric }) => {\n    if (metric.value == undefined) {\n      return;\n    }\n\n    const entry = metric.entries.find(entry => entry.duration === metric.value && INP_ENTRY_MAP[entry.name]);\n\n    if (!entry) {\n      return;\n    }\n\n    const { interactionId } = entry;\n    const interactionType = INP_ENTRY_MAP[entry.name];\n\n    /** Build the INP span, create an envelope from the span, and then send the envelope */\n    const startTime = msToSec((browserPerformanceTimeOrigin() as number) + entry.startTime);\n    const duration = msToSec(metric.value);\n    const activeSpan = getActiveSpan();\n    const rootSpan = activeSpan ? getRootSpan(activeSpan) : undefined;\n\n    // We first try to lookup the span from our INTERACTIONS_SPAN_MAP,\n    // where we cache the route per interactionId\n    const cachedSpan = interactionId != null ? INTERACTIONS_SPAN_MAP.get(interactionId) : undefined;\n\n    const spanToUse = cachedSpan || rootSpan;\n\n    // Else, we try to use the active span.\n    // Finally, we fall back to look at the transactionName on the scope\n    const routeName = spanToUse ? spanToJSON(spanToUse).description : getCurrentScope().getScopeData().transactionName;\n\n    const name = htmlTreeAsString(entry.target);\n    const attributes: SpanAttributes = dropUndefinedKeys({\n      [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser.inp',\n      [SEMANTIC_ATTRIBUTE_SENTRY_OP]: `ui.interaction.${interactionType}`,\n      [SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME]: entry.duration,\n    });\n\n    const span = startStandaloneWebVitalSpan({\n      name,\n      transaction: routeName,\n      attributes,\n      startTime,\n    });\n\n    if (span) {\n      span.addEvent('inp', {\n        [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: 'millisecond',\n        [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: metric.value,\n      });\n\n      span.end(startTime + duration);\n    }\n  });\n}\n\n/**\n * Register a listener to cache route information for INP interactions.\n */\nexport function registerInpInteractionListener(): void {\n  const handleEntries = ({ entries }: { entries: PerformanceEntry[] }): void => {\n    const activeSpan = getActiveSpan();\n    const activeRootSpan = activeSpan && getRootSpan(activeSpan);\n\n    entries.forEach(entry => {\n      if (!isPerformanceEventTiming(entry) || !activeRootSpan) {\n        return;\n      }\n\n      const interactionId = entry.interactionId;\n      if (interactionId == null) {\n        return;\n      }\n\n      // If the interaction was already recorded before, nothing more to do\n      if (INTERACTIONS_SPAN_MAP.has(interactionId)) {\n        return;\n      }\n\n      // We keep max. 10 interactions in the list, then remove the oldest one & clean up\n      if (LAST_INTERACTIONS.length > 10) {\n        const last = LAST_INTERACTIONS.shift() as number;\n        INTERACTIONS_SPAN_MAP.delete(last);\n      }\n\n      // We add the interaction to the list of recorded interactions\n      // and store the span for this interaction\n      LAST_INTERACTIONS.push(interactionId);\n      INTERACTIONS_SPAN_MAP.set(interactionId, activeRootSpan);\n    });\n  };\n\n  addPerformanceInstrumentationHandler('event', handleEntries);\n  addPerformanceInstrumentationHandler('first-input', handleEntries);\n}\n","import { createEnvelope, dsnToString } from '@sentry/core';\nimport type { DsnComponents, EventEnvelope, SdkMetadata, UserFeedback, UserFeedbackItem } from '@sentry/core';\n\n/**\n * Creates an envelope from a user feedback.\n */\nexport function createUserFeedbackEnvelope(\n  feedback: UserFeedback,\n  {\n    metadata,\n    tunnel,\n    dsn,\n  }: {\n    metadata: SdkMetadata | undefined;\n    tunnel: string | undefined;\n    dsn: DsnComponents | undefined;\n  },\n): EventEnvelope {\n  const headers: EventEnvelope[0] = {\n    event_id: feedback.event_id,\n    sent_at: new Date().toISOString(),\n    ...(metadata?.sdk && {\n      sdk: {\n        name: metadata.sdk.name,\n        version: metadata.sdk.version,\n      },\n    }),\n    ...(!!tunnel && !!dsn && { dsn: dsnToString(dsn) }),\n  };\n  const item = createUserFeedbackEnvelopeItem(feedback);\n\n  return createEnvelope(headers, [item]);\n}\n\nfunction createUserFeedbackEnvelopeItem(feedback: UserFeedback): UserFeedbackItem {\n  const feedbackHeaders: UserFeedbackItem[0] = {\n    type: 'user_report',\n  };\n  return [feedbackHeaders, feedback];\n}\n","import type { Client, IntegrationFn } from '@sentry/core';\nimport {\n  GLOBAL_OBJ,\n  captureMessage,\n  defineIntegration,\n  getClient,\n  supportsReportingObserver,\n  withScope,\n} from '@sentry/core';\n\nconst WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\nconst INTEGRATION_NAME = 'ReportingObserver';\n\ninterface Report {\n  [key: string]: unknown;\n  type: ReportTypes;\n  url: string;\n  body?: ReportBody;\n}\n\ntype ReportTypes = 'crash' | 'deprecation' | 'intervention';\n\ntype ReportBody = CrashReportBody | DeprecationReportBody | InterventionReportBody;\n\ninterface CrashReportBody {\n  [key: string]: unknown;\n  crashId: string;\n  reason?: string;\n}\n\ninterface DeprecationReportBody {\n  [key: string]: unknown;\n  id: string;\n  anticipatedRemoval?: Date;\n  message: string;\n  sourceFile?: string;\n  lineNumber?: number;\n  columnNumber?: number;\n}\n\ninterface InterventionReportBody {\n  [key: string]: unknown;\n  id: string;\n  message: string;\n  sourceFile?: string;\n  lineNumber?: number;\n  columnNumber?: number;\n}\n\ninterface ReportingObserverOptions {\n  types?: ReportTypes[];\n}\n\n/** This is experimental and the types are not included with TypeScript, sadly. */\ninterface ReportingObserverClass {\n  new (\n    handler: (reports: Report[]) => void,\n    options: { buffered?: boolean; types?: ReportTypes[] },\n  ): {\n    observe: () => void;\n  };\n}\n\nconst SETUP_CLIENTS = new WeakMap<Client, boolean>();\n\nconst _reportingObserverIntegration = ((options: ReportingObserverOptions = {}) => {\n  const types = options.types || ['crash', 'deprecation', 'intervention'];\n\n  /** Handler for the reporting observer. */\n  function handler(reports: Report[]): void {\n    if (!SETUP_CLIENTS.has(getClient() as Client)) {\n      return;\n    }\n\n    for (const report of reports) {\n      withScope(scope => {\n        scope.setExtra('url', report.url);\n\n        const label = `ReportingObserver [${report.type}]`;\n        let details = 'No details available';\n\n        if (report.body) {\n          // Object.keys doesn't work on ReportBody, as all properties are inherited\n          const plainBody: {\n            [key: string]: unknown;\n          } = {};\n\n          // eslint-disable-next-line guard-for-in\n          for (const prop in report.body) {\n            plainBody[prop] = report.body[prop];\n          }\n\n          scope.setExtra('body', plainBody);\n\n          if (report.type === 'crash') {\n            const body = report.body as CrashReportBody;\n            // A fancy way to create a message out of crashId OR reason OR both OR fallback\n            details = [body.crashId || '', body.reason || ''].join(' ').trim() || details;\n          } else {\n            const body = report.body as DeprecationReportBody | InterventionReportBody;\n            details = body.message || details;\n          }\n        }\n\n        captureMessage(`${label}: ${details}`);\n      });\n    }\n  }\n\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      if (!supportsReportingObserver()) {\n        return;\n      }\n\n      const observer = new (WINDOW as typeof WINDOW & { ReportingObserver: ReportingObserverClass }).ReportingObserver(\n        handler,\n        {\n          buffered: true,\n          types,\n        },\n      );\n\n      observer.observe();\n    },\n\n    setup(client): void {\n      SETUP_CLIENTS.set(client, true);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Reporting API integration - https://w3c.github.io/reporting/\n */\nexport const reportingObserverIntegration = defineIntegration(_reportingObserverIntegration);\n","import { SENTRY_XHR_DATA_KEY, addXhrInstrumentationHandler } from '@sentry-internal/browser-utils';\nimport type { Client, Event as SentryEvent, IntegrationFn, SentryWrappedXMLHttpRequest } from '@sentry/core';\nimport {\n  GLOBAL_OBJ,\n  addExceptionMechanism,\n  addFetchInstrumentationHandler,\n  captureEvent,\n  defineIntegration,\n  getClient,\n  isSentryRequestUrl,\n  logger,\n  supportsNativeFetch,\n} from '@sentry/core';\n\nimport { DEBUG_BUILD } from '../debug-build';\n\nexport type HttpStatusCodeRange = [number, number] | number;\nexport type HttpRequestTarget = string | RegExp;\n\nconst INTEGRATION_NAME = 'HttpClient';\n\ninterface HttpClientOptions {\n  /**\n   * HTTP status codes that should be considered failed.\n   * This array can contain tuples of `[begin, end]` (both inclusive),\n   * single status codes, or a combinations of both\n   *\n   * Example: [[500, 505], 507]\n   * Default: [[500, 599]]\n   */\n  failedRequestStatusCodes: HttpStatusCodeRange[];\n\n  /**\n   * Targets to track for failed requests.\n   * This array can contain strings or regular expressions.\n   *\n   * Example: ['http://localhost', /api\\/.*\\/]\n   * Default: [/.*\\/]\n   */\n  failedRequestTargets: HttpRequestTarget[];\n}\n\nconst _httpClientIntegration = ((options: Partial<HttpClientOptions> = {}) => {\n  const _options: HttpClientOptions = {\n    failedRequestStatusCodes: [[500, 599]],\n    failedRequestTargets: [/.*/],\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    setup(client): void {\n      _wrapFetch(client, _options);\n      _wrapXHR(client, _options);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Create events for failed client side HTTP requests.\n */\nexport const httpClientIntegration = defineIntegration(_httpClientIntegration);\n\n/**\n * Interceptor function for fetch requests\n *\n * @param requestInfo The Fetch API request info\n * @param response The Fetch API response\n * @param requestInit The request init object\n */\nfunction _fetchResponseHandler(\n  options: HttpClientOptions,\n  requestInfo: RequestInfo,\n  response: Response,\n  requestInit?: RequestInit,\n  error?: unknown,\n): void {\n  if (_shouldCaptureResponse(options, response.status, response.url)) {\n    const request = _getRequest(requestInfo, requestInit);\n\n    let requestHeaders, responseHeaders, requestCookies, responseCookies;\n\n    if (_shouldSendDefaultPii()) {\n      [requestHeaders, requestCookies] = _parseCookieHeaders('Cookie', request);\n      [responseHeaders, responseCookies] = _parseCookieHeaders('Set-Cookie', response);\n    }\n\n    const event = _createEvent({\n      url: request.url,\n      method: request.method,\n      status: response.status,\n      requestHeaders,\n      responseHeaders,\n      requestCookies,\n      responseCookies,\n      error,\n    });\n\n    captureEvent(event);\n  }\n}\n\nfunction _parseCookieHeaders(\n  cookieHeader: string,\n  obj: Request | Response,\n): [Record<string, string>, Record<string, string> | undefined] {\n  const headers = _extractFetchHeaders(obj.headers);\n  let cookies;\n\n  try {\n    const cookieString = headers[cookieHeader] || headers[cookieHeader.toLowerCase()] || undefined;\n\n    if (cookieString) {\n      cookies = _parseCookieString(cookieString);\n    }\n  } catch {\n    // ignore it if parsing fails\n  }\n\n  return [headers, cookies];\n}\n\n/**\n * Interceptor function for XHR requests\n *\n * @param xhr The XHR request\n * @param method The HTTP method\n * @param headers The HTTP headers\n */\nfunction _xhrResponseHandler(\n  options: HttpClientOptions,\n  xhr: XMLHttpRequest,\n  method: string,\n  headers: Record<string, string>,\n  error?: unknown,\n): void {\n  if (_shouldCaptureResponse(options, xhr.status, xhr.responseURL)) {\n    let requestHeaders, responseCookies, responseHeaders;\n\n    if (_shouldSendDefaultPii()) {\n      try {\n        const cookieString = xhr.getResponseHeader('Set-Cookie') || xhr.getResponseHeader('set-cookie') || undefined;\n\n        if (cookieString) {\n          responseCookies = _parseCookieString(cookieString);\n        }\n      } catch {\n        // ignore it if parsing fails\n      }\n\n      try {\n        responseHeaders = _getXHRResponseHeaders(xhr);\n      } catch {\n        // ignore it if parsing fails\n      }\n\n      requestHeaders = headers;\n    }\n\n    const event = _createEvent({\n      url: xhr.responseURL,\n      method,\n      status: xhr.status,\n      requestHeaders,\n      // Can't access request cookies from XHR\n      responseHeaders,\n      responseCookies,\n      error,\n    });\n\n    captureEvent(event);\n  }\n}\n\n/**\n * Extracts response size from `Content-Length` header when possible\n *\n * @param headers\n * @returns The response size in bytes or undefined\n */\nfunction _getResponseSizeFromHeaders(headers?: Record<string, string>): number | undefined {\n  if (headers) {\n    const contentLength = headers['Content-Length'] || headers['content-length'];\n\n    if (contentLength) {\n      return parseInt(contentLength, 10);\n    }\n  }\n\n  return undefined;\n}\n\n/**\n * Creates an object containing cookies from the given cookie string\n *\n * @param cookieString The cookie string to parse\n * @returns The parsed cookies\n */\nfunction _parseCookieString(cookieString: string): Record<string, string> {\n  return cookieString.split('; ').reduce((acc: Record<string, string>, cookie: string) => {\n    const [key, value] = cookie.split('=');\n    if (key && value) {\n      acc[key] = value;\n    }\n    return acc;\n  }, {});\n}\n\n/**\n * Extracts the headers as an object from the given Fetch API request or response object\n *\n * @param headers The headers to extract\n * @returns The extracted headers as an object\n */\nfunction _extractFetchHeaders(headers: Headers): Record<string, string> {\n  const result: Record<string, string> = {};\n\n  headers.forEach((value, key) => {\n    result[key] = value;\n  });\n\n  return result;\n}\n\n/**\n * Extracts the response headers as an object from the given XHR object\n *\n * @param xhr The XHR object to extract the response headers from\n * @returns The response headers as an object\n */\nfunction _getXHRResponseHeaders(xhr: XMLHttpRequest): Record<string, string> {\n  const headers = xhr.getAllResponseHeaders();\n\n  if (!headers) {\n    return {};\n  }\n\n  return headers.split('\\r\\n').reduce((acc: Record<string, string>, line: string) => {\n    const [key, value] = line.split(': ');\n    if (key && value) {\n      acc[key] = value;\n    }\n    return acc;\n  }, {});\n}\n\n/**\n * Checks if the given target url is in the given list of targets\n *\n * @param target The target url to check\n * @returns true if the target url is in the given list of targets, false otherwise\n */\nfunction _isInGivenRequestTargets(\n  failedRequestTargets: HttpClientOptions['failedRequestTargets'],\n  target: string,\n): boolean {\n  return failedRequestTargets.some((givenRequestTarget: HttpRequestTarget) => {\n    if (typeof givenRequestTarget === 'string') {\n      return target.includes(givenRequestTarget);\n    }\n\n    return givenRequestTarget.test(target);\n  });\n}\n\n/**\n * Checks if the given status code is in the given range\n *\n * @param status The status code to check\n * @returns true if the status code is in the given range, false otherwise\n */\nfunction _isInGivenStatusRanges(\n  failedRequestStatusCodes: HttpClientOptions['failedRequestStatusCodes'],\n  status: number,\n): boolean {\n  return failedRequestStatusCodes.some((range: HttpStatusCodeRange) => {\n    if (typeof range === 'number') {\n      return range === status;\n    }\n\n    return status >= range[0] && status <= range[1];\n  });\n}\n\n/**\n * Wraps `fetch` function to capture request and response data\n */\nfunction _wrapFetch(client: Client, options: HttpClientOptions): void {\n  if (!supportsNativeFetch()) {\n    return;\n  }\n\n  addFetchInstrumentationHandler(handlerData => {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const { response, args, error, virtualError } = handlerData;\n    const [requestInfo, requestInit] = args as [RequestInfo, RequestInit | undefined];\n\n    if (!response) {\n      return;\n    }\n\n    _fetchResponseHandler(options, requestInfo, response as Response, requestInit, error || virtualError);\n  }, false);\n}\n\n/**\n * Wraps XMLHttpRequest to capture request and response data\n */\nfunction _wrapXHR(client: Client, options: HttpClientOptions): void {\n  if (!('XMLHttpRequest' in GLOBAL_OBJ)) {\n    return;\n  }\n\n  addXhrInstrumentationHandler(handlerData => {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const { error, virtualError } = handlerData;\n\n    const xhr = handlerData.xhr as SentryWrappedXMLHttpRequest & XMLHttpRequest;\n\n    const sentryXhrData = xhr[SENTRY_XHR_DATA_KEY];\n\n    if (!sentryXhrData) {\n      return;\n    }\n\n    const { method, request_headers: headers } = sentryXhrData;\n\n    try {\n      _xhrResponseHandler(options, xhr, method, headers, error || virtualError);\n    } catch (e) {\n      DEBUG_BUILD && logger.warn('Error while extracting response event form XHR response', e);\n    }\n  });\n}\n\n/**\n * Checks whether to capture given response as an event\n *\n * @param status response status code\n * @param url response url\n */\nfunction _shouldCaptureResponse(options: HttpClientOptions, status: number, url: string): boolean {\n  return (\n    _isInGivenStatusRanges(options.failedRequestStatusCodes, status) &&\n    _isInGivenRequestTargets(options.failedRequestTargets, url) &&\n    !isSentryRequestUrl(url, getClient())\n  );\n}\n\n/**\n * Creates a synthetic Sentry event from given response data\n *\n * @param data response data\n * @returns event\n */\nfunction _createEvent(data: {\n  url: string;\n  method: string;\n  status: number;\n  responseHeaders?: Record<string, string>;\n  responseCookies?: Record<string, string>;\n  requestHeaders?: Record<string, string>;\n  requestCookies?: Record<string, string>;\n  error?: unknown;\n}): SentryEvent {\n  const client = getClient();\n  const virtualStackTrace = client && data.error && data.error instanceof Error ? data.error.stack : undefined;\n  // Remove the first frame from the stack as it's the HttpClient call\n  const stack = virtualStackTrace && client ? client.getOptions().stackParser(virtualStackTrace, 0, 1) : undefined;\n  const message = `HTTP Client Error with status code: ${data.status}`;\n\n  const event: SentryEvent = {\n    message,\n    exception: {\n      values: [\n        {\n          type: 'Error',\n          value: message,\n          stacktrace: stack ? { frames: stack } : undefined,\n        },\n      ],\n    },\n    request: {\n      url: data.url,\n      method: data.method,\n      headers: data.requestHeaders,\n      cookies: data.requestCookies,\n    },\n    contexts: {\n      response: {\n        status_code: data.status,\n        headers: data.responseHeaders,\n        cookies: data.responseCookies,\n        body_size: _getResponseSizeFromHeaders(data.responseHeaders),\n      },\n    },\n  };\n\n  addExceptionMechanism(event, {\n    type: 'http.client',\n    handled: false,\n  });\n\n  return event;\n}\n\nfunction _getRequest(requestInfo: RequestInfo, requestInit?: RequestInit): Request {\n  if (!requestInit && requestInfo instanceof Request) {\n    return requestInfo;\n  }\n\n  // If both are set, we try to construct a new Request with the given arguments\n  // However, if e.g. the original request has a `body`, this will throw an error because it was already accessed\n  // In this case, as a fallback, we just use the original request - using both is rather an edge case\n  if (requestInfo instanceof Request && requestInfo.bodyUsed) {\n    return requestInfo;\n  }\n\n  return new Request(requestInfo, requestInit);\n}\n\nfunction _shouldSendDefaultPii(): boolean {\n  const client = getClient();\n  return client ? Boolean(client.getOptions().sendDefaultPii) : false;\n}\n","import type { Event, IntegrationFn, StackFrame } from '@sentry/core';\nimport { GLOBAL_OBJ, addContextToFrame, defineIntegration, stripUrlQueryAndFragment } from '@sentry/core';\n\nconst WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\nconst DEFAULT_LINES_OF_CONTEXT = 7;\n\nconst INTEGRATION_NAME = 'ContextLines';\n\ninterface ContextLinesOptions {\n  /**\n   * Sets the number of context lines for each frame when loading a file.\n   * Defaults to 7.\n   *\n   * Set to 0 to disable loading and inclusion of source files.\n   **/\n  frameContextLines?: number;\n}\n\nconst _contextLinesIntegration = ((options: ContextLinesOptions = {}) => {\n  const contextLines = options.frameContextLines != null ? options.frameContextLines : DEFAULT_LINES_OF_CONTEXT;\n\n  return {\n    name: INTEGRATION_NAME,\n    processEvent(event) {\n      return addSourceContext(event, contextLines);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Collects source context lines around the lines of stackframes pointing to JS embedded in\n * the current page's HTML.\n *\n * This integration DOES NOT work for stack frames pointing to JS files that are loaded by the browser.\n * For frames pointing to files, context lines are added during ingestion and symbolication\n * by attempting to download the JS files to the Sentry backend.\n *\n * Use this integration if you have inline JS code in HTML pages that can't be accessed\n * by our backend (e.g. due to a login-protected page).\n */\nexport const contextLinesIntegration = defineIntegration(_contextLinesIntegration);\n\n/**\n * Processes an event and adds context lines.\n */\nfunction addSourceContext(event: Event, contextLines: number): Event {\n  const doc = WINDOW.document;\n  const htmlFilename = WINDOW.location && stripUrlQueryAndFragment(WINDOW.location.href);\n  if (!doc || !htmlFilename) {\n    return event;\n  }\n\n  const exceptions = event.exception?.values;\n  if (!exceptions?.length) {\n    return event;\n  }\n\n  const html = doc.documentElement.innerHTML;\n  if (!html) {\n    return event;\n  }\n\n  const htmlLines = ['<!DOCTYPE html>', '<html>', ...html.split('\\n'), '</html>'];\n\n  exceptions.forEach(exception => {\n    const stacktrace = exception.stacktrace;\n    if (stacktrace?.frames) {\n      stacktrace.frames = stacktrace.frames.map(frame =>\n        applySourceContextToFrame(frame, htmlLines, htmlFilename, contextLines),\n      );\n    }\n  });\n\n  return event;\n}\n\n/**\n * Only exported for testing\n */\nexport function applySourceContextToFrame(\n  frame: StackFrame,\n  htmlLines: string[],\n  htmlFilename: string,\n  linesOfContext: number,\n): StackFrame {\n  if (frame.filename !== htmlFilename || !frame.lineno || !htmlLines.length) {\n    return frame;\n  }\n\n  addContextToFrame(htmlLines, frame, linesOfContext);\n\n  return frame;\n}\n","import { SENTRY_XHR_DATA_KEY, getBodyString, getFetchRequestArgBody } from '@sentry-internal/browser-utils';\nimport type { FetchHint, XhrHint } from '@sentry-internal/browser-utils';\nimport {\n  SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD,\n  SEMANTIC_ATTRIBUTE_SENTRY_OP,\n  SEMANTIC_ATTRIBUTE_URL_FULL,\n  defineIntegration,\n  isString,\n  spanToJSON,\n  stringMatchesSomePattern,\n} from '@sentry/core';\nimport type { Client, IntegrationFn } from '@sentry/core';\n\ninterface GraphQLClientOptions {\n  endpoints: Array<string | RegExp>;\n}\n\n/** Standard graphql request shape: https://graphql.org/learn/serving-over-http/#post-request-and-body */\ninterface GraphQLRequestPayload {\n  query: string;\n  operationName?: string;\n  variables?: Record<string, unknown>;\n  extensions?: Record<string, unknown>;\n}\n\ninterface GraphQLOperation {\n  operationType?: string;\n  operationName?: string;\n}\n\nconst INTEGRATION_NAME = 'GraphQLClient';\n\nconst _graphqlClientIntegration = ((options: GraphQLClientOptions) => {\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      _updateSpanWithGraphQLData(client, options);\n      _updateBreadcrumbWithGraphQLData(client, options);\n    },\n  };\n}) satisfies IntegrationFn;\n\nfunction _updateSpanWithGraphQLData(client: Client, options: GraphQLClientOptions): void {\n  client.on('beforeOutgoingRequestSpan', (span, hint) => {\n    const spanJSON = spanToJSON(span);\n\n    const spanAttributes = spanJSON.data || {};\n    const spanOp = spanAttributes[SEMANTIC_ATTRIBUTE_SENTRY_OP];\n\n    const isHttpClientSpan = spanOp === 'http.client';\n\n    if (!isHttpClientSpan) {\n      return;\n    }\n\n    const httpUrl = spanAttributes[SEMANTIC_ATTRIBUTE_URL_FULL] || spanAttributes['http.url'];\n    const httpMethod = spanAttributes[SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD] || spanAttributes['http.method'];\n\n    if (!isString(httpUrl) || !isString(httpMethod)) {\n      return;\n    }\n\n    const { endpoints } = options;\n    const isTracedGraphqlEndpoint = stringMatchesSomePattern(httpUrl, endpoints);\n    const payload = getRequestPayloadXhrOrFetch(hint as XhrHint | FetchHint);\n\n    if (isTracedGraphqlEndpoint && payload) {\n      const graphqlBody = getGraphQLRequestPayload(payload);\n\n      if (graphqlBody) {\n        const operationInfo = _getGraphQLOperation(graphqlBody);\n        span.updateName(`${httpMethod} ${httpUrl} (${operationInfo})`);\n        span.setAttribute('graphql.document', payload);\n      }\n    }\n  });\n}\n\nfunction _updateBreadcrumbWithGraphQLData(client: Client, options: GraphQLClientOptions): void {\n  client.on('beforeOutgoingRequestBreadcrumb', (breadcrumb, handlerData) => {\n    const { category, type, data } = breadcrumb;\n\n    const isFetch = category === 'fetch';\n    const isXhr = category === 'xhr';\n    const isHttpBreadcrumb = type === 'http';\n\n    if (isHttpBreadcrumb && (isFetch || isXhr)) {\n      const httpUrl = data?.url;\n      const { endpoints } = options;\n\n      const isTracedGraphqlEndpoint = stringMatchesSomePattern(httpUrl, endpoints);\n      const payload = getRequestPayloadXhrOrFetch(handlerData as XhrHint | FetchHint);\n\n      if (isTracedGraphqlEndpoint && data && payload) {\n        const graphqlBody = getGraphQLRequestPayload(payload);\n\n        if (!data.graphql && graphqlBody) {\n          const operationInfo = _getGraphQLOperation(graphqlBody);\n          data['graphql.document'] = graphqlBody.query;\n          data['graphql.operation'] = operationInfo;\n        }\n      }\n    }\n  });\n}\n\n/**\n * @param requestBody - GraphQL request\n * @returns A formatted version of the request: 'TYPE NAME' or 'TYPE'\n */\nfunction _getGraphQLOperation(requestBody: GraphQLRequestPayload): string {\n  const { query: graphqlQuery, operationName: graphqlOperationName } = requestBody;\n\n  const { operationName = graphqlOperationName, operationType } = parseGraphQLQuery(graphqlQuery);\n  const operationInfo = operationName ? `${operationType} ${operationName}` : `${operationType}`;\n\n  return operationInfo;\n}\n\n/**\n * Get the request body/payload based on the shape of the hint.\n *\n * Exported for tests only.\n */\nexport function getRequestPayloadXhrOrFetch(hint: XhrHint | FetchHint): string | undefined {\n  const isXhr = 'xhr' in hint;\n\n  let body: string | undefined;\n\n  if (isXhr) {\n    const sentryXhrData = hint.xhr[SENTRY_XHR_DATA_KEY];\n    body = sentryXhrData && getBodyString(sentryXhrData.body)[0];\n  } else {\n    const sentryFetchData = getFetchRequestArgBody(hint.input);\n    body = getBodyString(sentryFetchData)[0];\n  }\n\n  return body;\n}\n\n/**\n * Extract the name and type of the operation from the GraphQL query.\n *\n * Exported for tests only.\n */\nexport function parseGraphQLQuery(query: string): GraphQLOperation {\n  const namedQueryRe = /^(?:\\s*)(query|mutation|subscription)(?:\\s*)(\\w+)(?:\\s*)[{(]/;\n  const unnamedQueryRe = /^(?:\\s*)(query|mutation|subscription)(?:\\s*)[{(]/;\n\n  const namedMatch = query.match(namedQueryRe);\n  if (namedMatch) {\n    return {\n      operationType: namedMatch[1],\n      operationName: namedMatch[2],\n    };\n  }\n\n  const unnamedMatch = query.match(unnamedQueryRe);\n  if (unnamedMatch) {\n    return {\n      operationType: unnamedMatch[1],\n      operationName: undefined,\n    };\n  }\n  return {\n    operationType: undefined,\n    operationName: undefined,\n  };\n}\n\n/**\n * Extract the payload of a request if it's GraphQL.\n * Exported for tests only.\n * @param payload - A valid JSON string\n * @returns A POJO or undefined\n */\nexport function getGraphQLRequestPayload(payload: string): GraphQLRequestPayload | undefined {\n  let graphqlBody = undefined;\n  try {\n    const requestBody = JSON.parse(payload) satisfies GraphQLRequestPayload;\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    const isGraphQLRequest = !!requestBody['query'];\n    if (isGraphQLRequest) {\n      graphqlBody = requestBody;\n    }\n  } finally {\n    // Fallback to undefined if payload is an invalid JSON (SyntaxError)\n\n    /* eslint-disable no-unsafe-finally */\n    return graphqlBody;\n  }\n}\n\n/**\n * This integration ensures that GraphQL requests made in the browser\n * have their GraphQL-specific data captured and attached to spans and breadcrumbs.\n */\nexport const graphqlClientIntegration = defineIntegration(_graphqlClientIntegration);\n","var __defProp$1 = Object.defineProperty;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField$1 = (obj, key, value) => __defNormalProp$1(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar NodeType$2 = /* @__PURE__ */ ((NodeType2) => {\n  NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n  NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n  NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n  NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n  NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n  NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n  return NodeType2;\n})(NodeType$2 || {});\nfunction isElement(n2) {\n  return n2.nodeType === n2.ELEMENT_NODE;\n}\nfunction isShadowRoot(n2) {\n  const host = n2?.host;\n  return Boolean(host?.shadowRoot === n2);\n}\nfunction isNativeShadowDom(shadowRoot) {\n  return Object.prototype.toString.call(shadowRoot) === \"[object ShadowRoot]\";\n}\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\n  if (cssText.includes(\" background-clip: text;\") && !cssText.includes(\" -webkit-background-clip: text;\")) {\n    cssText = cssText.replace(\n      /\\sbackground-clip:\\s*text;/g,\n      \" -webkit-background-clip: text; background-clip: text;\"\n    );\n  }\n  return cssText;\n}\nfunction escapeImportStatement(rule) {\n  const { cssText } = rule;\n  if (cssText.split('\"').length < 3) return cssText;\n  const statement = [\"@import\", `url(${JSON.stringify(rule.href)})`];\n  if (rule.layerName === \"\") {\n    statement.push(`layer`);\n  } else if (rule.layerName) {\n    statement.push(`layer(${rule.layerName})`);\n  }\n  if (rule.supportsText) {\n    statement.push(`supports(${rule.supportsText})`);\n  }\n  if (rule.media.length) {\n    statement.push(rule.media.mediaText);\n  }\n  return statement.join(\" \") + \";\";\n}\nfunction stringifyStylesheet(s2) {\n  try {\n    const rules2 = s2.rules || s2.cssRules;\n    return rules2 ? fixBrowserCompatibilityIssuesInCSS(\n      Array.from(rules2, stringifyRule).join(\"\")\n    ) : null;\n  } catch (error) {\n    return null;\n  }\n}\nfunction fixAllCssProperty(rule) {\n  let styles = \"\";\n  for (let i2 = 0; i2 < rule.style.length; i2++) {\n    const styleDeclaration = rule.style;\n    const attribute = styleDeclaration[i2];\n    const isImportant = styleDeclaration.getPropertyPriority(attribute);\n    styles += `${attribute}:${styleDeclaration.getPropertyValue(attribute)}${isImportant ? ` !important` : \"\"};`;\n  }\n  return `${rule.selectorText} { ${styles} }`;\n}\nfunction stringifyRule(rule) {\n  let importStringified;\n  if (isCSSImportRule(rule)) {\n    try {\n      importStringified = // for same-origin stylesheets,\n      // we can access the imported stylesheet rules directly\n      stringifyStylesheet(rule.styleSheet) || // work around browser issues with the raw string `@import url(...)` statement\n      escapeImportStatement(rule);\n    } catch (error) {\n    }\n  } else if (isCSSStyleRule(rule)) {\n    let cssText = rule.cssText;\n    const needsSafariColonFix = rule.selectorText.includes(\":\");\n    const needsAllFix = typeof rule.style[\"all\"] === \"string\" && rule.style[\"all\"];\n    if (needsAllFix) {\n      cssText = fixAllCssProperty(rule);\n    }\n    if (needsSafariColonFix) {\n      cssText = fixSafariColons(cssText);\n    }\n    if (needsSafariColonFix || needsAllFix) {\n      return cssText;\n    }\n  }\n  return importStringified || rule.cssText;\n}\nfunction fixSafariColons(cssStringified) {\n  const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n  return cssStringified.replace(regex, \"$1\\\\$2\");\n}\nfunction isCSSImportRule(rule) {\n  return \"styleSheet\" in rule;\n}\nfunction isCSSStyleRule(rule) {\n  return \"selectorText\" in rule;\n}\nclass Mirror {\n  constructor() {\n    __publicField$1(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n    __publicField$1(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n  }\n  getId(n2) {\n    if (!n2) return -1;\n    const id = this.getMeta(n2)?.id;\n    return id ?? -1;\n  }\n  getNode(id) {\n    return this.idNodeMap.get(id) || null;\n  }\n  getIds() {\n    return Array.from(this.idNodeMap.keys());\n  }\n  getMeta(n2) {\n    return this.nodeMetaMap.get(n2) || null;\n  }\n  // removes the node from idNodeMap\n  // doesn't remove the node from nodeMetaMap\n  removeNodeFromMap(n2) {\n    const id = this.getId(n2);\n    this.idNodeMap.delete(id);\n    if (n2.childNodes) {\n      n2.childNodes.forEach(\n        (childNode) => this.removeNodeFromMap(childNode)\n      );\n    }\n  }\n  has(id) {\n    return this.idNodeMap.has(id);\n  }\n  hasNode(node) {\n    return this.nodeMetaMap.has(node);\n  }\n  add(n2, meta) {\n    const id = meta.id;\n    this.idNodeMap.set(id, n2);\n    this.nodeMetaMap.set(n2, meta);\n  }\n  replace(id, n2) {\n    const oldNode = this.getNode(id);\n    if (oldNode) {\n      const meta = this.nodeMetaMap.get(oldNode);\n      if (meta) this.nodeMetaMap.set(n2, meta);\n    }\n    this.idNodeMap.set(id, n2);\n  }\n  reset() {\n    this.idNodeMap = /* @__PURE__ */ new Map();\n    this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n  }\n}\nfunction createMirror$2() {\n  return new Mirror();\n}\nfunction shouldMaskInput({\n  maskInputOptions,\n  tagName,\n  type\n}) {\n  if (tagName === \"OPTION\") {\n    tagName = \"SELECT\";\n  }\n  return Boolean(\n    maskInputOptions[tagName.toLowerCase()] || type && maskInputOptions[type] || type === \"password\" || // Default to \"text\" option for inputs without a \"type\" attribute defined\n    tagName === \"INPUT\" && !type && maskInputOptions[\"text\"]\n  );\n}\nfunction maskInputValue({\n  isMasked,\n  element,\n  value,\n  maskInputFn\n}) {\n  let text = value || \"\";\n  if (!isMasked) {\n    return text;\n  }\n  if (maskInputFn) {\n    text = maskInputFn(text, element);\n  }\n  return \"*\".repeat(text.length);\n}\nfunction toLowerCase(str) {\n  return str.toLowerCase();\n}\nfunction toUpperCase(str) {\n  return str.toUpperCase();\n}\nconst ORIGINAL_ATTRIBUTE_NAME = \"__rrweb_original__\";\nfunction is2DCanvasBlank(canvas) {\n  const ctx = canvas.getContext(\"2d\");\n  if (!ctx) return true;\n  const chunkSize = 50;\n  for (let x = 0; x < canvas.width; x += chunkSize) {\n    for (let y = 0; y < canvas.height; y += chunkSize) {\n      const getImageData = ctx.getImageData;\n      const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData ? getImageData[ORIGINAL_ATTRIBUTE_NAME] : getImageData;\n      const pixelBuffer = new Uint32Array(\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n        originalGetImageData.call(\n          ctx,\n          x,\n          y,\n          Math.min(chunkSize, canvas.width - x),\n          Math.min(chunkSize, canvas.height - y)\n        ).data.buffer\n      );\n      if (pixelBuffer.some((pixel) => pixel !== 0)) return false;\n    }\n  }\n  return true;\n}\nfunction isNodeMetaEqual(a2, b) {\n  if (!a2 || !b || a2.type !== b.type) return false;\n  if (a2.type === NodeType$2.Document)\n    return a2.compatMode === b.compatMode;\n  else if (a2.type === NodeType$2.DocumentType)\n    return a2.name === b.name && a2.publicId === b.publicId && a2.systemId === b.systemId;\n  else if (a2.type === NodeType$2.Comment || a2.type === NodeType$2.Text || a2.type === NodeType$2.CDATA)\n    return a2.textContent === b.textContent;\n  else if (a2.type === NodeType$2.Element)\n    return a2.tagName === b.tagName && JSON.stringify(a2.attributes) === JSON.stringify(b.attributes) && a2.isSVG === b.isSVG && a2.needBlock === b.needBlock;\n  return false;\n}\nfunction getInputType(element) {\n  const type = element.type;\n  return element.hasAttribute(\"data-rr-is-password\") ? \"password\" : type ? (\n    // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n    toLowerCase(type)\n  ) : null;\n}\nfunction getInputValue(el, tagName, type) {\n  if (tagName === \"INPUT\" && (type === \"radio\" || type === \"checkbox\")) {\n    return el.getAttribute(\"value\") || \"\";\n  }\n  return el.value;\n}\nfunction extractFileExtension(path, baseURL) {\n  let url;\n  try {\n    url = new URL(path, baseURL ?? window.location.href);\n  } catch (err) {\n    return null;\n  }\n  const regex = /\\.([0-9a-z]+)(?:$)/i;\n  const match = url.pathname.match(regex);\n  return match?.[1] ?? null;\n}\nconst cachedImplementations$1 = {};\nfunction getImplementation$1(name) {\n  const cached = cachedImplementations$1[name];\n  if (cached) {\n    return cached;\n  }\n  const document2 = window.document;\n  let impl = window[name];\n  if (document2 && typeof document2.createElement === \"function\") {\n    try {\n      const sandbox = document2.createElement(\"iframe\");\n      sandbox.hidden = true;\n      document2.head.appendChild(sandbox);\n      const contentWindow = sandbox.contentWindow;\n      if (contentWindow && contentWindow[name]) {\n        impl = // eslint-disable-next-line @typescript-eslint/unbound-method\n        contentWindow[name];\n      }\n      document2.head.removeChild(sandbox);\n    } catch (e2) {\n    }\n  }\n  return cachedImplementations$1[name] = impl.bind(\n    window\n  );\n}\nfunction setTimeout$2(...rest) {\n  return getImplementation$1(\"setTimeout\")(...rest);\n}\nfunction clearTimeout$1(...rest) {\n  return getImplementation$1(\"clearTimeout\")(...rest);\n}\nfunction getIframeContentDocument(iframe) {\n  try {\n    return iframe.contentDocument;\n  } catch (e2) {\n  }\n}\nlet _id = 1;\nconst tagNameRegex = new RegExp(\"[^a-z0-9-_:]\");\nconst IGNORED_NODE = -2;\nfunction genId() {\n  return _id++;\n}\nfunction getValidTagName$1(element) {\n  if (element instanceof HTMLFormElement) {\n    return \"form\";\n  }\n  const processedTagName = toLowerCase(element.tagName);\n  if (tagNameRegex.test(processedTagName)) {\n    return \"div\";\n  }\n  return processedTagName;\n}\nfunction extractOrigin(url) {\n  let origin = \"\";\n  if (url.indexOf(\"//\") > -1) {\n    origin = url.split(\"/\").slice(0, 3).join(\"/\");\n  } else {\n    origin = url.split(\"/\")[0];\n  }\n  origin = origin.split(\"?\")[0];\n  return origin;\n}\nlet canvasService;\nlet canvasCtx;\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nconst URL_WWW_MATCH = /^www\\..*/i;\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction absoluteToStylesheet(cssText, href) {\n  return (cssText || \"\").replace(\n    URL_IN_CSS_REF,\n    (origin, quote1, path1, quote2, path2, path3) => {\n      const filePath = path1 || path2 || path3;\n      const maybeQuote = quote1 || quote2 || \"\";\n      if (!filePath) {\n        return origin;\n      }\n      if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n        return `url(${maybeQuote}${filePath}${maybeQuote})`;\n      }\n      if (DATA_URI.test(filePath)) {\n        return `url(${maybeQuote}${filePath}${maybeQuote})`;\n      }\n      if (filePath[0] === \"/\") {\n        return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\n      }\n      const stack = href.split(\"/\");\n      const parts = filePath.split(\"/\");\n      stack.pop();\n      for (const part of parts) {\n        if (part === \".\") {\n          continue;\n        } else if (part === \"..\") {\n          stack.pop();\n        } else {\n          stack.push(part);\n        }\n      }\n      return `url(${maybeQuote}${stack.join(\"/\")}${maybeQuote})`;\n    }\n  );\n}\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n  if (attributeValue.trim() === \"\") {\n    return attributeValue;\n  }\n  let pos = 0;\n  function collectCharacters(regEx) {\n    let chars2;\n    const match = regEx.exec(attributeValue.substring(pos));\n    if (match) {\n      chars2 = match[0];\n      pos += chars2.length;\n      return chars2;\n    }\n    return \"\";\n  }\n  const output = [];\n  while (true) {\n    collectCharacters(SRCSET_COMMAS_OR_SPACES);\n    if (pos >= attributeValue.length) {\n      break;\n    }\n    let url = collectCharacters(SRCSET_NOT_SPACES);\n    if (url.slice(-1) === \",\") {\n      url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n      output.push(url);\n    } else {\n      let descriptorsStr = \"\";\n      url = absoluteToDoc(doc, url);\n      let inParens = false;\n      while (true) {\n        const c2 = attributeValue.charAt(pos);\n        if (c2 === \"\") {\n          output.push((url + descriptorsStr).trim());\n          break;\n        } else if (!inParens) {\n          if (c2 === \",\") {\n            pos += 1;\n            output.push((url + descriptorsStr).trim());\n            break;\n          } else if (c2 === \"(\") {\n            inParens = true;\n          }\n        } else {\n          if (c2 === \")\") {\n            inParens = false;\n          }\n        }\n        descriptorsStr += c2;\n        pos += 1;\n      }\n    }\n  }\n  return output.join(\", \");\n}\nconst cachedDocument = /* @__PURE__ */ new WeakMap();\nfunction absoluteToDoc(doc, attributeValue) {\n  if (!attributeValue || attributeValue.trim() === \"\") {\n    return attributeValue;\n  }\n  return getHref(doc, attributeValue);\n}\nfunction isSVGElement(el) {\n  return Boolean(el.tagName === \"svg\" || el.ownerSVGElement);\n}\nfunction getHref(doc, customHref) {\n  let a2 = cachedDocument.get(doc);\n  if (!a2) {\n    a2 = doc.createElement(\"a\");\n    cachedDocument.set(doc, a2);\n  }\n  if (!customHref) {\n    customHref = \"\";\n  } else if (customHref.startsWith(\"blob:\") || customHref.startsWith(\"data:\")) {\n    return customHref;\n  }\n  a2.setAttribute(\"href\", customHref);\n  return a2.href;\n}\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn) {\n  if (!value) {\n    return value;\n  }\n  if (name === \"src\" || name === \"href\" && !(tagName === \"use\" && value[0] === \"#\")) {\n    return absoluteToDoc(doc, value);\n  } else if (name === \"xlink:href\" && value[0] !== \"#\") {\n    return absoluteToDoc(doc, value);\n  } else if (name === \"background\" && (tagName === \"table\" || tagName === \"td\" || tagName === \"th\")) {\n    return absoluteToDoc(doc, value);\n  } else if (name === \"srcset\") {\n    return getAbsoluteSrcsetString(doc, value);\n  } else if (name === \"style\") {\n    return absoluteToStylesheet(value, getHref(doc));\n  } else if (tagName === \"object\" && name === \"data\") {\n    return absoluteToDoc(doc, value);\n  }\n  if (typeof maskAttributeFn === \"function\") {\n    return maskAttributeFn(name, value, element);\n  }\n  return value;\n}\nfunction ignoreAttribute(tagName, name, _value) {\n  return (tagName === \"video\" || tagName === \"audio\") && name === \"autoplay\";\n}\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\n  try {\n    if (unblockSelector && element.matches(unblockSelector)) {\n      return false;\n    }\n    if (typeof blockClass === \"string\") {\n      if (element.classList.contains(blockClass)) {\n        return true;\n      }\n    } else {\n      for (let eIndex = element.classList.length; eIndex--; ) {\n        const className = element.classList[eIndex];\n        if (blockClass.test(className)) {\n          return true;\n        }\n      }\n    }\n    if (blockSelector) {\n      return element.matches(blockSelector);\n    }\n  } catch (e2) {\n  }\n  return false;\n}\nfunction elementClassMatchesRegex(el, regex) {\n  for (let eIndex = el.classList.length; eIndex--; ) {\n    const className = el.classList[eIndex];\n    if (regex.test(className)) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\n  if (!node) return -1;\n  if (node.nodeType !== node.ELEMENT_NODE) return -1;\n  if (distance > limit) return -1;\n  if (matchPredicate(node)) return distance;\n  return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\n}\nfunction createMatchPredicate(className, selector) {\n  return (node) => {\n    const el = node;\n    if (el === null) return false;\n    try {\n      if (className) {\n        if (typeof className === \"string\") {\n          if (el.matches(`.${className}`)) return true;\n        } else if (elementClassMatchesRegex(el, className)) {\n          return true;\n        }\n      }\n      if (selector && el.matches(selector)) return true;\n      return false;\n    } catch {\n      return false;\n    }\n  };\n}\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\n  try {\n    const el = node.nodeType === node.ELEMENT_NODE ? node : node.parentElement;\n    if (el === null) return false;\n    if (el.tagName === \"INPUT\") {\n      const autocomplete = el.getAttribute(\"autocomplete\");\n      const disallowedAutocompleteValues = [\n        \"current-password\",\n        \"new-password\",\n        \"cc-number\",\n        \"cc-exp\",\n        \"cc-exp-month\",\n        \"cc-exp-year\",\n        \"cc-csc\"\n      ];\n      if (disallowedAutocompleteValues.includes(autocomplete)) {\n        return true;\n      }\n    }\n    let maskDistance = -1;\n    let unmaskDistance = -1;\n    if (maskAllText) {\n      unmaskDistance = distanceToMatch(\n        el,\n        createMatchPredicate(unmaskTextClass, unmaskTextSelector)\n      );\n      if (unmaskDistance < 0) {\n        return true;\n      }\n      maskDistance = distanceToMatch(\n        el,\n        createMatchPredicate(maskTextClass, maskTextSelector),\n        unmaskDistance >= 0 ? unmaskDistance : Infinity\n      );\n    } else {\n      maskDistance = distanceToMatch(\n        el,\n        createMatchPredicate(maskTextClass, maskTextSelector)\n      );\n      if (maskDistance < 0) {\n        return false;\n      }\n      unmaskDistance = distanceToMatch(\n        el,\n        createMatchPredicate(unmaskTextClass, unmaskTextSelector),\n        maskDistance >= 0 ? maskDistance : Infinity\n      );\n    }\n    return maskDistance >= 0 ? unmaskDistance >= 0 ? maskDistance <= unmaskDistance : true : unmaskDistance >= 0 ? false : !!maskAllText;\n  } catch (e2) {\n  }\n  return !!maskAllText;\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n  const win = iframeEl.contentWindow;\n  if (!win) {\n    return;\n  }\n  let fired = false;\n  let readyState;\n  try {\n    readyState = win.document.readyState;\n  } catch (error) {\n    return;\n  }\n  if (readyState !== \"complete\") {\n    const timer = setTimeout$2(() => {\n      if (!fired) {\n        listener();\n        fired = true;\n      }\n    }, iframeLoadTimeout);\n    iframeEl.addEventListener(\"load\", () => {\n      clearTimeout$1(timer);\n      fired = true;\n      listener();\n    });\n    return;\n  }\n  const blankUrl = \"about:blank\";\n  if (win.location.href !== blankUrl || iframeEl.src === blankUrl || iframeEl.src === \"\") {\n    setTimeout$2(listener, 0);\n    return iframeEl.addEventListener(\"load\", listener);\n  }\n  iframeEl.addEventListener(\"load\", listener);\n}\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\n  let fired = false;\n  let styleSheetLoaded;\n  try {\n    styleSheetLoaded = link.sheet;\n  } catch (error) {\n    return;\n  }\n  if (styleSheetLoaded) return;\n  const timer = setTimeout$2(() => {\n    if (!fired) {\n      listener();\n      fired = true;\n    }\n  }, styleSheetLoadTimeout);\n  link.addEventListener(\"load\", () => {\n    clearTimeout$1(timer);\n    fired = true;\n    listener();\n  });\n}\nfunction serializeNode(n2, options) {\n  const {\n    doc,\n    mirror: mirror2,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    maskAllText,\n    maskAttributeFn,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    inlineStylesheet,\n    maskInputOptions = {},\n    maskTextFn,\n    maskInputFn,\n    dataURLOptions = {},\n    inlineImages,\n    recordCanvas,\n    keepIframeSrcFn,\n    newlyAddedElement = false\n  } = options;\n  const rootId = getRootId(doc, mirror2);\n  switch (n2.nodeType) {\n    case n2.DOCUMENT_NODE:\n      if (n2.compatMode !== \"CSS1Compat\") {\n        return {\n          type: NodeType$2.Document,\n          childNodes: [],\n          compatMode: n2.compatMode\n          // probably \"BackCompat\"\n        };\n      } else {\n        return {\n          type: NodeType$2.Document,\n          childNodes: []\n        };\n      }\n    case n2.DOCUMENT_TYPE_NODE:\n      return {\n        type: NodeType$2.DocumentType,\n        name: n2.name,\n        publicId: n2.publicId,\n        systemId: n2.systemId,\n        rootId\n      };\n    case n2.ELEMENT_NODE:\n      return serializeElementNode(n2, {\n        doc,\n        blockClass,\n        blockSelector,\n        unblockSelector,\n        inlineStylesheet,\n        maskAttributeFn,\n        maskInputOptions,\n        maskInputFn,\n        dataURLOptions,\n        inlineImages,\n        recordCanvas,\n        keepIframeSrcFn,\n        newlyAddedElement,\n        rootId,\n        maskAllText,\n        maskTextClass,\n        unmaskTextClass,\n        maskTextSelector,\n        unmaskTextSelector\n      });\n    case n2.TEXT_NODE:\n      return serializeTextNode(n2, {\n        doc,\n        maskAllText,\n        maskTextClass,\n        unmaskTextClass,\n        maskTextSelector,\n        unmaskTextSelector,\n        maskTextFn,\n        maskInputOptions,\n        maskInputFn,\n        rootId\n      });\n    case n2.CDATA_SECTION_NODE:\n      return {\n        type: NodeType$2.CDATA,\n        textContent: \"\",\n        rootId\n      };\n    case n2.COMMENT_NODE:\n      return {\n        type: NodeType$2.Comment,\n        textContent: n2.textContent || \"\",\n        rootId\n      };\n    default:\n      return false;\n  }\n}\nfunction getRootId(doc, mirror2) {\n  if (!mirror2.hasNode(doc)) return void 0;\n  const docId = mirror2.getId(doc);\n  return docId === 1 ? void 0 : docId;\n}\nfunction serializeTextNode(n2, options) {\n  const {\n    maskAllText,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    maskTextFn,\n    maskInputOptions,\n    maskInputFn,\n    rootId\n  } = options;\n  const parentTagName = n2.parentNode && n2.parentNode.tagName;\n  let textContent = n2.textContent;\n  const isStyle = parentTagName === \"STYLE\" ? true : void 0;\n  const isScript = parentTagName === \"SCRIPT\" ? true : void 0;\n  const isTextarea = parentTagName === \"TEXTAREA\" ? true : void 0;\n  if (isStyle && textContent) {\n    try {\n      if (n2.nextSibling || n2.previousSibling) {\n      } else if (n2.parentNode.sheet?.cssRules) {\n        textContent = stringifyStylesheet(\n          n2.parentNode.sheet\n        );\n      }\n    } catch (err) {\n      console.warn(\n        `Cannot get CSS styles from text's parentNode. Error: ${err}`,\n        n2\n      );\n    }\n    textContent = absoluteToStylesheet(textContent, getHref(options.doc));\n  }\n  if (isScript) {\n    textContent = \"SCRIPT_PLACEHOLDER\";\n  }\n  const forceMask = needMaskingText(\n    n2,\n    maskTextClass,\n    maskTextSelector,\n    unmaskTextClass,\n    unmaskTextSelector,\n    maskAllText\n  );\n  if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\n    textContent = maskTextFn ? maskTextFn(textContent, n2.parentElement) : textContent.replace(/[\\S]/g, \"*\");\n  }\n  if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\n    textContent = maskInputFn ? maskInputFn(textContent, n2.parentNode) : textContent.replace(/[\\S]/g, \"*\");\n  }\n  if (parentTagName === \"OPTION\" && textContent) {\n    const isInputMasked = shouldMaskInput({\n      type: null,\n      tagName: parentTagName,\n      maskInputOptions\n    });\n    textContent = maskInputValue({\n      isMasked: needMaskingText(\n        n2,\n        maskTextClass,\n        maskTextSelector,\n        unmaskTextClass,\n        unmaskTextSelector,\n        isInputMasked\n      ),\n      element: n2,\n      value: textContent,\n      maskInputFn\n    });\n  }\n  return {\n    type: NodeType$2.Text,\n    textContent: textContent || \"\",\n    isStyle,\n    rootId\n  };\n}\nfunction serializeElementNode(n2, options) {\n  const {\n    doc,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    inlineStylesheet,\n    maskInputOptions = {},\n    maskAttributeFn,\n    maskInputFn,\n    dataURLOptions = {},\n    inlineImages,\n    recordCanvas,\n    keepIframeSrcFn,\n    newlyAddedElement = false,\n    rootId,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector\n  } = options;\n  const needBlock = _isBlockedElement(\n    n2,\n    blockClass,\n    blockSelector,\n    unblockSelector\n  );\n  const tagName = getValidTagName$1(n2);\n  let attributes2 = {};\n  const len = n2.attributes.length;\n  for (let i2 = 0; i2 < len; i2++) {\n    const attr = n2.attributes[i2];\n    if (attr.name && !ignoreAttribute(tagName, attr.name, attr.value)) {\n      attributes2[attr.name] = transformAttribute(\n        doc,\n        tagName,\n        toLowerCase(attr.name),\n        attr.value,\n        n2,\n        maskAttributeFn\n      );\n    }\n  }\n  if (tagName === \"link\" && inlineStylesheet) {\n    const stylesheet = Array.from(doc.styleSheets).find((s2) => {\n      return s2.href === n2.href;\n    });\n    let cssText = null;\n    if (stylesheet) {\n      cssText = stringifyStylesheet(stylesheet);\n    }\n    if (cssText) {\n      attributes2.rel = null;\n      attributes2.href = null;\n      attributes2.crossorigin = null;\n      attributes2._cssText = absoluteToStylesheet(cssText, stylesheet.href);\n    }\n  }\n  if (tagName === \"style\" && n2.sheet && // TODO: Currently we only try to get dynamic stylesheet when it is an empty style element\n  !(n2.innerText || n2.textContent || \"\").trim().length) {\n    const cssText = stringifyStylesheet(\n      n2.sheet\n    );\n    if (cssText) {\n      attributes2._cssText = absoluteToStylesheet(cssText, getHref(doc));\n    }\n  }\n  if (tagName === \"input\" || tagName === \"textarea\" || tagName === \"select\" || tagName === \"option\") {\n    const el = n2;\n    const type = getInputType(el);\n    const value = getInputValue(el, toUpperCase(tagName), type);\n    const checked = el.checked;\n    if (type !== \"submit\" && type !== \"button\" && value) {\n      const forceMask = needMaskingText(\n        el,\n        maskTextClass,\n        maskTextSelector,\n        unmaskTextClass,\n        unmaskTextSelector,\n        shouldMaskInput({\n          type,\n          tagName: toUpperCase(tagName),\n          maskInputOptions\n        })\n      );\n      attributes2.value = maskInputValue({\n        isMasked: forceMask,\n        element: el,\n        value,\n        maskInputFn\n      });\n    }\n    if (checked) {\n      attributes2.checked = checked;\n    }\n  }\n  if (tagName === \"option\") {\n    if (n2.selected && !maskInputOptions[\"select\"]) {\n      attributes2.selected = true;\n    } else {\n      delete attributes2.selected;\n    }\n  }\n  if (tagName === \"canvas\" && recordCanvas) {\n    if (n2.__context === \"2d\") {\n      if (!is2DCanvasBlank(n2)) {\n        attributes2.rr_dataURL = n2.toDataURL(\n          dataURLOptions.type,\n          dataURLOptions.quality\n        );\n      }\n    } else if (!(\"__context\" in n2)) {\n      const canvasDataURL = n2.toDataURL(\n        dataURLOptions.type,\n        dataURLOptions.quality\n      );\n      const blankCanvas = doc.createElement(\"canvas\");\n      blankCanvas.width = n2.width;\n      blankCanvas.height = n2.height;\n      const blankCanvasDataURL = blankCanvas.toDataURL(\n        dataURLOptions.type,\n        dataURLOptions.quality\n      );\n      if (canvasDataURL !== blankCanvasDataURL) {\n        attributes2.rr_dataURL = canvasDataURL;\n      }\n    }\n  }\n  if (tagName === \"img\" && inlineImages) {\n    if (!canvasService) {\n      canvasService = doc.createElement(\"canvas\");\n      canvasCtx = canvasService.getContext(\"2d\");\n    }\n    const image = n2;\n    const imageSrc = image.currentSrc || image.getAttribute(\"src\") || \"<unknown-src>\";\n    const priorCrossOrigin = image.crossOrigin;\n    const recordInlineImage = () => {\n      image.removeEventListener(\"load\", recordInlineImage);\n      try {\n        canvasService.width = image.naturalWidth;\n        canvasService.height = image.naturalHeight;\n        canvasCtx.drawImage(image, 0, 0);\n        attributes2.rr_dataURL = canvasService.toDataURL(\n          dataURLOptions.type,\n          dataURLOptions.quality\n        );\n      } catch (err) {\n        if (image.crossOrigin !== \"anonymous\") {\n          image.crossOrigin = \"anonymous\";\n          if (image.complete && image.naturalWidth !== 0)\n            recordInlineImage();\n          else image.addEventListener(\"load\", recordInlineImage);\n          return;\n        } else {\n          console.warn(\n            `Cannot inline img src=${imageSrc}! Error: ${err}`\n          );\n        }\n      }\n      if (image.crossOrigin === \"anonymous\") {\n        priorCrossOrigin ? attributes2.crossOrigin = priorCrossOrigin : image.removeAttribute(\"crossorigin\");\n      }\n    };\n    if (image.complete && image.naturalWidth !== 0) recordInlineImage();\n    else image.addEventListener(\"load\", recordInlineImage);\n  }\n  if (tagName === \"audio\" || tagName === \"video\") {\n    attributes2.rr_mediaState = n2.paused ? \"paused\" : \"played\";\n    attributes2.rr_mediaCurrentTime = n2.currentTime;\n  }\n  if (!newlyAddedElement) {\n    if (n2.scrollLeft) {\n      attributes2.rr_scrollLeft = n2.scrollLeft;\n    }\n    if (n2.scrollTop) {\n      attributes2.rr_scrollTop = n2.scrollTop;\n    }\n  }\n  if (needBlock) {\n    const { width, height } = n2.getBoundingClientRect();\n    attributes2 = {\n      class: attributes2.class,\n      rr_width: `${width}px`,\n      rr_height: `${height}px`\n    };\n  }\n  if (tagName === \"iframe\" && !keepIframeSrcFn(attributes2.src)) {\n    if (!needBlock && !getIframeContentDocument(n2)) {\n      attributes2.rr_src = attributes2.src;\n    }\n    delete attributes2.src;\n  }\n  let isCustomElement;\n  try {\n    if (customElements.get(tagName)) isCustomElement = true;\n  } catch (e2) {\n  }\n  return {\n    type: NodeType$2.Element,\n    tagName,\n    attributes: attributes2,\n    childNodes: [],\n    isSVG: isSVGElement(n2) || void 0,\n    needBlock,\n    rootId,\n    isCustom: isCustomElement\n  };\n}\nfunction lowerIfExists(maybeAttr) {\n  if (maybeAttr === void 0 || maybeAttr === null) {\n    return \"\";\n  } else {\n    return maybeAttr.toLowerCase();\n  }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n  if (slimDOMOptions.comment && sn.type === NodeType$2.Comment) {\n    return true;\n  } else if (sn.type === NodeType$2.Element) {\n    if (slimDOMOptions.script && // script tag\n    (sn.tagName === \"script\" || // (module)preload link\n    sn.tagName === \"link\" && (sn.attributes.rel === \"preload\" || sn.attributes.rel === \"modulepreload\") || // prefetch link\n    sn.tagName === \"link\" && sn.attributes.rel === \"prefetch\" && typeof sn.attributes.href === \"string\" && extractFileExtension(sn.attributes.href) === \"js\")) {\n      return true;\n    } else if (slimDOMOptions.headFavicon && (sn.tagName === \"link\" && sn.attributes.rel === \"shortcut icon\" || sn.tagName === \"meta\" && (lowerIfExists(sn.attributes.name).match(\n      /^msapplication-tile(image|color)$/\n    ) || lowerIfExists(sn.attributes.name) === \"application-name\" || lowerIfExists(sn.attributes.rel) === \"icon\" || lowerIfExists(sn.attributes.rel) === \"apple-touch-icon\" || lowerIfExists(sn.attributes.rel) === \"shortcut icon\"))) {\n      return true;\n    } else if (sn.tagName === \"meta\") {\n      if (slimDOMOptions.headMetaDescKeywords && lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n        return true;\n      } else if (slimDOMOptions.headMetaSocial && (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) || // og = opengraph (facebook)\n      lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) || lowerIfExists(sn.attributes.name) === \"pinterest\")) {\n        return true;\n      } else if (slimDOMOptions.headMetaRobots && (lowerIfExists(sn.attributes.name) === \"robots\" || lowerIfExists(sn.attributes.name) === \"googlebot\" || lowerIfExists(sn.attributes.name) === \"bingbot\")) {\n        return true;\n      } else if (slimDOMOptions.headMetaHttpEquiv && sn.attributes[\"http-equiv\"] !== void 0) {\n        return true;\n      } else if (slimDOMOptions.headMetaAuthorship && (lowerIfExists(sn.attributes.name) === \"author\" || lowerIfExists(sn.attributes.name) === \"generator\" || lowerIfExists(sn.attributes.name) === \"framework\" || lowerIfExists(sn.attributes.name) === \"publisher\" || lowerIfExists(sn.attributes.name) === \"progid\" || lowerIfExists(sn.attributes.property).match(/^article:/) || lowerIfExists(sn.attributes.property).match(/^product:/))) {\n        return true;\n      } else if (slimDOMOptions.headMetaVerification && (lowerIfExists(sn.attributes.name) === \"google-site-verification\" || lowerIfExists(sn.attributes.name) === \"yandex-verification\" || lowerIfExists(sn.attributes.name) === \"csrf-token\" || lowerIfExists(sn.attributes.name) === \"p:domain_verify\" || lowerIfExists(sn.attributes.name) === \"verify-v1\" || lowerIfExists(sn.attributes.name) === \"verification\" || lowerIfExists(sn.attributes.name) === \"shopify-checkout-api-token\")) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\nfunction serializeNodeWithId(n2, options) {\n  const {\n    doc,\n    mirror: mirror2,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    maskAllText,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    skipChild = false,\n    inlineStylesheet = true,\n    maskInputOptions = {},\n    maskAttributeFn,\n    maskTextFn,\n    maskInputFn,\n    slimDOMOptions,\n    dataURLOptions = {},\n    inlineImages = false,\n    recordCanvas = false,\n    onSerialize,\n    onIframeLoad,\n    iframeLoadTimeout = 5e3,\n    onStylesheetLoad,\n    stylesheetLoadTimeout = 5e3,\n    keepIframeSrcFn = () => false,\n    newlyAddedElement = false\n  } = options;\n  let { preserveWhiteSpace = true } = options;\n  const _serializedNode = serializeNode(n2, {\n    doc,\n    mirror: mirror2,\n    blockClass,\n    blockSelector,\n    maskAllText,\n    unblockSelector,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    inlineStylesheet,\n    maskInputOptions,\n    maskAttributeFn,\n    maskTextFn,\n    maskInputFn,\n    dataURLOptions,\n    inlineImages,\n    recordCanvas,\n    keepIframeSrcFn,\n    newlyAddedElement\n  });\n  if (!_serializedNode) {\n    console.warn(n2, \"not serialized\");\n    return null;\n  }\n  let id;\n  if (mirror2.hasNode(n2)) {\n    id = mirror2.getId(n2);\n  } else if (slimDOMExcluded(_serializedNode, slimDOMOptions) || !preserveWhiteSpace && _serializedNode.type === NodeType$2.Text && !_serializedNode.isStyle && !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, \"\").length) {\n    id = IGNORED_NODE;\n  } else {\n    id = genId();\n  }\n  const serializedNode2 = Object.assign(_serializedNode, { id });\n  mirror2.add(n2, serializedNode2);\n  if (id === IGNORED_NODE) {\n    return null;\n  }\n  if (onSerialize) {\n    onSerialize(n2);\n  }\n  let recordChild = !skipChild;\n  if (serializedNode2.type === NodeType$2.Element) {\n    recordChild = recordChild && !serializedNode2.needBlock;\n    delete serializedNode2.needBlock;\n    const shadowRoot = n2.shadowRoot;\n    if (shadowRoot && isNativeShadowDom(shadowRoot))\n      serializedNode2.isShadowHost = true;\n  }\n  if ((serializedNode2.type === NodeType$2.Document || serializedNode2.type === NodeType$2.Element) && recordChild) {\n    if (slimDOMOptions.headWhitespace && serializedNode2.type === NodeType$2.Element && serializedNode2.tagName === \"head\") {\n      preserveWhiteSpace = false;\n    }\n    const bypassOptions = {\n      doc,\n      mirror: mirror2,\n      blockClass,\n      blockSelector,\n      maskAllText,\n      unblockSelector,\n      maskTextClass,\n      unmaskTextClass,\n      maskTextSelector,\n      unmaskTextSelector,\n      skipChild,\n      inlineStylesheet,\n      maskInputOptions,\n      maskAttributeFn,\n      maskTextFn,\n      maskInputFn,\n      slimDOMOptions,\n      dataURLOptions,\n      inlineImages,\n      recordCanvas,\n      preserveWhiteSpace,\n      onSerialize,\n      onIframeLoad,\n      iframeLoadTimeout,\n      onStylesheetLoad,\n      stylesheetLoadTimeout,\n      keepIframeSrcFn\n    };\n    for (const childN of Array.from(n2.childNodes)) {\n      const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n      if (serializedChildNode) {\n        serializedNode2.childNodes.push(serializedChildNode);\n      }\n    }\n    if (isElement(n2) && n2.shadowRoot) {\n      for (const childN of Array.from(n2.shadowRoot.childNodes)) {\n        const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n        if (serializedChildNode) {\n          isNativeShadowDom(n2.shadowRoot) && (serializedChildNode.isShadow = true);\n          serializedNode2.childNodes.push(serializedChildNode);\n        }\n      }\n    }\n  }\n  if (n2.parentNode && isShadowRoot(n2.parentNode) && isNativeShadowDom(n2.parentNode)) {\n    serializedNode2.isShadow = true;\n  }\n  if (serializedNode2.type === NodeType$2.Element && serializedNode2.tagName === \"iframe\" && !_isBlockedElement(\n    n2,\n    blockClass,\n    blockSelector,\n    unblockSelector\n  )) {\n    onceIframeLoaded(\n      n2,\n      () => {\n        const iframeDoc = getIframeContentDocument(n2);\n        if (iframeDoc && onIframeLoad) {\n          const serializedIframeNode = serializeNodeWithId(iframeDoc, {\n            doc: iframeDoc,\n            mirror: mirror2,\n            blockClass,\n            blockSelector,\n            unblockSelector,\n            maskAllText,\n            maskTextClass,\n            unmaskTextClass,\n            maskTextSelector,\n            unmaskTextSelector,\n            skipChild: false,\n            inlineStylesheet,\n            maskInputOptions,\n            maskAttributeFn,\n            maskTextFn,\n            maskInputFn,\n            slimDOMOptions,\n            dataURLOptions,\n            inlineImages,\n            recordCanvas,\n            preserveWhiteSpace,\n            onSerialize,\n            onIframeLoad,\n            iframeLoadTimeout,\n            onStylesheetLoad,\n            stylesheetLoadTimeout,\n            keepIframeSrcFn\n          });\n          if (serializedIframeNode) {\n            onIframeLoad(\n              n2,\n              serializedIframeNode\n            );\n          }\n        }\n      },\n      iframeLoadTimeout\n    );\n  }\n  if (serializedNode2.type === NodeType$2.Element && serializedNode2.tagName === \"link\" && typeof serializedNode2.attributes.rel === \"string\" && (serializedNode2.attributes.rel === \"stylesheet\" || serializedNode2.attributes.rel === \"preload\" && typeof serializedNode2.attributes.href === \"string\" && extractFileExtension(serializedNode2.attributes.href) === \"css\")) {\n    onceStylesheetLoaded(\n      n2,\n      () => {\n        if (onStylesheetLoad) {\n          const serializedLinkNode = serializeNodeWithId(n2, {\n            doc,\n            mirror: mirror2,\n            blockClass,\n            blockSelector,\n            unblockSelector,\n            maskAllText,\n            maskTextClass,\n            unmaskTextClass,\n            maskTextSelector,\n            unmaskTextSelector,\n            skipChild: false,\n            inlineStylesheet,\n            maskInputOptions,\n            maskAttributeFn,\n            maskTextFn,\n            maskInputFn,\n            slimDOMOptions,\n            dataURLOptions,\n            inlineImages,\n            recordCanvas,\n            preserveWhiteSpace,\n            onSerialize,\n            onIframeLoad,\n            iframeLoadTimeout,\n            onStylesheetLoad,\n            stylesheetLoadTimeout,\n            keepIframeSrcFn\n          });\n          if (serializedLinkNode) {\n            onStylesheetLoad(\n              n2,\n              serializedLinkNode\n            );\n          }\n        }\n      },\n      stylesheetLoadTimeout\n    );\n  }\n  return serializedNode2;\n}\nfunction snapshot(n2, options) {\n  const {\n    mirror: mirror2 = new Mirror(),\n    blockClass = \"rr-block\",\n    blockSelector = null,\n    unblockSelector = null,\n    maskAllText = false,\n    maskTextClass = \"rr-mask\",\n    unmaskTextClass = null,\n    maskTextSelector = null,\n    unmaskTextSelector = null,\n    inlineStylesheet = true,\n    inlineImages = false,\n    recordCanvas = false,\n    maskAllInputs = false,\n    maskAttributeFn,\n    maskTextFn,\n    maskInputFn,\n    slimDOM = false,\n    dataURLOptions,\n    preserveWhiteSpace,\n    onSerialize,\n    onIframeLoad,\n    iframeLoadTimeout,\n    onStylesheetLoad,\n    stylesheetLoadTimeout,\n    keepIframeSrcFn = () => false\n  } = options || {};\n  const maskInputOptions = maskAllInputs === true ? {\n    color: true,\n    date: true,\n    \"datetime-local\": true,\n    email: true,\n    month: true,\n    number: true,\n    range: true,\n    search: true,\n    tel: true,\n    text: true,\n    time: true,\n    url: true,\n    week: true,\n    textarea: true,\n    select: true\n  } : maskAllInputs === false ? {} : maskAllInputs;\n  const slimDOMOptions = slimDOM === true || slimDOM === \"all\" ? (\n    // if true: set of sensible options that should not throw away any information\n    {\n      script: true,\n      comment: true,\n      headFavicon: true,\n      headWhitespace: true,\n      headMetaDescKeywords: slimDOM === \"all\",\n      // destructive\n      headMetaSocial: true,\n      headMetaRobots: true,\n      headMetaHttpEquiv: true,\n      headMetaAuthorship: true,\n      headMetaVerification: true\n    }\n  ) : slimDOM === false ? {} : slimDOM;\n  return serializeNodeWithId(n2, {\n    doc: n2,\n    mirror: mirror2,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    maskAllText,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    skipChild: false,\n    inlineStylesheet,\n    maskInputOptions,\n    maskAttributeFn,\n    maskTextFn,\n    maskInputFn,\n    slimDOMOptions,\n    dataURLOptions,\n    inlineImages,\n    recordCanvas,\n    preserveWhiteSpace,\n    onSerialize,\n    onIframeLoad,\n    iframeLoadTimeout,\n    onStylesheetLoad,\n    stylesheetLoadTimeout,\n    keepIframeSrcFn,\n    newlyAddedElement: false\n  });\n}\nconst commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\nfunction parse(css, options = {}) {\n  let lineno = 1;\n  let column = 1;\n  function updatePosition(str) {\n    const lines = str.match(/\\n/g);\n    if (lines) {\n      lineno += lines.length;\n    }\n    const i2 = str.lastIndexOf(\"\\n\");\n    column = i2 === -1 ? column + str.length : str.length - i2;\n  }\n  function position() {\n    const start = { line: lineno, column };\n    return (node) => {\n      node.position = new Position(start);\n      whitespace();\n      return node;\n    };\n  }\n  const _Position = class _Position2 {\n    constructor(start) {\n      __publicField$1(this, \"content\");\n      __publicField$1(this, \"start\");\n      __publicField$1(this, \"end\");\n      __publicField$1(this, \"source\");\n      this.start = start;\n      this.end = { line: lineno, column };\n      this.source = options.source;\n      this.content = _Position2.content;\n    }\n  };\n  __publicField$1(_Position, \"content\");\n  let Position = _Position;\n  Position.content = css;\n  const errorsList = [];\n  function error(msg) {\n    const err = new Error(\n      `${options.source || \"\"}:${lineno}:${column}: ${msg}`\n    );\n    err.reason = msg;\n    err.filename = options.source;\n    err.line = lineno;\n    err.column = column;\n    err.source = css;\n    if (options.silent) {\n      errorsList.push(err);\n    } else {\n      throw err;\n    }\n  }\n  function stylesheet() {\n    const rulesList = rules2();\n    return {\n      type: \"stylesheet\",\n      stylesheet: {\n        source: options.source,\n        rules: rulesList,\n        parsingErrors: errorsList\n      }\n    };\n  }\n  function open() {\n    return match(/^{\\s*/);\n  }\n  function close() {\n    return match(/^}/);\n  }\n  function rules2() {\n    let node;\n    const rules22 = [];\n    whitespace();\n    comments(rules22);\n    while (css.length && css.charAt(0) !== \"}\" && (node = atrule() || rule())) {\n      if (node) {\n        rules22.push(node);\n        comments(rules22);\n      }\n    }\n    return rules22;\n  }\n  function match(re) {\n    const m = re.exec(css);\n    if (!m) {\n      return;\n    }\n    const str = m[0];\n    updatePosition(str);\n    css = css.slice(str.length);\n    return m;\n  }\n  function whitespace() {\n    match(/^\\s*/);\n  }\n  function comments(rules22 = []) {\n    let c2;\n    while (c2 = comment()) {\n      if (c2) {\n        rules22.push(c2);\n      }\n      c2 = comment();\n    }\n    return rules22;\n  }\n  function comment() {\n    const pos = position();\n    if (\"/\" !== css.charAt(0) || \"*\" !== css.charAt(1)) {\n      return;\n    }\n    let i2 = 2;\n    while (\"\" !== css.charAt(i2) && (\"*\" !== css.charAt(i2) || \"/\" !== css.charAt(i2 + 1))) {\n      ++i2;\n    }\n    i2 += 2;\n    if (\"\" === css.charAt(i2 - 1)) {\n      return error(\"End of comment missing\");\n    }\n    const str = css.slice(2, i2 - 2);\n    column += 2;\n    updatePosition(str);\n    css = css.slice(i2);\n    column += 2;\n    return pos({\n      type: \"comment\",\n      comment: str\n    });\n  }\n  function selector() {\n    const m = match(/^([^{]+)/);\n    if (!m) {\n      return;\n    }\n    const splitSelectors = trim(m[0]).replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, \"\").replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, (m2) => {\n      return m2.replace(/,/g, \"‌\");\n    }).split(/\\s*(?![^(]*\\)),\\s*/);\n    if (splitSelectors.length <= 1) {\n      return splitSelectors.map((s2) => {\n        return s2.replace(/\\u200C/g, \",\");\n      });\n    }\n    let i2 = 0;\n    let j = 0;\n    const len = splitSelectors.length;\n    const finalSelectors = [];\n    while (i2 < len) {\n      const openingParensCount = (splitSelectors[i2].match(/\\(/g) || []).length;\n      const closingParensCount = (splitSelectors[i2].match(/\\)/g) || []).length;\n      let unbalancedParens = openingParensCount - closingParensCount;\n      if (unbalancedParens >= 1) {\n        let foundClosingSelector = false;\n        j = i2 + 1;\n        while (j < len) {\n          const nextOpeningParensCount = (splitSelectors[j].match(/\\(/g) || []).length;\n          const nextClosingParensCount = (splitSelectors[j].match(/\\)/g) || []).length;\n          const nextUnbalancedParens = nextClosingParensCount - nextOpeningParensCount;\n          if (nextUnbalancedParens === unbalancedParens) {\n            finalSelectors.push(splitSelectors.slice(i2, j + 1).join(\",\"));\n            i2 = j + 1;\n            foundClosingSelector = true;\n            break;\n          }\n          j++;\n          unbalancedParens -= nextUnbalancedParens;\n        }\n        if (foundClosingSelector) {\n          continue;\n        }\n        splitSelectors.slice(i2, len).forEach((selector2) => selector2 && finalSelectors.push(selector2));\n        break;\n      }\n      splitSelectors[i2] && finalSelectors.push(splitSelectors[i2]);\n      i2++;\n    }\n    return finalSelectors.map((s2) => {\n      return s2.replace(/\\u200C/g, \",\");\n    });\n  }\n  function declaration() {\n    const pos = position();\n    const propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\n    if (!propMatch) {\n      return;\n    }\n    const prop = trim(propMatch[0]);\n    if (!match(/^:\\s*/)) {\n      return error(`property missing ':'`);\n    }\n    const val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\n    const ret = pos({\n      type: \"declaration\",\n      property: prop.replace(commentre, \"\"),\n      value: val ? trim(val[0]).replace(commentre, \"\") : \"\"\n    });\n    match(/^[;\\s]*/);\n    return ret;\n  }\n  function declarations() {\n    const decls = [];\n    if (!open()) {\n      return error(`missing '{'`);\n    }\n    comments(decls);\n    let decl;\n    while (decl = declaration()) {\n      if (decl !== false) {\n        decls.push(decl);\n        comments(decls);\n      }\n      decl = declaration();\n    }\n    if (!close()) {\n      return error(`missing '}'`);\n    }\n    return decls;\n  }\n  function keyframe() {\n    let m;\n    const vals = [];\n    const pos = position();\n    while (m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/)) {\n      vals.push(m[1]);\n      match(/^,\\s*/);\n    }\n    if (!vals.length) {\n      return;\n    }\n    return pos({\n      type: \"keyframe\",\n      values: vals,\n      declarations: declarations()\n    });\n  }\n  function atkeyframes() {\n    const pos = position();\n    let m = match(/^@([-\\w]+)?keyframes\\s*/);\n    if (!m) {\n      return;\n    }\n    const vendor = m[1];\n    m = match(/^([-\\w]+)\\s*/);\n    if (!m) {\n      return error(\"@keyframes missing name\");\n    }\n    const name = m[1];\n    if (!open()) {\n      return error(`@keyframes missing '{'`);\n    }\n    let frame;\n    let frames = comments();\n    while (frame = keyframe()) {\n      frames.push(frame);\n      frames = frames.concat(comments());\n    }\n    if (!close()) {\n      return error(`@keyframes missing '}'`);\n    }\n    return pos({\n      type: \"keyframes\",\n      name,\n      vendor,\n      keyframes: frames\n    });\n  }\n  function atsupports() {\n    const pos = position();\n    const m = match(/^@supports *([^{]+)/);\n    if (!m) {\n      return;\n    }\n    const supports = trim(m[1]);\n    if (!open()) {\n      return error(`@supports missing '{'`);\n    }\n    const style = comments().concat(rules2());\n    if (!close()) {\n      return error(`@supports missing '}'`);\n    }\n    return pos({\n      type: \"supports\",\n      supports,\n      rules: style\n    });\n  }\n  function athost() {\n    const pos = position();\n    const m = match(/^@host\\s*/);\n    if (!m) {\n      return;\n    }\n    if (!open()) {\n      return error(`@host missing '{'`);\n    }\n    const style = comments().concat(rules2());\n    if (!close()) {\n      return error(`@host missing '}'`);\n    }\n    return pos({\n      type: \"host\",\n      rules: style\n    });\n  }\n  function atmedia() {\n    const pos = position();\n    const m = match(/^@media *([^{]+)/);\n    if (!m) {\n      return;\n    }\n    const media = trim(m[1]);\n    if (!open()) {\n      return error(`@media missing '{'`);\n    }\n    const style = comments().concat(rules2());\n    if (!close()) {\n      return error(`@media missing '}'`);\n    }\n    return pos({\n      type: \"media\",\n      media,\n      rules: style\n    });\n  }\n  function atcustommedia() {\n    const pos = position();\n    const m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\n    if (!m) {\n      return;\n    }\n    return pos({\n      type: \"custom-media\",\n      name: trim(m[1]),\n      media: trim(m[2])\n    });\n  }\n  function atpage() {\n    const pos = position();\n    const m = match(/^@page */);\n    if (!m) {\n      return;\n    }\n    const sel = selector() || [];\n    if (!open()) {\n      return error(`@page missing '{'`);\n    }\n    let decls = comments();\n    let decl;\n    while (decl = declaration()) {\n      decls.push(decl);\n      decls = decls.concat(comments());\n    }\n    if (!close()) {\n      return error(`@page missing '}'`);\n    }\n    return pos({\n      type: \"page\",\n      selectors: sel,\n      declarations: decls\n    });\n  }\n  function atdocument() {\n    const pos = position();\n    const m = match(/^@([-\\w]+)?document *([^{]+)/);\n    if (!m) {\n      return;\n    }\n    const vendor = trim(m[1]);\n    const doc = trim(m[2]);\n    if (!open()) {\n      return error(`@document missing '{'`);\n    }\n    const style = comments().concat(rules2());\n    if (!close()) {\n      return error(`@document missing '}'`);\n    }\n    return pos({\n      type: \"document\",\n      document: doc,\n      vendor,\n      rules: style\n    });\n  }\n  function atfontface() {\n    const pos = position();\n    const m = match(/^@font-face\\s*/);\n    if (!m) {\n      return;\n    }\n    if (!open()) {\n      return error(`@font-face missing '{'`);\n    }\n    let decls = comments();\n    let decl;\n    while (decl = declaration()) {\n      decls.push(decl);\n      decls = decls.concat(comments());\n    }\n    if (!close()) {\n      return error(`@font-face missing '}'`);\n    }\n    return pos({\n      type: \"font-face\",\n      declarations: decls\n    });\n  }\n  const atimport = _compileAtrule(\"import\");\n  const atcharset = _compileAtrule(\"charset\");\n  const atnamespace = _compileAtrule(\"namespace\");\n  function _compileAtrule(name) {\n    const re = new RegExp(\n      \"^@\" + name + \"\\\\s*((?:\" + [\n        /[^\\\\]\"(?:\\\\\"|[^\"])*\"/.source,\n        // consume any quoted parts (checking that the double quote isn't itself escaped)\n        /[^\\\\]'(?:\\\\'|[^'])*'/.source,\n        // same but for single quotes\n        \"[^;]\"\n      ].join(\"|\") + \")+);\"\n    );\n    return () => {\n      const pos = position();\n      const m = match(re);\n      if (!m) {\n        return;\n      }\n      const ret = { type: name };\n      ret[name] = m[1].trim();\n      return pos(ret);\n    };\n  }\n  function atrule() {\n    if (css[0] !== \"@\") {\n      return;\n    }\n    return atkeyframes() || atmedia() || atcustommedia() || atsupports() || atimport() || atcharset() || atnamespace() || atdocument() || atpage() || athost() || atfontface();\n  }\n  function rule() {\n    const pos = position();\n    const sel = selector();\n    if (!sel) {\n      return error(\"selector missing\");\n    }\n    comments();\n    return pos({\n      type: \"rule\",\n      selectors: sel,\n      declarations: declarations()\n    });\n  }\n  return addParent(stylesheet());\n}\nfunction trim(str) {\n  return str ? str.replace(/^\\s+|\\s+$/g, \"\") : \"\";\n}\nfunction addParent(obj, parent) {\n  const isNode = obj && typeof obj.type === \"string\";\n  const childParent = isNode ? obj : parent;\n  for (const k of Object.keys(obj)) {\n    const value = obj[k];\n    if (Array.isArray(value)) {\n      value.forEach((v2) => {\n        addParent(v2, childParent);\n      });\n    } else if (value && typeof value === \"object\") {\n      addParent(value, childParent);\n    }\n  }\n  if (isNode) {\n    Object.defineProperty(obj, \"parent\", {\n      configurable: true,\n      writable: true,\n      enumerable: false,\n      value: parent || null\n    });\n  }\n  return obj;\n}\nconst tagMap = {\n  script: \"noscript\",\n  // camel case svg element tag names\n  altglyph: \"altGlyph\",\n  altglyphdef: \"altGlyphDef\",\n  altglyphitem: \"altGlyphItem\",\n  animatecolor: \"animateColor\",\n  animatemotion: \"animateMotion\",\n  animatetransform: \"animateTransform\",\n  clippath: \"clipPath\",\n  feblend: \"feBlend\",\n  fecolormatrix: \"feColorMatrix\",\n  fecomponenttransfer: \"feComponentTransfer\",\n  fecomposite: \"feComposite\",\n  feconvolvematrix: \"feConvolveMatrix\",\n  fediffuselighting: \"feDiffuseLighting\",\n  fedisplacementmap: \"feDisplacementMap\",\n  fedistantlight: \"feDistantLight\",\n  fedropshadow: \"feDropShadow\",\n  feflood: \"feFlood\",\n  fefunca: \"feFuncA\",\n  fefuncb: \"feFuncB\",\n  fefuncg: \"feFuncG\",\n  fefuncr: \"feFuncR\",\n  fegaussianblur: \"feGaussianBlur\",\n  feimage: \"feImage\",\n  femerge: \"feMerge\",\n  femergenode: \"feMergeNode\",\n  femorphology: \"feMorphology\",\n  feoffset: \"feOffset\",\n  fepointlight: \"fePointLight\",\n  fespecularlighting: \"feSpecularLighting\",\n  fespotlight: \"feSpotLight\",\n  fetile: \"feTile\",\n  feturbulence: \"feTurbulence\",\n  foreignobject: \"foreignObject\",\n  glyphref: \"glyphRef\",\n  lineargradient: \"linearGradient\",\n  radialgradient: \"radialGradient\"\n};\nfunction getTagName(n2) {\n  let tagName = tagMap[n2.tagName] ? tagMap[n2.tagName] : n2.tagName;\n  if (tagName === \"link\" && n2.attributes._cssText) {\n    tagName = \"style\";\n  }\n  return tagName;\n}\nfunction escapeRegExp(str) {\n  return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\nconst HOVER_SELECTOR = /([^\\\\]):hover/;\nconst HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, \"g\");\nfunction addHoverClass(cssText, cache) {\n  const cachedStyle = cache?.stylesWithHoverClass.get(cssText);\n  if (cachedStyle) return cachedStyle;\n  if (cssText.length >= 1e6) {\n    return cssText;\n  }\n  const ast = parse(cssText, {\n    silent: true\n  });\n  if (!ast.stylesheet) {\n    return cssText;\n  }\n  const selectors = [];\n  ast.stylesheet.rules.forEach((rule) => {\n    if (\"selectors\" in rule) {\n      (rule.selectors || []).forEach((selector) => {\n        if (HOVER_SELECTOR.test(selector)) {\n          selectors.push(selector);\n        }\n      });\n    }\n  });\n  if (selectors.length === 0) {\n    return cssText;\n  }\n  const selectorMatcher = new RegExp(\n    selectors.filter((selector, index) => selectors.indexOf(selector) === index).sort((a2, b) => b.length - a2.length).map((selector) => {\n      return escapeRegExp(selector);\n    }).join(\"|\"),\n    \"g\"\n  );\n  const result = cssText.replace(selectorMatcher, (selector) => {\n    const newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, \"$1.\\\\:hover\");\n    return `${selector}, ${newSelector}`;\n  });\n  cache?.stylesWithHoverClass.set(cssText, result);\n  return result;\n}\nfunction createCache() {\n  const stylesWithHoverClass = /* @__PURE__ */ new Map();\n  return {\n    stylesWithHoverClass\n  };\n}\nfunction buildNode(n2, options) {\n  const { doc, hackCss, cache } = options;\n  switch (n2.type) {\n    case NodeType$2.Document:\n      return doc.implementation.createDocument(null, \"\", null);\n    case NodeType$2.DocumentType:\n      return doc.implementation.createDocumentType(\n        n2.name || \"html\",\n        n2.publicId,\n        n2.systemId\n      );\n    case NodeType$2.Element: {\n      const tagName = getTagName(n2);\n      let node;\n      if (n2.isSVG) {\n        node = doc.createElementNS(\"http://www.w3.org/2000/svg\", tagName);\n      } else {\n        if (\n          // If the tag name is a custom element name\n          n2.isCustom && // If the browser supports custom elements\n          doc.defaultView?.customElements && // If the custom element hasn't been defined yet\n          !doc.defaultView.customElements.get(n2.tagName)\n        )\n          doc.defaultView.customElements.define(\n            n2.tagName,\n            class extends doc.defaultView.HTMLElement {\n            }\n          );\n        node = doc.createElement(tagName);\n      }\n      const specialAttributes = {};\n      for (const name in n2.attributes) {\n        if (!Object.prototype.hasOwnProperty.call(n2.attributes, name)) {\n          continue;\n        }\n        let value = n2.attributes[name];\n        if (tagName === \"option\" && name === \"selected\" && value === false) {\n          continue;\n        }\n        if (value === null) {\n          continue;\n        }\n        if (value === true) value = \"\";\n        if (name.startsWith(\"rr_\")) {\n          specialAttributes[name] = value;\n          continue;\n        }\n        const isTextarea = tagName === \"textarea\" && name === \"value\";\n        const isRemoteOrDynamicCss = tagName === \"style\" && name === \"_cssText\";\n        if (isRemoteOrDynamicCss && hackCss && typeof value === \"string\") {\n          value = addHoverClass(value, cache);\n        }\n        if ((isTextarea || isRemoteOrDynamicCss) && typeof value === \"string\") {\n          const child = doc.createTextNode(value);\n          for (const c2 of Array.from(node.childNodes)) {\n            if (c2.nodeType === node.TEXT_NODE) {\n              node.removeChild(c2);\n            }\n          }\n          node.appendChild(child);\n          continue;\n        }\n        try {\n          if (n2.isSVG && name === \"xlink:href\") {\n            node.setAttributeNS(\n              \"http://www.w3.org/1999/xlink\",\n              name,\n              value.toString()\n            );\n          } else if (name === \"onload\" || name === \"onclick\" || name.substring(0, 7) === \"onmouse\") {\n            node.setAttribute(\"_\" + name, value.toString());\n          } else if (tagName === \"meta\" && n2.attributes[\"http-equiv\"] === \"Content-Security-Policy\" && name === \"content\") {\n            node.setAttribute(\"csp-content\", value.toString());\n            continue;\n          } else if (tagName === \"link\" && (n2.attributes.rel === \"preload\" || n2.attributes.rel === \"modulepreload\")) {\n          } else if (tagName === \"link\" && n2.attributes.rel === \"prefetch\" && typeof n2.attributes.href === \"string\" && extractFileExtension(n2.attributes.href) === \"js\") {\n          } else if (tagName === \"img\" && n2.attributes.srcset && n2.attributes.rr_dataURL) {\n            node.setAttribute(\n              \"rrweb-original-srcset\",\n              n2.attributes.srcset\n            );\n          } else {\n            node.setAttribute(name, value.toString());\n          }\n        } catch (error) {\n        }\n      }\n      for (const name in specialAttributes) {\n        const value = specialAttributes[name];\n        if (tagName === \"canvas\" && name === \"rr_dataURL\") {\n          const image = doc.createElement(\"img\");\n          image.onload = () => {\n            const ctx = node.getContext(\"2d\");\n            if (ctx) {\n              ctx.drawImage(image, 0, 0, image.width, image.height);\n            }\n          };\n          image.src = value.toString();\n          if (node.RRNodeType)\n            node.rr_dataURL = value.toString();\n        } else if (tagName === \"img\" && name === \"rr_dataURL\") {\n          const image = node;\n          if (!image.currentSrc.startsWith(\"data:\")) {\n            image.setAttribute(\n              \"rrweb-original-src\",\n              n2.attributes.src\n            );\n            image.src = value.toString();\n          }\n        }\n        if (name === \"rr_width\") {\n          node.style.setProperty(\"width\", value.toString());\n        } else if (name === \"rr_height\") {\n          node.style.setProperty(\"height\", value.toString());\n        } else if (name === \"rr_mediaCurrentTime\" && typeof value === \"number\") {\n          node.currentTime = value;\n        } else if (name === \"rr_mediaState\") {\n          switch (value) {\n            case \"played\":\n              node.play().catch((e2) => console.warn(\"media playback error\", e2));\n              break;\n            case \"paused\":\n              node.pause();\n              break;\n          }\n        }\n      }\n      if (n2.isShadowHost) {\n        if (!node.shadowRoot) {\n          node.attachShadow({ mode: \"open\" });\n        } else {\n          while (node.shadowRoot.firstChild) {\n            node.shadowRoot.removeChild(node.shadowRoot.firstChild);\n          }\n        }\n      }\n      return node;\n    }\n    case NodeType$2.Text:\n      return doc.createTextNode(\n        n2.isStyle && hackCss ? addHoverClass(n2.textContent, cache) : n2.textContent\n      );\n    case NodeType$2.CDATA:\n      if (!(doc instanceof XMLDocument)) {\n        return null;\n      }\n      return doc.createCDATASection(n2.textContent);\n    case NodeType$2.Comment:\n      return doc.createComment(n2.textContent);\n    default:\n      return null;\n  }\n}\nfunction buildNodeWithSN(n2, options) {\n  const {\n    doc,\n    mirror: mirror2,\n    skipChild = false,\n    hackCss = true,\n    afterAppend,\n    cache\n  } = options;\n  if (mirror2.has(n2.id)) {\n    const nodeInMirror = mirror2.getNode(n2.id);\n    const meta = mirror2.getMeta(nodeInMirror);\n    if (isNodeMetaEqual(meta, n2)) return mirror2.getNode(n2.id);\n  }\n  let node = buildNode(n2, { doc, hackCss, cache });\n  if (!node) {\n    return null;\n  }\n  if (n2.rootId && mirror2.getNode(n2.rootId) !== doc) {\n    mirror2.replace(n2.rootId, doc);\n  }\n  if (n2.type === NodeType$2.Document) {\n    doc.close();\n    doc.open();\n    if (n2.compatMode === \"BackCompat\" && n2.childNodes && n2.childNodes[0].type !== NodeType$2.DocumentType) {\n      if (n2.childNodes[0].type === NodeType$2.Element && \"xmlns\" in n2.childNodes[0].attributes && n2.childNodes[0].attributes.xmlns === \"http://www.w3.org/1999/xhtml\") {\n        doc.write(\n          '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">'\n        );\n      } else {\n        doc.write(\n          '<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">'\n        );\n      }\n    }\n    node = doc;\n  }\n  mirror2.add(node, n2);\n  if ((n2.type === NodeType$2.Document || n2.type === NodeType$2.Element) && !skipChild) {\n    for (const childN of n2.childNodes) {\n      const childNode = buildNodeWithSN(childN, {\n        doc,\n        mirror: mirror2,\n        skipChild: false,\n        hackCss,\n        afterAppend,\n        cache\n      });\n      if (!childNode) {\n        console.warn(\"Failed to rebuild\", childN);\n        continue;\n      }\n      if (childN.isShadow && isElement(node) && node.shadowRoot) {\n        node.shadowRoot.appendChild(childNode);\n      } else if (n2.type === NodeType$2.Document && childN.type == NodeType$2.Element) {\n        const htmlElement = childNode;\n        let body = null;\n        htmlElement.childNodes.forEach((child) => {\n          if (child.nodeName === \"BODY\") body = child;\n        });\n        if (body) {\n          htmlElement.removeChild(body);\n          node.appendChild(childNode);\n          htmlElement.appendChild(body);\n        } else {\n          node.appendChild(childNode);\n        }\n      } else {\n        node.appendChild(childNode);\n      }\n      if (afterAppend) {\n        afterAppend(childNode, childN.id);\n      }\n    }\n  }\n  return node;\n}\nfunction visit(mirror2, onVisit) {\n  function walk(node) {\n    onVisit(node);\n  }\n  for (const id of mirror2.getIds()) {\n    if (mirror2.has(id)) {\n      walk(mirror2.getNode(id));\n    }\n  }\n}\nfunction handleScroll(node, mirror2) {\n  const n2 = mirror2.getMeta(node);\n  if (n2?.type !== NodeType$2.Element) {\n    return;\n  }\n  const el = node;\n  for (const name in n2.attributes) {\n    if (!(Object.prototype.hasOwnProperty.call(n2.attributes, name) && name.startsWith(\"rr_\"))) {\n      continue;\n    }\n    const value = n2.attributes[name];\n    if (name === \"rr_scrollLeft\") {\n      el.scrollLeft = value;\n    }\n    if (name === \"rr_scrollTop\") {\n      el.scrollTop = value;\n    }\n  }\n}\nfunction rebuild(n2, options) {\n  const {\n    doc,\n    onVisit,\n    hackCss = true,\n    afterAppend,\n    cache,\n    mirror: mirror2 = new Mirror()\n  } = options;\n  const node = buildNodeWithSN(n2, {\n    doc,\n    mirror: mirror2,\n    skipChild: false,\n    hackCss,\n    afterAppend,\n    cache\n  });\n  visit(mirror2, (visitedNode) => {\n    if (onVisit) {\n      onVisit(visitedNode);\n    }\n    handleScroll(visitedNode, mirror2);\n  });\n  return node;\n}\nfunction on(type, fn, target = document) {\n  const options = { capture: true, passive: true };\n  target.addEventListener(type, fn, options);\n  return () => target.removeEventListener(type, fn, options);\n}\nconst DEPARTED_MIRROR_ACCESS_WARNING = \"Please stop import mirror directly. Instead of that,\\r\\nnow you can use replayer.getMirror() to access the mirror instance of a replayer,\\r\\nor you can use record.mirror to access the mirror instance during recording.\";\nlet _mirror = {\n  map: {},\n  getId() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    return -1;\n  },\n  getNode() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    return null;\n  },\n  removeNodeFromMap() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n  },\n  has() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    return false;\n  },\n  reset() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n  }\n};\nif (typeof window !== \"undefined\" && window.Proxy && window.Reflect) {\n  _mirror = new Proxy(_mirror, {\n    get(target, prop, receiver) {\n      if (prop === \"map\") {\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction throttle(func, wait, options = {}) {\n  let timeout = null;\n  let previous = 0;\n  return function(...args) {\n    const now = Date.now();\n    if (!previous && options.leading === false) {\n      previous = now;\n    }\n    const remaining = wait - (now - previous);\n    const context = this;\n    if (remaining <= 0 || remaining > wait) {\n      if (timeout) {\n        clearTimeout(timeout);\n        timeout = null;\n      }\n      previous = now;\n      func.apply(context, args);\n    } else if (!timeout && options.trailing !== false) {\n      timeout = setTimeout$1(() => {\n        previous = options.leading === false ? 0 : Date.now();\n        timeout = null;\n        func.apply(context, args);\n      }, remaining);\n    }\n  };\n}\nfunction hookSetter(target, key, d, isRevoked, win = window) {\n  const original = win.Object.getOwnPropertyDescriptor(target, key);\n  win.Object.defineProperty(\n    target,\n    key,\n    isRevoked ? d : {\n      set(value) {\n        setTimeout$1(() => {\n          d.set.call(this, value);\n        }, 0);\n        if (original && original.set) {\n          original.set.call(this, value);\n        }\n      }\n    }\n  );\n  return () => hookSetter(target, key, original || {}, true);\n}\nfunction patch(source, name, replacement) {\n  try {\n    if (!(name in source)) {\n      return () => {\n      };\n    }\n    const original = source[name];\n    const wrapped = replacement(original);\n    if (typeof wrapped === \"function\") {\n      wrapped.prototype = wrapped.prototype || {};\n      Object.defineProperties(wrapped, {\n        __rrweb_original__: {\n          enumerable: false,\n          value: original\n        }\n      });\n    }\n    source[name] = wrapped;\n    return () => {\n      source[name] = original;\n    };\n  } catch {\n    return () => {\n    };\n  }\n}\nlet nowTimestamp = Date.now;\nif (!/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString())) {\n  nowTimestamp = () => (/* @__PURE__ */ new Date()).getTime();\n}\nfunction getWindowScroll(win) {\n  const doc = win.document;\n  return {\n    left: doc.scrollingElement ? doc.scrollingElement.scrollLeft : win.pageXOffset !== void 0 ? win.pageXOffset : doc?.documentElement.scrollLeft || doc?.body?.parentElement?.scrollLeft || doc?.body?.scrollLeft || 0,\n    top: doc.scrollingElement ? doc.scrollingElement.scrollTop : win.pageYOffset !== void 0 ? win.pageYOffset : doc?.documentElement.scrollTop || doc?.body?.parentElement?.scrollTop || doc?.body?.scrollTop || 0\n  };\n}\nfunction getWindowHeight() {\n  return window.innerHeight || document.documentElement && document.documentElement.clientHeight || document.body && document.body.clientHeight;\n}\nfunction getWindowWidth() {\n  return window.innerWidth || document.documentElement && document.documentElement.clientWidth || document.body && document.body.clientWidth;\n}\nfunction closestElementOfNode(node) {\n  if (!node) {\n    return null;\n  }\n  const el = node.nodeType === node.ELEMENT_NODE ? node : node.parentElement;\n  return el;\n}\nfunction isBlocked(node, blockClass, blockSelector, unblockSelector, checkAncestors) {\n  if (!node) {\n    return false;\n  }\n  const el = closestElementOfNode(node);\n  if (!el) {\n    return false;\n  }\n  const blockedPredicate = createMatchPredicate(blockClass, blockSelector);\n  if (!checkAncestors) {\n    const isUnblocked = unblockSelector && el.matches(unblockSelector);\n    return blockedPredicate(el) && !isUnblocked;\n  }\n  const blockDistance = distanceToMatch(el, blockedPredicate);\n  let unblockDistance = -1;\n  if (blockDistance < 0) {\n    return false;\n  }\n  if (unblockSelector) {\n    unblockDistance = distanceToMatch(\n      el,\n      createMatchPredicate(null, unblockSelector)\n    );\n  }\n  if (blockDistance > -1 && unblockDistance < 0) {\n    return true;\n  }\n  return blockDistance < unblockDistance;\n}\nfunction isSerialized(n2, mirror2) {\n  return mirror2.getId(n2) !== -1;\n}\nfunction isIgnored(n2, mirror2) {\n  return mirror2.getId(n2) === IGNORED_NODE;\n}\nfunction isAncestorRemoved(target, mirror2) {\n  if (isShadowRoot(target)) {\n    return false;\n  }\n  const id = mirror2.getId(target);\n  if (!mirror2.has(id)) {\n    return true;\n  }\n  if (target.parentNode && target.parentNode.nodeType === target.DOCUMENT_NODE) {\n    return false;\n  }\n  if (!target.parentNode) {\n    return true;\n  }\n  return isAncestorRemoved(target.parentNode, mirror2);\n}\nfunction legacy_isTouchEvent(event) {\n  return Boolean(event.changedTouches);\n}\nfunction polyfill$1(win = window) {\n  if (\"NodeList\" in win && !win.NodeList.prototype.forEach) {\n    win.NodeList.prototype.forEach = Array.prototype.forEach;\n  }\n  if (\"DOMTokenList\" in win && !win.DOMTokenList.prototype.forEach) {\n    win.DOMTokenList.prototype.forEach = Array.prototype.forEach;\n  }\n  if (!Node.prototype.contains) {\n    Node.prototype.contains = (...args) => {\n      let node = args[0];\n      if (!(0 in args)) {\n        throw new TypeError(\"1 argument is required\");\n      }\n      do {\n        if (this === node) {\n          return true;\n        }\n      } while (node = node && node.parentNode);\n      return false;\n    };\n  }\n}\nfunction queueToResolveTrees(queue) {\n  const queueNodeMap = {};\n  const putIntoMap = (m, parent) => {\n    const nodeInTree = {\n      value: m,\n      parent,\n      children: []\n    };\n    queueNodeMap[m.node.id] = nodeInTree;\n    return nodeInTree;\n  };\n  const queueNodeTrees = [];\n  for (const mutation of queue) {\n    const { nextId, parentId } = mutation;\n    if (nextId && nextId in queueNodeMap) {\n      const nextInTree = queueNodeMap[nextId];\n      if (nextInTree.parent) {\n        const idx = nextInTree.parent.children.indexOf(nextInTree);\n        nextInTree.parent.children.splice(\n          idx,\n          0,\n          putIntoMap(mutation, nextInTree.parent)\n        );\n      } else {\n        const idx = queueNodeTrees.indexOf(nextInTree);\n        queueNodeTrees.splice(idx, 0, putIntoMap(mutation, null));\n      }\n      continue;\n    }\n    if (parentId in queueNodeMap) {\n      const parentInTree = queueNodeMap[parentId];\n      parentInTree.children.push(putIntoMap(mutation, parentInTree));\n      continue;\n    }\n    queueNodeTrees.push(putIntoMap(mutation, null));\n  }\n  return queueNodeTrees;\n}\nfunction iterateResolveTree(tree, cb) {\n  cb(tree.value);\n  for (let i2 = tree.children.length - 1; i2 >= 0; i2--) {\n    iterateResolveTree(tree.children[i2], cb);\n  }\n}\nfunction isSerializedIframe(n2, mirror2) {\n  return Boolean(n2.nodeName === \"IFRAME\" && mirror2.getMeta(n2));\n}\nfunction isSerializedStylesheet(n2, mirror2) {\n  return Boolean(\n    n2.nodeName === \"LINK\" && n2.nodeType === n2.ELEMENT_NODE && n2.getAttribute && n2.getAttribute(\"rel\") === \"stylesheet\" && mirror2.getMeta(n2)\n  );\n}\nfunction getBaseDimension(node, rootIframe) {\n  const frameElement = node.ownerDocument?.defaultView?.frameElement;\n  if (!frameElement || frameElement === rootIframe) {\n    return {\n      x: 0,\n      y: 0,\n      relativeScale: 1,\n      absoluteScale: 1\n    };\n  }\n  const frameDimension = frameElement.getBoundingClientRect();\n  const frameBaseDimension = getBaseDimension(frameElement, rootIframe);\n  const relativeScale = frameDimension.height / frameElement.clientHeight;\n  return {\n    x: frameDimension.x * frameBaseDimension.relativeScale + frameBaseDimension.x,\n    y: frameDimension.y * frameBaseDimension.relativeScale + frameBaseDimension.y,\n    relativeScale,\n    absoluteScale: frameBaseDimension.absoluteScale * relativeScale\n  };\n}\nfunction hasShadowRoot(n2) {\n  return Boolean(n2?.shadowRoot);\n}\nfunction getNestedRule(rules2, position) {\n  const rule = rules2[position[0]];\n  if (position.length === 1) {\n    return rule;\n  } else {\n    return getNestedRule(\n      rule.cssRules[position[1]].cssRules,\n      position.slice(2)\n    );\n  }\n}\nfunction getPositionsAndIndex(nestedIndex) {\n  const positions = [...nestedIndex];\n  const index = positions.pop();\n  return { positions, index };\n}\nfunction uniqueTextMutations(mutations) {\n  const idSet = /* @__PURE__ */ new Set();\n  const uniqueMutations = [];\n  for (let i2 = mutations.length; i2--; ) {\n    const mutation = mutations[i2];\n    if (!idSet.has(mutation.id)) {\n      uniqueMutations.push(mutation);\n      idSet.add(mutation.id);\n    }\n  }\n  return uniqueMutations;\n}\nclass StyleSheetMirror {\n  constructor() {\n    this.id = 1;\n    this.styleIDMap = /* @__PURE__ */ new WeakMap();\n    this.idStyleMap = /* @__PURE__ */ new Map();\n  }\n  getId(stylesheet) {\n    return this.styleIDMap.get(stylesheet) ?? -1;\n  }\n  has(stylesheet) {\n    return this.styleIDMap.has(stylesheet);\n  }\n  /**\n   * @returns If the stylesheet is in the mirror, returns the id of the stylesheet. If not, return the new assigned id.\n   */\n  add(stylesheet, id) {\n    if (this.has(stylesheet)) return this.getId(stylesheet);\n    let newId;\n    if (id === void 0) {\n      newId = this.id++;\n    } else newId = id;\n    this.styleIDMap.set(stylesheet, newId);\n    this.idStyleMap.set(newId, stylesheet);\n    return newId;\n  }\n  getStyle(id) {\n    return this.idStyleMap.get(id) || null;\n  }\n  reset() {\n    this.styleIDMap = /* @__PURE__ */ new WeakMap();\n    this.idStyleMap = /* @__PURE__ */ new Map();\n    this.id = 1;\n  }\n  generateId() {\n    return this.id++;\n  }\n}\nfunction getShadowHost(n2) {\n  let shadowHost = null;\n  if (n2.getRootNode?.()?.nodeType === Node.DOCUMENT_FRAGMENT_NODE && n2.getRootNode().host)\n    shadowHost = n2.getRootNode().host;\n  return shadowHost;\n}\nfunction getRootShadowHost(n2) {\n  let rootShadowHost = n2;\n  let shadowHost;\n  while (shadowHost = getShadowHost(rootShadowHost))\n    rootShadowHost = shadowHost;\n  return rootShadowHost;\n}\nfunction shadowHostInDom(n2) {\n  const doc = n2.ownerDocument;\n  if (!doc) return false;\n  const shadowHost = getRootShadowHost(n2);\n  return doc.contains(shadowHost);\n}\nfunction inDom(n2) {\n  const doc = n2.ownerDocument;\n  if (!doc) return false;\n  return doc.contains(n2) || shadowHostInDom(n2);\n}\nconst cachedImplementations = {};\nfunction getImplementation(name) {\n  const cached = cachedImplementations[name];\n  if (cached) {\n    return cached;\n  }\n  const document2 = window.document;\n  let impl = window[name];\n  if (document2 && typeof document2.createElement === \"function\") {\n    try {\n      const sandbox = document2.createElement(\"iframe\");\n      sandbox.hidden = true;\n      document2.head.appendChild(sandbox);\n      const contentWindow = sandbox.contentWindow;\n      if (contentWindow && contentWindow[name]) {\n        impl = // eslint-disable-next-line @typescript-eslint/unbound-method\n        contentWindow[name];\n      }\n      document2.head.removeChild(sandbox);\n    } catch (e2) {\n    }\n  }\n  return cachedImplementations[name] = impl.bind(\n    window\n  );\n}\nfunction onRequestAnimationFrame(...rest) {\n  return getImplementation(\"requestAnimationFrame\")(...rest);\n}\nfunction setTimeout$1(...rest) {\n  return getImplementation(\"setTimeout\")(...rest);\n}\nfunction clearTimeout(...rest) {\n  return getImplementation(\"clearTimeout\")(...rest);\n}\nconst utils = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  StyleSheetMirror,\n  get _mirror() {\n    return _mirror;\n  },\n  clearTimeout,\n  closestElementOfNode,\n  getBaseDimension,\n  getNestedRule,\n  getPositionsAndIndex,\n  getRootShadowHost,\n  getShadowHost,\n  getWindowHeight,\n  getWindowScroll,\n  getWindowWidth,\n  hasShadowRoot,\n  hookSetter,\n  inDom,\n  isAncestorRemoved,\n  isBlocked,\n  isIgnored,\n  isSerialized,\n  isSerializedIframe,\n  isSerializedStylesheet,\n  iterateResolveTree,\n  legacy_isTouchEvent,\n  get nowTimestamp() {\n    return nowTimestamp;\n  },\n  on,\n  onRequestAnimationFrame,\n  patch,\n  polyfill: polyfill$1,\n  queueToResolveTrees,\n  setTimeout: setTimeout$1,\n  shadowHostInDom,\n  throttle,\n  uniqueTextMutations\n}, Symbol.toStringTag, { value: \"Module\" }));\nvar EventType = /* @__PURE__ */ ((EventType2) => {\n  EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n  EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n  EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n  EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n  EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n  EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n  EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n  return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n  IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n  IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n  IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n  IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n  IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n  IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n  IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n  IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n  IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n  IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n  IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n  IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n  IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n  IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n  IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n  IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n  IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n  return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n  MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n  MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n  MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n  MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n  MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n  MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n  MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n  MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n  MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n  MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n  MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n  return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n  PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n  PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n  PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n  return PointerTypes2;\n})(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n  CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n  CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n  CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n  return CanvasContext2;\n})(CanvasContext || {});\nvar MediaInteractions = /* @__PURE__ */ ((MediaInteractions2) => {\n  MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n  MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n  MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n  MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n  MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n  return MediaInteractions2;\n})(MediaInteractions || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n  ReplayerEvents2[\"Start\"] = \"start\";\n  ReplayerEvents2[\"Pause\"] = \"pause\";\n  ReplayerEvents2[\"Resume\"] = \"resume\";\n  ReplayerEvents2[\"Resize\"] = \"resize\";\n  ReplayerEvents2[\"Finish\"] = \"finish\";\n  ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n  ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n  ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n  ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n  ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n  ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n  ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n  ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n  ReplayerEvents2[\"Flush\"] = \"flush\";\n  ReplayerEvents2[\"StateChange\"] = \"state-change\";\n  ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n  ReplayerEvents2[\"Destroy\"] = \"destroy\";\n  return ReplayerEvents2;\n})(ReplayerEvents || {});\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar __defProp2 = Object.defineProperty;\nvar __defNormalProp2 = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField2 = (obj, key, value) => __defNormalProp2(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar NodeType$1 = /* @__PURE__ */ ((NodeType2) => {\n  NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n  NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n  NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n  NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n  NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n  NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n  return NodeType2;\n})(NodeType$1 || {});\nlet Mirror$1 = class Mirror2 {\n  constructor() {\n    __publicField2(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n    __publicField2(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n  }\n  getId(n2) {\n    if (!n2) return -1;\n    const id = this.getMeta(n2)?.id;\n    return id ?? -1;\n  }\n  getNode(id) {\n    return this.idNodeMap.get(id) || null;\n  }\n  getIds() {\n    return Array.from(this.idNodeMap.keys());\n  }\n  getMeta(n2) {\n    return this.nodeMetaMap.get(n2) || null;\n  }\n  // removes the node from idNodeMap\n  // doesn't remove the node from nodeMetaMap\n  removeNodeFromMap(n2) {\n    const id = this.getId(n2);\n    this.idNodeMap.delete(id);\n    if (n2.childNodes) {\n      n2.childNodes.forEach(\n        (childNode) => this.removeNodeFromMap(childNode)\n      );\n    }\n  }\n  has(id) {\n    return this.idNodeMap.has(id);\n  }\n  hasNode(node) {\n    return this.nodeMetaMap.has(node);\n  }\n  add(n2, meta) {\n    const id = meta.id;\n    this.idNodeMap.set(id, n2);\n    this.nodeMetaMap.set(n2, meta);\n  }\n  replace(id, n2) {\n    const oldNode = this.getNode(id);\n    if (oldNode) {\n      const meta = this.nodeMetaMap.get(oldNode);\n      if (meta) this.nodeMetaMap.set(n2, meta);\n    }\n    this.idNodeMap.set(id, n2);\n  }\n  reset() {\n    this.idNodeMap = /* @__PURE__ */ new Map();\n    this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n  }\n};\nfunction createMirror$1() {\n  return new Mirror$1();\n}\nfunction parseCSSText(cssText) {\n  const res = {};\n  const listDelimiter = /;(?![^(]*\\))/g;\n  const propertyDelimiter = /:(.+)/;\n  const comment = /\\/\\*.*?\\*\\//g;\n  cssText.replace(comment, \"\").split(listDelimiter).forEach(function(item) {\n    if (item) {\n      const tmp = item.split(propertyDelimiter);\n      tmp.length > 1 && (res[camelize(tmp[0].trim())] = tmp[1].trim());\n    }\n  });\n  return res;\n}\nfunction toCSSText(style) {\n  const properties = [];\n  for (const name in style) {\n    const value = style[name];\n    if (typeof value !== \"string\") continue;\n    const normalizedName = hyphenate(name);\n    properties.push(`${normalizedName}: ${value};`);\n  }\n  return properties.join(\" \");\n}\nconst camelizeRE = /-([a-z])/g;\nconst CUSTOM_PROPERTY_REGEX = /^--[a-zA-Z0-9-]+$/;\nconst camelize = (str) => {\n  if (CUSTOM_PROPERTY_REGEX.test(str)) return str;\n  return str.replace(camelizeRE, (_, c2) => c2 ? c2.toUpperCase() : \"\");\n};\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = (str) => {\n  return str.replace(hyphenateRE, \"-$1\").toLowerCase();\n};\nclass BaseRRNode {\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any\n  constructor(..._args) {\n    __publicField(this, \"parentElement\", null);\n    __publicField(this, \"parentNode\", null);\n    __publicField(this, \"ownerDocument\");\n    __publicField(this, \"firstChild\", null);\n    __publicField(this, \"lastChild\", null);\n    __publicField(this, \"previousSibling\", null);\n    __publicField(this, \"nextSibling\", null);\n    __publicField(this, \"ELEMENT_NODE\", 1);\n    __publicField(this, \"TEXT_NODE\", 3);\n    __publicField(this, \"nodeType\");\n    __publicField(this, \"nodeName\");\n    __publicField(this, \"RRNodeType\");\n  }\n  get childNodes() {\n    const childNodes = [];\n    let childIterator = this.firstChild;\n    while (childIterator) {\n      childNodes.push(childIterator);\n      childIterator = childIterator.nextSibling;\n    }\n    return childNodes;\n  }\n  contains(node) {\n    if (!(node instanceof BaseRRNode)) return false;\n    else if (node.ownerDocument !== this.ownerDocument) return false;\n    else if (node === this) return true;\n    while (node.parentNode) {\n      if (node.parentNode === this) return true;\n      node = node.parentNode;\n    }\n    return false;\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  appendChild(_newChild) {\n    throw new Error(\n      `RRDomException: Failed to execute 'appendChild' on 'RRNode': This RRNode type does not support this method.`\n    );\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  insertBefore(_newChild, _refChild) {\n    throw new Error(\n      `RRDomException: Failed to execute 'insertBefore' on 'RRNode': This RRNode type does not support this method.`\n    );\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  removeChild(_node) {\n    throw new Error(\n      `RRDomException: Failed to execute 'removeChild' on 'RRNode': This RRNode type does not support this method.`\n    );\n  }\n  toString() {\n    return \"RRNode\";\n  }\n}\nclass BaseRRDocument extends BaseRRNode {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  constructor(...args) {\n    super(args);\n    __publicField(this, \"nodeType\", 9);\n    __publicField(this, \"nodeName\", \"#document\");\n    __publicField(this, \"compatMode\", \"CSS1Compat\");\n    __publicField(this, \"RRNodeType\", NodeType$1.Document);\n    __publicField(this, \"textContent\", null);\n    this.ownerDocument = this;\n  }\n  get documentElement() {\n    return this.childNodes.find(\n      (node) => node.RRNodeType === NodeType$1.Element && node.tagName === \"HTML\"\n    ) || null;\n  }\n  get body() {\n    return this.documentElement?.childNodes.find(\n      (node) => node.RRNodeType === NodeType$1.Element && node.tagName === \"BODY\"\n    ) || null;\n  }\n  get head() {\n    return this.documentElement?.childNodes.find(\n      (node) => node.RRNodeType === NodeType$1.Element && node.tagName === \"HEAD\"\n    ) || null;\n  }\n  get implementation() {\n    return this;\n  }\n  get firstElementChild() {\n    return this.documentElement;\n  }\n  appendChild(newChild) {\n    const nodeType = newChild.RRNodeType;\n    if (nodeType === NodeType$1.Element || nodeType === NodeType$1.DocumentType) {\n      if (this.childNodes.some((s2) => s2.RRNodeType === nodeType)) {\n        throw new Error(\n          `RRDomException: Failed to execute 'appendChild' on 'RRNode': Only one ${nodeType === NodeType$1.Element ? \"RRElement\" : \"RRDoctype\"} on RRDocument allowed.`\n        );\n      }\n    }\n    const child = appendChild(this, newChild);\n    child.parentElement = null;\n    return child;\n  }\n  insertBefore(newChild, refChild) {\n    const nodeType = newChild.RRNodeType;\n    if (nodeType === NodeType$1.Element || nodeType === NodeType$1.DocumentType) {\n      if (this.childNodes.some((s2) => s2.RRNodeType === nodeType)) {\n        throw new Error(\n          `RRDomException: Failed to execute 'insertBefore' on 'RRNode': Only one ${nodeType === NodeType$1.Element ? \"RRElement\" : \"RRDoctype\"} on RRDocument allowed.`\n        );\n      }\n    }\n    const child = insertBefore(this, newChild, refChild);\n    child.parentElement = null;\n    return child;\n  }\n  removeChild(node) {\n    return removeChild(this, node);\n  }\n  open() {\n    this.firstChild = null;\n    this.lastChild = null;\n  }\n  close() {\n  }\n  /**\n   * Adhoc implementation for setting xhtml namespace in rebuilt.ts (rrweb-snapshot).\n   * There are two lines used this function:\n   * 1. doc.write('\\<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\"\\>')\n   * 2. doc.write('\\<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\"\\>')\n   */\n  write(content) {\n    let publicId;\n    if (content === '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">')\n      publicId = \"-//W3C//DTD XHTML 1.0 Transitional//EN\";\n    else if (content === '<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">')\n      publicId = \"-//W3C//DTD HTML 4.0 Transitional//EN\";\n    if (publicId) {\n      const doctype = this.createDocumentType(\"html\", publicId, \"\");\n      this.open();\n      this.appendChild(doctype);\n    }\n  }\n  createDocument(_namespace, _qualifiedName, _doctype) {\n    return new BaseRRDocument();\n  }\n  createDocumentType(qualifiedName, publicId, systemId) {\n    const doctype = new BaseRRDocumentType(qualifiedName, publicId, systemId);\n    doctype.ownerDocument = this;\n    return doctype;\n  }\n  createElement(tagName) {\n    const element = new BaseRRElement(tagName);\n    element.ownerDocument = this;\n    return element;\n  }\n  createElementNS(_namespaceURI, qualifiedName) {\n    return this.createElement(qualifiedName);\n  }\n  createTextNode(data) {\n    const text = new BaseRRText(data);\n    text.ownerDocument = this;\n    return text;\n  }\n  createComment(data) {\n    const comment = new BaseRRComment(data);\n    comment.ownerDocument = this;\n    return comment;\n  }\n  createCDATASection(data) {\n    const CDATASection = new BaseRRCDATASection(data);\n    CDATASection.ownerDocument = this;\n    return CDATASection;\n  }\n  toString() {\n    return \"RRDocument\";\n  }\n}\nclass BaseRRDocumentType extends BaseRRNode {\n  constructor(qualifiedName, publicId, systemId) {\n    super();\n    __publicField(this, \"nodeType\", 10);\n    __publicField(this, \"RRNodeType\", NodeType$1.DocumentType);\n    __publicField(this, \"name\");\n    __publicField(this, \"publicId\");\n    __publicField(this, \"systemId\");\n    __publicField(this, \"textContent\", null);\n    this.name = qualifiedName;\n    this.publicId = publicId;\n    this.systemId = systemId;\n    this.nodeName = qualifiedName;\n  }\n  toString() {\n    return \"RRDocumentType\";\n  }\n}\nclass BaseRRElement extends BaseRRNode {\n  constructor(tagName) {\n    super();\n    __publicField(this, \"nodeType\", 1);\n    __publicField(this, \"RRNodeType\", NodeType$1.Element);\n    __publicField(this, \"tagName\");\n    __publicField(this, \"attributes\", {});\n    __publicField(this, \"shadowRoot\", null);\n    __publicField(this, \"scrollLeft\");\n    __publicField(this, \"scrollTop\");\n    this.tagName = tagName.toUpperCase();\n    this.nodeName = tagName.toUpperCase();\n  }\n  get textContent() {\n    let result = \"\";\n    this.childNodes.forEach((node) => result += node.textContent);\n    return result;\n  }\n  set textContent(textContent) {\n    this.firstChild = null;\n    this.lastChild = null;\n    this.appendChild(this.ownerDocument.createTextNode(textContent));\n  }\n  get classList() {\n    return new ClassList(\n      this.attributes.class,\n      (newClassName) => {\n        this.attributes.class = newClassName;\n      }\n    );\n  }\n  get id() {\n    return this.attributes.id || \"\";\n  }\n  get className() {\n    return this.attributes.class || \"\";\n  }\n  get style() {\n    const style = this.attributes.style ? parseCSSText(this.attributes.style) : {};\n    const hyphenateRE2 = /\\B([A-Z])/g;\n    style.setProperty = (name, value, priority) => {\n      if (hyphenateRE2.test(name)) return;\n      const normalizedName = camelize(name);\n      if (!value) delete style[normalizedName];\n      else style[normalizedName] = value;\n      if (priority === \"important\") style[normalizedName] += \" !important\";\n      this.attributes.style = toCSSText(style);\n    };\n    style.removeProperty = (name) => {\n      if (hyphenateRE2.test(name)) return \"\";\n      const normalizedName = camelize(name);\n      const value = style[normalizedName] || \"\";\n      delete style[normalizedName];\n      this.attributes.style = toCSSText(style);\n      return value;\n    };\n    return style;\n  }\n  getAttribute(name) {\n    return this.attributes[name] || null;\n  }\n  setAttribute(name, attribute) {\n    this.attributes[name] = attribute;\n  }\n  setAttributeNS(_namespace, qualifiedName, value) {\n    this.setAttribute(qualifiedName, value);\n  }\n  removeAttribute(name) {\n    delete this.attributes[name];\n  }\n  appendChild(newChild) {\n    return appendChild(this, newChild);\n  }\n  insertBefore(newChild, refChild) {\n    return insertBefore(this, newChild, refChild);\n  }\n  removeChild(node) {\n    return removeChild(this, node);\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  attachShadow(_init) {\n    const shadowRoot = this.ownerDocument.createElement(\"SHADOWROOT\");\n    this.shadowRoot = shadowRoot;\n    return shadowRoot;\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  dispatchEvent(_event) {\n    return true;\n  }\n  toString() {\n    let attributeString = \"\";\n    for (const attribute in this.attributes) {\n      attributeString += `${attribute}=\"${this.attributes[attribute]}\" `;\n    }\n    return `${this.tagName} ${attributeString}`;\n  }\n}\nclass BaseRRMediaElement extends BaseRRElement {\n  constructor() {\n    super(...arguments);\n    __publicField(this, \"currentTime\");\n    __publicField(this, \"volume\");\n    __publicField(this, \"paused\");\n    __publicField(this, \"muted\");\n    __publicField(this, \"playbackRate\");\n    __publicField(this, \"loop\");\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  attachShadow(_init) {\n    throw new Error(\n      `RRDomException: Failed to execute 'attachShadow' on 'RRElement': This RRElement does not support attachShadow`\n    );\n  }\n  play() {\n    this.paused = false;\n  }\n  pause() {\n    this.paused = true;\n  }\n}\nclass BaseRRText extends BaseRRNode {\n  constructor(data) {\n    super();\n    __publicField(this, \"nodeType\", 3);\n    __publicField(this, \"nodeName\", \"#text\");\n    __publicField(this, \"RRNodeType\", NodeType$1.Text);\n    __publicField(this, \"data\");\n    this.data = data;\n  }\n  get textContent() {\n    return this.data;\n  }\n  set textContent(textContent) {\n    this.data = textContent;\n  }\n  toString() {\n    return `RRText text=${JSON.stringify(this.data)}`;\n  }\n}\nclass BaseRRComment extends BaseRRNode {\n  constructor(data) {\n    super();\n    __publicField(this, \"nodeType\", 8);\n    __publicField(this, \"nodeName\", \"#comment\");\n    __publicField(this, \"RRNodeType\", NodeType$1.Comment);\n    __publicField(this, \"data\");\n    this.data = data;\n  }\n  get textContent() {\n    return this.data;\n  }\n  set textContent(textContent) {\n    this.data = textContent;\n  }\n  toString() {\n    return `RRComment text=${JSON.stringify(this.data)}`;\n  }\n}\nclass BaseRRCDATASection extends BaseRRNode {\n  constructor(data) {\n    super();\n    __publicField(this, \"nodeName\", \"#cdata-section\");\n    __publicField(this, \"nodeType\", 4);\n    __publicField(this, \"RRNodeType\", NodeType$1.CDATA);\n    __publicField(this, \"data\");\n    this.data = data;\n  }\n  get textContent() {\n    return this.data;\n  }\n  set textContent(textContent) {\n    this.data = textContent;\n  }\n  toString() {\n    return `RRCDATASection data=${JSON.stringify(this.data)}`;\n  }\n}\nclass ClassList {\n  constructor(classText, onChange) {\n    __publicField(this, \"onChange\");\n    __publicField(this, \"classes\", []);\n    __publicField(this, \"add\", (...classNames) => {\n      for (const item of classNames) {\n        const className = String(item);\n        if (this.classes.indexOf(className) >= 0) continue;\n        this.classes.push(className);\n      }\n      this.onChange && this.onChange(this.classes.join(\" \"));\n    });\n    __publicField(this, \"remove\", (...classNames) => {\n      this.classes = this.classes.filter(\n        (item) => classNames.indexOf(item) === -1\n      );\n      this.onChange && this.onChange(this.classes.join(\" \"));\n    });\n    if (classText) {\n      const classes = classText.trim().split(/\\s+/);\n      this.classes.push(...classes);\n    }\n    this.onChange = onChange;\n  }\n}\nfunction appendChild(parent, newChild) {\n  if (newChild.parentNode) newChild.parentNode.removeChild(newChild);\n  if (parent.lastChild) {\n    parent.lastChild.nextSibling = newChild;\n    newChild.previousSibling = parent.lastChild;\n  } else {\n    parent.firstChild = newChild;\n    newChild.previousSibling = null;\n  }\n  parent.lastChild = newChild;\n  newChild.nextSibling = null;\n  newChild.parentNode = parent;\n  newChild.parentElement = parent;\n  newChild.ownerDocument = parent.ownerDocument;\n  return newChild;\n}\nfunction insertBefore(parent, newChild, refChild) {\n  if (!refChild) return appendChild(parent, newChild);\n  if (refChild.parentNode !== parent)\n    throw new Error(\n      \"Failed to execute 'insertBefore' on 'RRNode': The RRNode before which the new node is to be inserted is not a child of this RRNode.\"\n    );\n  if (newChild === refChild) return newChild;\n  if (newChild.parentNode) newChild.parentNode.removeChild(newChild);\n  newChild.previousSibling = refChild.previousSibling;\n  refChild.previousSibling = newChild;\n  newChild.nextSibling = refChild;\n  if (newChild.previousSibling) newChild.previousSibling.nextSibling = newChild;\n  else parent.firstChild = newChild;\n  newChild.parentElement = parent;\n  newChild.parentNode = parent;\n  newChild.ownerDocument = parent.ownerDocument;\n  return newChild;\n}\nfunction removeChild(parent, child) {\n  if (child.parentNode !== parent)\n    throw new Error(\n      \"Failed to execute 'removeChild' on 'RRNode': The RRNode to be removed is not a child of this RRNode.\"\n    );\n  if (child.previousSibling)\n    child.previousSibling.nextSibling = child.nextSibling;\n  else parent.firstChild = child.nextSibling;\n  if (child.nextSibling)\n    child.nextSibling.previousSibling = child.previousSibling;\n  else parent.lastChild = child.previousSibling;\n  child.previousSibling = null;\n  child.nextSibling = null;\n  child.parentElement = null;\n  child.parentNode = null;\n  return child;\n}\nvar NodeType = /* @__PURE__ */ ((NodeType2) => {\n  NodeType2[NodeType2[\"PLACEHOLDER\"] = 0] = \"PLACEHOLDER\";\n  NodeType2[NodeType2[\"ELEMENT_NODE\"] = 1] = \"ELEMENT_NODE\";\n  NodeType2[NodeType2[\"ATTRIBUTE_NODE\"] = 2] = \"ATTRIBUTE_NODE\";\n  NodeType2[NodeType2[\"TEXT_NODE\"] = 3] = \"TEXT_NODE\";\n  NodeType2[NodeType2[\"CDATA_SECTION_NODE\"] = 4] = \"CDATA_SECTION_NODE\";\n  NodeType2[NodeType2[\"ENTITY_REFERENCE_NODE\"] = 5] = \"ENTITY_REFERENCE_NODE\";\n  NodeType2[NodeType2[\"ENTITY_NODE\"] = 6] = \"ENTITY_NODE\";\n  NodeType2[NodeType2[\"PROCESSING_INSTRUCTION_NODE\"] = 7] = \"PROCESSING_INSTRUCTION_NODE\";\n  NodeType2[NodeType2[\"COMMENT_NODE\"] = 8] = \"COMMENT_NODE\";\n  NodeType2[NodeType2[\"DOCUMENT_NODE\"] = 9] = \"DOCUMENT_NODE\";\n  NodeType2[NodeType2[\"DOCUMENT_TYPE_NODE\"] = 10] = \"DOCUMENT_TYPE_NODE\";\n  NodeType2[NodeType2[\"DOCUMENT_FRAGMENT_NODE\"] = 11] = \"DOCUMENT_FRAGMENT_NODE\";\n  return NodeType2;\n})(NodeType || {});\nfunction getIFrameContentDocument(iframe) {\n  try {\n    return iframe.contentDocument;\n  } catch (e2) {\n  }\n}\nfunction getIFrameContentWindow(iframe) {\n  try {\n    return iframe.contentWindow;\n  } catch (e2) {\n  }\n}\nconst NAMESPACES = {\n  svg: \"http://www.w3.org/2000/svg\",\n  \"xlink:href\": \"http://www.w3.org/1999/xlink\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\nconst SVGTagMap = {\n  altglyph: \"altGlyph\",\n  altglyphdef: \"altGlyphDef\",\n  altglyphitem: \"altGlyphItem\",\n  animatecolor: \"animateColor\",\n  animatemotion: \"animateMotion\",\n  animatetransform: \"animateTransform\",\n  clippath: \"clipPath\",\n  feblend: \"feBlend\",\n  fecolormatrix: \"feColorMatrix\",\n  fecomponenttransfer: \"feComponentTransfer\",\n  fecomposite: \"feComposite\",\n  feconvolvematrix: \"feConvolveMatrix\",\n  fediffuselighting: \"feDiffuseLighting\",\n  fedisplacementmap: \"feDisplacementMap\",\n  fedistantlight: \"feDistantLight\",\n  fedropshadow: \"feDropShadow\",\n  feflood: \"feFlood\",\n  fefunca: \"feFuncA\",\n  fefuncb: \"feFuncB\",\n  fefuncg: \"feFuncG\",\n  fefuncr: \"feFuncR\",\n  fegaussianblur: \"feGaussianBlur\",\n  feimage: \"feImage\",\n  femerge: \"feMerge\",\n  femergenode: \"feMergeNode\",\n  femorphology: \"feMorphology\",\n  feoffset: \"feOffset\",\n  fepointlight: \"fePointLight\",\n  fespecularlighting: \"feSpecularLighting\",\n  fespotlight: \"feSpotLight\",\n  fetile: \"feTile\",\n  feturbulence: \"feTurbulence\",\n  foreignobject: \"foreignObject\",\n  glyphref: \"glyphRef\",\n  lineargradient: \"linearGradient\",\n  radialgradient: \"radialGradient\"\n};\nlet createdNodeSet = null;\nfunction diff(oldTree, newTree, replayer, rrnodeMirror = newTree.mirror || newTree.ownerDocument.mirror) {\n  oldTree = diffBeforeUpdatingChildren(\n    oldTree,\n    newTree,\n    replayer,\n    rrnodeMirror\n  );\n  diffChildren(oldTree, newTree, replayer, rrnodeMirror);\n  diffAfterUpdatingChildren(oldTree, newTree, replayer);\n}\nfunction diffBeforeUpdatingChildren(oldTree, newTree, replayer, rrnodeMirror) {\n  if (replayer.afterAppend && !createdNodeSet) {\n    createdNodeSet = /* @__PURE__ */ new WeakSet();\n    setTimeout(() => {\n      createdNodeSet = null;\n    }, 0);\n  }\n  if (!sameNodeType(oldTree, newTree)) {\n    const calibratedOldTree = createOrGetNode(\n      newTree,\n      replayer.mirror,\n      rrnodeMirror\n    );\n    oldTree.parentNode?.replaceChild(calibratedOldTree, oldTree);\n    oldTree = calibratedOldTree;\n  }\n  switch (newTree.RRNodeType) {\n    case NodeType$1.Document: {\n      if (!nodeMatching(oldTree, newTree, replayer.mirror, rrnodeMirror)) {\n        const newMeta = rrnodeMirror.getMeta(newTree);\n        if (newMeta) {\n          replayer.mirror.removeNodeFromMap(oldTree);\n          oldTree.close();\n          oldTree.open();\n          replayer.mirror.add(oldTree, newMeta);\n          createdNodeSet?.add(oldTree);\n        }\n      }\n      break;\n    }\n    case NodeType$1.Element: {\n      const oldElement = oldTree;\n      const newRRElement = newTree;\n      switch (newRRElement.tagName) {\n        case \"IFRAME\": {\n          const oldContentDocument = getIFrameContentDocument(\n            oldTree\n          );\n          if (!oldContentDocument) break;\n          diff(\n            oldContentDocument,\n            newTree.contentDocument,\n            replayer,\n            rrnodeMirror\n          );\n          break;\n        }\n      }\n      if (newRRElement.shadowRoot) {\n        if (!oldElement.shadowRoot) oldElement.attachShadow({ mode: \"open\" });\n        diffChildren(\n          // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n          oldElement.shadowRoot,\n          newRRElement.shadowRoot,\n          replayer,\n          rrnodeMirror\n        );\n      }\n      diffProps(oldElement, newRRElement, rrnodeMirror);\n      break;\n    }\n  }\n  return oldTree;\n}\nfunction diffAfterUpdatingChildren(oldTree, newTree, replayer) {\n  switch (newTree.RRNodeType) {\n    case NodeType$1.Document: {\n      const scrollData = newTree.scrollData;\n      scrollData && replayer.applyScroll(scrollData, true);\n      break;\n    }\n    case NodeType$1.Element: {\n      const oldElement = oldTree;\n      const newRRElement = newTree;\n      newRRElement.scrollData && replayer.applyScroll(newRRElement.scrollData, true);\n      newRRElement.inputData && replayer.applyInput(newRRElement.inputData);\n      switch (newRRElement.tagName) {\n        case \"AUDIO\":\n        case \"VIDEO\": {\n          const oldMediaElement = oldTree;\n          const newMediaRRElement = newRRElement;\n          if (newMediaRRElement.paused !== void 0)\n            newMediaRRElement.paused ? void oldMediaElement.pause() : void oldMediaElement.play();\n          if (newMediaRRElement.muted !== void 0)\n            oldMediaElement.muted = newMediaRRElement.muted;\n          if (newMediaRRElement.volume !== void 0)\n            oldMediaElement.volume = newMediaRRElement.volume;\n          if (newMediaRRElement.currentTime !== void 0)\n            oldMediaElement.currentTime = newMediaRRElement.currentTime;\n          if (newMediaRRElement.playbackRate !== void 0)\n            oldMediaElement.playbackRate = newMediaRRElement.playbackRate;\n          break;\n        }\n        case \"CANVAS\": {\n          const rrCanvasElement = newTree;\n          if (rrCanvasElement.rr_dataURL !== null) {\n            const image = document.createElement(\"img\");\n            image.onload = () => {\n              const ctx = oldElement.getContext(\"2d\");\n              if (ctx) {\n                ctx.drawImage(image, 0, 0, image.width, image.height);\n              }\n            };\n            image.src = rrCanvasElement.rr_dataURL;\n          }\n          rrCanvasElement.canvasMutations.forEach(\n            (canvasMutation2) => replayer.applyCanvas(\n              canvasMutation2.event,\n              canvasMutation2.mutation,\n              oldTree\n            )\n          );\n          break;\n        }\n        case \"STYLE\": {\n          const styleSheet = oldElement.sheet;\n          styleSheet && newTree.rules.forEach(\n            (data) => replayer.applyStyleSheetMutation(data, styleSheet)\n          );\n          break;\n        }\n      }\n      break;\n    }\n    case NodeType$1.Text:\n    case NodeType$1.Comment:\n    case NodeType$1.CDATA: {\n      if (oldTree.textContent !== newTree.data)\n        oldTree.textContent = newTree.data;\n      break;\n    }\n  }\n  if (createdNodeSet?.has(oldTree)) {\n    createdNodeSet.delete(oldTree);\n    replayer.afterAppend?.(oldTree, replayer.mirror.getId(oldTree));\n  }\n}\nfunction diffProps(oldTree, newTree, rrnodeMirror) {\n  const oldAttributes = oldTree.attributes;\n  const newAttributes = newTree.attributes;\n  for (const name in newAttributes) {\n    const newValue = newAttributes[name];\n    const sn = rrnodeMirror.getMeta(newTree);\n    if (sn?.isSVG && NAMESPACES[name])\n      oldTree.setAttributeNS(NAMESPACES[name], name, newValue);\n    else if (newTree.tagName === \"CANVAS\" && name === \"rr_dataURL\") {\n      const image = document.createElement(\"img\");\n      image.src = newValue;\n      image.onload = () => {\n        const ctx = oldTree.getContext(\"2d\");\n        if (ctx) {\n          ctx.drawImage(image, 0, 0, image.width, image.height);\n        }\n      };\n    } else if (newTree.tagName === \"IFRAME\" && name === \"srcdoc\") continue;\n    else {\n      try {\n        oldTree.setAttribute(name, newValue);\n      } catch (err) {\n        console.warn(err);\n      }\n    }\n  }\n  for (const { name } of Array.from(oldAttributes))\n    if (!(name in newAttributes)) oldTree.removeAttribute(name);\n  newTree.scrollLeft && (oldTree.scrollLeft = newTree.scrollLeft);\n  newTree.scrollTop && (oldTree.scrollTop = newTree.scrollTop);\n}\nfunction diffChildren(oldTree, newTree, replayer, rrnodeMirror) {\n  const oldChildren = Array.from(oldTree.childNodes);\n  const newChildren = newTree.childNodes;\n  if (oldChildren.length === 0 && newChildren.length === 0) return;\n  let oldStartIndex = 0, oldEndIndex = oldChildren.length - 1, newStartIndex = 0, newEndIndex = newChildren.length - 1;\n  let oldStartNode = oldChildren[oldStartIndex], oldEndNode = oldChildren[oldEndIndex], newStartNode = newChildren[newStartIndex], newEndNode = newChildren[newEndIndex];\n  let oldIdToIndex = void 0, indexInOld = void 0;\n  while (oldStartIndex <= oldEndIndex && newStartIndex <= newEndIndex) {\n    if (oldStartNode === void 0) {\n      oldStartNode = oldChildren[++oldStartIndex];\n    } else if (oldEndNode === void 0) {\n      oldEndNode = oldChildren[--oldEndIndex];\n    } else if (\n      // same first node?\n      nodeMatching(oldStartNode, newStartNode, replayer.mirror, rrnodeMirror)\n    ) {\n      oldStartNode = oldChildren[++oldStartIndex];\n      newStartNode = newChildren[++newStartIndex];\n    } else if (\n      // same last node?\n      nodeMatching(oldEndNode, newEndNode, replayer.mirror, rrnodeMirror)\n    ) {\n      oldEndNode = oldChildren[--oldEndIndex];\n      newEndNode = newChildren[--newEndIndex];\n    } else if (\n      // is the first old node the same as the last new node?\n      nodeMatching(oldStartNode, newEndNode, replayer.mirror, rrnodeMirror)\n    ) {\n      try {\n        handleInsertBefore(oldTree, oldStartNode, oldEndNode.nextSibling);\n      } catch (e2) {\n        console.warn(e2);\n      }\n      oldStartNode = oldChildren[++oldStartIndex];\n      newEndNode = newChildren[--newEndIndex];\n    } else if (\n      // is the last old node the same as the first new node?\n      nodeMatching(oldEndNode, newStartNode, replayer.mirror, rrnodeMirror)\n    ) {\n      try {\n        handleInsertBefore(oldTree, oldEndNode, oldStartNode);\n      } catch (e2) {\n        console.warn(e2);\n      }\n      oldEndNode = oldChildren[--oldEndIndex];\n      newStartNode = newChildren[++newStartIndex];\n    } else {\n      if (!oldIdToIndex) {\n        oldIdToIndex = {};\n        for (let i2 = oldStartIndex; i2 <= oldEndIndex; i2++) {\n          const oldChild2 = oldChildren[i2];\n          if (oldChild2 && replayer.mirror.hasNode(oldChild2))\n            oldIdToIndex[replayer.mirror.getId(oldChild2)] = i2;\n        }\n      }\n      indexInOld = oldIdToIndex[rrnodeMirror.getId(newStartNode)];\n      const nodeToMove = oldChildren[indexInOld];\n      if (indexInOld !== void 0 && nodeToMove && nodeMatching(nodeToMove, newStartNode, replayer.mirror, rrnodeMirror)) {\n        try {\n          handleInsertBefore(oldTree, nodeToMove, oldStartNode);\n        } catch (e2) {\n          console.warn(e2);\n        }\n        oldChildren[indexInOld] = void 0;\n      } else {\n        const newNode = createOrGetNode(\n          newStartNode,\n          replayer.mirror,\n          rrnodeMirror\n        );\n        if (oldTree.nodeName === \"#document\" && oldStartNode && /**\n        * Special case 1: one document isn't allowed to have two doctype nodes at the same time, so we need to remove the old one first before inserting the new one.\n        * How this case happens: A parent document in the old tree already has a doctype node with an id e.g. #1. A new full snapshot rebuilds the replayer with a new doctype node with another id #2. According to the algorithm, the new doctype node will be inserted before the old one, which is not allowed by the Document standard.\n        */\n        (newNode.nodeType === newNode.DOCUMENT_TYPE_NODE && oldStartNode.nodeType === oldStartNode.DOCUMENT_TYPE_NODE || /**\n        * Special case 2: one document isn't allowed to have two HTMLElements at the same time, so we need to remove the old one first before inserting the new one.\n        * How this case happens: A mounted iframe element has an automatically created HTML element. We should delete it before inserting a serialized one. Otherwise, an error 'Only one element on document allowed' will be thrown.\n        */\n        newNode.nodeType === newNode.ELEMENT_NODE && oldStartNode.nodeType === oldStartNode.ELEMENT_NODE)) {\n          oldTree.removeChild(oldStartNode);\n          replayer.mirror.removeNodeFromMap(oldStartNode);\n          oldStartNode = oldChildren[++oldStartIndex];\n        }\n        try {\n          handleInsertBefore(oldTree, newNode, oldStartNode || null);\n        } catch (e2) {\n          console.warn(e2);\n        }\n      }\n      newStartNode = newChildren[++newStartIndex];\n    }\n  }\n  if (oldStartIndex > oldEndIndex) {\n    const referenceRRNode = newChildren[newEndIndex + 1];\n    let referenceNode = null;\n    if (referenceRRNode)\n      referenceNode = replayer.mirror.getNode(\n        rrnodeMirror.getId(referenceRRNode)\n      );\n    for (; newStartIndex <= newEndIndex; ++newStartIndex) {\n      const newNode = createOrGetNode(\n        newChildren[newStartIndex],\n        replayer.mirror,\n        rrnodeMirror\n      );\n      try {\n        handleInsertBefore(oldTree, newNode, referenceNode);\n      } catch (e2) {\n        console.warn(e2);\n      }\n    }\n  } else if (newStartIndex > newEndIndex) {\n    for (; oldStartIndex <= oldEndIndex; oldStartIndex++) {\n      const node = oldChildren[oldStartIndex];\n      if (!node || node.parentNode !== oldTree) continue;\n      try {\n        oldTree.removeChild(node);\n        replayer.mirror.removeNodeFromMap(node);\n      } catch (e2) {\n        console.warn(e2);\n      }\n    }\n  }\n  let oldChild = oldTree.firstChild;\n  let newChild = newTree.firstChild;\n  while (oldChild !== null && newChild !== null) {\n    diff(oldChild, newChild, replayer, rrnodeMirror);\n    oldChild = oldChild.nextSibling;\n    newChild = newChild.nextSibling;\n  }\n}\nfunction createOrGetNode(rrNode, domMirror, rrnodeMirror) {\n  const nodeId = rrnodeMirror.getId(rrNode);\n  const sn = rrnodeMirror.getMeta(rrNode);\n  let node = null;\n  if (nodeId > -1) node = domMirror.getNode(nodeId);\n  if (node !== null && sameNodeType(node, rrNode)) return node;\n  switch (rrNode.RRNodeType) {\n    case NodeType$1.Document:\n      node = new Document();\n      break;\n    case NodeType$1.DocumentType:\n      node = document.implementation.createDocumentType(\n        rrNode.name,\n        rrNode.publicId,\n        rrNode.systemId\n      );\n      break;\n    case NodeType$1.Element: {\n      let tagName = rrNode.tagName.toLowerCase();\n      tagName = SVGTagMap[tagName] || tagName;\n      if (sn && \"isSVG\" in sn && sn?.isSVG) {\n        node = document.createElementNS(NAMESPACES[\"svg\"], tagName);\n      } else node = document.createElement(rrNode.tagName);\n      break;\n    }\n    case NodeType$1.Text:\n      node = document.createTextNode(rrNode.data);\n      break;\n    case NodeType$1.Comment:\n      node = document.createComment(rrNode.data);\n      break;\n    case NodeType$1.CDATA:\n      node = document.createCDATASection(rrNode.data);\n      break;\n  }\n  if (sn) domMirror.add(node, { ...sn });\n  try {\n    createdNodeSet?.add(node);\n  } catch (e2) {\n  }\n  return node;\n}\nfunction sameNodeType(node1, node2) {\n  if (node1.nodeType !== node2.nodeType) return false;\n  return node1.nodeType !== node1.ELEMENT_NODE || node1.tagName.toUpperCase() === node2.tagName;\n}\nfunction nodeMatching(node1, node2, domMirror, rrdomMirror) {\n  const node1Id = domMirror.getId(node1);\n  const node2Id = rrdomMirror.getId(node2);\n  if (node1Id === -1 || node1Id !== node2Id) return false;\n  return sameNodeType(node1, node2);\n}\nfunction getInsertedStylesFromElement(styleElement) {\n  const elementCssRules = styleElement.sheet?.cssRules;\n  if (!elementCssRules || !elementCssRules.length) return;\n  const tempStyleSheet = new CSSStyleSheet();\n  tempStyleSheet.replaceSync(styleElement.innerText);\n  const innerTextStylesMap = {};\n  for (let i2 = 0; i2 < tempStyleSheet.cssRules.length; i2++) {\n    innerTextStylesMap[tempStyleSheet.cssRules[i2].cssText] = tempStyleSheet.cssRules[i2];\n  }\n  const insertedStylesStyleSheet = [];\n  for (let i2 = 0; i2 < elementCssRules?.length; i2++) {\n    const cssRuleText = elementCssRules[i2].cssText;\n    if (!innerTextStylesMap[cssRuleText]) {\n      insertedStylesStyleSheet.push({\n        index: i2,\n        cssRuleText\n      });\n    }\n  }\n  return insertedStylesStyleSheet;\n}\nfunction handleInsertBefore(oldTree, nodeToMove, insertBeforeNode) {\n  let insertedStyles;\n  if (nodeToMove.nodeName === \"STYLE\") {\n    insertedStyles = getInsertedStylesFromElement(\n      nodeToMove\n    );\n  }\n  oldTree.insertBefore(nodeToMove, insertBeforeNode);\n  if (insertedStyles && insertedStyles.length) {\n    insertedStyles.forEach(({ cssRuleText, index }) => {\n      nodeToMove.sheet?.insertRule(cssRuleText, index);\n    });\n  }\n}\nclass RRDocument extends BaseRRDocument {\n  constructor(mirror2) {\n    super();\n    __publicField(this, \"UNSERIALIZED_STARTING_ID\", -2);\n    __publicField(this, \"_unserializedId\", this.UNSERIALIZED_STARTING_ID);\n    __publicField(this, \"mirror\", createMirror());\n    __publicField(this, \"scrollData\", null);\n    if (mirror2) {\n      this.mirror = mirror2;\n    }\n  }\n  /**\n   * Every time the id is used, it will minus 1 automatically to avoid collisions.\n   */\n  get unserializedId() {\n    return this._unserializedId--;\n  }\n  createDocument(_namespace, _qualifiedName, _doctype) {\n    return new RRDocument();\n  }\n  createDocumentType(qualifiedName, publicId, systemId) {\n    const documentTypeNode = new RRDocumentType(\n      qualifiedName,\n      publicId,\n      systemId\n    );\n    documentTypeNode.ownerDocument = this;\n    return documentTypeNode;\n  }\n  createElement(tagName) {\n    const upperTagName = tagName.toUpperCase();\n    let element;\n    switch (upperTagName) {\n      case \"AUDIO\":\n      case \"VIDEO\":\n        element = new RRMediaElement(upperTagName);\n        break;\n      case \"IFRAME\":\n        element = new RRIFrameElement(upperTagName, this.mirror);\n        break;\n      case \"CANVAS\":\n        element = new RRCanvasElement(upperTagName);\n        break;\n      case \"STYLE\":\n        element = new RRStyleElement(upperTagName);\n        break;\n      default:\n        element = new RRElement(upperTagName);\n        break;\n    }\n    element.ownerDocument = this;\n    return element;\n  }\n  createComment(data) {\n    const commentNode = new RRComment(data);\n    commentNode.ownerDocument = this;\n    return commentNode;\n  }\n  createCDATASection(data) {\n    const sectionNode = new RRCDATASection(data);\n    sectionNode.ownerDocument = this;\n    return sectionNode;\n  }\n  createTextNode(data) {\n    const textNode = new RRText(data);\n    textNode.ownerDocument = this;\n    return textNode;\n  }\n  destroyTree() {\n    this.firstChild = null;\n    this.lastChild = null;\n    this.mirror.reset();\n  }\n  open() {\n    super.open();\n    this._unserializedId = this.UNSERIALIZED_STARTING_ID;\n  }\n}\nconst RRDocumentType = BaseRRDocumentType;\nclass RRElement extends BaseRRElement {\n  constructor() {\n    super(...arguments);\n    __publicField(this, \"inputData\", null);\n    __publicField(this, \"scrollData\", null);\n  }\n}\nclass RRMediaElement extends BaseRRMediaElement {\n}\nclass RRCanvasElement extends RRElement {\n  constructor() {\n    super(...arguments);\n    __publicField(this, \"rr_dataURL\", null);\n    __publicField(this, \"canvasMutations\", []);\n  }\n  /**\n   * This is a dummy implementation to distinguish RRCanvasElement from real HTMLCanvasElement.\n   */\n  getContext() {\n    return null;\n  }\n}\nclass RRStyleElement extends RRElement {\n  constructor() {\n    super(...arguments);\n    __publicField(this, \"rules\", []);\n  }\n}\nclass RRIFrameElement extends RRElement {\n  constructor(upperTagName, mirror2) {\n    super(upperTagName);\n    __publicField(this, \"contentDocument\", new RRDocument());\n    this.contentDocument.mirror = mirror2;\n  }\n}\nconst RRText = BaseRRText;\nconst RRComment = BaseRRComment;\nconst RRCDATASection = BaseRRCDATASection;\nfunction getValidTagName(element) {\n  if (element instanceof HTMLFormElement) {\n    return \"FORM\";\n  }\n  return element.tagName.toUpperCase();\n}\nfunction buildFromNode(node, rrdom, domMirror, parentRRNode) {\n  let rrNode;\n  switch (node.nodeType) {\n    case NodeType.DOCUMENT_NODE:\n      if (parentRRNode && parentRRNode.nodeName === \"IFRAME\")\n        rrNode = parentRRNode.contentDocument;\n      else {\n        rrNode = rrdom;\n        rrNode.compatMode = node.compatMode;\n      }\n      break;\n    case NodeType.DOCUMENT_TYPE_NODE: {\n      const documentType = node;\n      rrNode = rrdom.createDocumentType(\n        documentType.name,\n        documentType.publicId,\n        documentType.systemId\n      );\n      break;\n    }\n    case NodeType.ELEMENT_NODE: {\n      const elementNode = node;\n      const tagName = getValidTagName(elementNode);\n      rrNode = rrdom.createElement(tagName);\n      const rrElement = rrNode;\n      for (const { name, value } of Array.from(elementNode.attributes)) {\n        rrElement.attributes[name] = value;\n      }\n      elementNode.scrollLeft && (rrElement.scrollLeft = elementNode.scrollLeft);\n      elementNode.scrollTop && (rrElement.scrollTop = elementNode.scrollTop);\n      break;\n    }\n    case NodeType.TEXT_NODE:\n      rrNode = rrdom.createTextNode(node.textContent || \"\");\n      break;\n    case NodeType.CDATA_SECTION_NODE:\n      rrNode = rrdom.createCDATASection(node.data);\n      break;\n    case NodeType.COMMENT_NODE:\n      rrNode = rrdom.createComment(node.textContent || \"\");\n      break;\n    case NodeType.DOCUMENT_FRAGMENT_NODE:\n      rrNode = parentRRNode.attachShadow({ mode: \"open\" });\n      break;\n    default:\n      return null;\n  }\n  let sn = domMirror.getMeta(node);\n  if (rrdom instanceof RRDocument) {\n    if (!sn) {\n      sn = getDefaultSN(rrNode, rrdom.unserializedId);\n      domMirror.add(node, sn);\n    }\n    rrdom.mirror.add(rrNode, { ...sn });\n  }\n  return rrNode;\n}\nfunction buildFromDom(dom, domMirror = createMirror$1(), rrdom = new RRDocument()) {\n  function walk2(node, parentRRNode) {\n    const rrNode = buildFromNode(node, rrdom, domMirror, parentRRNode);\n    if (rrNode === null) return;\n    if (\n      // if the parentRRNode isn't a RRIFrameElement\n      parentRRNode?.nodeName !== \"IFRAME\" && // if node isn't a shadow root\n      node.nodeType !== NodeType.DOCUMENT_FRAGMENT_NODE\n    ) {\n      parentRRNode?.appendChild(rrNode);\n      rrNode.parentNode = parentRRNode;\n      rrNode.parentElement = parentRRNode;\n    }\n    if (node.nodeName === \"IFRAME\") {\n      const iframeDoc = getIFrameContentDocument(node);\n      iframeDoc && walk2(iframeDoc, rrNode);\n    } else if (node.nodeType === NodeType.DOCUMENT_NODE || node.nodeType === NodeType.ELEMENT_NODE || node.nodeType === NodeType.DOCUMENT_FRAGMENT_NODE) {\n      if (node.nodeType === NodeType.ELEMENT_NODE && node.shadowRoot)\n        walk2(node.shadowRoot, rrNode);\n      node.childNodes.forEach((childNode) => walk2(childNode, rrNode));\n    }\n  }\n  walk2(dom, null);\n  return rrdom;\n}\nfunction createMirror() {\n  return new Mirror22();\n}\nclass Mirror22 {\n  constructor() {\n    __publicField(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n    __publicField(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n  }\n  getId(n2) {\n    if (!n2) return -1;\n    const id = this.getMeta(n2)?.id;\n    return id ?? -1;\n  }\n  getNode(id) {\n    return this.idNodeMap.get(id) || null;\n  }\n  getIds() {\n    return Array.from(this.idNodeMap.keys());\n  }\n  getMeta(n2) {\n    return this.nodeMetaMap.get(n2) || null;\n  }\n  // removes the node from idNodeMap\n  // doesn't remove the node from nodeMetaMap\n  removeNodeFromMap(n2) {\n    const id = this.getId(n2);\n    this.idNodeMap.delete(id);\n    if (n2.childNodes) {\n      n2.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\n    }\n  }\n  has(id) {\n    return this.idNodeMap.has(id);\n  }\n  hasNode(node) {\n    return this.nodeMetaMap.has(node);\n  }\n  add(n2, meta) {\n    const id = meta.id;\n    this.idNodeMap.set(id, n2);\n    this.nodeMetaMap.set(n2, meta);\n  }\n  replace(id, n2) {\n    const oldNode = this.getNode(id);\n    if (oldNode) {\n      const meta = this.nodeMetaMap.get(oldNode);\n      if (meta) this.nodeMetaMap.set(n2, meta);\n    }\n    this.idNodeMap.set(id, n2);\n  }\n  reset() {\n    this.idNodeMap = /* @__PURE__ */ new Map();\n    this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n  }\n}\nfunction getDefaultSN(node, id) {\n  switch (node.RRNodeType) {\n    case NodeType$1.Document:\n      return {\n        id,\n        type: node.RRNodeType,\n        childNodes: []\n      };\n    case NodeType$1.DocumentType: {\n      const doctype = node;\n      return {\n        id,\n        type: node.RRNodeType,\n        name: doctype.name,\n        publicId: doctype.publicId,\n        systemId: doctype.systemId\n      };\n    }\n    case NodeType$1.Element:\n      return {\n        id,\n        type: node.RRNodeType,\n        tagName: node.tagName.toLowerCase(),\n        // In rrweb data, all tagNames are lowercase.\n        attributes: {},\n        childNodes: []\n      };\n    case NodeType$1.Text:\n      return {\n        id,\n        type: node.RRNodeType,\n        textContent: node.textContent || \"\"\n      };\n    case NodeType$1.Comment:\n      return {\n        id,\n        type: node.RRNodeType,\n        textContent: node.textContent || \"\"\n      };\n    case NodeType$1.CDATA:\n      return {\n        id,\n        type: node.RRNodeType,\n        textContent: \"\"\n      };\n  }\n}\nfunction isNodeInLinkedList(n2) {\n  return \"__ln\" in n2;\n}\nclass DoubleLinkedList {\n  constructor() {\n    this.length = 0;\n    this.head = null;\n    this.tail = null;\n  }\n  get(position) {\n    if (position >= this.length) {\n      throw new Error(\"Position outside of list range\");\n    }\n    let current = this.head;\n    for (let index = 0; index < position; index++) {\n      current = current?.next || null;\n    }\n    return current;\n  }\n  addNode(n2) {\n    const node = {\n      value: n2,\n      previous: null,\n      next: null\n    };\n    n2.__ln = node;\n    if (n2.previousSibling && isNodeInLinkedList(n2.previousSibling)) {\n      const current = n2.previousSibling.__ln.next;\n      node.next = current;\n      node.previous = n2.previousSibling.__ln;\n      n2.previousSibling.__ln.next = node;\n      if (current) {\n        current.previous = node;\n      }\n    } else if (n2.nextSibling && isNodeInLinkedList(n2.nextSibling) && n2.nextSibling.__ln.previous) {\n      const current = n2.nextSibling.__ln.previous;\n      node.previous = current;\n      node.next = n2.nextSibling.__ln;\n      n2.nextSibling.__ln.previous = node;\n      if (current) {\n        current.next = node;\n      }\n    } else {\n      if (this.head) {\n        this.head.previous = node;\n      }\n      node.next = this.head;\n      this.head = node;\n    }\n    if (node.next === null) {\n      this.tail = node;\n    }\n    this.length++;\n  }\n  removeNode(n2) {\n    const current = n2.__ln;\n    if (!this.head) {\n      return;\n    }\n    if (!current.previous) {\n      this.head = current.next;\n      if (this.head) {\n        this.head.previous = null;\n      } else {\n        this.tail = null;\n      }\n    } else {\n      current.previous.next = current.next;\n      if (current.next) {\n        current.next.previous = current.previous;\n      } else {\n        this.tail = current.previous;\n      }\n    }\n    if (n2.__ln) {\n      delete n2.__ln;\n    }\n    this.length--;\n  }\n}\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\nclass MutationBuffer {\n  constructor() {\n    this.frozen = false;\n    this.locked = false;\n    this.texts = [];\n    this.attributes = [];\n    this.attributeMap = /* @__PURE__ */ new WeakMap();\n    this.removes = [];\n    this.mapRemoves = [];\n    this.movedMap = {};\n    this.addedSet = /* @__PURE__ */ new Set();\n    this.movedSet = /* @__PURE__ */ new Set();\n    this.droppedSet = /* @__PURE__ */ new Set();\n    this.processMutations = (mutations) => {\n      mutations.forEach(this.processMutation);\n      this.emit();\n    };\n    this.emit = () => {\n      if (this.frozen || this.locked) {\n        return;\n      }\n      const adds = [];\n      const addedIds = /* @__PURE__ */ new Set();\n      const addList = new DoubleLinkedList();\n      const getNextId = (n2) => {\n        let ns = n2;\n        let nextId = IGNORED_NODE;\n        while (nextId === IGNORED_NODE) {\n          ns = ns && ns.nextSibling;\n          nextId = ns && this.mirror.getId(ns);\n        }\n        return nextId;\n      };\n      const pushAdd = (n2) => {\n        if (!n2.parentNode || !inDom(n2)) {\n          return;\n        }\n        const parentId = isShadowRoot(n2.parentNode) ? this.mirror.getId(getShadowHost(n2)) : this.mirror.getId(n2.parentNode);\n        const nextId = getNextId(n2);\n        if (parentId === -1 || nextId === -1) {\n          return addList.addNode(n2);\n        }\n        const sn = serializeNodeWithId(n2, {\n          doc: this.doc,\n          mirror: this.mirror,\n          blockClass: this.blockClass,\n          blockSelector: this.blockSelector,\n          maskAllText: this.maskAllText,\n          unblockSelector: this.unblockSelector,\n          maskTextClass: this.maskTextClass,\n          unmaskTextClass: this.unmaskTextClass,\n          maskTextSelector: this.maskTextSelector,\n          unmaskTextSelector: this.unmaskTextSelector,\n          skipChild: true,\n          newlyAddedElement: true,\n          inlineStylesheet: this.inlineStylesheet,\n          maskInputOptions: this.maskInputOptions,\n          maskAttributeFn: this.maskAttributeFn,\n          maskTextFn: this.maskTextFn,\n          maskInputFn: this.maskInputFn,\n          slimDOMOptions: this.slimDOMOptions,\n          dataURLOptions: this.dataURLOptions,\n          recordCanvas: this.recordCanvas,\n          inlineImages: this.inlineImages,\n          onSerialize: (currentN) => {\n            if (isSerializedIframe(currentN, this.mirror) && !isBlocked(\n              currentN,\n              this.blockClass,\n              this.blockSelector,\n              this.unblockSelector,\n              false\n            )) {\n              this.iframeManager.addIframe(currentN);\n            }\n            if (isSerializedStylesheet(currentN, this.mirror)) {\n              this.stylesheetManager.trackLinkElement(\n                currentN\n              );\n            }\n            if (hasShadowRoot(n2)) {\n              this.shadowDomManager.addShadowRoot(n2.shadowRoot, this.doc);\n            }\n          },\n          onIframeLoad: (iframe, childSn) => {\n            if (isBlocked(\n              iframe,\n              this.blockClass,\n              this.blockSelector,\n              this.unblockSelector,\n              false\n            )) {\n              return;\n            }\n            this.iframeManager.attachIframe(iframe, childSn);\n            if (iframe.contentWindow) {\n              this.canvasManager.addWindow(iframe.contentWindow);\n            }\n            this.shadowDomManager.observeAttachShadow(iframe);\n          },\n          onStylesheetLoad: (link, childSn) => {\n            this.stylesheetManager.attachLinkElement(link, childSn);\n          }\n        });\n        if (sn) {\n          adds.push({\n            parentId,\n            nextId,\n            node: sn\n          });\n          addedIds.add(sn.id);\n        }\n      };\n      while (this.mapRemoves.length) {\n        this.mirror.removeNodeFromMap(this.mapRemoves.shift());\n      }\n      for (const n2 of this.movedSet) {\n        if (isParentRemoved(this.removes, n2, this.mirror) && !this.movedSet.has(n2.parentNode)) {\n          continue;\n        }\n        pushAdd(n2);\n      }\n      for (const n2 of this.addedSet) {\n        if (!isAncestorInSet(this.droppedSet, n2) && !isParentRemoved(this.removes, n2, this.mirror)) {\n          pushAdd(n2);\n        } else if (isAncestorInSet(this.movedSet, n2)) {\n          pushAdd(n2);\n        } else {\n          this.droppedSet.add(n2);\n        }\n      }\n      let candidate = null;\n      while (addList.length) {\n        let node = null;\n        if (candidate) {\n          const parentId = this.mirror.getId(candidate.value.parentNode);\n          const nextId = getNextId(candidate.value);\n          if (parentId !== -1 && nextId !== -1) {\n            node = candidate;\n          }\n        }\n        if (!node) {\n          let tailNode = addList.tail;\n          while (tailNode) {\n            const _node = tailNode;\n            tailNode = tailNode.previous;\n            if (_node) {\n              const parentId = this.mirror.getId(_node.value.parentNode);\n              const nextId = getNextId(_node.value);\n              if (nextId === -1) continue;\n              else if (parentId !== -1) {\n                node = _node;\n                break;\n              } else {\n                const unhandledNode = _node.value;\n                if (unhandledNode.parentNode && unhandledNode.parentNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n                  const shadowHost = unhandledNode.parentNode.host;\n                  const parentId2 = this.mirror.getId(shadowHost);\n                  if (parentId2 !== -1) {\n                    node = _node;\n                    break;\n                  }\n                }\n              }\n            }\n          }\n        }\n        if (!node) {\n          while (addList.head) {\n            addList.removeNode(addList.head.value);\n          }\n          break;\n        }\n        candidate = node.previous;\n        addList.removeNode(node.value);\n        pushAdd(node.value);\n      }\n      const payload = {\n        texts: this.texts.map((text) => ({\n          id: this.mirror.getId(text.node),\n          value: text.value\n        })).filter((text) => !addedIds.has(text.id)).filter((text) => this.mirror.has(text.id)),\n        attributes: this.attributes.map((attribute) => {\n          const { attributes } = attribute;\n          if (typeof attributes.style === \"string\") {\n            const diffAsStr = JSON.stringify(attribute.styleDiff);\n            const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\n            if (diffAsStr.length < attributes.style.length) {\n              if ((diffAsStr + unchangedAsStr).split(\"var(\").length === attributes.style.split(\"var(\").length) {\n                attributes.style = attribute.styleDiff;\n              }\n            }\n          }\n          return {\n            id: this.mirror.getId(attribute.node),\n            attributes\n          };\n        }).filter((attribute) => !addedIds.has(attribute.id)).filter((attribute) => this.mirror.has(attribute.id)),\n        removes: this.removes,\n        adds\n      };\n      if (!payload.texts.length && !payload.attributes.length && !payload.removes.length && !payload.adds.length) {\n        return;\n      }\n      this.texts = [];\n      this.attributes = [];\n      this.attributeMap = /* @__PURE__ */ new WeakMap();\n      this.removes = [];\n      this.addedSet = /* @__PURE__ */ new Set();\n      this.movedSet = /* @__PURE__ */ new Set();\n      this.droppedSet = /* @__PURE__ */ new Set();\n      this.movedMap = {};\n      this.mutationCb(payload);\n    };\n    this.processMutation = (m) => {\n      if (isIgnored(m.target, this.mirror)) {\n        return;\n      }\n      switch (m.type) {\n        case \"characterData\": {\n          const value = m.target.textContent;\n          if (!isBlocked(\n            m.target,\n            this.blockClass,\n            this.blockSelector,\n            this.unblockSelector,\n            false\n          ) && value !== m.oldValue) {\n            this.texts.push({\n              value: needMaskingText(\n                m.target,\n                this.maskTextClass,\n                this.maskTextSelector,\n                this.unmaskTextClass,\n                this.unmaskTextSelector,\n                this.maskAllText\n              ) && value ? this.maskTextFn ? this.maskTextFn(value, closestElementOfNode(m.target)) : value.replace(/[\\S]/g, \"*\") : value,\n              node: m.target\n            });\n          }\n          break;\n        }\n        case \"attributes\": {\n          const target = m.target;\n          let attributeName = m.attributeName;\n          let value = m.target.getAttribute(attributeName);\n          if (attributeName === \"value\") {\n            const type = getInputType(target);\n            const tagName = target.tagName;\n            value = getInputValue(target, tagName, type);\n            const isInputMasked = shouldMaskInput({\n              maskInputOptions: this.maskInputOptions,\n              tagName,\n              type\n            });\n            const forceMask = needMaskingText(\n              m.target,\n              this.maskTextClass,\n              this.maskTextSelector,\n              this.unmaskTextClass,\n              this.unmaskTextSelector,\n              isInputMasked\n            );\n            value = maskInputValue({\n              isMasked: forceMask,\n              element: target,\n              value,\n              maskInputFn: this.maskInputFn\n            });\n          }\n          if (isBlocked(\n            m.target,\n            this.blockClass,\n            this.blockSelector,\n            this.unblockSelector,\n            false\n          ) || value === m.oldValue) {\n            return;\n          }\n          let item = this.attributeMap.get(m.target);\n          if (target.tagName === \"IFRAME\" && attributeName === \"src\" && !this.keepIframeSrcFn(value)) {\n            const iframeDoc = getIFrameContentDocument(\n              target\n            );\n            if (!iframeDoc) {\n              attributeName = \"rr_src\";\n            } else {\n              return;\n            }\n          }\n          if (!item) {\n            item = {\n              node: m.target,\n              attributes: {},\n              styleDiff: {},\n              _unchangedStyles: {}\n            };\n            this.attributes.push(item);\n            this.attributeMap.set(m.target, item);\n          }\n          if (attributeName === \"type\" && target.tagName === \"INPUT\" && (m.oldValue || \"\").toLowerCase() === \"password\") {\n            target.setAttribute(\"data-rr-is-password\", \"true\");\n          }\n          if (!ignoreAttribute(target.tagName, attributeName)) {\n            item.attributes[attributeName] = transformAttribute(\n              this.doc,\n              toLowerCase(target.tagName),\n              toLowerCase(attributeName),\n              value,\n              target,\n              this.maskAttributeFn\n            );\n            if (attributeName === \"style\") {\n              if (!this.unattachedDoc) {\n                try {\n                  this.unattachedDoc = document.implementation.createHTMLDocument();\n                } catch (e2) {\n                  this.unattachedDoc = this.doc;\n                }\n              }\n              const old = this.unattachedDoc.createElement(\"span\");\n              if (m.oldValue) {\n                old.setAttribute(\"style\", m.oldValue);\n              }\n              for (const pname of Array.from(target.style)) {\n                const newValue = target.style.getPropertyValue(pname);\n                const newPriority = target.style.getPropertyPriority(pname);\n                if (newValue !== old.style.getPropertyValue(pname) || newPriority !== old.style.getPropertyPriority(pname)) {\n                  if (newPriority === \"\") {\n                    item.styleDiff[pname] = newValue;\n                  } else {\n                    item.styleDiff[pname] = [newValue, newPriority];\n                  }\n                } else {\n                  item._unchangedStyles[pname] = [newValue, newPriority];\n                }\n              }\n              for (const pname of Array.from(old.style)) {\n                if (target.style.getPropertyValue(pname) === \"\") {\n                  item.styleDiff[pname] = false;\n                }\n              }\n            }\n          }\n          break;\n        }\n        case \"childList\": {\n          if (isBlocked(\n            m.target,\n            this.blockClass,\n            this.blockSelector,\n            this.unblockSelector,\n            true\n          )) {\n            return;\n          }\n          m.addedNodes.forEach((n2) => this.genAdds(n2, m.target));\n          m.removedNodes.forEach((n2) => {\n            const nodeId = this.mirror.getId(n2);\n            const parentId = isShadowRoot(m.target) ? this.mirror.getId(m.target.host) : this.mirror.getId(m.target);\n            if (isBlocked(\n              m.target,\n              this.blockClass,\n              this.blockSelector,\n              this.unblockSelector,\n              false\n            ) || isIgnored(n2, this.mirror) || !isSerialized(n2, this.mirror)) {\n              return;\n            }\n            if (this.addedSet.has(n2)) {\n              deepDelete(this.addedSet, n2);\n              this.droppedSet.add(n2);\n            } else if (this.addedSet.has(m.target) && nodeId === -1) ;\n            else if (isAncestorRemoved(m.target, this.mirror)) ;\n            else if (this.movedSet.has(n2) && this.movedMap[moveKey(nodeId, parentId)]) {\n              deepDelete(this.movedSet, n2);\n            } else {\n              this.removes.push({\n                parentId,\n                id: nodeId,\n                isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target) ? true : void 0\n              });\n            }\n            this.mapRemoves.push(n2);\n          });\n          break;\n        }\n      }\n    };\n    this.genAdds = (n2, target) => {\n      if (this.processedNodeManager.inOtherBuffer(n2, this)) return;\n      if (this.addedSet.has(n2) || this.movedSet.has(n2)) return;\n      if (this.mirror.hasNode(n2)) {\n        if (isIgnored(n2, this.mirror)) {\n          return;\n        }\n        this.movedSet.add(n2);\n        let targetId = null;\n        if (target && this.mirror.hasNode(target)) {\n          targetId = this.mirror.getId(target);\n        }\n        if (targetId && targetId !== -1) {\n          this.movedMap[moveKey(this.mirror.getId(n2), targetId)] = true;\n        }\n      } else {\n        this.addedSet.add(n2);\n        this.droppedSet.delete(n2);\n      }\n      if (!isBlocked(\n        n2,\n        this.blockClass,\n        this.blockSelector,\n        this.unblockSelector,\n        false\n      )) {\n        n2.childNodes.forEach((childN) => this.genAdds(childN));\n        if (hasShadowRoot(n2)) {\n          n2.shadowRoot.childNodes.forEach((childN) => {\n            this.processedNodeManager.add(childN, this);\n            this.genAdds(childN, n2);\n          });\n        }\n      }\n    };\n  }\n  init(options) {\n    [\n      \"mutationCb\",\n      \"blockClass\",\n      \"blockSelector\",\n      \"unblockSelector\",\n      \"maskAllText\",\n      \"maskTextClass\",\n      \"unmaskTextClass\",\n      \"maskTextSelector\",\n      \"unmaskTextSelector\",\n      \"inlineStylesheet\",\n      \"maskInputOptions\",\n      \"maskAttributeFn\",\n      \"maskTextFn\",\n      \"maskInputFn\",\n      \"keepIframeSrcFn\",\n      \"recordCanvas\",\n      \"inlineImages\",\n      \"slimDOMOptions\",\n      \"dataURLOptions\",\n      \"doc\",\n      \"mirror\",\n      \"iframeManager\",\n      \"stylesheetManager\",\n      \"shadowDomManager\",\n      \"canvasManager\",\n      \"processedNodeManager\"\n    ].forEach((key) => {\n      this[key] = options[key];\n    });\n  }\n  freeze() {\n    this.frozen = true;\n    this.canvasManager.freeze();\n  }\n  unfreeze() {\n    this.frozen = false;\n    this.canvasManager.unfreeze();\n    this.emit();\n  }\n  isFrozen() {\n    return this.frozen;\n  }\n  lock() {\n    this.locked = true;\n    this.canvasManager.lock();\n  }\n  unlock() {\n    this.locked = false;\n    this.canvasManager.unlock();\n    this.emit();\n  }\n  reset() {\n    this.shadowDomManager.reset();\n    this.canvasManager.reset();\n  }\n}\nfunction deepDelete(addsSet, n2) {\n  addsSet.delete(n2);\n  n2.childNodes.forEach((childN) => deepDelete(addsSet, childN));\n}\nfunction isParentRemoved(removes, n2, mirror2) {\n  if (removes.length === 0) return false;\n  return _isParentRemoved(removes, n2, mirror2);\n}\nfunction _isParentRemoved(removes, n2, mirror2) {\n  let node = n2.parentNode;\n  while (node) {\n    const parentId = mirror2.getId(node);\n    if (removes.some((r2) => r2.id === parentId)) {\n      return true;\n    }\n    node = node.parentNode;\n  }\n  return false;\n}\nfunction isAncestorInSet(set, n2) {\n  if (set.size === 0) return false;\n  return _isAncestorInSet(set, n2);\n}\nfunction _isAncestorInSet(set, n2) {\n  const { parentNode } = n2;\n  if (!parentNode) {\n    return false;\n  }\n  if (set.has(parentNode)) {\n    return true;\n  }\n  return _isAncestorInSet(set, parentNode);\n}\nlet errorHandler;\nfunction registerErrorHandler(handler) {\n  errorHandler = handler;\n}\nfunction unregisterErrorHandler() {\n  errorHandler = void 0;\n}\nconst callbackWrapper = (cb) => {\n  if (!errorHandler) {\n    return cb;\n  }\n  const rrwebWrapped = (...rest) => {\n    try {\n      return cb(...rest);\n    } catch (error) {\n      if (errorHandler && errorHandler(error) === true) {\n        return () => {\n        };\n      }\n      throw error;\n    }\n  };\n  return rrwebWrapped;\n};\nconst mutationBuffers = [];\nfunction getEventTarget(event) {\n  try {\n    if (\"composedPath\" in event) {\n      const path = event.composedPath();\n      if (path.length) {\n        return path[0];\n      }\n    } else if (\"path\" in event && event.path.length) {\n      return event.path[0];\n    }\n  } catch {\n  }\n  return event && event.target;\n}\nfunction initMutationObserver(options, rootEl) {\n  const mutationBuffer = new MutationBuffer();\n  mutationBuffers.push(mutationBuffer);\n  mutationBuffer.init(options);\n  let mutationObserverCtor = window.MutationObserver || /**\n  * Some websites may disable MutationObserver by removing it from the window object.\n  * If someone is using rrweb to build a browser extention or things like it, they\n  * could not change the website's code but can have an opportunity to inject some\n  * code before the website executing its JS logic.\n  * Then they can do this to store the native MutationObserver:\n  * window.__rrMutationObserver = MutationObserver\n  */\n  window.__rrMutationObserver;\n  const angularZoneSymbol = window?.Zone?.__symbol__?.(\"MutationObserver\");\n  if (angularZoneSymbol && window[angularZoneSymbol]) {\n    mutationObserverCtor = window[angularZoneSymbol];\n  }\n  const observer = new mutationObserverCtor(\n    callbackWrapper((mutations) => {\n      if (options.onMutation && options.onMutation(mutations) === false) {\n        return;\n      }\n      mutationBuffer.processMutations.bind(mutationBuffer)(mutations);\n    })\n  );\n  observer.observe(rootEl, {\n    attributes: true,\n    attributeOldValue: true,\n    characterData: true,\n    characterDataOldValue: true,\n    childList: true,\n    subtree: true\n  });\n  return observer;\n}\nfunction initMoveObserver({\n  mousemoveCb,\n  sampling,\n  doc,\n  mirror: mirror2\n}) {\n  if (sampling.mousemove === false) {\n    return () => {\n    };\n  }\n  const threshold = typeof sampling.mousemove === \"number\" ? sampling.mousemove : 50;\n  const callbackThreshold = typeof sampling.mousemoveCallback === \"number\" ? sampling.mousemoveCallback : 500;\n  let positions = [];\n  let timeBaseline;\n  const wrappedCb = throttle(\n    callbackWrapper(\n      (source) => {\n        const totalOffset = Date.now() - timeBaseline;\n        mousemoveCb(\n          positions.map((p) => {\n            p.timeOffset -= totalOffset;\n            return p;\n          }),\n          source\n        );\n        positions = [];\n        timeBaseline = null;\n      }\n    ),\n    callbackThreshold\n  );\n  const updatePosition = callbackWrapper(\n    throttle(\n      callbackWrapper((evt) => {\n        const target = getEventTarget(evt);\n        const { clientX, clientY } = legacy_isTouchEvent(evt) ? evt.changedTouches[0] : evt;\n        if (!timeBaseline) {\n          timeBaseline = nowTimestamp();\n        }\n        positions.push({\n          x: clientX,\n          y: clientY,\n          id: mirror2.getId(target),\n          timeOffset: nowTimestamp() - timeBaseline\n        });\n        wrappedCb(\n          typeof DragEvent !== \"undefined\" && evt instanceof DragEvent ? IncrementalSource.Drag : evt instanceof MouseEvent ? IncrementalSource.MouseMove : IncrementalSource.TouchMove\n        );\n      }),\n      threshold,\n      {\n        trailing: false\n      }\n    )\n  );\n  const handlers = [\n    on(\"mousemove\", updatePosition, doc),\n    on(\"touchmove\", updatePosition, doc),\n    on(\"drag\", updatePosition, doc)\n  ];\n  return callbackWrapper(() => {\n    handlers.forEach((h) => h());\n  });\n}\nfunction initMouseInteractionObserver({\n  mouseInteractionCb,\n  doc,\n  mirror: mirror2,\n  blockClass,\n  blockSelector,\n  unblockSelector,\n  sampling\n}) {\n  if (sampling.mouseInteraction === false) {\n    return () => {\n    };\n  }\n  const disableMap = sampling.mouseInteraction === true || sampling.mouseInteraction === void 0 ? {} : sampling.mouseInteraction;\n  const handlers = [];\n  let currentPointerType = null;\n  const getHandler = (eventKey) => {\n    return (event) => {\n      const target = getEventTarget(event);\n      if (isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n        return;\n      }\n      let pointerType = null;\n      let thisEventKey = eventKey;\n      if (\"pointerType\" in event) {\n        switch (event.pointerType) {\n          case \"mouse\":\n            pointerType = PointerTypes.Mouse;\n            break;\n          case \"touch\":\n            pointerType = PointerTypes.Touch;\n            break;\n          case \"pen\":\n            pointerType = PointerTypes.Pen;\n            break;\n        }\n        if (pointerType === PointerTypes.Touch) {\n          if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\n            thisEventKey = \"TouchStart\";\n          } else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\n            thisEventKey = \"TouchEnd\";\n          }\n        } else if (pointerType === PointerTypes.Pen) ;\n      } else if (legacy_isTouchEvent(event)) {\n        pointerType = PointerTypes.Touch;\n      }\n      if (pointerType !== null) {\n        currentPointerType = pointerType;\n        if (thisEventKey.startsWith(\"Touch\") && pointerType === PointerTypes.Touch || thisEventKey.startsWith(\"Mouse\") && pointerType === PointerTypes.Mouse) {\n          pointerType = null;\n        }\n      } else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\n        pointerType = currentPointerType;\n        currentPointerType = null;\n      }\n      const e2 = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\n      if (!e2) {\n        return;\n      }\n      const id = mirror2.getId(target);\n      const { clientX, clientY } = e2;\n      callbackWrapper(mouseInteractionCb)({\n        type: MouseInteractions[thisEventKey],\n        id,\n        x: clientX,\n        y: clientY,\n        ...pointerType !== null && { pointerType }\n      });\n    };\n  };\n  Object.keys(MouseInteractions).filter(\n    (key) => Number.isNaN(Number(key)) && !key.endsWith(\"_Departed\") && disableMap[key] !== false\n  ).forEach((eventKey) => {\n    let eventName = toLowerCase(eventKey);\n    const handler = getHandler(eventKey);\n    if (window.PointerEvent) {\n      switch (MouseInteractions[eventKey]) {\n        case MouseInteractions.MouseDown:\n        case MouseInteractions.MouseUp:\n          eventName = eventName.replace(\n            \"mouse\",\n            \"pointer\"\n          );\n          break;\n        case MouseInteractions.TouchStart:\n        case MouseInteractions.TouchEnd:\n          return;\n      }\n    }\n    handlers.push(on(eventName, handler, doc));\n  });\n  return callbackWrapper(() => {\n    handlers.forEach((h) => h());\n  });\n}\nfunction initScrollObserver({\n  scrollCb,\n  doc,\n  mirror: mirror2,\n  blockClass,\n  blockSelector,\n  unblockSelector,\n  sampling\n}) {\n  const updatePosition = callbackWrapper(\n    throttle(\n      callbackWrapper((evt) => {\n        const target = getEventTarget(evt);\n        if (!target || isBlocked(\n          target,\n          blockClass,\n          blockSelector,\n          unblockSelector,\n          true\n        )) {\n          return;\n        }\n        const id = mirror2.getId(target);\n        if (target === doc && doc.defaultView) {\n          const scrollLeftTop = getWindowScroll(doc.defaultView);\n          scrollCb({\n            id,\n            x: scrollLeftTop.left,\n            y: scrollLeftTop.top\n          });\n        } else {\n          scrollCb({\n            id,\n            x: target.scrollLeft,\n            y: target.scrollTop\n          });\n        }\n      }),\n      sampling.scroll || 100\n    )\n  );\n  return on(\"scroll\", updatePosition, doc);\n}\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\n  let lastH = -1;\n  let lastW = -1;\n  const updateDimension = callbackWrapper(\n    throttle(\n      callbackWrapper(() => {\n        const height = getWindowHeight();\n        const width = getWindowWidth();\n        if (lastH !== height || lastW !== width) {\n          viewportResizeCb({\n            width: Number(width),\n            height: Number(height)\n          });\n          lastH = height;\n          lastW = width;\n        }\n      }),\n      200\n    )\n  );\n  return on(\"resize\", updateDimension, win);\n}\nconst INPUT_TAGS = [\"INPUT\", \"TEXTAREA\", \"SELECT\"];\nconst lastInputValueMap = /* @__PURE__ */ new WeakMap();\nfunction initInputObserver({\n  inputCb,\n  doc,\n  mirror: mirror2,\n  blockClass,\n  blockSelector,\n  unblockSelector,\n  ignoreClass,\n  ignoreSelector,\n  maskInputOptions,\n  maskInputFn,\n  sampling,\n  userTriggeredOnInput,\n  maskTextClass,\n  unmaskTextClass,\n  maskTextSelector,\n  unmaskTextSelector\n}) {\n  function eventHandler(event) {\n    let target = getEventTarget(event);\n    const userTriggered = event.isTrusted;\n    const tagName = target && toUpperCase(target.tagName);\n    if (tagName === \"OPTION\") target = target.parentElement;\n    if (!target || !tagName || INPUT_TAGS.indexOf(tagName) < 0 || isBlocked(\n      target,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      true\n    )) {\n      return;\n    }\n    const el = target;\n    if (el.classList.contains(ignoreClass) || ignoreSelector && el.matches(ignoreSelector)) {\n      return;\n    }\n    const type = getInputType(target);\n    let text = getInputValue(el, tagName, type);\n    let isChecked = false;\n    const isInputMasked = shouldMaskInput({\n      maskInputOptions,\n      tagName,\n      type\n    });\n    const forceMask = needMaskingText(\n      target,\n      maskTextClass,\n      maskTextSelector,\n      unmaskTextClass,\n      unmaskTextSelector,\n      isInputMasked\n    );\n    if (type === \"radio\" || type === \"checkbox\") {\n      isChecked = target.checked;\n    }\n    text = maskInputValue({\n      isMasked: forceMask,\n      element: target,\n      value: text,\n      maskInputFn\n    });\n    cbWithDedup(\n      target,\n      userTriggeredOnInput ? { text, isChecked, userTriggered } : { text, isChecked }\n    );\n    const name = target.name;\n    if (type === \"radio\" && name && isChecked) {\n      doc.querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`).forEach((el2) => {\n        if (el2 !== target) {\n          const text2 = maskInputValue({\n            // share mask behavior of `target`\n            isMasked: forceMask,\n            element: el2,\n            value: getInputValue(el2, tagName, type),\n            maskInputFn\n          });\n          cbWithDedup(\n            el2,\n            userTriggeredOnInput ? { text: text2, isChecked: !isChecked, userTriggered: false } : { text: text2, isChecked: !isChecked }\n          );\n        }\n      });\n    }\n  }\n  function cbWithDedup(target, v2) {\n    const lastInputValue = lastInputValueMap.get(target);\n    if (!lastInputValue || lastInputValue.text !== v2.text || lastInputValue.isChecked !== v2.isChecked) {\n      lastInputValueMap.set(target, v2);\n      const id = mirror2.getId(target);\n      callbackWrapper(inputCb)({\n        ...v2,\n        id\n      });\n    }\n  }\n  const events = sampling.input === \"last\" ? [\"change\"] : [\"input\", \"change\"];\n  const handlers = events.map(\n    (eventName) => on(eventName, callbackWrapper(eventHandler), doc)\n  );\n  const currentWindow = doc.defaultView;\n  if (!currentWindow) {\n    return () => {\n      handlers.forEach((h) => h());\n    };\n  }\n  const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(\n    currentWindow.HTMLInputElement.prototype,\n    \"value\"\n  );\n  const hookProperties = [\n    [currentWindow.HTMLInputElement.prototype, \"value\"],\n    [currentWindow.HTMLInputElement.prototype, \"checked\"],\n    [currentWindow.HTMLSelectElement.prototype, \"value\"],\n    [currentWindow.HTMLTextAreaElement.prototype, \"value\"],\n    // Some UI library use selectedIndex to set select value\n    [currentWindow.HTMLSelectElement.prototype, \"selectedIndex\"],\n    [currentWindow.HTMLOptionElement.prototype, \"selected\"]\n  ];\n  if (propertyDescriptor && propertyDescriptor.set) {\n    handlers.push(\n      ...hookProperties.map(\n        (p) => hookSetter(\n          p[0],\n          p[1],\n          {\n            set() {\n              callbackWrapper(eventHandler)({\n                target: this,\n                isTrusted: false\n                // userTriggered to false as this could well be programmatic\n              });\n            }\n          },\n          false,\n          currentWindow\n        )\n      )\n    );\n  }\n  return callbackWrapper(() => {\n    handlers.forEach((h) => h());\n  });\n}\nfunction getNestedCSSRulePositions(rule) {\n  const positions = [];\n  function recurse(childRule, pos) {\n    if (hasNestedCSSRule(\"CSSGroupingRule\") && childRule.parentRule instanceof CSSGroupingRule || hasNestedCSSRule(\"CSSMediaRule\") && childRule.parentRule instanceof CSSMediaRule || hasNestedCSSRule(\"CSSSupportsRule\") && childRule.parentRule instanceof CSSSupportsRule || hasNestedCSSRule(\"CSSConditionRule\") && childRule.parentRule instanceof CSSConditionRule) {\n      const rules2 = Array.from(\n        childRule.parentRule.cssRules\n      );\n      const index = rules2.indexOf(childRule);\n      pos.unshift(index);\n    } else if (childRule.parentStyleSheet) {\n      const rules2 = Array.from(childRule.parentStyleSheet.cssRules);\n      const index = rules2.indexOf(childRule);\n      pos.unshift(index);\n    }\n    return pos;\n  }\n  return recurse(rule, positions);\n}\nfunction getIdAndStyleId(sheet, mirror2, styleMirror) {\n  let id, styleId;\n  if (!sheet) return {};\n  if (sheet.ownerNode) id = mirror2.getId(sheet.ownerNode);\n  else styleId = styleMirror.getId(sheet);\n  return {\n    styleId,\n    id\n  };\n}\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror: mirror2, stylesheetManager }, { win }) {\n  if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\n    return () => {\n    };\n  }\n  const insertRule = win.CSSStyleSheet.prototype.insertRule;\n  win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\n    apply: callbackWrapper(\n      (target, thisArg, argumentsList) => {\n        const [rule, index] = argumentsList;\n        const { id, styleId } = getIdAndStyleId(\n          thisArg,\n          mirror2,\n          stylesheetManager.styleMirror\n        );\n        if (id && id !== -1 || styleId && styleId !== -1) {\n          styleSheetRuleCb({\n            id,\n            styleId,\n            adds: [{ rule, index }]\n          });\n        }\n        return target.apply(thisArg, argumentsList);\n      }\n    )\n  });\n  const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\n  win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\n    apply: callbackWrapper(\n      (target, thisArg, argumentsList) => {\n        const [index] = argumentsList;\n        const { id, styleId } = getIdAndStyleId(\n          thisArg,\n          mirror2,\n          stylesheetManager.styleMirror\n        );\n        if (id && id !== -1 || styleId && styleId !== -1) {\n          styleSheetRuleCb({\n            id,\n            styleId,\n            removes: [{ index }]\n          });\n        }\n        return target.apply(thisArg, argumentsList);\n      }\n    )\n  });\n  let replace;\n  if (win.CSSStyleSheet.prototype.replace) {\n    replace = win.CSSStyleSheet.prototype.replace;\n    win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\n      apply: callbackWrapper(\n        (target, thisArg, argumentsList) => {\n          const [text] = argumentsList;\n          const { id, styleId } = getIdAndStyleId(\n            thisArg,\n            mirror2,\n            stylesheetManager.styleMirror\n          );\n          if (id && id !== -1 || styleId && styleId !== -1) {\n            styleSheetRuleCb({\n              id,\n              styleId,\n              replace: text\n            });\n          }\n          return target.apply(thisArg, argumentsList);\n        }\n      )\n    });\n  }\n  let replaceSync;\n  if (win.CSSStyleSheet.prototype.replaceSync) {\n    replaceSync = win.CSSStyleSheet.prototype.replaceSync;\n    win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\n      apply: callbackWrapper(\n        (target, thisArg, argumentsList) => {\n          const [text] = argumentsList;\n          const { id, styleId } = getIdAndStyleId(\n            thisArg,\n            mirror2,\n            stylesheetManager.styleMirror\n          );\n          if (id && id !== -1 || styleId && styleId !== -1) {\n            styleSheetRuleCb({\n              id,\n              styleId,\n              replaceSync: text\n            });\n          }\n          return target.apply(thisArg, argumentsList);\n        }\n      )\n    });\n  }\n  const supportedNestedCSSRuleTypes = {};\n  if (canMonkeyPatchNestedCSSRule(\"CSSGroupingRule\")) {\n    supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\n  } else {\n    if (canMonkeyPatchNestedCSSRule(\"CSSMediaRule\")) {\n      supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\n    }\n    if (canMonkeyPatchNestedCSSRule(\"CSSConditionRule\")) {\n      supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\n    }\n    if (canMonkeyPatchNestedCSSRule(\"CSSSupportsRule\")) {\n      supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\n    }\n  }\n  const unmodifiedFunctions = {};\n  Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n    unmodifiedFunctions[typeKey] = {\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      insertRule: type.prototype.insertRule,\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      deleteRule: type.prototype.deleteRule\n    };\n    type.prototype.insertRule = new Proxy(\n      unmodifiedFunctions[typeKey].insertRule,\n      {\n        apply: callbackWrapper(\n          (target, thisArg, argumentsList) => {\n            const [rule, index] = argumentsList;\n            const { id, styleId } = getIdAndStyleId(\n              thisArg.parentStyleSheet,\n              mirror2,\n              stylesheetManager.styleMirror\n            );\n            if (id && id !== -1 || styleId && styleId !== -1) {\n              styleSheetRuleCb({\n                id,\n                styleId,\n                adds: [\n                  {\n                    rule,\n                    index: [\n                      ...getNestedCSSRulePositions(thisArg),\n                      index || 0\n                      // defaults to 0\n                    ]\n                  }\n                ]\n              });\n            }\n            return target.apply(thisArg, argumentsList);\n          }\n        )\n      }\n    );\n    type.prototype.deleteRule = new Proxy(\n      unmodifiedFunctions[typeKey].deleteRule,\n      {\n        apply: callbackWrapper(\n          (target, thisArg, argumentsList) => {\n            const [index] = argumentsList;\n            const { id, styleId } = getIdAndStyleId(\n              thisArg.parentStyleSheet,\n              mirror2,\n              stylesheetManager.styleMirror\n            );\n            if (id && id !== -1 || styleId && styleId !== -1) {\n              styleSheetRuleCb({\n                id,\n                styleId,\n                removes: [\n                  { index: [...getNestedCSSRulePositions(thisArg), index] }\n                ]\n              });\n            }\n            return target.apply(thisArg, argumentsList);\n          }\n        )\n      }\n    );\n  });\n  return callbackWrapper(() => {\n    win.CSSStyleSheet.prototype.insertRule = insertRule;\n    win.CSSStyleSheet.prototype.deleteRule = deleteRule;\n    replace && (win.CSSStyleSheet.prototype.replace = replace);\n    replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\n    Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n      type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\n      type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\n    });\n  });\n}\nfunction initAdoptedStyleSheetObserver({\n  mirror: mirror2,\n  stylesheetManager\n}, host) {\n  let hostId = null;\n  if (host.nodeName === \"#document\") hostId = mirror2.getId(host);\n  else hostId = mirror2.getId(host.host);\n  const patchTarget = host.nodeName === \"#document\" ? host.defaultView?.Document : host.ownerDocument?.defaultView?.ShadowRoot;\n  const originalPropertyDescriptor = patchTarget?.prototype ? Object.getOwnPropertyDescriptor(\n    patchTarget?.prototype,\n    \"adoptedStyleSheets\"\n  ) : void 0;\n  if (hostId === null || hostId === -1 || !patchTarget || !originalPropertyDescriptor)\n    return () => {\n    };\n  Object.defineProperty(host, \"adoptedStyleSheets\", {\n    configurable: originalPropertyDescriptor.configurable,\n    enumerable: originalPropertyDescriptor.enumerable,\n    get() {\n      return originalPropertyDescriptor.get?.call(this);\n    },\n    set(sheets) {\n      const result = originalPropertyDescriptor.set?.call(this, sheets);\n      if (hostId !== null && hostId !== -1) {\n        try {\n          stylesheetManager.adoptStyleSheets(sheets, hostId);\n        } catch (e2) {\n        }\n      }\n      return result;\n    }\n  });\n  return callbackWrapper(() => {\n    Object.defineProperty(host, \"adoptedStyleSheets\", {\n      configurable: originalPropertyDescriptor.configurable,\n      enumerable: originalPropertyDescriptor.enumerable,\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      get: originalPropertyDescriptor.get,\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      set: originalPropertyDescriptor.set\n    });\n  });\n}\nfunction initStyleDeclarationObserver({\n  styleDeclarationCb,\n  mirror: mirror2,\n  ignoreCSSAttributes,\n  stylesheetManager\n}, { win }) {\n  const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\n  win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\n    apply: callbackWrapper(\n      (target, thisArg, argumentsList) => {\n        const [property, value, priority] = argumentsList;\n        if (ignoreCSSAttributes.has(property)) {\n          return setProperty.apply(thisArg, [property, value, priority]);\n        }\n        const { id, styleId } = getIdAndStyleId(\n          thisArg.parentRule?.parentStyleSheet,\n          mirror2,\n          stylesheetManager.styleMirror\n        );\n        if (id && id !== -1 || styleId && styleId !== -1) {\n          styleDeclarationCb({\n            id,\n            styleId,\n            set: {\n              property,\n              value,\n              priority\n            },\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            index: getNestedCSSRulePositions(thisArg.parentRule)\n          });\n        }\n        return target.apply(thisArg, argumentsList);\n      }\n    )\n  });\n  const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\n  win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\n    apply: callbackWrapper(\n      (target, thisArg, argumentsList) => {\n        const [property] = argumentsList;\n        if (ignoreCSSAttributes.has(property)) {\n          return removeProperty.apply(thisArg, [property]);\n        }\n        const { id, styleId } = getIdAndStyleId(\n          thisArg.parentRule?.parentStyleSheet,\n          mirror2,\n          stylesheetManager.styleMirror\n        );\n        if (id && id !== -1 || styleId && styleId !== -1) {\n          styleDeclarationCb({\n            id,\n            styleId,\n            remove: {\n              property\n            },\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            index: getNestedCSSRulePositions(thisArg.parentRule)\n          });\n        }\n        return target.apply(thisArg, argumentsList);\n      }\n    )\n  });\n  return callbackWrapper(() => {\n    win.CSSStyleDeclaration.prototype.setProperty = setProperty;\n    win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\n  });\n}\nfunction initMediaInteractionObserver({\n  mediaInteractionCb,\n  blockClass,\n  blockSelector,\n  unblockSelector,\n  mirror: mirror2,\n  sampling,\n  doc\n}) {\n  const handler = callbackWrapper(\n    (type) => throttle(\n      callbackWrapper((event) => {\n        const target = getEventTarget(event);\n        if (!target || isBlocked(\n          target,\n          blockClass,\n          blockSelector,\n          unblockSelector,\n          true\n        )) {\n          return;\n        }\n        const { currentTime, volume, muted, playbackRate } = target;\n        mediaInteractionCb({\n          type,\n          id: mirror2.getId(target),\n          currentTime,\n          volume,\n          muted,\n          playbackRate\n        });\n      }),\n      sampling.media || 500\n    )\n  );\n  const handlers = [\n    on(\"play\", handler(MediaInteractions.Play), doc),\n    on(\"pause\", handler(MediaInteractions.Pause), doc),\n    on(\"seeked\", handler(MediaInteractions.Seeked), doc),\n    on(\"volumechange\", handler(MediaInteractions.VolumeChange), doc),\n    on(\"ratechange\", handler(MediaInteractions.RateChange), doc)\n  ];\n  return callbackWrapper(() => {\n    handlers.forEach((h) => h());\n  });\n}\nfunction initFontObserver({ fontCb, doc }) {\n  const win = doc.defaultView;\n  if (!win) {\n    return () => {\n    };\n  }\n  const handlers = [];\n  const fontMap = /* @__PURE__ */ new WeakMap();\n  const originalFontFace = win.FontFace;\n  win.FontFace = function FontFace2(family, source, descriptors) {\n    const fontFace = new originalFontFace(family, source, descriptors);\n    fontMap.set(fontFace, {\n      family,\n      buffer: typeof source !== \"string\",\n      descriptors,\n      fontSource: typeof source === \"string\" ? source : JSON.stringify(Array.from(new Uint8Array(source)))\n    });\n    return fontFace;\n  };\n  const restoreHandler = patch(\n    doc.fonts,\n    \"add\",\n    function(original) {\n      return function(fontFace) {\n        setTimeout$1(\n          callbackWrapper(() => {\n            const p = fontMap.get(fontFace);\n            if (p) {\n              fontCb(p);\n              fontMap.delete(fontFace);\n            }\n          }),\n          0\n        );\n        return original.apply(this, [fontFace]);\n      };\n    }\n  );\n  handlers.push(() => {\n    win.FontFace = originalFontFace;\n  });\n  handlers.push(restoreHandler);\n  return callbackWrapper(() => {\n    handlers.forEach((h) => h());\n  });\n}\nfunction initSelectionObserver(param) {\n  const {\n    doc,\n    mirror: mirror2,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    selectionCb\n  } = param;\n  let collapsed = true;\n  const updateSelection = callbackWrapper(() => {\n    const selection = doc.getSelection();\n    if (!selection || collapsed && selection?.isCollapsed) return;\n    collapsed = selection.isCollapsed || false;\n    const ranges = [];\n    const count = selection.rangeCount || 0;\n    for (let i2 = 0; i2 < count; i2++) {\n      const range = selection.getRangeAt(i2);\n      const { startContainer, startOffset, endContainer, endOffset } = range;\n      const blocked = isBlocked(\n        startContainer,\n        blockClass,\n        blockSelector,\n        unblockSelector,\n        true\n      ) || isBlocked(\n        endContainer,\n        blockClass,\n        blockSelector,\n        unblockSelector,\n        true\n      );\n      if (blocked) continue;\n      ranges.push({\n        start: mirror2.getId(startContainer),\n        startOffset,\n        end: mirror2.getId(endContainer),\n        endOffset\n      });\n    }\n    selectionCb({ ranges });\n  });\n  updateSelection();\n  return on(\"selectionchange\", updateSelection);\n}\nfunction initCustomElementObserver({\n  doc,\n  customElementCb\n}) {\n  const win = doc.defaultView;\n  if (!win || !win.customElements) return () => {\n  };\n  const restoreHandler = patch(\n    win.customElements,\n    \"define\",\n    function(original) {\n      return function(name, constructor, options) {\n        try {\n          customElementCb({\n            define: {\n              name\n            }\n          });\n        } catch (e2) {\n        }\n        return original.apply(this, [name, constructor, options]);\n      };\n    }\n  );\n  return restoreHandler;\n}\nfunction initObservers(o2, _hooks = {}) {\n  const currentWindow = o2.doc.defaultView;\n  if (!currentWindow) {\n    return () => {\n    };\n  }\n  let mutationObserver;\n  if (o2.recordDOM) {\n    mutationObserver = initMutationObserver(o2, o2.doc);\n  }\n  const mousemoveHandler = initMoveObserver(o2);\n  const mouseInteractionHandler = initMouseInteractionObserver(o2);\n  const scrollHandler = initScrollObserver(o2);\n  const viewportResizeHandler = initViewportResizeObserver(o2, {\n    win: currentWindow\n  });\n  const inputHandler = initInputObserver(o2);\n  const mediaInteractionHandler = initMediaInteractionObserver(o2);\n  let styleSheetObserver = () => {\n  };\n  let adoptedStyleSheetObserver = () => {\n  };\n  let styleDeclarationObserver = () => {\n  };\n  let fontObserver = () => {\n  };\n  if (o2.recordDOM) {\n    styleSheetObserver = initStyleSheetObserver(o2, { win: currentWindow });\n    adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o2, o2.doc);\n    styleDeclarationObserver = initStyleDeclarationObserver(o2, {\n      win: currentWindow\n    });\n    if (o2.collectFonts) {\n      fontObserver = initFontObserver(o2);\n    }\n  }\n  const selectionObserver = initSelectionObserver(o2);\n  const customElementObserver = initCustomElementObserver(o2);\n  const pluginHandlers = [];\n  for (const plugin of o2.plugins) {\n    pluginHandlers.push(\n      plugin.observer(plugin.callback, currentWindow, plugin.options)\n    );\n  }\n  return callbackWrapper(() => {\n    mutationBuffers.forEach((b) => b.reset());\n    mutationObserver?.disconnect();\n    mousemoveHandler();\n    mouseInteractionHandler();\n    scrollHandler();\n    viewportResizeHandler();\n    inputHandler();\n    mediaInteractionHandler();\n    styleSheetObserver();\n    adoptedStyleSheetObserver();\n    styleDeclarationObserver();\n    fontObserver();\n    selectionObserver();\n    customElementObserver();\n    pluginHandlers.forEach((h) => h());\n  });\n}\nfunction hasNestedCSSRule(prop) {\n  return typeof window[prop] !== \"undefined\";\n}\nfunction canMonkeyPatchNestedCSSRule(prop) {\n  return Boolean(\n    typeof window[prop] !== \"undefined\" && // Note: Generally, this check _shouldn't_ be necessary\n    // However, in some scenarios (e.g. jsdom) this can sometimes fail, so we check for it here\n    window[prop].prototype && \"insertRule\" in window[prop].prototype && \"deleteRule\" in window[prop].prototype\n  );\n}\nclass CrossOriginIframeMirror {\n  constructor(generateIdFn) {\n    this.generateIdFn = generateIdFn;\n    this.iframeIdToRemoteIdMap = /* @__PURE__ */ new WeakMap();\n    this.iframeRemoteIdToIdMap = /* @__PURE__ */ new WeakMap();\n  }\n  getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\n    const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\n    const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\n    let id = idToRemoteIdMap.get(remoteId);\n    if (!id) {\n      id = this.generateIdFn();\n      idToRemoteIdMap.set(remoteId, id);\n      remoteIdToIdMap.set(id, remoteId);\n    }\n    return id;\n  }\n  getIds(iframe, remoteId) {\n    const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\n    const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n    return remoteId.map(\n      (id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap)\n    );\n  }\n  getRemoteId(iframe, id, map) {\n    const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\n    if (typeof id !== \"number\") return id;\n    const remoteId = remoteIdToIdMap.get(id);\n    if (!remoteId) return -1;\n    return remoteId;\n  }\n  getRemoteIds(iframe, ids) {\n    const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n    return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\n  }\n  reset(iframe) {\n    if (!iframe) {\n      this.iframeIdToRemoteIdMap = /* @__PURE__ */ new WeakMap();\n      this.iframeRemoteIdToIdMap = /* @__PURE__ */ new WeakMap();\n      return;\n    }\n    this.iframeIdToRemoteIdMap.delete(iframe);\n    this.iframeRemoteIdToIdMap.delete(iframe);\n  }\n  getIdToRemoteIdMap(iframe) {\n    let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\n    if (!idToRemoteIdMap) {\n      idToRemoteIdMap = /* @__PURE__ */ new Map();\n      this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\n    }\n    return idToRemoteIdMap;\n  }\n  getRemoteIdToIdMap(iframe) {\n    let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\n    if (!remoteIdToIdMap) {\n      remoteIdToIdMap = /* @__PURE__ */ new Map();\n      this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\n    }\n    return remoteIdToIdMap;\n  }\n}\nclass IframeManagerNoop {\n  constructor() {\n    this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\n    this.crossOriginIframeRootIdMap = /* @__PURE__ */ new WeakMap();\n  }\n  addIframe() {\n  }\n  addLoadListener() {\n  }\n  attachIframe() {\n  }\n}\nclass IframeManager {\n  constructor(options) {\n    this.iframes = /* @__PURE__ */ new WeakMap();\n    this.crossOriginIframeMap = /* @__PURE__ */ new WeakMap();\n    this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\n    this.crossOriginIframeRootIdMap = /* @__PURE__ */ new WeakMap();\n    this.mutationCb = options.mutationCb;\n    this.wrappedEmit = options.wrappedEmit;\n    this.stylesheetManager = options.stylesheetManager;\n    this.recordCrossOriginIframes = options.recordCrossOriginIframes;\n    this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(\n      this.stylesheetManager.styleMirror.generateId.bind(\n        this.stylesheetManager.styleMirror\n      )\n    );\n    this.mirror = options.mirror;\n    if (this.recordCrossOriginIframes) {\n      window.addEventListener(\"message\", this.handleMessage.bind(this));\n    }\n  }\n  addIframe(iframeEl) {\n    this.iframes.set(iframeEl, true);\n    if (iframeEl.contentWindow)\n      this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\n  }\n  addLoadListener(cb) {\n    this.loadListener = cb;\n  }\n  attachIframe(iframeEl, childSn) {\n    this.mutationCb({\n      adds: [\n        {\n          parentId: this.mirror.getId(iframeEl),\n          nextId: null,\n          node: childSn\n        }\n      ],\n      removes: [],\n      texts: [],\n      attributes: [],\n      isAttachIframe: true\n    });\n    if (this.recordCrossOriginIframes)\n      iframeEl.contentWindow?.addEventListener(\n        \"message\",\n        this.handleMessage.bind(this)\n      );\n    this.loadListener?.(iframeEl);\n    const iframeDoc = getIFrameContentDocument(iframeEl);\n    if (iframeDoc && iframeDoc.adoptedStyleSheets && iframeDoc.adoptedStyleSheets.length > 0)\n      this.stylesheetManager.adoptStyleSheets(\n        iframeDoc.adoptedStyleSheets,\n        this.mirror.getId(iframeDoc)\n      );\n  }\n  handleMessage(message) {\n    const crossOriginMessageEvent = message;\n    if (crossOriginMessageEvent.data.type !== \"rrweb\" || // To filter out the rrweb messages which are forwarded by some sites.\n    crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\n      return;\n    const iframeSourceWindow = message.source;\n    if (!iframeSourceWindow) return;\n    const iframeEl = this.crossOriginIframeMap.get(message.source);\n    if (!iframeEl) return;\n    const transformedEvent = this.transformCrossOriginEvent(\n      iframeEl,\n      crossOriginMessageEvent.data.event\n    );\n    if (transformedEvent)\n      this.wrappedEmit(\n        transformedEvent,\n        crossOriginMessageEvent.data.isCheckout\n      );\n  }\n  transformCrossOriginEvent(iframeEl, e2) {\n    switch (e2.type) {\n      case EventType.FullSnapshot: {\n        this.crossOriginIframeMirror.reset(iframeEl);\n        this.crossOriginIframeStyleMirror.reset(iframeEl);\n        this.replaceIdOnNode(e2.data.node, iframeEl);\n        const rootId = e2.data.node.id;\n        this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\n        this.patchRootIdOnNode(e2.data.node, rootId);\n        return {\n          timestamp: e2.timestamp,\n          type: EventType.IncrementalSnapshot,\n          data: {\n            source: IncrementalSource.Mutation,\n            adds: [\n              {\n                parentId: this.mirror.getId(iframeEl),\n                nextId: null,\n                node: e2.data.node\n              }\n            ],\n            removes: [],\n            texts: [],\n            attributes: [],\n            isAttachIframe: true\n          }\n        };\n      }\n      case EventType.Meta:\n      case EventType.Load:\n      case EventType.DomContentLoaded: {\n        return false;\n      }\n      case EventType.Plugin: {\n        return e2;\n      }\n      case EventType.Custom: {\n        this.replaceIds(\n          e2.data.payload,\n          iframeEl,\n          [\"id\", \"parentId\", \"previousId\", \"nextId\"]\n        );\n        return e2;\n      }\n      case EventType.IncrementalSnapshot: {\n        switch (e2.data.source) {\n          case IncrementalSource.Mutation: {\n            e2.data.adds.forEach((n2) => {\n              this.replaceIds(n2, iframeEl, [\n                \"parentId\",\n                \"nextId\",\n                \"previousId\"\n              ]);\n              this.replaceIdOnNode(n2.node, iframeEl);\n              const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\n              rootId && this.patchRootIdOnNode(n2.node, rootId);\n            });\n            e2.data.removes.forEach((n2) => {\n              this.replaceIds(n2, iframeEl, [\"parentId\", \"id\"]);\n            });\n            e2.data.attributes.forEach((n2) => {\n              this.replaceIds(n2, iframeEl, [\"id\"]);\n            });\n            e2.data.texts.forEach((n2) => {\n              this.replaceIds(n2, iframeEl, [\"id\"]);\n            });\n            return e2;\n          }\n          case IncrementalSource.Drag:\n          case IncrementalSource.TouchMove:\n          case IncrementalSource.MouseMove: {\n            e2.data.positions.forEach((p) => {\n              this.replaceIds(p, iframeEl, [\"id\"]);\n            });\n            return e2;\n          }\n          case IncrementalSource.ViewportResize: {\n            return false;\n          }\n          case IncrementalSource.MediaInteraction:\n          case IncrementalSource.MouseInteraction:\n          case IncrementalSource.Scroll:\n          case IncrementalSource.CanvasMutation:\n          case IncrementalSource.Input: {\n            this.replaceIds(e2.data, iframeEl, [\"id\"]);\n            return e2;\n          }\n          case IncrementalSource.StyleSheetRule:\n          case IncrementalSource.StyleDeclaration: {\n            this.replaceIds(e2.data, iframeEl, [\"id\"]);\n            this.replaceStyleIds(e2.data, iframeEl, [\"styleId\"]);\n            return e2;\n          }\n          case IncrementalSource.Font: {\n            return e2;\n          }\n          case IncrementalSource.Selection: {\n            e2.data.ranges.forEach((range) => {\n              this.replaceIds(range, iframeEl, [\"start\", \"end\"]);\n            });\n            return e2;\n          }\n          case IncrementalSource.AdoptedStyleSheet: {\n            this.replaceIds(e2.data, iframeEl, [\"id\"]);\n            this.replaceStyleIds(e2.data, iframeEl, [\"styleIds\"]);\n            e2.data.styles?.forEach((style) => {\n              this.replaceStyleIds(style, iframeEl, [\"styleId\"]);\n            });\n            return e2;\n          }\n        }\n      }\n    }\n    return false;\n  }\n  replace(iframeMirror, obj, iframeEl, keys) {\n    for (const key of keys) {\n      if (!Array.isArray(obj[key]) && typeof obj[key] !== \"number\") continue;\n      if (Array.isArray(obj[key])) {\n        obj[key] = iframeMirror.getIds(\n          iframeEl,\n          obj[key]\n        );\n      } else {\n        obj[key] = iframeMirror.getId(iframeEl, obj[key]);\n      }\n    }\n    return obj;\n  }\n  replaceIds(obj, iframeEl, keys) {\n    return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\n  }\n  replaceStyleIds(obj, iframeEl, keys) {\n    return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\n  }\n  replaceIdOnNode(node, iframeEl) {\n    this.replaceIds(node, iframeEl, [\"id\", \"rootId\"]);\n    if (\"childNodes\" in node) {\n      node.childNodes.forEach((child) => {\n        this.replaceIdOnNode(child, iframeEl);\n      });\n    }\n  }\n  patchRootIdOnNode(node, rootId) {\n    if (node.type !== NodeType$2.Document && !node.rootId) node.rootId = rootId;\n    if (\"childNodes\" in node) {\n      node.childNodes.forEach((child) => {\n        this.patchRootIdOnNode(child, rootId);\n      });\n    }\n  }\n}\nclass ShadowDomManagerNoop {\n  init() {\n  }\n  addShadowRoot() {\n  }\n  observeAttachShadow() {\n  }\n  reset() {\n  }\n}\nclass ShadowDomManager {\n  constructor(options) {\n    this.shadowDoms = /* @__PURE__ */ new WeakSet();\n    this.restoreHandlers = [];\n    this.mutationCb = options.mutationCb;\n    this.scrollCb = options.scrollCb;\n    this.bypassOptions = options.bypassOptions;\n    this.mirror = options.mirror;\n    this.init();\n  }\n  init() {\n    this.reset();\n    this.patchAttachShadow(Element, document);\n  }\n  addShadowRoot(shadowRoot, doc) {\n    if (!isNativeShadowDom(shadowRoot)) return;\n    if (this.shadowDoms.has(shadowRoot)) return;\n    this.shadowDoms.add(shadowRoot);\n    this.bypassOptions.canvasManager.addShadowRoot(shadowRoot);\n    const observer = initMutationObserver(\n      {\n        ...this.bypassOptions,\n        doc,\n        mutationCb: this.mutationCb,\n        mirror: this.mirror,\n        shadowDomManager: this\n      },\n      shadowRoot\n    );\n    this.restoreHandlers.push(() => observer.disconnect());\n    this.restoreHandlers.push(\n      initScrollObserver({\n        ...this.bypassOptions,\n        scrollCb: this.scrollCb,\n        // https://gist.github.com/praveenpuglia/0832da687ed5a5d7a0907046c9ef1813\n        // scroll is not allowed to pass the boundary, so we need to listen the shadow document\n        doc: shadowRoot,\n        mirror: this.mirror\n      })\n    );\n    setTimeout$1(() => {\n      if (shadowRoot.adoptedStyleSheets && shadowRoot.adoptedStyleSheets.length > 0)\n        this.bypassOptions.stylesheetManager.adoptStyleSheets(\n          shadowRoot.adoptedStyleSheets,\n          this.mirror.getId(shadowRoot.host)\n        );\n      this.restoreHandlers.push(\n        initAdoptedStyleSheetObserver(\n          {\n            mirror: this.mirror,\n            stylesheetManager: this.bypassOptions.stylesheetManager\n          },\n          shadowRoot\n        )\n      );\n    }, 0);\n  }\n  /**\n   * Monkey patch 'attachShadow' of an IFrameElement to observe newly added shadow doms.\n   */\n  observeAttachShadow(iframeElement) {\n    const iframeDoc = getIFrameContentDocument(iframeElement);\n    const iframeWindow = getIFrameContentWindow(iframeElement);\n    if (!iframeDoc || !iframeWindow) return;\n    this.patchAttachShadow(\n      iframeWindow.Element,\n      iframeDoc\n    );\n  }\n  /**\n   * Patch 'attachShadow' to observe newly added shadow doms.\n   */\n  patchAttachShadow(element, doc) {\n    const manager = this;\n    this.restoreHandlers.push(\n      patch(\n        element.prototype,\n        \"attachShadow\",\n        function(original) {\n          return function(option) {\n            const shadowRoot = original.call(this, option);\n            if (this.shadowRoot && inDom(this))\n              manager.addShadowRoot(this.shadowRoot, doc);\n            return shadowRoot;\n          };\n        }\n      )\n    );\n  }\n  reset() {\n    this.restoreHandlers.forEach((handler) => {\n      try {\n        handler();\n      } catch (e2) {\n      }\n    });\n    this.restoreHandlers = [];\n    this.shadowDoms = /* @__PURE__ */ new WeakSet();\n    this.bypassOptions.canvasManager.resetShadowRoots();\n  }\n}\nvar chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar lookup = typeof Uint8Array === \"undefined\" ? [] : new Uint8Array(256);\nfor (var i$1 = 0; i$1 < chars.length; i$1++) {\n  lookup[chars.charCodeAt(i$1)] = i$1;\n}\nvar encode = function(arraybuffer) {\n  var bytes = new Uint8Array(arraybuffer), i2, len = bytes.length, base64 = \"\";\n  for (i2 = 0; i2 < len; i2 += 3) {\n    base64 += chars[bytes[i2] >> 2];\n    base64 += chars[(bytes[i2] & 3) << 4 | bytes[i2 + 1] >> 4];\n    base64 += chars[(bytes[i2 + 1] & 15) << 2 | bytes[i2 + 2] >> 6];\n    base64 += chars[bytes[i2 + 2] & 63];\n  }\n  if (len % 3 === 2) {\n    base64 = base64.substring(0, base64.length - 1) + \"=\";\n  } else if (len % 3 === 1) {\n    base64 = base64.substring(0, base64.length - 2) + \"==\";\n  }\n  return base64;\n};\nvar decode = function(base64) {\n  var bufferLength = base64.length * 0.75, len = base64.length, i2, p = 0, encoded1, encoded2, encoded3, encoded4;\n  if (base64[base64.length - 1] === \"=\") {\n    bufferLength--;\n    if (base64[base64.length - 2] === \"=\") {\n      bufferLength--;\n    }\n  }\n  var arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n  for (i2 = 0; i2 < len; i2 += 4) {\n    encoded1 = lookup[base64.charCodeAt(i2)];\n    encoded2 = lookup[base64.charCodeAt(i2 + 1)];\n    encoded3 = lookup[base64.charCodeAt(i2 + 2)];\n    encoded4 = lookup[base64.charCodeAt(i2 + 3)];\n    bytes[p++] = encoded1 << 2 | encoded2 >> 4;\n    bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2;\n    bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;\n  }\n  return arraybuffer;\n};\nconst canvasVarMap = /* @__PURE__ */ new Map();\nfunction variableListFor$1(ctx, ctor) {\n  let contextMap = canvasVarMap.get(ctx);\n  if (!contextMap) {\n    contextMap = /* @__PURE__ */ new Map();\n    canvasVarMap.set(ctx, contextMap);\n  }\n  if (!contextMap.has(ctor)) {\n    contextMap.set(ctor, []);\n  }\n  return contextMap.get(ctor);\n}\nconst saveWebGLVar = (value, win, ctx) => {\n  if (!value || !(isInstanceOfWebGLObject(value, win) || typeof value === \"object\"))\n    return;\n  const name = value.constructor.name;\n  const list = variableListFor$1(ctx, name);\n  let index = list.indexOf(value);\n  if (index === -1) {\n    index = list.length;\n    list.push(value);\n  }\n  return index;\n};\nfunction serializeArg(value, win, ctx) {\n  if (value instanceof Array) {\n    return value.map((arg) => serializeArg(arg, win, ctx));\n  } else if (value === null) {\n    return value;\n  } else if (value instanceof Float32Array || value instanceof Float64Array || value instanceof Int32Array || value instanceof Uint32Array || value instanceof Uint8Array || value instanceof Uint16Array || value instanceof Int16Array || value instanceof Int8Array || value instanceof Uint8ClampedArray) {\n    const name = value.constructor.name;\n    return {\n      rr_type: name,\n      args: [Object.values(value)]\n    };\n  } else if (\n    // SharedArrayBuffer disabled on most browsers due to spectre.\n    // More info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/SharedArrayBuffer\n    // value instanceof SharedArrayBuffer ||\n    value instanceof ArrayBuffer\n  ) {\n    const name = value.constructor.name;\n    const base64 = encode(value);\n    return {\n      rr_type: name,\n      base64\n    };\n  } else if (value instanceof DataView) {\n    const name = value.constructor.name;\n    return {\n      rr_type: name,\n      args: [\n        serializeArg(value.buffer, win, ctx),\n        value.byteOffset,\n        value.byteLength\n      ]\n    };\n  } else if (value instanceof HTMLImageElement) {\n    const name = value.constructor.name;\n    const { src } = value;\n    return {\n      rr_type: name,\n      src\n    };\n  } else if (value instanceof HTMLCanvasElement) {\n    const name = \"HTMLImageElement\";\n    const src = value.toDataURL();\n    return {\n      rr_type: name,\n      src\n    };\n  } else if (value instanceof ImageData) {\n    const name = value.constructor.name;\n    return {\n      rr_type: name,\n      args: [serializeArg(value.data, win, ctx), value.width, value.height]\n    };\n  } else if (isInstanceOfWebGLObject(value, win) || typeof value === \"object\") {\n    const name = value.constructor.name;\n    const index = saveWebGLVar(value, win, ctx);\n    return {\n      rr_type: name,\n      index\n    };\n  }\n  return value;\n}\nconst serializeArgs = (args, win, ctx) => {\n  return args.map((arg) => serializeArg(arg, win, ctx));\n};\nconst isInstanceOfWebGLObject = (value, win) => {\n  const webGLConstructorNames = [\n    \"WebGLActiveInfo\",\n    \"WebGLBuffer\",\n    \"WebGLFramebuffer\",\n    \"WebGLProgram\",\n    \"WebGLRenderbuffer\",\n    \"WebGLShader\",\n    \"WebGLShaderPrecisionFormat\",\n    \"WebGLTexture\",\n    \"WebGLUniformLocation\",\n    \"WebGLVertexArrayObject\",\n    // In old Chrome versions, value won't be an instanceof WebGLVertexArrayObject.\n    \"WebGLVertexArrayObjectOES\"\n  ];\n  const supportedWebGLConstructorNames = webGLConstructorNames.filter(\n    (name) => typeof win[name] === \"function\"\n  );\n  return Boolean(\n    supportedWebGLConstructorNames.find(\n      (name) => value instanceof win[name]\n    )\n  );\n};\nfunction initCanvas2DMutationObserver(cb, win, blockClass2, blockSelector, unblockSelector) {\n  const handlers = [];\n  const props2D = Object.getOwnPropertyNames(\n    win.CanvasRenderingContext2D.prototype\n  );\n  for (const prop of props2D) {\n    try {\n      if (typeof win.CanvasRenderingContext2D.prototype[prop] !== \"function\") {\n        continue;\n      }\n      const restoreHandler = patch(\n        win.CanvasRenderingContext2D.prototype,\n        prop,\n        function(original) {\n          return function(...args) {\n            if (!isBlocked(\n              this.canvas,\n              blockClass2,\n              blockSelector,\n              unblockSelector,\n              true\n            )) {\n              setTimeout$1(() => {\n                const recordArgs = serializeArgs(args, win, this);\n                cb(this.canvas, {\n                  type: CanvasContext[\"2D\"],\n                  property: prop,\n                  args: recordArgs\n                });\n              }, 0);\n            }\n            return original.apply(this, args);\n          };\n        }\n      );\n      handlers.push(restoreHandler);\n    } catch {\n      const hookHandler = hookSetter(\n        win.CanvasRenderingContext2D.prototype,\n        prop,\n        {\n          set(v2) {\n            cb(this.canvas, {\n              type: CanvasContext[\"2D\"],\n              property: prop,\n              args: [v2],\n              setter: true\n            });\n          }\n        }\n      );\n      handlers.push(hookHandler);\n    }\n  }\n  return () => {\n    handlers.forEach((h) => h());\n  };\n}\nfunction getNormalizedContextName(contextType) {\n  return contextType === \"experimental-webgl\" ? \"webgl\" : contextType;\n}\nfunction initCanvasContextObserver(win, blockClass, blockSelector, unblockSelector, setPreserveDrawingBufferToTrue) {\n  const handlers = [];\n  try {\n    const restoreHandler = patch(\n      win.HTMLCanvasElement.prototype,\n      \"getContext\",\n      function(original) {\n        return function(contextType, ...args) {\n          if (!isBlocked(this, blockClass, blockSelector, unblockSelector, true)) {\n            const ctxName = getNormalizedContextName(contextType);\n            if (!(\"__context\" in this)) this.__context = ctxName;\n            if (setPreserveDrawingBufferToTrue && [\"webgl\", \"webgl2\"].includes(ctxName)) {\n              if (args[0] && typeof args[0] === \"object\") {\n                const contextAttributes = args[0];\n                if (!contextAttributes.preserveDrawingBuffer) {\n                  contextAttributes.preserveDrawingBuffer = true;\n                }\n              } else {\n                args.splice(0, 1, {\n                  preserveDrawingBuffer: true\n                });\n              }\n            }\n          }\n          return original.apply(this, [contextType, ...args]);\n        };\n      }\n    );\n    handlers.push(restoreHandler);\n  } catch {\n    console.error(\"failed to patch HTMLCanvasElement.prototype.getContext\");\n  }\n  return () => {\n    handlers.forEach((h) => h());\n  };\n}\nfunction patchGLPrototype(prototype, type, cb, blockClass2, blockSelector, unblockSelector, _mirror2, win) {\n  const handlers = [];\n  const props = Object.getOwnPropertyNames(prototype);\n  for (const prop of props) {\n    if (\n      //prop.startsWith('get') ||  // e.g. getProgramParameter, but too risky\n      [\n        \"isContextLost\",\n        \"canvas\",\n        \"drawingBufferWidth\",\n        \"drawingBufferHeight\"\n      ].includes(prop)\n    ) {\n      continue;\n    }\n    try {\n      if (typeof prototype[prop] !== \"function\") {\n        continue;\n      }\n      const restoreHandler = patch(\n        prototype,\n        prop,\n        function(original) {\n          return function(...args) {\n            const result = original.apply(this, args);\n            saveWebGLVar(result, win, this);\n            if (\"tagName\" in this.canvas && !isBlocked(\n              this.canvas,\n              blockClass2,\n              blockSelector,\n              unblockSelector,\n              true\n            )) {\n              const recordArgs = serializeArgs(args, win, this);\n              const mutation = {\n                type,\n                property: prop,\n                args: recordArgs\n              };\n              cb(this.canvas, mutation);\n            }\n            return result;\n          };\n        }\n      );\n      handlers.push(restoreHandler);\n    } catch {\n      const hookHandler = hookSetter(prototype, prop, {\n        set(v2) {\n          cb(this.canvas, {\n            type,\n            property: prop,\n            args: [v2],\n            setter: true\n          });\n        }\n      });\n      handlers.push(hookHandler);\n    }\n  }\n  return handlers;\n}\nfunction initCanvasWebGLMutationObserver(cb, win, blockClass2, blockSelector, unblockSelector, mirror2) {\n  const handlers = [];\n  handlers.push(\n    ...patchGLPrototype(\n      win.WebGLRenderingContext.prototype,\n      CanvasContext.WebGL,\n      cb,\n      blockClass2,\n      blockSelector,\n      unblockSelector,\n      mirror2,\n      win\n    )\n  );\n  if (typeof win.WebGL2RenderingContext !== \"undefined\") {\n    handlers.push(\n      ...patchGLPrototype(\n        win.WebGL2RenderingContext.prototype,\n        CanvasContext.WebGL2,\n        cb,\n        blockClass2,\n        blockSelector,\n        unblockSelector,\n        mirror2,\n        win\n      )\n    );\n  }\n  return () => {\n    handlers.forEach((h) => h());\n  };\n}\nconst r$1 = `for(var e=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",t=\"undefined\"==typeof Uint8Array?[]:new Uint8Array(256),a=0;a<64;a++)t[e.charCodeAt(a)]=a;var n=function(t){var a,n=new Uint8Array(t),r=n.length,s=\"\";for(a=0;a<r;a+=3)s+=e[n[a]>>2],s+=e[(3&n[a])<<4|n[a+1]>>4],s+=e[(15&n[a+1])<<2|n[a+2]>>6],s+=e[63&n[a+2]];return r%3==2?s=s.substring(0,s.length-1)+\"=\":r%3==1&&(s=s.substring(0,s.length-2)+\"==\"),s};const r=new Map,s=new Map;const i=self;i.onmessage=async function(e){if(!(\"OffscreenCanvas\"in globalThis))return i.postMessage({id:e.data.id});{const{id:t,bitmap:a,width:o,height:f,maxCanvasSize:c,dataURLOptions:g}=e.data,u=async function(e,t,a){const r=e+\"-\"+t;if(\"OffscreenCanvas\"in globalThis){if(s.has(r))return s.get(r);const i=new OffscreenCanvas(e,t);i.getContext(\"2d\");const o=await i.convertToBlob(a),f=await o.arrayBuffer(),c=n(f);return s.set(r,c),c}return\"\"}(o,f,g),[h,d]=function(e,t,a){if(!a)return[e,t];const[n,r]=a;if(e<=n&&t<=r)return[e,t];let s=e,i=t;return s>n&&(i=Math.floor(n*t/e),s=n),i>r&&(s=Math.floor(r*e/t),i=r),[s,i]}(o,f,c),l=new OffscreenCanvas(h,d),w=l.getContext(\"bitmaprenderer\"),p=h===o&&d===f?a:await createImageBitmap(a,{resizeWidth:h,resizeHeight:d,resizeQuality:\"low\"});w.transferFromImageBitmap(p),a.close();const y=await l.convertToBlob(g),v=y.type,b=await y.arrayBuffer(),m=n(b);if(p.close(),!r.has(t)&&await u===m)return r.set(t,m),i.postMessage({id:t});if(r.get(t)===m)return i.postMessage({id:t});i.postMessage({id:t,type:v,base64:m,width:o,height:f}),r.set(t,m)}};`;\nfunction t$1() {\n  const t2 = new Blob([r$1]);\n  return URL.createObjectURL(t2);\n}\nclass CanvasManagerNoop {\n  reset() {\n  }\n  freeze() {\n  }\n  unfreeze() {\n  }\n  lock() {\n  }\n  unlock() {\n  }\n  snapshot() {\n  }\n  addWindow() {\n  }\n  addShadowRoot() {\n  }\n  resetShadowRoots() {\n  }\n}\nclass CanvasManager {\n  constructor(options) {\n    this.pendingCanvasMutations = /* @__PURE__ */ new Map();\n    this.rafStamps = { latestId: 0, invokeId: null };\n    this.shadowDoms = /* @__PURE__ */ new Set();\n    this.windowsSet = /* @__PURE__ */ new WeakSet();\n    this.windows = [];\n    this.restoreHandlers = [];\n    this.frozen = false;\n    this.locked = false;\n    this.snapshotInProgressMap = /* @__PURE__ */ new Map();\n    this.worker = null;\n    this.lastSnapshotTime = 0;\n    this.processMutation = (target, mutation) => {\n      const newFrame = this.rafStamps.invokeId && this.rafStamps.latestId !== this.rafStamps.invokeId;\n      if (newFrame || !this.rafStamps.invokeId)\n        this.rafStamps.invokeId = this.rafStamps.latestId;\n      if (!this.pendingCanvasMutations.has(target)) {\n        this.pendingCanvasMutations.set(target, []);\n      }\n      this.pendingCanvasMutations.get(target).push(mutation);\n    };\n    const {\n      sampling = \"all\",\n      win,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      maxCanvasSize,\n      recordCanvas,\n      dataURLOptions,\n      errorHandler: errorHandler2\n    } = options;\n    this.mutationCb = options.mutationCb;\n    this.mirror = options.mirror;\n    this.options = options;\n    if (errorHandler2) {\n      registerErrorHandler(errorHandler2);\n    }\n    if (recordCanvas && typeof sampling === \"number\" || options.enableManualSnapshot) {\n      this.worker = this.initFPSWorker();\n    }\n    this.addWindow(win);\n    if (options.enableManualSnapshot) {\n      return;\n    }\n    callbackWrapper(() => {\n      if (recordCanvas && sampling === \"all\") {\n        this.startRAFTimestamping();\n        this.startPendingCanvasMutationFlusher();\n      }\n      if (recordCanvas && typeof sampling === \"number\") {\n        this.initCanvasFPSObserver(\n          sampling,\n          blockClass,\n          blockSelector,\n          unblockSelector,\n          maxCanvasSize,\n          {\n            dataURLOptions\n          }\n        );\n      }\n    })();\n  }\n  reset() {\n    this.pendingCanvasMutations.clear();\n    this.restoreHandlers.forEach((handler) => {\n      try {\n        handler();\n      } catch (e2) {\n      }\n    });\n    this.restoreHandlers = [];\n    this.windowsSet = /* @__PURE__ */ new WeakSet();\n    this.windows = [];\n    this.shadowDoms = /* @__PURE__ */ new Set();\n    this.worker?.terminate();\n    this.worker = null;\n    this.snapshotInProgressMap = /* @__PURE__ */ new Map();\n  }\n  freeze() {\n    this.frozen = true;\n  }\n  unfreeze() {\n    this.frozen = false;\n  }\n  lock() {\n    this.locked = true;\n  }\n  unlock() {\n    this.locked = false;\n  }\n  addWindow(win) {\n    const {\n      sampling = \"all\",\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      recordCanvas,\n      enableManualSnapshot\n    } = this.options;\n    if (this.windowsSet.has(win)) return;\n    if (enableManualSnapshot) {\n      this.windowsSet.add(win);\n      this.windows.push(new WeakRef(win));\n      return;\n    }\n    callbackWrapper(() => {\n      if (recordCanvas && sampling === \"all\") {\n        this.initCanvasMutationObserver(\n          win,\n          blockClass,\n          blockSelector,\n          unblockSelector\n        );\n      }\n      if (recordCanvas && typeof sampling === \"number\") {\n        const canvasContextReset = initCanvasContextObserver(\n          win,\n          blockClass,\n          blockSelector,\n          unblockSelector,\n          true\n        );\n        this.restoreHandlers.push(() => {\n          canvasContextReset();\n        });\n      }\n    })();\n    this.windowsSet.add(win);\n    this.windows.push(new WeakRef(win));\n  }\n  addShadowRoot(shadowRoot) {\n    this.shadowDoms.add(new WeakRef(shadowRoot));\n  }\n  resetShadowRoots() {\n    this.shadowDoms = /* @__PURE__ */ new Set();\n  }\n  initFPSWorker() {\n    const worker = new Worker(t$1());\n    worker.onmessage = (e2) => {\n      const data = e2.data;\n      const { id } = data;\n      this.snapshotInProgressMap.set(id, false);\n      if (!(\"base64\" in data)) return;\n      const { base64, type, width, height } = data;\n      this.mutationCb({\n        id,\n        type: CanvasContext[\"2D\"],\n        commands: [\n          {\n            property: \"clearRect\",\n            // wipe canvas\n            args: [0, 0, width, height]\n          },\n          {\n            property: \"drawImage\",\n            // draws (semi-transparent) image\n            args: [\n              {\n                rr_type: \"ImageBitmap\",\n                args: [\n                  {\n                    rr_type: \"Blob\",\n                    data: [{ rr_type: \"ArrayBuffer\", base64 }],\n                    type\n                  }\n                ]\n              },\n              0,\n              0,\n              // The below args are needed if we enforce a max size, we want to\n              // retain the original size when drawing the image (which should be smaller)\n              width,\n              height\n            ]\n          }\n        ]\n      });\n    };\n    return worker;\n  }\n  initCanvasFPSObserver(fps, blockClass, blockSelector, unblockSelector, maxCanvasSize, options) {\n    const rafId = this.takeSnapshot(\n      false,\n      fps,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      maxCanvasSize,\n      options.dataURLOptions\n    );\n    this.restoreHandlers.push(() => {\n      cancelAnimationFrame(rafId);\n    });\n  }\n  initCanvasMutationObserver(win, blockClass, blockSelector, unblockSelector) {\n    const canvasContextReset = initCanvasContextObserver(\n      win,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      false\n    );\n    const canvas2DReset = initCanvas2DMutationObserver(\n      this.processMutation.bind(this),\n      win,\n      blockClass,\n      blockSelector,\n      unblockSelector\n    );\n    const canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(\n      this.processMutation.bind(this),\n      win,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      this.mirror\n    );\n    this.restoreHandlers.push(() => {\n      canvasContextReset();\n      canvas2DReset();\n      canvasWebGL1and2Reset();\n    });\n  }\n  snapshot(canvasElement) {\n    const { options } = this;\n    const rafId = this.takeSnapshot(\n      true,\n      options.sampling === \"all\" ? 2 : options.sampling || 2,\n      options.blockClass,\n      options.blockSelector,\n      options.unblockSelector,\n      options.maxCanvasSize,\n      options.dataURLOptions,\n      canvasElement\n    );\n    this.restoreHandlers.push(() => {\n      cancelAnimationFrame(rafId);\n    });\n  }\n  takeSnapshot(isManualSnapshot, fps, blockClass, blockSelector, unblockSelector, maxCanvasSize, dataURLOptions, canvasElement) {\n    const timeBetweenSnapshots = 1e3 / fps;\n    let rafId;\n    const getCanvas = (canvasElement2) => {\n      if (canvasElement2) {\n        return [canvasElement2];\n      }\n      const matchedCanvas = [];\n      const searchCanvas = (root) => {\n        root.querySelectorAll(\"canvas\").forEach((canvas) => {\n          if (!isBlocked(canvas, blockClass, blockSelector, unblockSelector, true)) {\n            matchedCanvas.push(canvas);\n          }\n        });\n      };\n      for (const item of this.windows) {\n        const window2 = item.deref();\n        let _document;\n        try {\n          _document = window2 && window2.document;\n        } catch {\n        }\n        if (_document) {\n          searchCanvas(_document);\n        }\n      }\n      for (const item of this.shadowDoms) {\n        const shadowRoot = item.deref();\n        if (shadowRoot) {\n          searchCanvas(shadowRoot);\n        }\n      }\n      return matchedCanvas;\n    };\n    const takeCanvasSnapshots = (timestamp) => {\n      if (!this.windows.length) {\n        return;\n      }\n      if (this.lastSnapshotTime && timestamp - this.lastSnapshotTime < timeBetweenSnapshots) {\n        rafId = onRequestAnimationFrame(takeCanvasSnapshots);\n        return;\n      }\n      this.lastSnapshotTime = timestamp;\n      getCanvas(canvasElement).forEach((canvas) => {\n        if (!this.mirror.hasNode(canvas)) {\n          return;\n        }\n        const id = this.mirror.getId(canvas);\n        if (this.snapshotInProgressMap.get(id)) return;\n        if (!canvas.width || !canvas.height) return;\n        this.snapshotInProgressMap.set(id, true);\n        if (!isManualSnapshot && [\"webgl\", \"webgl2\"].includes(canvas.__context)) {\n          const context = canvas.getContext(canvas.__context);\n          if (context?.getContextAttributes()?.preserveDrawingBuffer === false) {\n            context.clear(context.COLOR_BUFFER_BIT);\n          }\n        }\n        createImageBitmap(canvas).then((bitmap) => {\n          this.worker?.postMessage(\n            {\n              id,\n              bitmap,\n              width: canvas.width,\n              height: canvas.height,\n              dataURLOptions,\n              maxCanvasSize\n            },\n            [bitmap]\n          );\n        }).catch((error) => {\n          callbackWrapper(() => {\n            throw error;\n          })();\n        });\n      });\n      if (!isManualSnapshot) {\n        rafId = onRequestAnimationFrame(takeCanvasSnapshots);\n      }\n    };\n    rafId = onRequestAnimationFrame(takeCanvasSnapshots);\n    return rafId;\n  }\n  startPendingCanvasMutationFlusher() {\n    onRequestAnimationFrame(() => this.flushPendingCanvasMutations());\n  }\n  startRAFTimestamping() {\n    const setLatestRAFTimestamp = (timestamp) => {\n      this.rafStamps.latestId = timestamp;\n      onRequestAnimationFrame(setLatestRAFTimestamp);\n    };\n    onRequestAnimationFrame(setLatestRAFTimestamp);\n  }\n  flushPendingCanvasMutations() {\n    this.pendingCanvasMutations.forEach(\n      (_values, canvas) => {\n        const id = this.mirror.getId(canvas);\n        this.flushPendingCanvasMutationFor(canvas, id);\n      }\n    );\n    onRequestAnimationFrame(() => this.flushPendingCanvasMutations());\n  }\n  flushPendingCanvasMutationFor(canvas, id) {\n    if (this.frozen || this.locked) {\n      return;\n    }\n    const valuesWithType = this.pendingCanvasMutations.get(canvas);\n    if (!valuesWithType || id === -1) return;\n    const values = valuesWithType.map((value) => {\n      const { type: type2, ...rest } = value;\n      return rest;\n    });\n    const { type } = valuesWithType[0];\n    this.mutationCb({ id, type, commands: values });\n    this.pendingCanvasMutations.delete(canvas);\n  }\n}\nclass StylesheetManager {\n  constructor(options) {\n    this.trackedLinkElements = /* @__PURE__ */ new WeakSet();\n    this.styleMirror = new StyleSheetMirror();\n    this.mutationCb = options.mutationCb;\n    this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\n  }\n  attachLinkElement(linkEl, childSn) {\n    if (\"_cssText\" in childSn.attributes)\n      this.mutationCb({\n        adds: [],\n        removes: [],\n        texts: [],\n        attributes: [\n          {\n            id: childSn.id,\n            attributes: childSn.attributes\n          }\n        ]\n      });\n    this.trackLinkElement(linkEl);\n  }\n  trackLinkElement(linkEl) {\n    if (this.trackedLinkElements.has(linkEl)) return;\n    this.trackedLinkElements.add(linkEl);\n    this.trackStylesheetInLinkElement(linkEl);\n  }\n  adoptStyleSheets(sheets, hostId) {\n    if (sheets.length === 0) return;\n    const adoptedStyleSheetData = {\n      id: hostId,\n      styleIds: []\n    };\n    const styles = [];\n    for (const sheet of sheets) {\n      let styleId;\n      if (!this.styleMirror.has(sheet)) {\n        styleId = this.styleMirror.add(sheet);\n        styles.push({\n          styleId,\n          rules: Array.from(sheet.rules || CSSRule, (r2, index) => ({\n            rule: stringifyRule(r2),\n            index\n          }))\n        });\n      } else styleId = this.styleMirror.getId(sheet);\n      adoptedStyleSheetData.styleIds.push(styleId);\n    }\n    if (styles.length > 0) adoptedStyleSheetData.styles = styles;\n    this.adoptedStyleSheetCb(adoptedStyleSheetData);\n  }\n  reset() {\n    this.styleMirror.reset();\n    this.trackedLinkElements = /* @__PURE__ */ new WeakSet();\n  }\n  // TODO: take snapshot on stylesheet reload by applying event listener\n  trackStylesheetInLinkElement(_linkEl) {\n  }\n}\nclass ProcessedNodeManager {\n  constructor() {\n    this.nodeMap = /* @__PURE__ */ new WeakMap();\n    this.active = false;\n  }\n  inOtherBuffer(node, thisBuffer) {\n    const buffers = this.nodeMap.get(node);\n    return buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer);\n  }\n  add(node, buffer) {\n    if (!this.active) {\n      this.active = true;\n      onRequestAnimationFrame(() => {\n        this.nodeMap = /* @__PURE__ */ new WeakMap();\n        this.active = false;\n      });\n    }\n    this.nodeMap.set(node, (this.nodeMap.get(node) || /* @__PURE__ */ new Set()).add(buffer));\n  }\n  destroy() {\n  }\n}\nlet wrappedEmit;\nlet _wrappedEmit;\nlet _takeFullSnapshot;\ntry {\n  if (Array.from([1], (x) => x * 2)[0] !== 2) {\n    const cleanFrame = document.createElement(\"iframe\");\n    document.body.appendChild(cleanFrame);\n    Array.from = cleanFrame.contentWindow?.Array.from || Array.from;\n    document.body.removeChild(cleanFrame);\n  }\n} catch (err) {\n  console.debug(\"Unable to override Array.from\", err);\n}\nconst mirror = createMirror$2();\nfunction record(options = {}) {\n  const {\n    emit,\n    checkoutEveryNms,\n    checkoutEveryNth,\n    blockClass = \"rr-block\",\n    blockSelector = null,\n    unblockSelector = null,\n    ignoreClass = \"rr-ignore\",\n    ignoreSelector = null,\n    maskAllText = false,\n    maskTextClass = \"rr-mask\",\n    unmaskTextClass = null,\n    maskTextSelector = null,\n    unmaskTextSelector = null,\n    inlineStylesheet = true,\n    maskAllInputs,\n    maskInputOptions: _maskInputOptions,\n    slimDOMOptions: _slimDOMOptions,\n    maskAttributeFn,\n    maskInputFn,\n    maskTextFn,\n    maxCanvasSize = null,\n    packFn,\n    sampling = {},\n    dataURLOptions = {},\n    mousemoveWait,\n    recordDOM = true,\n    recordCanvas = false,\n    recordCrossOriginIframes = false,\n    recordAfter = options.recordAfter === \"DOMContentLoaded\" ? options.recordAfter : \"load\",\n    userTriggeredOnInput = false,\n    collectFonts = false,\n    inlineImages = false,\n    plugins,\n    keepIframeSrcFn = () => false,\n    ignoreCSSAttributes = /* @__PURE__ */ new Set([]),\n    errorHandler: errorHandler2,\n    onMutation,\n    getCanvasManager\n  } = options;\n  registerErrorHandler(errorHandler2);\n  const inEmittingFrame = recordCrossOriginIframes ? window.parent === window : true;\n  let passEmitsToParent = false;\n  if (!inEmittingFrame) {\n    try {\n      if (window.parent.document) {\n        passEmitsToParent = false;\n      }\n    } catch (e2) {\n      passEmitsToParent = true;\n    }\n  }\n  if (inEmittingFrame && !emit) {\n    throw new Error(\"emit function is required\");\n  }\n  if (!inEmittingFrame && !passEmitsToParent) {\n    return () => {\n    };\n  }\n  if (mousemoveWait !== void 0 && sampling.mousemove === void 0) {\n    sampling.mousemove = mousemoveWait;\n  }\n  mirror.reset();\n  const maskInputOptions = maskAllInputs === true ? {\n    color: true,\n    date: true,\n    \"datetime-local\": true,\n    email: true,\n    month: true,\n    number: true,\n    range: true,\n    search: true,\n    tel: true,\n    text: true,\n    time: true,\n    url: true,\n    week: true,\n    textarea: true,\n    select: true,\n    radio: true,\n    checkbox: true\n  } : _maskInputOptions !== void 0 ? _maskInputOptions : {};\n  const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === \"all\" ? {\n    script: true,\n    comment: true,\n    headFavicon: true,\n    headWhitespace: true,\n    headMetaSocial: true,\n    headMetaRobots: true,\n    headMetaHttpEquiv: true,\n    headMetaVerification: true,\n    // the following are off for slimDOMOptions === true,\n    // as they destroy some (hidden) info:\n    headMetaAuthorship: _slimDOMOptions === \"all\",\n    headMetaDescKeywords: _slimDOMOptions === \"all\"\n  } : _slimDOMOptions ? _slimDOMOptions : {};\n  polyfill$1();\n  let lastFullSnapshotEvent;\n  let incrementalSnapshotCount = 0;\n  const eventProcessor = (e2) => {\n    for (const plugin of plugins || []) {\n      if (plugin.eventProcessor) {\n        e2 = plugin.eventProcessor(e2);\n      }\n    }\n    if (packFn && // Disable packing events which will be emitted to parent frames.\n    !passEmitsToParent) {\n      e2 = packFn(e2);\n    }\n    return e2;\n  };\n  wrappedEmit = (r2, isCheckout) => {\n    const e2 = r2;\n    e2.timestamp = nowTimestamp();\n    if (mutationBuffers[0]?.isFrozen() && e2.type !== EventType.FullSnapshot && !(e2.type === EventType.IncrementalSnapshot && e2.data.source === IncrementalSource.Mutation)) {\n      mutationBuffers.forEach((buf) => buf.unfreeze());\n    }\n    if (inEmittingFrame) {\n      emit?.(eventProcessor(e2), isCheckout);\n    } else if (passEmitsToParent) {\n      const message = {\n        type: \"rrweb\",\n        event: eventProcessor(e2),\n        origin: window.location.origin,\n        isCheckout\n      };\n      window.parent.postMessage(message, \"*\");\n    }\n    if (e2.type === EventType.FullSnapshot) {\n      lastFullSnapshotEvent = e2;\n      incrementalSnapshotCount = 0;\n    } else if (e2.type === EventType.IncrementalSnapshot) {\n      if (e2.data.source === IncrementalSource.Mutation && e2.data.isAttachIframe) {\n        return;\n      }\n      incrementalSnapshotCount++;\n      const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\n      const exceedTime = checkoutEveryNms && lastFullSnapshotEvent && e2.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\n      if (exceedCount || exceedTime) {\n        takeFullSnapshot2(true);\n      }\n    }\n  };\n  _wrappedEmit = wrappedEmit;\n  const wrappedMutationEmit = (m) => {\n    wrappedEmit({\n      type: EventType.IncrementalSnapshot,\n      data: {\n        source: IncrementalSource.Mutation,\n        ...m\n      }\n    });\n  };\n  const wrappedScrollEmit = (p) => wrappedEmit({\n    type: EventType.IncrementalSnapshot,\n    data: {\n      source: IncrementalSource.Scroll,\n      ...p\n    }\n  });\n  const wrappedCanvasMutationEmit = (p) => wrappedEmit({\n    type: EventType.IncrementalSnapshot,\n    data: {\n      source: IncrementalSource.CanvasMutation,\n      ...p\n    }\n  });\n  const wrappedAdoptedStyleSheetEmit = (a2) => wrappedEmit({\n    type: EventType.IncrementalSnapshot,\n    data: {\n      source: IncrementalSource.AdoptedStyleSheet,\n      ...a2\n    }\n  });\n  const stylesheetManager = new StylesheetManager({\n    mutationCb: wrappedMutationEmit,\n    adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit\n  });\n  const iframeManager = typeof __RRWEB_EXCLUDE_IFRAME__ === \"boolean\" && __RRWEB_EXCLUDE_IFRAME__ ? new IframeManagerNoop() : new IframeManager({\n    mirror,\n    mutationCb: wrappedMutationEmit,\n    stylesheetManager,\n    recordCrossOriginIframes,\n    wrappedEmit\n  });\n  for (const plugin of plugins || []) {\n    if (plugin.getMirror)\n      plugin.getMirror({\n        nodeMirror: mirror,\n        crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\n        crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror\n      });\n  }\n  const processedNodeManager = new ProcessedNodeManager();\n  const canvasManager = _getCanvasManager(\n    getCanvasManager,\n    {\n      mirror,\n      win: window,\n      mutationCb: (p) => wrappedEmit({\n        type: EventType.IncrementalSnapshot,\n        data: {\n          source: IncrementalSource.CanvasMutation,\n          ...p\n        }\n      }),\n      recordCanvas,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      maxCanvasSize,\n      sampling: sampling[\"canvas\"],\n      dataURLOptions,\n      errorHandler: errorHandler2\n    }\n  );\n  const shadowDomManager = typeof __RRWEB_EXCLUDE_SHADOW_DOM__ === \"boolean\" && __RRWEB_EXCLUDE_SHADOW_DOM__ ? new ShadowDomManagerNoop() : new ShadowDomManager({\n    mutationCb: wrappedMutationEmit,\n    scrollCb: wrappedScrollEmit,\n    bypassOptions: {\n      onMutation,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      maskAllText,\n      maskTextClass,\n      unmaskTextClass,\n      maskTextSelector,\n      unmaskTextSelector,\n      inlineStylesheet,\n      maskInputOptions,\n      dataURLOptions,\n      maskAttributeFn,\n      maskTextFn,\n      maskInputFn,\n      recordCanvas,\n      inlineImages,\n      sampling,\n      slimDOMOptions,\n      iframeManager,\n      stylesheetManager,\n      canvasManager,\n      keepIframeSrcFn,\n      processedNodeManager\n    },\n    mirror\n  });\n  const takeFullSnapshot2 = (isCheckout = false) => {\n    if (!recordDOM) {\n      return;\n    }\n    wrappedEmit(\n      {\n        type: EventType.Meta,\n        data: {\n          href: window.location.href,\n          width: getWindowWidth(),\n          height: getWindowHeight()\n        }\n      },\n      isCheckout\n    );\n    stylesheetManager.reset();\n    shadowDomManager.init();\n    mutationBuffers.forEach((buf) => buf.lock());\n    const node = snapshot(document, {\n      mirror,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      maskAllText,\n      maskTextClass,\n      unmaskTextClass,\n      maskTextSelector,\n      unmaskTextSelector,\n      inlineStylesheet,\n      maskAllInputs: maskInputOptions,\n      maskAttributeFn,\n      maskInputFn,\n      maskTextFn,\n      slimDOM: slimDOMOptions,\n      dataURLOptions,\n      recordCanvas,\n      inlineImages,\n      onSerialize: (n2) => {\n        if (isSerializedIframe(n2, mirror)) {\n          iframeManager.addIframe(n2);\n        }\n        if (isSerializedStylesheet(n2, mirror)) {\n          stylesheetManager.trackLinkElement(n2);\n        }\n        if (hasShadowRoot(n2)) {\n          shadowDomManager.addShadowRoot(n2.shadowRoot, document);\n        }\n      },\n      onIframeLoad: (iframe, childSn) => {\n        iframeManager.attachIframe(iframe, childSn);\n        if (iframe.contentWindow) {\n          canvasManager.addWindow(iframe.contentWindow);\n        }\n        shadowDomManager.observeAttachShadow(iframe);\n      },\n      onStylesheetLoad: (linkEl, childSn) => {\n        stylesheetManager.attachLinkElement(linkEl, childSn);\n      },\n      keepIframeSrcFn\n    });\n    if (!node) {\n      return console.warn(\"Failed to snapshot the document\");\n    }\n    wrappedEmit({\n      type: EventType.FullSnapshot,\n      data: {\n        node,\n        initialOffset: getWindowScroll(window)\n      }\n    });\n    mutationBuffers.forEach((buf) => buf.unlock());\n    if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\n      stylesheetManager.adoptStyleSheets(\n        document.adoptedStyleSheets,\n        mirror.getId(document)\n      );\n  };\n  _takeFullSnapshot = takeFullSnapshot2;\n  try {\n    const handlers = [];\n    const observe = (doc) => {\n      return callbackWrapper(initObservers)(\n        {\n          onMutation,\n          mutationCb: wrappedMutationEmit,\n          mousemoveCb: (positions, source) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source,\n              positions\n            }\n          }),\n          mouseInteractionCb: (d) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.MouseInteraction,\n              ...d\n            }\n          }),\n          scrollCb: wrappedScrollEmit,\n          viewportResizeCb: (d) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.ViewportResize,\n              ...d\n            }\n          }),\n          inputCb: (v2) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.Input,\n              ...v2\n            }\n          }),\n          mediaInteractionCb: (p) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.MediaInteraction,\n              ...p\n            }\n          }),\n          styleSheetRuleCb: (r2) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.StyleSheetRule,\n              ...r2\n            }\n          }),\n          styleDeclarationCb: (r2) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.StyleDeclaration,\n              ...r2\n            }\n          }),\n          canvasMutationCb: wrappedCanvasMutationEmit,\n          fontCb: (p) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.Font,\n              ...p\n            }\n          }),\n          selectionCb: (p) => {\n            wrappedEmit({\n              type: EventType.IncrementalSnapshot,\n              data: {\n                source: IncrementalSource.Selection,\n                ...p\n              }\n            });\n          },\n          customElementCb: (c2) => {\n            wrappedEmit({\n              type: EventType.IncrementalSnapshot,\n              data: {\n                source: IncrementalSource.CustomElement,\n                ...c2\n              }\n            });\n          },\n          blockClass,\n          ignoreClass,\n          ignoreSelector,\n          maskAllText,\n          maskTextClass,\n          unmaskTextClass,\n          maskTextSelector,\n          unmaskTextSelector,\n          maskInputOptions,\n          inlineStylesheet,\n          sampling,\n          recordDOM,\n          recordCanvas,\n          inlineImages,\n          userTriggeredOnInput,\n          collectFonts,\n          doc,\n          maskAttributeFn,\n          maskInputFn,\n          maskTextFn,\n          keepIframeSrcFn,\n          blockSelector,\n          unblockSelector,\n          slimDOMOptions,\n          dataURLOptions,\n          mirror,\n          iframeManager,\n          stylesheetManager,\n          shadowDomManager,\n          processedNodeManager,\n          canvasManager,\n          ignoreCSSAttributes,\n          plugins: plugins?.filter((p) => p.observer)?.map((p) => ({\n            observer: p.observer,\n            options: p.options,\n            callback: (payload) => wrappedEmit({\n              type: EventType.Plugin,\n              data: {\n                plugin: p.name,\n                payload\n              }\n            })\n          })) || []\n        },\n        {}\n      );\n    };\n    iframeManager.addLoadListener((iframeEl) => {\n      try {\n        handlers.push(observe(iframeEl.contentDocument));\n      } catch (error) {\n        console.warn(error);\n      }\n    });\n    const init = () => {\n      takeFullSnapshot2();\n      handlers.push(observe(document));\n    };\n    if (document.readyState === \"interactive\" || document.readyState === \"complete\") {\n      init();\n    } else {\n      handlers.push(\n        on(\"DOMContentLoaded\", () => {\n          wrappedEmit({\n            type: EventType.DomContentLoaded,\n            data: {}\n          });\n          if (recordAfter === \"DOMContentLoaded\") init();\n        })\n      );\n      handlers.push(\n        on(\n          \"load\",\n          () => {\n            wrappedEmit({\n              type: EventType.Load,\n              data: {}\n            });\n            if (recordAfter === \"load\") init();\n          },\n          window\n        )\n      );\n    }\n    return () => {\n      handlers.forEach((h) => h());\n      processedNodeManager.destroy();\n      _takeFullSnapshot = void 0;\n      unregisterErrorHandler();\n    };\n  } catch (error) {\n    console.warn(error);\n  }\n}\nfunction addCustomEvent(tag, payload) {\n  if (!_wrappedEmit) {\n    throw new Error(\"please add custom event after start recording\");\n  }\n  wrappedEmit({\n    type: EventType.Custom,\n    data: {\n      tag,\n      payload\n    }\n  });\n}\nfunction freezePage() {\n  mutationBuffers.forEach((buf) => buf.freeze());\n}\nfunction takeFullSnapshot(isCheckout) {\n  if (!_takeFullSnapshot) {\n    throw new Error(\"please take full snapshot after start recording\");\n  }\n  _takeFullSnapshot(isCheckout);\n}\nrecord.mirror = mirror;\nrecord.takeFullSnapshot = takeFullSnapshot;\nfunction _getCanvasManager(getCanvasManagerFn, options) {\n  try {\n    return getCanvasManagerFn ? getCanvasManagerFn(options) : new CanvasManagerNoop();\n  } catch {\n    console.warn(\"Unable to initialize CanvasManager\");\n    return new CanvasManagerNoop();\n  }\n}\nfunction mitt$1(n2) {\n  return { all: n2 = n2 || /* @__PURE__ */ new Map(), on: function(t2, e2) {\n    var i2 = n2.get(t2);\n    i2 ? i2.push(e2) : n2.set(t2, [e2]);\n  }, off: function(t2, e2) {\n    var i2 = n2.get(t2);\n    i2 && (e2 ? i2.splice(i2.indexOf(e2) >>> 0, 1) : n2.set(t2, []));\n  }, emit: function(t2, e2) {\n    var i2 = n2.get(t2);\n    i2 && i2.slice().map(function(n3) {\n      n3(e2);\n    }), (i2 = n2.get(\"*\")) && i2.slice().map(function(n3) {\n      n3(t2, e2);\n    });\n  } };\n}\nconst mittProxy = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  default: mitt$1\n}, Symbol.toStringTag, { value: \"Module\" }));\nfunction polyfill(w = window, d = document) {\n  if (\"scrollBehavior\" in d.documentElement.style && w.__forceSmoothScrollPolyfill__ !== true) {\n    return;\n  }\n  const Element2 = w.HTMLElement || w.Element;\n  const SCROLL_TIME = 468;\n  const original = {\n    scroll: w.scroll || w.scrollTo,\n    scrollBy: w.scrollBy,\n    elementScroll: Element2.prototype.scroll || scrollElement,\n    scrollIntoView: Element2.prototype.scrollIntoView\n  };\n  const now = w.performance && w.performance.now ? w.performance.now.bind(w.performance) : Date.now;\n  function isMicrosoftBrowser(userAgent) {\n    const userAgentPatterns = [\"MSIE \", \"Trident/\", \"Edge/\"];\n    return new RegExp(userAgentPatterns.join(\"|\")).test(userAgent);\n  }\n  const ROUNDING_TOLERANCE = isMicrosoftBrowser(w.navigator.userAgent) ? 1 : 0;\n  function scrollElement(x, y) {\n    this.scrollLeft = x;\n    this.scrollTop = y;\n  }\n  function ease(k) {\n    return 0.5 * (1 - Math.cos(Math.PI * k));\n  }\n  function shouldBailOut(firstArg) {\n    if (firstArg === null || typeof firstArg !== \"object\" || firstArg.behavior === void 0 || firstArg.behavior === \"auto\" || firstArg.behavior === \"instant\") {\n      return true;\n    }\n    if (typeof firstArg === \"object\" && firstArg.behavior === \"smooth\") {\n      return false;\n    }\n    throw new TypeError(\n      \"behavior member of ScrollOptions \" + firstArg.behavior + \" is not a valid value for enumeration ScrollBehavior.\"\n    );\n  }\n  function hasScrollableSpace(el, axis) {\n    if (axis === \"Y\") {\n      return el.clientHeight + ROUNDING_TOLERANCE < el.scrollHeight;\n    }\n    if (axis === \"X\") {\n      return el.clientWidth + ROUNDING_TOLERANCE < el.scrollWidth;\n    }\n  }\n  function canOverflow(el, axis) {\n    const overflowValue = w.getComputedStyle(el, null)[\"overflow\" + axis];\n    return overflowValue === \"auto\" || overflowValue === \"scroll\";\n  }\n  function isScrollable(el) {\n    const isScrollableY = hasScrollableSpace(el, \"Y\") && canOverflow(el, \"Y\");\n    const isScrollableX = hasScrollableSpace(el, \"X\") && canOverflow(el, \"X\");\n    return isScrollableY || isScrollableX;\n  }\n  function findScrollableParent(el) {\n    while (el !== d.body && isScrollable(el) === false) {\n      el = el.parentNode || el.host;\n    }\n    return el;\n  }\n  function step(context) {\n    const time = now();\n    let value;\n    let currentX;\n    let currentY;\n    let elapsed = (time - context.startTime) / SCROLL_TIME;\n    elapsed = elapsed > 1 ? 1 : elapsed;\n    value = ease(elapsed);\n    currentX = context.startX + (context.x - context.startX) * value;\n    currentY = context.startY + (context.y - context.startY) * value;\n    context.method.call(context.scrollable, currentX, currentY);\n    if (currentX !== context.x || currentY !== context.y) {\n      w.requestAnimationFrame(step.bind(w, context));\n    }\n  }\n  function smoothScroll(el, x, y) {\n    let scrollable;\n    let startX;\n    let startY;\n    let method;\n    const startTime = now();\n    if (el === d.body) {\n      scrollable = w;\n      startX = w.scrollX || w.pageXOffset;\n      startY = w.scrollY || w.pageYOffset;\n      method = original.scroll;\n    } else {\n      scrollable = el;\n      startX = el.scrollLeft;\n      startY = el.scrollTop;\n      method = scrollElement;\n    }\n    step({\n      scrollable,\n      method,\n      startTime,\n      startX,\n      startY,\n      x,\n      y\n    });\n  }\n  w.scroll = w.scrollTo = function() {\n    if (arguments[0] === void 0) {\n      return;\n    }\n    if (shouldBailOut(arguments[0]) === true) {\n      original.scroll.call(\n        w,\n        arguments[0].left !== void 0 ? arguments[0].left : typeof arguments[0] !== \"object\" ? arguments[0] : w.scrollX || w.pageXOffset,\n        // use top prop, second argument if present or fallback to scrollY\n        arguments[0].top !== void 0 ? arguments[0].top : arguments[1] !== void 0 ? arguments[1] : w.scrollY || w.pageYOffset\n      );\n      return;\n    }\n    smoothScroll.call(\n      w,\n      d.body,\n      arguments[0].left !== void 0 ? ~~arguments[0].left : w.scrollX || w.pageXOffset,\n      arguments[0].top !== void 0 ? ~~arguments[0].top : w.scrollY || w.pageYOffset\n    );\n  };\n  w.scrollBy = function() {\n    if (arguments[0] === void 0) {\n      return;\n    }\n    if (shouldBailOut(arguments[0])) {\n      original.scrollBy.call(\n        w,\n        arguments[0].left !== void 0 ? arguments[0].left : typeof arguments[0] !== \"object\" ? arguments[0] : 0,\n        arguments[0].top !== void 0 ? arguments[0].top : arguments[1] !== void 0 ? arguments[1] : 0\n      );\n      return;\n    }\n    smoothScroll.call(\n      w,\n      d.body,\n      ~~arguments[0].left + (w.scrollX || w.pageXOffset),\n      ~~arguments[0].top + (w.scrollY || w.pageYOffset)\n    );\n  };\n  Element2.prototype.scroll = Element2.prototype.scrollTo = function() {\n    if (arguments[0] === void 0) {\n      return;\n    }\n    if (shouldBailOut(arguments[0]) === true) {\n      if (typeof arguments[0] === \"number\" && arguments[1] === void 0) {\n        throw new SyntaxError(\"Value could not be converted\");\n      }\n      original.elementScroll.call(\n        this,\n        // use left prop, first number argument or fallback to scrollLeft\n        arguments[0].left !== void 0 ? ~~arguments[0].left : typeof arguments[0] !== \"object\" ? ~~arguments[0] : this.scrollLeft,\n        // use top prop, second argument or fallback to scrollTop\n        arguments[0].top !== void 0 ? ~~arguments[0].top : arguments[1] !== void 0 ? ~~arguments[1] : this.scrollTop\n      );\n      return;\n    }\n    const left = arguments[0].left;\n    const top = arguments[0].top;\n    smoothScroll.call(\n      this,\n      this,\n      typeof left === \"undefined\" ? this.scrollLeft : ~~left,\n      typeof top === \"undefined\" ? this.scrollTop : ~~top\n    );\n  };\n  Element2.prototype.scrollBy = function() {\n    if (arguments[0] === void 0) {\n      return;\n    }\n    if (shouldBailOut(arguments[0]) === true) {\n      original.elementScroll.call(\n        this,\n        arguments[0].left !== void 0 ? ~~arguments[0].left + this.scrollLeft : ~~arguments[0] + this.scrollLeft,\n        arguments[0].top !== void 0 ? ~~arguments[0].top + this.scrollTop : ~~arguments[1] + this.scrollTop\n      );\n      return;\n    }\n    this.scroll({\n      left: ~~arguments[0].left + this.scrollLeft,\n      top: ~~arguments[0].top + this.scrollTop,\n      behavior: arguments[0].behavior\n    });\n  };\n  Element2.prototype.scrollIntoView = function() {\n    if (shouldBailOut(arguments[0]) === true) {\n      original.scrollIntoView.call(\n        this,\n        arguments[0] === void 0 ? true : arguments[0]\n      );\n      return;\n    }\n    const scrollableParent = findScrollableParent(this);\n    const parentRects = scrollableParent.getBoundingClientRect();\n    const clientRects = this.getBoundingClientRect();\n    if (scrollableParent !== d.body) {\n      smoothScroll.call(\n        this,\n        scrollableParent,\n        scrollableParent.scrollLeft + clientRects.left - parentRects.left,\n        scrollableParent.scrollTop + clientRects.top - parentRects.top\n      );\n      if (w.getComputedStyle(scrollableParent).position !== \"fixed\") {\n        w.scrollBy({\n          left: parentRects.left,\n          top: parentRects.top,\n          behavior: \"smooth\"\n        });\n      }\n    } else {\n      w.scrollBy({\n        left: clientRects.left,\n        top: clientRects.top,\n        behavior: \"smooth\"\n      });\n    }\n  };\n}\nclass Timer {\n  constructor(actions = [], config) {\n    this.timeOffset = 0;\n    this.raf = null;\n    this.actions = actions;\n    this.speed = config.speed;\n  }\n  /**\n   * Add an action, possibly after the timer starts.\n   */\n  addAction(action) {\n    const rafWasActive = this.raf === true;\n    if (!this.actions.length || this.actions[this.actions.length - 1].delay <= action.delay) {\n      this.actions.push(action);\n    } else {\n      const index = this.findActionIndex(action);\n      this.actions.splice(index, 0, action);\n    }\n    if (rafWasActive) {\n      this.raf = onRequestAnimationFrame(this.rafCheck.bind(this));\n    }\n  }\n  start() {\n    this.timeOffset = 0;\n    this.lastTimestamp = performance.now();\n    this.raf = onRequestAnimationFrame(this.rafCheck.bind(this));\n  }\n  rafCheck() {\n    const time = performance.now();\n    this.timeOffset += (time - this.lastTimestamp) * this.speed;\n    this.lastTimestamp = time;\n    while (this.actions.length) {\n      const action = this.actions[0];\n      if (this.timeOffset >= action.delay) {\n        this.actions.shift();\n        action.doAction();\n      } else {\n        break;\n      }\n    }\n    if (this.actions.length > 0) {\n      this.raf = onRequestAnimationFrame(this.rafCheck.bind(this));\n    } else {\n      this.raf = true;\n    }\n  }\n  clear() {\n    if (this.raf) {\n      if (this.raf !== true) {\n        cancelAnimationFrame(this.raf);\n      }\n      this.raf = null;\n    }\n    this.actions.length = 0;\n  }\n  setSpeed(speed) {\n    this.speed = speed;\n  }\n  isActive() {\n    return this.raf !== null;\n  }\n  findActionIndex(action) {\n    let start = 0;\n    let end = this.actions.length - 1;\n    while (start <= end) {\n      const mid = Math.floor((start + end) / 2);\n      if (this.actions[mid].delay < action.delay) {\n        start = mid + 1;\n      } else if (this.actions[mid].delay > action.delay) {\n        end = mid - 1;\n      } else {\n        return mid + 1;\n      }\n    }\n    return start;\n  }\n}\nfunction addDelay(event, baselineTime) {\n  if (event.type === EventType.IncrementalSnapshot && event.data.source === IncrementalSource.MouseMove && event.data.positions && event.data.positions.length) {\n    const firstOffset = event.data.positions[0].timeOffset;\n    const firstTimestamp = event.timestamp + firstOffset;\n    event.delay = firstTimestamp - baselineTime;\n    return firstTimestamp - baselineTime;\n  }\n  event.delay = event.timestamp - baselineTime;\n  return event.delay;\n}\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\nfunction t(t2, n2) {\n  var e2 = \"function\" == typeof Symbol && t2[Symbol.iterator];\n  if (!e2) return t2;\n  var r2, o2, i2 = e2.call(t2), a2 = [];\n  try {\n    for (; (void 0 === n2 || n2-- > 0) && !(r2 = i2.next()).done; ) a2.push(r2.value);\n  } catch (t3) {\n    o2 = { error: t3 };\n  } finally {\n    try {\n      r2 && !r2.done && (e2 = i2.return) && e2.call(i2);\n    } finally {\n      if (o2) throw o2.error;\n    }\n  }\n  return a2;\n}\nvar n;\n!function(t2) {\n  t2[t2.NotStarted = 0] = \"NotStarted\", t2[t2.Running = 1] = \"Running\", t2[t2.Stopped = 2] = \"Stopped\";\n}(n || (n = {}));\nvar e = { type: \"xstate.init\" };\nfunction r(t2) {\n  return void 0 === t2 ? [] : [].concat(t2);\n}\nfunction o(t2) {\n  return { type: \"xstate.assign\", assignment: t2 };\n}\nfunction i(t2, n2) {\n  return \"string\" == typeof (t2 = \"string\" == typeof t2 && n2 && n2[t2] ? n2[t2] : t2) ? { type: t2 } : \"function\" == typeof t2 ? { type: t2.name, exec: t2 } : t2;\n}\nfunction a(t2) {\n  return function(n2) {\n    return t2 === n2;\n  };\n}\nfunction u(t2) {\n  return \"string\" == typeof t2 ? { type: t2 } : t2;\n}\nfunction c(t2, n2) {\n  return { value: t2, context: n2, actions: [], changed: false, matches: a(t2) };\n}\nfunction f(t2, n2, e2) {\n  var r2 = n2, o2 = false;\n  return [t2.filter(function(t3) {\n    if (\"xstate.assign\" === t3.type) {\n      o2 = true;\n      var n3 = Object.assign({}, r2);\n      return \"function\" == typeof t3.assignment ? n3 = t3.assignment(r2, e2) : Object.keys(t3.assignment).forEach(function(o3) {\n        n3[o3] = \"function\" == typeof t3.assignment[o3] ? t3.assignment[o3](r2, e2) : t3.assignment[o3];\n      }), r2 = n3, false;\n    }\n    return true;\n  }), r2, o2];\n}\nfunction s(n2, o2) {\n  void 0 === o2 && (o2 = {});\n  var s2 = t(f(r(n2.states[n2.initial].entry).map(function(t2) {\n    return i(t2, o2.actions);\n  }), n2.context, e), 2), l2 = s2[0], v2 = s2[1], y = { config: n2, _options: o2, initialState: { value: n2.initial, actions: l2, context: v2, matches: a(n2.initial) }, transition: function(e2, o3) {\n    var s3, l3, v3 = \"string\" == typeof e2 ? { value: e2, context: n2.context } : e2, p = v3.value, g = v3.context, d = u(o3), x = n2.states[p];\n    if (x.on) {\n      var m = r(x.on[d.type]);\n      try {\n        for (var h = function(t2) {\n          var n3 = \"function\" == typeof Symbol && Symbol.iterator, e3 = n3 && t2[n3], r2 = 0;\n          if (e3) return e3.call(t2);\n          if (t2 && \"number\" == typeof t2.length) return { next: function() {\n            return t2 && r2 >= t2.length && (t2 = void 0), { value: t2 && t2[r2++], done: !t2 };\n          } };\n          throw new TypeError(n3 ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n        }(m), b = h.next(); !b.done; b = h.next()) {\n          var S = b.value;\n          if (void 0 === S) return c(p, g);\n          var w = \"string\" == typeof S ? { target: S } : S, j = w.target, E = w.actions, R = void 0 === E ? [] : E, N = w.cond, O = void 0 === N ? function() {\n            return true;\n          } : N, _ = void 0 === j, k = null != j ? j : p, T = n2.states[k];\n          if (O(g, d)) {\n            var q = t(f((_ ? r(R) : [].concat(x.exit, R, T.entry).filter(function(t2) {\n              return t2;\n            })).map(function(t2) {\n              return i(t2, y._options.actions);\n            }), g, d), 3), z = q[0], A = q[1], B = q[2], C = null != j ? j : p;\n            return { value: C, context: A, actions: z, changed: j !== p || z.length > 0 || B, matches: a(C) };\n          }\n        }\n      } catch (t2) {\n        s3 = { error: t2 };\n      } finally {\n        try {\n          b && !b.done && (l3 = h.return) && l3.call(h);\n        } finally {\n          if (s3) throw s3.error;\n        }\n      }\n    }\n    return c(p, g);\n  } };\n  return y;\n}\nvar l = function(t2, n2) {\n  return t2.actions.forEach(function(e2) {\n    var r2 = e2.exec;\n    return r2 && r2(t2.context, n2);\n  });\n};\nfunction v(t2) {\n  var r2 = t2.initialState, o2 = n.NotStarted, i2 = /* @__PURE__ */ new Set(), c2 = { _machine: t2, send: function(e2) {\n    o2 === n.Running && (r2 = t2.transition(r2, e2), l(r2, u(e2)), i2.forEach(function(t3) {\n      return t3(r2);\n    }));\n  }, subscribe: function(t3) {\n    return i2.add(t3), t3(r2), { unsubscribe: function() {\n      return i2.delete(t3);\n    } };\n  }, start: function(i3) {\n    if (i3) {\n      var u2 = \"object\" == typeof i3 ? i3 : { context: t2.config.context, value: i3 };\n      r2 = { value: u2.value, actions: [], context: u2.context, matches: a(u2.value) };\n    }\n    return o2 = n.Running, l(r2, e), c2;\n  }, stop: function() {\n    return o2 = n.Stopped, i2.clear(), c2;\n  }, get state() {\n    return r2;\n  }, get status() {\n    return o2;\n  } };\n  return c2;\n}\nfunction discardPriorSnapshots(events, baselineTime) {\n  for (let idx = events.length - 1; idx >= 0; idx--) {\n    const event = events[idx];\n    if (event.type === EventType.Meta) {\n      if (event.timestamp <= baselineTime) {\n        return events.slice(idx);\n      }\n    }\n  }\n  return events;\n}\nfunction createPlayerService(context, { getCastFn, applyEventsSynchronously, emitter }) {\n  const playerMachine = s(\n    {\n      id: \"player\",\n      context,\n      initial: \"paused\",\n      states: {\n        playing: {\n          on: {\n            PAUSE: {\n              target: \"paused\",\n              actions: [\"pause\"]\n            },\n            CAST_EVENT: {\n              target: \"playing\",\n              actions: \"castEvent\"\n            },\n            END: {\n              target: \"paused\",\n              actions: [\"resetLastPlayedEvent\", \"pause\"]\n            },\n            ADD_EVENT: {\n              target: \"playing\",\n              actions: [\"addEvent\"]\n            }\n          }\n        },\n        paused: {\n          on: {\n            PLAY: {\n              target: \"playing\",\n              actions: [\"recordTimeOffset\", \"play\"]\n            },\n            CAST_EVENT: {\n              target: \"paused\",\n              actions: \"castEvent\"\n            },\n            TO_LIVE: {\n              target: \"live\",\n              actions: [\"startLive\"]\n            },\n            ADD_EVENT: {\n              target: \"paused\",\n              actions: [\"addEvent\"]\n            }\n          }\n        },\n        live: {\n          on: {\n            ADD_EVENT: {\n              target: \"live\",\n              actions: [\"addEvent\"]\n            },\n            CAST_EVENT: {\n              target: \"live\",\n              actions: [\"castEvent\"]\n            }\n          }\n        }\n      }\n    },\n    {\n      actions: {\n        castEvent: o({\n          lastPlayedEvent: (ctx, event) => {\n            if (event.type === \"CAST_EVENT\") {\n              return event.payload.event;\n            }\n            return ctx.lastPlayedEvent;\n          }\n        }),\n        recordTimeOffset: o((ctx, event) => {\n          let timeOffset = ctx.timeOffset;\n          if (\"payload\" in event && \"timeOffset\" in event.payload) {\n            timeOffset = event.payload.timeOffset;\n          }\n          return {\n            ...ctx,\n            timeOffset,\n            baselineTime: ctx.events[0].timestamp + timeOffset\n          };\n        }),\n        play(ctx) {\n          const { timer, events, baselineTime, lastPlayedEvent } = ctx;\n          timer.clear();\n          for (const event of events) {\n            addDelay(event, baselineTime);\n          }\n          const neededEvents = discardPriorSnapshots(events, baselineTime);\n          let lastPlayedTimestamp = lastPlayedEvent?.timestamp;\n          if (lastPlayedEvent?.type === EventType.IncrementalSnapshot && lastPlayedEvent.data.source === IncrementalSource.MouseMove) {\n            lastPlayedTimestamp = lastPlayedEvent.timestamp + lastPlayedEvent.data.positions[0]?.timeOffset;\n          }\n          if (baselineTime < (lastPlayedTimestamp || 0)) {\n            emitter.emit(ReplayerEvents.PlayBack);\n          }\n          const syncEvents = new Array();\n          for (const event of neededEvents) {\n            if (lastPlayedTimestamp && lastPlayedTimestamp < baselineTime && (event.timestamp <= lastPlayedTimestamp || event === lastPlayedEvent)) {\n              continue;\n            }\n            if (event.timestamp < baselineTime) {\n              syncEvents.push(event);\n            } else {\n              const castFn = getCastFn(event, false);\n              timer.addAction({\n                doAction: () => {\n                  castFn();\n                },\n                delay: event.delay\n              });\n            }\n          }\n          applyEventsSynchronously(syncEvents);\n          emitter.emit(ReplayerEvents.Flush);\n          timer.start();\n        },\n        pause(ctx) {\n          ctx.timer.clear();\n        },\n        resetLastPlayedEvent: o((ctx) => {\n          return {\n            ...ctx,\n            lastPlayedEvent: null\n          };\n        }),\n        startLive: o({\n          baselineTime: (ctx, event) => {\n            ctx.timer.start();\n            if (event.type === \"TO_LIVE\" && event.payload.baselineTime) {\n              return event.payload.baselineTime;\n            }\n            return Date.now();\n          }\n        }),\n        addEvent: o((ctx, machineEvent) => {\n          const { baselineTime, timer, events } = ctx;\n          if (machineEvent.type === \"ADD_EVENT\") {\n            const { event } = machineEvent.payload;\n            addDelay(event, baselineTime);\n            let end = events.length - 1;\n            if (!events[end] || events[end].timestamp <= event.timestamp) {\n              events.push(event);\n            } else {\n              let insertionIndex = -1;\n              let start = 0;\n              while (start <= end) {\n                const mid = Math.floor((start + end) / 2);\n                if (events[mid].timestamp <= event.timestamp) {\n                  start = mid + 1;\n                } else {\n                  end = mid - 1;\n                }\n              }\n              if (insertionIndex === -1) {\n                insertionIndex = start;\n              }\n              events.splice(insertionIndex, 0, event);\n            }\n            const isSync = event.timestamp < baselineTime;\n            const castFn = getCastFn(event, isSync);\n            if (isSync) {\n              castFn();\n            } else if (timer.isActive()) {\n              timer.addAction({\n                doAction: () => {\n                  castFn();\n                },\n                delay: event.delay\n              });\n            }\n          }\n          return { ...ctx, events };\n        })\n      }\n    }\n  );\n  return v(playerMachine);\n}\nfunction createSpeedService(context) {\n  const speedMachine = s(\n    {\n      id: \"speed\",\n      context,\n      initial: \"normal\",\n      states: {\n        normal: {\n          on: {\n            FAST_FORWARD: {\n              target: \"skipping\",\n              actions: [\"recordSpeed\", \"setSpeed\"]\n            },\n            SET_SPEED: {\n              target: \"normal\",\n              actions: [\"setSpeed\"]\n            }\n          }\n        },\n        skipping: {\n          on: {\n            BACK_TO_NORMAL: {\n              target: \"normal\",\n              actions: [\"restoreSpeed\"]\n            },\n            SET_SPEED: {\n              target: \"normal\",\n              actions: [\"setSpeed\"]\n            }\n          }\n        }\n      }\n    },\n    {\n      actions: {\n        setSpeed: (ctx, event) => {\n          if (\"payload\" in event) {\n            ctx.timer.setSpeed(event.payload.speed);\n          }\n        },\n        recordSpeed: o({\n          normalSpeed: (ctx) => ctx.timer.speed\n        }),\n        restoreSpeed: (ctx) => {\n          ctx.timer.setSpeed(ctx.normalSpeed);\n        }\n      }\n    }\n  );\n  return v(speedMachine);\n}\nconst rules = (blockClass) => [\n  `.${blockClass} { background: currentColor }`,\n  \"noscript { display: none !important; }\"\n];\nconst webGLVarMap = /* @__PURE__ */ new Map();\nfunction variableListFor(ctx, ctor) {\n  let contextMap = webGLVarMap.get(ctx);\n  if (!contextMap) {\n    contextMap = /* @__PURE__ */ new Map();\n    webGLVarMap.set(ctx, contextMap);\n  }\n  if (!contextMap.has(ctor)) {\n    contextMap.set(ctor, []);\n  }\n  return contextMap.get(ctor);\n}\nfunction deserializeArg(imageMap, ctx, preload) {\n  return async (arg) => {\n    if (arg && typeof arg === \"object\" && \"rr_type\" in arg) {\n      if (preload) preload.isUnchanged = false;\n      if (arg.rr_type === \"ImageBitmap\" && \"args\" in arg) {\n        const args = await deserializeArg(imageMap, ctx, preload)(arg.args);\n        return await createImageBitmap.apply(null, args);\n      } else if (\"index\" in arg) {\n        if (preload || ctx === null) return arg;\n        const { rr_type: name, index } = arg;\n        return variableListFor(ctx, name)[index];\n      } else if (\"args\" in arg) {\n        const { rr_type: name, args } = arg;\n        const ctor = window[name];\n        return new ctor(\n          ...await Promise.all(\n            args.map(deserializeArg(imageMap, ctx, preload))\n          )\n        );\n      } else if (\"base64\" in arg) {\n        return decode(arg.base64);\n      } else if (\"src\" in arg) {\n        const image = imageMap.get(arg.src);\n        if (image) {\n          return image;\n        } else {\n          const image2 = new Image();\n          image2.src = arg.src;\n          imageMap.set(arg.src, image2);\n          return image2;\n        }\n      } else if (\"data\" in arg && arg.rr_type === \"Blob\") {\n        const blobContents = await Promise.all(\n          arg.data.map(deserializeArg(imageMap, ctx, preload))\n        );\n        const blob = new Blob(blobContents, {\n          type: arg.type\n        });\n        return blob;\n      }\n    } else if (Array.isArray(arg)) {\n      const result = await Promise.all(\n        arg.map(deserializeArg(imageMap, ctx, preload))\n      );\n      return result;\n    }\n    return arg;\n  };\n}\nfunction getContext(target, type) {\n  try {\n    if (type === CanvasContext.WebGL) {\n      return target.getContext(\"webgl\") || target.getContext(\"experimental-webgl\");\n    }\n    return target.getContext(\"webgl2\");\n  } catch (e2) {\n    return null;\n  }\n}\nconst WebGLVariableConstructorsNames = [\n  \"WebGLActiveInfo\",\n  \"WebGLBuffer\",\n  \"WebGLFramebuffer\",\n  \"WebGLProgram\",\n  \"WebGLRenderbuffer\",\n  \"WebGLShader\",\n  \"WebGLShaderPrecisionFormat\",\n  \"WebGLTexture\",\n  \"WebGLUniformLocation\",\n  \"WebGLVertexArrayObject\"\n];\nfunction saveToWebGLVarMap(ctx, result) {\n  if (!result?.constructor) return;\n  const { name } = result.constructor;\n  if (!WebGLVariableConstructorsNames.includes(name)) return;\n  const variables = variableListFor(ctx, name);\n  if (!variables.includes(result)) variables.push(result);\n}\nasync function webglMutation({\n  mutation,\n  target,\n  type,\n  imageMap,\n  errorHandler: errorHandler2\n}) {\n  try {\n    const ctx = getContext(target, type);\n    if (!ctx) return;\n    if (mutation.setter) {\n      ctx[mutation.property] = mutation.args[0];\n      return;\n    }\n    const original = ctx[mutation.property];\n    const args = await Promise.all(\n      mutation.args.map(deserializeArg(imageMap, ctx))\n    );\n    const result = original.apply(ctx, args);\n    saveToWebGLVarMap(ctx, result);\n    const debugMode = false;\n    if (debugMode) ;\n  } catch (error) {\n    errorHandler2(mutation, error);\n  }\n}\nasync function canvasMutation$1({\n  event,\n  mutations,\n  target,\n  imageMap,\n  errorHandler: errorHandler2\n}) {\n  const ctx = target.getContext(\"2d\");\n  if (!ctx) {\n    errorHandler2(mutations[0], new Error(\"Canvas context is null\"));\n    return;\n  }\n  const mutationArgsPromises = mutations.map(\n    async (mutation) => {\n      return Promise.all(mutation.args.map(deserializeArg(imageMap, ctx)));\n    }\n  );\n  const args = await Promise.all(mutationArgsPromises);\n  args.forEach((args2, index) => {\n    const mutation = mutations[index];\n    try {\n      if (mutation.setter) {\n        ctx[mutation.property] = mutation.args[0];\n        return;\n      }\n      const original = ctx[mutation.property];\n      if (mutation.property === \"drawImage\" && typeof mutation.args[0] === \"string\") {\n        imageMap.get(event);\n        original.apply(ctx, mutation.args);\n      } else {\n        original.apply(ctx, args2);\n      }\n    } catch (error) {\n      errorHandler2(mutation, error);\n    }\n    return;\n  });\n}\nasync function canvasMutation({\n  event,\n  mutation,\n  target,\n  imageMap,\n  canvasEventMap,\n  errorHandler: errorHandler2\n}) {\n  try {\n    const precomputedMutation = canvasEventMap.get(event) || mutation;\n    const commands = \"commands\" in precomputedMutation ? precomputedMutation.commands : [precomputedMutation];\n    if ([CanvasContext.WebGL, CanvasContext.WebGL2].includes(mutation.type)) {\n      for (let i2 = 0; i2 < commands.length; i2++) {\n        const command = commands[i2];\n        await webglMutation({\n          mutation: command,\n          type: mutation.type,\n          target,\n          imageMap,\n          errorHandler: errorHandler2\n        });\n      }\n      return;\n    }\n    await canvasMutation$1({\n      event,\n      mutations: commands,\n      target,\n      imageMap,\n      errorHandler: errorHandler2\n    });\n  } catch (error) {\n    errorHandler2(mutation, error);\n  }\n}\nconst SKIP_TIME_INTERVAL = 5 * 1e3;\nconst mitt = mitt$1 || mittProxy;\nconst REPLAY_CONSOLE_PREFIX = \"[replayer]\";\nconst defaultMouseTailConfig = {\n  duration: 500,\n  lineCap: \"round\",\n  lineWidth: 3,\n  strokeStyle: \"red\"\n};\nfunction indicatesTouchDevice(e2) {\n  return e2.type == EventType.IncrementalSnapshot && (e2.data.source == IncrementalSource.TouchMove || e2.data.source == IncrementalSource.MouseInteraction && e2.data.type == MouseInteractions.TouchStart);\n}\nfunction getPointerId(d) {\n  const pointerId = \"pointerId\" in d && typeof d.pointerId === \"number\" ? d.pointerId : -1;\n  return pointerId;\n}\nclass Replayer {\n  constructor(events, config) {\n    this.usingVirtualDom = false;\n    this.virtualDom = new RRDocument();\n    this.emitter = mitt();\n    this.legacy_missingNodeRetryMap = {};\n    this.cache = createCache();\n    this.imageMap = /* @__PURE__ */ new Map();\n    this.canvasEventMap = /* @__PURE__ */ new Map();\n    this.mirror = createMirror$2();\n    this.styleMirror = new StyleSheetMirror();\n    this.firstFullSnapshot = null;\n    this.newDocumentQueue = [];\n    this.pointers = {};\n    this.lastMouseDownEvent = null;\n    this.lastSelectionData = null;\n    this.constructedStyleMutations = [];\n    this.adoptedStyleSheets = [];\n    this.handleResize = (dimension) => {\n      this.iframe.style.display = \"inherit\";\n      for (const el of [\n        ...Object.values(this.pointers).flatMap((a2) => a2.mouseTail),\n        this.iframe\n      ]) {\n        if (!el) {\n          continue;\n        }\n        el.setAttribute(\"width\", String(dimension.width));\n        el.setAttribute(\"height\", String(dimension.height));\n      }\n    };\n    this.applyEventsSynchronously = (events2) => {\n      for (const event of events2) {\n        switch (event.type) {\n          case EventType.DomContentLoaded:\n          case EventType.Load:\n          case EventType.Custom:\n            continue;\n          case EventType.FullSnapshot:\n          case EventType.Meta:\n          case EventType.Plugin:\n          case EventType.IncrementalSnapshot:\n            break;\n        }\n        const castFn = this.getCastFn(event, true);\n        castFn();\n      }\n    };\n    this.getCastFn = (event, isSync = false) => {\n      let castFn;\n      switch (event.type) {\n        case EventType.DomContentLoaded:\n        case EventType.Load:\n          break;\n        case EventType.Custom:\n          castFn = () => {\n            this.emitter.emit(ReplayerEvents.CustomEvent, event);\n          };\n          break;\n        case EventType.Meta:\n          castFn = () => this.emitter.emit(ReplayerEvents.Resize, {\n            width: event.data.width,\n            height: event.data.height\n          });\n          break;\n        case EventType.FullSnapshot:\n          castFn = () => {\n            if (this.firstFullSnapshot) {\n              if (this.firstFullSnapshot === event) {\n                this.firstFullSnapshot = true;\n                return;\n              }\n            } else {\n              this.firstFullSnapshot = true;\n            }\n            this.rebuildFullSnapshot(event, isSync);\n            this.iframe.contentWindow?.scrollTo(event.data.initialOffset);\n            this.styleMirror.reset();\n          };\n          break;\n        case EventType.IncrementalSnapshot:\n          castFn = () => {\n            this.applyIncremental(event, isSync);\n            if (isSync) {\n              return;\n            }\n            if (event === this.nextUserInteractionEvent) {\n              this.nextUserInteractionEvent = null;\n              this.backToNormal();\n            }\n            if (this.config.skipInactive && !this.nextUserInteractionEvent) {\n              for (const _event of this.service.state.context.events) {\n                if (_event.timestamp <= event.timestamp) {\n                  continue;\n                }\n                if (this.isUserInteraction(_event)) {\n                  if (\n                    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n                    _event.delay - event.delay > this.config.inactivePeriodThreshold * this.speedService.state.context.timer.speed\n                  ) {\n                    this.nextUserInteractionEvent = _event;\n                  }\n                  break;\n                }\n              }\n              if (this.nextUserInteractionEvent) {\n                const skipTime = (\n                  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n                  this.nextUserInteractionEvent.delay - event.delay\n                );\n                const payload = {\n                  speed: Math.min(\n                    Math.round(skipTime / SKIP_TIME_INTERVAL),\n                    this.config.maxSpeed\n                  )\n                };\n                this.speedService.send({ type: \"FAST_FORWARD\", payload });\n                this.emitter.emit(ReplayerEvents.SkipStart, payload);\n              }\n            }\n          };\n          break;\n      }\n      const wrappedCastFn = () => {\n        if (castFn) {\n          castFn();\n        }\n        for (const plugin of this.config.plugins || []) {\n          if (plugin.handler) plugin.handler(event, isSync, { replayer: this });\n        }\n        this.service.send({ type: \"CAST_EVENT\", payload: { event } });\n        const last_index = this.service.state.context.events.length - 1;\n        if (!this.config.liveMode && event === this.service.state.context.events[last_index]) {\n          const finish = () => {\n            if (last_index < this.service.state.context.events.length - 1) {\n              return;\n            }\n            this.backToNormal();\n            this.service.send(\"END\");\n            this.emitter.emit(ReplayerEvents.Finish);\n          };\n          let finish_buffer = 50;\n          if (event.type === EventType.IncrementalSnapshot && event.data.source === IncrementalSource.MouseMove && event.data.positions.length) {\n            finish_buffer += Math.max(0, -event.data.positions[0].timeOffset);\n          }\n          setTimeout$1(finish, finish_buffer);\n        }\n        this.emitter.emit(ReplayerEvents.EventCast, event);\n      };\n      return wrappedCastFn;\n    };\n    if (!config?.liveMode && events.length < 2) {\n      throw new Error(\"Replayer need at least 2 events.\");\n    }\n    const defaultConfig = {\n      speed: 1,\n      maxSpeed: 360,\n      root: document.body,\n      loadTimeout: 0,\n      skipInactive: false,\n      inactivePeriodThreshold: 10 * 1e3,\n      showWarning: true,\n      showDebug: false,\n      blockClass: \"rr-block\",\n      liveMode: false,\n      insertStyleRules: [],\n      triggerFocus: true,\n      UNSAFE_replayCanvas: false,\n      pauseAnimation: true,\n      mouseTail: defaultMouseTailConfig,\n      useVirtualDom: true,\n      // Virtual-dom optimization is enabled by default.\n      logger: console\n    };\n    this.config = Object.assign({}, defaultConfig, config);\n    this.handleResize = this.handleResize.bind(this);\n    this.getCastFn = this.getCastFn.bind(this);\n    this.applyEventsSynchronously = this.applyEventsSynchronously.bind(this);\n    this.emitter.on(ReplayerEvents.Resize, this.handleResize);\n    this.setupDom();\n    for (const plugin of this.config.plugins || []) {\n      if (plugin.getMirror) plugin.getMirror({ nodeMirror: this.mirror });\n    }\n    this.emitter.on(ReplayerEvents.Flush, () => {\n      if (this.usingVirtualDom) {\n        const replayerHandler = {\n          mirror: this.mirror,\n          applyCanvas: (canvasEvent, canvasMutationData2, target) => {\n            void canvasMutation({\n              event: canvasEvent,\n              mutation: canvasMutationData2,\n              target,\n              imageMap: this.imageMap,\n              canvasEventMap: this.canvasEventMap,\n              errorHandler: this.warnCanvasMutationFailed.bind(this)\n            });\n          },\n          applyInput: this.applyInput.bind(this),\n          applyScroll: this.applyScroll.bind(this),\n          applyStyleSheetMutation: (data, styleSheet) => {\n            if (data.source === IncrementalSource.StyleSheetRule)\n              this.applyStyleSheetRule(data, styleSheet);\n            else if (data.source === IncrementalSource.StyleDeclaration)\n              this.applyStyleDeclaration(data, styleSheet);\n          },\n          afterAppend: (node, id) => {\n            for (const plugin of this.config.plugins || []) {\n              if (plugin.onBuild) plugin.onBuild(node, { id, replayer: this });\n            }\n          }\n        };\n        const iframeDoc = getIFrameContentDocument(this.iframe);\n        if (iframeDoc)\n          try {\n            diff(\n              iframeDoc,\n              this.virtualDom,\n              replayerHandler,\n              this.virtualDom.mirror\n            );\n          } catch (e2) {\n            console.warn(e2);\n          }\n        this.virtualDom.destroyTree();\n        this.usingVirtualDom = false;\n        if (Object.keys(this.legacy_missingNodeRetryMap).length) {\n          for (const key in this.legacy_missingNodeRetryMap) {\n            try {\n              const value = this.legacy_missingNodeRetryMap[key];\n              const realNode = createOrGetNode(\n                value.node,\n                this.mirror,\n                this.virtualDom.mirror\n              );\n              diff(\n                realNode,\n                value.node,\n                replayerHandler,\n                this.virtualDom.mirror\n              );\n              value.node = realNode;\n            } catch (error) {\n              this.warn(error);\n            }\n          }\n        }\n        this.constructedStyleMutations.forEach((data) => {\n          this.applyStyleSheetMutation(data);\n        });\n        this.constructedStyleMutations = [];\n        this.adoptedStyleSheets.forEach((data) => {\n          this.applyAdoptedStyleSheet(data);\n        });\n        this.adoptedStyleSheets = [];\n      }\n      for (const [\n        pointerId,\n        { pointerPosition, touchActive }\n      ] of Object.entries(this.pointers)) {\n        const id = parseInt(pointerId);\n        const pointer = this.pointers[id];\n        if (pointerPosition) {\n          this.moveAndHover(\n            pointerPosition.x,\n            pointerPosition.y,\n            pointerPosition.id,\n            true,\n            pointerPosition.debugData,\n            id\n          );\n          pointer.pointerPosition = null;\n        }\n        if (touchActive === true) {\n          pointer.pointerEl.classList.add(\"touch-active\");\n        } else if (touchActive === false) {\n          pointer.pointerEl.classList.remove(\"touch-active\");\n        }\n        pointer.touchActive = null;\n      }\n      if (this.lastMouseDownEvent) {\n        const [target, event] = this.lastMouseDownEvent;\n        target.dispatchEvent(event);\n      }\n      this.lastMouseDownEvent = null;\n      if (this.lastSelectionData) {\n        this.applySelection(this.lastSelectionData);\n        this.lastSelectionData = null;\n      }\n    });\n    this.emitter.on(ReplayerEvents.PlayBack, () => {\n      this.firstFullSnapshot = null;\n      this.mirror.reset();\n      this.styleMirror.reset();\n    });\n    const timer = new Timer([], {\n      speed: this.config.speed\n    });\n    this.service = createPlayerService(\n      {\n        events: events.map((e2) => {\n          if (config && config.unpackFn) {\n            return config.unpackFn(e2);\n          }\n          return e2;\n        }).sort((a1, a2) => a1.timestamp - a2.timestamp),\n        timer,\n        timeOffset: 0,\n        baselineTime: 0,\n        lastPlayedEvent: null\n      },\n      {\n        getCastFn: this.getCastFn,\n        applyEventsSynchronously: this.applyEventsSynchronously,\n        emitter: this.emitter\n      }\n    );\n    this.service.start();\n    this.service.subscribe((state) => {\n      this.emitter.emit(ReplayerEvents.StateChange, {\n        player: state\n      });\n    });\n    this.speedService = createSpeedService({\n      normalSpeed: -1,\n      timer\n    });\n    this.speedService.start();\n    this.speedService.subscribe((state) => {\n      this.emitter.emit(ReplayerEvents.StateChange, {\n        speed: state\n      });\n    });\n    const firstMeta = this.service.state.context.events.find(\n      (e2) => e2.type === EventType.Meta\n    );\n    const firstFullsnapshot = this.service.state.context.events.find(\n      (e2) => e2.type === EventType.FullSnapshot\n    );\n    if (firstMeta) {\n      const { width, height } = firstMeta.data;\n      setTimeout$1(() => {\n        this.emitter.emit(ReplayerEvents.Resize, {\n          width,\n          height\n        });\n      }, 0);\n    }\n    if (firstFullsnapshot) {\n      setTimeout$1(() => {\n        if (this.firstFullSnapshot) {\n          return;\n        }\n        this.firstFullSnapshot = firstFullsnapshot;\n        this.rebuildFullSnapshot(\n          firstFullsnapshot\n        );\n        this.iframe.contentWindow?.scrollTo(\n          firstFullsnapshot.data.initialOffset\n        );\n      }, 1);\n    }\n  }\n  get timer() {\n    return this.service.state.context.timer;\n  }\n  createPointer(pointerId, event) {\n    const mouseTail = document.createElement(\"canvas\");\n    mouseTail.classList.add(\"replayer-mouse-tail\");\n    mouseTail.width = Number.parseFloat(this.iframe.width);\n    mouseTail.height = Number.parseFloat(this.iframe.height);\n    this.wrapper.insertBefore(mouseTail, this.iframe);\n    mouseTail.style.display = this.config.mouseTail === false ? \"none\" : \"inherit\";\n    const newMouse = document.createElement(\"div\");\n    newMouse.classList.add(\"replayer-mouse\");\n    this.pointers[pointerId] = {\n      touchActive: null,\n      pointerEl: newMouse,\n      tailPositions: [],\n      pointerPosition: null,\n      mouseTail\n    };\n    if (indicatesTouchDevice(event)) {\n      newMouse.classList.add(\"touch-device\");\n    }\n    this.wrapper.appendChild(newMouse);\n  }\n  on(event, handler) {\n    this.emitter.on(event, handler);\n    return this;\n  }\n  off(event, handler) {\n    this.emitter.off(event, handler);\n    return this;\n  }\n  setConfig(config) {\n    Object.keys(config).forEach((key) => {\n      config[key];\n      this.config[key] = config[key];\n    });\n    if (!this.config.skipInactive) {\n      this.backToNormal();\n    }\n    if (typeof config.speed !== \"undefined\") {\n      this.speedService.send({\n        type: \"SET_SPEED\",\n        payload: {\n          speed: config.speed\n        }\n      });\n    }\n    if (typeof config.mouseTail !== \"undefined\") {\n      if (config.mouseTail === false) {\n        for (const { mouseTail } of Object.values(this.pointers)) {\n          if (mouseTail) {\n            mouseTail.style.display = \"none\";\n          }\n        }\n      } else {\n        for (let { mouseTail } of Object.values(this.pointers)) {\n          if (!mouseTail) {\n            mouseTail = document.createElement(\"canvas\");\n            mouseTail.width = Number.parseFloat(this.iframe.width);\n            mouseTail.height = Number.parseFloat(this.iframe.height);\n            mouseTail.classList.add(\"replayer-mouse-tail\");\n            this.wrapper.insertBefore(mouseTail, this.iframe);\n          }\n          mouseTail.style.display = \"inherit\";\n        }\n      }\n    }\n  }\n  getMetaData() {\n    const firstEvent = this.service.state.context.events[0];\n    const lastEvent = this.service.state.context.events[this.service.state.context.events.length - 1];\n    return {\n      startTime: firstEvent.timestamp,\n      endTime: lastEvent.timestamp,\n      totalTime: lastEvent.timestamp - firstEvent.timestamp\n    };\n  }\n  getCurrentTime() {\n    return this.timer.timeOffset + this.getTimeOffset();\n  }\n  getTimeOffset() {\n    const { baselineTime, events } = this.service.state.context;\n    return baselineTime - events[0].timestamp;\n  }\n  getMirror() {\n    return this.mirror;\n  }\n  /**\n   * This API was designed to be used as play at any time offset.\n   * Since we minimized the data collected from recorder, we do not\n   * have the ability of undo an event.\n   * So the implementation of play at any time offset will always iterate\n   * all of the events, cast event before the offset synchronously\n   * and cast event after the offset asynchronously with timer.\n   * @param timeOffset - number\n   */\n  play(timeOffset = 0) {\n    if (this.service.state.matches(\"paused\")) {\n      this.service.send({ type: \"PLAY\", payload: { timeOffset } });\n    } else {\n      this.service.send({ type: \"PAUSE\" });\n      this.service.send({ type: \"PLAY\", payload: { timeOffset } });\n    }\n    const iframeDoc = getIFrameContentDocument(this.iframe);\n    iframeDoc?.getElementsByTagName(\"html\")[0]?.classList.remove(\"rrweb-paused\");\n    this.emitter.emit(ReplayerEvents.Start);\n  }\n  pause(timeOffset) {\n    if (timeOffset === void 0 && this.service.state.matches(\"playing\")) {\n      this.service.send({ type: \"PAUSE\" });\n    }\n    if (typeof timeOffset === \"number\") {\n      this.play(timeOffset);\n      this.service.send({ type: \"PAUSE\" });\n    }\n    const iframeDoc = getIFrameContentDocument(this.iframe);\n    iframeDoc?.getElementsByTagName(\"html\")[0]?.classList.add(\"rrweb-paused\");\n    this.emitter.emit(ReplayerEvents.Pause);\n  }\n  resume(timeOffset = 0) {\n    this.warn(\n      `The 'resume' was deprecated in 1.0. Please use 'play' method which has the same interface.`\n    );\n    this.play(timeOffset);\n    this.emitter.emit(ReplayerEvents.Resume);\n  }\n  /**\n   * Totally destroy this replayer and please be careful that this operation is irreversible.\n   * Memory occupation can be released by removing all references to this replayer.\n   */\n  destroy() {\n    this.pause();\n    this.config.root.removeChild(this.wrapper);\n    this.emitter.emit(ReplayerEvents.Destroy);\n  }\n  startLive(baselineTime) {\n    this.service.send({ type: \"TO_LIVE\", payload: { baselineTime } });\n  }\n  addEvent(rawEvent) {\n    const event = this.config.unpackFn ? this.config.unpackFn(rawEvent) : rawEvent;\n    void Promise.resolve().then(\n      () => this.service.send({ type: \"ADD_EVENT\", payload: { event } })\n    );\n  }\n  enableInteract() {\n    this.iframe.setAttribute(\"scrolling\", \"auto\");\n    this.iframe.style.pointerEvents = \"auto\";\n  }\n  disableInteract() {\n    this.iframe.setAttribute(\"scrolling\", \"no\");\n    this.iframe.style.pointerEvents = \"none\";\n  }\n  /**\n   * Empties the replayer's cache and reclaims memory.\n   * The replayer will use this cache to speed up the playback.\n   */\n  resetCache() {\n    this.cache = createCache();\n  }\n  setupDom() {\n    this.wrapper = document.createElement(\"div\");\n    this.wrapper.classList.add(\"replayer-wrapper\");\n    this.config.root.appendChild(this.wrapper);\n    this.iframe = document.createElement(\"iframe\");\n    const attributes2 = [\"allow-same-origin\"];\n    if (this.config.UNSAFE_replayCanvas) {\n      attributes2.push(\"allow-scripts\");\n    }\n    this.iframe.style.display = \"none\";\n    this.iframe.setAttribute(\"sandbox\", attributes2.join(\" \"));\n    this.disableInteract();\n    this.wrapper.appendChild(this.iframe);\n    const iframeDoc = getIFrameContentDocument(this.iframe);\n    const iframeWindow = getIFrameContentWindow(this.iframe);\n    if (iframeWindow && iframeDoc) {\n      polyfill(iframeWindow, iframeDoc);\n      polyfill$1(iframeWindow);\n    }\n  }\n  rebuildFullSnapshot(event, isSync = false) {\n    const iframeDoc = getIFrameContentDocument(this.iframe);\n    if (!iframeDoc) {\n      return this.warn(\"Looks like your replayer has been destroyed.\");\n    }\n    if (Object.keys(this.legacy_missingNodeRetryMap).length) {\n      this.warn(\n        \"Found unresolved missing node map\",\n        this.legacy_missingNodeRetryMap\n      );\n    }\n    this.legacy_missingNodeRetryMap = {};\n    const collected = [];\n    const afterAppend = (builtNode, id) => {\n      this.collectIframeAndAttachDocument(collected, builtNode);\n      for (const plugin of this.config.plugins || []) {\n        if (plugin.onBuild)\n          plugin.onBuild(builtNode, {\n            id,\n            replayer: this\n          });\n      }\n    };\n    if (this.usingVirtualDom) {\n      this.virtualDom.destroyTree();\n      this.usingVirtualDom = false;\n    }\n    this.mirror.reset();\n    rebuild(event.data.node, {\n      doc: iframeDoc,\n      afterAppend,\n      cache: this.cache,\n      mirror: this.mirror\n    });\n    afterAppend(iframeDoc, event.data.node.id);\n    for (const { mutationInQueue, builtNode } of collected) {\n      this.attachDocumentToIframe(mutationInQueue, builtNode);\n      this.newDocumentQueue = this.newDocumentQueue.filter(\n        (m) => m !== mutationInQueue\n      );\n    }\n    const { documentElement, head } = iframeDoc;\n    this.insertStyleRules(documentElement, head);\n    if (!this.service.state.matches(\"playing\")) {\n      const iframeHtmlElement = iframeDoc.getElementsByTagName(\"html\")[0];\n      iframeHtmlElement && iframeHtmlElement.classList.add(\"rrweb-paused\");\n    }\n    this.emitter.emit(ReplayerEvents.FullsnapshotRebuilded, event);\n    if (!isSync) {\n      this.waitForStylesheetLoad();\n    }\n    if (this.config.UNSAFE_replayCanvas) {\n      void this.preloadAllImages();\n    }\n  }\n  insertStyleRules(documentElement, head) {\n    const injectStylesRules = rules(\n      this.config.blockClass\n    ).concat(this.config.insertStyleRules);\n    if (this.config.pauseAnimation) {\n      injectStylesRules.push(\n        \"html.rrweb-paused *, html.rrweb-paused *:before, html.rrweb-paused *:after { animation-play-state: paused !important; }\"\n      );\n    }\n    if (this.usingVirtualDom) {\n      const styleEl = this.virtualDom.createElement(\"style\");\n      this.virtualDom.mirror.add(\n        styleEl,\n        getDefaultSN(styleEl, this.virtualDom.unserializedId)\n      );\n      documentElement.insertBefore(styleEl, head);\n      styleEl.rules.push({\n        source: IncrementalSource.StyleSheetRule,\n        adds: injectStylesRules.map((cssText, index) => ({\n          rule: cssText,\n          index\n        }))\n      });\n    } else {\n      const styleEl = document.createElement(\"style\");\n      documentElement.insertBefore(\n        styleEl,\n        head\n      );\n      for (let idx = 0; idx < injectStylesRules.length; idx++) {\n        styleEl.sheet?.insertRule(injectStylesRules[idx], idx);\n      }\n    }\n  }\n  attachDocumentToIframe(mutation, iframeEl) {\n    const mirror2 = this.usingVirtualDom ? this.virtualDom.mirror : this.mirror;\n    const iframeContentDoc = getIFrameContentDocument(\n      iframeEl\n    );\n    const collected = [];\n    const afterAppend = (builtNode, id) => {\n      this.collectIframeAndAttachDocument(collected, builtNode);\n      const sn = mirror2.getMeta(builtNode);\n      if (sn?.type === NodeType$2.Element && sn?.tagName.toUpperCase() === \"HTML\" && iframeContentDoc) {\n        const { documentElement, head } = iframeContentDoc;\n        this.insertStyleRules(\n          documentElement,\n          head\n        );\n      }\n      if (this.usingVirtualDom) return;\n      for (const plugin of this.config.plugins || []) {\n        if (plugin.onBuild)\n          plugin.onBuild(builtNode, {\n            id,\n            replayer: this\n          });\n      }\n    };\n    buildNodeWithSN(mutation.node, {\n      doc: iframeContentDoc,\n      mirror: mirror2,\n      hackCss: true,\n      skipChild: false,\n      afterAppend,\n      cache: this.cache\n    });\n    afterAppend(iframeContentDoc, mutation.node.id);\n    for (const { mutationInQueue, builtNode } of collected) {\n      this.attachDocumentToIframe(mutationInQueue, builtNode);\n      this.newDocumentQueue = this.newDocumentQueue.filter(\n        (m) => m !== mutationInQueue\n      );\n    }\n  }\n  collectIframeAndAttachDocument(collected, builtNode) {\n    if (isSerializedIframe(builtNode, this.mirror)) {\n      const mutationInQueue = this.newDocumentQueue.find(\n        (m) => m.parentId === this.mirror.getId(builtNode)\n      );\n      if (mutationInQueue) {\n        collected.push({\n          mutationInQueue,\n          builtNode\n        });\n      }\n    }\n  }\n  /**\n   * pause when loading style sheet, resume when loaded all timeout exceed\n   */\n  waitForStylesheetLoad() {\n    const iframeDoc = getIFrameContentDocument(this.iframe);\n    const head = iframeDoc?.head;\n    if (head) {\n      const unloadSheets = /* @__PURE__ */ new Set();\n      let timer;\n      let beforeLoadState = this.service.state;\n      const stateHandler = () => {\n        beforeLoadState = this.service.state;\n      };\n      this.emitter.on(ReplayerEvents.Start, stateHandler);\n      this.emitter.on(ReplayerEvents.Pause, stateHandler);\n      const unsubscribe = () => {\n        this.emitter.off(ReplayerEvents.Start, stateHandler);\n        this.emitter.off(ReplayerEvents.Pause, stateHandler);\n      };\n      head.querySelectorAll('link[rel=\"stylesheet\"]').forEach((css) => {\n        if (!css.sheet) {\n          unloadSheets.add(css);\n          css.addEventListener(\"load\", () => {\n            unloadSheets.delete(css);\n            if (unloadSheets.size === 0 && timer !== -1) {\n              if (beforeLoadState.matches(\"playing\")) {\n                this.play(this.getCurrentTime());\n              }\n              this.emitter.emit(ReplayerEvents.LoadStylesheetEnd);\n              if (timer) {\n                clearTimeout(timer);\n              }\n              unsubscribe();\n            }\n          });\n        }\n      });\n      if (unloadSheets.size > 0) {\n        this.service.send({ type: \"PAUSE\" });\n        this.emitter.emit(ReplayerEvents.LoadStylesheetStart);\n        timer = setTimeout$1(() => {\n          if (beforeLoadState.matches(\"playing\")) {\n            this.play(this.getCurrentTime());\n          }\n          timer = -1;\n          unsubscribe();\n        }, this.config.loadTimeout);\n      }\n    }\n  }\n  /**\n   * pause when there are some canvas drawImage args need to be loaded\n   */\n  async preloadAllImages() {\n    const promises = [];\n    for (const event of this.service.state.context.events) {\n      if (event.type === EventType.IncrementalSnapshot && event.data.source === IncrementalSource.CanvasMutation) {\n        promises.push(\n          this.deserializeAndPreloadCanvasEvents(event.data, event)\n        );\n        const commands = \"commands\" in event.data ? event.data.commands : [event.data];\n        commands.forEach((c2) => {\n          this.preloadImages(c2, event);\n        });\n      }\n    }\n    return Promise.all(promises);\n  }\n  preloadImages(data, event) {\n    if (data.property === \"drawImage\" && typeof data.args[0] === \"string\" && !this.imageMap.has(event)) {\n      const canvas = document.createElement(\"canvas\");\n      const ctx = canvas.getContext(\"2d\");\n      const imgd = ctx?.createImageData(canvas.width, canvas.height);\n      ctx?.putImageData(imgd, 0, 0);\n    }\n  }\n  async deserializeAndPreloadCanvasEvents(data, event) {\n    if (!this.canvasEventMap.has(event)) {\n      const status = {\n        isUnchanged: true\n      };\n      if (\"commands\" in data) {\n        const commands = await Promise.all(\n          data.commands.map(async (c2) => {\n            const args = await Promise.all(\n              c2.args.map(deserializeArg(this.imageMap, null, status))\n            );\n            return { ...c2, args };\n          })\n        );\n        if (status.isUnchanged === false)\n          this.canvasEventMap.set(event, { ...data, commands });\n      } else {\n        const args = await Promise.all(\n          data.args.map(deserializeArg(this.imageMap, null, status))\n        );\n        if (status.isUnchanged === false)\n          this.canvasEventMap.set(event, { ...data, args });\n      }\n    }\n  }\n  applyIncremental(e2, isSync) {\n    const { data: d } = e2;\n    switch (d.source) {\n      case IncrementalSource.Mutation: {\n        try {\n          this.applyMutation(d, isSync);\n        } catch (error) {\n          this.warn(`Exception in mutation ${error.message || error}`, d);\n        }\n        break;\n      }\n      case IncrementalSource.Drag:\n      case IncrementalSource.TouchMove:\n      case IncrementalSource.MouseMove: {\n        const pointerId = getPointerId(d);\n        if (!this.pointers[pointerId]) {\n          this.createPointer(pointerId, e2);\n        }\n        const pointer = this.pointers[pointerId];\n        if (isSync) {\n          const lastPosition = d.positions[d.positions.length - 1];\n          pointer.pointerPosition = {\n            x: lastPosition.x,\n            y: lastPosition.y,\n            id: lastPosition.id,\n            debugData: d\n          };\n        } else {\n          d.positions.forEach((p) => {\n            const action = {\n              doAction: () => {\n                this.moveAndHover(p.x, p.y, p.id, isSync, d, pointerId);\n              },\n              delay: p.timeOffset + e2.timestamp - this.service.state.context.baselineTime\n            };\n            this.timer.addAction(action);\n          });\n          this.timer.addAction({\n            doAction() {\n            },\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            delay: e2.delay - d.positions[0]?.timeOffset\n          });\n        }\n        break;\n      }\n      case IncrementalSource.MouseInteraction: {\n        const pointerId = getPointerId(d);\n        if (!this.pointers[pointerId]) {\n          this.createPointer(pointerId, e2);\n        }\n        const pointer = this.pointers[pointerId];\n        if (d.id === -1) {\n          break;\n        }\n        const event = new Event(toLowerCase(MouseInteractions[d.type]));\n        const target = this.mirror.getNode(d.id);\n        if (!target) {\n          return this.debugNodeNotFound(d, d.id);\n        }\n        this.emitter.emit(ReplayerEvents.MouseInteraction, {\n          type: d.type,\n          target\n        });\n        const { triggerFocus } = this.config;\n        switch (d.type) {\n          case MouseInteractions.Blur:\n            if (\"blur\" in target) {\n              target.blur();\n            }\n            break;\n          case MouseInteractions.Focus:\n            if (triggerFocus && target.focus) {\n              target.focus({\n                preventScroll: true\n              });\n            }\n            break;\n          case MouseInteractions.Click:\n          case MouseInteractions.TouchStart:\n          case MouseInteractions.TouchEnd:\n          case MouseInteractions.MouseDown:\n          case MouseInteractions.MouseUp:\n            if (isSync) {\n              if (d.type === MouseInteractions.TouchStart) {\n                pointer.touchActive = true;\n                Object.values(this.pointers).forEach((p) => {\n                  if (p !== pointer && !p.touchActive) {\n                    p.touchActive = false;\n                  }\n                });\n              } else if (d.type === MouseInteractions.TouchEnd) {\n                pointer.touchActive = false;\n                pointer.pointerEl.remove();\n                if (pointer.mouseTail) {\n                  pointer.mouseTail.remove();\n                }\n                delete this.pointers[pointerId];\n              }\n              if (d.type === MouseInteractions.MouseDown) {\n                this.lastMouseDownEvent = [target, event];\n              } else if (d.type === MouseInteractions.MouseUp) {\n                this.lastMouseDownEvent = null;\n              }\n              pointer.pointerPosition = {\n                x: d.x || 0,\n                y: d.y || 0,\n                id: d.id,\n                debugData: d\n              };\n            } else {\n              if (d.type === MouseInteractions.TouchStart) {\n                pointer.tailPositions.length = 0;\n              }\n              this.moveAndHover(d.x || 0, d.y || 0, d.id, isSync, d, pointerId);\n              if (d.type === MouseInteractions.Click) {\n                pointer.pointerEl.classList.remove(\"active\");\n                void pointer.pointerEl.offsetWidth;\n                pointer.pointerEl.classList.add(\"active\");\n              } else if (d.type === MouseInteractions.TouchStart) {\n                void pointer.pointerEl.offsetWidth;\n                pointer.pointerEl.classList.add(\"touch-active\");\n              } else if (d.type === MouseInteractions.TouchEnd) {\n                pointer.pointerEl.remove();\n                if (pointer.mouseTail) {\n                  pointer.mouseTail.remove();\n                }\n                delete this.pointers[pointerId];\n              } else {\n                target.dispatchEvent(event);\n              }\n            }\n            break;\n          case MouseInteractions.TouchCancel:\n            if (isSync) {\n              pointer.touchActive = false;\n            } else {\n              pointer.pointerEl.classList.remove(\"touch-active\");\n            }\n            break;\n          default:\n            target.dispatchEvent(event);\n        }\n        break;\n      }\n      case IncrementalSource.Scroll: {\n        if (d.id === -1) {\n          break;\n        }\n        if (this.usingVirtualDom) {\n          const target = this.virtualDom.mirror.getNode(d.id);\n          if (!target) {\n            return this.debugNodeNotFound(d, d.id);\n          }\n          target.scrollData = d;\n          break;\n        }\n        this.applyScroll(d, isSync);\n        break;\n      }\n      case IncrementalSource.ViewportResize:\n        this.emitter.emit(ReplayerEvents.Resize, {\n          width: d.width,\n          height: d.height\n        });\n        break;\n      case IncrementalSource.Input: {\n        if (d.id === -1) {\n          break;\n        }\n        if (this.usingVirtualDom) {\n          const target = this.virtualDom.mirror.getNode(d.id);\n          if (!target) {\n            return this.debugNodeNotFound(d, d.id);\n          }\n          target.inputData = d;\n          break;\n        }\n        this.applyInput(d);\n        break;\n      }\n      case IncrementalSource.MediaInteraction: {\n        const target = this.usingVirtualDom ? this.virtualDom.mirror.getNode(d.id) : this.mirror.getNode(d.id);\n        if (!target) {\n          return this.debugNodeNotFound(d, d.id);\n        }\n        const mediaEl = target;\n        try {\n          if (d.currentTime !== void 0) {\n            mediaEl.currentTime = d.currentTime;\n          }\n          if (d.volume !== void 0) {\n            mediaEl.volume = d.volume;\n          }\n          if (d.muted !== void 0) {\n            mediaEl.muted = d.muted;\n          }\n          if (d.type === MediaInteractions.Pause) {\n            mediaEl.pause();\n          }\n          if (d.type === MediaInteractions.Play) {\n            void mediaEl.play();\n          }\n          if (d.type === MediaInteractions.RateChange) {\n            mediaEl.playbackRate = d.playbackRate;\n          }\n        } catch (error) {\n          this.warn(\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/restrict-template-expressions\n            `Failed to replay media interactions: ${error.message || error}`\n          );\n        }\n        break;\n      }\n      case IncrementalSource.StyleSheetRule:\n      case IncrementalSource.StyleDeclaration: {\n        if (this.usingVirtualDom) {\n          if (d.styleId) this.constructedStyleMutations.push(d);\n          else if (d.id)\n            this.virtualDom.mirror.getNode(d.id)?.rules?.push(d);\n        } else this.applyStyleSheetMutation(d);\n        break;\n      }\n      case IncrementalSource.CanvasMutation: {\n        if (!this.config.UNSAFE_replayCanvas) {\n          return;\n        }\n        if (this.usingVirtualDom) {\n          const target = this.virtualDom.mirror.getNode(\n            d.id\n          );\n          if (!target) {\n            return this.debugNodeNotFound(d, d.id);\n          }\n          target.canvasMutations.push({\n            event: e2,\n            mutation: d\n          });\n        } else {\n          const target = this.mirror.getNode(d.id);\n          if (!target) {\n            return this.debugNodeNotFound(d, d.id);\n          }\n          void canvasMutation({\n            event: e2,\n            mutation: d,\n            target,\n            imageMap: this.imageMap,\n            canvasEventMap: this.canvasEventMap,\n            errorHandler: this.warnCanvasMutationFailed.bind(this)\n          });\n        }\n        break;\n      }\n      case IncrementalSource.Font: {\n        try {\n          const fontFace = new FontFace(\n            d.family,\n            d.buffer ? new Uint8Array(JSON.parse(d.fontSource)) : d.fontSource,\n            d.descriptors\n          );\n          getIFrameContentDocument(this.iframe)?.fonts.add(fontFace);\n        } catch (error) {\n          this.warn(error);\n        }\n        break;\n      }\n      case IncrementalSource.Selection: {\n        if (isSync) {\n          this.lastSelectionData = d;\n          break;\n        }\n        this.applySelection(d);\n        break;\n      }\n      case IncrementalSource.AdoptedStyleSheet: {\n        if (this.usingVirtualDom) this.adoptedStyleSheets.push(d);\n        else this.applyAdoptedStyleSheet(d);\n        break;\n      }\n    }\n  }\n  applyMutation(d, isSync) {\n    if (this.config.useVirtualDom && !this.usingVirtualDom && isSync) {\n      this.usingVirtualDom = true;\n      const iframeDoc = getIFrameContentDocument(this.iframe);\n      if (iframeDoc) {\n        buildFromDom(iframeDoc, this.mirror, this.virtualDom);\n      }\n      if (Object.keys(this.legacy_missingNodeRetryMap).length) {\n        for (const key in this.legacy_missingNodeRetryMap) {\n          try {\n            const value = this.legacy_missingNodeRetryMap[key];\n            const virtualNode = buildFromNode(\n              value.node,\n              this.virtualDom,\n              this.mirror\n            );\n            if (virtualNode) value.node = virtualNode;\n          } catch (error) {\n            this.warn(error);\n          }\n        }\n      }\n    }\n    const mirror2 = this.usingVirtualDom ? this.virtualDom.mirror : this.mirror;\n    d.removes = d.removes.filter((mutation) => {\n      if (!mirror2.getNode(mutation.id)) {\n        this.warnNodeNotFound(d, mutation.id);\n        return false;\n      }\n      return true;\n    });\n    d.removes.forEach((mutation) => {\n      const target = mirror2.getNode(mutation.id);\n      if (!target) {\n        return;\n      }\n      let parent = mirror2.getNode(\n        mutation.parentId\n      );\n      if (!parent) {\n        return this.warnNodeNotFound(d, mutation.parentId);\n      }\n      if (mutation.isShadow && hasShadowRoot(parent)) {\n        parent = parent.shadowRoot;\n      }\n      mirror2.removeNodeFromMap(target);\n      if (parent)\n        try {\n          parent.removeChild(target);\n          if (this.usingVirtualDom && target.nodeName === \"#text\" && parent.nodeName === \"STYLE\" && parent.rules?.length > 0)\n            parent.rules = [];\n        } catch (error) {\n          if (error instanceof DOMException) {\n            this.warn(\n              \"parent could not remove child in mutation\",\n              parent,\n              target,\n              d\n            );\n          } else {\n            throw error;\n          }\n        }\n    });\n    const legacy_missingNodeMap = {\n      ...this.legacy_missingNodeRetryMap\n    };\n    const queue = [];\n    const nextNotInDOM = (mutation) => {\n      let next = null;\n      if (mutation.nextId) {\n        next = mirror2.getNode(mutation.nextId);\n      }\n      if (mutation.nextId !== null && mutation.nextId !== void 0 && mutation.nextId !== -1 && !next) {\n        return true;\n      }\n      return false;\n    };\n    const appendNode = (mutation) => {\n      const iframeDoc = getIFrameContentDocument(this.iframe);\n      if (!iframeDoc) {\n        return this.warn(\"Looks like your replayer has been destroyed.\");\n      }\n      let parent = mirror2.getNode(\n        mutation.parentId\n      );\n      if (!parent) {\n        if (mutation.node.type === NodeType$2.Document) {\n          return this.newDocumentQueue.push(mutation);\n        }\n        return queue.push(mutation);\n      }\n      if (mutation.node.isShadow) {\n        if (!hasShadowRoot(parent)) {\n          parent.attachShadow({ mode: \"open\" });\n          parent = parent.shadowRoot;\n        } else parent = parent.shadowRoot;\n      }\n      let previous = null;\n      let next = null;\n      if (mutation.previousId) {\n        previous = mirror2.getNode(mutation.previousId);\n      }\n      if (mutation.nextId) {\n        next = mirror2.getNode(mutation.nextId);\n      }\n      if (nextNotInDOM(mutation)) {\n        return queue.push(mutation);\n      }\n      if (mutation.node.rootId && !mirror2.getNode(mutation.node.rootId)) {\n        return;\n      }\n      const targetDoc = mutation.node.rootId ? mirror2.getNode(mutation.node.rootId) : this.usingVirtualDom ? this.virtualDom : iframeDoc;\n      if (isSerializedIframe(parent, mirror2)) {\n        this.attachDocumentToIframe(\n          mutation,\n          parent\n        );\n        return;\n      }\n      const afterAppend = (node, id) => {\n        if (this.usingVirtualDom) return;\n        for (const plugin of this.config.plugins || []) {\n          if (plugin.onBuild) plugin.onBuild(node, { id, replayer: this });\n        }\n      };\n      const target = buildNodeWithSN(mutation.node, {\n        doc: targetDoc,\n        // can be Document or RRDocument\n        mirror: mirror2,\n        // can be this.mirror or virtualDom.mirror\n        skipChild: true,\n        hackCss: true,\n        cache: this.cache,\n        /**\n         * caveat: `afterAppend` only gets called on child nodes of target\n         * we have to call it again below when this target was added to the DOM\n         */\n        afterAppend\n      });\n      if (mutation.previousId === -1 || mutation.nextId === -1) {\n        legacy_missingNodeMap[mutation.node.id] = {\n          node: target,\n          mutation\n        };\n        return;\n      }\n      const parentSn = mirror2.getMeta(parent);\n      if (parentSn && parentSn.type === NodeType$2.Element && parentSn.tagName === \"textarea\" && mutation.node.type === NodeType$2.Text) {\n        const childNodeArray = Array.isArray(parent.childNodes) ? parent.childNodes : Array.from(parent.childNodes);\n        for (const c2 of childNodeArray) {\n          if (c2.nodeType === parent.TEXT_NODE) {\n            parent.removeChild(c2);\n          }\n        }\n      } else if (parentSn?.type === NodeType$2.Document) {\n        const parentDoc = parent;\n        if (mutation.node.type === NodeType$2.DocumentType && parentDoc.childNodes[0]?.nodeType === Node.DOCUMENT_TYPE_NODE)\n          parentDoc.removeChild(parentDoc.childNodes[0]);\n        if (target.nodeName === \"HTML\" && parentDoc.documentElement)\n          parentDoc.removeChild(\n            parentDoc.documentElement\n          );\n      }\n      if (previous && previous.nextSibling && previous.nextSibling.parentNode) {\n        parent.insertBefore(\n          target,\n          previous.nextSibling\n        );\n      } else if (next && next.parentNode) {\n        parent.contains(next) ? parent.insertBefore(target, next) : parent.insertBefore(target, null);\n      } else {\n        parent.appendChild(target);\n      }\n      afterAppend(target, mutation.node.id);\n      if (this.usingVirtualDom && target.nodeName === \"#text\" && parent.nodeName === \"STYLE\" && parent.rules?.length > 0)\n        parent.rules = [];\n      if (isSerializedIframe(target, this.mirror)) {\n        const targetId = this.mirror.getId(target);\n        const mutationInQueue = this.newDocumentQueue.find(\n          (m) => m.parentId === targetId\n        );\n        if (mutationInQueue) {\n          this.attachDocumentToIframe(\n            mutationInQueue,\n            target\n          );\n          this.newDocumentQueue = this.newDocumentQueue.filter(\n            (m) => m !== mutationInQueue\n          );\n        }\n      }\n      if (mutation.previousId || mutation.nextId) {\n        this.legacy_resolveMissingNode(\n          legacy_missingNodeMap,\n          parent,\n          target,\n          mutation\n        );\n      }\n    };\n    d.adds.forEach((mutation) => {\n      appendNode(mutation);\n    });\n    const startTime = Date.now();\n    while (queue.length) {\n      const resolveTrees = queueToResolveTrees(queue);\n      queue.length = 0;\n      if (Date.now() - startTime > 500) {\n        this.warn(\n          \"Timeout in the loop, please check the resolve tree data:\",\n          resolveTrees\n        );\n        break;\n      }\n      for (const tree of resolveTrees) {\n        const parent = mirror2.getNode(tree.value.parentId);\n        if (!parent) {\n          this.debug(\n            \"Drop resolve tree since there is no parent for the root node.\",\n            tree\n          );\n        } else {\n          iterateResolveTree(tree, (mutation) => {\n            appendNode(mutation);\n          });\n        }\n      }\n    }\n    if (Object.keys(legacy_missingNodeMap).length) {\n      Object.assign(this.legacy_missingNodeRetryMap, legacy_missingNodeMap);\n    }\n    uniqueTextMutations(d.texts).forEach((mutation) => {\n      const target = mirror2.getNode(mutation.id);\n      if (!target) {\n        if (d.removes.find((r2) => r2.id === mutation.id)) {\n          return;\n        }\n        return this.warnNodeNotFound(d, mutation.id);\n      }\n      target.textContent = mutation.value;\n      if (this.usingVirtualDom) {\n        const parent = target.parentNode;\n        if (parent?.rules?.length > 0) parent.rules = [];\n      }\n    });\n    d.attributes.forEach((mutation) => {\n      const target = mirror2.getNode(mutation.id);\n      if (!target) {\n        if (d.removes.find((r2) => r2.id === mutation.id)) {\n          return;\n        }\n        return this.warnNodeNotFound(d, mutation.id);\n      }\n      for (const attributeName in mutation.attributes) {\n        if (typeof attributeName === \"string\") {\n          const value = mutation.attributes[attributeName];\n          if (value === null) {\n            target.removeAttribute(attributeName);\n          } else if (typeof value === \"string\") {\n            try {\n              if (attributeName === \"_cssText\" && (target.nodeName === \"LINK\" || target.nodeName === \"STYLE\")) {\n                try {\n                  const newSn = mirror2.getMeta(\n                    target\n                  );\n                  const newNode = buildNodeWithSN(\n                    {\n                      ...newSn,\n                      attributes: {\n                        ...newSn.attributes,\n                        ...mutation.attributes\n                      }\n                    },\n                    {\n                      doc: target.ownerDocument,\n                      // can be Document or RRDocument\n                      mirror: mirror2,\n                      skipChild: true,\n                      hackCss: true,\n                      cache: this.cache\n                    }\n                  );\n                  const siblingNode = target.nextSibling;\n                  const parentNode = target.parentNode;\n                  if (newNode && parentNode) {\n                    parentNode.removeChild(target);\n                    parentNode.insertBefore(\n                      newNode,\n                      siblingNode\n                    );\n                    mirror2.replace(mutation.id, newNode);\n                    break;\n                  }\n                } catch (e2) {\n                }\n              }\n              target.setAttribute(\n                attributeName,\n                value\n              );\n            } catch (error) {\n              this.warn(\n                \"An error occurred may due to the checkout feature.\",\n                error\n              );\n            }\n          } else if (attributeName === \"style\") {\n            const styleValues = value;\n            const targetEl = target;\n            for (const s2 in styleValues) {\n              if (styleValues[s2] === false) {\n                targetEl.style.removeProperty(s2);\n              } else if (styleValues[s2] instanceof Array) {\n                const svp = styleValues[s2];\n                targetEl.style.setProperty(s2, svp[0], svp[1]);\n              } else {\n                const svs = styleValues[s2];\n                targetEl.style.setProperty(s2, svs);\n              }\n            }\n          }\n        }\n      }\n    });\n  }\n  /**\n   * Apply the scroll data on real elements.\n   * If the replayer is in sync mode, smooth scroll behavior should be disabled.\n   * @param d - the scroll data\n   * @param isSync - whether the replayer is in sync mode(fast-forward)\n   */\n  applyScroll(d, isSync) {\n    const target = this.mirror.getNode(d.id);\n    if (!target) {\n      return this.debugNodeNotFound(d, d.id);\n    }\n    const sn = this.mirror.getMeta(target);\n    const iframeDoc = getIFrameContentDocument(this.iframe);\n    if (target === iframeDoc) {\n      this.iframe.contentWindow?.scrollTo({\n        top: d.y,\n        left: d.x,\n        behavior: isSync ? \"auto\" : \"smooth\"\n      });\n    } else if (sn?.type === NodeType$2.Document) {\n      target.defaultView?.scrollTo({\n        top: d.y,\n        left: d.x,\n        behavior: isSync ? \"auto\" : \"smooth\"\n      });\n    } else {\n      try {\n        target.scrollTo({\n          top: d.y,\n          left: d.x,\n          behavior: isSync ? \"auto\" : \"smooth\"\n        });\n      } catch (error) {\n      }\n    }\n  }\n  applyInput(d) {\n    const target = this.mirror.getNode(d.id);\n    if (!target) {\n      return this.debugNodeNotFound(d, d.id);\n    }\n    try {\n      target.checked = d.isChecked;\n      target.value = d.text;\n    } catch (error) {\n    }\n  }\n  applySelection(d) {\n    try {\n      const selectionSet = /* @__PURE__ */ new Set();\n      const ranges = d.ranges.map(({ start, startOffset, end, endOffset }) => {\n        const startContainer = this.mirror.getNode(start);\n        const endContainer = this.mirror.getNode(end);\n        if (!startContainer || !endContainer) return;\n        const result = new Range();\n        result.setStart(startContainer, startOffset);\n        result.setEnd(endContainer, endOffset);\n        const doc = startContainer.ownerDocument;\n        const selection = doc?.getSelection();\n        selection && selectionSet.add(selection);\n        return {\n          range: result,\n          selection\n        };\n      });\n      selectionSet.forEach((s2) => s2.removeAllRanges());\n      ranges.forEach((r2) => r2 && r2.selection?.addRange(r2.range));\n    } catch (error) {\n    }\n  }\n  applyStyleSheetMutation(data) {\n    let styleSheet = null;\n    if (data.styleId) styleSheet = this.styleMirror.getStyle(data.styleId);\n    else if (data.id)\n      styleSheet = this.mirror.getNode(data.id)?.sheet || null;\n    if (!styleSheet) return;\n    if (data.source === IncrementalSource.StyleSheetRule)\n      this.applyStyleSheetRule(data, styleSheet);\n    else if (data.source === IncrementalSource.StyleDeclaration)\n      this.applyStyleDeclaration(data, styleSheet);\n  }\n  applyStyleSheetRule(data, styleSheet) {\n    data.adds?.forEach(({ rule, index: nestedIndex }) => {\n      try {\n        if (Array.isArray(nestedIndex)) {\n          const { positions, index } = getPositionsAndIndex(nestedIndex);\n          const nestedRule = getNestedRule(styleSheet.cssRules, positions);\n          nestedRule.insertRule(rule, index);\n        } else {\n          const index = nestedIndex === void 0 ? void 0 : Math.min(nestedIndex, styleSheet.cssRules.length);\n          styleSheet?.insertRule(rule, index);\n        }\n      } catch (e2) {\n      }\n    });\n    data.removes?.forEach(({ index: nestedIndex }) => {\n      try {\n        if (Array.isArray(nestedIndex)) {\n          const { positions, index } = getPositionsAndIndex(nestedIndex);\n          const nestedRule = getNestedRule(styleSheet.cssRules, positions);\n          nestedRule.deleteRule(index || 0);\n        } else {\n          styleSheet?.deleteRule(nestedIndex);\n        }\n      } catch (e2) {\n      }\n    });\n    if (data.replace)\n      try {\n        void styleSheet.replace?.(data.replace);\n      } catch (e2) {\n      }\n    if (data.replaceSync)\n      try {\n        styleSheet.replaceSync?.(data.replaceSync);\n      } catch (e2) {\n      }\n  }\n  applyStyleDeclaration(data, styleSheet) {\n    if (data.set) {\n      const rule = getNestedRule(\n        styleSheet.rules,\n        data.index\n      );\n      rule && rule.style && rule.style.setProperty(\n        data.set.property,\n        data.set.value,\n        data.set.priority\n      );\n    }\n    if (data.remove) {\n      const rule = getNestedRule(\n        styleSheet.rules,\n        data.index\n      );\n      rule && rule.style && rule.style.removeProperty(data.remove.property);\n    }\n  }\n  applyAdoptedStyleSheet(data) {\n    const targetHost = this.mirror.getNode(data.id);\n    if (!targetHost) return;\n    data.styles?.forEach((style) => {\n      let newStyleSheet = null;\n      let hostWindow = null;\n      if (hasShadowRoot(targetHost))\n        hostWindow = targetHost.ownerDocument?.defaultView || null;\n      else if (targetHost.nodeName === \"#document\")\n        hostWindow = targetHost.defaultView;\n      if (!hostWindow) return;\n      try {\n        newStyleSheet = new hostWindow.CSSStyleSheet();\n        this.styleMirror.add(newStyleSheet, style.styleId);\n        this.applyStyleSheetRule(\n          {\n            source: IncrementalSource.StyleSheetRule,\n            adds: style.rules\n          },\n          newStyleSheet\n        );\n      } catch (e2) {\n      }\n    });\n    const MAX_RETRY_TIME = 10;\n    let count = 0;\n    const adoptStyleSheets = (targetHost2, styleIds) => {\n      const stylesToAdopt = styleIds.map((styleId) => this.styleMirror.getStyle(styleId)).filter((style) => style !== null);\n      if (hasShadowRoot(targetHost2))\n        targetHost2.shadowRoot.adoptedStyleSheets = stylesToAdopt;\n      else if (targetHost2.nodeName === \"#document\")\n        targetHost2.adoptedStyleSheets = stylesToAdopt;\n      if (stylesToAdopt.length !== styleIds.length && count < MAX_RETRY_TIME) {\n        setTimeout$1(\n          () => adoptStyleSheets(targetHost2, styleIds),\n          0 + 100 * count\n        );\n        count++;\n      }\n    };\n    adoptStyleSheets(targetHost, data.styleIds);\n  }\n  legacy_resolveMissingNode(map, parent, target, targetMutation) {\n    const { previousId, nextId } = targetMutation;\n    const previousInMap = previousId && map[previousId];\n    const nextInMap = nextId && map[nextId];\n    if (previousInMap) {\n      const { node, mutation } = previousInMap;\n      parent.insertBefore(node, target);\n      delete map[mutation.node.id];\n      delete this.legacy_missingNodeRetryMap[mutation.node.id];\n      if (mutation.previousId || mutation.nextId) {\n        this.legacy_resolveMissingNode(map, parent, node, mutation);\n      }\n    }\n    if (nextInMap) {\n      const { node, mutation } = nextInMap;\n      parent.insertBefore(\n        node,\n        target.nextSibling\n      );\n      delete map[mutation.node.id];\n      delete this.legacy_missingNodeRetryMap[mutation.node.id];\n      if (mutation.previousId || mutation.nextId) {\n        this.legacy_resolveMissingNode(map, parent, node, mutation);\n      }\n    }\n  }\n  moveAndHover(x, y, id, isSync, debugData, pointerId) {\n    const target = this.mirror.getNode(id);\n    if (!target) {\n      return this.debugNodeNotFound(debugData, id);\n    }\n    const base = getBaseDimension(target, this.iframe);\n    const _x = x * base.absoluteScale + base.x;\n    const _y = y * base.absoluteScale + base.y;\n    const pointer = this.pointers[pointerId];\n    if (pointer && pointer.pointerEl) {\n      pointer.pointerEl.style.left = `${_x}px`;\n      pointer.pointerEl.style.top = `${_y}px`;\n    }\n    if (!isSync) {\n      this.drawMouseTail({ x: _x, y: _y }, pointerId);\n    }\n    this.hoverElements(target);\n  }\n  drawMouseTail(position, pointerId) {\n    const pointer = this.pointers[pointerId];\n    if (!pointer || !pointer.mouseTail) {\n      return;\n    }\n    const { lineCap, lineWidth, strokeStyle, duration } = this.config.mouseTail === true ? defaultMouseTailConfig : Object.assign({}, defaultMouseTailConfig, this.config.mouseTail);\n    const draw = () => {\n      if (!pointer || !pointer.mouseTail) {\n        return;\n      }\n      const mouseTail = pointer.mouseTail;\n      const ctx = mouseTail.getContext(\"2d\");\n      if (!ctx || !pointer.tailPositions.length) {\n        return;\n      }\n      ctx.clearRect(0, 0, mouseTail.width, mouseTail.height);\n      ctx.beginPath();\n      ctx.lineWidth = lineWidth;\n      ctx.lineCap = lineCap;\n      ctx.strokeStyle = strokeStyle;\n      ctx.moveTo(pointer.tailPositions[0].x, pointer.tailPositions[0].y);\n      pointer.tailPositions.forEach((p) => ctx.lineTo(p.x, p.y));\n      ctx.stroke();\n    };\n    pointer.tailPositions.push(position);\n    draw();\n    setTimeout$1(() => {\n      if (pointerId in this.pointers) {\n        pointer.tailPositions = pointer.tailPositions.filter(\n          (p) => p !== position\n        );\n        draw();\n      }\n    }, duration / this.speedService.state.context.timer.speed);\n  }\n  hoverElements(el) {\n    const iframeDoc = getIFrameContentDocument(this.iframe);\n    const rootElement = this.lastHoveredRootNode || iframeDoc;\n    if (rootElement && typeof rootElement.querySelectorAll === \"function\") {\n      rootElement.querySelectorAll(\".\\\\:hover\").forEach((hoveredEl) => {\n        hoveredEl.classList.remove(\":hover\");\n      });\n    }\n    this.lastHoveredRootNode = el.getRootNode();\n    let currentEl = el;\n    while (currentEl) {\n      if (currentEl.classList) {\n        currentEl.classList.add(\":hover\");\n      }\n      currentEl = currentEl.parentElement;\n    }\n  }\n  isUserInteraction(event) {\n    if (event.type !== EventType.IncrementalSnapshot) {\n      return false;\n    }\n    return event.data.source > IncrementalSource.Mutation && event.data.source <= IncrementalSource.Input;\n  }\n  backToNormal() {\n    this.nextUserInteractionEvent = null;\n    if (this.speedService.state.matches(\"normal\")) {\n      return;\n    }\n    this.speedService.send({ type: \"BACK_TO_NORMAL\" });\n    this.emitter.emit(ReplayerEvents.SkipEnd, {\n      speed: this.speedService.state.context.normalSpeed\n    });\n  }\n  warnNodeNotFound(d, id) {\n    this.warn(`Node with id '${id}' not found. `, d);\n  }\n  warnCanvasMutationFailed(d, error) {\n    this.warn(`Has error on canvas update`, error, \"canvas mutation:\", d);\n  }\n  debugNodeNotFound(d, id) {\n    this.debug(`Node with id '${id}' not found. `, d);\n  }\n  warn(...args) {\n    if (!this.config.showWarning) {\n      return;\n    }\n    this.config.logger.warn(REPLAY_CONSOLE_PREFIX, ...args);\n  }\n  debug(...args) {\n    if (!this.config.showDebug) {\n      return;\n    }\n    this.config.logger.log(REPLAY_CONSOLE_PREFIX, ...args);\n  }\n}\nexport {\n  CanvasManager,\n  EventType,\n  IncrementalSource,\n  MouseInteractions,\n  Replayer,\n  ReplayerEvents,\n  addCustomEvent,\n  canvasMutation,\n  deserializeArg,\n  freezePage,\n  record,\n  takeFullSnapshot,\n  utils\n};\n//# sourceMappingURL=rrweb.js.map\n","/**\n * Converts a timestamp to ms, if it was in s, or keeps it as ms.\n */\nexport function timestampToMs(timestamp: number): number {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp : timestamp * 1000;\n}\n\n/**\n * Converts a timestamp to s, if it was in ms, or keeps it as s.\n */\nexport function timestampToS(timestamp: number): number {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp / 1000 : timestamp;\n}\n","import { EventType } from '@sentry-internal/rrweb';\nimport { normalize } from '@sentry/core';\nimport type { Breadcrumb } from '@sentry/core';\n\nimport type { ReplayContainer } from '../../types';\n\n/**\n * Add a breadcrumb event to replay.\n */\nexport function addBreadcrumbEvent(replay: ReplayContainer, breadcrumb: Breadcrumb): void {\n  if (breadcrumb.category === 'sentry.transaction') {\n    return;\n  }\n\n  if (['ui.click', 'ui.input'].includes(breadcrumb.category as string)) {\n    replay.triggerUserActivity();\n  } else {\n    replay.checkAndHandleExpiredSession();\n  }\n\n  replay.addUpdate(() => {\n    // This should never reject\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    replay.throttledAddEvent({\n      type: EventType.Custom,\n      // TODO: We were converting from ms to seconds for breadcrumbs, spans,\n      // but maybe we should just keep them as milliseconds\n      timestamp: (breadcrumb.timestamp || 0) * 1000,\n      data: {\n        tag: 'breadcrumb',\n        // normalize to max. 10 depth and 1_000 properties per object\n        payload: normalize(breadcrumb, 10, 1_000),\n      },\n    });\n\n    // Do not flush after console log messages\n    return breadcrumb.category === 'console';\n  });\n}\n","import type { INode } from '@sentry-internal/rrweb-snapshot';\n\nconst INTERACTIVE_SELECTOR = 'button,a';\n\n/** Get the closest interactive parent element, or else return the given element. */\nexport function getClosestInteractive(element: Element): Element {\n  const closestInteractive = element.closest(INTERACTIVE_SELECTOR);\n  return closestInteractive || element;\n}\n\n/**\n * For clicks, we check if the target is inside of a button or link\n * If so, we use this as the target instead\n * This is useful because if you click on the image in <button><img></button>,\n * The target will be the image, not the button, which we don't want here\n */\nexport function getClickTargetNode(event: Event | MouseEvent | Node): Node | INode | null {\n  const target = getTargetNode(event);\n\n  if (!target || !(target instanceof Element)) {\n    return target;\n  }\n\n  return getClosestInteractive(target);\n}\n\n/** Get the event target node. */\nexport function getTargetNode(event: Node | { target: EventTarget | null }): Node | INode | null {\n  if (isEventWithTarget(event)) {\n    return event.target as Node | null;\n  }\n\n  return event;\n}\n\nfunction isEventWithTarget(event: unknown): event is { target: EventTarget | null } {\n  return typeof event === 'object' && !!event && 'target' in event;\n}\n","import { fill } from '@sentry/core';\n\nimport { WINDOW } from '../../constants';\n\ntype WindowOpenHandler = () => void;\n\nlet handlers: undefined | WindowOpenHandler[];\n\n/**\n * Register a handler to be called when `window.open()` is called.\n * Returns a cleanup function.\n */\nexport function onWindowOpen(cb: WindowOpenHandler): () => void {\n  // Ensure to only register this once\n  if (!handlers) {\n    handlers = [];\n    monkeyPatchWindowOpen();\n  }\n\n  handlers.push(cb);\n\n  return () => {\n    const pos = handlers ? handlers.indexOf(cb) : -1;\n    if (pos > -1) {\n      (handlers as WindowOpenHandler[]).splice(pos, 1);\n    }\n  };\n}\n\nfunction monkeyPatchWindowOpen(): void {\n  fill(WINDOW, 'open', function (originalWindowOpen: () => void): () => void {\n    return function (...args: unknown[]): void {\n      if (handlers) {\n        try {\n          handlers.forEach(handler => handler());\n        } catch (e) {\n          // ignore errors in here\n        }\n      }\n\n      return originalWindowOpen.apply(WINDOW, args);\n    };\n  });\n}\n","import { setTimeout } from '@sentry-internal/browser-utils';\nimport { IncrementalSource, MouseInteractions, record } from '@sentry-internal/rrweb';\nimport type { Breadcrumb } from '@sentry/core';\n\nimport { WINDOW } from '../constants';\nimport type {\n  RecordingEvent,\n  ReplayClickDetector,\n  ReplayContainer,\n  ReplayMultiClickFrame,\n  ReplaySlowClickFrame,\n  SlowClickConfig,\n} from '../types';\nimport { ReplayEventTypeIncrementalSnapshot } from '../types';\nimport { timestampToS } from '../util/timestamp';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\nimport { getClosestInteractive } from './util/domUtils';\nimport { onWindowOpen } from './util/onWindowOpen';\n\ntype ClickBreadcrumb = Breadcrumb & {\n  timestamp: number;\n};\n\ninterface Click {\n  timestamp: number;\n  mutationAfter?: number;\n  scrollAfter?: number;\n  clickBreadcrumb: ClickBreadcrumb;\n  clickCount: number;\n  node: HTMLElement;\n}\n\ntype IncrementalRecordingEvent = RecordingEvent & {\n  type: typeof ReplayEventTypeIncrementalSnapshot;\n  data: { source: IncrementalSource };\n};\n\ntype IncrementalMouseInteractionRecordingEvent = IncrementalRecordingEvent & {\n  type: typeof ReplayEventTypeIncrementalSnapshot;\n  data: { type: MouseInteractions; id: number };\n};\n\n/** Any IncrementalSource for rrweb that we interpret as a kind of mutation. */\nconst IncrementalMutationSources = new Set([\n  IncrementalSource.Mutation,\n  IncrementalSource.StyleSheetRule,\n  IncrementalSource.StyleDeclaration,\n  IncrementalSource.AdoptedStyleSheet,\n  IncrementalSource.CanvasMutation,\n  IncrementalSource.Selection,\n  IncrementalSource.MediaInteraction,\n]);\n\n/** Handle a click. */\nexport function handleClick(clickDetector: ReplayClickDetector, clickBreadcrumb: Breadcrumb, node: HTMLElement): void {\n  clickDetector.handleClick(clickBreadcrumb, node);\n}\n\n/** A click detector class that can be used to detect slow or rage clicks on elements. */\nexport class ClickDetector implements ReplayClickDetector {\n  // protected for testing\n  protected _lastMutation: number;\n  protected _lastScroll: number;\n\n  private _clicks: Click[];\n  private _teardown: undefined | (() => void);\n\n  private _threshold: number;\n  private _scrollTimeout: number;\n  private _timeout: number;\n  private _ignoreSelector: string;\n\n  private _replay: ReplayContainer;\n  private _checkClickTimeout?: ReturnType<typeof setTimeout>;\n  private _addBreadcrumbEvent: typeof addBreadcrumbEvent;\n\n  public constructor(\n    replay: ReplayContainer,\n    slowClickConfig: SlowClickConfig,\n    // Just for easier testing\n    _addBreadcrumbEvent = addBreadcrumbEvent,\n  ) {\n    this._lastMutation = 0;\n    this._lastScroll = 0;\n    this._clicks = [];\n\n    // We want everything in s, but options are in ms\n    this._timeout = slowClickConfig.timeout / 1000;\n    this._threshold = slowClickConfig.threshold / 1000;\n    this._scrollTimeout = slowClickConfig.scrollTimeout / 1000;\n    this._replay = replay;\n    this._ignoreSelector = slowClickConfig.ignoreSelector;\n    this._addBreadcrumbEvent = _addBreadcrumbEvent;\n  }\n\n  /** Register click detection handlers on mutation or scroll. */\n  public addListeners(): void {\n    const cleanupWindowOpen = onWindowOpen(() => {\n      // Treat window.open as mutation\n      this._lastMutation = nowInSeconds();\n    });\n\n    this._teardown = () => {\n      cleanupWindowOpen();\n\n      this._clicks = [];\n      this._lastMutation = 0;\n      this._lastScroll = 0;\n    };\n  }\n\n  /** Clean up listeners. */\n  public removeListeners(): void {\n    if (this._teardown) {\n      this._teardown();\n    }\n\n    if (this._checkClickTimeout) {\n      clearTimeout(this._checkClickTimeout);\n    }\n  }\n\n  /** @inheritDoc */\n  public handleClick(breadcrumb: Breadcrumb, node: HTMLElement): void {\n    if (ignoreElement(node, this._ignoreSelector) || !isClickBreadcrumb(breadcrumb)) {\n      return;\n    }\n\n    const newClick: Click = {\n      timestamp: timestampToS(breadcrumb.timestamp),\n      clickBreadcrumb: breadcrumb,\n      // Set this to 0 so we know it originates from the click breadcrumb\n      clickCount: 0,\n      node,\n    };\n\n    // If there was a click in the last 1s on the same element, ignore it - only keep a single reference per second\n    if (\n      this._clicks.some(click => click.node === newClick.node && Math.abs(click.timestamp - newClick.timestamp) < 1)\n    ) {\n      return;\n    }\n\n    this._clicks.push(newClick);\n\n    // If this is the first new click, set a timeout to check for multi clicks\n    if (this._clicks.length === 1) {\n      this._scheduleCheckClicks();\n    }\n  }\n\n  /** @inheritDoc */\n  public registerMutation(timestamp = Date.now()): void {\n    this._lastMutation = timestampToS(timestamp);\n  }\n\n  /** @inheritDoc */\n  public registerScroll(timestamp = Date.now()): void {\n    this._lastScroll = timestampToS(timestamp);\n  }\n\n  /** @inheritDoc */\n  public registerClick(element: HTMLElement): void {\n    const node = getClosestInteractive(element);\n    this._handleMultiClick(node as HTMLElement);\n  }\n\n  /** Count multiple clicks on elements. */\n  private _handleMultiClick(node: HTMLElement): void {\n    this._getClicks(node).forEach(click => {\n      click.clickCount++;\n    });\n  }\n\n  /** Get all pending clicks for a given node. */\n  private _getClicks(node: HTMLElement): Click[] {\n    return this._clicks.filter(click => click.node === node);\n  }\n\n  /** Check the clicks that happened. */\n  private _checkClicks(): void {\n    const timedOutClicks: Click[] = [];\n\n    const now = nowInSeconds();\n\n    this._clicks.forEach(click => {\n      if (!click.mutationAfter && this._lastMutation) {\n        click.mutationAfter = click.timestamp <= this._lastMutation ? this._lastMutation - click.timestamp : undefined;\n      }\n      if (!click.scrollAfter && this._lastScroll) {\n        click.scrollAfter = click.timestamp <= this._lastScroll ? this._lastScroll - click.timestamp : undefined;\n      }\n\n      // All of these are in seconds!\n      if (click.timestamp + this._timeout <= now) {\n        timedOutClicks.push(click);\n      }\n    });\n\n    // Remove \"old\" clicks\n    for (const click of timedOutClicks) {\n      const pos = this._clicks.indexOf(click);\n\n      if (pos > -1) {\n        this._generateBreadcrumbs(click);\n        this._clicks.splice(pos, 1);\n      }\n    }\n\n    // Trigger new check, unless no clicks left\n    if (this._clicks.length) {\n      this._scheduleCheckClicks();\n    }\n  }\n\n  /** Generate matching breadcrumb(s) for the click. */\n  private _generateBreadcrumbs(click: Click): void {\n    const replay = this._replay;\n    const hadScroll = click.scrollAfter && click.scrollAfter <= this._scrollTimeout;\n    const hadMutation = click.mutationAfter && click.mutationAfter <= this._threshold;\n\n    const isSlowClick = !hadScroll && !hadMutation;\n    const { clickCount, clickBreadcrumb } = click;\n\n    // Slow click\n    if (isSlowClick) {\n      // If `mutationAfter` is set, it means a mutation happened after the threshold, but before the timeout\n      // If not, it means we just timed out without scroll & mutation\n      const timeAfterClickMs = Math.min(click.mutationAfter || this._timeout, this._timeout) * 1000;\n      const endReason = timeAfterClickMs < this._timeout * 1000 ? 'mutation' : 'timeout';\n\n      const breadcrumb: ReplaySlowClickFrame = {\n        type: 'default',\n        message: clickBreadcrumb.message,\n        timestamp: clickBreadcrumb.timestamp,\n        category: 'ui.slowClickDetected',\n        data: {\n          ...clickBreadcrumb.data,\n          url: WINDOW.location.href,\n          route: replay.getCurrentRoute(),\n          timeAfterClickMs,\n          endReason,\n          // If clickCount === 0, it means multiClick was not correctly captured here\n          // - we still want to send 1 in this case\n          clickCount: clickCount || 1,\n        },\n      };\n\n      this._addBreadcrumbEvent(replay, breadcrumb);\n      return;\n    }\n\n    // Multi click\n    if (clickCount > 1) {\n      const breadcrumb: ReplayMultiClickFrame = {\n        type: 'default',\n        message: clickBreadcrumb.message,\n        timestamp: clickBreadcrumb.timestamp,\n        category: 'ui.multiClick',\n        data: {\n          ...clickBreadcrumb.data,\n          url: WINDOW.location.href,\n          route: replay.getCurrentRoute(),\n          clickCount,\n          metric: true,\n        },\n      };\n\n      this._addBreadcrumbEvent(replay, breadcrumb);\n    }\n  }\n\n  /** Schedule to check current clicks. */\n  private _scheduleCheckClicks(): void {\n    if (this._checkClickTimeout) {\n      clearTimeout(this._checkClickTimeout);\n    }\n\n    this._checkClickTimeout = setTimeout(() => this._checkClicks(), 1000);\n  }\n}\n\nconst SLOW_CLICK_TAGS = ['A', 'BUTTON', 'INPUT'];\n\n/** exported for tests only */\nexport function ignoreElement(node: HTMLElement, ignoreSelector: string): boolean {\n  if (!SLOW_CLICK_TAGS.includes(node.tagName)) {\n    return true;\n  }\n\n  // If <input> tag, we only want to consider input[type='submit'] & input[type='button']\n  if (node.tagName === 'INPUT' && !['submit', 'button'].includes(node.getAttribute('type') || '')) {\n    return true;\n  }\n\n  // If <a> tag, detect special variants that may not lead to an action\n  // If target !== _self, we may open the link somewhere else, which would lead to no action\n  // Also, when downloading a file, we may not leave the page, but still not trigger an action\n  if (\n    node.tagName === 'A' &&\n    (node.hasAttribute('download') || (node.hasAttribute('target') && node.getAttribute('target') !== '_self'))\n  ) {\n    return true;\n  }\n\n  if (ignoreSelector && node.matches(ignoreSelector)) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction isClickBreadcrumb(breadcrumb: Breadcrumb): breadcrumb is ClickBreadcrumb {\n  return !!(breadcrumb.data && typeof breadcrumb.data.nodeId === 'number' && breadcrumb.timestamp);\n}\n\n// This is good enough for us, and is easier to test/mock than `timestampInSeconds`\nfunction nowInSeconds(): number {\n  return Date.now() / 1000;\n}\n\n/** Update the click detector based on a recording event of rrweb. */\nexport function updateClickDetectorForRecordingEvent(clickDetector: ReplayClickDetector, event: RecordingEvent): void {\n  try {\n    // note: We only consider incremental snapshots here\n    // This means that any full snapshot is ignored for mutation detection - the reason is that we simply cannot know if a mutation happened here.\n    // E.g. think that we are buffering, an error happens and we take a full snapshot because we switched to session mode -\n    // in this scenario, we would not know if a dead click happened because of the error, which is a key dead click scenario.\n    // Instead, by ignoring full snapshots, we have the risk that we generate a false positive\n    // (if a mutation _did_ happen but was \"swallowed\" by the full snapshot)\n    // But this should be more unlikely as we'd generally capture the incremental snapshot right away\n\n    if (!isIncrementalEvent(event)) {\n      return;\n    }\n\n    const { source } = event.data;\n    if (IncrementalMutationSources.has(source)) {\n      clickDetector.registerMutation(event.timestamp);\n    }\n\n    if (source === IncrementalSource.Scroll) {\n      clickDetector.registerScroll(event.timestamp);\n    }\n\n    if (isIncrementalMouseInteraction(event)) {\n      const { type, id } = event.data;\n      const node = record.mirror.getNode(id);\n\n      if (node instanceof HTMLElement && type === MouseInteractions.Click) {\n        clickDetector.registerClick(node);\n      }\n    }\n  } catch {\n    // ignore errors here, e.g. if accessing something that does not exist\n  }\n}\n\nfunction isIncrementalEvent(event: RecordingEvent): event is IncrementalRecordingEvent {\n  return event.type === ReplayEventTypeIncrementalSnapshot;\n}\n\nfunction isIncrementalMouseInteraction(\n  event: IncrementalRecordingEvent,\n): event is IncrementalMouseInteractionRecordingEvent {\n  return event.data.source === IncrementalSource.MouseInteraction;\n}\n","import type { ReplayBreadcrumbFrame } from '../types/replayFrame';\n\n/**\n * Create a breadcrumb for a replay.\n */\nexport function createBreadcrumb(\n  breadcrumb: Omit<ReplayBreadcrumbFrame, 'timestamp' | 'type'> & Partial<Pick<ReplayBreadcrumbFrame, 'timestamp'>>,\n): ReplayBreadcrumbFrame {\n  return {\n    timestamp: Date.now() / 1000,\n    type: 'default',\n    ...breadcrumb,\n  };\n}\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar NodeType = /* @__PURE__ */ ((NodeType2) => {\n  NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n  NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n  NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n  NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n  NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n  NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n  return NodeType2;\n})(NodeType || {});\nfunction isElement(n) {\n  return n.nodeType === n.ELEMENT_NODE;\n}\nfunction isShadowRoot(n) {\n  const host = n?.host;\n  return Boolean(host?.shadowRoot === n);\n}\nfunction isNativeShadowDom(shadowRoot) {\n  return Object.prototype.toString.call(shadowRoot) === \"[object ShadowRoot]\";\n}\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\n  if (cssText.includes(\" background-clip: text;\") && !cssText.includes(\" -webkit-background-clip: text;\")) {\n    cssText = cssText.replace(\n      /\\sbackground-clip:\\s*text;/g,\n      \" -webkit-background-clip: text; background-clip: text;\"\n    );\n  }\n  return cssText;\n}\nfunction escapeImportStatement(rule) {\n  const { cssText } = rule;\n  if (cssText.split('\"').length < 3) return cssText;\n  const statement = [\"@import\", `url(${JSON.stringify(rule.href)})`];\n  if (rule.layerName === \"\") {\n    statement.push(`layer`);\n  } else if (rule.layerName) {\n    statement.push(`layer(${rule.layerName})`);\n  }\n  if (rule.supportsText) {\n    statement.push(`supports(${rule.supportsText})`);\n  }\n  if (rule.media.length) {\n    statement.push(rule.media.mediaText);\n  }\n  return statement.join(\" \") + \";\";\n}\nfunction stringifyStylesheet(s) {\n  try {\n    const rules = s.rules || s.cssRules;\n    return rules ? fixBrowserCompatibilityIssuesInCSS(\n      Array.from(rules, stringifyRule).join(\"\")\n    ) : null;\n  } catch (error) {\n    return null;\n  }\n}\nfunction fixAllCssProperty(rule) {\n  let styles = \"\";\n  for (let i = 0; i < rule.style.length; i++) {\n    const styleDeclaration = rule.style;\n    const attribute = styleDeclaration[i];\n    const isImportant = styleDeclaration.getPropertyPriority(attribute);\n    styles += `${attribute}:${styleDeclaration.getPropertyValue(attribute)}${isImportant ? ` !important` : \"\"};`;\n  }\n  return `${rule.selectorText} { ${styles} }`;\n}\nfunction stringifyRule(rule) {\n  let importStringified;\n  if (isCSSImportRule(rule)) {\n    try {\n      importStringified = // for same-origin stylesheets,\n      // we can access the imported stylesheet rules directly\n      stringifyStylesheet(rule.styleSheet) || // work around browser issues with the raw string `@import url(...)` statement\n      escapeImportStatement(rule);\n    } catch (error) {\n    }\n  } else if (isCSSStyleRule(rule)) {\n    let cssText = rule.cssText;\n    const needsSafariColonFix = rule.selectorText.includes(\":\");\n    const needsAllFix = typeof rule.style[\"all\"] === \"string\" && rule.style[\"all\"];\n    if (needsAllFix) {\n      cssText = fixAllCssProperty(rule);\n    }\n    if (needsSafariColonFix) {\n      cssText = fixSafariColons(cssText);\n    }\n    if (needsSafariColonFix || needsAllFix) {\n      return cssText;\n    }\n  }\n  return importStringified || rule.cssText;\n}\nfunction fixSafariColons(cssStringified) {\n  const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n  return cssStringified.replace(regex, \"$1\\\\$2\");\n}\nfunction isCSSImportRule(rule) {\n  return \"styleSheet\" in rule;\n}\nfunction isCSSStyleRule(rule) {\n  return \"selectorText\" in rule;\n}\nclass Mirror {\n  constructor() {\n    __publicField(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n    __publicField(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n  }\n  getId(n) {\n    if (!n) return -1;\n    const id = this.getMeta(n)?.id;\n    return id ?? -1;\n  }\n  getNode(id) {\n    return this.idNodeMap.get(id) || null;\n  }\n  getIds() {\n    return Array.from(this.idNodeMap.keys());\n  }\n  getMeta(n) {\n    return this.nodeMetaMap.get(n) || null;\n  }\n  // removes the node from idNodeMap\n  // doesn't remove the node from nodeMetaMap\n  removeNodeFromMap(n) {\n    const id = this.getId(n);\n    this.idNodeMap.delete(id);\n    if (n.childNodes) {\n      n.childNodes.forEach(\n        (childNode) => this.removeNodeFromMap(childNode)\n      );\n    }\n  }\n  has(id) {\n    return this.idNodeMap.has(id);\n  }\n  hasNode(node) {\n    return this.nodeMetaMap.has(node);\n  }\n  add(n, meta) {\n    const id = meta.id;\n    this.idNodeMap.set(id, n);\n    this.nodeMetaMap.set(n, meta);\n  }\n  replace(id, n) {\n    const oldNode = this.getNode(id);\n    if (oldNode) {\n      const meta = this.nodeMetaMap.get(oldNode);\n      if (meta) this.nodeMetaMap.set(n, meta);\n    }\n    this.idNodeMap.set(id, n);\n  }\n  reset() {\n    this.idNodeMap = /* @__PURE__ */ new Map();\n    this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n  }\n}\nfunction createMirror() {\n  return new Mirror();\n}\nfunction shouldMaskInput({\n  maskInputOptions,\n  tagName,\n  type\n}) {\n  if (tagName === \"OPTION\") {\n    tagName = \"SELECT\";\n  }\n  return Boolean(\n    maskInputOptions[tagName.toLowerCase()] || type && maskInputOptions[type] || type === \"password\" || // Default to \"text\" option for inputs without a \"type\" attribute defined\n    tagName === \"INPUT\" && !type && maskInputOptions[\"text\"]\n  );\n}\nfunction maskInputValue({\n  isMasked,\n  element,\n  value,\n  maskInputFn\n}) {\n  let text = value || \"\";\n  if (!isMasked) {\n    return text;\n  }\n  if (maskInputFn) {\n    text = maskInputFn(text, element);\n  }\n  return \"*\".repeat(text.length);\n}\nfunction toLowerCase(str) {\n  return str.toLowerCase();\n}\nfunction toUpperCase(str) {\n  return str.toUpperCase();\n}\nconst ORIGINAL_ATTRIBUTE_NAME = \"__rrweb_original__\";\nfunction is2DCanvasBlank(canvas) {\n  const ctx = canvas.getContext(\"2d\");\n  if (!ctx) return true;\n  const chunkSize = 50;\n  for (let x = 0; x < canvas.width; x += chunkSize) {\n    for (let y = 0; y < canvas.height; y += chunkSize) {\n      const getImageData = ctx.getImageData;\n      const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData ? getImageData[ORIGINAL_ATTRIBUTE_NAME] : getImageData;\n      const pixelBuffer = new Uint32Array(\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n        originalGetImageData.call(\n          ctx,\n          x,\n          y,\n          Math.min(chunkSize, canvas.width - x),\n          Math.min(chunkSize, canvas.height - y)\n        ).data.buffer\n      );\n      if (pixelBuffer.some((pixel) => pixel !== 0)) return false;\n    }\n  }\n  return true;\n}\nfunction isNodeMetaEqual(a, b) {\n  if (!a || !b || a.type !== b.type) return false;\n  if (a.type === NodeType.Document)\n    return a.compatMode === b.compatMode;\n  else if (a.type === NodeType.DocumentType)\n    return a.name === b.name && a.publicId === b.publicId && a.systemId === b.systemId;\n  else if (a.type === NodeType.Comment || a.type === NodeType.Text || a.type === NodeType.CDATA)\n    return a.textContent === b.textContent;\n  else if (a.type === NodeType.Element)\n    return a.tagName === b.tagName && JSON.stringify(a.attributes) === JSON.stringify(b.attributes) && a.isSVG === b.isSVG && a.needBlock === b.needBlock;\n  return false;\n}\nfunction getInputType(element) {\n  const type = element.type;\n  return element.hasAttribute(\"data-rr-is-password\") ? \"password\" : type ? (\n    // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n    toLowerCase(type)\n  ) : null;\n}\nfunction getInputValue(el, tagName, type) {\n  if (tagName === \"INPUT\" && (type === \"radio\" || type === \"checkbox\")) {\n    return el.getAttribute(\"value\") || \"\";\n  }\n  return el.value;\n}\nfunction extractFileExtension(path, baseURL) {\n  let url;\n  try {\n    url = new URL(path, baseURL ?? window.location.href);\n  } catch (err) {\n    return null;\n  }\n  const regex = /\\.([0-9a-z]+)(?:$)/i;\n  const match = url.pathname.match(regex);\n  return match?.[1] ?? null;\n}\nconst cachedImplementations = {};\nfunction getImplementation(name) {\n  const cached = cachedImplementations[name];\n  if (cached) {\n    return cached;\n  }\n  const document = window.document;\n  let impl = window[name];\n  if (document && typeof document.createElement === \"function\") {\n    try {\n      const sandbox = document.createElement(\"iframe\");\n      sandbox.hidden = true;\n      document.head.appendChild(sandbox);\n      const contentWindow = sandbox.contentWindow;\n      if (contentWindow && contentWindow[name]) {\n        impl = // eslint-disable-next-line @typescript-eslint/unbound-method\n        contentWindow[name];\n      }\n      document.head.removeChild(sandbox);\n    } catch (e) {\n    }\n  }\n  return cachedImplementations[name] = impl.bind(\n    window\n  );\n}\nfunction onRequestAnimationFrame(...rest) {\n  return getImplementation(\"requestAnimationFrame\")(...rest);\n}\nfunction setTimeout(...rest) {\n  return getImplementation(\"setTimeout\")(...rest);\n}\nfunction clearTimeout(...rest) {\n  return getImplementation(\"clearTimeout\")(...rest);\n}\nfunction getIframeContentDocument(iframe) {\n  try {\n    return iframe.contentDocument;\n  } catch (e) {\n  }\n}\nlet _id = 1;\nconst tagNameRegex = new RegExp(\"[^a-z0-9-_:]\");\nconst IGNORED_NODE = -2;\nfunction genId() {\n  return _id++;\n}\nfunction getValidTagName(element) {\n  if (element instanceof HTMLFormElement) {\n    return \"form\";\n  }\n  const processedTagName = toLowerCase(element.tagName);\n  if (tagNameRegex.test(processedTagName)) {\n    return \"div\";\n  }\n  return processedTagName;\n}\nfunction extractOrigin(url) {\n  let origin = \"\";\n  if (url.indexOf(\"//\") > -1) {\n    origin = url.split(\"/\").slice(0, 3).join(\"/\");\n  } else {\n    origin = url.split(\"/\")[0];\n  }\n  origin = origin.split(\"?\")[0];\n  return origin;\n}\nlet canvasService;\nlet canvasCtx;\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nconst URL_WWW_MATCH = /^www\\..*/i;\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction absoluteToStylesheet(cssText, href) {\n  return (cssText || \"\").replace(\n    URL_IN_CSS_REF,\n    (origin, quote1, path1, quote2, path2, path3) => {\n      const filePath = path1 || path2 || path3;\n      const maybeQuote = quote1 || quote2 || \"\";\n      if (!filePath) {\n        return origin;\n      }\n      if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n        return `url(${maybeQuote}${filePath}${maybeQuote})`;\n      }\n      if (DATA_URI.test(filePath)) {\n        return `url(${maybeQuote}${filePath}${maybeQuote})`;\n      }\n      if (filePath[0] === \"/\") {\n        return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\n      }\n      const stack = href.split(\"/\");\n      const parts = filePath.split(\"/\");\n      stack.pop();\n      for (const part of parts) {\n        if (part === \".\") {\n          continue;\n        } else if (part === \"..\") {\n          stack.pop();\n        } else {\n          stack.push(part);\n        }\n      }\n      return `url(${maybeQuote}${stack.join(\"/\")}${maybeQuote})`;\n    }\n  );\n}\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n  if (attributeValue.trim() === \"\") {\n    return attributeValue;\n  }\n  let pos = 0;\n  function collectCharacters(regEx) {\n    let chars;\n    const match = regEx.exec(attributeValue.substring(pos));\n    if (match) {\n      chars = match[0];\n      pos += chars.length;\n      return chars;\n    }\n    return \"\";\n  }\n  const output = [];\n  while (true) {\n    collectCharacters(SRCSET_COMMAS_OR_SPACES);\n    if (pos >= attributeValue.length) {\n      break;\n    }\n    let url = collectCharacters(SRCSET_NOT_SPACES);\n    if (url.slice(-1) === \",\") {\n      url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n      output.push(url);\n    } else {\n      let descriptorsStr = \"\";\n      url = absoluteToDoc(doc, url);\n      let inParens = false;\n      while (true) {\n        const c = attributeValue.charAt(pos);\n        if (c === \"\") {\n          output.push((url + descriptorsStr).trim());\n          break;\n        } else if (!inParens) {\n          if (c === \",\") {\n            pos += 1;\n            output.push((url + descriptorsStr).trim());\n            break;\n          } else if (c === \"(\") {\n            inParens = true;\n          }\n        } else {\n          if (c === \")\") {\n            inParens = false;\n          }\n        }\n        descriptorsStr += c;\n        pos += 1;\n      }\n    }\n  }\n  return output.join(\", \");\n}\nconst cachedDocument = /* @__PURE__ */ new WeakMap();\nfunction absoluteToDoc(doc, attributeValue) {\n  if (!attributeValue || attributeValue.trim() === \"\") {\n    return attributeValue;\n  }\n  return getHref(doc, attributeValue);\n}\nfunction isSVGElement(el) {\n  return Boolean(el.tagName === \"svg\" || el.ownerSVGElement);\n}\nfunction getHref(doc, customHref) {\n  let a = cachedDocument.get(doc);\n  if (!a) {\n    a = doc.createElement(\"a\");\n    cachedDocument.set(doc, a);\n  }\n  if (!customHref) {\n    customHref = \"\";\n  } else if (customHref.startsWith(\"blob:\") || customHref.startsWith(\"data:\")) {\n    return customHref;\n  }\n  a.setAttribute(\"href\", customHref);\n  return a.href;\n}\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn) {\n  if (!value) {\n    return value;\n  }\n  if (name === \"src\" || name === \"href\" && !(tagName === \"use\" && value[0] === \"#\")) {\n    return absoluteToDoc(doc, value);\n  } else if (name === \"xlink:href\" && value[0] !== \"#\") {\n    return absoluteToDoc(doc, value);\n  } else if (name === \"background\" && (tagName === \"table\" || tagName === \"td\" || tagName === \"th\")) {\n    return absoluteToDoc(doc, value);\n  } else if (name === \"srcset\") {\n    return getAbsoluteSrcsetString(doc, value);\n  } else if (name === \"style\") {\n    return absoluteToStylesheet(value, getHref(doc));\n  } else if (tagName === \"object\" && name === \"data\") {\n    return absoluteToDoc(doc, value);\n  }\n  if (typeof maskAttributeFn === \"function\") {\n    return maskAttributeFn(name, value, element);\n  }\n  return value;\n}\nfunction ignoreAttribute(tagName, name, _value) {\n  return (tagName === \"video\" || tagName === \"audio\") && name === \"autoplay\";\n}\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\n  try {\n    if (unblockSelector && element.matches(unblockSelector)) {\n      return false;\n    }\n    if (typeof blockClass === \"string\") {\n      if (element.classList.contains(blockClass)) {\n        return true;\n      }\n    } else {\n      for (let eIndex = element.classList.length; eIndex--; ) {\n        const className = element.classList[eIndex];\n        if (blockClass.test(className)) {\n          return true;\n        }\n      }\n    }\n    if (blockSelector) {\n      return element.matches(blockSelector);\n    }\n  } catch (e) {\n  }\n  return false;\n}\nfunction elementClassMatchesRegex(el, regex) {\n  for (let eIndex = el.classList.length; eIndex--; ) {\n    const className = el.classList[eIndex];\n    if (regex.test(className)) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction classMatchesRegex(node, regex, checkAncestors) {\n  if (!node) return false;\n  if (checkAncestors) {\n    return distanceToMatch(\n      node,\n      (node2) => elementClassMatchesRegex(node2, regex)\n    ) >= 0;\n  } else if (node.nodeType === node.ELEMENT_NODE) {\n    return elementClassMatchesRegex(node, regex);\n  }\n  return false;\n}\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\n  if (!node) return -1;\n  if (node.nodeType !== node.ELEMENT_NODE) return -1;\n  if (distance > limit) return -1;\n  if (matchPredicate(node)) return distance;\n  return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\n}\nfunction createMatchPredicate(className, selector) {\n  return (node) => {\n    const el = node;\n    if (el === null) return false;\n    try {\n      if (className) {\n        if (typeof className === \"string\") {\n          if (el.matches(`.${className}`)) return true;\n        } else if (elementClassMatchesRegex(el, className)) {\n          return true;\n        }\n      }\n      if (selector && el.matches(selector)) return true;\n      return false;\n    } catch {\n      return false;\n    }\n  };\n}\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\n  try {\n    const el = node.nodeType === node.ELEMENT_NODE ? node : node.parentElement;\n    if (el === null) return false;\n    if (el.tagName === \"INPUT\") {\n      const autocomplete = el.getAttribute(\"autocomplete\");\n      const disallowedAutocompleteValues = [\n        \"current-password\",\n        \"new-password\",\n        \"cc-number\",\n        \"cc-exp\",\n        \"cc-exp-month\",\n        \"cc-exp-year\",\n        \"cc-csc\"\n      ];\n      if (disallowedAutocompleteValues.includes(autocomplete)) {\n        return true;\n      }\n    }\n    let maskDistance = -1;\n    let unmaskDistance = -1;\n    if (maskAllText) {\n      unmaskDistance = distanceToMatch(\n        el,\n        createMatchPredicate(unmaskTextClass, unmaskTextSelector)\n      );\n      if (unmaskDistance < 0) {\n        return true;\n      }\n      maskDistance = distanceToMatch(\n        el,\n        createMatchPredicate(maskTextClass, maskTextSelector),\n        unmaskDistance >= 0 ? unmaskDistance : Infinity\n      );\n    } else {\n      maskDistance = distanceToMatch(\n        el,\n        createMatchPredicate(maskTextClass, maskTextSelector)\n      );\n      if (maskDistance < 0) {\n        return false;\n      }\n      unmaskDistance = distanceToMatch(\n        el,\n        createMatchPredicate(unmaskTextClass, unmaskTextSelector),\n        maskDistance >= 0 ? maskDistance : Infinity\n      );\n    }\n    return maskDistance >= 0 ? unmaskDistance >= 0 ? maskDistance <= unmaskDistance : true : unmaskDistance >= 0 ? false : !!maskAllText;\n  } catch (e) {\n  }\n  return !!maskAllText;\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n  const win = iframeEl.contentWindow;\n  if (!win) {\n    return;\n  }\n  let fired = false;\n  let readyState;\n  try {\n    readyState = win.document.readyState;\n  } catch (error) {\n    return;\n  }\n  if (readyState !== \"complete\") {\n    const timer = setTimeout(() => {\n      if (!fired) {\n        listener();\n        fired = true;\n      }\n    }, iframeLoadTimeout);\n    iframeEl.addEventListener(\"load\", () => {\n      clearTimeout(timer);\n      fired = true;\n      listener();\n    });\n    return;\n  }\n  const blankUrl = \"about:blank\";\n  if (win.location.href !== blankUrl || iframeEl.src === blankUrl || iframeEl.src === \"\") {\n    setTimeout(listener, 0);\n    return iframeEl.addEventListener(\"load\", listener);\n  }\n  iframeEl.addEventListener(\"load\", listener);\n}\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\n  let fired = false;\n  let styleSheetLoaded;\n  try {\n    styleSheetLoaded = link.sheet;\n  } catch (error) {\n    return;\n  }\n  if (styleSheetLoaded) return;\n  const timer = setTimeout(() => {\n    if (!fired) {\n      listener();\n      fired = true;\n    }\n  }, styleSheetLoadTimeout);\n  link.addEventListener(\"load\", () => {\n    clearTimeout(timer);\n    fired = true;\n    listener();\n  });\n}\nfunction serializeNode(n, options) {\n  const {\n    doc,\n    mirror,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    maskAllText,\n    maskAttributeFn,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    inlineStylesheet,\n    maskInputOptions = {},\n    maskTextFn,\n    maskInputFn,\n    dataURLOptions = {},\n    inlineImages,\n    recordCanvas,\n    keepIframeSrcFn,\n    newlyAddedElement = false\n  } = options;\n  const rootId = getRootId(doc, mirror);\n  switch (n.nodeType) {\n    case n.DOCUMENT_NODE:\n      if (n.compatMode !== \"CSS1Compat\") {\n        return {\n          type: NodeType.Document,\n          childNodes: [],\n          compatMode: n.compatMode\n          // probably \"BackCompat\"\n        };\n      } else {\n        return {\n          type: NodeType.Document,\n          childNodes: []\n        };\n      }\n    case n.DOCUMENT_TYPE_NODE:\n      return {\n        type: NodeType.DocumentType,\n        name: n.name,\n        publicId: n.publicId,\n        systemId: n.systemId,\n        rootId\n      };\n    case n.ELEMENT_NODE:\n      return serializeElementNode(n, {\n        doc,\n        blockClass,\n        blockSelector,\n        unblockSelector,\n        inlineStylesheet,\n        maskAttributeFn,\n        maskInputOptions,\n        maskInputFn,\n        dataURLOptions,\n        inlineImages,\n        recordCanvas,\n        keepIframeSrcFn,\n        newlyAddedElement,\n        rootId,\n        maskAllText,\n        maskTextClass,\n        unmaskTextClass,\n        maskTextSelector,\n        unmaskTextSelector\n      });\n    case n.TEXT_NODE:\n      return serializeTextNode(n, {\n        doc,\n        maskAllText,\n        maskTextClass,\n        unmaskTextClass,\n        maskTextSelector,\n        unmaskTextSelector,\n        maskTextFn,\n        maskInputOptions,\n        maskInputFn,\n        rootId\n      });\n    case n.CDATA_SECTION_NODE:\n      return {\n        type: NodeType.CDATA,\n        textContent: \"\",\n        rootId\n      };\n    case n.COMMENT_NODE:\n      return {\n        type: NodeType.Comment,\n        textContent: n.textContent || \"\",\n        rootId\n      };\n    default:\n      return false;\n  }\n}\nfunction getRootId(doc, mirror) {\n  if (!mirror.hasNode(doc)) return void 0;\n  const docId = mirror.getId(doc);\n  return docId === 1 ? void 0 : docId;\n}\nfunction serializeTextNode(n, options) {\n  const {\n    maskAllText,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    maskTextFn,\n    maskInputOptions,\n    maskInputFn,\n    rootId\n  } = options;\n  const parentTagName = n.parentNode && n.parentNode.tagName;\n  let textContent = n.textContent;\n  const isStyle = parentTagName === \"STYLE\" ? true : void 0;\n  const isScript = parentTagName === \"SCRIPT\" ? true : void 0;\n  const isTextarea = parentTagName === \"TEXTAREA\" ? true : void 0;\n  if (isStyle && textContent) {\n    try {\n      if (n.nextSibling || n.previousSibling) {\n      } else if (n.parentNode.sheet?.cssRules) {\n        textContent = stringifyStylesheet(\n          n.parentNode.sheet\n        );\n      }\n    } catch (err) {\n      console.warn(\n        `Cannot get CSS styles from text's parentNode. Error: ${err}`,\n        n\n      );\n    }\n    textContent = absoluteToStylesheet(textContent, getHref(options.doc));\n  }\n  if (isScript) {\n    textContent = \"SCRIPT_PLACEHOLDER\";\n  }\n  const forceMask = needMaskingText(\n    n,\n    maskTextClass,\n    maskTextSelector,\n    unmaskTextClass,\n    unmaskTextSelector,\n    maskAllText\n  );\n  if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\n    textContent = maskTextFn ? maskTextFn(textContent, n.parentElement) : textContent.replace(/[\\S]/g, \"*\");\n  }\n  if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\n    textContent = maskInputFn ? maskInputFn(textContent, n.parentNode) : textContent.replace(/[\\S]/g, \"*\");\n  }\n  if (parentTagName === \"OPTION\" && textContent) {\n    const isInputMasked = shouldMaskInput({\n      type: null,\n      tagName: parentTagName,\n      maskInputOptions\n    });\n    textContent = maskInputValue({\n      isMasked: needMaskingText(\n        n,\n        maskTextClass,\n        maskTextSelector,\n        unmaskTextClass,\n        unmaskTextSelector,\n        isInputMasked\n      ),\n      element: n,\n      value: textContent,\n      maskInputFn\n    });\n  }\n  return {\n    type: NodeType.Text,\n    textContent: textContent || \"\",\n    isStyle,\n    rootId\n  };\n}\nfunction serializeElementNode(n, options) {\n  const {\n    doc,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    inlineStylesheet,\n    maskInputOptions = {},\n    maskAttributeFn,\n    maskInputFn,\n    dataURLOptions = {},\n    inlineImages,\n    recordCanvas,\n    keepIframeSrcFn,\n    newlyAddedElement = false,\n    rootId,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector\n  } = options;\n  const needBlock = _isBlockedElement(\n    n,\n    blockClass,\n    blockSelector,\n    unblockSelector\n  );\n  const tagName = getValidTagName(n);\n  let attributes2 = {};\n  const len = n.attributes.length;\n  for (let i = 0; i < len; i++) {\n    const attr = n.attributes[i];\n    if (attr.name && !ignoreAttribute(tagName, attr.name, attr.value)) {\n      attributes2[attr.name] = transformAttribute(\n        doc,\n        tagName,\n        toLowerCase(attr.name),\n        attr.value,\n        n,\n        maskAttributeFn\n      );\n    }\n  }\n  if (tagName === \"link\" && inlineStylesheet) {\n    const stylesheet = Array.from(doc.styleSheets).find((s) => {\n      return s.href === n.href;\n    });\n    let cssText = null;\n    if (stylesheet) {\n      cssText = stringifyStylesheet(stylesheet);\n    }\n    if (cssText) {\n      attributes2.rel = null;\n      attributes2.href = null;\n      attributes2.crossorigin = null;\n      attributes2._cssText = absoluteToStylesheet(cssText, stylesheet.href);\n    }\n  }\n  if (tagName === \"style\" && n.sheet && // TODO: Currently we only try to get dynamic stylesheet when it is an empty style element\n  !(n.innerText || n.textContent || \"\").trim().length) {\n    const cssText = stringifyStylesheet(\n      n.sheet\n    );\n    if (cssText) {\n      attributes2._cssText = absoluteToStylesheet(cssText, getHref(doc));\n    }\n  }\n  if (tagName === \"input\" || tagName === \"textarea\" || tagName === \"select\" || tagName === \"option\") {\n    const el = n;\n    const type = getInputType(el);\n    const value = getInputValue(el, toUpperCase(tagName), type);\n    const checked = el.checked;\n    if (type !== \"submit\" && type !== \"button\" && value) {\n      const forceMask = needMaskingText(\n        el,\n        maskTextClass,\n        maskTextSelector,\n        unmaskTextClass,\n        unmaskTextSelector,\n        shouldMaskInput({\n          type,\n          tagName: toUpperCase(tagName),\n          maskInputOptions\n        })\n      );\n      attributes2.value = maskInputValue({\n        isMasked: forceMask,\n        element: el,\n        value,\n        maskInputFn\n      });\n    }\n    if (checked) {\n      attributes2.checked = checked;\n    }\n  }\n  if (tagName === \"option\") {\n    if (n.selected && !maskInputOptions[\"select\"]) {\n      attributes2.selected = true;\n    } else {\n      delete attributes2.selected;\n    }\n  }\n  if (tagName === \"canvas\" && recordCanvas) {\n    if (n.__context === \"2d\") {\n      if (!is2DCanvasBlank(n)) {\n        attributes2.rr_dataURL = n.toDataURL(\n          dataURLOptions.type,\n          dataURLOptions.quality\n        );\n      }\n    } else if (!(\"__context\" in n)) {\n      const canvasDataURL = n.toDataURL(\n        dataURLOptions.type,\n        dataURLOptions.quality\n      );\n      const blankCanvas = doc.createElement(\"canvas\");\n      blankCanvas.width = n.width;\n      blankCanvas.height = n.height;\n      const blankCanvasDataURL = blankCanvas.toDataURL(\n        dataURLOptions.type,\n        dataURLOptions.quality\n      );\n      if (canvasDataURL !== blankCanvasDataURL) {\n        attributes2.rr_dataURL = canvasDataURL;\n      }\n    }\n  }\n  if (tagName === \"img\" && inlineImages) {\n    if (!canvasService) {\n      canvasService = doc.createElement(\"canvas\");\n      canvasCtx = canvasService.getContext(\"2d\");\n    }\n    const image = n;\n    const imageSrc = image.currentSrc || image.getAttribute(\"src\") || \"<unknown-src>\";\n    const priorCrossOrigin = image.crossOrigin;\n    const recordInlineImage = () => {\n      image.removeEventListener(\"load\", recordInlineImage);\n      try {\n        canvasService.width = image.naturalWidth;\n        canvasService.height = image.naturalHeight;\n        canvasCtx.drawImage(image, 0, 0);\n        attributes2.rr_dataURL = canvasService.toDataURL(\n          dataURLOptions.type,\n          dataURLOptions.quality\n        );\n      } catch (err) {\n        if (image.crossOrigin !== \"anonymous\") {\n          image.crossOrigin = \"anonymous\";\n          if (image.complete && image.naturalWidth !== 0)\n            recordInlineImage();\n          else image.addEventListener(\"load\", recordInlineImage);\n          return;\n        } else {\n          console.warn(\n            `Cannot inline img src=${imageSrc}! Error: ${err}`\n          );\n        }\n      }\n      if (image.crossOrigin === \"anonymous\") {\n        priorCrossOrigin ? attributes2.crossOrigin = priorCrossOrigin : image.removeAttribute(\"crossorigin\");\n      }\n    };\n    if (image.complete && image.naturalWidth !== 0) recordInlineImage();\n    else image.addEventListener(\"load\", recordInlineImage);\n  }\n  if (tagName === \"audio\" || tagName === \"video\") {\n    attributes2.rr_mediaState = n.paused ? \"paused\" : \"played\";\n    attributes2.rr_mediaCurrentTime = n.currentTime;\n  }\n  if (!newlyAddedElement) {\n    if (n.scrollLeft) {\n      attributes2.rr_scrollLeft = n.scrollLeft;\n    }\n    if (n.scrollTop) {\n      attributes2.rr_scrollTop = n.scrollTop;\n    }\n  }\n  if (needBlock) {\n    const { width, height } = n.getBoundingClientRect();\n    attributes2 = {\n      class: attributes2.class,\n      rr_width: `${width}px`,\n      rr_height: `${height}px`\n    };\n  }\n  if (tagName === \"iframe\" && !keepIframeSrcFn(attributes2.src)) {\n    if (!needBlock && !getIframeContentDocument(n)) {\n      attributes2.rr_src = attributes2.src;\n    }\n    delete attributes2.src;\n  }\n  let isCustomElement;\n  try {\n    if (customElements.get(tagName)) isCustomElement = true;\n  } catch (e) {\n  }\n  return {\n    type: NodeType.Element,\n    tagName,\n    attributes: attributes2,\n    childNodes: [],\n    isSVG: isSVGElement(n) || void 0,\n    needBlock,\n    rootId,\n    isCustom: isCustomElement\n  };\n}\nfunction lowerIfExists(maybeAttr) {\n  if (maybeAttr === void 0 || maybeAttr === null) {\n    return \"\";\n  } else {\n    return maybeAttr.toLowerCase();\n  }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n  if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\n    return true;\n  } else if (sn.type === NodeType.Element) {\n    if (slimDOMOptions.script && // script tag\n    (sn.tagName === \"script\" || // (module)preload link\n    sn.tagName === \"link\" && (sn.attributes.rel === \"preload\" || sn.attributes.rel === \"modulepreload\") || // prefetch link\n    sn.tagName === \"link\" && sn.attributes.rel === \"prefetch\" && typeof sn.attributes.href === \"string\" && extractFileExtension(sn.attributes.href) === \"js\")) {\n      return true;\n    } else if (slimDOMOptions.headFavicon && (sn.tagName === \"link\" && sn.attributes.rel === \"shortcut icon\" || sn.tagName === \"meta\" && (lowerIfExists(sn.attributes.name).match(\n      /^msapplication-tile(image|color)$/\n    ) || lowerIfExists(sn.attributes.name) === \"application-name\" || lowerIfExists(sn.attributes.rel) === \"icon\" || lowerIfExists(sn.attributes.rel) === \"apple-touch-icon\" || lowerIfExists(sn.attributes.rel) === \"shortcut icon\"))) {\n      return true;\n    } else if (sn.tagName === \"meta\") {\n      if (slimDOMOptions.headMetaDescKeywords && lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n        return true;\n      } else if (slimDOMOptions.headMetaSocial && (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) || // og = opengraph (facebook)\n      lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) || lowerIfExists(sn.attributes.name) === \"pinterest\")) {\n        return true;\n      } else if (slimDOMOptions.headMetaRobots && (lowerIfExists(sn.attributes.name) === \"robots\" || lowerIfExists(sn.attributes.name) === \"googlebot\" || lowerIfExists(sn.attributes.name) === \"bingbot\")) {\n        return true;\n      } else if (slimDOMOptions.headMetaHttpEquiv && sn.attributes[\"http-equiv\"] !== void 0) {\n        return true;\n      } else if (slimDOMOptions.headMetaAuthorship && (lowerIfExists(sn.attributes.name) === \"author\" || lowerIfExists(sn.attributes.name) === \"generator\" || lowerIfExists(sn.attributes.name) === \"framework\" || lowerIfExists(sn.attributes.name) === \"publisher\" || lowerIfExists(sn.attributes.name) === \"progid\" || lowerIfExists(sn.attributes.property).match(/^article:/) || lowerIfExists(sn.attributes.property).match(/^product:/))) {\n        return true;\n      } else if (slimDOMOptions.headMetaVerification && (lowerIfExists(sn.attributes.name) === \"google-site-verification\" || lowerIfExists(sn.attributes.name) === \"yandex-verification\" || lowerIfExists(sn.attributes.name) === \"csrf-token\" || lowerIfExists(sn.attributes.name) === \"p:domain_verify\" || lowerIfExists(sn.attributes.name) === \"verify-v1\" || lowerIfExists(sn.attributes.name) === \"verification\" || lowerIfExists(sn.attributes.name) === \"shopify-checkout-api-token\")) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\nfunction serializeNodeWithId(n, options) {\n  const {\n    doc,\n    mirror,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    maskAllText,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    skipChild = false,\n    inlineStylesheet = true,\n    maskInputOptions = {},\n    maskAttributeFn,\n    maskTextFn,\n    maskInputFn,\n    slimDOMOptions,\n    dataURLOptions = {},\n    inlineImages = false,\n    recordCanvas = false,\n    onSerialize,\n    onIframeLoad,\n    iframeLoadTimeout = 5e3,\n    onStylesheetLoad,\n    stylesheetLoadTimeout = 5e3,\n    keepIframeSrcFn = () => false,\n    newlyAddedElement = false\n  } = options;\n  let { preserveWhiteSpace = true } = options;\n  const _serializedNode = serializeNode(n, {\n    doc,\n    mirror,\n    blockClass,\n    blockSelector,\n    maskAllText,\n    unblockSelector,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    inlineStylesheet,\n    maskInputOptions,\n    maskAttributeFn,\n    maskTextFn,\n    maskInputFn,\n    dataURLOptions,\n    inlineImages,\n    recordCanvas,\n    keepIframeSrcFn,\n    newlyAddedElement\n  });\n  if (!_serializedNode) {\n    console.warn(n, \"not serialized\");\n    return null;\n  }\n  let id;\n  if (mirror.hasNode(n)) {\n    id = mirror.getId(n);\n  } else if (slimDOMExcluded(_serializedNode, slimDOMOptions) || !preserveWhiteSpace && _serializedNode.type === NodeType.Text && !_serializedNode.isStyle && !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, \"\").length) {\n    id = IGNORED_NODE;\n  } else {\n    id = genId();\n  }\n  const serializedNode2 = Object.assign(_serializedNode, { id });\n  mirror.add(n, serializedNode2);\n  if (id === IGNORED_NODE) {\n    return null;\n  }\n  if (onSerialize) {\n    onSerialize(n);\n  }\n  let recordChild = !skipChild;\n  if (serializedNode2.type === NodeType.Element) {\n    recordChild = recordChild && !serializedNode2.needBlock;\n    delete serializedNode2.needBlock;\n    const shadowRoot = n.shadowRoot;\n    if (shadowRoot && isNativeShadowDom(shadowRoot))\n      serializedNode2.isShadowHost = true;\n  }\n  if ((serializedNode2.type === NodeType.Document || serializedNode2.type === NodeType.Element) && recordChild) {\n    if (slimDOMOptions.headWhitespace && serializedNode2.type === NodeType.Element && serializedNode2.tagName === \"head\") {\n      preserveWhiteSpace = false;\n    }\n    const bypassOptions = {\n      doc,\n      mirror,\n      blockClass,\n      blockSelector,\n      maskAllText,\n      unblockSelector,\n      maskTextClass,\n      unmaskTextClass,\n      maskTextSelector,\n      unmaskTextSelector,\n      skipChild,\n      inlineStylesheet,\n      maskInputOptions,\n      maskAttributeFn,\n      maskTextFn,\n      maskInputFn,\n      slimDOMOptions,\n      dataURLOptions,\n      inlineImages,\n      recordCanvas,\n      preserveWhiteSpace,\n      onSerialize,\n      onIframeLoad,\n      iframeLoadTimeout,\n      onStylesheetLoad,\n      stylesheetLoadTimeout,\n      keepIframeSrcFn\n    };\n    for (const childN of Array.from(n.childNodes)) {\n      const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n      if (serializedChildNode) {\n        serializedNode2.childNodes.push(serializedChildNode);\n      }\n    }\n    if (isElement(n) && n.shadowRoot) {\n      for (const childN of Array.from(n.shadowRoot.childNodes)) {\n        const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n        if (serializedChildNode) {\n          isNativeShadowDom(n.shadowRoot) && (serializedChildNode.isShadow = true);\n          serializedNode2.childNodes.push(serializedChildNode);\n        }\n      }\n    }\n  }\n  if (n.parentNode && isShadowRoot(n.parentNode) && isNativeShadowDom(n.parentNode)) {\n    serializedNode2.isShadow = true;\n  }\n  if (serializedNode2.type === NodeType.Element && serializedNode2.tagName === \"iframe\" && !_isBlockedElement(\n    n,\n    blockClass,\n    blockSelector,\n    unblockSelector\n  )) {\n    onceIframeLoaded(\n      n,\n      () => {\n        const iframeDoc = getIframeContentDocument(n);\n        if (iframeDoc && onIframeLoad) {\n          const serializedIframeNode = serializeNodeWithId(iframeDoc, {\n            doc: iframeDoc,\n            mirror,\n            blockClass,\n            blockSelector,\n            unblockSelector,\n            maskAllText,\n            maskTextClass,\n            unmaskTextClass,\n            maskTextSelector,\n            unmaskTextSelector,\n            skipChild: false,\n            inlineStylesheet,\n            maskInputOptions,\n            maskAttributeFn,\n            maskTextFn,\n            maskInputFn,\n            slimDOMOptions,\n            dataURLOptions,\n            inlineImages,\n            recordCanvas,\n            preserveWhiteSpace,\n            onSerialize,\n            onIframeLoad,\n            iframeLoadTimeout,\n            onStylesheetLoad,\n            stylesheetLoadTimeout,\n            keepIframeSrcFn\n          });\n          if (serializedIframeNode) {\n            onIframeLoad(\n              n,\n              serializedIframeNode\n            );\n          }\n        }\n      },\n      iframeLoadTimeout\n    );\n  }\n  if (serializedNode2.type === NodeType.Element && serializedNode2.tagName === \"link\" && typeof serializedNode2.attributes.rel === \"string\" && (serializedNode2.attributes.rel === \"stylesheet\" || serializedNode2.attributes.rel === \"preload\" && typeof serializedNode2.attributes.href === \"string\" && extractFileExtension(serializedNode2.attributes.href) === \"css\")) {\n    onceStylesheetLoaded(\n      n,\n      () => {\n        if (onStylesheetLoad) {\n          const serializedLinkNode = serializeNodeWithId(n, {\n            doc,\n            mirror,\n            blockClass,\n            blockSelector,\n            unblockSelector,\n            maskAllText,\n            maskTextClass,\n            unmaskTextClass,\n            maskTextSelector,\n            unmaskTextSelector,\n            skipChild: false,\n            inlineStylesheet,\n            maskInputOptions,\n            maskAttributeFn,\n            maskTextFn,\n            maskInputFn,\n            slimDOMOptions,\n            dataURLOptions,\n            inlineImages,\n            recordCanvas,\n            preserveWhiteSpace,\n            onSerialize,\n            onIframeLoad,\n            iframeLoadTimeout,\n            onStylesheetLoad,\n            stylesheetLoadTimeout,\n            keepIframeSrcFn\n          });\n          if (serializedLinkNode) {\n            onStylesheetLoad(\n              n,\n              serializedLinkNode\n            );\n          }\n        }\n      },\n      stylesheetLoadTimeout\n    );\n  }\n  return serializedNode2;\n}\nfunction snapshot(n, options) {\n  const {\n    mirror = new Mirror(),\n    blockClass = \"rr-block\",\n    blockSelector = null,\n    unblockSelector = null,\n    maskAllText = false,\n    maskTextClass = \"rr-mask\",\n    unmaskTextClass = null,\n    maskTextSelector = null,\n    unmaskTextSelector = null,\n    inlineStylesheet = true,\n    inlineImages = false,\n    recordCanvas = false,\n    maskAllInputs = false,\n    maskAttributeFn,\n    maskTextFn,\n    maskInputFn,\n    slimDOM = false,\n    dataURLOptions,\n    preserveWhiteSpace,\n    onSerialize,\n    onIframeLoad,\n    iframeLoadTimeout,\n    onStylesheetLoad,\n    stylesheetLoadTimeout,\n    keepIframeSrcFn = () => false\n  } = options || {};\n  const maskInputOptions = maskAllInputs === true ? {\n    color: true,\n    date: true,\n    \"datetime-local\": true,\n    email: true,\n    month: true,\n    number: true,\n    range: true,\n    search: true,\n    tel: true,\n    text: true,\n    time: true,\n    url: true,\n    week: true,\n    textarea: true,\n    select: true\n  } : maskAllInputs === false ? {} : maskAllInputs;\n  const slimDOMOptions = slimDOM === true || slimDOM === \"all\" ? (\n    // if true: set of sensible options that should not throw away any information\n    {\n      script: true,\n      comment: true,\n      headFavicon: true,\n      headWhitespace: true,\n      headMetaDescKeywords: slimDOM === \"all\",\n      // destructive\n      headMetaSocial: true,\n      headMetaRobots: true,\n      headMetaHttpEquiv: true,\n      headMetaAuthorship: true,\n      headMetaVerification: true\n    }\n  ) : slimDOM === false ? {} : slimDOM;\n  return serializeNodeWithId(n, {\n    doc: n,\n    mirror,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    maskAllText,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    skipChild: false,\n    inlineStylesheet,\n    maskInputOptions,\n    maskAttributeFn,\n    maskTextFn,\n    maskInputFn,\n    slimDOMOptions,\n    dataURLOptions,\n    inlineImages,\n    recordCanvas,\n    preserveWhiteSpace,\n    onSerialize,\n    onIframeLoad,\n    iframeLoadTimeout,\n    onStylesheetLoad,\n    stylesheetLoadTimeout,\n    keepIframeSrcFn,\n    newlyAddedElement: false\n  });\n}\nfunction visitSnapshot(node, onVisit) {\n  function walk(current) {\n    onVisit(current);\n    if (current.type === NodeType.Document || current.type === NodeType.Element) {\n      current.childNodes.forEach(walk);\n    }\n  }\n  walk(node);\n}\nfunction cleanupSnapshot() {\n  _id = 1;\n}\nconst commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\nfunction parse(css, options = {}) {\n  let lineno = 1;\n  let column = 1;\n  function updatePosition(str) {\n    const lines = str.match(/\\n/g);\n    if (lines) {\n      lineno += lines.length;\n    }\n    const i = str.lastIndexOf(\"\\n\");\n    column = i === -1 ? column + str.length : str.length - i;\n  }\n  function position() {\n    const start = { line: lineno, column };\n    return (node) => {\n      node.position = new Position(start);\n      whitespace();\n      return node;\n    };\n  }\n  const _Position = class _Position {\n    constructor(start) {\n      __publicField(this, \"content\");\n      __publicField(this, \"start\");\n      __publicField(this, \"end\");\n      __publicField(this, \"source\");\n      this.start = start;\n      this.end = { line: lineno, column };\n      this.source = options.source;\n      this.content = _Position.content;\n    }\n  };\n  __publicField(_Position, \"content\");\n  let Position = _Position;\n  Position.content = css;\n  const errorsList = [];\n  function error(msg) {\n    const err = new Error(\n      `${options.source || \"\"}:${lineno}:${column}: ${msg}`\n    );\n    err.reason = msg;\n    err.filename = options.source;\n    err.line = lineno;\n    err.column = column;\n    err.source = css;\n    if (options.silent) {\n      errorsList.push(err);\n    } else {\n      throw err;\n    }\n  }\n  function stylesheet() {\n    const rulesList = rules();\n    return {\n      type: \"stylesheet\",\n      stylesheet: {\n        source: options.source,\n        rules: rulesList,\n        parsingErrors: errorsList\n      }\n    };\n  }\n  function open() {\n    return match(/^{\\s*/);\n  }\n  function close() {\n    return match(/^}/);\n  }\n  function rules() {\n    let node;\n    const rules2 = [];\n    whitespace();\n    comments(rules2);\n    while (css.length && css.charAt(0) !== \"}\" && (node = atrule() || rule())) {\n      if (node) {\n        rules2.push(node);\n        comments(rules2);\n      }\n    }\n    return rules2;\n  }\n  function match(re) {\n    const m = re.exec(css);\n    if (!m) {\n      return;\n    }\n    const str = m[0];\n    updatePosition(str);\n    css = css.slice(str.length);\n    return m;\n  }\n  function whitespace() {\n    match(/^\\s*/);\n  }\n  function comments(rules2 = []) {\n    let c;\n    while (c = comment()) {\n      if (c) {\n        rules2.push(c);\n      }\n      c = comment();\n    }\n    return rules2;\n  }\n  function comment() {\n    const pos = position();\n    if (\"/\" !== css.charAt(0) || \"*\" !== css.charAt(1)) {\n      return;\n    }\n    let i = 2;\n    while (\"\" !== css.charAt(i) && (\"*\" !== css.charAt(i) || \"/\" !== css.charAt(i + 1))) {\n      ++i;\n    }\n    i += 2;\n    if (\"\" === css.charAt(i - 1)) {\n      return error(\"End of comment missing\");\n    }\n    const str = css.slice(2, i - 2);\n    column += 2;\n    updatePosition(str);\n    css = css.slice(i);\n    column += 2;\n    return pos({\n      type: \"comment\",\n      comment: str\n    });\n  }\n  function selector() {\n    const m = match(/^([^{]+)/);\n    if (!m) {\n      return;\n    }\n    const splitSelectors = trim(m[0]).replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, \"\").replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, (m2) => {\n      return m2.replace(/,/g, \"‌\");\n    }).split(/\\s*(?![^(]*\\)),\\s*/);\n    if (splitSelectors.length <= 1) {\n      return splitSelectors.map((s) => {\n        return s.replace(/\\u200C/g, \",\");\n      });\n    }\n    let i = 0;\n    let j = 0;\n    const len = splitSelectors.length;\n    const finalSelectors = [];\n    while (i < len) {\n      const openingParensCount = (splitSelectors[i].match(/\\(/g) || []).length;\n      const closingParensCount = (splitSelectors[i].match(/\\)/g) || []).length;\n      let unbalancedParens = openingParensCount - closingParensCount;\n      if (unbalancedParens >= 1) {\n        let foundClosingSelector = false;\n        j = i + 1;\n        while (j < len) {\n          const nextOpeningParensCount = (splitSelectors[j].match(/\\(/g) || []).length;\n          const nextClosingParensCount = (splitSelectors[j].match(/\\)/g) || []).length;\n          const nextUnbalancedParens = nextClosingParensCount - nextOpeningParensCount;\n          if (nextUnbalancedParens === unbalancedParens) {\n            finalSelectors.push(splitSelectors.slice(i, j + 1).join(\",\"));\n            i = j + 1;\n            foundClosingSelector = true;\n            break;\n          }\n          j++;\n          unbalancedParens -= nextUnbalancedParens;\n        }\n        if (foundClosingSelector) {\n          continue;\n        }\n        splitSelectors.slice(i, len).forEach((selector2) => selector2 && finalSelectors.push(selector2));\n        break;\n      }\n      splitSelectors[i] && finalSelectors.push(splitSelectors[i]);\n      i++;\n    }\n    return finalSelectors.map((s) => {\n      return s.replace(/\\u200C/g, \",\");\n    });\n  }\n  function declaration() {\n    const pos = position();\n    const propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\n    if (!propMatch) {\n      return;\n    }\n    const prop = trim(propMatch[0]);\n    if (!match(/^:\\s*/)) {\n      return error(`property missing ':'`);\n    }\n    const val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\n    const ret = pos({\n      type: \"declaration\",\n      property: prop.replace(commentre, \"\"),\n      value: val ? trim(val[0]).replace(commentre, \"\") : \"\"\n    });\n    match(/^[;\\s]*/);\n    return ret;\n  }\n  function declarations() {\n    const decls = [];\n    if (!open()) {\n      return error(`missing '{'`);\n    }\n    comments(decls);\n    let decl;\n    while (decl = declaration()) {\n      if (decl !== false) {\n        decls.push(decl);\n        comments(decls);\n      }\n      decl = declaration();\n    }\n    if (!close()) {\n      return error(`missing '}'`);\n    }\n    return decls;\n  }\n  function keyframe() {\n    let m;\n    const vals = [];\n    const pos = position();\n    while (m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/)) {\n      vals.push(m[1]);\n      match(/^,\\s*/);\n    }\n    if (!vals.length) {\n      return;\n    }\n    return pos({\n      type: \"keyframe\",\n      values: vals,\n      declarations: declarations()\n    });\n  }\n  function atkeyframes() {\n    const pos = position();\n    let m = match(/^@([-\\w]+)?keyframes\\s*/);\n    if (!m) {\n      return;\n    }\n    const vendor = m[1];\n    m = match(/^([-\\w]+)\\s*/);\n    if (!m) {\n      return error(\"@keyframes missing name\");\n    }\n    const name = m[1];\n    if (!open()) {\n      return error(`@keyframes missing '{'`);\n    }\n    let frame;\n    let frames = comments();\n    while (frame = keyframe()) {\n      frames.push(frame);\n      frames = frames.concat(comments());\n    }\n    if (!close()) {\n      return error(`@keyframes missing '}'`);\n    }\n    return pos({\n      type: \"keyframes\",\n      name,\n      vendor,\n      keyframes: frames\n    });\n  }\n  function atsupports() {\n    const pos = position();\n    const m = match(/^@supports *([^{]+)/);\n    if (!m) {\n      return;\n    }\n    const supports = trim(m[1]);\n    if (!open()) {\n      return error(`@supports missing '{'`);\n    }\n    const style = comments().concat(rules());\n    if (!close()) {\n      return error(`@supports missing '}'`);\n    }\n    return pos({\n      type: \"supports\",\n      supports,\n      rules: style\n    });\n  }\n  function athost() {\n    const pos = position();\n    const m = match(/^@host\\s*/);\n    if (!m) {\n      return;\n    }\n    if (!open()) {\n      return error(`@host missing '{'`);\n    }\n    const style = comments().concat(rules());\n    if (!close()) {\n      return error(`@host missing '}'`);\n    }\n    return pos({\n      type: \"host\",\n      rules: style\n    });\n  }\n  function atmedia() {\n    const pos = position();\n    const m = match(/^@media *([^{]+)/);\n    if (!m) {\n      return;\n    }\n    const media = trim(m[1]);\n    if (!open()) {\n      return error(`@media missing '{'`);\n    }\n    const style = comments().concat(rules());\n    if (!close()) {\n      return error(`@media missing '}'`);\n    }\n    return pos({\n      type: \"media\",\n      media,\n      rules: style\n    });\n  }\n  function atcustommedia() {\n    const pos = position();\n    const m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\n    if (!m) {\n      return;\n    }\n    return pos({\n      type: \"custom-media\",\n      name: trim(m[1]),\n      media: trim(m[2])\n    });\n  }\n  function atpage() {\n    const pos = position();\n    const m = match(/^@page */);\n    if (!m) {\n      return;\n    }\n    const sel = selector() || [];\n    if (!open()) {\n      return error(`@page missing '{'`);\n    }\n    let decls = comments();\n    let decl;\n    while (decl = declaration()) {\n      decls.push(decl);\n      decls = decls.concat(comments());\n    }\n    if (!close()) {\n      return error(`@page missing '}'`);\n    }\n    return pos({\n      type: \"page\",\n      selectors: sel,\n      declarations: decls\n    });\n  }\n  function atdocument() {\n    const pos = position();\n    const m = match(/^@([-\\w]+)?document *([^{]+)/);\n    if (!m) {\n      return;\n    }\n    const vendor = trim(m[1]);\n    const doc = trim(m[2]);\n    if (!open()) {\n      return error(`@document missing '{'`);\n    }\n    const style = comments().concat(rules());\n    if (!close()) {\n      return error(`@document missing '}'`);\n    }\n    return pos({\n      type: \"document\",\n      document: doc,\n      vendor,\n      rules: style\n    });\n  }\n  function atfontface() {\n    const pos = position();\n    const m = match(/^@font-face\\s*/);\n    if (!m) {\n      return;\n    }\n    if (!open()) {\n      return error(`@font-face missing '{'`);\n    }\n    let decls = comments();\n    let decl;\n    while (decl = declaration()) {\n      decls.push(decl);\n      decls = decls.concat(comments());\n    }\n    if (!close()) {\n      return error(`@font-face missing '}'`);\n    }\n    return pos({\n      type: \"font-face\",\n      declarations: decls\n    });\n  }\n  const atimport = _compileAtrule(\"import\");\n  const atcharset = _compileAtrule(\"charset\");\n  const atnamespace = _compileAtrule(\"namespace\");\n  function _compileAtrule(name) {\n    const re = new RegExp(\n      \"^@\" + name + \"\\\\s*((?:\" + [\n        /[^\\\\]\"(?:\\\\\"|[^\"])*\"/.source,\n        // consume any quoted parts (checking that the double quote isn't itself escaped)\n        /[^\\\\]'(?:\\\\'|[^'])*'/.source,\n        // same but for single quotes\n        \"[^;]\"\n      ].join(\"|\") + \")+);\"\n    );\n    return () => {\n      const pos = position();\n      const m = match(re);\n      if (!m) {\n        return;\n      }\n      const ret = { type: name };\n      ret[name] = m[1].trim();\n      return pos(ret);\n    };\n  }\n  function atrule() {\n    if (css[0] !== \"@\") {\n      return;\n    }\n    return atkeyframes() || atmedia() || atcustommedia() || atsupports() || atimport() || atcharset() || atnamespace() || atdocument() || atpage() || athost() || atfontface();\n  }\n  function rule() {\n    const pos = position();\n    const sel = selector();\n    if (!sel) {\n      return error(\"selector missing\");\n    }\n    comments();\n    return pos({\n      type: \"rule\",\n      selectors: sel,\n      declarations: declarations()\n    });\n  }\n  return addParent(stylesheet());\n}\nfunction trim(str) {\n  return str ? str.replace(/^\\s+|\\s+$/g, \"\") : \"\";\n}\nfunction addParent(obj, parent) {\n  const isNode = obj && typeof obj.type === \"string\";\n  const childParent = isNode ? obj : parent;\n  for (const k of Object.keys(obj)) {\n    const value = obj[k];\n    if (Array.isArray(value)) {\n      value.forEach((v) => {\n        addParent(v, childParent);\n      });\n    } else if (value && typeof value === \"object\") {\n      addParent(value, childParent);\n    }\n  }\n  if (isNode) {\n    Object.defineProperty(obj, \"parent\", {\n      configurable: true,\n      writable: true,\n      enumerable: false,\n      value: parent || null\n    });\n  }\n  return obj;\n}\nconst tagMap = {\n  script: \"noscript\",\n  // camel case svg element tag names\n  altglyph: \"altGlyph\",\n  altglyphdef: \"altGlyphDef\",\n  altglyphitem: \"altGlyphItem\",\n  animatecolor: \"animateColor\",\n  animatemotion: \"animateMotion\",\n  animatetransform: \"animateTransform\",\n  clippath: \"clipPath\",\n  feblend: \"feBlend\",\n  fecolormatrix: \"feColorMatrix\",\n  fecomponenttransfer: \"feComponentTransfer\",\n  fecomposite: \"feComposite\",\n  feconvolvematrix: \"feConvolveMatrix\",\n  fediffuselighting: \"feDiffuseLighting\",\n  fedisplacementmap: \"feDisplacementMap\",\n  fedistantlight: \"feDistantLight\",\n  fedropshadow: \"feDropShadow\",\n  feflood: \"feFlood\",\n  fefunca: \"feFuncA\",\n  fefuncb: \"feFuncB\",\n  fefuncg: \"feFuncG\",\n  fefuncr: \"feFuncR\",\n  fegaussianblur: \"feGaussianBlur\",\n  feimage: \"feImage\",\n  femerge: \"feMerge\",\n  femergenode: \"feMergeNode\",\n  femorphology: \"feMorphology\",\n  feoffset: \"feOffset\",\n  fepointlight: \"fePointLight\",\n  fespecularlighting: \"feSpecularLighting\",\n  fespotlight: \"feSpotLight\",\n  fetile: \"feTile\",\n  feturbulence: \"feTurbulence\",\n  foreignobject: \"foreignObject\",\n  glyphref: \"glyphRef\",\n  lineargradient: \"linearGradient\",\n  radialgradient: \"radialGradient\"\n};\nfunction getTagName(n) {\n  let tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\n  if (tagName === \"link\" && n.attributes._cssText) {\n    tagName = \"style\";\n  }\n  return tagName;\n}\nfunction escapeRegExp(str) {\n  return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\nconst HOVER_SELECTOR = /([^\\\\]):hover/;\nconst HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, \"g\");\nfunction addHoverClass(cssText, cache) {\n  const cachedStyle = cache?.stylesWithHoverClass.get(cssText);\n  if (cachedStyle) return cachedStyle;\n  if (cssText.length >= 1e6) {\n    return cssText;\n  }\n  const ast = parse(cssText, {\n    silent: true\n  });\n  if (!ast.stylesheet) {\n    return cssText;\n  }\n  const selectors = [];\n  ast.stylesheet.rules.forEach((rule) => {\n    if (\"selectors\" in rule) {\n      (rule.selectors || []).forEach((selector) => {\n        if (HOVER_SELECTOR.test(selector)) {\n          selectors.push(selector);\n        }\n      });\n    }\n  });\n  if (selectors.length === 0) {\n    return cssText;\n  }\n  const selectorMatcher = new RegExp(\n    selectors.filter((selector, index) => selectors.indexOf(selector) === index).sort((a, b) => b.length - a.length).map((selector) => {\n      return escapeRegExp(selector);\n    }).join(\"|\"),\n    \"g\"\n  );\n  const result = cssText.replace(selectorMatcher, (selector) => {\n    const newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, \"$1.\\\\:hover\");\n    return `${selector}, ${newSelector}`;\n  });\n  cache?.stylesWithHoverClass.set(cssText, result);\n  return result;\n}\nfunction createCache() {\n  const stylesWithHoverClass = /* @__PURE__ */ new Map();\n  return {\n    stylesWithHoverClass\n  };\n}\nfunction buildNode(n, options) {\n  const { doc, hackCss, cache } = options;\n  switch (n.type) {\n    case NodeType.Document:\n      return doc.implementation.createDocument(null, \"\", null);\n    case NodeType.DocumentType:\n      return doc.implementation.createDocumentType(\n        n.name || \"html\",\n        n.publicId,\n        n.systemId\n      );\n    case NodeType.Element: {\n      const tagName = getTagName(n);\n      let node;\n      if (n.isSVG) {\n        node = doc.createElementNS(\"http://www.w3.org/2000/svg\", tagName);\n      } else {\n        if (\n          // If the tag name is a custom element name\n          n.isCustom && // If the browser supports custom elements\n          doc.defaultView?.customElements && // If the custom element hasn't been defined yet\n          !doc.defaultView.customElements.get(n.tagName)\n        )\n          doc.defaultView.customElements.define(\n            n.tagName,\n            class extends doc.defaultView.HTMLElement {\n            }\n          );\n        node = doc.createElement(tagName);\n      }\n      const specialAttributes = {};\n      for (const name in n.attributes) {\n        if (!Object.prototype.hasOwnProperty.call(n.attributes, name)) {\n          continue;\n        }\n        let value = n.attributes[name];\n        if (tagName === \"option\" && name === \"selected\" && value === false) {\n          continue;\n        }\n        if (value === null) {\n          continue;\n        }\n        if (value === true) value = \"\";\n        if (name.startsWith(\"rr_\")) {\n          specialAttributes[name] = value;\n          continue;\n        }\n        const isTextarea = tagName === \"textarea\" && name === \"value\";\n        const isRemoteOrDynamicCss = tagName === \"style\" && name === \"_cssText\";\n        if (isRemoteOrDynamicCss && hackCss && typeof value === \"string\") {\n          value = addHoverClass(value, cache);\n        }\n        if ((isTextarea || isRemoteOrDynamicCss) && typeof value === \"string\") {\n          const child = doc.createTextNode(value);\n          for (const c of Array.from(node.childNodes)) {\n            if (c.nodeType === node.TEXT_NODE) {\n              node.removeChild(c);\n            }\n          }\n          node.appendChild(child);\n          continue;\n        }\n        try {\n          if (n.isSVG && name === \"xlink:href\") {\n            node.setAttributeNS(\n              \"http://www.w3.org/1999/xlink\",\n              name,\n              value.toString()\n            );\n          } else if (name === \"onload\" || name === \"onclick\" || name.substring(0, 7) === \"onmouse\") {\n            node.setAttribute(\"_\" + name, value.toString());\n          } else if (tagName === \"meta\" && n.attributes[\"http-equiv\"] === \"Content-Security-Policy\" && name === \"content\") {\n            node.setAttribute(\"csp-content\", value.toString());\n            continue;\n          } else if (tagName === \"link\" && (n.attributes.rel === \"preload\" || n.attributes.rel === \"modulepreload\")) {\n          } else if (tagName === \"link\" && n.attributes.rel === \"prefetch\" && typeof n.attributes.href === \"string\" && extractFileExtension(n.attributes.href) === \"js\") {\n          } else if (tagName === \"img\" && n.attributes.srcset && n.attributes.rr_dataURL) {\n            node.setAttribute(\n              \"rrweb-original-srcset\",\n              n.attributes.srcset\n            );\n          } else {\n            node.setAttribute(name, value.toString());\n          }\n        } catch (error) {\n        }\n      }\n      for (const name in specialAttributes) {\n        const value = specialAttributes[name];\n        if (tagName === \"canvas\" && name === \"rr_dataURL\") {\n          const image = doc.createElement(\"img\");\n          image.onload = () => {\n            const ctx = node.getContext(\"2d\");\n            if (ctx) {\n              ctx.drawImage(image, 0, 0, image.width, image.height);\n            }\n          };\n          image.src = value.toString();\n          if (node.RRNodeType)\n            node.rr_dataURL = value.toString();\n        } else if (tagName === \"img\" && name === \"rr_dataURL\") {\n          const image = node;\n          if (!image.currentSrc.startsWith(\"data:\")) {\n            image.setAttribute(\n              \"rrweb-original-src\",\n              n.attributes.src\n            );\n            image.src = value.toString();\n          }\n        }\n        if (name === \"rr_width\") {\n          node.style.setProperty(\"width\", value.toString());\n        } else if (name === \"rr_height\") {\n          node.style.setProperty(\"height\", value.toString());\n        } else if (name === \"rr_mediaCurrentTime\" && typeof value === \"number\") {\n          node.currentTime = value;\n        } else if (name === \"rr_mediaState\") {\n          switch (value) {\n            case \"played\":\n              node.play().catch((e) => console.warn(\"media playback error\", e));\n              break;\n            case \"paused\":\n              node.pause();\n              break;\n          }\n        }\n      }\n      if (n.isShadowHost) {\n        if (!node.shadowRoot) {\n          node.attachShadow({ mode: \"open\" });\n        } else {\n          while (node.shadowRoot.firstChild) {\n            node.shadowRoot.removeChild(node.shadowRoot.firstChild);\n          }\n        }\n      }\n      return node;\n    }\n    case NodeType.Text:\n      return doc.createTextNode(\n        n.isStyle && hackCss ? addHoverClass(n.textContent, cache) : n.textContent\n      );\n    case NodeType.CDATA:\n      if (!(doc instanceof XMLDocument)) {\n        return null;\n      }\n      return doc.createCDATASection(n.textContent);\n    case NodeType.Comment:\n      return doc.createComment(n.textContent);\n    default:\n      return null;\n  }\n}\nfunction buildNodeWithSN(n, options) {\n  const {\n    doc,\n    mirror,\n    skipChild = false,\n    hackCss = true,\n    afterAppend,\n    cache\n  } = options;\n  if (mirror.has(n.id)) {\n    const nodeInMirror = mirror.getNode(n.id);\n    const meta = mirror.getMeta(nodeInMirror);\n    if (isNodeMetaEqual(meta, n)) return mirror.getNode(n.id);\n  }\n  let node = buildNode(n, { doc, hackCss, cache });\n  if (!node) {\n    return null;\n  }\n  if (n.rootId && mirror.getNode(n.rootId) !== doc) {\n    mirror.replace(n.rootId, doc);\n  }\n  if (n.type === NodeType.Document) {\n    doc.close();\n    doc.open();\n    if (n.compatMode === \"BackCompat\" && n.childNodes && n.childNodes[0].type !== NodeType.DocumentType) {\n      if (n.childNodes[0].type === NodeType.Element && \"xmlns\" in n.childNodes[0].attributes && n.childNodes[0].attributes.xmlns === \"http://www.w3.org/1999/xhtml\") {\n        doc.write(\n          '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">'\n        );\n      } else {\n        doc.write(\n          '<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">'\n        );\n      }\n    }\n    node = doc;\n  }\n  mirror.add(node, n);\n  if ((n.type === NodeType.Document || n.type === NodeType.Element) && !skipChild) {\n    for (const childN of n.childNodes) {\n      const childNode = buildNodeWithSN(childN, {\n        doc,\n        mirror,\n        skipChild: false,\n        hackCss,\n        afterAppend,\n        cache\n      });\n      if (!childNode) {\n        console.warn(\"Failed to rebuild\", childN);\n        continue;\n      }\n      if (childN.isShadow && isElement(node) && node.shadowRoot) {\n        node.shadowRoot.appendChild(childNode);\n      } else if (n.type === NodeType.Document && childN.type == NodeType.Element) {\n        const htmlElement = childNode;\n        let body = null;\n        htmlElement.childNodes.forEach((child) => {\n          if (child.nodeName === \"BODY\") body = child;\n        });\n        if (body) {\n          htmlElement.removeChild(body);\n          node.appendChild(childNode);\n          htmlElement.appendChild(body);\n        } else {\n          node.appendChild(childNode);\n        }\n      } else {\n        node.appendChild(childNode);\n      }\n      if (afterAppend) {\n        afterAppend(childNode, childN.id);\n      }\n    }\n  }\n  return node;\n}\nfunction visit(mirror, onVisit) {\n  function walk(node) {\n    onVisit(node);\n  }\n  for (const id of mirror.getIds()) {\n    if (mirror.has(id)) {\n      walk(mirror.getNode(id));\n    }\n  }\n}\nfunction handleScroll(node, mirror) {\n  const n = mirror.getMeta(node);\n  if (n?.type !== NodeType.Element) {\n    return;\n  }\n  const el = node;\n  for (const name in n.attributes) {\n    if (!(Object.prototype.hasOwnProperty.call(n.attributes, name) && name.startsWith(\"rr_\"))) {\n      continue;\n    }\n    const value = n.attributes[name];\n    if (name === \"rr_scrollLeft\") {\n      el.scrollLeft = value;\n    }\n    if (name === \"rr_scrollTop\") {\n      el.scrollTop = value;\n    }\n  }\n}\nfunction rebuild(n, options) {\n  const {\n    doc,\n    onVisit,\n    hackCss = true,\n    afterAppend,\n    cache,\n    mirror = new Mirror()\n  } = options;\n  const node = buildNodeWithSN(n, {\n    doc,\n    mirror,\n    skipChild: false,\n    hackCss,\n    afterAppend,\n    cache\n  });\n  visit(mirror, (visitedNode) => {\n    if (onVisit) {\n      onVisit(visitedNode);\n    }\n    handleScroll(visitedNode, mirror);\n  });\n  return node;\n}\nexport {\n  IGNORED_NODE,\n  Mirror,\n  NodeType,\n  addHoverClass,\n  buildNodeWithSN,\n  classMatchesRegex,\n  cleanupSnapshot,\n  clearTimeout,\n  createCache,\n  createMatchPredicate,\n  createMirror,\n  distanceToMatch,\n  escapeImportStatement,\n  extractFileExtension,\n  fixAllCssProperty,\n  fixSafariColons,\n  genId,\n  getIframeContentDocument,\n  getInputType,\n  getInputValue,\n  ignoreAttribute,\n  is2DCanvasBlank,\n  isCSSImportRule,\n  isCSSStyleRule,\n  isElement,\n  isNativeShadowDom,\n  isNodeMetaEqual,\n  isShadowRoot,\n  maskInputValue,\n  needMaskingText,\n  onRequestAnimationFrame,\n  rebuild,\n  serializeNodeWithId,\n  setTimeout,\n  shouldMaskInput,\n  snapshot,\n  stringifyRule,\n  stringifyStylesheet,\n  toLowerCase,\n  toUpperCase,\n  transformAttribute,\n  visitSnapshot\n};\n//# sourceMappingURL=rrweb-snapshot.js.map\n","// Note that these are the serialized attributes and not attributes directly on\n// the DOM Node. Attributes we are interested in:\nconst ATTRIBUTES_TO_RECORD = new Set([\n  'id',\n  'class',\n  'aria-label',\n  'role',\n  'name',\n  'alt',\n  'title',\n  'data-test-id',\n  'data-testid',\n  'disabled',\n  'aria-disabled',\n  'data-sentry-component',\n]);\n\n/**\n * Inclusion list of attributes that we want to record from the DOM element\n */\nexport function getAttributesToRecord(attributes: Record<string, unknown>): Record<string, unknown> {\n  const obj: Record<string, unknown> = {};\n  if (!attributes['data-sentry-component'] && attributes['data-sentry-element']) {\n    attributes['data-sentry-component'] = attributes['data-sentry-element'];\n  }\n  for (const key in attributes) {\n    if (ATTRIBUTES_TO_RECORD.has(key)) {\n      let normalizedKey = key;\n\n      if (key === 'data-testid' || key === 'data-test-id') {\n        normalizedKey = 'testId';\n      }\n\n      obj[normalizedKey] = attributes[key];\n    }\n  }\n\n  return obj;\n}\n","import { record } from '@sentry-internal/rrweb';\nimport type { serializedElementNodeWithId, serializedNodeWithId } from '@sentry-internal/rrweb-snapshot';\nimport { NodeType } from '@sentry-internal/rrweb-snapshot';\nimport { htmlTreeAsString } from '@sentry/core';\nimport type { Breadcrumb, HandlerDataDom } from '@sentry/core';\n\nimport type { ReplayContainer } from '../types';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { handleClick } from './handleClick';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\nimport { getClickTargetNode, getTargetNode } from './util/domUtils';\nimport { getAttributesToRecord } from './util/getAttributesToRecord';\n\nexport const handleDomListener: (replay: ReplayContainer) => (handlerData: HandlerDataDom) => void = (\n  replay: ReplayContainer,\n) => {\n  return (handlerData: HandlerDataDom): void => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleDom(handlerData);\n\n    if (!result) {\n      return;\n    }\n\n    const isClick = handlerData.name === 'click';\n    const event = isClick ? (handlerData.event as PointerEvent) : undefined;\n    // Ignore clicks if ctrl/alt/meta/shift keys are held down as they alter behavior of clicks (e.g. open in new tab)\n    if (\n      isClick &&\n      replay.clickDetector &&\n      event &&\n      event.target &&\n      !event.altKey &&\n      !event.metaKey &&\n      !event.ctrlKey &&\n      !event.shiftKey\n    ) {\n      handleClick(\n        replay.clickDetector,\n        result as Breadcrumb & { timestamp: number; data: { nodeId: number } },\n        getClickTargetNode(handlerData.event as Event) as HTMLElement,\n      );\n    }\n\n    addBreadcrumbEvent(replay, result);\n  };\n};\n\n/** Get the base DOM breadcrumb. */\nexport function getBaseDomBreadcrumb(target: Node | null, message: string): Breadcrumb {\n  const nodeId = record.mirror.getId(target);\n  const node = nodeId && record.mirror.getNode(nodeId);\n  const meta = node && record.mirror.getMeta(node);\n  const element = meta && isElement(meta) ? meta : null;\n\n  return {\n    message,\n    data: element\n      ? {\n          nodeId,\n          node: {\n            id: nodeId,\n            tagName: element.tagName,\n            textContent: Array.from(element.childNodes)\n              .map((node: serializedNodeWithId) => node.type === NodeType.Text && node.textContent)\n              .filter(Boolean) // filter out empty values\n              .map(text => (text as string).trim())\n              .join(''),\n            attributes: getAttributesToRecord(element.attributes),\n          },\n        }\n      : {},\n  };\n}\n\n/**\n * An event handler to react to DOM events.\n * Exported for tests.\n */\nexport function handleDom(handlerData: HandlerDataDom): Breadcrumb | null {\n  const { target, message } = getDomTarget(handlerData);\n\n  return createBreadcrumb({\n    category: `ui.${handlerData.name}`,\n    ...getBaseDomBreadcrumb(target, message),\n  });\n}\n\nfunction getDomTarget(handlerData: HandlerDataDom): { target: Node | null; message: string } {\n  const isClick = handlerData.name === 'click';\n\n  let message: string | undefined;\n  let target: Node | null = null;\n\n  // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n  try {\n    target = isClick ? getClickTargetNode(handlerData.event as Event) : getTargetNode(handlerData.event as Event);\n    message = htmlTreeAsString(target, { maxStringLength: 200 }) || '<unknown>';\n  } catch (e) {\n    message = '<unknown>';\n  }\n\n  return { target, message };\n}\n\nfunction isElement(node: serializedNodeWithId): node is serializedElementNodeWithId {\n  return node.type === NodeType.Element;\n}\n","import { record } from '@sentry-internal/rrweb';\nimport { browserPerformanceTimeOrigin } from '@sentry/core';\n\nimport { WINDOW } from '../constants';\nimport type {\n  AllPerformanceEntry,\n  AllPerformanceEntryData,\n  ExperimentalPerformanceResourceTiming,\n  NavigationData,\n  PaintData,\n  ReplayContainer,\n  ReplayPerformanceEntry,\n  ResourceData,\n  WebVitalData,\n} from '../types';\n\n// Map entryType -> function to normalize data for event\nconst ENTRY_TYPES: Record<\n  string,\n  (entry: AllPerformanceEntry) => null | ReplayPerformanceEntry<AllPerformanceEntryData>\n> = {\n  // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n  resource: createResourceEntry,\n  paint: createPaintEntry,\n  // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n  navigation: createNavigationEntry,\n};\n\nexport interface Metric {\n  /**\n   * The current value of the metric.\n   */\n  value: number;\n\n  /**\n   * The rating as to whether the metric value is within the \"good\",\n   * \"needs improvement\", or \"poor\" thresholds of the metric.\n   */\n  rating: 'good' | 'needs-improvement' | 'poor';\n\n  /**\n   * Any performance entries relevant to the metric value calculation.\n   * The array may also be empty if the metric value was not based on any\n   * entries (e.g. a CLS value of 0 given no layout shifts).\n   */\n  entries: PerformanceEntry[] | LayoutShift[];\n}\n\ninterface LayoutShift extends PerformanceEntry {\n  value: number;\n  sources: LayoutShiftAttribution[];\n  hadRecentInput: boolean;\n}\n\ninterface LayoutShiftAttribution {\n  node?: Node;\n  previousRect: DOMRectReadOnly;\n  currentRect: DOMRectReadOnly;\n}\n\n/**\n * Handler creater for web vitals\n */\nexport function webVitalHandler(\n  getter: (metric: Metric) => ReplayPerformanceEntry<AllPerformanceEntryData>,\n  replay: ReplayContainer,\n): (data: { metric: Metric }) => void {\n  return ({ metric }) => void replay.replayPerformanceEntries.push(getter(metric));\n}\n\n/**\n * Create replay performance entries from the browser performance entries.\n */\nexport function createPerformanceEntries(\n  entries: AllPerformanceEntry[],\n): ReplayPerformanceEntry<AllPerformanceEntryData>[] {\n  return entries.map(createPerformanceEntry).filter(Boolean) as ReplayPerformanceEntry<AllPerformanceEntryData>[];\n}\n\nfunction createPerformanceEntry(entry: AllPerformanceEntry): ReplayPerformanceEntry<AllPerformanceEntryData> | null {\n  const entryType = ENTRY_TYPES[entry.entryType];\n  if (!entryType) {\n    return null;\n  }\n\n  return entryType(entry);\n}\n\nfunction getAbsoluteTime(time: number): number {\n  // browserPerformanceTimeOrigin can be undefined if `performance` or\n  // `performance.now` doesn't exist, but this is already checked by this integration\n  return ((browserPerformanceTimeOrigin() || WINDOW.performance.timeOrigin) + time) / 1000;\n}\n\nfunction createPaintEntry(entry: PerformancePaintTiming): ReplayPerformanceEntry<PaintData> {\n  const { duration, entryType, name, startTime } = entry;\n\n  const start = getAbsoluteTime(startTime);\n  return {\n    type: entryType,\n    name,\n    start,\n    end: start + duration,\n    data: undefined,\n  };\n}\n\nfunction createNavigationEntry(entry: PerformanceNavigationTiming): ReplayPerformanceEntry<NavigationData> | null {\n  const {\n    entryType,\n    name,\n    decodedBodySize,\n    duration,\n    domComplete,\n    encodedBodySize,\n    domContentLoadedEventStart,\n    domContentLoadedEventEnd,\n    domInteractive,\n    loadEventStart,\n    loadEventEnd,\n    redirectCount,\n    startTime,\n    transferSize,\n    type,\n  } = entry;\n\n  // Ignore entries with no duration, they do not seem to be useful and cause dupes\n  if (duration === 0) {\n    return null;\n  }\n\n  return {\n    type: `${entryType}.${type}`,\n    start: getAbsoluteTime(startTime),\n    end: getAbsoluteTime(domComplete),\n    name,\n    data: {\n      size: transferSize,\n      decodedBodySize,\n      encodedBodySize,\n      duration,\n      domInteractive,\n      domContentLoadedEventStart,\n      domContentLoadedEventEnd,\n      loadEventStart,\n      loadEventEnd,\n      domComplete,\n      redirectCount,\n    },\n  };\n}\n\nfunction createResourceEntry(\n  entry: ExperimentalPerformanceResourceTiming,\n): ReplayPerformanceEntry<ResourceData> | null {\n  const {\n    entryType,\n    initiatorType,\n    name,\n    responseEnd,\n    startTime,\n    decodedBodySize,\n    encodedBodySize,\n    responseStatus,\n    transferSize,\n  } = entry;\n\n  // Core SDK handles these\n  if (['fetch', 'xmlhttprequest'].includes(initiatorType)) {\n    return null;\n  }\n\n  return {\n    type: `${entryType}.${initiatorType}`,\n    start: getAbsoluteTime(startTime),\n    end: getAbsoluteTime(responseEnd),\n    name,\n    data: {\n      size: transferSize,\n      statusCode: responseStatus,\n      decodedBodySize,\n      encodedBodySize,\n    },\n  };\n}\n\n/**\n * Add a LCP event to the replay based on a LCP metric.\n */\nexport function getLargestContentfulPaint(metric: Metric): ReplayPerformanceEntry<WebVitalData> {\n  const lastEntry = metric.entries[metric.entries.length - 1] as (PerformanceEntry & { element?: Node }) | undefined;\n  const node = lastEntry?.element ? [lastEntry.element] : undefined;\n  return getWebVital(metric, 'largest-contentful-paint', node);\n}\n\nfunction isLayoutShift(entry: PerformanceEntry): entry is LayoutShift {\n  return (entry as LayoutShift).sources !== undefined;\n}\n\n/**\n * Add a CLS event to the replay based on a CLS metric.\n */\nexport function getCumulativeLayoutShift(metric: Metric): ReplayPerformanceEntry<WebVitalData> {\n  const layoutShifts: WebVitalData['attributions'] = [];\n  const nodes: Node[] = [];\n  for (const entry of metric.entries) {\n    if (isLayoutShift(entry)) {\n      const nodeIds = [];\n      for (const source of entry.sources) {\n        if (source.node) {\n          nodes.push(source.node);\n          const nodeId = record.mirror.getId(source.node);\n          if (nodeId) {\n            nodeIds.push(nodeId);\n          }\n        }\n      }\n      layoutShifts.push({ value: entry.value, nodeIds: nodeIds.length ? nodeIds : undefined });\n    }\n  }\n\n  return getWebVital(metric, 'cumulative-layout-shift', nodes, layoutShifts);\n}\n\n/**\n * Add a FID event to the replay based on a FID metric.\n */\nexport function getFirstInputDelay(metric: Metric): ReplayPerformanceEntry<WebVitalData> {\n  const lastEntry = metric.entries[metric.entries.length - 1] as (PerformanceEntry & { target?: Node }) | undefined;\n  const node = lastEntry?.target ? [lastEntry.target] : undefined;\n  return getWebVital(metric, 'first-input-delay', node);\n}\n\n/**\n * Add an INP event to the replay based on an INP metric.\n */\nexport function getInteractionToNextPaint(metric: Metric): ReplayPerformanceEntry<WebVitalData> {\n  const lastEntry = metric.entries[metric.entries.length - 1] as (PerformanceEntry & { target?: Node }) | undefined;\n  const node = lastEntry?.target ? [lastEntry.target] : undefined;\n  return getWebVital(metric, 'interaction-to-next-paint', node);\n}\n\n/**\n * Add an web vital event to the replay based on the web vital metric.\n */\nfunction getWebVital(\n  metric: Metric,\n  name: string,\n  nodes: Node[] | undefined,\n  attributions?: WebVitalData['attributions'],\n): ReplayPerformanceEntry<WebVitalData> {\n  const value = metric.value;\n  const rating = metric.rating;\n\n  const end = getAbsoluteTime(value);\n\n  return {\n    type: 'web-vital',\n    name,\n    start: end,\n    end,\n    data: {\n      value,\n      size: value,\n      rating,\n      nodeIds: nodes ? nodes.map(node => record.mirror.getId(node)) : undefined,\n      attributions,\n    },\n  };\n}\n","import type { ConsoleLevel, Logger, SeverityLevel } from '@sentry/core';\nimport { addBreadcrumb, captureException, logger as coreLogger, severityLevelFromString } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build';\n\ntype ReplayConsoleLevels = Extract<ConsoleLevel, 'info' | 'warn' | 'error' | 'log'>;\nconst CONSOLE_LEVELS: readonly ReplayConsoleLevels[] = ['info', 'warn', 'error', 'log'] as const;\nconst PREFIX = '[Replay] ';\n\ntype LoggerMethod = (...args: unknown[]) => void;\n\ninterface LoggerConfig {\n  captureExceptions: boolean;\n  traceInternals: boolean;\n}\n\ninterface ReplayLogger extends Logger {\n  /**\n   * Calls `logger.info` but saves breadcrumb in the next tick due to race\n   * conditions before replay is initialized.\n   */\n  infoTick: LoggerMethod;\n  /**\n   * Captures exceptions (`Error`) if \"capture internal exceptions\" is enabled\n   */\n  exception: LoggerMethod;\n  /**\n   * Configures the logger with additional debugging behavior\n   */\n  setConfig(config: Partial<LoggerConfig>): void;\n}\n\nfunction _addBreadcrumb(message: unknown, level: SeverityLevel = 'info'): void {\n  addBreadcrumb(\n    {\n      category: 'console',\n      data: {\n        logger: 'replay',\n      },\n      level,\n      message: `${PREFIX}${message}`,\n    },\n    { level },\n  );\n}\n\nfunction makeReplayLogger(): ReplayLogger {\n  let _capture = false;\n  let _trace = false;\n\n  const _logger: Partial<ReplayLogger> = {\n    exception: () => undefined,\n    infoTick: () => undefined,\n    setConfig: (opts: Partial<LoggerConfig>) => {\n      _capture = !!opts.captureExceptions;\n      _trace = !!opts.traceInternals;\n    },\n  };\n\n  if (DEBUG_BUILD) {\n    CONSOLE_LEVELS.forEach(name => {\n      _logger[name] = (...args: unknown[]) => {\n        coreLogger[name](PREFIX, ...args);\n        if (_trace) {\n          _addBreadcrumb(args.join(''), severityLevelFromString(name));\n        }\n      };\n    });\n\n    _logger.exception = (error: unknown, ...message: unknown[]) => {\n      if (message.length && _logger.error) {\n        _logger.error(...message);\n      }\n\n      coreLogger.error(PREFIX, error);\n\n      if (_capture) {\n        captureException(error);\n      } else if (_trace) {\n        // No need for a breadcrumb if `_capture` is enabled since it should be\n        // captured as an exception\n        _addBreadcrumb(error, 'error');\n      }\n    };\n\n    _logger.infoTick = (...args: unknown[]) => {\n      coreLogger.info(PREFIX, ...args);\n      if (_trace) {\n        // Wait a tick here to avoid race conditions for some initial logs\n        // which may be added before replay is initialized\n        setTimeout(() => _addBreadcrumb(args[0]), 0);\n      }\n    };\n  } else {\n    CONSOLE_LEVELS.forEach(name => {\n      _logger[name] = () => undefined;\n    });\n  }\n\n  return _logger as ReplayLogger;\n}\n\nexport const logger = makeReplayLogger();\n","import { REPLAY_MAX_EVENT_BUFFER_SIZE } from '../constants';\n\n/** This error indicates that the event buffer size exceeded the limit.. */\nexport class EventBufferSizeExceededError extends Error {\n  public constructor() {\n    super(`Event buffer exceeded maximum size of ${REPLAY_MAX_EVENT_BUFFER_SIZE}.`);\n  }\n}\n","import { REPLAY_MAX_EVENT_BUFFER_SIZE } from '../constants';\nimport type { AddEventResult, EventBuffer, EventBufferType, RecordingEvent } from '../types';\nimport { timestampToMs } from '../util/timestamp';\nimport { EventBufferSizeExceededError } from './error';\n\n/**\n * A basic event buffer that does not do any compression.\n * Used as fallback if the compression worker cannot be loaded or is disabled.\n */\nexport class EventBufferArray implements EventBuffer {\n  /** All the events that are buffered to be sent. */\n  public events: RecordingEvent[];\n\n  /** @inheritdoc */\n  public hasCheckout: boolean;\n\n  /** @inheritdoc */\n  public waitForCheckout: boolean;\n\n  private _totalSize: number;\n\n  public constructor() {\n    this.events = [];\n    this._totalSize = 0;\n    this.hasCheckout = false;\n    this.waitForCheckout = false;\n  }\n\n  /** @inheritdoc */\n  public get hasEvents(): boolean {\n    return this.events.length > 0;\n  }\n\n  /** @inheritdoc */\n  public get type(): EventBufferType {\n    return 'sync';\n  }\n\n  /** @inheritdoc */\n  public destroy(): void {\n    this.events = [];\n  }\n\n  /** @inheritdoc */\n  public async addEvent(event: RecordingEvent): Promise<AddEventResult> {\n    const eventSize = JSON.stringify(event).length;\n    this._totalSize += eventSize;\n    if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n      throw new EventBufferSizeExceededError();\n    }\n\n    this.events.push(event);\n  }\n\n  /** @inheritdoc */\n  public finish(): Promise<string> {\n    return new Promise<string>(resolve => {\n      // Make a copy of the events array reference and immediately clear the\n      // events member so that we do not lose new events while uploading\n      // attachment.\n      const eventsRet = this.events;\n      this.clear();\n      resolve(JSON.stringify(eventsRet));\n    });\n  }\n\n  /** @inheritdoc */\n  public clear(): void {\n    this.events = [];\n    this._totalSize = 0;\n    this.hasCheckout = false;\n  }\n\n  /** @inheritdoc */\n  public getEarliestTimestamp(): number | null {\n    const timestamp = this.events.map(event => event.timestamp).sort()[0];\n\n    if (!timestamp) {\n      return null;\n    }\n\n    return timestampToMs(timestamp);\n  }\n}\n","import { DEBUG_BUILD } from '../debug-build';\nimport type { WorkerRequest, WorkerResponse } from '../types';\nimport { logger } from '../util/logger';\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nexport class WorkerHandler {\n  private _worker: Worker;\n  private _id: number;\n  private _ensureReadyPromise?: Promise<void>;\n\n  public constructor(worker: Worker) {\n    this._worker = worker;\n    this._id = 0;\n  }\n\n  /**\n   * Ensure the worker is ready (or not).\n   * This will either resolve when the worker is ready, or reject if an error occurred.\n   */\n  public ensureReady(): Promise<void> {\n    // Ensure we only check once\n    if (this._ensureReadyPromise) {\n      return this._ensureReadyPromise;\n    }\n\n    this._ensureReadyPromise = new Promise((resolve, reject) => {\n      this._worker.addEventListener(\n        'message',\n        ({ data }: MessageEvent) => {\n          if ((data as WorkerResponse).success) {\n            resolve();\n          } else {\n            reject();\n          }\n        },\n        { once: true },\n      );\n\n      this._worker.addEventListener(\n        'error',\n        error => {\n          reject(error);\n        },\n        { once: true },\n      );\n    });\n\n    return this._ensureReadyPromise;\n  }\n\n  /**\n   * Destroy the worker.\n   */\n  public destroy(): void {\n    DEBUG_BUILD && logger.info('Destroying compression worker');\n    this._worker.terminate();\n  }\n\n  /**\n   * Post message to worker and wait for response before resolving promise.\n   */\n  public postMessage<T>(method: WorkerRequest['method'], arg?: WorkerRequest['arg']): Promise<T> {\n    const id = this._getAndIncrementId();\n\n    return new Promise((resolve, reject) => {\n      const listener = ({ data }: MessageEvent): void => {\n        const response = data as WorkerResponse;\n        if (response.method !== method) {\n          return;\n        }\n\n        // There can be multiple listeners for a single method, the id ensures\n        // that the response matches the caller.\n        if (response.id !== id) {\n          return;\n        }\n\n        // At this point, we'll always want to remove listener regardless of result status\n        this._worker.removeEventListener('message', listener);\n\n        if (!response.success) {\n          // TODO: Do some error handling, not sure what\n          DEBUG_BUILD && logger.error('Error in compression worker: ', response.response);\n\n          reject(new Error('Error in compression worker'));\n          return;\n        }\n\n        resolve(response.response as T);\n      };\n\n      // Note: we can't use `once` option because it's possible it needs to\n      // listen to multiple messages\n      this._worker.addEventListener('message', listener);\n      this._worker.postMessage({ id, method, arg });\n    });\n  }\n\n  /** Get the current ID and increment it for the next call. */\n  private _getAndIncrementId(): number {\n    return this._id++;\n  }\n}\n","import type { ReplayRecordingData } from '@sentry/core';\n\nimport { REPLAY_MAX_EVENT_BUFFER_SIZE } from '../constants';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { AddEventResult, EventBuffer, EventBufferType, RecordingEvent } from '../types';\nimport { logger } from '../util/logger';\nimport { timestampToMs } from '../util/timestamp';\nimport { WorkerHandler } from './WorkerHandler';\nimport { EventBufferSizeExceededError } from './error';\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nexport class EventBufferCompressionWorker implements EventBuffer {\n  /** @inheritdoc */\n  public hasCheckout: boolean;\n\n  /** @inheritdoc */\n  public waitForCheckout: boolean;\n\n  private _worker: WorkerHandler;\n  private _earliestTimestamp: number | null;\n  private _totalSize;\n\n  public constructor(worker: Worker) {\n    this._worker = new WorkerHandler(worker);\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n    this.hasCheckout = false;\n    this.waitForCheckout = false;\n  }\n\n  /** @inheritdoc */\n  public get hasEvents(): boolean {\n    return !!this._earliestTimestamp;\n  }\n\n  /** @inheritdoc */\n  public get type(): EventBufferType {\n    return 'worker';\n  }\n\n  /**\n   * Ensure the worker is ready (or not).\n   * This will either resolve when the worker is ready, or reject if an error occurred.\n   */\n  public ensureReady(): Promise<void> {\n    return this._worker.ensureReady();\n  }\n\n  /**\n   * Destroy the event buffer.\n   */\n  public destroy(): void {\n    this._worker.destroy();\n  }\n\n  /**\n   * Add an event to the event buffer.\n   *\n   * Returns true if event was successfully received and processed by worker.\n   */\n  public addEvent(event: RecordingEvent): Promise<AddEventResult> {\n    const timestamp = timestampToMs(event.timestamp);\n    if (!this._earliestTimestamp || timestamp < this._earliestTimestamp) {\n      this._earliestTimestamp = timestamp;\n    }\n\n    const data = JSON.stringify(event);\n    this._totalSize += data.length;\n\n    if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n      return Promise.reject(new EventBufferSizeExceededError());\n    }\n\n    return this._sendEventToWorker(data);\n  }\n\n  /**\n   * Finish the event buffer and return the compressed data.\n   */\n  public finish(): Promise<ReplayRecordingData> {\n    return this._finishRequest();\n  }\n\n  /** @inheritdoc */\n  public clear(): void {\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n    this.hasCheckout = false;\n\n    // We do not wait on this, as we assume the order of messages is consistent for the worker\n    this._worker.postMessage('clear').then(null, e => {\n      DEBUG_BUILD && logger.exception(e, 'Sending \"clear\" message to worker failed', e);\n    });\n  }\n\n  /** @inheritdoc */\n  public getEarliestTimestamp(): number | null {\n    return this._earliestTimestamp;\n  }\n\n  /**\n   * Send the event to the worker.\n   */\n  private _sendEventToWorker(data: string): Promise<AddEventResult> {\n    return this._worker.postMessage<void>('addEvent', data);\n  }\n\n  /**\n   * Finish the request and return the compressed data from the worker.\n   */\n  private async _finishRequest(): Promise<Uint8Array> {\n    const response = await this._worker.postMessage<Uint8Array>('finish');\n\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n\n    return response;\n  }\n}\n","import type { ReplayRecordingData } from '@sentry/core';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { AddEventResult, EventBuffer, EventBufferType, RecordingEvent } from '../types';\nimport { logger } from '../util/logger';\nimport { EventBufferArray } from './EventBufferArray';\nimport { EventBufferCompressionWorker } from './EventBufferCompressionWorker';\n\n/**\n * This proxy will try to use the compression worker, and fall back to use the simple buffer if an error occurs there.\n * This can happen e.g. if the worker cannot be loaded.\n * Exported only for testing.\n */\nexport class EventBufferProxy implements EventBuffer {\n  private _fallback: EventBufferArray;\n  private _compression: EventBufferCompressionWorker;\n  private _used: EventBuffer;\n  private _ensureWorkerIsLoadedPromise: Promise<void>;\n\n  public constructor(worker: Worker) {\n    this._fallback = new EventBufferArray();\n    this._compression = new EventBufferCompressionWorker(worker);\n    this._used = this._fallback;\n\n    this._ensureWorkerIsLoadedPromise = this._ensureWorkerIsLoaded();\n  }\n\n  /** @inheritdoc */\n  public get waitForCheckout(): boolean {\n    return this._used.waitForCheckout;\n  }\n\n  /** @inheritdoc */\n  public get type(): EventBufferType {\n    return this._used.type;\n  }\n\n  /** @inheritDoc */\n  public get hasEvents(): boolean {\n    return this._used.hasEvents;\n  }\n\n  /** @inheritdoc */\n  public get hasCheckout(): boolean {\n    return this._used.hasCheckout;\n  }\n  /** @inheritdoc */\n  public set hasCheckout(value: boolean) {\n    this._used.hasCheckout = value;\n  }\n\n  /** @inheritdoc */\n  // eslint-disable-next-line @typescript-eslint/adjacent-overload-signatures\n  public set waitForCheckout(value: boolean) {\n    this._used.waitForCheckout = value;\n  }\n\n  /** @inheritDoc */\n  public destroy(): void {\n    this._fallback.destroy();\n    this._compression.destroy();\n  }\n\n  /** @inheritdoc */\n  public clear(): void {\n    return this._used.clear();\n  }\n\n  /** @inheritdoc */\n  public getEarliestTimestamp(): number | null {\n    return this._used.getEarliestTimestamp();\n  }\n\n  /**\n   * Add an event to the event buffer.\n   *\n   * Returns true if event was successfully added.\n   */\n  public addEvent(event: RecordingEvent): Promise<AddEventResult> {\n    return this._used.addEvent(event);\n  }\n\n  /** @inheritDoc */\n  public async finish(): Promise<ReplayRecordingData> {\n    // Ensure the worker is loaded, so the sent event is compressed\n    await this.ensureWorkerIsLoaded();\n\n    return this._used.finish();\n  }\n\n  /** Ensure the worker has loaded. */\n  public ensureWorkerIsLoaded(): Promise<void> {\n    return this._ensureWorkerIsLoadedPromise;\n  }\n\n  /** Actually check if the worker has been loaded. */\n  private async _ensureWorkerIsLoaded(): Promise<void> {\n    try {\n      await this._compression.ensureReady();\n    } catch (error) {\n      // If the worker fails to load, we fall back to the simple buffer.\n      // Nothing more to do from our side here\n      DEBUG_BUILD && logger.exception(error, 'Failed to load the compression worker, falling back to simple buffer');\n      return;\n    }\n\n    // Now we need to switch over the array buffer to the compression worker\n    await this._switchToCompressionWorker();\n  }\n\n  /** Switch the used buffer to the compression worker. */\n  private async _switchToCompressionWorker(): Promise<void> {\n    const { events, hasCheckout, waitForCheckout } = this._fallback;\n\n    const addEventPromises: Promise<void>[] = [];\n    for (const event of events) {\n      addEventPromises.push(this._compression.addEvent(event));\n    }\n\n    this._compression.hasCheckout = hasCheckout;\n    this._compression.waitForCheckout = waitForCheckout;\n\n    // We switch over to the new buffer immediately - any further events will be added\n    // after the previously buffered ones\n    this._used = this._compression;\n\n    // Wait for original events to be re-added before resolving\n    try {\n      await Promise.all(addEventPromises);\n\n      // Can now clear fallback buffer as it's no longer necessary\n      this._fallback.clear();\n    } catch (error) {\n      DEBUG_BUILD && logger.exception(error, 'Failed to add events when switching buffers.');\n    }\n  }\n}\n","import { WINDOW } from '../constants';\n\n/** If sessionStorage is available. */\nexport function hasSessionStorage(): boolean {\n  try {\n    // This can throw, e.g. when being accessed in a sandboxed iframe\n    return 'sessionStorage' in WINDOW && !!WINDOW.sessionStorage;\n  } catch {\n    return false;\n  }\n}\n","/**\n * Given a sample rate, returns true if replay should be sampled.\n *\n * 1.0 = 100% sampling\n * 0.0 = 0% sampling\n */\nexport function isSampled(sampleRate?: number): boolean {\n  if (sampleRate === undefined) {\n    return false;\n  }\n\n  // Math.random() returns a number in range of 0 to 1 (inclusive of 0, but not 1)\n  return Math.random() < sampleRate;\n}\n","import { uuid4 } from '@sentry/core';\n\nimport type { Sampled, Session } from '../types';\n\n/**\n * Get a session with defaults & applied sampling.\n */\nexport function makeSession(session: Partial<Session> & { sampled: Sampled }): Session {\n  const now = Date.now();\n  const id = session.id || uuid4();\n  // Note that this means we cannot set a started/lastActivity of `0`, but this should not be relevant outside of tests.\n  const started = session.started || now;\n  const lastActivity = session.lastActivity || now;\n  const segmentId = session.segmentId || 0;\n  const sampled = session.sampled;\n  const previousSessionId = session.previousSessionId;\n\n  return {\n    id,\n    started,\n    lastActivity,\n    segmentId,\n    sampled,\n    previousSessionId,\n  };\n}\n","import { REPLAY_SESSION_KEY, WINDOW } from '../constants';\nimport type { Session } from '../types';\nimport { hasSessionStorage } from '../util/hasSessionStorage';\n\n/**\n * Save a session to session storage.\n */\nexport function saveSession(session: Session): void {\n  if (!hasSessionStorage()) {\n    return;\n  }\n\n  try {\n    WINDOW.sessionStorage.setItem(REPLAY_SESSION_KEY, JSON.stringify(session));\n  } catch {\n    // Ignore potential SecurityError exceptions\n  }\n}\n","import type { Sampled, Session, SessionOptions } from '../types';\nimport { isSampled } from '../util/isSampled';\nimport { makeSession } from './Session';\nimport { saveSession } from './saveSession';\n\n/**\n * Get the sampled status for a session based on sample rates & current sampled status.\n */\nexport function getSessionSampleType(sessionSampleRate: number, allowBuffering: boolean): Sampled {\n  return isSampled(sessionSampleRate) ? 'session' : allowBuffering ? 'buffer' : false;\n}\n\n/**\n * Create a new session, which in its current implementation is a Sentry event\n * that all replays will be saved to as attachments. Currently, we only expect\n * one of these Sentry events per \"replay session\".\n */\nexport function createSession(\n  { sessionSampleRate, allowBuffering, stickySession = false }: SessionOptions,\n  { previousSessionId }: { previousSessionId?: string } = {},\n): Session {\n  const sampled = getSessionSampleType(sessionSampleRate, allowBuffering);\n  const session = makeSession({\n    sampled,\n    previousSessionId,\n  });\n\n  if (stickySession) {\n    saveSession(session);\n  }\n\n  return session;\n}\n","/**\n * Given an initial timestamp and an expiry duration, checks to see if current\n * time should be considered as expired.\n */\nexport function isExpired(\n  initialTime: null | number,\n  expiry: undefined | number,\n  targetTime: number = +new Date(),\n): boolean {\n  // Always expired if < 0\n  if (initialTime === null || expiry === undefined || expiry < 0) {\n    return true;\n  }\n\n  // Never expires if == 0\n  if (expiry === 0) {\n    return false;\n  }\n\n  return initialTime + expiry <= targetTime;\n}\n","import type { Session } from '../types';\nimport { isExpired } from './isExpired';\n\n/**\n * Checks to see if session is expired\n */\nexport function isSessionExpired(\n  session: Session,\n  {\n    maxReplayDuration,\n    sessionIdleExpire,\n    targetTime = Date.now(),\n  }: { maxReplayDuration: number; sessionIdleExpire: number; targetTime?: number },\n): boolean {\n  return (\n    // First, check that maximum session length has not been exceeded\n    isExpired(session.started, maxReplayDuration, targetTime) ||\n    // check that the idle timeout has not been exceeded (i.e. user has\n    // performed an action within the last `sessionIdleExpire` ms)\n    isExpired(session.lastActivity, sessionIdleExpire, targetTime)\n  );\n}\n","import type { Session } from '../types';\nimport { isSessionExpired } from '../util/isSessionExpired';\n\n/** If the session should be refreshed or not. */\nexport function shouldRefreshSession(\n  session: Session,\n  { sessionIdleExpire, maxReplayDuration }: { sessionIdleExpire: number; maxReplayDuration: number },\n): boolean {\n  // If not expired, all good, just keep the session\n  if (!isSessionExpired(session, { sessionIdleExpire, maxReplayDuration })) {\n    return false;\n  }\n\n  // If we are buffering & haven't ever flushed yet, always continue\n  if (session.sampled === 'buffer' && session.segmentId === 0) {\n    return false;\n  }\n\n  return true;\n}\n","import { DEBUG_BUILD } from '../debug-build';\nimport type { Session, SessionOptions } from '../types';\nimport { logger } from '../util/logger';\nimport { createSession } from './createSession';\nimport { fetchSession } from './fetchSession';\nimport { shouldRefreshSession } from './shouldRefreshSession';\n\n/**\n * Get or create a session, when initializing the replay.\n * Returns a session that may be unsampled.\n */\nexport function loadOrCreateSession(\n  {\n    sessionIdleExpire,\n    maxReplayDuration,\n    previousSessionId,\n  }: {\n    sessionIdleExpire: number;\n    maxReplayDuration: number;\n    previousSessionId?: string;\n  },\n  sessionOptions: SessionOptions,\n): Session {\n  const existingSession = sessionOptions.stickySession && fetchSession();\n\n  // No session exists yet, just create a new one\n  if (!existingSession) {\n    DEBUG_BUILD && logger.infoTick('Creating new session');\n    return createSession(sessionOptions, { previousSessionId });\n  }\n\n  if (!shouldRefreshSession(existingSession, { sessionIdleExpire, maxReplayDuration })) {\n    return existingSession;\n  }\n\n  DEBUG_BUILD && logger.infoTick('Session in sessionStorage is expired, creating new one...');\n  return createSession(sessionOptions, { previousSessionId: existingSession.id });\n}\n","import { REPLAY_SESSION_KEY, WINDOW } from '../constants';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { Session } from '../types';\nimport { hasSessionStorage } from '../util/hasSessionStorage';\nimport { logger } from '../util/logger';\nimport { makeSession } from './Session';\n\n/**\n * Fetches a session from storage\n */\nexport function fetchSession(): Session | null {\n  if (!hasSessionStorage()) {\n    return null;\n  }\n\n  try {\n    // This can throw if cookies are disabled\n    const sessionStringFromStorage = WINDOW.sessionStorage.getItem(REPLAY_SESSION_KEY);\n\n    if (!sessionStringFromStorage) {\n      return null;\n    }\n\n    const sessionObj = JSON.parse(sessionStringFromStorage) as Session;\n\n    DEBUG_BUILD && logger.infoTick('Loading existing session');\n\n    return makeSession(sessionObj);\n  } catch {\n    return null;\n  }\n}\n","import { EventType } from '@sentry-internal/rrweb';\nimport { getClient } from '@sentry/core';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { EventBufferSizeExceededError } from '../eventBuffer/error';\nimport type { AddEventResult, RecordingEvent, ReplayContainer, ReplayFrameEvent, ReplayPluginOptions } from '../types';\nimport { logger } from './logger';\nimport { timestampToMs } from './timestamp';\n\nfunction isCustomEvent(event: RecordingEvent): event is ReplayFrameEvent {\n  return event.type === EventType.Custom;\n}\n\n/**\n * Add an event to the event buffer.\n * In contrast to `addEvent`, this does not return a promise & does not wait for the adding of the event to succeed/fail.\n * Instead this returns `true` if we tried to add the event, else false.\n * It returns `false` e.g. if we are paused, disabled, or out of the max replay duration.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nexport function addEventSync(replay: ReplayContainer, event: RecordingEvent, isCheckout?: boolean): boolean {\n  if (!shouldAddEvent(replay, event)) {\n    return false;\n  }\n\n  // This should never reject\n  // eslint-disable-next-line @typescript-eslint/no-floating-promises\n  _addEvent(replay, event, isCheckout);\n\n  return true;\n}\n\n/**\n * Add an event to the event buffer.\n * Resolves to `null` if no event was added, else to `void`.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nexport function addEvent(\n  replay: ReplayContainer,\n  event: RecordingEvent,\n  isCheckout?: boolean,\n): Promise<AddEventResult | null> {\n  if (!shouldAddEvent(replay, event)) {\n    return Promise.resolve(null);\n  }\n\n  return _addEvent(replay, event, isCheckout);\n}\n\nasync function _addEvent(\n  replay: ReplayContainer,\n  event: RecordingEvent,\n  isCheckout?: boolean,\n): Promise<AddEventResult | null> {\n  const { eventBuffer } = replay;\n\n  if (!eventBuffer || (eventBuffer.waitForCheckout && !isCheckout)) {\n    return null;\n  }\n\n  const isBufferMode = replay.recordingMode === 'buffer';\n\n  try {\n    if (isCheckout && isBufferMode) {\n      eventBuffer.clear();\n    }\n\n    if (isCheckout) {\n      eventBuffer.hasCheckout = true;\n      eventBuffer.waitForCheckout = false;\n    }\n\n    const replayOptions = replay.getOptions();\n\n    const eventAfterPossibleCallback = maybeApplyCallback(event, replayOptions.beforeAddRecordingEvent);\n\n    if (!eventAfterPossibleCallback) {\n      return;\n    }\n\n    return await eventBuffer.addEvent(eventAfterPossibleCallback);\n  } catch (error) {\n    const isExceeded = error && error instanceof EventBufferSizeExceededError;\n    const reason = isExceeded ? 'addEventSizeExceeded' : 'addEvent';\n\n    if (isExceeded && isBufferMode) {\n      // Clear buffer and wait for next checkout\n      eventBuffer.clear();\n      eventBuffer.waitForCheckout = true;\n\n      return null;\n    }\n\n    replay.handleException(error);\n\n    await replay.stop({ reason });\n\n    const client = getClient();\n\n    if (client) {\n      client.recordDroppedEvent('internal_sdk_error', 'replay');\n    }\n  }\n}\n\n/** Exported only for tests. */\nexport function shouldAddEvent(replay: ReplayContainer, event: RecordingEvent): boolean {\n  if (!replay.eventBuffer || replay.isPaused() || !replay.isEnabled()) {\n    return false;\n  }\n\n  const timestampInMs = timestampToMs(event.timestamp);\n\n  // Throw out events that happen more than 5 minutes ago. This can happen if\n  // page has been left open and idle for a long period of time and user\n  // comes back to trigger a new session. The performance entries rely on\n  // `performance.timeOrigin`, which is when the page first opened.\n  if (timestampInMs + replay.timeouts.sessionIdlePause < Date.now()) {\n    return false;\n  }\n\n  // Throw out events that are +60min from the initial timestamp\n  if (timestampInMs > replay.getContext().initialTimestamp + replay.getOptions().maxReplayDuration) {\n    DEBUG_BUILD &&\n      logger.infoTick(`Skipping event with timestamp ${timestampInMs} because it is after maxReplayDuration`);\n    return false;\n  }\n\n  return true;\n}\n\nfunction maybeApplyCallback(\n  event: RecordingEvent,\n  callback: ReplayPluginOptions['beforeAddRecordingEvent'],\n): RecordingEvent | null | undefined {\n  try {\n    if (typeof callback === 'function' && isCustomEvent(event)) {\n      return callback(event);\n    }\n  } catch (error) {\n    DEBUG_BUILD &&\n      logger.exception(error, 'An error occurred in the `beforeAddRecordingEvent` callback, skipping the event...');\n    return null;\n  }\n\n  return event;\n}\n","import type { ErrorEvent, Event, FeedbackEvent, ReplayEvent, TransactionEvent } from '@sentry/core';\n\n/** If the event is an error event */\nexport function isErrorEvent(event: Event): event is ErrorEvent {\n  return !event.type;\n}\n\n/** If the event is a transaction event */\nexport function isTransactionEvent(event: Event): event is TransactionEvent {\n  return event.type === 'transaction';\n}\n\n/** If the event is an replay event */\nexport function isReplayEvent(event: Event): event is ReplayEvent {\n  return event.type === 'replay_event';\n}\n\n/** If the event is a feedback event */\nexport function isFeedbackEvent(event: Event): event is FeedbackEvent {\n  return event.type === 'feedback';\n}\n","import type { Breadcrumb } from '@sentry/core';\nimport { getClient, normalize } from '@sentry/core';\nimport { CONSOLE_ARG_MAX_SIZE } from '../constants';\nimport type { ReplayContainer } from '../types';\nimport type { ReplayFrame } from '../types/replayFrame';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\n\ntype BreadcrumbWithCategory = Required<Pick<Breadcrumb, 'category'>>;\n\n/**\n * Handle breadcrumbs that Sentry captures, and make sure to capture relevant breadcrumbs to Replay as well.\n */\nexport function handleBreadcrumbs(replay: ReplayContainer): void {\n  const client = getClient();\n\n  if (!client) {\n    return;\n  }\n\n  client.on('beforeAddBreadcrumb', breadcrumb => beforeAddBreadcrumb(replay, breadcrumb));\n}\n\nfunction beforeAddBreadcrumb(replay: ReplayContainer, breadcrumb: Breadcrumb): void {\n  if (!replay.isEnabled() || !isBreadcrumbWithCategory(breadcrumb)) {\n    return;\n  }\n\n  const result = normalizeBreadcrumb(breadcrumb);\n  if (result) {\n    addBreadcrumbEvent(replay, result);\n  }\n}\n\n/** Exported only for tests. */\nexport function normalizeBreadcrumb(breadcrumb: Breadcrumb): Breadcrumb | null {\n  if (\n    !isBreadcrumbWithCategory(breadcrumb) ||\n    [\n      // fetch & xhr are handled separately,in handleNetworkBreadcrumbs\n      'fetch',\n      'xhr',\n      // These two are breadcrumbs for emitted sentry events, we don't care about them\n      'sentry.event',\n      'sentry.transaction',\n    ].includes(breadcrumb.category) ||\n    // We capture UI breadcrumbs separately\n    breadcrumb.category.startsWith('ui.')\n  ) {\n    return null;\n  }\n\n  if (breadcrumb.category === 'console') {\n    return normalizeConsoleBreadcrumb(breadcrumb);\n  }\n\n  return createBreadcrumb(breadcrumb);\n}\n\n/** exported for tests only */\nexport function normalizeConsoleBreadcrumb(\n  breadcrumb: Omit<Breadcrumb, 'category'> & BreadcrumbWithCategory,\n): ReplayFrame {\n  const args = breadcrumb.data?.arguments;\n\n  if (!Array.isArray(args) || args.length === 0) {\n    return createBreadcrumb(breadcrumb);\n  }\n\n  let isTruncated = false;\n\n  // Avoid giant args captures\n  const normalizedArgs = args.map(arg => {\n    if (!arg) {\n      return arg;\n    }\n    if (typeof arg === 'string') {\n      if (arg.length > CONSOLE_ARG_MAX_SIZE) {\n        isTruncated = true;\n        return `${arg.slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n      }\n\n      return arg;\n    }\n    if (typeof arg === 'object') {\n      try {\n        const normalizedArg = normalize(arg, 7);\n        const stringified = JSON.stringify(normalizedArg);\n        if (stringified.length > CONSOLE_ARG_MAX_SIZE) {\n          isTruncated = true;\n          // We use the pretty printed JSON string here as a base\n          return `${JSON.stringify(normalizedArg, null, 2).slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n        }\n        return normalizedArg;\n      } catch {\n        // fall back to default\n      }\n    }\n\n    return arg;\n  });\n\n  return createBreadcrumb({\n    ...breadcrumb,\n    data: {\n      ...breadcrumb.data,\n      arguments: normalizedArgs,\n      ...(isTruncated ? { _meta: { warnings: ['CONSOLE_ARG_TRUNCATED'] } } : {}),\n    },\n  });\n}\n\nfunction isBreadcrumbWithCategory(breadcrumb: Breadcrumb): breadcrumb is BreadcrumbWithCategory {\n  return !!breadcrumb.category;\n}\n","import { getActiveSpan, getCurrentScope, getDynamicSamplingContextFromSpan } from '@sentry/core';\nimport type { DynamicSamplingContext } from '@sentry/core';\n\n/**\n * Reset the `replay_id` field on the DSC.\n */\nexport function resetReplayIdOnDynamicSamplingContext(): void {\n  // Reset DSC on the current scope, if there is one\n  const dsc = getCurrentScope().getPropagationContext().dsc;\n  if (dsc) {\n    delete dsc.replay_id;\n  }\n\n  // Clear it from frozen DSC on the active span\n  const activeSpan = getActiveSpan();\n  if (activeSpan) {\n    const dsc = getDynamicSamplingContextFromSpan(activeSpan);\n    delete (dsc as Partial<DynamicSamplingContext>).replay_id;\n  }\n}\n","import { EventType } from '@sentry-internal/rrweb';\n\nimport type { AddEventResult, AllEntryData, ReplayContainer, ReplayPerformanceEntry } from '../types';\n\n/**\n * Create a \"span\" for each performance entry.\n */\nexport function createPerformanceSpans(\n  replay: ReplayContainer,\n  entries: ReplayPerformanceEntry<AllEntryData>[],\n): Promise<AddEventResult | null>[] {\n  return entries.map(({ type, start, end, name, data }) => {\n    const response = replay.throttledAddEvent({\n      type: EventType.Custom,\n      timestamp: start,\n      data: {\n        tag: 'performanceSpan',\n        payload: {\n          op: type,\n          description: name,\n          startTimestamp: start,\n          endTimestamp: end,\n          data,\n        },\n      },\n    });\n\n    // If response is a string, it means its either THROTTLED or SKIPPED\n    return typeof response === 'string' ? Promise.resolve(null) : response;\n  });\n}\n","import type { NetworkRequestData, ReplayContainer, ReplayPerformanceEntry } from '../../types';\nimport { createPerformanceSpans } from '../../util/createPerformanceSpans';\nimport { shouldFilterRequest } from '../../util/shouldFilterRequest';\n\n/** Add a performance entry breadcrumb */\nexport function addNetworkBreadcrumb(\n  replay: ReplayContainer,\n  result: ReplayPerformanceEntry<NetworkRequestData> | null,\n): void {\n  if (!replay.isEnabled()) {\n    return;\n  }\n\n  if (result === null) {\n    return;\n  }\n\n  if (shouldFilterRequest(replay, result.name)) {\n    return;\n  }\n\n  replay.addUpdate(() => {\n    createPerformanceSpans(replay, [result]);\n    // Returning true will cause `addUpdate` to not flush\n    // We do not want network requests to cause a flush. This will prevent\n    // recurring/polling requests from keeping the replay session alive.\n    return true;\n  });\n}\n","import { getClient, isSentryRequestUrl } from '@sentry/core';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { ReplayContainer } from '../types';\n\n/**\n * Check whether a given request URL should be filtered out. This is so we\n * don't log Sentry ingest requests.\n */\nexport function shouldFilterRequest(replay: ReplayContainer, url: string): boolean {\n  // If we enabled the `traceInternals` experiment, we want to trace everything\n  if (DEBUG_BUILD && replay.getOptions()._experiments.traceInternals) {\n    return false;\n  }\n\n  return isSentryRequestUrl(url, getClient());\n}\n","import { serializeFormData } from '@sentry-internal/browser-utils';\nimport type { NetworkMetaWarning } from '@sentry-internal/browser-utils';\nimport { dropUndefinedKeys, stringMatchesSomePattern } from '@sentry/core';\n\nimport { NETWORK_BODY_MAX_SIZE, WINDOW } from '../../constants';\nimport type {\n  NetworkBody,\n  NetworkRequestData,\n  ReplayNetworkRequestData,\n  ReplayNetworkRequestOrResponse,\n  ReplayPerformanceEntry,\n} from '../../types';\n\n/** Get the size of a body. */\nexport function getBodySize(body: RequestInit['body']): number | undefined {\n  if (!body) {\n    return undefined;\n  }\n\n  const textEncoder = new TextEncoder();\n\n  try {\n    if (typeof body === 'string') {\n      return textEncoder.encode(body).length;\n    }\n\n    if (body instanceof URLSearchParams) {\n      return textEncoder.encode(body.toString()).length;\n    }\n\n    if (body instanceof FormData) {\n      const formDataStr = serializeFormData(body);\n      return textEncoder.encode(formDataStr).length;\n    }\n\n    if (body instanceof Blob) {\n      return body.size;\n    }\n\n    if (body instanceof ArrayBuffer) {\n      return body.byteLength;\n    }\n\n    // Currently unhandled types: ArrayBufferView, ReadableStream\n  } catch {\n    // just return undefined\n  }\n\n  return undefined;\n}\n\n/** Convert a Content-Length header to number/undefined.  */\nexport function parseContentLengthHeader(header: string | null | undefined): number | undefined {\n  if (!header) {\n    return undefined;\n  }\n\n  const size = parseInt(header, 10);\n  return isNaN(size) ? undefined : size;\n}\n\n/** Merge a warning into an existing network request/response. */\nexport function mergeWarning(\n  info: ReplayNetworkRequestOrResponse | undefined,\n  warning: NetworkMetaWarning,\n): ReplayNetworkRequestOrResponse {\n  if (!info) {\n    return {\n      headers: {},\n      size: undefined,\n      _meta: {\n        warnings: [warning],\n      },\n    };\n  }\n\n  const newMeta = { ...info._meta };\n  const existingWarnings = newMeta.warnings || [];\n  newMeta.warnings = [...existingWarnings, warning];\n\n  info._meta = newMeta;\n  return info;\n}\n\n/** Convert ReplayNetworkRequestData to a PerformanceEntry. */\nexport function makeNetworkReplayBreadcrumb(\n  type: string,\n  data: ReplayNetworkRequestData | null,\n): ReplayPerformanceEntry<NetworkRequestData> | null {\n  if (!data) {\n    return null;\n  }\n\n  const { startTimestamp, endTimestamp, url, method, statusCode, request, response } = data;\n\n  const result: ReplayPerformanceEntry<NetworkRequestData> = {\n    type,\n    start: startTimestamp / 1000,\n    end: endTimestamp / 1000,\n    name: url,\n    data: dropUndefinedKeys({\n      method,\n      statusCode,\n      request,\n      response,\n    }),\n  };\n\n  return result;\n}\n\n/** Build the request or response part of a replay network breadcrumb that was skipped. */\nexport function buildSkippedNetworkRequestOrResponse(bodySize: number | undefined): ReplayNetworkRequestOrResponse {\n  return {\n    headers: {},\n    size: bodySize,\n    _meta: {\n      warnings: ['URL_SKIPPED'],\n    },\n  };\n}\n\n/** Build the request or response part of a replay network breadcrumb. */\nexport function buildNetworkRequestOrResponse(\n  headers: Record<string, string>,\n  bodySize: number | undefined,\n  body: string | undefined,\n): ReplayNetworkRequestOrResponse | undefined {\n  if (!bodySize && Object.keys(headers).length === 0) {\n    return undefined;\n  }\n\n  if (!bodySize) {\n    return {\n      headers,\n    };\n  }\n\n  if (!body) {\n    return {\n      headers,\n      size: bodySize,\n    };\n  }\n\n  const info: ReplayNetworkRequestOrResponse = {\n    headers,\n    size: bodySize,\n  };\n\n  const { body: normalizedBody, warnings } = normalizeNetworkBody(body);\n  info.body = normalizedBody;\n  if (warnings?.length) {\n    info._meta = {\n      warnings,\n    };\n  }\n\n  return info;\n}\n\n/** Filter a set of headers */\nexport function getAllowedHeaders(headers: Record<string, string>, allowedHeaders: string[]): Record<string, string> {\n  return Object.entries(headers).reduce((filteredHeaders: Record<string, string>, [key, value]) => {\n    const normalizedKey = key.toLowerCase();\n    // Avoid putting empty strings into the headers\n    if (allowedHeaders.includes(normalizedKey) && headers[key]) {\n      filteredHeaders[normalizedKey] = value;\n    }\n    return filteredHeaders;\n  }, {});\n}\n\nfunction normalizeNetworkBody(body: string | undefined): {\n  body: NetworkBody | undefined;\n  warnings?: NetworkMetaWarning[];\n} {\n  if (!body || typeof body !== 'string') {\n    return {\n      body,\n    };\n  }\n\n  const exceedsSizeLimit = body.length > NETWORK_BODY_MAX_SIZE;\n  const isProbablyJson = _strIsProbablyJson(body);\n\n  if (exceedsSizeLimit) {\n    const truncatedBody = body.slice(0, NETWORK_BODY_MAX_SIZE);\n\n    if (isProbablyJson) {\n      return {\n        body: truncatedBody,\n        warnings: ['MAYBE_JSON_TRUNCATED'],\n      };\n    }\n\n    return {\n      body: `${truncatedBody}…`,\n      warnings: ['TEXT_TRUNCATED'],\n    };\n  }\n\n  if (isProbablyJson) {\n    try {\n      const jsonBody = JSON.parse(body);\n      return {\n        body: jsonBody,\n      };\n    } catch {\n      // fall back to just send the body as string\n    }\n  }\n\n  return {\n    body,\n  };\n}\n\nfunction _strIsProbablyJson(str: string): boolean {\n  const first = str[0];\n  const last = str[str.length - 1];\n\n  // Simple check: If this does not start & end with {} or [], it's not JSON\n  return (first === '[' && last === ']') || (first === '{' && last === '}');\n}\n\n/** Match an URL against a list of strings/Regex. */\nexport function urlMatches(url: string, urls: (string | RegExp)[]): boolean {\n  const fullUrl = getFullUrl(url);\n\n  return stringMatchesSomePattern(fullUrl, urls);\n}\n\n/** exported for tests */\nexport function getFullUrl(url: string, baseURI = WINDOW.document.baseURI): string {\n  // Short circuit for common cases:\n  if (url.startsWith('http://') || url.startsWith('https://') || url.startsWith(WINDOW.location.origin)) {\n    return url;\n  }\n  const fixedUrl = new URL(url, baseURI);\n\n  // If these do not match, we are not dealing with a relative URL, so just return it\n  if (fixedUrl.origin !== new URL(baseURI).origin) {\n    return url;\n  }\n\n  const fullUrl = fixedUrl.href;\n\n  // Remove trailing slashes, if they don't match the original URL\n  if (!url.endsWith('/') && fullUrl.endsWith('/')) {\n    return fullUrl.slice(0, -1);\n  }\n\n  return fullUrl;\n}\n","import { getBodyString, getFetchRequestArgBody, setTimeout } from '@sentry-internal/browser-utils';\nimport type { FetchHint, NetworkMetaWarning } from '@sentry-internal/browser-utils';\nimport type { Breadcrumb, FetchBreadcrumbData } from '@sentry/core';\n\nimport { DEBUG_BUILD } from '../../debug-build';\nimport type {\n  ReplayContainer,\n  ReplayNetworkOptions,\n  ReplayNetworkRequestData,\n  ReplayNetworkRequestOrResponse,\n} from '../../types';\nimport { logger } from '../../util/logger';\nimport { addNetworkBreadcrumb } from './addNetworkBreadcrumb';\nimport {\n  buildNetworkRequestOrResponse,\n  buildSkippedNetworkRequestOrResponse,\n  getAllowedHeaders,\n  getBodySize,\n  makeNetworkReplayBreadcrumb,\n  mergeWarning,\n  parseContentLengthHeader,\n  urlMatches,\n} from './networkUtils';\n\n/**\n * Capture a fetch breadcrumb to a replay.\n * This adds additional data (where appropriate).\n */\nexport async function captureFetchBreadcrumbToReplay(\n  breadcrumb: Breadcrumb & { data: FetchBreadcrumbData },\n  hint: Partial<FetchHint>,\n  options: ReplayNetworkOptions & {\n    replay: ReplayContainer;\n  },\n): Promise<void> {\n  try {\n    const data = await _prepareFetchData(breadcrumb, hint, options);\n\n    // Create a replay performance entry from this breadcrumb\n    const result = makeNetworkReplayBreadcrumb('resource.fetch', data);\n    addNetworkBreadcrumb(options.replay, result);\n  } catch (error) {\n    DEBUG_BUILD && logger.exception(error, 'Failed to capture fetch breadcrumb');\n  }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nexport function enrichFetchBreadcrumb(\n  breadcrumb: Breadcrumb & { data: FetchBreadcrumbData },\n  hint: Partial<FetchHint>,\n): void {\n  const { input, response } = hint;\n\n  const body = input ? getFetchRequestArgBody(input) : undefined;\n  const reqSize = getBodySize(body);\n\n  const resSize = response ? parseContentLengthHeader(response.headers.get('content-length')) : undefined;\n\n  if (reqSize !== undefined) {\n    breadcrumb.data.request_body_size = reqSize;\n  }\n  if (resSize !== undefined) {\n    breadcrumb.data.response_body_size = resSize;\n  }\n}\n\nasync function _prepareFetchData(\n  breadcrumb: Breadcrumb & { data: FetchBreadcrumbData },\n  hint: Partial<FetchHint>,\n  options: ReplayNetworkOptions,\n): Promise<ReplayNetworkRequestData> {\n  const now = Date.now();\n  const { startTimestamp = now, endTimestamp = now } = hint;\n\n  const {\n    url,\n    method,\n    status_code: statusCode = 0,\n    request_body_size: requestBodySize,\n    response_body_size: responseBodySize,\n  } = breadcrumb.data;\n\n  const captureDetails =\n    urlMatches(url, options.networkDetailAllowUrls) && !urlMatches(url, options.networkDetailDenyUrls);\n\n  const request = captureDetails\n    ? _getRequestInfo(options, hint.input, requestBodySize)\n    : buildSkippedNetworkRequestOrResponse(requestBodySize);\n  const response = await _getResponseInfo(captureDetails, options, hint.response, responseBodySize);\n\n  return {\n    startTimestamp,\n    endTimestamp,\n    url,\n    method,\n    statusCode,\n    request,\n    response,\n  };\n}\n\nfunction _getRequestInfo(\n  { networkCaptureBodies, networkRequestHeaders }: ReplayNetworkOptions,\n  input: FetchHint['input'] | undefined,\n  requestBodySize?: number,\n): ReplayNetworkRequestOrResponse | undefined {\n  const headers = input ? getRequestHeaders(input, networkRequestHeaders) : {};\n\n  if (!networkCaptureBodies) {\n    return buildNetworkRequestOrResponse(headers, requestBodySize, undefined);\n  }\n\n  // We only want to transmit string or string-like bodies\n  const requestBody = getFetchRequestArgBody(input);\n  const [bodyStr, warning] = getBodyString(requestBody, logger);\n  const data = buildNetworkRequestOrResponse(headers, requestBodySize, bodyStr);\n\n  if (warning) {\n    return mergeWarning(data, warning);\n  }\n\n  return data;\n}\n\n/** Exported only for tests. */\nexport async function _getResponseInfo(\n  captureDetails: boolean,\n  {\n    networkCaptureBodies,\n    networkResponseHeaders,\n  }: Pick<ReplayNetworkOptions, 'networkCaptureBodies' | 'networkResponseHeaders'>,\n  response: Response | undefined,\n  responseBodySize?: number,\n): Promise<ReplayNetworkRequestOrResponse | undefined> {\n  if (!captureDetails && responseBodySize !== undefined) {\n    return buildSkippedNetworkRequestOrResponse(responseBodySize);\n  }\n\n  const headers = response ? getAllHeaders(response.headers, networkResponseHeaders) : {};\n\n  if (!response || (!networkCaptureBodies && responseBodySize !== undefined)) {\n    return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n  }\n\n  const [bodyText, warning] = await _parseFetchResponseBody(response);\n  const result = getResponseData(bodyText, {\n    networkCaptureBodies,\n\n    responseBodySize,\n    captureDetails,\n    headers,\n  });\n\n  if (warning) {\n    return mergeWarning(result, warning);\n  }\n\n  return result;\n}\n\nfunction getResponseData(\n  bodyText: string | undefined,\n  {\n    networkCaptureBodies,\n    responseBodySize,\n    captureDetails,\n    headers,\n  }: {\n    captureDetails: boolean;\n    networkCaptureBodies: boolean;\n    responseBodySize: number | undefined;\n    headers: Record<string, string>;\n  },\n): ReplayNetworkRequestOrResponse | undefined {\n  try {\n    const size = bodyText?.length && responseBodySize === undefined ? getBodySize(bodyText) : responseBodySize;\n\n    if (!captureDetails) {\n      return buildSkippedNetworkRequestOrResponse(size);\n    }\n\n    if (networkCaptureBodies) {\n      return buildNetworkRequestOrResponse(headers, size, bodyText);\n    }\n\n    return buildNetworkRequestOrResponse(headers, size, undefined);\n  } catch (error) {\n    DEBUG_BUILD && logger.exception(error, 'Failed to serialize response body');\n    // fallback\n    return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n  }\n}\n\nasync function _parseFetchResponseBody(response: Response): Promise<[string | undefined, NetworkMetaWarning?]> {\n  const res = _tryCloneResponse(response);\n\n  if (!res) {\n    return [undefined, 'BODY_PARSE_ERROR'];\n  }\n\n  try {\n    const text = await _tryGetResponseText(res);\n    return [text];\n  } catch (error) {\n    if (error instanceof Error && error.message.indexOf('Timeout') > -1) {\n      DEBUG_BUILD && logger.warn('Parsing text body from response timed out');\n      return [undefined, 'BODY_PARSE_TIMEOUT'];\n    }\n\n    DEBUG_BUILD && logger.exception(error, 'Failed to get text body from response');\n    return [undefined, 'BODY_PARSE_ERROR'];\n  }\n}\n\nfunction getAllHeaders(headers: Headers, allowedHeaders: string[]): Record<string, string> {\n  const allHeaders: Record<string, string> = {};\n\n  allowedHeaders.forEach(header => {\n    if (headers.get(header)) {\n      allHeaders[header] = headers.get(header) as string;\n    }\n  });\n\n  return allHeaders;\n}\n\nfunction getRequestHeaders(fetchArgs: unknown[], allowedHeaders: string[]): Record<string, string> {\n  if (fetchArgs.length === 1 && typeof fetchArgs[0] !== 'string') {\n    return getHeadersFromOptions(fetchArgs[0] as Request | RequestInit, allowedHeaders);\n  }\n\n  if (fetchArgs.length === 2) {\n    return getHeadersFromOptions(fetchArgs[1] as Request | RequestInit, allowedHeaders);\n  }\n\n  return {};\n}\n\nfunction getHeadersFromOptions(\n  input: Request | RequestInit | undefined,\n  allowedHeaders: string[],\n): Record<string, string> {\n  if (!input) {\n    return {};\n  }\n\n  const headers = input.headers;\n\n  if (!headers) {\n    return {};\n  }\n\n  if (headers instanceof Headers) {\n    return getAllHeaders(headers, allowedHeaders);\n  }\n\n  // We do not support this, as it is not really documented (anymore?)\n  if (Array.isArray(headers)) {\n    return {};\n  }\n\n  return getAllowedHeaders(headers, allowedHeaders);\n}\n\nfunction _tryCloneResponse(response: Response): Response | void {\n  try {\n    // We have to clone this, as the body can only be read once\n    return response.clone();\n  } catch (error) {\n    // this can throw if the response was already consumed before\n    DEBUG_BUILD && logger.exception(error, 'Failed to clone response body');\n  }\n}\n\n/**\n * Get the response body of a fetch request, or timeout after 500ms.\n * Fetch can return a streaming body, that may not resolve (or not for a long time).\n * If that happens, we rather abort after a short time than keep waiting for this.\n */\nfunction _tryGetResponseText(response: Response): Promise<string | undefined> {\n  return new Promise((resolve, reject) => {\n    const timeout = setTimeout(() => reject(new Error('Timeout while trying to read response body')), 500);\n\n    _getResponseText(response)\n      .then(\n        txt => resolve(txt),\n        reason => reject(reason),\n      )\n      .finally(() => clearTimeout(timeout));\n  });\n}\n\nasync function _getResponseText(response: Response): Promise<string> {\n  // Force this to be a promise, just to be safe\n  // eslint-disable-next-line no-return-await\n  return await response.text();\n}\n","import { WINDOW } from '../constants';\nimport type { AddEventResult, MemoryData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { createPerformanceSpans } from './createPerformanceSpans';\n\ntype ReplayMemoryEntry = ReplayPerformanceEntry<MemoryData> & { data: { memory: MemoryInfo } };\n\ninterface MemoryInfo {\n  jsHeapSizeLimit: number;\n  totalJSHeapSize: number;\n  usedJSHeapSize: number;\n}\n\n/**\n * Create a \"span\" for the total amount of memory being used by JS objects\n * (including v8 internal objects).\n */\nexport async function addMemoryEntry(replay: ReplayContainer): Promise<Array<AddEventResult | null>> {\n  // window.performance.memory is a non-standard API and doesn't work on all browsers, so we try-catch this\n  try {\n    return Promise.all(\n      createPerformanceSpans(replay, [\n        // @ts-expect-error memory doesn't exist on type Performance as the API is non-standard (we check that it exists above)\n        createMemoryEntry(WINDOW.performance.memory),\n      ]),\n    );\n  } catch (error) {\n    // Do nothing\n    return [];\n  }\n}\n\nfunction createMemoryEntry(memoryEntry: MemoryInfo): ReplayMemoryEntry {\n  const { jsHeapSizeLimit, totalJSHeapSize, usedJSHeapSize } = memoryEntry;\n  // we don't want to use `getAbsoluteTime` because it adds the event time to the\n  // time origin, so we get the current timestamp instead\n  const time = Date.now() / 1000;\n  return {\n    type: 'memory',\n    name: 'memory',\n    start: time,\n    end: time,\n    data: {\n      memory: {\n        jsHeapSizeLimit,\n        totalJSHeapSize,\n        usedJSHeapSize,\n      },\n    },\n  };\n}\n","import { GLOBAL_OBJ } from '@sentry/core';\n\nconst NAVIGATOR = GLOBAL_OBJ.navigator;\n\n/**\n *  Disable sampling mousemove events on iOS browsers as this can cause blocking the main thread\n *  https://github.com/getsentry/sentry-javascript/issues/14534\n */\nexport function getRecordingSamplingOptions(): Partial<{ sampling: { mousemove: boolean } }> {\n  if (\n    /iPhone|iPad|iPod/i.test(NAVIGATOR?.userAgent ?? '') ||\n    (/Macintosh/i.test(NAVIGATOR?.userAgent ?? '') && NAVIGATOR?.maxTouchPoints && NAVIGATOR?.maxTouchPoints > 1)\n  ) {\n    return {\n      sampling: {\n        mousemove: false,\n      },\n    };\n  }\n\n  return {};\n}\n","import { EventType } from '@sentry-internal/rrweb';\n\nimport { updateClickDetectorForRecordingEvent } from '../coreHandlers/handleClick';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { saveSession } from '../session/saveSession';\nimport type { RecordingEvent, ReplayContainer, ReplayOptionFrameEvent } from '../types';\nimport { addEventSync } from './addEvent';\nimport { logger } from './logger';\n\ntype RecordingEmitCallback = (event: RecordingEvent, isCheckout?: boolean) => void;\n\n/**\n * Handler for recording events.\n *\n * Adds to event buffer, and has varying flushing behaviors if the event was a checkout.\n */\nexport function getHandleRecordingEmit(replay: ReplayContainer): RecordingEmitCallback {\n  let hadFirstEvent = false;\n\n  return (event: RecordingEvent, _isCheckout?: boolean) => {\n    // If this is false, it means session is expired, create and a new session and wait for checkout\n    if (!replay.checkAndHandleExpiredSession()) {\n      DEBUG_BUILD && logger.warn('Received replay event after session expired.');\n\n      return;\n    }\n\n    // `_isCheckout` is only set when the checkout is due to `checkoutEveryNms`\n    // We also want to treat the first event as a checkout, so we handle this specifically here\n    const isCheckout = _isCheckout || !hadFirstEvent;\n    hadFirstEvent = true;\n\n    if (replay.clickDetector) {\n      updateClickDetectorForRecordingEvent(replay.clickDetector, event);\n    }\n\n    // The handler returns `true` if we do not want to trigger debounced flush, `false` if we want to debounce flush.\n    replay.addUpdate(() => {\n      // The session is always started immediately on pageload/init, but for\n      // error-only replays, it should reflect the most recent checkout\n      // when an error occurs. Clear any state that happens before this current\n      // checkout. This needs to happen before `addEvent()` which updates state\n      // dependent on this reset.\n      if (replay.recordingMode === 'buffer' && isCheckout) {\n        replay.setInitialState();\n      }\n\n      // If the event is not added (e.g. due to being paused, disabled, or out of the max replay duration),\n      // Skip all further steps\n      if (!addEventSync(replay, event, isCheckout)) {\n        // Return true to skip scheduling a debounced flush\n        return true;\n      }\n\n      // Different behavior for full snapshots (type=2), ignore other event types\n      // See https://github.com/rrweb-io/rrweb/blob/d8f9290ca496712aa1e7d472549480c4e7876594/packages/rrweb/src/types.ts#L16\n      if (!isCheckout) {\n        return false;\n      }\n\n      const session = replay.session;\n\n      // Additionally, create a meta event that will capture certain SDK settings.\n      // In order to handle buffer mode, this needs to either be done when we\n      // receive checkout events or at flush time. We have an experimental mode\n      // to perform multiple checkouts a session (the idea is to improve\n      // seeking during playback), so also only include if segmentId is 0\n      // (handled in `addSettingsEvent`).\n      //\n      // `isCheckout` is always true, but want to be explicit that it should\n      // only be added for checkouts\n      addSettingsEvent(replay, isCheckout);\n\n      // When in buffer mode, make sure we adjust the session started date to the current earliest event of the buffer\n      // this should usually be the timestamp of the checkout event, but to be safe...\n      if (replay.recordingMode === 'buffer' && session && replay.eventBuffer) {\n        const earliestEvent = replay.eventBuffer.getEarliestTimestamp();\n        if (earliestEvent) {\n          DEBUG_BUILD &&\n            logger.info(`Updating session start time to earliest event in buffer to ${new Date(earliestEvent)}`);\n\n          session.started = earliestEvent;\n\n          if (replay.getOptions().stickySession) {\n            saveSession(session);\n          }\n        }\n      }\n\n      // If there is a previousSessionId after a full snapshot occurs, then\n      // the replay session was started due to session expiration. The new session\n      // is started before triggering a new checkout and contains the id\n      // of the previous session. Do not immediately flush in this case\n      // to avoid capturing only the checkout and instead the replay will\n      // be captured if they perform any follow-up actions.\n      if (session?.previousSessionId) {\n        return true;\n      }\n\n      if (replay.recordingMode === 'session') {\n        // If the full snapshot is due to an initial load, we will not have\n        // a previous session ID. In this case, we want to buffer events\n        // for a set amount of time before flushing. This can help avoid\n        // capturing replays of users that immediately close the window.\n\n        // This should never reject\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        void replay.flush();\n      }\n\n      return true;\n    });\n  };\n}\n\n/**\n * Exported for tests\n */\nexport function createOptionsEvent(replay: ReplayContainer): ReplayOptionFrameEvent {\n  const options = replay.getOptions();\n  return {\n    type: EventType.Custom,\n    timestamp: Date.now(),\n    data: {\n      tag: 'options',\n      payload: {\n        shouldRecordCanvas: replay.isRecordingCanvas(),\n        sessionSampleRate: options.sessionSampleRate,\n        errorSampleRate: options.errorSampleRate,\n        useCompressionOption: options.useCompression,\n        blockAllMedia: options.blockAllMedia,\n        maskAllText: options.maskAllText,\n        maskAllInputs: options.maskAllInputs,\n        useCompression: replay.eventBuffer ? replay.eventBuffer.type === 'worker' : false,\n        networkDetailHasUrls: options.networkDetailAllowUrls.length > 0,\n        networkCaptureBodies: options.networkCaptureBodies,\n        networkRequestHasHeaders: options.networkRequestHeaders.length > 0,\n        networkResponseHasHeaders: options.networkResponseHeaders.length > 0,\n      },\n    },\n  };\n}\n\n/**\n * Add a \"meta\" event that contains a simplified view on current configuration\n * options. This should only be included on the first segment of a recording.\n */\nfunction addSettingsEvent(replay: ReplayContainer, isCheckout?: boolean): void {\n  // Only need to add this event when sending the first segment\n  if (!isCheckout || !replay.session || replay.session.segmentId !== 0) {\n    return;\n  }\n\n  addEventSync(replay, createOptionsEvent(replay), false);\n}\n","type ClassOption = string | RegExp;\n\n/** Duplicate this from @sentry-internal/rrweb so we can export this as well. */\nexport const ReplayEventTypeDomContentLoaded = 0;\nexport const ReplayEventTypeLoad = 1;\nexport const ReplayEventTypeFullSnapshot = 2;\nexport const ReplayEventTypeIncrementalSnapshot = 3;\nexport const ReplayEventTypeMeta = 4;\nexport const ReplayEventTypeCustom = 5;\nexport const ReplayEventTypePlugin = 6;\n\nexport type ReplayEventType =\n  | typeof ReplayEventTypeDomContentLoaded\n  | typeof ReplayEventTypeLoad\n  | typeof ReplayEventTypeFullSnapshot\n  | typeof ReplayEventTypeIncrementalSnapshot\n  | typeof ReplayEventTypeMeta\n  | typeof ReplayEventTypeCustom\n  | typeof ReplayEventTypePlugin;\n\n/**\n * This is a partial copy of rrweb's eventWithTime type which only contains the properties\n * we specifically need in the SDK.\n */\nexport type ReplayEventWithTime = {\n  type: ReplayEventType;\n  data: unknown;\n  timestamp: number;\n  delay?: number;\n};\n\n/**\n * This is a partial copy of rrweb's recording options which only contains the properties\n * we specifically use in the SDK. Users can specify additional properties, hence we add the\n * Record<string, unknown> union type.\n */\nexport type RrwebRecordOptions = {\n  maskAllText?: boolean;\n  maskAllInputs?: boolean;\n  blockClass?: ClassOption;\n  ignoreClass?: string;\n  maskTextClass?: ClassOption;\n  maskTextSelector?: string;\n  blockSelector?: string;\n  maskInputOptions?: Record<string, boolean>;\n  recordCrossOriginIframes?: boolean;\n} & Record<string, unknown>;\n\nexport interface CanvasManagerInterface {\n  reset(): void;\n  freeze(): void;\n  unfreeze(): void;\n  lock(): void;\n  unlock(): void;\n  snapshot(): void;\n  addWindow(win: typeof globalThis & Window): void;\n  addShadowRoot(shadowRoot: ShadowRoot): void;\n  resetShadowRoots(): void;\n}\n\nexport interface CanvasManagerOptions {\n  recordCanvas: boolean;\n  enableManualSnapshot?: boolean;\n  blockClass: string | RegExp;\n  blockSelector: string | null;\n  unblockSelector: string | null;\n  sampling?: 'all' | number;\n  dataURLOptions: Partial<{\n    type: string;\n    quality: number;\n  }>;\n  mutationCb: (p: any) => void;\n  win: typeof globalThis & Window;\n  mirror: any;\n}\n","import type { RateLimits, ReplayEvent, TransportMakeRequestResponse } from '@sentry/core';\nimport { getClient, getCurrentScope, isRateLimited, resolvedSyncPromise, updateRateLimits } from '@sentry/core';\nimport { REPLAY_EVENT_NAME, UNABLE_TO_SEND_REPLAY } from '../constants';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { SendReplayData } from '../types';\nimport { createReplayEnvelope } from './createReplayEnvelope';\nimport { logger } from './logger';\nimport { prepareRecordingData } from './prepareRecordingData';\nimport { prepareReplayEvent } from './prepareReplayEvent';\n\n/**\n * Send replay attachment using `fetch()`\n */\nexport async function sendReplayRequest({\n  recordingData,\n  replayId,\n  segmentId: segment_id,\n  eventContext,\n  timestamp,\n  session,\n}: SendReplayData): Promise<TransportMakeRequestResponse> {\n  const preparedRecordingData = prepareRecordingData({\n    recordingData,\n    headers: {\n      segment_id,\n    },\n  });\n\n  const { urls, errorIds, traceIds, initialTimestamp } = eventContext;\n\n  const client = getClient();\n  const scope = getCurrentScope();\n  const transport = client?.getTransport();\n  const dsn = client?.getDsn();\n\n  if (!client || !transport || !dsn || !session.sampled) {\n    return resolvedSyncPromise({});\n  }\n\n  const baseEvent: ReplayEvent = {\n    type: REPLAY_EVENT_NAME,\n    replay_start_timestamp: initialTimestamp / 1000,\n    timestamp: timestamp / 1000,\n    error_ids: errorIds,\n    trace_ids: traceIds,\n    urls,\n    replay_id: replayId,\n    segment_id,\n    replay_type: session.sampled,\n  };\n\n  const replayEvent = await prepareReplayEvent({ scope, client, replayId, event: baseEvent });\n\n  if (!replayEvent) {\n    // Taken from baseclient's `_processEvent` method, where this is handled for errors/transactions\n    client.recordDroppedEvent('event_processor', 'replay');\n    DEBUG_BUILD && logger.info('An event processor returned `null`, will not send event.');\n    return resolvedSyncPromise({});\n  }\n\n  /*\n  For reference, the fully built event looks something like this:\n  {\n      \"type\": \"replay_event\",\n      \"timestamp\": 1670837008.634,\n      \"error_ids\": [\n          \"errorId\"\n      ],\n      \"trace_ids\": [\n          \"traceId\"\n      ],\n      \"urls\": [\n          \"https://example.com\"\n      ],\n      \"replay_id\": \"eventId\",\n      \"segment_id\": 3,\n      \"replay_type\": \"error\",\n      \"platform\": \"javascript\",\n      \"event_id\": \"eventId\",\n      \"environment\": \"production\",\n      \"sdk\": {\n          \"integrations\": [\n              \"BrowserTracing\",\n              \"Replay\"\n          ],\n          \"name\": \"sentry.javascript.browser\",\n          \"version\": \"7.25.0\"\n      },\n      \"sdkProcessingMetadata\": {},\n      \"contexts\": {\n      },\n  }\n  */\n\n  // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n  // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n  // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n  // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n  delete replayEvent.sdkProcessingMetadata;\n\n  const envelope = createReplayEnvelope(replayEvent, preparedRecordingData, dsn, client.getOptions().tunnel);\n\n  let response: TransportMakeRequestResponse;\n\n  try {\n    response = await transport.send(envelope);\n  } catch (err) {\n    const error = new Error(UNABLE_TO_SEND_REPLAY);\n\n    try {\n      // In case browsers don't allow this property to be writable\n      // @ts-expect-error This needs lib es2022 and newer\n      error.cause = err;\n    } catch {\n      // nothing to do\n    }\n    throw error;\n  }\n\n  // If the status code is invalid, we want to immediately stop & not retry\n  if (typeof response.statusCode === 'number' && (response.statusCode < 200 || response.statusCode >= 300)) {\n    throw new TransportStatusCodeError(response.statusCode);\n  }\n\n  const rateLimits = updateRateLimits({}, response);\n  if (isRateLimited(rateLimits, 'replay')) {\n    throw new RateLimitError(rateLimits);\n  }\n\n  return response;\n}\n\n/**\n * This error indicates that the transport returned an invalid status code.\n */\nexport class TransportStatusCodeError extends Error {\n  public constructor(statusCode: number) {\n    super(`Transport returned status code ${statusCode}`);\n  }\n}\n\n/**\n * This error indicates that we hit a rate limit API error.\n */\nexport class RateLimitError extends Error {\n  public rateLimits: RateLimits;\n\n  public constructor(rateLimits: RateLimits) {\n    super('Rate limit hit');\n    this.rateLimits = rateLimits;\n  }\n}\n","import { setTimeout } from '@sentry-internal/browser-utils';\nimport { setContext } from '@sentry/core';\n\nimport { RETRY_BASE_INTERVAL, RETRY_MAX_COUNT, UNABLE_TO_SEND_REPLAY } from '../constants';\nimport type { SendReplayData } from '../types';\nimport { RateLimitError, TransportStatusCodeError, sendReplayRequest } from './sendReplayRequest';\n\n/**\n * Finalize and send the current replay event to Sentry\n */\nexport async function sendReplay(\n  replayData: SendReplayData,\n  retryConfig = {\n    count: 0,\n    interval: RETRY_BASE_INTERVAL,\n  },\n): Promise<unknown> {\n  const { recordingData, onError } = replayData;\n\n  // short circuit if there's no events to upload (this shouldn't happen as _runFlush makes this check)\n  if (!recordingData.length) {\n    return;\n  }\n\n  try {\n    await sendReplayRequest(replayData);\n    return true;\n  } catch (err) {\n    if (err instanceof TransportStatusCodeError || err instanceof RateLimitError) {\n      throw err;\n    }\n\n    // Capture error for every failed replay\n    setContext('Replays', {\n      _retryCount: retryConfig.count,\n    });\n\n    if (onError) {\n      onError(err);\n    }\n\n    // If an error happened here, it's likely that uploading the attachment\n    // failed, we'll can retry with the same events payload\n    if (retryConfig.count >= RETRY_MAX_COUNT) {\n      const error = new Error(`${UNABLE_TO_SEND_REPLAY} - max retries exceeded`);\n\n      try {\n        // In case browsers don't allow this property to be writable\n        // @ts-expect-error This needs lib es2022 and newer\n        error.cause = err;\n      } catch {\n        // nothing to do\n      }\n\n      throw error;\n    }\n\n    // will retry in intervals of 5, 10, 30\n    retryConfig.interval *= ++retryConfig.count;\n\n    return new Promise((resolve, reject) => {\n      setTimeout(async () => {\n        try {\n          await sendReplay(replayData, retryConfig);\n          resolve(true);\n        } catch (err) {\n          reject(err);\n        }\n      }, retryConfig.interval);\n    });\n  }\n}\n","import type { ReplayRecordingData } from '@sentry/core';\n\n/**\n * Prepare the recording data ready to be sent.\n */\nexport function prepareRecordingData({\n  recordingData,\n  headers,\n}: {\n  recordingData: ReplayRecordingData;\n  headers: Record<string, unknown>;\n}): ReplayRecordingData {\n  let payloadWithSequence;\n\n  // XXX: newline is needed to separate sequence id from events\n  const replayHeaders = `${JSON.stringify(headers)}\n`;\n\n  if (typeof recordingData === 'string') {\n    payloadWithSequence = `${replayHeaders}${recordingData}`;\n  } else {\n    const enc = new TextEncoder();\n    // XXX: newline is needed to separate sequence id from events\n    const sequence = enc.encode(replayHeaders);\n    // Merge the two Uint8Arrays\n    payloadWithSequence = new Uint8Array(sequence.length + recordingData.length);\n    payloadWithSequence.set(sequence);\n    payloadWithSequence.set(recordingData, sequence.length);\n  }\n\n  return payloadWithSequence;\n}\n","import { getIsolationScope, prepareEvent } from '@sentry/core';\nimport type { Client, EventHint, ReplayEvent, Scope } from '@sentry/core';\n\n/**\n * Prepare a replay event & enrich it with the SDK metadata.\n */\nexport async function prepareReplayEvent({\n  client,\n  scope,\n  replayId: event_id,\n  event,\n}: {\n  client: Client;\n  scope: Scope;\n  replayId: string;\n  event: ReplayEvent;\n}): Promise<ReplayEvent | null> {\n  const integrations =\n    typeof client['_integrations'] === 'object' &&\n    client['_integrations'] !== null &&\n    !Array.isArray(client['_integrations'])\n      ? Object.keys(client['_integrations'])\n      : undefined;\n\n  const eventHint: EventHint = { event_id, integrations };\n\n  client.emit('preprocessEvent', event, eventHint);\n\n  const preparedEvent = (await prepareEvent(\n    client.getOptions(),\n    event,\n    eventHint,\n    scope,\n    client,\n    getIsolationScope(),\n  )) as ReplayEvent | null;\n\n  // If e.g. a global event processor returned null\n  if (!preparedEvent) {\n    return null;\n  }\n\n  client.emit('postprocessEvent', preparedEvent, eventHint);\n\n  // This normally happens in browser client \"_prepareEvent\"\n  // but since we do not use this private method from the client, but rather the plain import\n  // we need to do this manually.\n  preparedEvent.platform = preparedEvent.platform || 'javascript';\n\n  // extract the SDK name because `client._prepareEvent` doesn't add it to the event\n  const metadata = client.getSdkMetadata();\n  const { name, version } = metadata?.sdk || {};\n\n  preparedEvent.sdk = {\n    ...preparedEvent.sdk,\n    name: name || 'sentry.javascript.unknown',\n    version: version || '0.0.0',\n  };\n\n  return preparedEvent;\n}\n","import { createEnvelope, createEventEnvelopeHeaders, getSdkMetadataForEnvelopeHeader } from '@sentry/core';\nimport type { DsnComponents, ReplayEnvelope, ReplayEvent, ReplayRecordingData } from '@sentry/core';\n\n/**\n * Create a replay envelope ready to be sent.\n * This includes both the replay event, as well as the recording data.\n */\nexport function createReplayEnvelope(\n  replayEvent: ReplayEvent,\n  recordingData: ReplayRecordingData,\n  dsn: DsnComponents,\n  tunnel?: string,\n): ReplayEnvelope {\n  return createEnvelope<ReplayEnvelope>(\n    createEventEnvelopeHeaders(replayEvent, getSdkMetadataForEnvelopeHeader(replayEvent), tunnel, dsn),\n    [\n      [{ type: 'replay_event' }, replayEvent],\n      [\n        {\n          type: 'replay_recording',\n          // If string then we need to encode to UTF8, otherwise will have\n          // wrong size. TextEncoder has similar browser support to\n          // MutationObserver, although it does not accept IE11.\n          length:\n            typeof recordingData === 'string' ? new TextEncoder().encode(recordingData).length : recordingData.length,\n        },\n        recordingData,\n      ],\n    ],\n  );\n}\n","export const THROTTLED = '__THROTTLED';\nexport const SKIPPED = '__SKIPPED';\n\n/**\n * Create a throttled function off a given function.\n * When calling the throttled function, it will call the original function only\n * if it hasn't been called more than `maxCount` times in the last `durationSeconds`.\n *\n * Returns `THROTTLED` if throttled for the first time, after that `SKIPPED`,\n * or else the return value of the original function.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function throttle<T extends (...rest: any[]) => any>(\n  fn: T,\n  maxCount: number,\n  durationSeconds: number,\n): (...rest: Parameters<T>) => ReturnType<T> | typeof THROTTLED | typeof SKIPPED {\n  const counter = new Map<number, number>();\n\n  const _cleanup = (now: number): void => {\n    const threshold = now - durationSeconds;\n    counter.forEach((_value, key) => {\n      if (key < threshold) {\n        counter.delete(key);\n      }\n    });\n  };\n\n  const _getTotalCount = (): number => {\n    return [...counter.values()].reduce((a, b) => a + b, 0);\n  };\n\n  let isThrottled = false;\n\n  return (...rest: Parameters<T>): ReturnType<T> | typeof THROTTLED | typeof SKIPPED => {\n    // Date in second-precision, which we use as basis for the throttling\n    const now = Math.floor(Date.now() / 1000);\n\n    // First, make sure to delete any old entries\n    _cleanup(now);\n\n    // If already over limit, do nothing\n    if (_getTotalCount() >= maxCount) {\n      const wasThrottled = isThrottled;\n      isThrottled = true;\n      return wasThrottled ? SKIPPED : THROTTLED;\n    }\n\n    isThrottled = false;\n    const count = counter.get(now) || 0;\n    counter.set(now, count + 1);\n\n    return fn(...rest);\n  };\n}\n","/* eslint-disable max-lines */ // TODO: We might want to split this file up\nimport { EventType, record } from '@sentry-internal/rrweb';\nimport type { ReplayRecordingMode, Span } from '@sentry/core';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, getActiveSpan, getClient, getRootSpan, spanToJSON } from '@sentry/core';\nimport {\n  BUFFER_CHECKOUT_TIME,\n  SESSION_IDLE_EXPIRE_DURATION,\n  SESSION_IDLE_PAUSE_DURATION,\n  SLOW_CLICK_SCROLL_TIMEOUT,\n  SLOW_CLICK_THRESHOLD,\n  WINDOW,\n} from './constants';\nimport { ClickDetector } from './coreHandlers/handleClick';\nimport { handleKeyboardEvent } from './coreHandlers/handleKeyboardEvent';\nimport { setupPerformanceObserver } from './coreHandlers/performanceObserver';\nimport { DEBUG_BUILD } from './debug-build';\nimport { createEventBuffer } from './eventBuffer';\nimport { clearSession } from './session/clearSession';\nimport { loadOrCreateSession } from './session/loadOrCreateSession';\nimport { saveSession } from './session/saveSession';\nimport { shouldRefreshSession } from './session/shouldRefreshSession';\nimport type {\n  AddEventResult,\n  AddUpdateCallback,\n  AllPerformanceEntry,\n  AllPerformanceEntryData,\n  EventBuffer,\n  InternalEventContext,\n  PopEventContext,\n  RecordingEvent,\n  RecordingOptions,\n  ReplayBreadcrumbFrame,\n  ReplayCanvasIntegrationOptions,\n  ReplayContainer as ReplayContainerInterface,\n  ReplayPerformanceEntry,\n  ReplayPluginOptions,\n  SendBufferedReplayOptions,\n  Session,\n  SlowClickConfig,\n  Timeouts,\n} from './types';\nimport { ReplayEventTypeCustom } from './types';\nimport { addEvent, addEventSync } from './util/addEvent';\nimport { addGlobalListeners } from './util/addGlobalListeners';\nimport { addMemoryEntry } from './util/addMemoryEntry';\nimport { createBreadcrumb } from './util/createBreadcrumb';\nimport { createPerformanceEntries } from './util/createPerformanceEntries';\nimport { createPerformanceSpans } from './util/createPerformanceSpans';\nimport { debounce } from './util/debounce';\nimport { getRecordingSamplingOptions } from './util/getRecordingSamplingOptions';\nimport { getHandleRecordingEmit } from './util/handleRecordingEmit';\nimport { isExpired } from './util/isExpired';\nimport { isSessionExpired } from './util/isSessionExpired';\nimport { logger } from './util/logger';\nimport { resetReplayIdOnDynamicSamplingContext } from './util/resetReplayIdOnDynamicSamplingContext';\nimport { sendReplay } from './util/sendReplay';\nimport { RateLimitError } from './util/sendReplayRequest';\nimport type { SKIPPED } from './util/throttle';\nimport { THROTTLED, throttle } from './util/throttle';\n\n/**\n * The main replay container class, which holds all the state and methods for recording and sending replays.\n */\nexport class ReplayContainer implements ReplayContainerInterface {\n  public eventBuffer: EventBuffer | null;\n\n  public performanceEntries: AllPerformanceEntry[];\n\n  public replayPerformanceEntries: ReplayPerformanceEntry<AllPerformanceEntryData>[];\n\n  public session: Session | undefined;\n\n  public clickDetector: ClickDetector | undefined;\n\n  /**\n   * Recording can happen in one of two modes:\n   *   - session: Record the whole session, sending it continuously\n   *   - buffer: Always keep the last 60s of recording, requires:\n   *     - having replaysOnErrorSampleRate > 0 to capture replay when an error occurs\n   *     - or calling `flush()` to send the replay\n   */\n  public recordingMode: ReplayRecordingMode;\n\n  /**\n   * The current or last active span.\n   * This is only available when performance is enabled.\n   */\n  public lastActiveSpan?: Span;\n\n  /**\n   * These are here so we can overwrite them in tests etc.\n   * @hidden\n   */\n  public readonly timeouts: Timeouts;\n\n  /** The replay has to be manually started, because no sample rate (neither session or error) was provided. */\n  private _requiresManualStart: boolean;\n\n  private _throttledAddEvent: (\n    event: RecordingEvent,\n    isCheckout?: boolean,\n  ) => typeof THROTTLED | typeof SKIPPED | Promise<AddEventResult | null>;\n\n  /**\n   * Options to pass to `rrweb.record()`\n   */\n  private readonly _recordingOptions: RecordingOptions;\n\n  private readonly _options: ReplayPluginOptions;\n\n  private _performanceCleanupCallback?: () => void;\n\n  private _debouncedFlush: ReturnType<typeof debounce>;\n  private _flushLock: Promise<unknown> | undefined;\n\n  /**\n   * Timestamp of the last user activity. This lives across sessions.\n   */\n  private _lastActivity: number;\n\n  /**\n   * Is the integration currently active?\n   */\n  private _isEnabled: boolean;\n\n  /**\n   * Paused is a state where:\n   * - DOM Recording is not listening at all\n   * - Nothing will be added to event buffer (e.g. core SDK events)\n   */\n  private _isPaused: boolean;\n\n  /**\n   * Have we attached listeners to the core SDK?\n   * Note we have to track this as there is no way to remove instrumentation handlers.\n   */\n  private _hasInitializedCoreListeners: boolean;\n\n  /**\n   * Function to stop recording\n   */\n  private _stopRecording: ReturnType<typeof record> | undefined;\n\n  private _context: InternalEventContext;\n\n  /**\n   * Internal use for canvas recording options\n   */\n  private _canvas: ReplayCanvasIntegrationOptions | undefined;\n\n  /**\n   * Handle when visibility of the page content changes. Opening a new tab will\n   * cause the state to change to hidden because of content of current page will\n   * be hidden. Likewise, moving a different window to cover the contents of the\n   * page will also trigger a change to a hidden state.\n   */\n  private _handleVisibilityChange: () => void;\n\n  /**\n   * Handle when page is blurred\n   */\n  private _handleWindowBlur: () => void;\n\n  /**\n   * Handle when page is focused\n   */\n  private _handleWindowFocus: () => void;\n\n  /** Ensure page remains active when a key is pressed. */\n  private _handleKeyboardEvent: (event: KeyboardEvent) => void;\n\n  public constructor({\n    options,\n    recordingOptions,\n  }: {\n    options: ReplayPluginOptions;\n    recordingOptions: RecordingOptions;\n  }) {\n    this.eventBuffer = null;\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n    this.recordingMode = 'session';\n    this.timeouts = {\n      sessionIdlePause: SESSION_IDLE_PAUSE_DURATION,\n      sessionIdleExpire: SESSION_IDLE_EXPIRE_DURATION,\n    } as const;\n    this._lastActivity = Date.now();\n    this._isEnabled = false;\n    this._isPaused = false;\n    this._requiresManualStart = false;\n    this._hasInitializedCoreListeners = false;\n    this._context = {\n      errorIds: new Set(),\n      traceIds: new Set(),\n      urls: [],\n      initialTimestamp: Date.now(),\n      initialUrl: '',\n    };\n\n    this._recordingOptions = recordingOptions;\n    this._options = options;\n\n    this._debouncedFlush = debounce(() => this._flush(), this._options.flushMinDelay, {\n      maxWait: this._options.flushMaxDelay,\n    });\n\n    this._throttledAddEvent = throttle(\n      (event: RecordingEvent, isCheckout?: boolean) => addEvent(this, event, isCheckout),\n      // Max 300 events...\n      300,\n      // ... per 5s\n      5,\n    );\n\n    const { slowClickTimeout, slowClickIgnoreSelectors } = this.getOptions();\n\n    const slowClickConfig: SlowClickConfig | undefined = slowClickTimeout\n      ? {\n          threshold: Math.min(SLOW_CLICK_THRESHOLD, slowClickTimeout),\n          timeout: slowClickTimeout,\n          scrollTimeout: SLOW_CLICK_SCROLL_TIMEOUT,\n          ignoreSelector: slowClickIgnoreSelectors ? slowClickIgnoreSelectors.join(',') : '',\n        }\n      : undefined;\n\n    if (slowClickConfig) {\n      this.clickDetector = new ClickDetector(this, slowClickConfig);\n    }\n\n    // Configure replay logger w/ experimental options\n    if (DEBUG_BUILD) {\n      const experiments = options._experiments;\n      logger.setConfig({\n        captureExceptions: !!experiments.captureExceptions,\n        traceInternals: !!experiments.traceInternals,\n      });\n    }\n\n    // We set these handler properties as class properties, to make binding/unbinding them easier\n    this._handleVisibilityChange = () => {\n      if (WINDOW.document.visibilityState === 'visible') {\n        this._doChangeToForegroundTasks();\n      } else {\n        this._doChangeToBackgroundTasks();\n      }\n    };\n\n    /**\n     * Handle when page is blurred\n     */\n    this._handleWindowBlur = () => {\n      const breadcrumb = createBreadcrumb({\n        category: 'ui.blur',\n      });\n\n      // Do not count blur as a user action -- it's part of the process of them\n      // leaving the page\n      this._doChangeToBackgroundTasks(breadcrumb);\n    };\n\n    this._handleWindowFocus = () => {\n      const breadcrumb = createBreadcrumb({\n        category: 'ui.focus',\n      });\n\n      // Do not count focus as a user action -- instead wait until they focus and\n      // interactive with page\n      this._doChangeToForegroundTasks(breadcrumb);\n    };\n\n    /** Ensure page remains active when a key is pressed. */\n    this._handleKeyboardEvent = (event: KeyboardEvent) => {\n      handleKeyboardEvent(this, event);\n    };\n  }\n\n  /** Get the event context. */\n  public getContext(): InternalEventContext {\n    return this._context;\n  }\n\n  /** If recording is currently enabled. */\n  public isEnabled(): boolean {\n    return this._isEnabled;\n  }\n\n  /** If recording is currently paused. */\n  public isPaused(): boolean {\n    return this._isPaused;\n  }\n\n  /**\n   * Determine if canvas recording is enabled\n   */\n  public isRecordingCanvas(): boolean {\n    return Boolean(this._canvas);\n  }\n\n  /** Get the replay integration options. */\n  public getOptions(): ReplayPluginOptions {\n    return this._options;\n  }\n\n  /** A wrapper to conditionally capture exceptions. */\n  public handleException(error: unknown): void {\n    DEBUG_BUILD && logger.exception(error);\n    if (this._options.onError) {\n      this._options.onError(error);\n    }\n  }\n\n  /**\n   * Initializes the plugin based on sampling configuration. Should not be\n   * called outside of constructor.\n   */\n  public initializeSampling(previousSessionId?: string): void {\n    const { errorSampleRate, sessionSampleRate } = this._options;\n\n    // If neither sample rate is > 0, then do nothing - user will need to call one of\n    // `start()` or `startBuffering` themselves.\n    const requiresManualStart = errorSampleRate <= 0 && sessionSampleRate <= 0;\n\n    this._requiresManualStart = requiresManualStart;\n\n    if (requiresManualStart) {\n      return;\n    }\n\n    // Otherwise if there is _any_ sample rate set, try to load an existing\n    // session, or create a new one.\n    this._initializeSessionForSampling(previousSessionId);\n\n    if (!this.session) {\n      // This should not happen, something wrong has occurred\n      DEBUG_BUILD && logger.exception(new Error('Unable to initialize and create session'));\n      return;\n    }\n\n    if (this.session.sampled === false) {\n      // This should only occur if `errorSampleRate` is 0 and was unsampled for\n      // session-based replay. In this case there is nothing to do.\n      return;\n    }\n\n    // If segmentId > 0, it means we've previously already captured this session\n    // In this case, we still want to continue in `session` recording mode\n    this.recordingMode = this.session.sampled === 'buffer' && this.session.segmentId === 0 ? 'buffer' : 'session';\n\n    DEBUG_BUILD && logger.infoTick(`Starting replay in ${this.recordingMode} mode`);\n\n    this._initializeRecording();\n  }\n\n  /**\n   * Start a replay regardless of sampling rate. Calling this will always\n   * create a new session. Will log a message if replay is already in progress.\n   *\n   * Creates or loads a session, attaches listeners to varying events (DOM,\n   * _performanceObserver, Recording, Sentry SDK, etc)\n   */\n  public start(): void {\n    if (this._isEnabled && this.recordingMode === 'session') {\n      DEBUG_BUILD && logger.info('Recording is already in progress');\n      return;\n    }\n\n    if (this._isEnabled && this.recordingMode === 'buffer') {\n      DEBUG_BUILD && logger.info('Buffering is in progress, call `flush()` to save the replay');\n      return;\n    }\n\n    DEBUG_BUILD && logger.infoTick('Starting replay in session mode');\n\n    // Required as user activity is initially set in\n    // constructor, so if `start()` is called after\n    // session idle expiration, a replay will not be\n    // created due to an idle timeout.\n    this._updateUserActivity();\n\n    const session = loadOrCreateSession(\n      {\n        maxReplayDuration: this._options.maxReplayDuration,\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n      },\n      {\n        stickySession: this._options.stickySession,\n        // This is intentional: create a new session-based replay when calling `start()`\n        sessionSampleRate: 1,\n        allowBuffering: false,\n      },\n    );\n\n    this.session = session;\n\n    this._initializeRecording();\n  }\n\n  /**\n   * Start replay buffering. Buffers until `flush()` is called or, if\n   * `replaysOnErrorSampleRate` > 0, an error occurs.\n   */\n  public startBuffering(): void {\n    if (this._isEnabled) {\n      DEBUG_BUILD && logger.info('Buffering is in progress, call `flush()` to save the replay');\n      return;\n    }\n\n    DEBUG_BUILD && logger.infoTick('Starting replay in buffer mode');\n\n    const session = loadOrCreateSession(\n      {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration,\n      },\n      {\n        stickySession: this._options.stickySession,\n        sessionSampleRate: 0,\n        allowBuffering: true,\n      },\n    );\n\n    this.session = session;\n\n    this.recordingMode = 'buffer';\n    this._initializeRecording();\n  }\n\n  /**\n   * Start recording.\n   *\n   * Note that this will cause a new DOM checkout\n   */\n  public startRecording(): void {\n    try {\n      const canvasOptions = this._canvas;\n\n      this._stopRecording = record({\n        ...this._recordingOptions,\n        // When running in error sampling mode, we need to overwrite `checkoutEveryNms`\n        // Without this, it would record forever, until an error happens, which we don't want\n        // instead, we'll always keep the last 60 seconds of replay before an error happened\n        ...(this.recordingMode === 'buffer'\n          ? { checkoutEveryNms: BUFFER_CHECKOUT_TIME }\n          : // Otherwise, use experimental option w/ min checkout time of 6 minutes\n            // This is to improve playback seeking as there could potentially be\n            // less mutations to process in the worse cases.\n            //\n            // checkout by \"N\" events is probably ideal, but means we have less\n            // control about the number of checkouts we make (which generally\n            // increases replay size)\n            this._options._experiments.continuousCheckout && {\n              // Minimum checkout time is 6 minutes\n              checkoutEveryNms: Math.max(360_000, this._options._experiments.continuousCheckout),\n            }),\n        emit: getHandleRecordingEmit(this),\n        ...getRecordingSamplingOptions(),\n        onMutation: this._onMutationHandler.bind(this),\n        ...(canvasOptions\n          ? {\n              recordCanvas: canvasOptions.recordCanvas,\n              getCanvasManager: canvasOptions.getCanvasManager,\n              sampling: canvasOptions.sampling,\n              dataURLOptions: canvasOptions.dataURLOptions,\n            }\n          : {}),\n      });\n    } catch (err) {\n      this.handleException(err);\n    }\n  }\n\n  /**\n   * Stops the recording, if it was running.\n   *\n   * Returns true if it was previously stopped, or is now stopped,\n   * otherwise false.\n   */\n  public stopRecording(): boolean {\n    try {\n      if (this._stopRecording) {\n        this._stopRecording();\n        this._stopRecording = undefined;\n      }\n\n      return true;\n    } catch (err) {\n      this.handleException(err);\n      return false;\n    }\n  }\n\n  /**\n   * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n   * does not support a teardown\n   */\n  public async stop({ forceFlush = false, reason }: { forceFlush?: boolean; reason?: string } = {}): Promise<void> {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    // We can't move `_isEnabled` after awaiting a flush, otherwise we can\n    // enter into an infinite loop when `stop()` is called while flushing.\n    this._isEnabled = false;\n\n    try {\n      DEBUG_BUILD && logger.info(`Stopping Replay${reason ? ` triggered by ${reason}` : ''}`);\n\n      resetReplayIdOnDynamicSamplingContext();\n\n      this._removeListeners();\n      this.stopRecording();\n\n      this._debouncedFlush.cancel();\n      // See comment above re: `_isEnabled`, we \"force\" a flush, ignoring the\n      // `_isEnabled` state of the plugin since it was disabled above.\n      if (forceFlush) {\n        await this._flush({ force: true });\n      }\n\n      // After flush, destroy event buffer\n      this.eventBuffer?.destroy();\n      this.eventBuffer = null;\n\n      // Clear session from session storage, note this means if a new session\n      // is started after, it will not have `previousSessionId`\n      clearSession(this);\n    } catch (err) {\n      this.handleException(err);\n    }\n  }\n\n  /**\n   * Pause some replay functionality. See comments for `_isPaused`.\n   * This differs from stop as this only stops DOM recording, it is\n   * not as thorough of a shutdown as `stop()`.\n   */\n  public pause(): void {\n    if (this._isPaused) {\n      return;\n    }\n\n    this._isPaused = true;\n    this.stopRecording();\n\n    DEBUG_BUILD && logger.info('Pausing replay');\n  }\n\n  /**\n   * Resumes recording, see notes for `pause().\n   *\n   * Note that calling `startRecording()` here will cause a\n   * new DOM checkout.`\n   */\n  public resume(): void {\n    if (!this._isPaused || !this._checkSession()) {\n      return;\n    }\n\n    this._isPaused = false;\n    this.startRecording();\n\n    DEBUG_BUILD && logger.info('Resuming replay');\n  }\n\n  /**\n   * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n   * Unless `continueRecording` is false, the replay will continue to record and\n   * behave as a \"session\"-based replay.\n   *\n   * Otherwise, queue up a flush.\n   */\n  public async sendBufferedReplayOrFlush({ continueRecording = true }: SendBufferedReplayOptions = {}): Promise<void> {\n    if (this.recordingMode === 'session') {\n      return this.flushImmediate();\n    }\n\n    const activityTime = Date.now();\n\n    DEBUG_BUILD && logger.info('Converting buffer to session');\n\n    // Allow flush to complete before resuming as a session recording, otherwise\n    // the checkout from `startRecording` may be included in the payload.\n    // Prefer to keep the error replay as a separate (and smaller) segment\n    // than the session replay.\n    await this.flushImmediate();\n\n    const hasStoppedRecording = this.stopRecording();\n\n    if (!continueRecording || !hasStoppedRecording) {\n      return;\n    }\n\n    // To avoid race conditions where this is called multiple times, we check here again that we are still buffering\n    if ((this.recordingMode as ReplayRecordingMode) === 'session') {\n      return;\n    }\n\n    // Re-start recording in session-mode\n    this.recordingMode = 'session';\n\n    // Once this session ends, we do not want to refresh it\n    if (this.session) {\n      this._updateUserActivity(activityTime);\n      this._updateSessionActivity(activityTime);\n      this._maybeSaveSession();\n    }\n\n    this.startRecording();\n  }\n\n  /**\n   * We want to batch uploads of replay events. Save events only if\n   * `<flushMinDelay>` milliseconds have elapsed since the last event\n   * *OR* if `<flushMaxDelay>` milliseconds have elapsed.\n   *\n   * Accepts a callback to perform side-effects and returns true to stop batch\n   * processing and hand back control to caller.\n   */\n  public addUpdate(cb: AddUpdateCallback): void {\n    // We need to always run `cb` (e.g. in the case of `this.recordingMode == 'buffer'`)\n    const cbResult = cb();\n\n    // If this option is turned on then we will only want to call `flush`\n    // explicitly\n    if (this.recordingMode === 'buffer') {\n      return;\n    }\n\n    // If callback is true, we do not want to continue with flushing -- the\n    // caller will need to handle it.\n    if (cbResult === true) {\n      return;\n    }\n\n    // addUpdate is called quite frequently - use _debouncedFlush so that it\n    // respects the flush delays and does not flush immediately\n    this._debouncedFlush();\n  }\n\n  /**\n   * Updates the user activity timestamp and resumes recording. This should be\n   * called in an event handler for a user action that we consider as the user\n   * being \"active\" (e.g. a mouse click).\n   */\n  public triggerUserActivity(): void {\n    this._updateUserActivity();\n\n    // This case means that recording was once stopped due to inactivity.\n    // Ensure that recording is resumed.\n    if (!this._stopRecording) {\n      // Create a new session, otherwise when the user action is flushed, it\n      // will get rejected due to an expired session.\n      if (!this._checkSession()) {\n        return;\n      }\n\n      // Note: This will cause a new DOM checkout\n      this.resume();\n      return;\n    }\n\n    // Otherwise... recording was never suspended, continue as normalish\n    this.checkAndHandleExpiredSession();\n\n    this._updateSessionActivity();\n  }\n\n  /**\n   * Updates the user activity timestamp *without* resuming\n   * recording. Some user events (e.g. keydown) can be create\n   * low-value replays that only contain the keypress as a\n   * breadcrumb. Instead this would require other events to\n   * create a new replay after a session has expired.\n   */\n  public updateUserActivity(): void {\n    this._updateUserActivity();\n    this._updateSessionActivity();\n  }\n\n  /**\n   * Only flush if `this.recordingMode === 'session'`\n   */\n  public conditionalFlush(): Promise<void> {\n    if (this.recordingMode === 'buffer') {\n      return Promise.resolve();\n    }\n\n    return this.flushImmediate();\n  }\n\n  /**\n   * Flush using debounce flush\n   */\n  public flush(): Promise<void> {\n    return this._debouncedFlush() as Promise<void>;\n  }\n\n  /**\n   * Always flush via `_debouncedFlush` so that we do not have flushes triggered\n   * from calling both `flush` and `_debouncedFlush`. Otherwise, there could be\n   * cases of multiple flushes happening closely together.\n   */\n  public flushImmediate(): Promise<void> {\n    this._debouncedFlush();\n    // `.flush` is provided by the debounced function, analogously to lodash.debounce\n    return this._debouncedFlush.flush() as Promise<void>;\n  }\n\n  /**\n   * Cancels queued up flushes.\n   */\n  public cancelFlush(): void {\n    this._debouncedFlush.cancel();\n  }\n\n  /** Get the current session (=replay) ID */\n  public getSessionId(): string | undefined {\n    return this.session?.id;\n  }\n\n  /**\n   * Checks if recording should be stopped due to user inactivity. Otherwise\n   * check if session is expired and create a new session if so. Triggers a new\n   * full snapshot on new session.\n   *\n   * Returns true if session is not expired, false otherwise.\n   * @hidden\n   */\n  public checkAndHandleExpiredSession(): boolean | void {\n    // Prevent starting a new session if the last user activity is older than\n    // SESSION_IDLE_PAUSE_DURATION. Otherwise non-user activity can trigger a new\n    // session+recording. This creates noisy replays that do not have much\n    // content in them.\n    if (\n      this._lastActivity &&\n      isExpired(this._lastActivity, this.timeouts.sessionIdlePause) &&\n      this.session &&\n      this.session.sampled === 'session'\n    ) {\n      // Pause recording only for session-based replays. Otherwise, resuming\n      // will create a new replay and will conflict with users who only choose\n      // to record error-based replays only. (e.g. the resumed replay will not\n      // contain a reference to an error)\n      this.pause();\n      return;\n    }\n\n    // --- There is recent user activity --- //\n    // This will create a new session if expired, based on expiry length\n    if (!this._checkSession()) {\n      // Check session handles the refreshing itself\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Capture some initial state that can change throughout the lifespan of the\n   * replay. This is required because otherwise they would be captured at the\n   * first flush.\n   */\n  public setInitialState(): void {\n    const urlPath = `${WINDOW.location.pathname}${WINDOW.location.hash}${WINDOW.location.search}`;\n    const url = `${WINDOW.location.origin}${urlPath}`;\n\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n\n    // Reset _context as well\n    this._clearContext();\n\n    this._context.initialUrl = url;\n    this._context.initialTimestamp = Date.now();\n    this._context.urls.push(url);\n  }\n\n  /**\n   * Add a breadcrumb event, that may be throttled.\n   * If it was throttled, we add a custom breadcrumb to indicate that.\n   */\n  public throttledAddEvent(\n    event: RecordingEvent,\n    isCheckout?: boolean,\n  ): typeof THROTTLED | typeof SKIPPED | Promise<AddEventResult | null> {\n    const res = this._throttledAddEvent(event, isCheckout);\n\n    // If this is THROTTLED, it means we have throttled the event for the first time\n    // In this case, we want to add a breadcrumb indicating that something was skipped\n    if (res === THROTTLED) {\n      const breadcrumb = createBreadcrumb({\n        category: 'replay.throttled',\n      });\n\n      this.addUpdate(() => {\n        // Return `false` if the event _was_ added, as that means we schedule a flush\n        return !addEventSync(this, {\n          type: ReplayEventTypeCustom,\n          timestamp: breadcrumb.timestamp || 0,\n          data: {\n            tag: 'breadcrumb',\n            payload: breadcrumb,\n            metric: true,\n          },\n        });\n      });\n    }\n\n    return res;\n  }\n\n  /**\n   * This will get the parametrized route name of the current page.\n   * This is only available if performance is enabled, and if an instrumented router is used.\n   */\n  public getCurrentRoute(): string | undefined {\n    const lastActiveSpan = this.lastActiveSpan || getActiveSpan();\n    const lastRootSpan = lastActiveSpan && getRootSpan(lastActiveSpan);\n\n    const attributes = (lastRootSpan && spanToJSON(lastRootSpan).data) || {};\n    const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n    if (!lastRootSpan || !source || !['route', 'custom'].includes(source)) {\n      return undefined;\n    }\n\n    return spanToJSON(lastRootSpan).description;\n  }\n\n  /**\n   * Initialize and start all listeners to varying events (DOM,\n   * Performance Observer, Recording, Sentry SDK, etc)\n   */\n  private _initializeRecording(): void {\n    this.setInitialState();\n\n    // this method is generally called on page load or manually - in both cases\n    // we should treat it as an activity\n    this._updateSessionActivity();\n\n    this.eventBuffer = createEventBuffer({\n      useCompression: this._options.useCompression,\n      workerUrl: this._options.workerUrl,\n    });\n\n    this._removeListeners();\n    this._addListeners();\n\n    // Need to set as enabled before we start recording, as `record()` can trigger a flush with a new checkout\n    this._isEnabled = true;\n    this._isPaused = false;\n\n    this.startRecording();\n  }\n\n  /**\n   * Loads (or refreshes) the current session.\n   */\n  private _initializeSessionForSampling(previousSessionId?: string): void {\n    // Whenever there is _any_ error sample rate, we always allow buffering\n    // Because we decide on sampling when an error occurs, we need to buffer at all times if sampling for errors\n    const allowBuffering = this._options.errorSampleRate > 0;\n\n    const session = loadOrCreateSession(\n      {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration,\n        previousSessionId,\n      },\n      {\n        stickySession: this._options.stickySession,\n        sessionSampleRate: this._options.sessionSampleRate,\n        allowBuffering,\n      },\n    );\n\n    this.session = session;\n  }\n\n  /**\n   * Checks and potentially refreshes the current session.\n   * Returns false if session is not recorded.\n   */\n  private _checkSession(): boolean {\n    // If there is no session yet, we do not want to refresh anything\n    // This should generally not happen, but to be safe....\n    if (!this.session) {\n      return false;\n    }\n\n    const currentSession = this.session;\n\n    if (\n      shouldRefreshSession(currentSession, {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration,\n      })\n    ) {\n      // This should never reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      this._refreshSession(currentSession);\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Refresh a session with a new one.\n   * This stops the current session (without forcing a flush, as that would never work since we are expired),\n   * and then does a new sampling based on the refreshed session.\n   */\n  private async _refreshSession(session: Session): Promise<void> {\n    if (!this._isEnabled) {\n      return;\n    }\n    await this.stop({ reason: 'refresh session' });\n    this.initializeSampling(session.id);\n  }\n\n  /**\n   * Adds listeners to record events for the replay\n   */\n  private _addListeners(): void {\n    try {\n      WINDOW.document.addEventListener('visibilitychange', this._handleVisibilityChange);\n      WINDOW.addEventListener('blur', this._handleWindowBlur);\n      WINDOW.addEventListener('focus', this._handleWindowFocus);\n      WINDOW.addEventListener('keydown', this._handleKeyboardEvent);\n\n      if (this.clickDetector) {\n        this.clickDetector.addListeners();\n      }\n\n      // There is no way to remove these listeners, so ensure they are only added once\n      if (!this._hasInitializedCoreListeners) {\n        addGlobalListeners(this, { autoFlushOnFeedback: this._options._experiments.autoFlushOnFeedback });\n\n        this._hasInitializedCoreListeners = true;\n      }\n    } catch (err) {\n      this.handleException(err);\n    }\n\n    this._performanceCleanupCallback = setupPerformanceObserver(this);\n  }\n\n  /**\n   * Cleans up listeners that were created in `_addListeners`\n   */\n  private _removeListeners(): void {\n    try {\n      WINDOW.document.removeEventListener('visibilitychange', this._handleVisibilityChange);\n\n      WINDOW.removeEventListener('blur', this._handleWindowBlur);\n      WINDOW.removeEventListener('focus', this._handleWindowFocus);\n      WINDOW.removeEventListener('keydown', this._handleKeyboardEvent);\n\n      if (this.clickDetector) {\n        this.clickDetector.removeListeners();\n      }\n\n      if (this._performanceCleanupCallback) {\n        this._performanceCleanupCallback();\n      }\n    } catch (err) {\n      this.handleException(err);\n    }\n  }\n\n  /**\n   * Tasks to run when we consider a page to be hidden (via blurring and/or visibility)\n   */\n  private _doChangeToBackgroundTasks(breadcrumb?: ReplayBreadcrumbFrame): void {\n    if (!this.session) {\n      return;\n    }\n\n    const expired = isSessionExpired(this.session, {\n      maxReplayDuration: this._options.maxReplayDuration,\n      sessionIdleExpire: this.timeouts.sessionIdleExpire,\n    });\n\n    if (expired) {\n      return;\n    }\n\n    if (breadcrumb) {\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n\n    // Send replay when the page/tab becomes hidden. There is no reason to send\n    // replay if it becomes visible, since no actions we care about were done\n    // while it was hidden\n    // This should never reject\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    void this.conditionalFlush();\n  }\n\n  /**\n   * Tasks to run when we consider a page to be visible (via focus and/or visibility)\n   */\n  private _doChangeToForegroundTasks(breadcrumb?: ReplayBreadcrumbFrame): void {\n    if (!this.session) {\n      return;\n    }\n\n    const isSessionActive = this.checkAndHandleExpiredSession();\n\n    if (!isSessionActive) {\n      // If the user has come back to the page within SESSION_IDLE_PAUSE_DURATION\n      // ms, we will re-use the existing session, otherwise create a new\n      // session\n      DEBUG_BUILD && logger.info('Document has become active, but session has expired');\n      return;\n    }\n\n    if (breadcrumb) {\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n  }\n\n  /**\n   * Update user activity (across session lifespans)\n   */\n  private _updateUserActivity(_lastActivity: number = Date.now()): void {\n    this._lastActivity = _lastActivity;\n  }\n\n  /**\n   * Updates the session's last activity timestamp\n   */\n  private _updateSessionActivity(_lastActivity: number = Date.now()): void {\n    if (this.session) {\n      this.session.lastActivity = _lastActivity;\n      this._maybeSaveSession();\n    }\n  }\n\n  /**\n   * Helper to create (and buffer) a replay breadcrumb from a core SDK breadcrumb\n   */\n  private _createCustomBreadcrumb(breadcrumb: ReplayBreadcrumbFrame): void {\n    this.addUpdate(() => {\n      // This should never reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      this.throttledAddEvent({\n        type: EventType.Custom,\n        timestamp: breadcrumb.timestamp || 0,\n        data: {\n          tag: 'breadcrumb',\n          payload: breadcrumb,\n        },\n      });\n    });\n  }\n\n  /**\n   * Observed performance events are added to `this.performanceEntries`. These\n   * are included in the replay event before it is finished and sent to Sentry.\n   */\n  private _addPerformanceEntries(): Promise<Array<AddEventResult | null>> {\n    let performanceEntries = createPerformanceEntries(this.performanceEntries).concat(this.replayPerformanceEntries);\n\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n\n    // If we are manually starting, we want to ensure we only include performance entries\n    // that are after the initial timestamp\n    // The reason for this is that we may have performance entries from the page load, but may decide to start\n    // the replay later on, in which case we do not want to include these entries.\n    // without this, manually started replays can have events long before the actual replay recording starts,\n    // which messes with the timeline etc.\n    if (this._requiresManualStart) {\n      const initialTimestampInSeconds = this._context.initialTimestamp / 1000;\n      performanceEntries = performanceEntries.filter(entry => entry.start >= initialTimestampInSeconds);\n    }\n\n    return Promise.all(createPerformanceSpans(this, performanceEntries));\n  }\n\n  /**\n   * Clear _context\n   */\n  private _clearContext(): void {\n    // XXX: `initialTimestamp` and `initialUrl` do not get cleared\n    this._context.errorIds.clear();\n    this._context.traceIds.clear();\n    this._context.urls = [];\n  }\n\n  /** Update the initial timestamp based on the buffer content. */\n  private _updateInitialTimestampFromEventBuffer(): void {\n    const { session, eventBuffer } = this;\n    // If replay was started manually (=no sample rate was given),\n    // We do not want to back-port the initial timestamp\n    if (!session || !eventBuffer || this._requiresManualStart) {\n      return;\n    }\n\n    // we only ever update this on the initial segment\n    if (session.segmentId) {\n      return;\n    }\n\n    const earliestEvent = eventBuffer.getEarliestTimestamp();\n    if (earliestEvent && earliestEvent < this._context.initialTimestamp) {\n      this._context.initialTimestamp = earliestEvent;\n    }\n  }\n\n  /**\n   * Return and clear _context\n   */\n  private _popEventContext(): PopEventContext {\n    const _context = {\n      initialTimestamp: this._context.initialTimestamp,\n      initialUrl: this._context.initialUrl,\n      errorIds: Array.from(this._context.errorIds),\n      traceIds: Array.from(this._context.traceIds),\n      urls: this._context.urls,\n    };\n\n    this._clearContext();\n\n    return _context;\n  }\n\n  /**\n   * Flushes replay event buffer to Sentry.\n   *\n   * Performance events are only added right before flushing - this is\n   * due to the buffered performance observer events.\n   *\n   * Should never be called directly, only by `flush`\n   */\n  private async _runFlush(): Promise<void> {\n    const replayId = this.getSessionId();\n\n    if (!this.session || !this.eventBuffer || !replayId) {\n      DEBUG_BUILD && logger.error('No session or eventBuffer found to flush.');\n      return;\n    }\n\n    await this._addPerformanceEntries();\n\n    // Check eventBuffer again, as it could have been stopped in the meanwhile\n    if (!this.eventBuffer?.hasEvents) {\n      return;\n    }\n\n    // Only attach memory event if eventBuffer is not empty\n    await addMemoryEntry(this);\n\n    // Check eventBuffer again, as it could have been stopped in the meanwhile\n    if (!this.eventBuffer) {\n      return;\n    }\n\n    // if this changed in the meanwhile, e.g. because the session was refreshed or similar, we abort here\n    if (replayId !== this.getSessionId()) {\n      return;\n    }\n\n    try {\n      // This uses the data from the eventBuffer, so we need to call this before `finish()\n      this._updateInitialTimestampFromEventBuffer();\n\n      const timestamp = Date.now();\n\n      // Check total duration again, to avoid sending outdated stuff\n      // We leave 30s wiggle room to accommodate late flushing etc.\n      // This _could_ happen when the browser is suspended during flushing, in which case we just want to stop\n      if (timestamp - this._context.initialTimestamp > this._options.maxReplayDuration + 30_000) {\n        throw new Error('Session is too long, not sending replay');\n      }\n\n      const eventContext = this._popEventContext();\n      // Always increment segmentId regardless of outcome of sending replay\n      const segmentId = this.session.segmentId++;\n      this._maybeSaveSession();\n\n      // Note this empties the event buffer regardless of outcome of sending replay\n      const recordingData = await this.eventBuffer.finish();\n\n      await sendReplay({\n        replayId,\n        recordingData,\n        segmentId,\n        eventContext,\n        session: this.session,\n        timestamp,\n        onError: err => this.handleException(err),\n      });\n    } catch (err) {\n      this.handleException(err);\n\n      // This means we retried 3 times and all of them failed,\n      // or we ran into a problem we don't want to retry, like rate limiting.\n      // In this case, we want to completely stop the replay - otherwise, we may get inconsistent segments\n      // This should never reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      this.stop({ reason: 'sendReplay' });\n\n      const client = getClient();\n\n      if (client) {\n        const dropReason = err instanceof RateLimitError ? 'ratelimit_backoff' : 'send_error';\n        client.recordDroppedEvent(dropReason, 'replay');\n      }\n    }\n  }\n\n  /**\n   * Flush recording data to Sentry. Creates a lock so that only a single flush\n   * can be active at a time. Do not call this directly.\n   */\n  private async _flush({\n    force = false,\n  }: {\n    /**\n     * If true, flush while ignoring the `_isEnabled` state of\n     * Replay integration. (By default, flush is noop if integration\n     * is stopped).\n     */\n    force?: boolean;\n  } = {}): Promise<void> {\n    if (!this._isEnabled && !force) {\n      // This can happen if e.g. the replay was stopped because of exceeding the retry limit\n      return;\n    }\n\n    if (!this.checkAndHandleExpiredSession()) {\n      DEBUG_BUILD && logger.error('Attempting to finish replay event after session expired.');\n      return;\n    }\n\n    if (!this.session) {\n      // should never happen, as we would have bailed out before\n      return;\n    }\n\n    const start = this.session.started;\n    const now = Date.now();\n    const duration = now - start;\n\n    // A flush is about to happen, cancel any queued flushes\n    this._debouncedFlush.cancel();\n\n    // If session is too short, or too long (allow some wiggle room over maxReplayDuration), do not send it\n    // This _should_ not happen, but it may happen if flush is triggered due to a page activity change or similar\n    const tooShort = duration < this._options.minReplayDuration;\n    const tooLong = duration > this._options.maxReplayDuration + 5_000;\n    if (tooShort || tooLong) {\n      DEBUG_BUILD &&\n        logger.info(\n          `Session duration (${Math.floor(duration / 1000)}s) is too ${\n            tooShort ? 'short' : 'long'\n          }, not sending replay.`,\n        );\n\n      if (tooShort) {\n        this._debouncedFlush();\n      }\n      return;\n    }\n\n    const eventBuffer = this.eventBuffer;\n    if (eventBuffer && this.session.segmentId === 0 && !eventBuffer.hasCheckout) {\n      DEBUG_BUILD && logger.info('Flushing initial segment without checkout.');\n      // TODO FN: Evaluate if we want to stop here, or remove this again?\n    }\n\n    const _flushInProgress = !!this._flushLock;\n\n    // this._flushLock acts as a lock so that future calls to `_flush()` will\n    // be blocked until current flush is finished (i.e. this promise resolves)\n    if (!this._flushLock) {\n      this._flushLock = this._runFlush();\n    }\n\n    try {\n      await this._flushLock;\n    } catch (err) {\n      this.handleException(err);\n    } finally {\n      this._flushLock = undefined;\n\n      if (_flushInProgress) {\n        // Wait for previous flush to finish, then call the debounced\n        // `_flush()`. It's possible there are other flush requests queued and\n        // waiting for it to resolve. We want to reduce all outstanding\n        // requests (as well as any new flush requests that occur within a\n        // second of the locked flush completing) into a single flush.\n        this._debouncedFlush();\n      }\n    }\n  }\n\n  /** Save the session, if it is sticky */\n  private _maybeSaveSession(): void {\n    if (this.session && this._options.stickySession) {\n      saveSession(this.session);\n    }\n  }\n\n  /** Handler for rrweb.record.onMutation */\n  private _onMutationHandler(mutations: unknown[]): boolean {\n    const count = mutations.length;\n\n    const mutationLimit = this._options.mutationLimit;\n    const mutationBreadcrumbLimit = this._options.mutationBreadcrumbLimit;\n    const overMutationLimit = mutationLimit && count > mutationLimit;\n\n    // Create a breadcrumb if a lot of mutations happen at the same time\n    // We can show this in the UI as an information with potential performance improvements\n    if (count > mutationBreadcrumbLimit || overMutationLimit) {\n      const breadcrumb = createBreadcrumb({\n        category: 'replay.mutations',\n        data: {\n          count,\n          limit: overMutationLimit,\n        },\n      });\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n\n    // Stop replay if over the mutation limit\n    if (overMutationLimit) {\n      // This should never reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      this.stop({ reason: 'mutationLimit', forceFlush: this.recordingMode === 'session' });\n      return false;\n    }\n\n    // `true` means we use the regular mutation handling by rrweb\n    return true;\n  }\n}\n","import { setTimeout } from '@sentry-internal/browser-utils';\n\ntype DebouncedCallback = {\n  (): void | unknown;\n  flush: () => void | unknown;\n  cancel: () => void;\n};\ntype CallbackFunction = () => unknown;\ntype DebounceOptions = { maxWait?: number };\n\n/**\n * Heavily simplified debounce function based on lodash.debounce.\n *\n * This function takes a callback function (@param fun) and delays its invocation\n * by @param wait milliseconds. Optionally, a maxWait can be specified in @param options,\n * which ensures that the callback is invoked at least once after the specified max. wait time.\n *\n * @param func the function whose invocation is to be debounced\n * @param wait the minimum time until the function is invoked after it was called once\n * @param options the options object, which can contain the `maxWait` property\n *\n * @returns the debounced version of the function, which needs to be called at least once to start the\n *          debouncing process. Subsequent calls will reset the debouncing timer and, in case @paramfunc\n *          was already invoked in the meantime, return @param func's return value.\n *          The debounced function has two additional properties:\n *          - `flush`: Invokes the debounced function immediately and returns its return value\n *          - `cancel`: Cancels the debouncing process and resets the debouncing timer\n */\nexport function debounce(func: CallbackFunction, wait: number, options?: DebounceOptions): DebouncedCallback {\n  let callbackReturnValue: unknown;\n\n  let timerId: ReturnType<typeof setTimeout> | undefined;\n  let maxTimerId: ReturnType<typeof setTimeout> | undefined;\n\n  const maxWait = options?.maxWait ? Math.max(options.maxWait, wait) : 0;\n\n  function invokeFunc(): unknown {\n    cancelTimers();\n    callbackReturnValue = func();\n    return callbackReturnValue;\n  }\n\n  function cancelTimers(): void {\n    timerId !== undefined && clearTimeout(timerId);\n    maxTimerId !== undefined && clearTimeout(maxTimerId);\n    timerId = maxTimerId = undefined;\n  }\n\n  function flush(): unknown {\n    if (timerId !== undefined || maxTimerId !== undefined) {\n      return invokeFunc();\n    }\n    return callbackReturnValue;\n  }\n\n  function debounced(): unknown {\n    if (timerId) {\n      clearTimeout(timerId);\n    }\n    timerId = setTimeout(invokeFunc, wait);\n\n    if (maxWait && maxTimerId === undefined) {\n      maxTimerId = setTimeout(invokeFunc, maxWait);\n    }\n\n    return callbackReturnValue;\n  }\n\n  debounced.cancel = cancelTimers;\n  debounced.flush = flush;\n  return debounced;\n}\n","import { htmlTreeAsString } from '@sentry/core';\nimport type { Breadcrumb } from '@sentry/core';\n\nimport type { ReplayContainer } from '../types';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { getBaseDomBreadcrumb } from './handleDom';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\n\n/** Handle keyboard events & create breadcrumbs. */\nexport function handleKeyboardEvent(replay: ReplayContainer, event: KeyboardEvent): void {\n  if (!replay.isEnabled()) {\n    return;\n  }\n\n  // Update user activity, but do not restart recording as it can create\n  // noisy/low-value replays (e.g. user comes back from idle, hits alt-tab, new\n  // session with a single \"keydown\" breadcrumb is created)\n  replay.updateUserActivity();\n\n  const breadcrumb = getKeyboardBreadcrumb(event);\n\n  if (!breadcrumb) {\n    return;\n  }\n\n  addBreadcrumbEvent(replay, breadcrumb);\n}\n\n/** exported only for tests */\nexport function getKeyboardBreadcrumb(event: KeyboardEvent): Breadcrumb | null {\n  const { metaKey, shiftKey, ctrlKey, altKey, key, target } = event;\n\n  // never capture for input fields\n  if (!target || isInputElement(target as HTMLElement) || !key) {\n    return null;\n  }\n\n  // Note: We do not consider shift here, as that means \"uppercase\"\n  const hasModifierKey = metaKey || ctrlKey || altKey;\n  const isCharacterKey = key.length === 1; // other keys like Escape, Tab, etc have a longer length\n\n  // Do not capture breadcrumb if only a word key is pressed\n  // This could leak e.g. user input\n  if (!hasModifierKey && isCharacterKey) {\n    return null;\n  }\n\n  const message = htmlTreeAsString(target, { maxStringLength: 200 }) || '<unknown>';\n  const baseBreadcrumb = getBaseDomBreadcrumb(target as Node, message);\n\n  return createBreadcrumb({\n    category: 'ui.keyDown',\n    message,\n    data: {\n      ...baseBreadcrumb.data,\n      metaKey,\n      shiftKey,\n      ctrlKey,\n      altKey,\n      key,\n    },\n  });\n}\n\nfunction isInputElement(target: HTMLElement): boolean {\n  return target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;\n}\n","import { REPLAY_SESSION_KEY, WINDOW } from '../../src/constants';\nimport type { ReplayContainer } from '../../src/types';\nimport { hasSessionStorage } from '../util/hasSessionStorage';\n\n/**\n * Removes the session from Session Storage and unsets session in replay instance\n */\nexport function clearSession(replay: ReplayContainer): void {\n  deleteSession();\n  replay.session = undefined;\n}\n\n/**\n * Deletes a session from storage\n */\nfunction deleteSession(): void {\n  if (!hasSessionStorage()) {\n    return;\n  }\n\n  try {\n    WINDOW.sessionStorage.removeItem(REPLAY_SESSION_KEY);\n  } catch {\n    // Ignore potential SecurityError exceptions\n  }\n}\n","import { getWorkerURL } from '@sentry-internal/replay-worker';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { EventBuffer } from '../types';\nimport { logger } from '../util/logger';\nimport { EventBufferArray } from './EventBufferArray';\nimport { EventBufferProxy } from './EventBufferProxy';\n\ninterface CreateEventBufferParams {\n  useCompression: boolean;\n  workerUrl?: string;\n}\n\n// Treeshakable guard to remove the code of the included compression worker\ndeclare const __SENTRY_EXCLUDE_REPLAY_WORKER__: boolean;\n\n/**\n * Create an event buffer for replays.\n */\nexport function createEventBuffer({\n  useCompression,\n  workerUrl: customWorkerUrl,\n}: CreateEventBufferParams): EventBuffer {\n  if (\n    useCompression &&\n    // eslint-disable-next-line no-restricted-globals\n    window.Worker\n  ) {\n    const worker = _loadWorker(customWorkerUrl);\n\n    if (worker) {\n      return worker;\n    }\n  }\n\n  DEBUG_BUILD && logger.info('Using simple buffer');\n  return new EventBufferArray();\n}\n\nfunction _loadWorker(customWorkerUrl?: string): EventBufferProxy | void {\n  try {\n    const workerUrl = customWorkerUrl || _getWorkerUrl();\n\n    if (!workerUrl) {\n      return;\n    }\n\n    DEBUG_BUILD && logger.info(`Using compression worker${customWorkerUrl ? ` from ${customWorkerUrl}` : ''}`);\n    const worker = new Worker(workerUrl);\n    return new EventBufferProxy(worker);\n  } catch (error) {\n    DEBUG_BUILD && logger.exception(error, 'Failed to create compression worker');\n    // Fall back to use simple event buffer array\n  }\n}\n\nfunction _getWorkerUrl(): string {\n  if (typeof __SENTRY_EXCLUDE_REPLAY_WORKER__ === 'undefined' || !__SENTRY_EXCLUDE_REPLAY_WORKER__) {\n    return getWorkerURL();\n  }\n\n  return '';\n}\n","import r from\"./worker\";function e(){const e=new Blob([r]);return URL.createObjectURL(e)}export{e as getWorkerURL};\n","export default `var t=Uint8Array,n=Uint16Array,r=Int32Array,e=new t([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),i=new t([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),s=new t([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var i=new n(31),s=0;s<31;++s)i[s]=e+=1<<t[s-1];var a=new r(i[30]);for(s=1;s<30;++s)for(var o=i[s];o<i[s+1];++o)a[o]=o-i[s]<<5|s;return{b:i,r:a}},o=a(e,2),h=o.b,f=o.r;h[28]=258,f[258]=28;for(var l=a(i,0).r,u=new n(32768),c=0;c<32768;++c){var v=(43690&c)>>1|(21845&c)<<1;v=(61680&(v=(52428&v)>>2|(13107&v)<<2))>>4|(3855&v)<<4,u[c]=((65280&v)>>8|(255&v)<<8)>>1}var d=function(t,r,e){for(var i=t.length,s=0,a=new n(r);s<i;++s)t[s]&&++a[t[s]-1];var o,h=new n(r);for(s=1;s<r;++s)h[s]=h[s-1]+a[s-1]<<1;if(e){o=new n(1<<r);var f=15-r;for(s=0;s<i;++s)if(t[s])for(var l=s<<4|t[s],c=r-t[s],v=h[t[s]-1]++<<c,d=v|(1<<c)-1;v<=d;++v)o[u[v]>>f]=l}else for(o=new n(i),s=0;s<i;++s)t[s]&&(o[s]=u[h[t[s]-1]++]>>15-t[s]);return o},p=new t(288);for(c=0;c<144;++c)p[c]=8;for(c=144;c<256;++c)p[c]=9;for(c=256;c<280;++c)p[c]=7;for(c=280;c<288;++c)p[c]=8;var g=new t(32);for(c=0;c<32;++c)g[c]=5;var w=d(p,9,0),y=d(g,5,0),m=function(t){return(t+7)/8|0},b=function(n,r,e){return(null==e||e>n.length)&&(e=n.length),new t(n.subarray(r,e))},M=[\"unexpected EOF\",\"invalid block type\",\"invalid length/literal\",\"invalid distance\",\"stream finished\",\"no stream handler\",,\"no callback\",\"invalid UTF-8 data\",\"extra field too long\",\"date not in range 1980-2099\",\"filename too long\",\"stream finishing\",\"invalid zip data\"],E=function(t,n,r){var e=new Error(n||M[t]);if(e.code=t,Error.captureStackTrace&&Error.captureStackTrace(e,E),!r)throw e;return e},z=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8},_=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8,t[e+2]|=r>>16},x=function(r,e){for(var i=[],s=0;s<r.length;++s)r[s]&&i.push({s:s,f:r[s]});var a=i.length,o=i.slice();if(!a)return{t:F,l:0};if(1==a){var h=new t(i[0].s+1);return h[i[0].s]=1,{t:h,l:1}}i.sort((function(t,n){return t.f-n.f})),i.push({s:-1,f:25001});var f=i[0],l=i[1],u=0,c=1,v=2;for(i[0]={s:-1,f:f.f+l.f,l:f,r:l};c!=a-1;)f=i[i[u].f<i[v].f?u++:v++],l=i[u!=c&&i[u].f<i[v].f?u++:v++],i[c++]={s:-1,f:f.f+l.f,l:f,r:l};var d=o[0].s;for(s=1;s<a;++s)o[s].s>d&&(d=o[s].s);var p=new n(d+1),g=A(i[c-1],p,0);if(g>e){s=0;var w=0,y=g-e,m=1<<y;for(o.sort((function(t,n){return p[n.s]-p[t.s]||t.f-n.f}));s<a;++s){var b=o[s].s;if(!(p[b]>e))break;w+=m-(1<<g-p[b]),p[b]=e}for(w>>=y;w>0;){var M=o[s].s;p[M]<e?w-=1<<e-p[M]++-1:++s}for(;s>=0&&w;--s){var E=o[s].s;p[E]==e&&(--p[E],++w)}g=e}return{t:new t(p),l:g}},A=function(t,n,r){return-1==t.s?Math.max(A(t.l,n,r+1),A(t.r,n,r+1)):n[t.s]=r},D=function(t){for(var r=t.length;r&&!t[--r];);for(var e=new n(++r),i=0,s=t[0],a=1,o=function(t){e[i++]=t},h=1;h<=r;++h)if(t[h]==s&&h!=r)++a;else{if(!s&&a>2){for(;a>138;a-=138)o(32754);a>2&&(o(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(o(s),--a;a>6;a-=6)o(8304);a>2&&(o(a-3<<5|8208),a=0)}for(;a--;)o(s);a=1,s=t[h]}return{c:e.subarray(0,i),n:r}},T=function(t,n){for(var r=0,e=0;e<n.length;++e)r+=t[e]*n[e];return r},k=function(t,n,r){var e=r.length,i=m(n+2);t[i]=255&e,t[i+1]=e>>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var s=0;s<e;++s)t[i+s+4]=r[s];return 8*(i+4+e)},U=function(t,r,a,o,h,f,l,u,c,v,m){z(r,m++,a),++h[256];for(var b=x(h,15),M=b.t,E=b.l,A=x(f,15),U=A.t,C=A.l,F=D(M),I=F.c,S=F.n,L=D(U),O=L.c,j=L.n,q=new n(19),B=0;B<I.length;++B)++q[31&I[B]];for(B=0;B<O.length;++B)++q[31&O[B]];for(var G=x(q,7),H=G.t,J=G.l,K=19;K>4&&!H[s[K-1]];--K);var N,P,Q,R,V=v+5<<3,W=T(h,p)+T(f,g)+l,X=T(h,M)+T(f,U)+l+14+3*K+T(q,H)+2*q[16]+3*q[17]+7*q[18];if(c>=0&&V<=W&&V<=X)return k(r,m,t.subarray(c,c+v));if(z(r,m,1+(X<W)),m+=2,X<W){N=d(M,E,0),P=M,Q=d(U,C,0),R=U;var Y=d(H,J,0);z(r,m,S-257),z(r,m+5,j-1),z(r,m+10,K-4),m+=14;for(B=0;B<K;++B)z(r,m+3*B,H[s[B]]);m+=3*K;for(var Z=[I,O],$=0;$<2;++$){var tt=Z[$];for(B=0;B<tt.length;++B){var nt=31&tt[B];z(r,m,Y[nt]),m+=H[nt],nt>15&&(z(r,m,tt[B]>>5&127),m+=tt[B]>>12)}}}else N=w,P=p,Q=y,R=g;for(B=0;B<u;++B){var rt=o[B];if(rt>255){_(r,m,N[(nt=rt>>18&31)+257]),m+=P[nt+257],nt>7&&(z(r,m,rt>>23&31),m+=e[nt]);var et=31&rt;_(r,m,Q[et]),m+=R[et],et>3&&(_(r,m,rt>>5&8191),m+=i[et])}else _(r,m,N[rt]),m+=P[rt]}return _(r,m,N[256]),m+P[256]},C=new r([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),F=new t(0),I=function(){for(var t=new Int32Array(256),n=0;n<256;++n){for(var r=n,e=9;--e;)r=(1&r&&-306674912)^r>>>1;t[n]=r}return t}(),S=function(){var t=-1;return{p:function(n){for(var r=t,e=0;e<n.length;++e)r=I[255&r^n[e]]^r>>>8;t=r},d:function(){return~t}}},L=function(){var t=1,n=0;return{p:function(r){for(var e=t,i=n,s=0|r.length,a=0;a!=s;){for(var o=Math.min(a+2655,s);a<o;++a)i+=e+=r[a];e=(65535&e)+15*(e>>16),i=(65535&i)+15*(i>>16)}t=e,n=i},d:function(){return(255&(t%=65521))<<24|(65280&t)<<8|(255&(n%=65521))<<8|n>>8}}},O=function(s,a,o,h,u){if(!u&&(u={l:1},a.dictionary)){var c=a.dictionary.subarray(-32768),v=new t(c.length+s.length);v.set(c),v.set(s,c.length),s=v,u.w=c.length}return function(s,a,o,h,u,c){var v=c.z||s.length,d=new t(h+v+5*(1+Math.ceil(v/7e3))+u),p=d.subarray(h,d.length-u),g=c.l,w=7&(c.r||0);if(a){w&&(p[0]=c.r>>3);for(var y=C[a-1],M=y>>13,E=8191&y,z=(1<<o)-1,_=c.p||new n(32768),x=c.h||new n(z+1),A=Math.ceil(o/3),D=2*A,T=function(t){return(s[t]^s[t+1]<<A^s[t+2]<<D)&z},F=new r(25e3),I=new n(288),S=new n(32),L=0,O=0,j=c.i||0,q=0,B=c.w||0,G=0;j+2<v;++j){var H=T(j),J=32767&j,K=x[H];if(_[J]=K,x[H]=J,B<=j){var N=v-j;if((L>7e3||q>24576)&&(N>423||!g)){w=U(s,p,0,F,I,S,O,q,G,j-G,w),q=L=O=0,G=j;for(var P=0;P<286;++P)I[P]=0;for(P=0;P<30;++P)S[P]=0}var Q=2,R=0,V=E,W=J-K&32767;if(N>2&&H==T(j-W))for(var X=Math.min(M,N)-1,Y=Math.min(32767,j),Z=Math.min(258,N);W<=Y&&--V&&J!=K;){if(s[j+Q]==s[j+Q-W]){for(var $=0;$<Z&&s[j+$]==s[j+$-W];++$);if($>Q){if(Q=$,R=W,$>X)break;var tt=Math.min(W,$-2),nt=0;for(P=0;P<tt;++P){var rt=j-W+P&32767,et=rt-_[rt]&32767;et>nt&&(nt=et,K=rt)}}}W+=(J=K)-(K=_[J])&32767}if(R){F[q++]=268435456|f[Q]<<18|l[R];var it=31&f[Q],st=31&l[R];O+=e[it]+i[st],++I[257+it],++S[st],B=j+Q,++L}else F[q++]=s[j],++I[s[j]]}}for(j=Math.max(j,B);j<v;++j)F[q++]=s[j],++I[s[j]];w=U(s,p,g,F,I,S,O,q,G,j-G,w),g||(c.r=7&w|p[w/8|0]<<3,w-=7,c.h=x,c.p=_,c.i=j,c.w=B)}else{for(j=c.w||0;j<v+g;j+=65535){var at=j+65535;at>=v&&(p[w/8|0]=g,at=v),w=k(p,w+1,s.subarray(j,at))}c.i=v}return b(d,0,h+m(w)+u)}(s,null==a.level?6:a.level,null==a.mem?u.l?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(s.length)))):20:12+a.mem,o,h,u)},j=function(t,n,r){for(;r;++n)t[n]=r,r>>>=8},q=function(t,n){var r=n.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=n.level<2?4:9==n.level?2:0,t[9]=3,0!=n.mtime&&j(t,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),r){t[3]=8;for(var e=0;e<=r.length;++e)t[e+10]=r.charCodeAt(e)}},B=function(t){return 10+(t.filename?t.filename.length+1:0)},G=function(){function n(n,r){if(\"function\"==typeof n&&(r=n,n={}),this.ondata=r,this.o=n||{},this.s={l:0,i:32768,w:32768,z:32768},this.b=new t(98304),this.o.dictionary){var e=this.o.dictionary.subarray(-32768);this.b.set(e,32768-e.length),this.s.i=32768-e.length}}return n.prototype.p=function(t,n){this.ondata(O(t,this.o,0,0,this.s),n)},n.prototype.push=function(n,r){this.ondata||E(5),this.s.l&&E(4);var e=n.length+this.s.z;if(e>this.b.length){if(e>2*this.b.length-32768){var i=new t(-32768&e);i.set(this.b.subarray(0,this.s.z)),this.b=i}var s=this.b.length-this.s.z;this.b.set(n.subarray(0,s),this.s.z),this.s.z=this.b.length,this.p(this.b,!1),this.b.set(this.b.subarray(-32768)),this.b.set(n.subarray(s),32768),this.s.z=n.length-s+32768,this.s.i=32766,this.s.w=32768}else this.b.set(n,this.s.z),this.s.z+=n.length;this.s.l=1&r,(this.s.z>this.s.w+8191||r)&&(this.p(this.b,r||!1),this.s.w=this.s.i,this.s.i-=2)},n.prototype.flush=function(){this.ondata||E(5),this.s.l&&E(4),this.p(this.b,!1),this.s.w=this.s.i,this.s.i-=2},n}();var H=function(){function t(t,n){this.c=L(),this.v=1,G.call(this,t,n)}return t.prototype.push=function(t,n){this.c.p(t),G.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){var r=O(t,this.o,this.v&&(this.o.dictionary?6:2),n&&4,this.s);this.v&&(function(t,n){var r=n.level,e=0==r?0:r<6?1:9==r?3:2;if(t[0]=120,t[1]=e<<6|(n.dictionary&&32),t[1]|=31-(t[0]<<8|t[1])%31,n.dictionary){var i=L();i.p(n.dictionary),j(t,2,i.d())}}(r,this.o),this.v=0),n&&j(r,r.length-4,this.c.d()),this.ondata(r,n)},t.prototype.flush=function(){G.prototype.flush.call(this)},t}(),J=\"undefined\"!=typeof TextEncoder&&new TextEncoder,K=\"undefined\"!=typeof TextDecoder&&new TextDecoder;try{K.decode(F,{stream:!0})}catch(t){}var N=function(){function t(t){this.ondata=t}return t.prototype.push=function(t,n){this.ondata||E(5),this.d&&E(4),this.ondata(P(t),this.d=n||!1)},t}();function P(n,r){if(J)return J.encode(n);for(var e=n.length,i=new t(n.length+(n.length>>1)),s=0,a=function(t){i[s++]=t},o=0;o<e;++o){if(s+5>i.length){var h=new t(s+8+(e-o<<1));h.set(i),i=h}var f=n.charCodeAt(o);f<128||r?a(f):f<2048?(a(192|f>>6),a(128|63&f)):f>55295&&f<57344?(a(240|(f=65536+(1047552&f)|1023&n.charCodeAt(++o))>>18),a(128|f>>12&63),a(128|f>>6&63),a(128|63&f)):(a(224|f>>12),a(128|f>>6&63),a(128|63&f))}return b(i,0,s)}function Q(t){return function(t,n){n||(n={});var r=S(),e=t.length;r.p(t);var i=O(t,n,B(n),8),s=i.length;return q(i,n),j(i,s-8,r.d()),j(i,s-4,e),i}(P(t))}const R=new class{constructor(){this._init()}clear(){this._init()}addEvent(t){if(!t)throw new Error(\"Adding invalid event\");const n=this._hasEvents?\",\":\"\";this.stream.push(n+t),this._hasEvents=!0}finish(){this.stream.push(\"]\",!0);const t=function(t){let n=0;for(const r of t)n+=r.length;const r=new Uint8Array(n);for(let n=0,e=0,i=t.length;n<i;n++){const i=t[n];r.set(i,e),e+=i.length}return r}(this._deflatedData);return this._init(),t}_init(){this._hasEvents=!1,this._deflatedData=[],this.deflate=new H,this.deflate.ondata=(t,n)=>{this._deflatedData.push(t)},this.stream=new N(((t,n)=>{this.deflate.push(t,n)})),this.stream.push(\"[\")}},V={clear:()=>{R.clear()},addEvent:t=>R.addEvent(t),finish:()=>R.finish(),compress:t=>Q(t)};addEventListener(\"message\",(function(t){const n=t.data.method,r=t.data.id,e=t.data.arg;if(n in V&&\"function\"==typeof V[n])try{const t=V[n](e);postMessage({id:r,method:n,success:!0,response:t})}catch(t){postMessage({id:r,method:n,success:!1,response:t.message}),console.error(t)}})),postMessage({id:void 0,method:\"init\",success:!0,response:void 0});`;\n","import {\n  addClickKeypressInstrumentationHandler,\n  addHistoryInstrumentationHandler,\n} from '@sentry-internal/browser-utils';\nimport { addEventProcessor, getClient } from '@sentry/core';\nimport type { DynamicSamplingContext } from '@sentry/core';\n\nimport { handleAfterSendEvent } from '../coreHandlers/handleAfterSendEvent';\nimport { handleBeforeSendEvent } from '../coreHandlers/handleBeforeSendEvent';\nimport { handleBreadcrumbs } from '../coreHandlers/handleBreadcrumbs';\nimport { handleDomListener } from '../coreHandlers/handleDom';\nimport { handleGlobalEventListener } from '../coreHandlers/handleGlobalEvent';\nimport { handleHistorySpanListener } from '../coreHandlers/handleHistory';\nimport { handleNetworkBreadcrumbs } from '../coreHandlers/handleNetworkBreadcrumbs';\nimport type { ReplayContainer } from '../types';\n\n/**\n * Add global listeners that cannot be removed.\n */\nexport function addGlobalListeners(\n  replay: ReplayContainer,\n  { autoFlushOnFeedback }: { autoFlushOnFeedback?: boolean },\n): void {\n  // Listeners from core SDK //\n  const client = getClient();\n\n  addClickKeypressInstrumentationHandler(handleDomListener(replay));\n  addHistoryInstrumentationHandler(handleHistorySpanListener(replay));\n  handleBreadcrumbs(replay);\n  handleNetworkBreadcrumbs(replay);\n\n  // Tag all (non replay) events that get sent to Sentry with the current\n  // replay ID so that we can reference them later in the UI\n  const eventProcessor = handleGlobalEventListener(replay);\n  addEventProcessor(eventProcessor);\n\n  // If a custom client has no hooks yet, we continue to use the \"old\" implementation\n  if (client) {\n    client.on('beforeSendEvent', handleBeforeSendEvent(replay));\n    client.on('afterSendEvent', handleAfterSendEvent(replay));\n    client.on('createDsc', (dsc: DynamicSamplingContext) => {\n      const replayId = replay.getSessionId();\n      // We do not want to set the DSC when in buffer mode, as that means the replay has not been sent (yet)\n      if (replayId && replay.isEnabled() && replay.recordingMode === 'session') {\n        // Ensure to check that the session is still active - it could have expired in the meanwhile\n        const isSessionActive = replay.checkAndHandleExpiredSession();\n        if (isSessionActive) {\n          dsc.replay_id = replayId;\n        }\n      }\n    });\n\n    client.on('spanStart', span => {\n      replay.lastActiveSpan = span;\n    });\n\n    // We may be missing the initial spanStart due to timing issues,\n    // so we capture it on finish again.\n    client.on('spanEnd', span => {\n      replay.lastActiveSpan = span;\n    });\n\n    // We want to attach the replay id to the feedback event\n    client.on('beforeSendFeedback', async (feedbackEvent, options) => {\n      const replayId = replay.getSessionId();\n      if (options?.includeReplay && replay.isEnabled() && replayId && feedbackEvent.contexts?.feedback) {\n        // In case the feedback is sent via API and not through our widget, we want to flush replay\n        if (feedbackEvent.contexts.feedback.source === 'api' && autoFlushOnFeedback) {\n          await replay.flush();\n        }\n        feedbackEvent.contexts.feedback.replay_id = replayId;\n      }\n    });\n\n    if (autoFlushOnFeedback) {\n      client.on('openFeedbackWidget', async () => {\n        await replay.flush();\n      });\n    }\n  }\n}\n","import type { HandlerDataHistory } from '@sentry/core';\n\nimport type { HistoryData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { createPerformanceSpans } from '../util/createPerformanceSpans';\n\nfunction handleHistory(handlerData: HandlerDataHistory): ReplayPerformanceEntry<HistoryData> {\n  const { from, to } = handlerData;\n\n  const now = Date.now() / 1000;\n\n  return {\n    type: 'navigation.push',\n    start: now,\n    end: now,\n    name: to,\n    data: {\n      previous: from,\n    },\n  };\n}\n\n/**\n * Returns a listener to be added to `addHistoryInstrumentationHandler(listener)`.\n */\nexport function handleHistorySpanListener(replay: ReplayContainer): (handlerData: HandlerDataHistory) => void {\n  return (handlerData: HandlerDataHistory) => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleHistory(handlerData);\n\n    if (result === null) {\n      return;\n    }\n\n    // Need to collect visited URLs\n    replay.getContext().urls.push(result.name);\n    replay.triggerUserActivity();\n\n    replay.addUpdate(() => {\n      createPerformanceSpans(replay, [result]);\n      // Returning false to flush\n      return false;\n    });\n  };\n}\n","import type { FetchHint, XhrHint } from '@sentry-internal/browser-utils';\nimport { getClient } from '@sentry/core';\nimport type { Breadcrumb, BreadcrumbHint, FetchBreadcrumbData, XhrBreadcrumbData } from '@sentry/core';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { ReplayContainer, ReplayNetworkOptions } from '../types';\nimport { logger } from '../util/logger';\nimport { captureFetchBreadcrumbToReplay, enrichFetchBreadcrumb } from './util/fetchUtils';\nimport { captureXhrBreadcrumbToReplay, enrichXhrBreadcrumb } from './util/xhrUtils';\n\ninterface ExtendedNetworkBreadcrumbsOptions extends ReplayNetworkOptions {\n  replay: ReplayContainer;\n}\n\n/**\n * This method does two things:\n * - It enriches the regular XHR/fetch breadcrumbs with request/response size data\n * - It captures the XHR/fetch breadcrumbs to the replay\n *   (enriching it with further data that is _not_ added to the regular breadcrumbs)\n */\nexport function handleNetworkBreadcrumbs(replay: ReplayContainer): void {\n  const client = getClient();\n\n  try {\n    const {\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders,\n      networkResponseHeaders,\n    } = replay.getOptions();\n\n    const options: ExtendedNetworkBreadcrumbsOptions = {\n      replay,\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders,\n      networkResponseHeaders,\n    };\n\n    if (client) {\n      client.on('beforeAddBreadcrumb', (breadcrumb, hint) => beforeAddNetworkBreadcrumb(options, breadcrumb, hint));\n    }\n  } catch {\n    // Do nothing\n  }\n}\n\n/** just exported for tests */\nexport function beforeAddNetworkBreadcrumb(\n  options: ExtendedNetworkBreadcrumbsOptions,\n  breadcrumb: Breadcrumb,\n  hint?: BreadcrumbHint,\n): void {\n  if (!breadcrumb.data) {\n    return;\n  }\n\n  try {\n    if (_isXhrBreadcrumb(breadcrumb) && _isXhrHint(hint)) {\n      // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n      // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n      // So any async mutations to it will not be reflected in the final breadcrumb\n      enrichXhrBreadcrumb(breadcrumb, hint);\n\n      // This call should not reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      captureXhrBreadcrumbToReplay(breadcrumb, hint, options);\n    }\n\n    if (_isFetchBreadcrumb(breadcrumb) && _isFetchHint(hint)) {\n      // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n      // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n      // So any async mutations to it will not be reflected in the final breadcrumb\n      enrichFetchBreadcrumb(breadcrumb, hint);\n\n      // This call should not reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      captureFetchBreadcrumbToReplay(breadcrumb, hint, options);\n    }\n  } catch (e) {\n    DEBUG_BUILD && logger.exception(e, 'Error when enriching network breadcrumb');\n  }\n}\n\nfunction _isXhrBreadcrumb(breadcrumb: Breadcrumb): breadcrumb is Breadcrumb & { data: XhrBreadcrumbData } {\n  return breadcrumb.category === 'xhr';\n}\n\nfunction _isFetchBreadcrumb(breadcrumb: Breadcrumb): breadcrumb is Breadcrumb & { data: FetchBreadcrumbData } {\n  return breadcrumb.category === 'fetch';\n}\n\nfunction _isXhrHint(hint?: BreadcrumbHint): hint is XhrHint {\n  return hint?.xhr;\n}\n\nfunction _isFetchHint(hint?: BreadcrumbHint): hint is FetchHint {\n  return hint?.response;\n}\n","import { SENTRY_XHR_DATA_KEY, getBodyString } from '@sentry-internal/browser-utils';\nimport type { NetworkMetaWarning, XhrHint } from '@sentry-internal/browser-utils';\nimport type { Breadcrumb, XhrBreadcrumbData } from '@sentry/core';\n\nimport { DEBUG_BUILD } from '../../debug-build';\nimport type { ReplayContainer, ReplayNetworkOptions, ReplayNetworkRequestData } from '../../types';\nimport { logger } from '../../util/logger';\nimport { addNetworkBreadcrumb } from './addNetworkBreadcrumb';\nimport {\n  buildNetworkRequestOrResponse,\n  buildSkippedNetworkRequestOrResponse,\n  getAllowedHeaders,\n  getBodySize,\n  makeNetworkReplayBreadcrumb,\n  mergeWarning,\n  parseContentLengthHeader,\n  urlMatches,\n} from './networkUtils';\n\n/**\n * Capture an XHR breadcrumb to a replay.\n * This adds additional data (where appropriate).\n */\nexport async function captureXhrBreadcrumbToReplay(\n  breadcrumb: Breadcrumb & { data: XhrBreadcrumbData },\n  hint: Partial<XhrHint>,\n  options: ReplayNetworkOptions & { replay: ReplayContainer },\n): Promise<void> {\n  try {\n    const data = _prepareXhrData(breadcrumb, hint, options);\n\n    // Create a replay performance entry from this breadcrumb\n    const result = makeNetworkReplayBreadcrumb('resource.xhr', data);\n    addNetworkBreadcrumb(options.replay, result);\n  } catch (error) {\n    DEBUG_BUILD && logger.exception(error, 'Failed to capture xhr breadcrumb');\n  }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nexport function enrichXhrBreadcrumb(\n  breadcrumb: Breadcrumb & { data: XhrBreadcrumbData },\n  hint: Partial<XhrHint>,\n): void {\n  const { xhr, input } = hint;\n\n  if (!xhr) {\n    return;\n  }\n\n  const reqSize = getBodySize(input);\n  const resSize = xhr.getResponseHeader('content-length')\n    ? parseContentLengthHeader(xhr.getResponseHeader('content-length'))\n    : _getBodySize(xhr.response, xhr.responseType);\n\n  if (reqSize !== undefined) {\n    breadcrumb.data.request_body_size = reqSize;\n  }\n  if (resSize !== undefined) {\n    breadcrumb.data.response_body_size = resSize;\n  }\n}\n\nfunction _prepareXhrData(\n  breadcrumb: Breadcrumb & { data: XhrBreadcrumbData },\n  hint: Partial<XhrHint>,\n  options: ReplayNetworkOptions,\n): ReplayNetworkRequestData | null {\n  const now = Date.now();\n  const { startTimestamp = now, endTimestamp = now, input, xhr } = hint;\n\n  const {\n    url,\n    method,\n    status_code: statusCode = 0,\n    request_body_size: requestBodySize,\n    response_body_size: responseBodySize,\n  } = breadcrumb.data;\n\n  if (!url) {\n    return null;\n  }\n\n  if (!xhr || !urlMatches(url, options.networkDetailAllowUrls) || urlMatches(url, options.networkDetailDenyUrls)) {\n    const request = buildSkippedNetworkRequestOrResponse(requestBodySize);\n    const response = buildSkippedNetworkRequestOrResponse(responseBodySize);\n    return {\n      startTimestamp,\n      endTimestamp,\n      url,\n      method,\n      statusCode,\n      request,\n      response,\n    };\n  }\n\n  const xhrInfo = xhr[SENTRY_XHR_DATA_KEY];\n  const networkRequestHeaders = xhrInfo\n    ? getAllowedHeaders(xhrInfo.request_headers, options.networkRequestHeaders)\n    : {};\n  const networkResponseHeaders = getAllowedHeaders(getResponseHeaders(xhr), options.networkResponseHeaders);\n\n  const [requestBody, requestWarning] = options.networkCaptureBodies ? getBodyString(input, logger) : [undefined];\n  const [responseBody, responseWarning] = options.networkCaptureBodies ? _getXhrResponseBody(xhr) : [undefined];\n\n  const request = buildNetworkRequestOrResponse(networkRequestHeaders, requestBodySize, requestBody);\n  const response = buildNetworkRequestOrResponse(networkResponseHeaders, responseBodySize, responseBody);\n\n  return {\n    startTimestamp,\n    endTimestamp,\n    url,\n    method,\n    statusCode,\n    request: requestWarning ? mergeWarning(request, requestWarning) : request,\n    response: responseWarning ? mergeWarning(response, responseWarning) : response,\n  };\n}\n\nfunction getResponseHeaders(xhr: XMLHttpRequest): Record<string, string> {\n  const headers = xhr.getAllResponseHeaders();\n\n  if (!headers) {\n    return {};\n  }\n\n  return headers.split('\\r\\n').reduce((acc: Record<string, string>, line: string) => {\n    const [key, value] = line.split(': ') as [string, string | undefined];\n    if (value) {\n      acc[key.toLowerCase()] = value;\n    }\n    return acc;\n  }, {});\n}\n\nfunction _getXhrResponseBody(xhr: XMLHttpRequest): [string | undefined, NetworkMetaWarning?] {\n  // We collect errors that happen, but only log them if we can't get any response body\n  const errors: unknown[] = [];\n\n  try {\n    return [xhr.responseText];\n  } catch (e) {\n    errors.push(e);\n  }\n\n  // Try to manually parse the response body, if responseText fails\n  try {\n    return _parseXhrResponse(xhr.response, xhr.responseType);\n  } catch (e) {\n    errors.push(e);\n  }\n\n  DEBUG_BUILD && logger.warn('Failed to get xhr response body', ...errors);\n\n  return [undefined];\n}\n\n/**\n * Get the string representation of the XHR response.\n * Based on MDN, these are the possible types of the response:\n * string\n * ArrayBuffer\n * Blob\n * Document\n * POJO\n *\n * Exported only for tests.\n */\nexport function _parseXhrResponse(\n  body: XMLHttpRequest['response'],\n  responseType: XMLHttpRequest['responseType'],\n): [string | undefined, NetworkMetaWarning?] {\n  try {\n    if (typeof body === 'string') {\n      return [body];\n    }\n\n    if (body instanceof Document) {\n      return [body.body.outerHTML];\n    }\n\n    if (responseType === 'json' && body && typeof body === 'object') {\n      return [JSON.stringify(body)];\n    }\n\n    if (!body) {\n      return [undefined];\n    }\n  } catch (error) {\n    DEBUG_BUILD && logger.exception(error, 'Failed to serialize body', body);\n    return [undefined, 'BODY_PARSE_ERROR'];\n  }\n\n  DEBUG_BUILD && logger.info('Skipping network body because of body type', body);\n\n  return [undefined, 'UNPARSEABLE_BODY_TYPE'];\n}\n\nfunction _getBodySize(\n  body: XMLHttpRequest['response'],\n  responseType: XMLHttpRequest['responseType'],\n): number | undefined {\n  try {\n    const bodyStr = responseType === 'json' && body && typeof body === 'object' ? JSON.stringify(body) : body;\n    return getBodySize(bodyStr);\n  } catch {\n    return undefined;\n  }\n}\n","import type { Event, EventHint } from '@sentry/core';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { ReplayContainer } from '../types';\nimport { isErrorEvent, isFeedbackEvent, isReplayEvent, isTransactionEvent } from '../util/eventUtils';\nimport { isRrwebError } from '../util/isRrwebError';\nimport { logger } from '../util/logger';\nimport { resetReplayIdOnDynamicSamplingContext } from '../util/resetReplayIdOnDynamicSamplingContext';\nimport { addFeedbackBreadcrumb } from './util/addFeedbackBreadcrumb';\nimport { shouldSampleForBufferEvent } from './util/shouldSampleForBufferEvent';\n\n/**\n * Returns a listener to be added to `addEventProcessor(listener)`.\n */\nexport function handleGlobalEventListener(replay: ReplayContainer): (event: Event, hint: EventHint) => Event | null {\n  return Object.assign(\n    (event: Event, hint: EventHint) => {\n      // Do nothing if replay has been disabled or paused\n      if (!replay.isEnabled() || replay.isPaused()) {\n        return event;\n      }\n\n      if (isReplayEvent(event)) {\n        // Replays have separate set of breadcrumbs, do not include breadcrumbs\n        // from core SDK\n        delete event.breadcrumbs;\n        return event;\n      }\n\n      // We only want to handle errors, transactions, and feedbacks, nothing else\n      if (!isErrorEvent(event) && !isTransactionEvent(event) && !isFeedbackEvent(event)) {\n        return event;\n      }\n\n      // Ensure we do not add replay_id if the session is expired\n      const isSessionActive = replay.checkAndHandleExpiredSession();\n      if (!isSessionActive) {\n        // prevent exceeding replay durations by removing the expired replayId from the DSC\n        resetReplayIdOnDynamicSamplingContext();\n        return event;\n      }\n\n      if (isFeedbackEvent(event)) {\n        // This should never reject\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        replay.flush();\n        event.contexts.feedback.replay_id = replay.getSessionId();\n        // Add a replay breadcrumb for this piece of feedback\n        addFeedbackBreadcrumb(replay, event);\n        return event;\n      }\n\n      // Unless `captureExceptions` is enabled, we want to ignore errors coming from rrweb\n      // As there can be a bunch of stuff going wrong in internals there, that we don't want to bubble up to users\n      if (isRrwebError(event, hint) && !replay.getOptions()._experiments.captureExceptions) {\n        DEBUG_BUILD && logger.log('Ignoring error from rrweb internals', event);\n        return null;\n      }\n\n      // When in buffer mode, we decide to sample here.\n      // Later, in `handleAfterSendEvent`, if the replayId is set, we know that we sampled\n      // And convert the buffer session to a full session\n      const isErrorEventSampled = shouldSampleForBufferEvent(replay, event);\n\n      // Tag errors if it has been sampled in buffer mode, or if it is session mode\n      // Only tag transactions if in session mode\n      const shouldTagReplayId = isErrorEventSampled || replay.recordingMode === 'session';\n\n      if (shouldTagReplayId) {\n        event.tags = { ...event.tags, replayId: replay.getSessionId() };\n      }\n\n      return event;\n    },\n    { id: 'Replay' },\n  );\n}\n","import { EventType } from '@sentry-internal/rrweb';\nimport type { FeedbackEvent } from '@sentry/core';\n\nimport type { ReplayBreadcrumbFrameEvent, ReplayContainer } from '../../types';\n\n/**\n * Add a feedback breadcrumb event to replay.\n */\nexport function addFeedbackBreadcrumb(replay: ReplayContainer, event: FeedbackEvent): void {\n  replay.triggerUserActivity();\n  replay.addUpdate(() => {\n    if (!event.timestamp) {\n      // Ignore events that don't have timestamps (this shouldn't happen, more of a typing issue)\n      // Return true here so that we don't flush\n      return true;\n    }\n\n    // This should never reject\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    replay.throttledAddEvent({\n      type: EventType.Custom,\n      timestamp: event.timestamp * 1000,\n      data: {\n        tag: 'breadcrumb',\n        payload: {\n          timestamp: event.timestamp,\n          type: 'default',\n          category: 'sentry.feedback',\n          data: {\n            feedbackId: event.event_id,\n          },\n        },\n      },\n    } as ReplayBreadcrumbFrameEvent);\n\n    return false;\n  });\n}\n","import type { Event, EventHint } from '@sentry/core';\n\n/**\n * Returns true if we think the given event is an error originating inside of rrweb.\n */\nexport function isRrwebError(event: Event, hint: EventHint): boolean {\n  if (event.type || !event.exception || !event.exception.values || !event.exception.values.length) {\n    return false;\n  }\n\n  // @ts-expect-error this may be set by rrweb when it finds errors\n  if (hint.originalException?.__rrweb__) {\n    return true;\n  }\n\n  return false;\n}\n","import type { Event } from '@sentry/core';\n\nimport { UNABLE_TO_SEND_REPLAY } from '../../constants';\nimport type { ReplayContainer } from '../../types';\nimport { isSampled } from '../../util/isSampled';\n\n/**\n * Determine if event should be sampled (only applies in buffer mode).\n * When an event is captured by `handleGlobalEvent`, when in buffer mode\n * we determine if we want to sample the error or not.\n */\nexport function shouldSampleForBufferEvent(replay: ReplayContainer, event: Event): boolean {\n  if (replay.recordingMode !== 'buffer') {\n    return false;\n  }\n\n  // ignore this error because otherwise we could loop indefinitely with\n  // trying to capture replay and failing\n  if (event.message === UNABLE_TO_SEND_REPLAY) {\n    return false;\n  }\n\n  // Require the event to be an error event & to have an exception\n  if (!event.exception || event.type) {\n    return false;\n  }\n\n  return isSampled(replay.getOptions().errorSampleRate);\n}\n","import { getLocationHref } from '@sentry/core';\nimport type { ErrorEvent, Event } from '@sentry/core';\n\nimport type { ReplayContainer } from '../types';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { isErrorEvent } from '../util/eventUtils';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\n\ntype BeforeSendEventCallback = (event: Event) => void;\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nexport function handleBeforeSendEvent(replay: ReplayContainer): BeforeSendEventCallback {\n  return (event: Event) => {\n    if (!replay.isEnabled() || !isErrorEvent(event)) {\n      return;\n    }\n\n    handleHydrationError(replay, event);\n  };\n}\n\nfunction handleHydrationError(replay: ReplayContainer, event: ErrorEvent): void {\n  const exceptionValue = event.exception?.values?.[0]?.value;\n  if (typeof exceptionValue !== 'string') {\n    return;\n  }\n\n  if (\n    // Only matches errors in production builds of react-dom\n    // Example https://reactjs.org/docs/error-decoder.html?invariant=423\n    // With newer React versions, the messages changed to a different website https://react.dev/errors/418\n    exceptionValue.match(\n      /(reactjs\\.org\\/docs\\/error-decoder\\.html\\?invariant=|react\\.dev\\/errors\\/)(418|419|422|423|425)/,\n    ) ||\n    // Development builds of react-dom\n    // Error 1: Hydration failed because the initial UI does not match what was rendered on the server.\n    // Error 2: Text content does not match server-rendered HTML. Warning: Text content did not match.\n    exceptionValue.match(/(does not match server-rendered HTML|Hydration failed because)/i)\n  ) {\n    const breadcrumb = createBreadcrumb({\n      category: 'replay.hydrate-error',\n      data: {\n        url: getLocationHref(),\n      },\n    });\n    addBreadcrumbEvent(replay, breadcrumb);\n  }\n}\n","import { setTimeout } from '@sentry-internal/browser-utils';\nimport type { ErrorEvent, Event, TransactionEvent, TransportMakeRequestResponse } from '@sentry/core';\n\nimport type { ReplayContainer } from '../types';\nimport { isErrorEvent, isTransactionEvent } from '../util/eventUtils';\n\ntype AfterSendEventCallback = (event: Event, sendResponse: TransportMakeRequestResponse) => void;\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nexport function handleAfterSendEvent(replay: ReplayContainer): AfterSendEventCallback {\n  return (event: Event, sendResponse: TransportMakeRequestResponse) => {\n    if (!replay.isEnabled() || (!isErrorEvent(event) && !isTransactionEvent(event))) {\n      return;\n    }\n\n    const statusCode = sendResponse?.statusCode;\n\n    // We only want to do stuff on successful error sending, otherwise you get error replays without errors attached\n    // If not using the base transport, we allow `undefined` response (as a custom transport may not implement this correctly yet)\n    // If we do use the base transport, we skip if we encountered an non-OK status code\n    if (!statusCode || statusCode < 200 || statusCode >= 300) {\n      return;\n    }\n\n    if (isTransactionEvent(event)) {\n      handleTransactionEvent(replay, event);\n      return;\n    }\n\n    handleErrorEvent(replay, event);\n  };\n}\n\nfunction handleTransactionEvent(replay: ReplayContainer, event: TransactionEvent): void {\n  const replayContext = replay.getContext();\n\n  // Collect traceIds in _context regardless of `recordingMode`\n  // In error mode, _context gets cleared on every checkout\n  // We limit to max. 100 transactions linked\n  if (event.contexts?.trace?.trace_id && replayContext.traceIds.size < 100) {\n    replayContext.traceIds.add(event.contexts.trace.trace_id);\n  }\n}\n\nfunction handleErrorEvent(replay: ReplayContainer, event: ErrorEvent): void {\n  const replayContext = replay.getContext();\n\n  // Add error to list of errorIds of replay. This is ok to do even if not\n  // sampled because context will get reset at next checkout.\n  // XXX: There is also a race condition where it's possible to capture an\n  // error to Sentry before Replay SDK has loaded, but response returns after\n  // it was loaded, and this gets called.\n  // We limit to max. 100 errors linked\n  if (event.event_id && replayContext.errorIds.size < 100) {\n    replayContext.errorIds.add(event.event_id);\n  }\n\n  // If error event is tagged with replay id it means it was sampled (when in buffer mode)\n  // Need to be very careful that this does not cause an infinite loop\n  if (replay.recordingMode !== 'buffer' || !event.tags || !event.tags.replayId) {\n    return;\n  }\n\n  const { beforeErrorSampling } = replay.getOptions();\n  if (typeof beforeErrorSampling === 'function' && !beforeErrorSampling(event)) {\n    return;\n  }\n\n  setTimeout(async () => {\n    try {\n      // Capture current event buffer as new replay\n      await replay.sendBufferedReplayOrFlush();\n    } catch (err) {\n      replay.handleException(err);\n    }\n  });\n}\n","import {\n  addClsInstrumentationHandler,\n  addFidInstrumentationHandler,\n  addInpInstrumentationHandler,\n  addLcpInstrumentationHandler,\n  addPerformanceInstrumentationHandler,\n} from '@sentry-internal/browser-utils';\nimport type { ReplayContainer } from '../types';\nimport {\n  getCumulativeLayoutShift,\n  getFirstInputDelay,\n  getInteractionToNextPaint,\n  getLargestContentfulPaint,\n  webVitalHandler,\n} from '../util/createPerformanceEntries';\n\n/**\n * Sets up a PerformanceObserver to listen to all performance entry types.\n * Returns a callback to stop observing.\n */\nexport function setupPerformanceObserver(replay: ReplayContainer): () => void {\n  function addPerformanceEntry(entry: PerformanceEntry): void {\n    // It is possible for entries to come up multiple times\n    if (!replay.performanceEntries.includes(entry)) {\n      replay.performanceEntries.push(entry);\n    }\n  }\n\n  function onEntries({ entries }: { entries: PerformanceEntry[] }): void {\n    entries.forEach(addPerformanceEntry);\n  }\n\n  const clearCallbacks: (() => void)[] = [];\n\n  (['navigation', 'paint', 'resource'] as const).forEach(type => {\n    clearCallbacks.push(addPerformanceInstrumentationHandler(type, onEntries));\n  });\n\n  clearCallbacks.push(\n    addLcpInstrumentationHandler(webVitalHandler(getLargestContentfulPaint, replay)),\n    addClsInstrumentationHandler(webVitalHandler(getCumulativeLayoutShift, replay)),\n    addFidInstrumentationHandler(webVitalHandler(getFirstInputDelay, replay)),\n    addInpInstrumentationHandler(webVitalHandler(getInteractionToNextPaint, replay)),\n  );\n\n  // A callback to cleanup all handlers\n  return () => {\n    clearCallbacks.forEach(clearCallback => clearCallback());\n  };\n}\n","import type { ReplayIntegrationPrivacyOptions } from '../types';\n\ntype GetPrivacyOptions = Required<Omit<ReplayIntegrationPrivacyOptions, 'maskFn'>>;\n\ninterface GetPrivacyReturn {\n  maskTextSelector: string;\n  unmaskTextSelector: string;\n  blockSelector: string;\n  unblockSelector: string;\n  ignoreSelector: string;\n\n  blockClass?: RegExp;\n  maskTextClass?: RegExp;\n}\n\nfunction getOption(selectors: string[], defaultSelectors: string[]): string {\n  return [\n    ...selectors,\n    // sentry defaults\n    ...defaultSelectors,\n  ].join(',');\n}\n\n/**\n * Returns privacy related configuration for use in rrweb\n */\nexport function getPrivacyOptions({ mask, unmask, block, unblock, ignore }: GetPrivacyOptions): GetPrivacyReturn {\n  const defaultBlockedElements = ['base', 'iframe[srcdoc]:not([src])'];\n\n  const maskSelector = getOption(mask, ['.sentry-mask', '[data-sentry-mask]']);\n  const unmaskSelector = getOption(unmask, []);\n\n  const options: GetPrivacyReturn = {\n    // We are making the decision to make text and input selectors the same\n    maskTextSelector: maskSelector,\n    unmaskTextSelector: unmaskSelector,\n\n    blockSelector: getOption(block, ['.sentry-block', '[data-sentry-block]', ...defaultBlockedElements]),\n    unblockSelector: getOption(unblock, []),\n    ignoreSelector: getOption(ignore, ['.sentry-ignore', '[data-sentry-ignore]', 'input[type=\"file\"]']),\n  };\n\n  return options;\n}\n","import type { getPrivacyOptions } from './getPrivacyOptions';\n\ninterface MaskAttributeParams {\n  maskAttributes: string[];\n  maskAllText: boolean;\n  privacyOptions: ReturnType<typeof getPrivacyOptions>;\n  key: string;\n  value: string;\n  el: HTMLElement;\n}\n\n/**\n * Masks an attribute if necessary, otherwise return attribute value as-is.\n */\nexport function maskAttribute({\n  el,\n  key,\n  maskAttributes,\n  maskAllText,\n  privacyOptions,\n  value,\n}: MaskAttributeParams): string {\n  // We only mask attributes if `maskAllText` is true\n  if (!maskAllText) {\n    return value;\n  }\n\n  // unmaskTextSelector takes precedence\n  if (privacyOptions.unmaskTextSelector && el.matches(privacyOptions.unmaskTextSelector)) {\n    return value;\n  }\n\n  if (\n    maskAttributes.includes(key) ||\n    // Need to mask `value` attribute for `<input>` if it's a button-like\n    // type\n    (key === 'value' && el.tagName === 'INPUT' && ['submit', 'button'].includes(el.getAttribute('type') || ''))\n  ) {\n    return value.replace(/[\\S]/g, '*');\n  }\n\n  return value;\n}\n","import { getClient } from '@sentry/core';\nimport type { replayIntegration } from '../integration';\n\n/**\n * This is a small utility to get a type-safe instance of the Replay integration.\n */\nexport function getReplay(): ReturnType<typeof replayIntegration> | undefined {\n  const client = getClient();\n  return client?.getIntegrationByName<ReturnType<typeof replayIntegration>>('Replay');\n}\n","import type { CanvasManagerInterface, CanvasManagerOptions } from '@sentry-internal/replay';\nimport { CanvasManager } from '@sentry-internal/rrweb';\nimport { defineIntegration } from '@sentry/core';\nimport type { Integration, IntegrationFn } from '@sentry/core';\n\ninterface ReplayCanvasIntegration extends Integration {\n  snapshot: (canvasElement?: HTMLCanvasElement) => Promise<void>;\n}\n\ninterface ReplayCanvasOptions {\n  enableManualSnapshot?: boolean;\n  maxCanvasSize?: [width: number, height: number];\n  quality: 'low' | 'medium' | 'high';\n}\n\ntype GetCanvasManager = (options: CanvasManagerOptions) => CanvasManagerInterface;\nexport interface ReplayCanvasIntegrationOptions {\n  enableManualSnapshot?: boolean;\n  maxCanvasSize?: number;\n  recordCanvas: true;\n  getCanvasManager: GetCanvasManager;\n  sampling: {\n    canvas: number;\n  };\n  dataURLOptions: {\n    type: string;\n    quality: number;\n  };\n}\n\nconst CANVAS_QUALITY = {\n  low: {\n    sampling: {\n      canvas: 1,\n    },\n    dataURLOptions: {\n      type: 'image/webp',\n      quality: 0.25,\n    },\n  },\n  medium: {\n    sampling: {\n      canvas: 2,\n    },\n    dataURLOptions: {\n      type: 'image/webp',\n      quality: 0.4,\n    },\n  },\n  high: {\n    sampling: {\n      canvas: 4,\n    },\n    dataURLOptions: {\n      type: 'image/webp',\n      quality: 0.5,\n    },\n  },\n};\n\nconst INTEGRATION_NAME = 'ReplayCanvas';\nconst DEFAULT_MAX_CANVAS_SIZE = 1280;\n\n/** Exported only for type safe tests. */\nexport const _replayCanvasIntegration = ((options: Partial<ReplayCanvasOptions> = {}) => {\n  const [maxCanvasWidth, maxCanvasHeight] = options.maxCanvasSize || [];\n  const _canvasOptions = {\n    quality: options.quality || 'medium',\n    enableManualSnapshot: options.enableManualSnapshot,\n    maxCanvasSize: [\n      maxCanvasWidth ? Math.min(maxCanvasWidth, DEFAULT_MAX_CANVAS_SIZE) : DEFAULT_MAX_CANVAS_SIZE,\n      maxCanvasHeight ? Math.min(maxCanvasHeight, DEFAULT_MAX_CANVAS_SIZE) : DEFAULT_MAX_CANVAS_SIZE,\n    ] as [number, number],\n  };\n\n  let canvasManagerResolve: (value: CanvasManager) => void;\n  const _canvasManager: Promise<CanvasManager> = new Promise(resolve => (canvasManagerResolve = resolve));\n\n  return {\n    name: INTEGRATION_NAME,\n    getOptions(): ReplayCanvasIntegrationOptions {\n      const { quality, enableManualSnapshot, maxCanvasSize } = _canvasOptions;\n\n      return {\n        enableManualSnapshot,\n        recordCanvas: true,\n        getCanvasManager: (getCanvasManagerOptions: CanvasManagerOptions) => {\n          const manager = new CanvasManager({\n            ...getCanvasManagerOptions,\n            enableManualSnapshot,\n            maxCanvasSize,\n            errorHandler: (err: unknown) => {\n              try {\n                if (typeof err === 'object') {\n                  (err as Error & { __rrweb__?: boolean }).__rrweb__ = true;\n                }\n              } catch (error) {\n                // ignore errors here\n                // this can happen if the error is frozen or does not allow mutation for other reasons\n              }\n            },\n          });\n          canvasManagerResolve(manager);\n          return manager;\n        },\n        ...(CANVAS_QUALITY[quality || 'medium'] || CANVAS_QUALITY.medium),\n      };\n    },\n    async snapshot(canvasElement?: HTMLCanvasElement) {\n      const canvasManager = await _canvasManager;\n      canvasManager.snapshot(canvasElement);\n    },\n  };\n}) satisfies IntegrationFn<ReplayCanvasIntegration>;\n\n/**\n * Add this in addition to `replayIntegration()` to enable canvas recording.\n */\nexport const replayCanvasIntegration = defineIntegration(\n  _replayCanvasIntegration,\n) as IntegrationFn<ReplayCanvasIntegration>;\n","import { buildFeedbackIntegration } from '@sentry-internal/feedback';\nimport { lazyLoadIntegration } from './utils/lazyLoadIntegration';\n\n/**\n * An integration to add user feedback to your application,\n * while loading most of the code lazily only when it's needed.\n */\nexport const feedbackAsyncIntegration = buildFeedbackIntegration({\n  lazyLoadIntegration,\n});\n","import {\n  buildFeedbackIntegration,\n  feedbackModalIntegration,\n  feedbackScreenshotIntegration,\n} from '@sentry-internal/feedback';\n\n/** Add a widget to capture user feedback to your application. */\nexport const feedbackSyncIntegration = buildFeedbackIntegration({\n  getModalIntegration: () => feedbackModalIntegration,\n  getScreenshotIntegration: () => feedbackScreenshotIntegration,\n});\n","/* eslint-disable max-lines */\nimport {\n  addHistoryInstrumentationHandler,\n  addPerformanceEntries,\n  registerInpInteractionListener,\n  startTrackingINP,\n  startTrackingInteractions,\n  startTrackingLongAnimationFrames,\n  startTrackingLongTasks,\n  startTrackingWebVitals,\n} from '@sentry-internal/browser-utils';\nimport type { Client, IntegrationFn, Span, StartSpanOptions, TransactionSource } from '@sentry/core';\nimport {\n  GLOBAL_OBJ,\n  SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON,\n  SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n  SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n  TRACING_DEFAULTS,\n  addNonEnumerableProperty,\n  browserPerformanceTimeOrigin,\n  generateTraceId,\n  getClient,\n  getCurrentScope,\n  getDynamicSamplingContextFromSpan,\n  getIsolationScope,\n  getLocationHref,\n  logger,\n  propagationContextFromHeaders,\n  registerSpanErrorInstrumentation,\n  spanIsSampled,\n  spanToJSON,\n  startIdleSpan,\n} from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\nimport { registerBackgroundTabDetection } from './backgroundtab';\nimport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests } from './request';\n\nexport const BROWSER_TRACING_INTEGRATION_ID = 'BrowserTracing';\n\ninterface RouteInfo {\n  name: string | undefined;\n  source: TransactionSource | undefined;\n}\n\n/** Options for Browser Tracing integration */\nexport interface BrowserTracingOptions {\n  /**\n   * The time that has to pass without any span being created.\n   * If this time is exceeded, the idle span will finish.\n   *\n   * Default: 1000 (ms)\n   */\n  idleTimeout: number;\n\n  /**\n   * The max. time an idle span may run.\n   * If this time is exceeded, the idle span will finish no matter what.\n   *\n   * Default: 30000 (ms)\n   */\n  finalTimeout: number;\n\n  /**\n   The max. time an idle span may run.\n   * If this time is exceeded, the idle span will finish no matter what.\n   *\n   * Default: 15000 (ms)\n   */\n  childSpanTimeout: number;\n\n  /**\n   * If a span should be created on page load.\n   * If this is set to `false`, this integration will not start the default page load span.\n   * Default: true\n   */\n  instrumentPageLoad: boolean;\n\n  /**\n   * If a span should be created on navigation (history change).\n   * If this is set to `false`, this integration will not start the default navigation spans.\n   * Default: true\n   */\n  instrumentNavigation: boolean;\n\n  /**\n   * Flag spans where tabs moved to background with \"cancelled\". Browser background tab timing is\n   * not suited towards doing precise measurements of operations. By default, we recommend that this option\n   * be enabled as background transactions can mess up your statistics in nondeterministic ways.\n   *\n   * Default: true\n   */\n  markBackgroundSpan: boolean;\n\n  /**\n   * If true, Sentry will capture long tasks and add them to the corresponding transaction.\n   *\n   * Default: true\n   */\n  enableLongTask: boolean;\n\n  /**\n   * If true, Sentry will capture long animation frames and add them to the corresponding transaction.\n   *\n   * Default: false\n   */\n  enableLongAnimationFrame: boolean;\n\n  /**\n   * If true, Sentry will capture first input delay and add it to the corresponding transaction.\n   *\n   * Default: true\n   */\n  enableInp: boolean;\n\n  /**\n   * Flag to disable patching all together for fetch requests.\n   *\n   * Default: true\n   */\n  traceFetch: boolean;\n\n  /**\n   * Flag to disable patching all together for xhr requests.\n   *\n   * Default: true\n   */\n  traceXHR: boolean;\n\n  /**\n   * Flag to disable tracking of long-lived streams, like server-sent events (SSE) via fetch.\n   * Do not enable this in case you have live streams or very long running streams.\n   *\n   * Default: false\n   */\n  trackFetchStreamPerformance: boolean;\n\n  /**\n   * If true, Sentry will capture http timings and add them to the corresponding http spans.\n   *\n   * Default: true\n   */\n  enableHTTPTimings: boolean;\n\n  /**\n   * _experiments allows the user to send options to define how this integration works.\n   *\n   * Default: undefined\n   */\n  _experiments: Partial<{\n    enableInteractions: boolean;\n    enableStandaloneClsSpans: boolean;\n  }>;\n\n  /**\n   * A callback which is called before a span for a pageload or navigation is started.\n   * It receives the options passed to `startSpan`, and expects to return an updated options object.\n   */\n  beforeStartSpan?: (options: StartSpanOptions) => StartSpanOptions;\n\n  /**\n   * This function will be called before creating a span for a request with the given url.\n   * Return false if you don't want a span for the given url.\n   *\n   * Default: (url: string) => true\n   */\n  shouldCreateSpanForRequest?(this: void, url: string): boolean;\n}\n\nconst DEFAULT_BROWSER_TRACING_OPTIONS: BrowserTracingOptions = {\n  ...TRACING_DEFAULTS,\n  instrumentNavigation: true,\n  instrumentPageLoad: true,\n  markBackgroundSpan: true,\n  enableLongTask: true,\n  enableLongAnimationFrame: true,\n  enableInp: true,\n  _experiments: {},\n  ...defaultRequestInstrumentationOptions,\n};\n\n/**\n * The Browser Tracing integration automatically instruments browser pageload/navigation\n * actions as transactions, and captures requests, metrics and errors as spans.\n *\n * The integration can be configured with a variety of options, and can be extended to use\n * any routing library.\n *\n * We explicitly export the proper type here, as this has to be extended in some cases.\n */\nexport const browserTracingIntegration = ((_options: Partial<BrowserTracingOptions> = {}) => {\n  /**\n   * This is just a small wrapper that makes `document` optional.\n   * We want to be extra-safe and always check that this exists, to ensure weird environments do not blow up.\n   */\n  const optionalWindowDocument = WINDOW.document as (typeof WINDOW)['document'] | undefined;\n\n  registerSpanErrorInstrumentation();\n\n  const {\n    enableInp,\n    enableLongTask,\n    enableLongAnimationFrame,\n    _experiments: { enableInteractions, enableStandaloneClsSpans },\n    beforeStartSpan,\n    idleTimeout,\n    finalTimeout,\n    childSpanTimeout,\n    markBackgroundSpan,\n    traceFetch,\n    traceXHR,\n    trackFetchStreamPerformance,\n    shouldCreateSpanForRequest,\n    enableHTTPTimings,\n    instrumentPageLoad,\n    instrumentNavigation,\n  } = {\n    ...DEFAULT_BROWSER_TRACING_OPTIONS,\n    ..._options,\n  };\n\n  const _collectWebVitals = startTrackingWebVitals({ recordClsStandaloneSpans: enableStandaloneClsSpans || false });\n\n  if (enableInp) {\n    startTrackingINP();\n  }\n\n  if (\n    enableLongAnimationFrame &&\n    GLOBAL_OBJ.PerformanceObserver &&\n    PerformanceObserver.supportedEntryTypes &&\n    PerformanceObserver.supportedEntryTypes.includes('long-animation-frame')\n  ) {\n    startTrackingLongAnimationFrames();\n  } else if (enableLongTask) {\n    startTrackingLongTasks();\n  }\n\n  if (enableInteractions) {\n    startTrackingInteractions();\n  }\n\n  const latestRoute: RouteInfo = {\n    name: undefined,\n    source: undefined,\n  };\n\n  /** Create routing idle transaction. */\n  function _createRouteSpan(client: Client, startSpanOptions: StartSpanOptions): void {\n    const isPageloadTransaction = startSpanOptions.op === 'pageload';\n\n    const finalStartSpanOptions: StartSpanOptions = beforeStartSpan\n      ? beforeStartSpan(startSpanOptions)\n      : startSpanOptions;\n\n    const attributes = finalStartSpanOptions.attributes || {};\n\n    // If `finalStartSpanOptions.name` is different than `startSpanOptions.name`\n    // it is because `beforeStartSpan` set a custom name. Therefore we set the source to 'custom'.\n    if (startSpanOptions.name !== finalStartSpanOptions.name) {\n      attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] = 'custom';\n      finalStartSpanOptions.attributes = attributes;\n    }\n\n    latestRoute.name = finalStartSpanOptions.name;\n    latestRoute.source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n    const idleSpan = startIdleSpan(finalStartSpanOptions, {\n      idleTimeout,\n      finalTimeout,\n      childSpanTimeout,\n      // should wait for finish signal if it's a pageload transaction\n      disableAutoFinish: isPageloadTransaction,\n      beforeSpanEnd: span => {\n        _collectWebVitals();\n        addPerformanceEntries(span, { recordClsOnPageloadSpan: !enableStandaloneClsSpans });\n        setActiveIdleSpan(client, undefined);\n\n        // A trace should stay consistent over the entire timespan of one route - even after the pageload/navigation ended.\n        // Only when another navigation happens, we want to create a new trace.\n        // This way, e.g. errors that occur after the pageload span ended are still associated to the pageload trace.\n        const scope = getCurrentScope();\n        const oldPropagationContext = scope.getPropagationContext();\n\n        scope.setPropagationContext({\n          ...oldPropagationContext,\n          traceId: idleSpan.spanContext().traceId,\n          sampled: spanIsSampled(idleSpan),\n          dsc: getDynamicSamplingContextFromSpan(span),\n        });\n      },\n    });\n    setActiveIdleSpan(client, idleSpan);\n\n    function emitFinish(): void {\n      if (optionalWindowDocument && ['interactive', 'complete'].includes(optionalWindowDocument.readyState)) {\n        client.emit('idleSpanEnableAutoFinish', idleSpan);\n      }\n    }\n\n    if (isPageloadTransaction && optionalWindowDocument) {\n      optionalWindowDocument.addEventListener('readystatechange', () => {\n        emitFinish();\n      });\n\n      emitFinish();\n    }\n  }\n\n  return {\n    name: BROWSER_TRACING_INTEGRATION_ID,\n    afterAllSetup(client) {\n      let startingUrl: string | undefined = getLocationHref();\n\n      function maybeEndActiveSpan(): void {\n        const activeSpan = getActiveIdleSpan(client);\n\n        if (activeSpan && !spanToJSON(activeSpan).timestamp) {\n          DEBUG_BUILD && logger.log(`[Tracing] Finishing current active span with op: ${spanToJSON(activeSpan).op}`);\n          // If there's an open active span, we need to finish it before creating an new one.\n          activeSpan.end();\n        }\n      }\n\n      client.on('startNavigationSpan', startSpanOptions => {\n        if (getClient() !== client) {\n          return;\n        }\n\n        maybeEndActiveSpan();\n\n        getIsolationScope().setPropagationContext({ traceId: generateTraceId(), sampleRand: Math.random() });\n        getCurrentScope().setPropagationContext({ traceId: generateTraceId(), sampleRand: Math.random() });\n\n        _createRouteSpan(client, {\n          op: 'navigation',\n          ...startSpanOptions,\n        });\n      });\n\n      client.on('startPageLoadSpan', (startSpanOptions, traceOptions = {}) => {\n        if (getClient() !== client) {\n          return;\n        }\n        maybeEndActiveSpan();\n\n        const sentryTrace = traceOptions.sentryTrace || getMetaContent('sentry-trace');\n        const baggage = traceOptions.baggage || getMetaContent('baggage');\n\n        const propagationContext = propagationContextFromHeaders(sentryTrace, baggage);\n        getCurrentScope().setPropagationContext(propagationContext);\n\n        _createRouteSpan(client, {\n          op: 'pageload',\n          ...startSpanOptions,\n        });\n      });\n\n      if (WINDOW.location) {\n        if (instrumentPageLoad) {\n          const origin = browserPerformanceTimeOrigin();\n          startBrowserTracingPageLoadSpan(client, {\n            name: WINDOW.location.pathname,\n            // pageload should always start at timeOrigin (and needs to be in s, not ms)\n            startTime: origin ? origin / 1000 : undefined,\n            attributes: {\n              [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n              [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser',\n            },\n          });\n        }\n\n        if (instrumentNavigation) {\n          addHistoryInstrumentationHandler(({ to, from }) => {\n            /**\n             * This early return is there to account for some cases where a navigation transaction starts right after\n             * long-running pageload. We make sure that if `from` is undefined and a valid `startingURL` exists, we don't\n             * create an uneccessary navigation transaction.\n             *\n             * This was hard to duplicate, but this behavior stopped as soon as this fix was applied. This issue might also\n             * only be caused in certain development environments where the usage of a hot module reloader is causing\n             * errors.\n             */\n            if (from === undefined && startingUrl?.indexOf(to) !== -1) {\n              startingUrl = undefined;\n              return;\n            }\n\n            if (from !== to) {\n              startingUrl = undefined;\n              startBrowserTracingNavigationSpan(client, {\n                name: WINDOW.location.pathname,\n                attributes: {\n                  [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n                  [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.browser',\n                },\n              });\n            }\n          });\n        }\n      }\n\n      if (markBackgroundSpan) {\n        registerBackgroundTabDetection();\n      }\n\n      if (enableInteractions) {\n        registerInteractionListener(client, idleTimeout, finalTimeout, childSpanTimeout, latestRoute);\n      }\n\n      if (enableInp) {\n        registerInpInteractionListener();\n      }\n\n      instrumentOutgoingRequests(client, {\n        traceFetch,\n        traceXHR,\n        trackFetchStreamPerformance,\n        tracePropagationTargets: client.getOptions().tracePropagationTargets,\n        shouldCreateSpanForRequest,\n        enableHTTPTimings,\n      });\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * Manually start a page load span.\n * This will only do something if a browser tracing integration integration has been setup.\n *\n * If you provide a custom `traceOptions` object, it will be used to continue the trace\n * instead of the default behavior, which is to look it up on the <meta> tags.\n */\nexport function startBrowserTracingPageLoadSpan(\n  client: Client,\n  spanOptions: StartSpanOptions,\n  traceOptions?: { sentryTrace?: string | undefined; baggage?: string | undefined },\n): Span | undefined {\n  client.emit('startPageLoadSpan', spanOptions, traceOptions);\n  getCurrentScope().setTransactionName(spanOptions.name);\n\n  return getActiveIdleSpan(client);\n}\n\n/**\n * Manually start a navigation span.\n * This will only do something if a browser tracing integration has been setup.\n */\nexport function startBrowserTracingNavigationSpan(client: Client, spanOptions: StartSpanOptions): Span | undefined {\n  client.emit('startNavigationSpan', spanOptions);\n\n  getCurrentScope().setTransactionName(spanOptions.name);\n\n  return getActiveIdleSpan(client);\n}\n\n/** Returns the value of a meta tag */\nexport function getMetaContent(metaName: string): string | undefined {\n  /**\n   * This is just a small wrapper that makes `document` optional.\n   * We want to be extra-safe and always check that this exists, to ensure weird environments do not blow up.\n   */\n  const optionalWindowDocument = WINDOW.document as (typeof WINDOW)['document'] | undefined;\n\n  const metaTag = optionalWindowDocument?.querySelector(`meta[name=${metaName}]`);\n  return metaTag?.getAttribute('content') || undefined;\n}\n\n/** Start listener for interaction transactions */\nfunction registerInteractionListener(\n  client: Client,\n  idleTimeout: BrowserTracingOptions['idleTimeout'],\n  finalTimeout: BrowserTracingOptions['finalTimeout'],\n  childSpanTimeout: BrowserTracingOptions['childSpanTimeout'],\n  latestRoute: RouteInfo,\n): void {\n  /**\n   * This is just a small wrapper that makes `document` optional.\n   * We want to be extra-safe and always check that this exists, to ensure weird environments do not blow up.\n   */\n  const optionalWindowDocument = WINDOW.document as (typeof WINDOW)['document'] | undefined;\n\n  let inflightInteractionSpan: Span | undefined;\n  const registerInteractionTransaction = (): void => {\n    const op = 'ui.action.click';\n\n    const activeIdleSpan = getActiveIdleSpan(client);\n    if (activeIdleSpan) {\n      const currentRootSpanOp = spanToJSON(activeIdleSpan).op;\n      if (['navigation', 'pageload'].includes(currentRootSpanOp as string)) {\n        DEBUG_BUILD &&\n          logger.warn(`[Tracing] Did not create ${op} span because a pageload or navigation span is in progress.`);\n        return undefined;\n      }\n    }\n\n    if (inflightInteractionSpan) {\n      inflightInteractionSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, 'interactionInterrupted');\n      inflightInteractionSpan.end();\n      inflightInteractionSpan = undefined;\n    }\n\n    if (!latestRoute.name) {\n      DEBUG_BUILD && logger.warn(`[Tracing] Did not create ${op} transaction because _latestRouteName is missing.`);\n      return undefined;\n    }\n\n    inflightInteractionSpan = startIdleSpan(\n      {\n        name: latestRoute.name,\n        op,\n        attributes: {\n          [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: latestRoute.source || 'url',\n        },\n      },\n      {\n        idleTimeout,\n        finalTimeout,\n        childSpanTimeout,\n      },\n    );\n  };\n\n  if (optionalWindowDocument) {\n    addEventListener('click', registerInteractionTransaction, { once: false, capture: true });\n  }\n}\n\n// We store the active idle span on the client object, so we can access it from exported functions\nconst ACTIVE_IDLE_SPAN_PROPERTY = '_sentry_idleSpan';\nfunction getActiveIdleSpan(client: Client): Span | undefined {\n  return (client as { [ACTIVE_IDLE_SPAN_PROPERTY]?: Span })[ACTIVE_IDLE_SPAN_PROPERTY];\n}\n\nfunction setActiveIdleSpan(client: Client, span: Span | undefined): void {\n  addNonEnumerableProperty(client, ACTIVE_IDLE_SPAN_PROPERTY, span);\n}\n","import { SPAN_STATUS_ERROR, getActiveSpan, getRootSpan, logger, spanToJSON } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\n\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\nexport function registerBackgroundTabDetection(): void {\n  if (WINDOW.document) {\n    WINDOW.document.addEventListener('visibilitychange', () => {\n      const activeSpan = getActiveSpan();\n      if (!activeSpan) {\n        return;\n      }\n\n      const rootSpan = getRootSpan(activeSpan);\n\n      if (WINDOW.document.hidden && rootSpan) {\n        const cancelledStatus = 'cancelled';\n\n        const { op, status } = spanToJSON(rootSpan);\n\n        if (DEBUG_BUILD) {\n          logger.log(`[Tracing] Transaction: ${cancelledStatus} -> since tab moved to the background, op: ${op}`);\n        }\n\n        // We should not set status if it is already set, this prevent important statuses like\n        // error or data loss from being overwritten on transaction.\n        if (!status) {\n          rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message: cancelledStatus });\n        }\n\n        rootSpan.setAttribute('sentry.cancellation_reason', 'document.hidden');\n        rootSpan.end();\n      }\n    });\n  } else {\n    DEBUG_BUILD && logger.warn('[Tracing] Could not set up background tab detection due to lack of global document');\n  }\n}\n","import { defineIntegration, getActiveSpan, getRootSpan } from '@sentry/core';\nimport { logger } from '@sentry/core';\nimport type { EventEnvelope, IntegrationFn, Profile, Span } from '@sentry/core';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { startProfileForSpan } from './startProfileForSpan';\nimport type { ProfiledEvent } from './utils';\nimport { isAutomatedPageLoadSpan, shouldProfileSpan } from './utils';\nimport {\n  addProfilesToEnvelope,\n  createProfilingEvent,\n  findProfiledTransactionsFromEnvelope,\n  getActiveProfilesCount,\n  takeProfileFromGlobalCache,\n} from './utils';\n\nconst INTEGRATION_NAME = 'BrowserProfiling';\n\nconst _browserProfilingIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      const activeSpan = getActiveSpan();\n      const rootSpan = activeSpan && getRootSpan(activeSpan);\n\n      if (rootSpan && isAutomatedPageLoadSpan(rootSpan)) {\n        if (shouldProfileSpan(rootSpan)) {\n          startProfileForSpan(rootSpan);\n        }\n      }\n\n      client.on('spanStart', (span: Span) => {\n        if (span === getRootSpan(span) && shouldProfileSpan(span)) {\n          startProfileForSpan(span);\n        }\n      });\n\n      client.on('beforeEnvelope', (envelope): void => {\n        // if not profiles are in queue, there is nothing to add to the envelope.\n        if (!getActiveProfilesCount()) {\n          return;\n        }\n\n        const profiledTransactionEvents = findProfiledTransactionsFromEnvelope(envelope);\n        if (!profiledTransactionEvents.length) {\n          return;\n        }\n\n        const profilesToAddToEnvelope: Profile[] = [];\n\n        for (const profiledTransaction of profiledTransactionEvents) {\n          const context = profiledTransaction?.contexts;\n          const profile_id = context?.profile?.['profile_id'];\n          const start_timestamp = context?.profile?.['start_timestamp'];\n\n          if (typeof profile_id !== 'string') {\n            DEBUG_BUILD && logger.log('[Profiling] cannot find profile for a span without a profile context');\n            continue;\n          }\n\n          if (!profile_id) {\n            DEBUG_BUILD && logger.log('[Profiling] cannot find profile for a span without a profile context');\n            continue;\n          }\n\n          // Remove the profile from the span context before sending, relay will take care of the rest.\n          if (context?.profile) {\n            delete context.profile;\n          }\n\n          const profile = takeProfileFromGlobalCache(profile_id);\n          if (!profile) {\n            DEBUG_BUILD && logger.log(`[Profiling] Could not retrieve profile for span: ${profile_id}`);\n            continue;\n          }\n\n          const profileEvent = createProfilingEvent(\n            profile_id,\n            start_timestamp as number | undefined,\n            profile,\n            profiledTransaction as ProfiledEvent,\n          );\n          if (profileEvent) {\n            profilesToAddToEnvelope.push(profileEvent);\n          }\n        }\n\n        addProfilesToEnvelope(envelope as EventEnvelope, profilesToAddToEnvelope);\n      });\n    },\n  };\n}) satisfies IntegrationFn;\n\nexport const browserProfilingIntegration = defineIntegration(_browserProfilingIntegration);\n","import { getCurrentScope, spanToJSON } from '@sentry/core';\nimport { logger, timestampInSeconds, uuid4 } from '@sentry/core';\nimport type { Span } from '@sentry/core';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\nimport type { JSSelfProfile } from './jsSelfProfiling';\nimport { MAX_PROFILE_DURATION_MS, addProfileToGlobalCache, isAutomatedPageLoadSpan, startJSSelfProfile } from './utils';\n\n/**\n * Wraps startTransaction and stopTransaction with profiling related logic.\n * startProfileForTransaction is called after the call to startTransaction in order to avoid our own code from\n * being profiled. Because of that same reason, stopProfiling is called before the call to stopTransaction.\n */\nexport function startProfileForSpan(span: Span): void {\n  // Start the profiler and get the profiler instance.\n  let startTimestamp: number | undefined;\n  if (isAutomatedPageLoadSpan(span)) {\n    startTimestamp = timestampInSeconds() * 1000;\n  }\n\n  const profiler = startJSSelfProfile();\n\n  // We failed to construct the profiler, so we skip.\n  // No need to log anything as this has already been logged in startProfile.\n  if (!profiler) {\n    return;\n  }\n\n  if (DEBUG_BUILD) {\n    logger.log(`[Profiling] started profiling span: ${spanToJSON(span).description}`);\n  }\n\n  // We create \"unique\" span names to avoid concurrent spans with same names\n  // from being ignored by the profiler. From here on, only this span name should be used when\n  // calling the profiler methods. Note: we log the original name to the user to avoid confusion.\n  const profileId = uuid4();\n\n  // A couple of important things to note here:\n  // `CpuProfilerBindings.stopProfiling` will be scheduled to run in 30seconds in order to exceed max profile duration.\n  // Whichever of the two (span.finish/timeout) is first to run, the profiling will be stopped and the gathered profile\n  // will be processed when the original span is finished. Since onProfileHandler can be invoked multiple times in the\n  // event of an error or user mistake (calling span.finish multiple times), it is important that the behavior of onProfileHandler\n  // is idempotent as we do not want any timings or profiles to be overridden by the last call to onProfileHandler.\n  // After the original finish method is called, the event will be reported through the integration and delegated to transport.\n  const processedProfile: JSSelfProfile | null = null;\n\n  getCurrentScope().setContext('profile', {\n    profile_id: profileId,\n    start_timestamp: startTimestamp,\n  });\n\n  /**\n   * Idempotent handler for profile stop\n   */\n  async function onProfileHandler(): Promise<void> {\n    // Check if the profile exists and return it the behavior has to be idempotent as users may call span.finish multiple times.\n    if (!span) {\n      return;\n    }\n    // Satisfy the type checker, but profiler will always be defined here.\n    if (!profiler) {\n      return;\n    }\n    if (processedProfile) {\n      if (DEBUG_BUILD) {\n        logger.log('[Profiling] profile for:', spanToJSON(span).description, 'already exists, returning early');\n      }\n      return;\n    }\n\n    return profiler\n      .stop()\n      .then((profile: JSSelfProfile): void => {\n        if (maxDurationTimeoutID) {\n          WINDOW.clearTimeout(maxDurationTimeoutID);\n          maxDurationTimeoutID = undefined;\n        }\n\n        if (DEBUG_BUILD) {\n          logger.log(`[Profiling] stopped profiling of span: ${spanToJSON(span).description}`);\n        }\n\n        // In case of an overlapping span, stopProfiling may return null and silently ignore the overlapping profile.\n        if (!profile) {\n          if (DEBUG_BUILD) {\n            logger.log(\n              `[Profiling] profiler returned null profile for: ${spanToJSON(span).description}`,\n              'this may indicate an overlapping span or a call to stopProfiling with a profile title that was never started',\n            );\n          }\n          return;\n        }\n\n        addProfileToGlobalCache(profileId, profile);\n      })\n      .catch(error => {\n        if (DEBUG_BUILD) {\n          logger.log('[Profiling] error while stopping profiler:', error);\n        }\n      });\n  }\n\n  // Enqueue a timeout to prevent profiles from running over max duration.\n  let maxDurationTimeoutID: number | undefined = WINDOW.setTimeout(() => {\n    if (DEBUG_BUILD) {\n      logger.log('[Profiling] max profile duration elapsed, stopping profiling for:', spanToJSON(span).description);\n    }\n    // If the timeout exceeds, we want to stop profiling, but not finish the span\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    onProfileHandler();\n  }, MAX_PROFILE_DURATION_MS);\n\n  // We need to reference the original end call to avoid creating an infinite loop\n  const originalEnd = span.end.bind(span);\n\n  /**\n   * Wraps span `end()` with profiling related logic.\n   * startProfiling is called after the call to spanStart in order to avoid our own code from\n   * being profiled. Because of that same reason, stopProfiling is called before the call to spanEnd.\n   */\n  function profilingWrappedSpanEnd(): Span {\n    if (!span) {\n      return originalEnd();\n    }\n    // onProfileHandler should always return the same profile even if this is called multiple times.\n    // Always call onProfileHandler to ensure stopProfiling is called and the timeout is cleared.\n    void onProfileHandler().then(\n      () => {\n        originalEnd();\n      },\n      () => {\n        // If onProfileHandler fails, we still want to call the original finish method.\n        originalEnd();\n      },\n    );\n\n    return span;\n  }\n\n  span.end = profilingWrappedSpanEnd;\n}\n","import { getNativeImplementation } from '@sentry-internal/browser-utils';\nimport type { Client, Envelope, Event, IntegrationFn } from '@sentry/core';\nimport { defineIntegration, logger, serializeEnvelope } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { WINDOW } from '../helpers';\n\nexport type SpotlightConnectionOptions = {\n  /**\n   * Set this if the Spotlight Sidecar is not running on localhost:8969\n   * By default, the Url is set to http://localhost:8969/stream\n   */\n  sidecarUrl?: string;\n};\n\nexport const INTEGRATION_NAME = 'SpotlightBrowser';\n\nconst _spotlightIntegration = ((options: Partial<SpotlightConnectionOptions> = {}) => {\n  const sidecarUrl = options.sidecarUrl || 'http://localhost:8969/stream';\n\n  return {\n    name: INTEGRATION_NAME,\n    setup: () => {\n      DEBUG_BUILD && logger.log('Using Sidecar URL', sidecarUrl);\n    },\n    // We don't want to send interaction transactions/root spans created from\n    // clicks within Spotlight to Sentry. Neither do we want them to be sent to\n    // spotlight.\n    processEvent: event => (isSpotlightInteraction(event) ? null : event),\n    afterAllSetup: (client: Client) => {\n      setupSidecarForwarding(client, sidecarUrl);\n    },\n  };\n}) satisfies IntegrationFn;\n\nfunction setupSidecarForwarding(client: Client, sidecarUrl: string): void {\n  const makeFetch: typeof WINDOW.fetch | undefined = getNativeImplementation('fetch');\n  let failCount = 0;\n\n  client.on('beforeEnvelope', (envelope: Envelope) => {\n    if (failCount > 3) {\n      logger.warn('[Spotlight] Disabled Sentry -> Spotlight integration due to too many failed requests:', failCount);\n      return;\n    }\n\n    makeFetch(sidecarUrl, {\n      method: 'POST',\n      body: serializeEnvelope(envelope),\n      headers: {\n        'Content-Type': 'application/x-sentry-envelope',\n      },\n      mode: 'cors',\n    }).then(\n      res => {\n        if (res.status >= 200 && res.status < 400) {\n          // Reset failed requests counter on success\n          failCount = 0;\n        }\n      },\n      err => {\n        failCount++;\n        logger.error(\n          \"Sentry SDK can't connect to Sidecar is it running? See: https://spotlightjs.com/sidecar/npx/\",\n          err,\n        );\n      },\n    );\n  });\n}\n\n/**\n * Use this integration to send errors and transactions to Spotlight.\n *\n * Learn more about spotlight at https://spotlightjs.com\n */\nexport const spotlightBrowserIntegration = defineIntegration(_spotlightIntegration);\n\n/**\n * Flags if the event is a transaction created from an interaction with the spotlight UI.\n */\nexport function isSpotlightInteraction(event: Event): boolean {\n  return Boolean(\n    event.type === 'transaction' &&\n      event.spans &&\n      event.contexts &&\n      event.contexts.trace &&\n      event.contexts.trace.op === 'ui.action.click' &&\n      event.spans.some(({ description }) => description?.includes('#sentry-spotlight')),\n  );\n}\n","import type { Client, Event, EventHint, Integration, IntegrationFn } from '@sentry/core';\n\nimport { defineIntegration } from '@sentry/core';\nimport { copyFlagsFromScopeToEvent, insertFlagToScope } from '../../utils/featureFlags';\n\nexport interface FeatureFlagsIntegration extends Integration {\n  addFeatureFlag: (name: string, value: unknown) => void;\n}\n\n/**\n * Sentry integration for buffering feature flags manually with an API, and\n * capturing them on error events. We recommend you do this on each flag\n * evaluation. Flags are buffered per Sentry scope and limited to 100 per event.\n *\n * See the [feature flag documentation](https://develop.sentry.dev/sdk/expected-features/#feature-flags) for more information.\n *\n * @example\n * ```\n * import * as Sentry from '@sentry/browser';\n * import { type FeatureFlagsIntegration } from '@sentry/browser';\n *\n * // Setup\n * Sentry.init(..., integrations: [Sentry.featureFlagsIntegration()])\n *\n * // Verify\n * const flagsIntegration = Sentry.getClient()?.getIntegrationByName<FeatureFlagsIntegration>('FeatureFlags');\n * if (flagsIntegration) {\n *   flagsIntegration.addFeatureFlag('my-flag', true);\n * } else {\n *   // check your setup\n * }\n * Sentry.captureException(Exception('broke')); // 'my-flag' should be captured to this Sentry event.\n * ```\n */\nexport const featureFlagsIntegration = defineIntegration(() => {\n  return {\n    name: 'FeatureFlags',\n\n    processEvent(event: Event, _hint: EventHint, _client: Client): Event {\n      return copyFlagsFromScopeToEvent(event);\n    },\n\n    addFeatureFlag(name: string, value: unknown): void {\n      insertFlagToScope(name, value);\n    },\n  };\n}) as IntegrationFn<FeatureFlagsIntegration>;\n","import type { Client, Event, EventHint, IntegrationFn } from '@sentry/core';\nimport type { LDContext, LDEvaluationDetail, LDInspectionFlagUsedHandler } from './types';\n\nimport { defineIntegration } from '@sentry/core';\nimport { copyFlagsFromScopeToEvent, insertFlagToScope } from '../../../utils/featureFlags';\n\n/**\n * Sentry integration for capturing feature flags from LaunchDarkly.\n *\n * See the [feature flag documentation](https://develop.sentry.dev/sdk/expected-features/#feature-flags) for more information.\n *\n * @example\n * ```\n * import * as Sentry from '@sentry/browser';\n * import {launchDarklyIntegration, buildLaunchDarklyFlagUsedInspector} from '@sentry/browser';\n * import * as LaunchDarkly from 'launchdarkly-js-client-sdk';\n *\n * Sentry.init(..., integrations: [launchDarklyIntegration()])\n * const ldClient = LaunchDarkly.initialize(..., {inspectors: [buildLaunchDarklyFlagUsedHandler()]});\n * ```\n */\nexport const launchDarklyIntegration = defineIntegration(() => {\n  return {\n    name: 'LaunchDarkly',\n\n    processEvent(event: Event, _hint: EventHint, _client: Client): Event {\n      return copyFlagsFromScopeToEvent(event);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * LaunchDarkly hook that listens for flag evaluations and updates the `flags`\n * context in our Sentry scope. This needs to be registered as an\n * 'inspector' in LaunchDarkly initialize() options, separately from\n * `launchDarklyIntegration`. Both are needed to collect feature flags on error.\n */\nexport function buildLaunchDarklyFlagUsedHandler(): LDInspectionFlagUsedHandler {\n  return {\n    name: 'sentry-flag-auditor',\n    type: 'flag-used',\n\n    synchronous: true,\n\n    /**\n     * Handle a flag evaluation by storing its name and value on the current scope.\n     */\n    method: (flagKey: string, flagDetail: LDEvaluationDetail, _context: LDContext) => {\n      insertFlagToScope(flagKey, flagDetail.value);\n    },\n  };\n}\n","/**\n * OpenFeature integration.\n *\n * Add the openFeatureIntegration() function call to your integration lists.\n * Add the integration hook to your OpenFeature object.\n *   - OpenFeature.getClient().addHooks(new OpenFeatureIntegrationHook());\n */\nimport type { Client, Event, EventHint, IntegrationFn } from '@sentry/core';\nimport type { EvaluationDetails, HookContext, HookHints, JsonValue, OpenFeatureHook } from './types';\n\nimport { defineIntegration } from '@sentry/core';\nimport { copyFlagsFromScopeToEvent, insertFlagToScope } from '../../../utils/featureFlags';\n\nexport const openFeatureIntegration = defineIntegration(() => {\n  return {\n    name: 'OpenFeature',\n\n    processEvent(event: Event, _hint: EventHint, _client: Client): Event {\n      return copyFlagsFromScopeToEvent(event);\n    },\n  };\n}) satisfies IntegrationFn;\n\n/**\n * OpenFeature Hook class implementation.\n */\nexport class OpenFeatureIntegrationHook implements OpenFeatureHook {\n  /**\n   * Successful evaluation result.\n   */\n  public after(_hookContext: Readonly<HookContext<JsonValue>>, evaluationDetails: EvaluationDetails<JsonValue>): void {\n    insertFlagToScope(evaluationDetails.flagKey, evaluationDetails.value);\n  }\n\n  /**\n   * On error evaluation result.\n   */\n  public error(hookContext: Readonly<HookContext<JsonValue>>, _error: unknown, _hookHints?: HookHints): void {\n    insertFlagToScope(hookContext.flagKey, hookContext.defaultValue);\n  }\n}\n","import type { Client, Event, EventHint, IntegrationFn } from '@sentry/core';\n\nimport { defineIntegration, fill, logger } from '@sentry/core';\nimport { DEBUG_BUILD } from '../../../debug-build';\nimport { copyFlagsFromScopeToEvent, insertFlagToScope } from '../../../utils/featureFlags';\nimport type { UnleashClient, UnleashClientClass } from './types';\n\ntype UnleashIntegrationOptions = {\n  featureFlagClientClass: UnleashClientClass;\n};\n\n/**\n * Sentry integration for capturing feature flag evaluations from the Unleash SDK.\n *\n * See the [feature flag documentation](https://develop.sentry.dev/sdk/expected-features/#feature-flags) for more information.\n *\n * @example\n * ```\n * import { UnleashClient } from 'unleash-proxy-client';\n * import * as Sentry from '@sentry/browser';\n *\n * Sentry.init({\n *   dsn: '___PUBLIC_DSN___',\n *   integrations: [Sentry.unleashIntegration({featureFlagClientClass: UnleashClient})],\n * });\n *\n * const unleash = new UnleashClient(...);\n * unleash.start();\n *\n * unleash.isEnabled('my-feature');\n * Sentry.captureException(new Error('something went wrong'));\n * ```\n */\nexport const unleashIntegration = defineIntegration(\n  ({ featureFlagClientClass: unleashClientClass }: UnleashIntegrationOptions) => {\n    return {\n      name: 'Unleash',\n\n      processEvent(event: Event, _hint: EventHint, _client: Client): Event {\n        return copyFlagsFromScopeToEvent(event);\n      },\n\n      setupOnce() {\n        const unleashClientPrototype = unleashClientClass.prototype as UnleashClient;\n        fill(unleashClientPrototype, 'isEnabled', _wrappedIsEnabled);\n      },\n    };\n  },\n) satisfies IntegrationFn;\n\n/**\n * Wraps the UnleashClient.isEnabled method to capture feature flag evaluations. Its only side effect is writing to Sentry scope.\n *\n * This wrapper is safe for all isEnabled signatures. If the signature does not match (this: UnleashClient, toggleName: string, ...args: unknown[]) => boolean,\n * we log an error and return the original result.\n *\n * @param original - The original method.\n * @returns Wrapped method. Results should match the original.\n */\nfunction _wrappedIsEnabled(\n  original: (this: UnleashClient, ...args: unknown[]) => unknown,\n): (this: UnleashClient, ...args: unknown[]) => unknown {\n  return function (this: UnleashClient, ...args: unknown[]): unknown {\n    const toggleName = args[0];\n    const result = original.apply(this, args);\n\n    if (typeof toggleName === 'string' && typeof result === 'boolean') {\n      insertFlagToScope(toggleName, result);\n    } else if (DEBUG_BUILD) {\n      logger.error(\n        `[Feature Flags] UnleashClient.isEnabled does not match expected signature. arg0: ${toggleName} (${typeof toggleName}), result: ${result} (${typeof result})`,\n      );\n    }\n    return result;\n  };\n}\n","import type { Client, Event, EventHint, IntegrationFn } from '@sentry/core';\n\nimport { defineIntegration } from '@sentry/core';\nimport { copyFlagsFromScopeToEvent, insertFlagToScope } from '../../../utils/featureFlags';\nimport type { FeatureGate, StatsigClient } from './types';\n\n/**\n * Sentry integration for capturing feature flag evaluations from the Statsig js-client SDK.\n *\n * See the [feature flag documentation](https://develop.sentry.dev/sdk/expected-features/#feature-flags) for more information.\n *\n * @example\n * ```\n * import { StatsigClient } from '@statsig/js-client';\n * import * as Sentry from '@sentry/browser';\n *\n * const statsigClient = new StatsigClient();\n *\n * Sentry.init({\n *   dsn: '___PUBLIC_DSN___',\n *   integrations: [Sentry.statsigIntegration({featureFlagClient: statsigClient})],\n * });\n *\n * await statsigClient.initializeAsync();  // or statsigClient.initializeSync();\n *\n * const result = statsigClient.checkGate('my-feature-gate');\n * Sentry.captureException(new Error('something went wrong'));\n * ```\n */\nexport const statsigIntegration = defineIntegration(\n  ({ featureFlagClient: statsigClient }: { featureFlagClient: StatsigClient }) => {\n    return {\n      name: 'Statsig',\n\n      processEvent(event: Event, _hint: EventHint, _client: Client): Event {\n        return copyFlagsFromScopeToEvent(event);\n      },\n\n      setup() {\n        statsigClient.on('gate_evaluation', (event: { gate: FeatureGate }) => {\n          insertFlagToScope(event.gate.name, event.gate.value);\n        });\n      },\n    };\n  },\n) satisfies IntegrationFn;\n",null,"/*!\n\tautosize 4.0.2\n\tlicense: MIT\n\thttp://www.jacklmoore.com/autosize\n*/\n(function (global, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(['module', 'exports'], factory);\n\t} else if (typeof exports !== \"undefined\") {\n\t\tfactory(module, exports);\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod, mod.exports);\n\t\tglobal.autosize = mod.exports;\n\t}\n})(this, function (module, exports) {\n\t'use strict';\n\n\tvar map = typeof Map === \"function\" ? new Map() : function () {\n\t\tvar keys = [];\n\t\tvar values = [];\n\n\t\treturn {\n\t\t\thas: function has(key) {\n\t\t\t\treturn keys.indexOf(key) > -1;\n\t\t\t},\n\t\t\tget: function get(key) {\n\t\t\t\treturn values[keys.indexOf(key)];\n\t\t\t},\n\t\t\tset: function set(key, value) {\n\t\t\t\tif (keys.indexOf(key) === -1) {\n\t\t\t\t\tkeys.push(key);\n\t\t\t\t\tvalues.push(value);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelete: function _delete(key) {\n\t\t\t\tvar index = keys.indexOf(key);\n\t\t\t\tif (index > -1) {\n\t\t\t\t\tkeys.splice(index, 1);\n\t\t\t\t\tvalues.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}();\n\n\tvar createEvent = function createEvent(name) {\n\t\treturn new Event(name, { bubbles: true });\n\t};\n\ttry {\n\t\tnew Event('test');\n\t} catch (e) {\n\t\t// IE does not support `new Event()`\n\t\tcreateEvent = function createEvent(name) {\n\t\t\tvar evt = document.createEvent('Event');\n\t\t\tevt.initEvent(name, true, false);\n\t\t\treturn evt;\n\t\t};\n\t}\n\n\tfunction assign(ta) {\n\t\tif (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || map.has(ta)) return;\n\n\t\tvar heightOffset = null;\n\t\tvar clientWidth = null;\n\t\tvar cachedHeight = null;\n\n\t\tfunction init() {\n\t\t\tvar style = window.getComputedStyle(ta, null);\n\n\t\t\tif (style.resize === 'vertical') {\n\t\t\t\tta.style.resize = 'none';\n\t\t\t} else if (style.resize === 'both') {\n\t\t\t\tta.style.resize = 'horizontal';\n\t\t\t}\n\n\t\t\tif (style.boxSizing === 'content-box') {\n\t\t\t\theightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));\n\t\t\t} else {\n\t\t\t\theightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);\n\t\t\t}\n\t\t\t// Fix when a textarea is not on document body and heightOffset is Not a Number\n\t\t\tif (isNaN(heightOffset)) {\n\t\t\t\theightOffset = 0;\n\t\t\t}\n\n\t\t\tupdate();\n\t\t}\n\n\t\tfunction changeOverflow(value) {\n\t\t\t{\n\t\t\t\t// Chrome/Safari-specific fix:\n\t\t\t\t// When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space\n\t\t\t\t// made available by removing the scrollbar. The following forces the necessary text reflow.\n\t\t\t\tvar width = ta.style.width;\n\t\t\t\tta.style.width = '0px';\n\t\t\t\t// Force reflow:\n\t\t\t\t/* jshint ignore:start */\n\t\t\t\tta.offsetWidth;\n\t\t\t\t/* jshint ignore:end */\n\t\t\t\tta.style.width = width;\n\t\t\t}\n\n\t\t\tta.style.overflowY = value;\n\t\t}\n\n\t\tfunction getParentOverflows(el) {\n\t\t\tvar arr = [];\n\n\t\t\twhile (el && el.parentNode && el.parentNode instanceof Element) {\n\t\t\t\tif (el.parentNode.scrollTop) {\n\t\t\t\t\tarr.push({\n\t\t\t\t\t\tnode: el.parentNode,\n\t\t\t\t\t\tscrollTop: el.parentNode.scrollTop\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tel = el.parentNode;\n\t\t\t}\n\n\t\t\treturn arr;\n\t\t}\n\n\t\tfunction resize() {\n\t\t\tif (ta.scrollHeight === 0) {\n\t\t\t\t// If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar overflows = getParentOverflows(ta);\n\t\t\tvar docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240)\n\n\t\t\tta.style.height = '';\n\t\t\tta.style.height = ta.scrollHeight + heightOffset + 'px';\n\n\t\t\t// used to check if an update is actually necessary on window.resize\n\t\t\tclientWidth = ta.clientWidth;\n\n\t\t\t// prevents scroll-position jumping\n\t\t\toverflows.forEach(function (el) {\n\t\t\t\tel.node.scrollTop = el.scrollTop;\n\t\t\t});\n\n\t\t\tif (docTop) {\n\t\t\t\tdocument.documentElement.scrollTop = docTop;\n\t\t\t}\n\t\t}\n\n\t\tfunction update() {\n\t\t\tresize();\n\n\t\t\tvar styleHeight = Math.round(parseFloat(ta.style.height));\n\t\t\tvar computed = window.getComputedStyle(ta, null);\n\n\t\t\t// Using offsetHeight as a replacement for computed.height in IE, because IE does not account use of border-box\n\t\t\tvar actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(computed.height)) : ta.offsetHeight;\n\n\t\t\t// The actual height not matching the style height (set via the resize method) indicates that \n\t\t\t// the max-height has been exceeded, in which case the overflow should be allowed.\n\t\t\tif (actualHeight < styleHeight) {\n\t\t\t\tif (computed.overflowY === 'hidden') {\n\t\t\t\t\tchangeOverflow('scroll');\n\t\t\t\t\tresize();\n\t\t\t\t\tactualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands.\n\t\t\t\tif (computed.overflowY !== 'hidden') {\n\t\t\t\t\tchangeOverflow('hidden');\n\t\t\t\t\tresize();\n\t\t\t\t\tactualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (cachedHeight !== actualHeight) {\n\t\t\t\tcachedHeight = actualHeight;\n\t\t\t\tvar evt = createEvent('autosize:resized');\n\t\t\t\ttry {\n\t\t\t\t\tta.dispatchEvent(evt);\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Firefox will throw an error on dispatchEvent for a detached element\n\t\t\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=889376\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar pageResize = function pageResize() {\n\t\t\tif (ta.clientWidth !== clientWidth) {\n\t\t\t\tupdate();\n\t\t\t}\n\t\t};\n\n\t\tvar destroy = function (style) {\n\t\t\twindow.removeEventListener('resize', pageResize, false);\n\t\t\tta.removeEventListener('input', update, false);\n\t\t\tta.removeEventListener('keyup', update, false);\n\t\t\tta.removeEventListener('autosize:destroy', destroy, false);\n\t\t\tta.removeEventListener('autosize:update', update, false);\n\n\t\t\tObject.keys(style).forEach(function (key) {\n\t\t\t\tta.style[key] = style[key];\n\t\t\t});\n\n\t\t\tmap.delete(ta);\n\t\t}.bind(ta, {\n\t\t\theight: ta.style.height,\n\t\t\tresize: ta.style.resize,\n\t\t\toverflowY: ta.style.overflowY,\n\t\t\toverflowX: ta.style.overflowX,\n\t\t\twordWrap: ta.style.wordWrap\n\t\t});\n\n\t\tta.addEventListener('autosize:destroy', destroy, false);\n\n\t\t// IE9 does not fire onpropertychange or oninput for deletions,\n\t\t// so binding to onkeyup to catch most of those events.\n\t\t// There is no way that I know of to detect something like 'cut' in IE9.\n\t\tif ('onpropertychange' in ta && 'oninput' in ta) {\n\t\t\tta.addEventListener('keyup', update, false);\n\t\t}\n\n\t\twindow.addEventListener('resize', pageResize, false);\n\t\tta.addEventListener('input', update, false);\n\t\tta.addEventListener('autosize:update', update, false);\n\t\tta.style.overflowX = 'hidden';\n\t\tta.style.wordWrap = 'break-word';\n\n\t\tmap.set(ta, {\n\t\t\tdestroy: destroy,\n\t\t\tupdate: update\n\t\t});\n\n\t\tinit();\n\t}\n\n\tfunction destroy(ta) {\n\t\tvar methods = map.get(ta);\n\t\tif (methods) {\n\t\t\tmethods.destroy();\n\t\t}\n\t}\n\n\tfunction update(ta) {\n\t\tvar methods = map.get(ta);\n\t\tif (methods) {\n\t\t\tmethods.update();\n\t\t}\n\t}\n\n\tvar autosize = null;\n\n\t// Do nothing in Node.js environment and IE8 (or lower)\n\tif (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {\n\t\tautosize = function autosize(el) {\n\t\t\treturn el;\n\t\t};\n\t\tautosize.destroy = function (el) {\n\t\t\treturn el;\n\t\t};\n\t\tautosize.update = function (el) {\n\t\t\treturn el;\n\t\t};\n\t} else {\n\t\tautosize = function autosize(el, options) {\n\t\t\tif (el) {\n\t\t\t\tArray.prototype.forEach.call(el.length ? el : [el], function (x) {\n\t\t\t\t\treturn assign(x, options);\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn el;\n\t\t};\n\t\tautosize.destroy = function (el) {\n\t\t\tif (el) {\n\t\t\t\tArray.prototype.forEach.call(el.length ? el : [el], destroy);\n\t\t\t}\n\t\t\treturn el;\n\t\t};\n\t\tautosize.update = function (el) {\n\t\t\tif (el) {\n\t\t\t\tArray.prototype.forEach.call(el.length ? el : [el], update);\n\t\t\t}\n\t\t\treturn el;\n\t\t};\n\t}\n\n\texports.default = autosize;\n\tmodule.exports = exports['default'];\n});",null,null,null,null,"import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { element } from 'ember-element-helper';\nimport { or } from 'ember-truth-helpers';\nimport { concat } from '@ember/helper';\nimport basicDropdownTriggerModifier from '../modifiers/basic-dropdown-trigger.ts';\nimport { on } from '@ember/modifier';\nimport { fn } from '@ember/helper';\nimport type { Dropdown } from './basic-dropdown';\nimport type { HorizontalPosition, VerticalPosition } from '../types.ts';\n\nexport interface BasicDropdownTriggerSignature {\n  Element: HTMLElement | HTMLButtonElement;\n  Args: {\n    dropdown?: Dropdown;\n    eventType?: 'click' | 'mousedown';\n    stopPropagation?: boolean;\n    vPosition?: VerticalPosition | null;\n    hPosition?: HorizontalPosition | null;\n    defaultClass?: string;\n    renderInPlace?: boolean;\n    htmlTag?: keyof HTMLElementTagNameMap | undefined;\n    onBlur?: (dropdown?: Dropdown, event?: FocusEvent) => void;\n    onClick?: (dropdown?: Dropdown, event?: MouseEvent) => void;\n    onFocus?: (dropdown?: Dropdown, event?: FocusEvent) => void;\n    onFocusIn?: (dropdown?: Dropdown, event?: FocusEvent) => void;\n    onFocusOut?: (dropdown?: Dropdown, event?: FocusEvent) => void;\n    onKeyDown?: (dropdown?: Dropdown, event?: KeyboardEvent) => void;\n    onMouseDown?: (dropdown?: Dropdown, event?: MouseEvent) => void;\n    onMouseEnter?: (dropdown?: Dropdown, event?: MouseEvent) => void;\n    onMouseLeave?: (dropdown?: Dropdown, event?: MouseEvent) => void;\n    onTouchEnd?: (dropdown?: Dropdown, event?: TouchEvent) => void;\n  };\n  Blocks: {\n    default: [];\n  };\n}\n\nexport default class BasicDropdownTrigger extends Component<BasicDropdownTriggerSignature> {\n  // Actions\n  /**\n   * Allows similar behavior to `ember-composable-helpers`' `optional` helper.\n   * Avoids adding extra dependencies.\n   * Can be removed when the template `V1` compatibility event handlers are removed.\n   *\n   * @see https://github.com/cibernox/ember-basic-dropdown/issues/498\n   * @memberof BasicDropdownContent\n   */\n  noop(): void {}\n\n  @action\n  disableDocumentTextSelect(disable: boolean) {\n    if (disable) {\n      document.body.classList.add('ember-basic-dropdown-text-select-disabled');\n    } else {\n      document.body.classList.remove(\n        'ember-basic-dropdown-text-select-disabled',\n      );\n    }\n  }\n\n  <template>\n    {{#if @dropdown}}\n      {{#let (element (or @htmlTag \"div\")) as |OptionalTag|}}\n        {{! template-lint-disable no-pointer-down-event-binding }}\n        <OptionalTag\n          class=\"ember-basic-dropdown-trigger\n            {{if @renderInPlace ' ember-basic-dropdown-trigger--in-place'}}\n            {{if\n              @hPosition\n              (concat ' ember-basic-dropdown-trigger--' @hPosition)\n            }}\n            {{if\n              @vPosition\n              (concat ' ember-basic-dropdown-trigger--' @vPosition)\n            }}\n            {{@defaultClass}}\"\n          {{basicDropdownTriggerModifier\n            dropdown=@dropdown\n            eventType=@eventType\n            stopPropagation=@stopPropagation\n          }}\n          tabindex={{unless @dropdown.disabled \"0\"}}\n          ...attributes\n          {{on \"mousedown\" (fn this.disableDocumentTextSelect true)}}\n          {{on \"mouseup\" (fn this.disableDocumentTextSelect false)}}\n          {{! V1 compatibility - See #498 }}\n          {{on \"keydown\" (fn (or @onKeyDown this.noop) @dropdown)}}\n          {{on \"mousedown\" (fn (or @onMouseDown this.noop) @dropdown)}}\n          {{on \"touchend\" (fn (or @onTouchEnd this.noop) @dropdown)}}\n          {{on \"click\" (fn (or @onClick this.noop) @dropdown)}}\n          {{on \"mouseenter\" (fn (or @onMouseEnter this.noop) @dropdown)}}\n          {{on \"mouseleave\" (fn (or @onMouseLeave this.noop) @dropdown)}}\n          {{on \"focus\" (fn (or @onFocus this.noop) @dropdown)}}\n          {{on \"blur\" (fn (or @onBlur this.noop) @dropdown)}}\n          {{on \"focusin\" (fn (or @onFocusIn this.noop) @dropdown)}}\n          {{on \"focusout\" (fn (or @onFocusOut this.noop) @dropdown)}}\n        >\n          {{yield}}\n        </OptionalTag>\n      {{/let}}\n    {{/if}}\n  </template>\n}\n","import Modifier from 'ember-modifier';\nimport type { ArgsFor, PositionalArgs, NamedArgs } from 'ember-modifier';\nimport { assert } from '@ember/debug';\nimport { action } from '@ember/object';\nimport { isDestroyed, registerDestructor } from '@ember/destroyable';\nimport hasMoved from '../utils/has-moved.ts';\nimport type Owner from '@ember/owner';\nimport type { Dropdown } from '../types.ts';\n\ninterface Signature {\n  Element: HTMLElement;\n  Args: {\n    Named: {\n      dropdown: Dropdown;\n      eventType?: 'click' | 'mousedown' | undefined;\n      stopPropagation?: boolean | undefined;\n      [named: string]: unknown;\n    };\n    Positional: unknown[];\n  };\n}\n\nexport default class DropdownTriggerModifier extends Modifier<Signature> {\n  didSetup = false;\n\n  triggerElement: HTMLElement | undefined;\n\n  toggleIsBeingHandledByTouchEvents: boolean = false;\n  touchMoveEvent: TouchEvent | undefined;\n\n  dropdown?: Dropdown;\n  desiredEventType!: string;\n  stopPropagation: boolean | undefined;\n\n  constructor(owner: Owner, args: ArgsFor<Signature>) {\n    super(owner, args);\n    registerDestructor(this, cleanup);\n  }\n\n  override modify(\n    element: HTMLElement,\n    positional: PositionalArgs<Signature>,\n    named: NamedArgs<Signature>,\n  ): void {\n    assert('must be provided dropdown object', named.dropdown);\n    this.dropdown = named.dropdown;\n    this.desiredEventType = named.eventType ?? 'click';\n    this.stopPropagation = named.stopPropagation;\n\n    if (!this.didSetup) {\n      this.setup(element);\n      this.didSetup = true;\n    }\n    this.update(element, positional, named);\n  }\n\n  setup(element: HTMLElement) {\n    // Keep a reference to the element for cleanup\n    this.triggerElement = element;\n    if (this.dropdown?.actions?.registerTriggerElement) {\n      this.dropdown.actions.registerTriggerElement(element);\n    }\n\n    if (!element.getAttribute('role')) element.setAttribute('role', 'button');\n\n    element.addEventListener('click', this.handleMouseEventBound);\n    element.addEventListener('mousedown', this.handleMouseEventBound);\n    element.addEventListener('keydown', this.handleKeyDownBound);\n    element.addEventListener('touchstart', this.handleTouchStartBound, {\n      passive: false,\n    });\n    element.addEventListener('touchend', this.handleTouchEndBound);\n  }\n\n  update(\n    element: HTMLElement,\n    _positional: PositionalArgs<Signature>,\n    named: NamedArgs<Signature>,\n  ) {\n    const { dropdown } = named;\n\n    element.setAttribute('data-ebd-id', `${dropdown.uniqueId}-trigger`);\n\n    if (element.getAttribute('aria-owns') === null) {\n      element.setAttribute(\n        'aria-owns',\n        `ember-basic-dropdown-content-${dropdown.uniqueId}`,\n      );\n    }\n\n    if (element.getAttribute('aria-controls') === null) {\n      element.setAttribute(\n        'aria-controls',\n        `ember-basic-dropdown-content-${dropdown.uniqueId}`,\n      );\n    }\n\n    element.setAttribute('aria-expanded', dropdown.isOpen ? 'true' : 'false');\n    element.setAttribute('aria-disabled', dropdown.disabled ? 'true' : 'false');\n  }\n\n  @action\n  handleMouseEvent(e: MouseEvent): void {\n    if (typeof document === 'undefined') return;\n    const { dropdown, desiredEventType, stopPropagation } = this;\n\n    if (isDestroyed(this) || !dropdown || dropdown.disabled) return;\n\n    const eventType = e.type;\n    const notLeftClick = e.button !== 0;\n    if (eventType !== desiredEventType || notLeftClick) return;\n\n    if (stopPropagation) e.stopPropagation();\n\n    if (this.toggleIsBeingHandledByTouchEvents) {\n      // Some devises have both touchscreen & mouse, and they are not mutually exclusive\n      // In those cases the touchdown handler is fired first, and it sets a flag to\n      // short-circuit the mouseup so the component is not opened and immediately closed.\n      this.toggleIsBeingHandledByTouchEvents = false;\n      return;\n    }\n    dropdown.actions.toggle(e);\n  }\n\n  @action\n  handleKeyDown(e: KeyboardEvent): void {\n    const disabled = this.dropdown?.disabled,\n      actions = this.dropdown?.actions;\n\n    if (disabled || !actions) return;\n    if (e.keyCode === 13) {\n      // Enter\n      actions.toggle(e);\n    } else if (e.keyCode === 32) {\n      // Space\n      e.preventDefault(); // prevents the space to trigger a scroll page-next\n      actions.toggle(e);\n    } else if (e.keyCode === 27) {\n      actions.close(e);\n    }\n  }\n\n  @action\n  handleTouchStart(): void {\n    document.addEventListener('touchmove', this.touchMoveHandlerBound);\n    if (this.triggerElement?.getRootNode() instanceof ShadowRoot) {\n      (this.triggerElement?.getRootNode() as HTMLElement).addEventListener(\n        'touchmove',\n        this.touchMoveHandlerBound,\n      );\n    }\n  }\n\n  @action\n  handleTouchEnd(e: TouchEvent): void {\n    this.toggleIsBeingHandledByTouchEvents = true;\n    const disabled = this.dropdown?.disabled,\n      actions = this.dropdown?.actions;\n\n    if ((e && e.defaultPrevented) || disabled || !actions) {\n      return;\n    }\n    if (!hasMoved(e, this.touchMoveEvent)) {\n      actions.toggle(e);\n    }\n    this.touchMoveEvent = undefined;\n    document.removeEventListener('touchmove', this.touchMoveHandlerBound);\n    // This next three lines are stolen from hammertime. This prevents the default\n    // behaviour of the touchend, but synthetically trigger a focus and a (delayed) click\n    // to simulate natural behaviour.\n    const target = (e.composedPath?.()[0] || e.target) as HTMLElement;\n    if (target !== null) {\n      target.focus();\n    }\n    setTimeout(function () {\n      if (!e.target) {\n        return;\n      }\n      try {\n        const event = document.createEvent('MouseEvents');\n        event.initMouseEvent(\n          'click',\n          true,\n          true,\n          window,\n          0,\n          0,\n          0,\n          0,\n          0,\n          false,\n          false,\n          false,\n          false,\n          0,\n          null,\n        );\n        e.target.dispatchEvent(event);\n      } catch {\n        const event = new Event('click');\n        e.target.dispatchEvent(event);\n      }\n    }, 0);\n    e.preventDefault();\n  }\n\n  @action\n  _touchMoveHandler(e: TouchEvent): void {\n    this.touchMoveEvent = e;\n    document.removeEventListener('touchmove', this.touchMoveHandlerBound);\n\n    if (this.triggerElement?.getRootNode() instanceof ShadowRoot) {\n      (this.triggerElement?.getRootNode() as HTMLElement).removeEventListener(\n        'touchmove',\n        this.touchMoveHandlerBound,\n      );\n    }\n  }\n\n  handleMouseEventBound = (e: MouseEvent) => this.handleMouseEvent(e);\n  handleKeyDownBound = (e: KeyboardEvent) => this.handleKeyDown(e);\n  handleTouchStartBound = () => this.handleTouchStart();\n  handleTouchEndBound = (e: TouchEvent) => this.handleTouchEnd(e);\n  touchMoveHandlerBound = (e: TouchEvent) => this._touchMoveHandler(e);\n}\n\nfunction cleanup(instance: DropdownTriggerModifier) {\n  const { triggerElement } = instance;\n  if (triggerElement) {\n    if (typeof document !== 'undefined')\n      document.removeEventListener('touchmove', instance.touchMoveHandlerBound);\n\n    if (triggerElement?.getRootNode() instanceof ShadowRoot) {\n      (triggerElement?.getRootNode() as HTMLElement).removeEventListener(\n        'touchmove',\n        instance.touchMoveHandlerBound,\n      );\n    }\n\n    triggerElement.removeEventListener('click', instance.handleMouseEventBound);\n    triggerElement.removeEventListener(\n      'mousedown',\n      instance.handleMouseEventBound,\n    );\n    triggerElement.removeEventListener('keydown', instance.handleKeyDownBound);\n    triggerElement.removeEventListener(\n      'touchstart',\n      instance.handleTouchStartBound,\n    );\n    triggerElement.removeEventListener(\n      'touchend',\n      instance.handleTouchEndBound,\n    );\n  }\n}\n","interface ScrollDeltas {\n  deltaX: number;\n  deltaY: number;\n}\ninterface ScrollInformation {\n  element: Element;\n  scrollLeft: number;\n  scrollTop: number;\n}\n\n/**\n * Mode that expresses the deltas in pixels.\n */\nexport const DOM_DELTA_PIXEL = 0;\n/**\n * Mode that expresses the deltas in lines.\n *\n * This only happens in Firefox for Windows.\n *\n * Reference: https://stackoverflow.com/a/37474225\n */\nexport const DOM_DELTA_LINE = 1;\n/**\n * Mode that expresses the deltas in pages.\n *\n * This only happens in Firefox for Windows with\n * a custom OS setting activated.\n *\n * Reference: https://stackoverflow.com/a/37474225\n */\nexport const DOM_DELTA_PAGE = 2;\n\n/**\n * Number of lines per page considered for\n * DOM_DELTA_PAGE.\n *\n */\nexport const LINES_PER_PAGE = 3;\n\nlet scrollLineHeight: number | undefined = undefined;\n\nexport function getScrollDeltas({\n  deltaX = 0,\n  deltaY = 0,\n  deltaMode = DOM_DELTA_PIXEL,\n}): ScrollDeltas {\n  if (deltaMode !== DOM_DELTA_PIXEL) {\n    if (deltaMode === DOM_DELTA_PAGE) {\n      deltaX *= LINES_PER_PAGE;\n      deltaY *= LINES_PER_PAGE;\n    }\n    const scrollLineHeight = getScrollLineHeight();\n    if (scrollLineHeight !== undefined) {\n      deltaX *= scrollLineHeight;\n      deltaY *= scrollLineHeight;\n    }\n  }\n\n  return { deltaX, deltaY };\n}\n\nexport function getScrollLineHeight(): number | undefined {\n  if (scrollLineHeight === undefined) {\n    const iframe = document.createElement('iframe');\n    iframe.src = '#';\n    iframe.style.position = 'absolute';\n    iframe.style.visibility = 'hidden';\n    iframe.style.width = '0px';\n    iframe.style.height = '0px';\n    iframe.style.border = 'none';\n    document.body.appendChild(iframe);\n    const iframeDocument = (iframe.contentWindow as Window).document;\n    iframeDocument.open();\n    iframeDocument.write(\n      '<!doctype html><html><head></head><body><span>X</span></body></html>',\n    );\n    iframeDocument.close();\n    const body = iframeDocument.body;\n    scrollLineHeight = (body.firstElementChild as HTMLElement).offsetHeight;\n    document.body.removeChild(iframe);\n  }\n  return scrollLineHeight;\n}\n\nexport function getAvailableScroll(element: Element, container: Element) {\n  const availableScroll = {\n    deltaXNegative: 0,\n    deltaXPositive: 0,\n    deltaYNegative: 0,\n    deltaYPositive: 0,\n  };\n\n  let scrollLeftMax, scrollTopMax;\n  while (container.contains(element) || container === element) {\n    scrollLeftMax = element.scrollWidth - element.clientWidth;\n    scrollTopMax = element.scrollHeight - element.clientHeight;\n\n    availableScroll.deltaXNegative += -element.scrollLeft;\n    availableScroll.deltaXPositive += scrollLeftMax - element.scrollLeft;\n    availableScroll.deltaYNegative += -element.scrollTop;\n    availableScroll.deltaYPositive += scrollTopMax - element.scrollTop;\n    const parent = element.parentNode;\n    if (parent === null) break;\n    element = parent as Element;\n  }\n\n  return availableScroll;\n}\n\n/**\n * Calculates the scroll distribution for `element` inside` container.\n */\nfunction calculateScrollDistribution(\n  deltaX: number,\n  deltaY: number,\n  element: Element,\n  container: Element,\n  accumulator: ScrollInformation[] = [],\n): ScrollInformation[] {\n  const scrollInformation: ScrollInformation = {\n    element,\n    scrollLeft: 0,\n    scrollTop: 0,\n  };\n  const scrollLeftMax = element.scrollWidth - element.clientWidth;\n  const scrollTopMax = element.scrollHeight - element.clientHeight;\n\n  const availableScroll = {\n    deltaXNegative: -element.scrollLeft,\n    deltaXPositive: scrollLeftMax - element.scrollLeft,\n    deltaYNegative: -element.scrollTop,\n    deltaYPositive: scrollTopMax - element.scrollTop,\n  };\n\n  const elementStyle = window.getComputedStyle(element);\n\n  if (elementStyle.overflowX !== 'hidden') {\n    // The `deltaX` can be larger than the available scroll for the element, thus overshooting.\n    // The result of that is that it scrolls the element as far as possible. We don't need to\n    // calculate exactly because we reduce the amount of desired scroll for the\n    // parent elements by the correct amount below.\n    scrollInformation.scrollLeft = element.scrollLeft + deltaX;\n    if (deltaX > availableScroll.deltaXPositive) {\n      deltaX = deltaX - availableScroll.deltaXPositive;\n    } else if (deltaX < availableScroll.deltaXNegative) {\n      deltaX = deltaX - availableScroll.deltaXNegative;\n    } else {\n      deltaX = 0;\n    }\n  }\n\n  if (elementStyle.overflowY !== 'hidden') {\n    scrollInformation.scrollTop = element.scrollTop + deltaY;\n    if (deltaY > availableScroll.deltaYPositive) {\n      deltaY = deltaY - availableScroll.deltaYPositive;\n    } else if (deltaY < availableScroll.deltaYNegative) {\n      deltaY = deltaY - availableScroll.deltaYNegative;\n    } else {\n      deltaY = 0;\n    }\n  }\n\n  if (element !== container && (deltaX || deltaY)) {\n    return calculateScrollDistribution(\n      deltaX,\n      deltaY,\n      element.parentNode as Element,\n      container,\n      accumulator.concat([scrollInformation]),\n    );\n  }\n\n  return accumulator.concat([scrollInformation]);\n}\n\n// Recursively walks up scroll containers until the delta is distributed or we\n// run out of elements in the allowed-to-scroll container.\nexport function distributeScroll(\n  deltaX: number,\n  deltaY: number,\n  element: Element,\n  container: Element,\n) {\n  const scrollInfos = calculateScrollDistribution(\n    deltaX,\n    deltaY,\n    element,\n    container,\n  );\n  let info;\n\n  for (let i = 0; i < scrollInfos.length; i++) {\n    info = scrollInfos[i];\n    if (info) {\n      info.element.scrollLeft = info.scrollLeft;\n      info.element.scrollTop = info.scrollTop;\n    }\n  }\n}\n","import { action } from '@ember/object';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { getScrollParent } from '../utils/calculate-position.ts';\nimport {\n  distributeScroll,\n  getAvailableScroll,\n  getScrollDeltas,\n} from '../utils/scroll-helpers.ts';\nimport hasMoved from '../utils/has-moved.ts';\nimport { isTesting } from '@embroider/macros';\nimport { modifier } from 'ember-modifier';\nimport { element } from 'ember-element-helper';\nimport { or } from 'ember-truth-helpers';\nimport style from 'ember-style-modifier';\nimport { on } from '@ember/modifier';\nimport { fn } from '@ember/helper';\nimport { hash } from '@ember/helper';\nimport type {\n  Dropdown,\n  TRootEventType,\n  HorizontalPosition,\n  VerticalPosition,\n} from '../types.ts';\n\nexport interface BasicDropdownContentSignature {\n  Element: HTMLElement;\n  Args: {\n    animationEnabled?: boolean;\n    transitioningInClass?: string;\n    transitionedInClass?: string;\n    transitioningOutClass?: string;\n    isTouchDevice?: boolean;\n    destination?: string;\n    destinationElement?: HTMLElement | null;\n    dropdown?: Dropdown;\n    renderInPlace?: boolean;\n    preventScroll?: boolean | undefined;\n    rootEventType?: TRootEventType;\n    top?: string | undefined;\n    left?: string | undefined;\n    right?: string | undefined;\n    width?: string | undefined;\n    height?: string | undefined;\n    otherStyles?: Record<string, string | number | undefined>;\n    hPosition?: HorizontalPosition | null;\n    vPosition?: VerticalPosition | null;\n    dir?: string;\n    defaultClass?: string;\n    overlay?: boolean;\n    htmlTag?: keyof HTMLElementTagNameMap | undefined;\n    onFocusIn?: (dropdown?: Dropdown, event?: FocusEvent) => void;\n    onFocusOut?: (dropdown?: Dropdown, event?: FocusEvent) => void;\n    onMouseEnter?: (dropdown?: Dropdown, event?: MouseEvent) => void;\n    onMouseLeave?: (dropdown?: Dropdown, event?: MouseEvent) => void;\n    shouldReposition?: (\n      mutations: MutationRecord[],\n      dropdown?: Dropdown,\n    ) => boolean;\n  };\n  Blocks: {\n    default: [];\n  };\n}\n\ntype RootMouseDownHandler = (ev: MouseEvent | TouchEvent) => void;\n\nexport default class BasicDropdownContent extends Component<BasicDropdownContentSignature> {\n  transitioningInClass =\n    this.args.transitioningInClass || 'ember-basic-dropdown--transitioning-in';\n  transitionedInClass =\n    this.args.transitionedInClass || 'ember-basic-dropdown--transitioned-in';\n  transitioningOutClass =\n    this.args.transitioningOutClass ||\n    'ember-basic-dropdown--transitioning-out';\n  isTouchDevice =\n    this.args.isTouchDevice || Boolean(!!window && 'ontouchstart' in window);\n  dropdownId = `ember-basic-dropdown-content-${this.args.dropdown?.uniqueId}`;\n  private touchMoveEvent: TouchEvent | undefined;\n  private handleRootMouseDown?: RootMouseDownHandler;\n  private scrollableAncestors: Element[] = [];\n  private mutationObserver: MutationObserver | undefined;\n  private rootElement: HTMLElement | undefined;\n  @tracked private _contentWormhole?: Element;\n  @tracked animationClass = this.transitioningInClass;\n\n  get destinationElement(): Element | null {\n    if (this.args.destinationElement) {\n      return this.args.destinationElement;\n    }\n\n    if (!this.args.destination) {\n      return null;\n    }\n\n    const element = document.getElementById(this.args.destination);\n\n    if (element) {\n      return element;\n    }\n\n    if (this._contentWormhole) {\n      return (\n        this._contentWormhole.getRootNode() as HTMLElement\n      )?.querySelector('#' + this.args.destination);\n    }\n\n    return null;\n  }\n\n  get animationEnabled(): boolean {\n    const { animationEnabled: animationEnabledArg = true } = this.args;\n\n    return animationEnabledArg && !isTesting();\n  }\n\n  get positionStyles(): Record<string, string> {\n    const style: Record<string, string> = {};\n    if (this.args.top !== undefined) {\n      style['top'] = this.args.top;\n    }\n    if (this.args.left !== undefined) {\n      style['left'] = this.args.left;\n    }\n    if (this.args.right !== undefined) {\n      style['right'] = this.args.right;\n    }\n    if (this.args.width !== undefined) {\n      style['width'] = this.args.width;\n    }\n    if (this.args.height !== undefined) {\n      style['height'] = this.args.height;\n    }\n    return style;\n  }\n\n  /**\n   * Allows similair behaviour to `ember-composable-helpers`' `optional` helper.\n   * Avoids adding extra dependencies.\n   * Can be removed when the template `V1` compatability event handlers are removed.\n   *\n   * @see https://github.com/cibernox/ember-basic-dropdown/issues/498\n   * @memberof BasicDropdownContent\n   */\n  noop(): void {}\n\n  registerDropdownContentWormhole = modifier(\n    (dropdownContentWormhole: Element) => {\n      this._contentWormhole = dropdownContentWormhole;\n    },\n  );\n\n  respondToEvents = modifier(\n    (dropdownElement: Element): (() => void) => {\n      if (this.args.dropdown?.actions?.registerDropdownElement) {\n        this.args.dropdown.actions.registerDropdownElement(\n          dropdownElement as HTMLElement,\n        );\n      }\n\n      const selector = `[data-ebd-id=${this.args.dropdown?.uniqueId}-trigger]`;\n      let triggerElement: HTMLElement | null = null;\n      if (\n        typeof this.args.dropdown?.actions?.getTriggerElement === 'function'\n      ) {\n        triggerElement = this.args.dropdown?.actions?.getTriggerElement();\n      }\n      if (!triggerElement) {\n        triggerElement = document.querySelector(selector) as HTMLElement;\n      }\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      this.handleRootMouseDown = (e: MouseEvent | TouchEvent): any => {\n        const target = (e.composedPath?.()[0] || e.target) as Element;\n        if (target === null) return;\n        if (\n          hasMoved(e as TouchEvent, this.touchMoveEvent) ||\n          dropdownElement.contains(target) ||\n          (triggerElement && triggerElement.contains(target))\n        ) {\n          this.touchMoveEvent = undefined;\n          return;\n        }\n\n        if (dropdownIsValidParent(triggerElement, target, this.dropdownId)) {\n          this.touchMoveEvent = undefined;\n          return;\n        }\n\n        if (this.args.dropdown?.actions?.close) {\n          this.args.dropdown.actions.close(e, true);\n        }\n      };\n      document.addEventListener(\n        this.args.rootEventType || 'click',\n        this.handleRootMouseDown,\n        true,\n      );\n\n      // We need to register closing event on shadow dom element, otherwise all clicks inside a shadow dom are not closing the dropdown\n      // In additional store the rootElement for outside clicks (ensure that we do removeEventListener on correct element)\n      if (\n        this._contentWormhole &&\n        this._contentWormhole.getRootNode() instanceof ShadowRoot\n      ) {\n        this.rootElement = this._contentWormhole.getRootNode() as HTMLElement;\n      } else {\n        this.rootElement = undefined;\n      }\n\n      if (this.rootElement) {\n        this.rootElement.addEventListener(\n          this.args.rootEventType || 'click',\n          this.handleRootMouseDown,\n          true,\n        );\n      }\n\n      window.addEventListener('resize', this.repositionBound);\n      window.addEventListener('orientationchange', this.repositionBound);\n\n      if (this.isTouchDevice) {\n        document.addEventListener(\n          'touchstart',\n          this.touchStartHandlerBound,\n          true,\n        );\n        document.addEventListener('touchend', this.handleRootMouseDown, true);\n\n        if (this.rootElement) {\n          this.rootElement.addEventListener(\n            'touchstart',\n            this.touchStartHandlerBound,\n            true,\n          );\n          this.rootElement.addEventListener(\n            'touchend',\n            this.handleRootMouseDown,\n            true,\n          );\n        }\n      }\n      if (\n        triggerElement !== null &&\n        !(triggerElement.getRootNode() instanceof ShadowRoot)\n      ) {\n        this.scrollableAncestors = getScrollableAncestors(triggerElement);\n      }\n      this.addScrollHandling(dropdownElement);\n      return () => {\n        this.removeGlobalEvents();\n        this.removeScrollHandling();\n        this.scrollableAncestors = [];\n\n        document.removeEventListener(\n          this.args.rootEventType || 'click',\n          this.handleRootMouseDown as RootMouseDownHandler,\n          true,\n        );\n\n        if (this.rootElement) {\n          this.rootElement.removeEventListener(\n            this.args.rootEventType || 'click',\n            this.handleRootMouseDown as RootMouseDownHandler,\n            true,\n          );\n        }\n\n        if (this.isTouchDevice) {\n          document.removeEventListener(\n            'touchstart',\n            this.touchStartHandlerBound,\n            true,\n          );\n          document.removeEventListener(\n            'touchend',\n            this.handleRootMouseDown as RootMouseDownHandler,\n            true,\n          );\n\n          if (this.rootElement) {\n            this.rootElement.removeEventListener(\n              'touchstart',\n              this.touchStartHandlerBound,\n              true,\n            );\n            this.rootElement.removeEventListener(\n              'touchend',\n              this.handleRootMouseDown as RootMouseDownHandler,\n              true,\n            );\n          }\n        }\n      };\n    },\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    { eager: false },\n  );\n\n  initiallyReposition = modifier(\n    () => {\n      // Escape autotracking frame and avoid backtracking re-render\n      void Promise.resolve().then(() => {\n        this.args.dropdown?.actions.reposition();\n      });\n    },\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    { eager: false },\n  );\n\n  animateInAndOut = modifier(\n    (dropdownElement: Element): (() => void) => {\n      if (!this.animationEnabled) return () => {};\n      waitForAnimations(dropdownElement, () => {\n        this.animationClass = this.transitionedInClass;\n      });\n      return () => {\n        if (!this.animationEnabled) return;\n        let parentElement =\n          dropdownElement.parentElement ?? this.destinationElement;\n        if (parentElement === null) return;\n        if (this.args.renderInPlace) {\n          parentElement = parentElement.parentElement;\n        }\n        if (parentElement === null) return;\n        const clone = dropdownElement.cloneNode(true) as Element;\n        clone.id = `${clone.id}--clone`;\n        clone.classList.remove(...this.transitioningInClass.split(' '));\n        clone.classList.add(...this.transitioningOutClass.split(' '));\n        parentElement.appendChild(clone);\n        this.animationClass = this.transitioningInClass;\n        waitForAnimations(clone, function () {\n          (parentElement as HTMLElement).removeChild(clone);\n        });\n      };\n    },\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    { eager: false },\n  );\n\n  observeMutations = modifier(\n    (dropdownElement: Element): (() => void) => {\n      this.mutationObserver = new MutationObserver((mutations) => {\n        let shouldReposition = mutations.some(\n          (record: MutationRecord) =>\n            containsRelevantMutation(record.addedNodes) ||\n            containsRelevantMutation(record.removedNodes),\n        );\n\n        if (shouldReposition && this.args.shouldReposition) {\n          shouldReposition = this.args.shouldReposition(\n            mutations,\n            this.args.dropdown,\n          );\n        }\n\n        if (shouldReposition) {\n          this.reposition();\n        }\n      });\n      this.mutationObserver.observe(dropdownElement, {\n        childList: true,\n        subtree: true,\n      });\n      return () => {\n        if (this.mutationObserver !== undefined) {\n          this.mutationObserver.disconnect();\n          this.mutationObserver = undefined;\n        }\n      };\n    },\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    { eager: false },\n  );\n\n  @action\n  touchStartHandler(): void {\n    document.addEventListener('touchmove', this.touchMoveHandlerBound, true);\n\n    if (\n      this._contentWormhole &&\n      this._contentWormhole.getRootNode() instanceof ShadowRoot\n    ) {\n      const rootElement = this._contentWormhole.getRootNode() as HTMLElement;\n      rootElement.addEventListener(\n        'touchmove',\n        this.touchMoveHandlerBound,\n        true,\n      );\n    }\n  }\n\n  @action\n  touchMoveHandler(e: TouchEvent): void {\n    this.touchMoveEvent = e;\n    document.removeEventListener('touchmove', this.touchMoveHandlerBound, true);\n\n    if (\n      this._contentWormhole &&\n      this._contentWormhole.getRootNode() instanceof ShadowRoot\n    ) {\n      const rootElement = this._contentWormhole.getRootNode() as HTMLElement;\n      rootElement.removeEventListener(\n        'touchmove',\n        this.touchMoveHandlerBound,\n        true,\n      );\n    }\n  }\n\n  @action\n  reposition(): void {\n    if (!this.args.dropdown) {\n      return;\n    }\n\n    this.args.dropdown.actions.reposition();\n  }\n\n  @action\n  removeGlobalEvents(): void {\n    window.removeEventListener('resize', this.repositionBound);\n    window.removeEventListener('orientationchange', this.repositionBound);\n  }\n\n  touchMoveHandlerBound = (e: TouchEvent) => this.touchMoveHandler(e);\n  repositionBound = () => this.reposition();\n  touchStartHandlerBound = () => this.touchStartHandler();\n\n  // Methods\n  addScrollHandling(dropdownElement: Element): void {\n    if (this.args.preventScroll === true) {\n      const wheelHandler = (event: WheelEvent) => {\n        const target = (event.composedPath?.()[0] || event.target) as Element;\n        if (target === null) return;\n        if (\n          dropdownElement.contains(target) ||\n          dropdownElement === event.target\n        ) {\n          // Discover the amount of scrollable canvas that is within the dropdown.\n          const availableScroll = getAvailableScroll(target, dropdownElement);\n\n          // Calculate what the event's desired change to that scrollable canvas is.\n          let { deltaX, deltaY } = getScrollDeltas(event);\n\n          // If the consequence of the wheel action would result in scrolling beyond\n          // the scrollable canvas of the dropdown, call preventDefault() and clamp\n          // the value of the delta to the available scroll size.\n          if (deltaX < availableScroll.deltaXNegative) {\n            deltaX = availableScroll.deltaXNegative;\n            event.preventDefault();\n          } else if (deltaX > availableScroll.deltaXPositive) {\n            deltaX = availableScroll.deltaXPositive;\n            event.preventDefault();\n          } else if (deltaY < availableScroll.deltaYNegative) {\n            deltaY = availableScroll.deltaYNegative;\n            event.preventDefault();\n          } else if (deltaY > availableScroll.deltaYPositive) {\n            deltaY = availableScroll.deltaYPositive;\n            event.preventDefault();\n          }\n\n          // Add back in the default behavior for the two good states that the above\n          // `preventDefault()` code will break.\n          // - Two-axis scrolling on a one-axis scroll container\n          // - The last relevant wheel event if the scroll is overshooting\n\n          // Also, don't attempt to do this if both of `deltaX` or `deltaY` are 0.\n          if (event.defaultPrevented && (deltaX || deltaY)) {\n            distributeScroll(deltaX, deltaY, target, dropdownElement);\n          }\n        } else {\n          // Scrolling outside of the dropdown is prohibited.\n          event.preventDefault();\n        }\n      };\n      document.addEventListener('wheel', wheelHandler, {\n        capture: true,\n        passive: false,\n      });\n\n      if (\n        this._contentWormhole &&\n        this._contentWormhole.getRootNode() instanceof ShadowRoot\n      ) {\n        const rootElement = this._contentWormhole.getRootNode() as HTMLElement;\n        rootElement.addEventListener('wheel', wheelHandler, {\n          capture: true,\n          passive: false,\n        });\n      }\n\n      this.removeScrollHandling = () => {\n        document.removeEventListener('wheel', wheelHandler, { capture: true });\n\n        if (\n          this._contentWormhole &&\n          this._contentWormhole.getRootNode() instanceof ShadowRoot\n        ) {\n          const rootElement =\n            this._contentWormhole.getRootNode() as HTMLElement;\n          rootElement.removeEventListener('wheel', wheelHandler, {\n            capture: true,\n          });\n        }\n      };\n    } else {\n      this.addScrollEvents();\n      this.removeScrollHandling = this.removeScrollEvents.bind(this);\n    }\n  }\n\n  // Assigned at runtime to ensure that changes to the `preventScroll` property\n  // don't result in not cleaning up after ourselves.\n  removeScrollHandling(): void {}\n\n  // These two functions wire up scroll handling if `preventScroll` is false.\n  // These trigger reposition of the dropdown.\n  addScrollEvents(): void {\n    window.addEventListener('scroll', this.repositionBound);\n    this.scrollableAncestors.forEach((el) => {\n      el.addEventListener('scroll', this.repositionBound);\n    });\n  }\n\n  removeScrollEvents(): void {\n    window.removeEventListener('scroll', this.repositionBound);\n    this.scrollableAncestors.forEach((el) => {\n      el.removeEventListener('scroll', this.repositionBound);\n    });\n  }\n\n  <template>\n    {{#if @dropdown.isOpen}}\n      <div\n        class=\"ember-basic-dropdown-content-wormhole-origin\"\n        {{this.registerDropdownContentWormhole}}\n      >\n        {{#if @renderInPlace}}\n          {{#if @overlay}}\n            <div class=\"ember-basic-dropdown-overlay\"></div>\n          {{/if}}\n\n          {{#let (element (or @htmlTag \"div\")) as |OptionalTag|}}\n            <OptionalTag\n              id={{this.dropdownId}}\n              class=\"ember-basic-dropdown-content ember-basic-dropdown-content--{{@hPosition}}\n                ember-basic-dropdown-content--{{@vPosition}}\n                {{this.animationClass}}{{if\n                  @renderInPlace\n                  ' ember-basic-dropdown-content--in-place'\n                }}\n                {{@defaultClass}}\"\n              dir={{@dir}}\n              ...attributes\n              {{style @otherStyles this.positionStyles}}\n              {{this.respondToEvents}}\n              {{this.initiallyReposition}}\n              {{this.observeMutations}}\n              {{this.animateInAndOut}}\n              {{on \"focusin\" (fn (or @onFocusIn this.noop) @dropdown)}}\n              {{on \"focusout\" (fn (or @onFocusOut this.noop) @dropdown)}}\n              {{on \"mouseenter\" (fn (or @onMouseEnter this.noop) @dropdown)}}\n              {{on \"mouseleave\" (fn (or @onMouseLeave this.noop) @dropdown)}}\n              {{! V1 compatibility - See #498 }}\n            >\n              {{yield}}\n            </OptionalTag>\n          {{/let}}\n        {{else if this.destinationElement}}\n          {{#in-element this.destinationElement insertBefore=null}}\n            {{#if @overlay}}\n              <div class=\"ember-basic-dropdown-overlay\"></div>\n            {{/if}}\n\n            {{#let (element (or @htmlTag \"div\")) as |OptionalTag|}}\n              <OptionalTag\n                id={{this.dropdownId}}\n                class=\"ember-basic-dropdown-content ember-basic-dropdown-content--{{@hPosition}}\n                  ember-basic-dropdown-content--{{@vPosition}}\n                  {{this.animationClass}}{{if\n                    @renderInPlace\n                    ' ember-basic-dropdown-content--in-place'\n                  }}\n                  {{@defaultClass}}\"\n                dir={{@dir}}\n                ...attributes\n                {{style @otherStyles this.positionStyles}}\n                {{this.respondToEvents}}\n                {{this.initiallyReposition}}\n                {{this.observeMutations}}\n                {{this.animateInAndOut}}\n                {{on \"focusin\" (fn (or @onFocusIn this.noop) @dropdown)}}\n                {{on \"focusout\" (fn (or @onFocusOut this.noop) @dropdown)}}\n                {{on \"mouseenter\" (fn (or @onMouseEnter this.noop) @dropdown)}}\n                {{on \"mouseleave\" (fn (or @onMouseLeave this.noop) @dropdown)}}\n                {{! V1 compatibility - See #498 }}\n              >\n                {{yield}}\n              </OptionalTag>\n            {{/let}}\n          {{/in-element}}\n        {{/if}}\n      </div>\n    {{else}}\n      <div\n        id={{this.dropdownId}}\n        class=\"ember-basic-dropdown-content-placeholder\"\n        {{style (hash display=\"none\")}}\n      ></div>\n    {{/if}}\n  </template>\n}\n\nfunction containsRelevantMutation(nodeList: NodeList): boolean {\n  for (let i = 0; i < nodeList.length; i++) {\n    const node = nodeList[i];\n    if (\n      node !== undefined &&\n      node.nodeName !== '#comment' &&\n      !(node.nodeName === '#text' && node.nodeValue === '')\n    ) {\n      return true;\n    }\n  }\n  return false;\n}\n\n// All ancestors with scroll (except the BODY, which is treated differently)\nfunction getScrollableAncestors(triggerElement: Element): Element[] {\n  const scrollableAncestors = [];\n  if (triggerElement) {\n    const parent = triggerElement.parentNode;\n    if (parent !== null) {\n      let nextScrollable: Element | undefined = getScrollParent(\n        parent as Element,\n      );\n      while (\n        nextScrollable &&\n        nextScrollable.tagName.toUpperCase() !== 'BODY' &&\n        nextScrollable.tagName.toUpperCase() !== 'HTML'\n      ) {\n        scrollableAncestors.push(nextScrollable);\n        const nextParent = nextScrollable.parentNode;\n        if (nextParent === null) {\n          nextScrollable = undefined;\n        } else {\n          nextScrollable = getScrollParent(nextParent as Element);\n        }\n      }\n    }\n  }\n  return scrollableAncestors;\n}\n\nfunction closestContent(el: Element): Element | null {\n  while (\n    el &&\n    (!el.classList || !el.classList.contains('ember-basic-dropdown-content'))\n  ) {\n    if (el.parentElement === null) return null;\n    el = el.parentElement;\n  }\n  return el;\n}\n\nfunction waitForAnimations(element: Element, callback: () => void): void {\n  window.requestAnimationFrame(function () {\n    const computedStyle = window.getComputedStyle(element);\n    if (\n      computedStyle.animationName !== 'none' &&\n      computedStyle.animationPlayState === 'running'\n    ) {\n      const eventCallback = function () {\n        element.removeEventListener('animationend', eventCallback);\n        callback();\n      };\n      element.addEventListener('animationend', eventCallback);\n    } else {\n      callback();\n    }\n  });\n}\n\n/**\n * Evaluates if the given element is in a dropdown or any of its parent dropdowns.\n *\n * @param {any} owner\n * @param {HTMLElement} el\n * @param {String} dropdownId\n */\nfunction dropdownIsValidParent(\n  triggerElement: HTMLElement | null,\n  el: Element,\n  dropdownId: string,\n): boolean {\n  const closestDropdown = closestContent(el);\n  if (closestDropdown === null) {\n    return false;\n  } else {\n    const closestAttrId = closestDropdown.getAttribute('id') ?? '';\n    const selector = `[aria-controls=${closestAttrId}]`;\n    const trigger =\n      document.querySelector(selector) ??\n      (triggerElement?.getRootNode() as HTMLElement)?.querySelector(selector);\n    if (trigger === null) return false;\n    const parentDropdown = closestContent(trigger);\n    if (parentDropdown === null) return false;\n    const parentAttrId = parentDropdown.getAttribute('id') ?? '';\n    return (\n      (parentDropdown && parentAttrId === dropdownId) ||\n      dropdownIsValidParent(triggerElement, parentDropdown, dropdownId)\n    );\n  }\n}\n","export default {\n  plurals: [\n    [/$/, 's'],\n    [/s$/i, 's'],\n    [/^(ax|test)is$/i, '$1es'],\n    [/(octop|vir)us$/i, '$1i'],\n    [/(octop|vir)i$/i, '$1i'],\n    [/(alias|status|bonus)$/i, '$1es'],\n    [/(bu)s$/i, '$1ses'],\n    [/(buffal|tomat)o$/i, '$1oes'],\n    [/([ti])um$/i, '$1a'],\n    [/([ti])a$/i, '$1a'],\n    [/sis$/i, 'ses'],\n    [/(?:([^f])fe|([lr])f)$/i, '$1$2ves'],\n    [/(hive)$/i, '$1s'],\n    [/([^aeiouy]|qu)y$/i, '$1ies'],\n    [/(x|ch|ss|sh)$/i, '$1es'],\n    [/(matr|vert|ind)(?:ix|ex)$/i, '$1ices'],\n    [/^(m|l)ouse$/i, '$1ice'],\n    [/^(m|l)ice$/i, '$1ice'],\n    [/^(ox)$/i, '$1en'],\n    [/^(oxen)$/i, '$1'],\n    [/(quiz)$/i, '$1zes'],\n  ],\n\n  singular: [\n    [/s$/i, ''],\n    [/(ss)$/i, '$1'],\n    [/(n)ews$/i, '$1ews'],\n    [/([ti])a$/i, '$1um'],\n    [\n      /((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(sis|ses)$/i,\n      '$1sis',\n    ],\n    [/(^analy)(sis|ses)$/i, '$1sis'],\n    [/([^f])ves$/i, '$1fe'],\n    [/(hive)s$/i, '$1'],\n    [/(tive)s$/i, '$1'],\n    [/([lr])ves$/i, '$1f'],\n    [/([^aeiouy]|qu)ies$/i, '$1y'],\n    [/(s)eries$/i, '$1eries'],\n    [/(m)ovies$/i, '$1ovie'],\n    [/(x|ch|ss|sh)es$/i, '$1'],\n    [/^(m|l)ice$/i, '$1ouse'],\n    [/(bus)(es)?$/i, '$1'],\n    [/(o)es$/i, '$1'],\n    [/(shoe)s$/i, '$1'],\n    [/(cris|test)(is|es)$/i, '$1is'],\n    [/^(a)x[ie]s$/i, '$1xis'],\n    [/(octop|vir)(us|i)$/i, '$1us'],\n    [/(alias|status|bonus)(es)?$/i, '$1'],\n    [/^(ox)en/i, '$1'],\n    [/(vert|ind)ices$/i, '$1ex'],\n    [/(matr)ices$/i, '$1ix'],\n    [/(quiz)zes$/i, '$1'],\n    [/(database)s$/i, '$1'],\n  ],\n\n  irregularPairs: [\n    ['person', 'people'],\n    ['man', 'men'],\n    ['child', 'children'],\n    ['sex', 'sexes'],\n    ['move', 'moves'],\n    ['cow', 'kine'],\n    ['zombie', 'zombies'],\n  ],\n\n  uncountable: [\n    'equipment',\n    'information',\n    'rice',\n    'money',\n    'species',\n    'series',\n    'fish',\n    'sheep',\n    'jeans',\n    'police',\n    'meta',\n  ],\n};\n","/* eslint-disable import/extensions, prettier/prettier */\nimport defaultRules from './inflections';\n\nconst BLANK_REGEX = /^\\s*$/;\nconst LAST_WORD_DASHED_REGEX = /([\\w/-]+[_/\\s-])([a-z\\d]+$)/;\nconst LAST_WORD_CAMELIZED_REGEX = /([\\w/\\s-]+)([A-Z][a-z\\d]*$)/;\nconst CAMELIZED_REGEX = /[A-Z][a-z\\d]*$/;\nconst CAPITALIZE_REGEX = /(^|\\/)([a-z\\u00C0-\\u024F])/g;\n\nfunction capitalize(str) {\n  return str.replace(CAPITALIZE_REGEX, (match) => match.toUpperCase());\n}\n\nfunction loadUncountable(rules, uncountable) {\n  for (let i = 0, length = uncountable.length; i < length; i++) {\n    rules.uncountable[uncountable[i].toLowerCase()] = true;\n  }\n}\n\nfunction loadIrregular(rules, irregularPairs) {\n  let pair;\n\n  for (let i = 0, length = irregularPairs.length; i < length; i++) {\n    pair = irregularPairs[i];\n\n    //pluralizing\n    rules.irregular[pair[0].toLowerCase()] = pair[1];\n    rules.irregular[pair[1].toLowerCase()] = pair[1];\n\n    //singularizing\n    rules.irregularInverse[pair[1].toLowerCase()] = pair[0];\n    rules.irregularInverse[pair[0].toLowerCase()] = pair[0];\n  }\n}\n\n/**\n  Inflector.Ember provides a mechanism for supplying inflection rules for your\n  application. Ember includes a default set of inflection rules, and provides an\n  API for providing additional rules.\n\n  Examples:\n\n  Creating an inflector with no rules.\n\n  ```js\n  var inflector = new Ember.Inflector();\n  ```\n\n  Creating an inflector with the default ember ruleset.\n\n  ```js\n  var inflector = new Ember.Inflector(Ember.Inflector.defaultRules);\n\n  inflector.pluralize('cow'); //=> 'kine'\n  inflector.singularize('kine'); //=> 'cow'\n  ```\n\n  Creating an inflector and adding rules later.\n\n  ```javascript\n  var inflector = Ember.Inflector.inflector;\n\n  inflector.pluralize('advice'); // => 'advices'\n  inflector.uncountable('advice');\n  inflector.pluralize('advice'); // => 'advice'\n\n  inflector.pluralize('formula'); // => 'formulas'\n  inflector.irregular('formula', 'formulae');\n  inflector.pluralize('formula'); // => 'formulae'\n\n  // you would not need to add these as they are the default rules\n  inflector.plural(/$/, 's');\n  inflector.singular(/s$/i, '');\n  ```\n\n  Creating an inflector with a nondefault ruleset.\n\n  ```javascript\n  var rules = {\n    plurals:  [\n      [ /$/, 's' ]\n    ],\n    singular: [\n      [ /\\s$/, '' ]\n    ],\n    irregularPairs: [\n      [ 'cow', 'kine' ]\n    ],\n    uncountable: [ 'fish' ]\n  };\n\n  var inflector = new Ember.Inflector(rules);\n  ```\n\n  @class Inflector\n  @namespace Ember\n*/\nfunction Inflector(ruleSet) {\n  ruleSet = ruleSet || {};\n  ruleSet.uncountable = ruleSet.uncountable || makeDictionary();\n  ruleSet.irregularPairs = ruleSet.irregularPairs || makeDictionary();\n\n  const rules = (this.rules = {\n    plurals: ruleSet.plurals || [],\n    singular: ruleSet.singular || [],\n    irregular: makeDictionary(),\n    irregularInverse: makeDictionary(),\n    uncountable: makeDictionary(),\n  });\n\n  loadUncountable(rules, ruleSet.uncountable);\n  loadIrregular(rules, ruleSet.irregularPairs);\n\n  this.enableCache();\n}\n\nif (!Object.create && !Object.create(null).hasOwnProperty) {\n  throw new Error(\n    'This browser does not support Object.create(null), please polyfil with es5-sham: http://git.io/yBU2rg'\n  );\n}\n\nfunction makeDictionary() {\n  var cache = Object.create(null);\n  cache['_dict'] = null;\n  delete cache['_dict'];\n  return cache;\n}\n\nInflector.prototype = {\n  /**\n    @public\n\n    As inflections can be costly, and commonly the same subset of words are repeatedly\n    inflected an optional cache is provided.\n\n    @method enableCache\n  */\n  enableCache() {\n    this.purgeCache();\n\n    this.singularize = function (word) {\n      this._cacheUsed = true;\n      return (\n        this._sCache[word] || (this._sCache[word] = this._singularize(word))\n      );\n    };\n\n    this.pluralize = function (numberOrWord, word, options = {}) {\n      this._cacheUsed = true;\n      var cacheKey = [numberOrWord, word, options.withoutCount];\n      return (\n        this._pCache[cacheKey] ||\n        (this._pCache[cacheKey] = this._pluralize(numberOrWord, word, options))\n      );\n    };\n  },\n\n  /**\n    @public\n\n    @method purgeCache\n  */\n  purgeCache() {\n    this._cacheUsed = false;\n    this._sCache = makeDictionary();\n    this._pCache = makeDictionary();\n  },\n\n  /**\n    @public\n    disable caching\n\n    @method disableCache;\n  */\n  disableCache() {\n    this._sCache = null;\n    this._pCache = null;\n    this.singularize = function (word) {\n      return this._singularize(word);\n    };\n\n    this.pluralize = function () {\n      return this._pluralize(...arguments);\n    };\n  },\n\n  /**\n    @method plural\n    @param {RegExp} regex\n    @param {String} string\n  */\n  plural(regex, string) {\n    if (this._cacheUsed) {\n      this.purgeCache();\n    }\n    this.rules.plurals.push([regex, string.toLowerCase()]);\n  },\n\n  /**\n    @method singular\n    @param {RegExp} regex\n    @param {String} string\n  */\n  singular(regex, string) {\n    if (this._cacheUsed) {\n      this.purgeCache();\n    }\n    this.rules.singular.push([regex, string.toLowerCase()]);\n  },\n\n  /**\n    @method uncountable\n    @param {String} regex\n  */\n  uncountable(string) {\n    if (this._cacheUsed) {\n      this.purgeCache();\n    }\n    loadUncountable(this.rules, [string.toLowerCase()]);\n  },\n\n  /**\n    @method irregular\n    @param {String} singular\n    @param {String} plural\n  */\n  irregular(singular, plural) {\n    if (this._cacheUsed) {\n      this.purgeCache();\n    }\n    loadIrregular(this.rules, [[singular, plural]]);\n  },\n\n  /**\n    @method pluralize\n    @param {String} word\n  */\n  pluralize() {\n    return this._pluralize(...arguments);\n  },\n\n  _pluralize(wordOrCount, word, options = {}) {\n    if (word === undefined) {\n      return this.inflect(\n        wordOrCount,\n        this.rules.plurals,\n        this.rules.irregular\n      );\n    }\n\n    if (parseFloat(wordOrCount) !== 1) {\n      word = this.inflect(word, this.rules.plurals, this.rules.irregular);\n    }\n\n    return options.withoutCount ? word : `${wordOrCount} ${word}`;\n  },\n\n  /**\n    @method singularize\n    @param {String} word\n  */\n  singularize(word) {\n    return this._singularize(word);\n  },\n\n  _singularize(word) {\n    return this.inflect(word, this.rules.singular, this.rules.irregularInverse);\n  },\n\n  /**\n    @protected\n\n    @method inflect\n    @param {String} word\n    @param {Object} typeRules\n    @param {Object} irregular\n  */\n  inflect(word, typeRules, irregular) {\n    let inflection,\n      substitution,\n      result,\n      lowercase,\n      wordSplit,\n      lastWord,\n      isBlank,\n      isCamelized,\n      rule,\n      isUncountable;\n\n    isBlank = !word || BLANK_REGEX.test(word);\n    isCamelized = CAMELIZED_REGEX.test(word);\n\n    if (isBlank) {\n      return word;\n    }\n\n    lowercase = word.toLowerCase();\n    wordSplit =\n      LAST_WORD_DASHED_REGEX.exec(word) || LAST_WORD_CAMELIZED_REGEX.exec(word);\n\n    if (wordSplit) {\n      lastWord = wordSplit[2].toLowerCase();\n    }\n\n    isUncountable =\n      this.rules.uncountable[lowercase] || this.rules.uncountable[lastWord];\n\n    if (isUncountable) {\n      return word;\n    }\n\n    for (rule in irregular) {\n      if (lowercase.match(rule + '$')) {\n        substitution = irregular[rule];\n\n        if (isCamelized && irregular[lastWord]) {\n          substitution = capitalize(substitution);\n          rule = capitalize(rule);\n        }\n\n        return word.replace(new RegExp(rule, 'i'), substitution);\n      }\n    }\n\n    for (var i = typeRules.length, min = 0; i > min; i--) {\n      inflection = typeRules[i - 1];\n      rule = inflection[0];\n\n      if (rule.test(word)) {\n        break;\n      }\n    }\n\n    inflection = inflection || [];\n\n    rule = inflection[0];\n    substitution = inflection[1];\n\n    result = word.replace(rule, substitution);\n\n    return result;\n  },\n};\n\nInflector.defaultRules = defaultRules;\nInflector.inflector = new Inflector(defaultRules);\n\nexport default Inflector;\n","/* eslint-disable import/extensions */\nimport Inflector from './inflector';\n\nfunction pluralize() {\n  return Inflector.inflector.pluralize(...arguments);\n}\n\nfunction singularize(word) {\n  return Inflector.inflector.singularize(word);\n}\n\nexport { pluralize, singularize };\n","import { get } from '@ember/object';\nimport { assert } from '@ember/debug';\n\nexport function taskHelperClosure(helperName, taskMethod, _args, hash) {\n  let task = _args[0];\n  let outerArgs = _args.slice(1);\n\n  return function (...innerArgs) {\n    if (!task || typeof task[taskMethod] !== 'function') {\n      assert(\n        `The first argument passed to the \\`${helperName}\\` helper should be a Task object (without quotes); you passed ${task}`,\n        false,\n      );\n      return;\n    }\n\n    if (hash && hash.value) {\n      let event = innerArgs.pop();\n      innerArgs.push(get(event, hash.value));\n    }\n\n    return task[taskMethod](...outerArgs, ...innerArgs);\n  };\n}\n","import Ember from 'ember';\nimport Helper from '@ember/component/helper';\n\nexport default function makeHelper(helperFunction) {\n  if (Helper) {\n    return Helper.helper(helperFunction);\n  }\n  if (Ember.HTMLBars) {\n    return Ember.HTMLBars.makeBoundHelper(helperFunction);\n  }\n  return Ember.Handlebars.makeBoundHelper(helperFunction);\n}\n","export default function tKey<T extends string>(key: T): T {\n  return key;\n}\n","// this Proxy handler will be used to preserve the unaltered behavior of the window global by default\nconst doNothingHandler = {\n  get(target, prop) {\n    const value = Reflect.get(target, prop);\n\n    // make sure the function receives the original window as the this context! (e.g. alert will throw an invalid invocation error)\n    if (typeof value === 'function') {\n      return new Proxy(value, {\n        apply(t, _thisArg, argumentsList) {\n          return Reflect.apply(value, target, argumentsList);\n        },\n      });\n    }\n\n    return value;\n  },\n  set: Reflect.set,\n  has: Reflect.has,\n  deleteProperty: Reflect.deleteProperty,\n  getOwnPropertyDescriptor: Reflect.getOwnPropertyDescriptor,\n  defineProperty: Reflect.defineProperty,\n};\n\nlet currentHandler = doNothingHandler;\n\n// private function to replace the default handler in tests\nconst _setCurrentHandler = (handler = doNothingHandler) =>\n  (currentHandler = handler);\n\nconst proxyHandler = {\n  get() {\n    return currentHandler.get(...arguments);\n  },\n  set() {\n    return currentHandler.set(...arguments);\n  },\n  has() {\n    return currentHandler.has(...arguments);\n  },\n  deleteProperty() {\n    return currentHandler.deleteProperty(...arguments);\n  },\n  getOwnPropertyDescriptor() {\n    return currentHandler.getOwnPropertyDescriptor(...arguments);\n  },\n  defineProperty() {\n    return currentHandler.defineProperty(...arguments);\n  },\n};\n\nconst exportedWindow = new Proxy(window, proxyHandler);\n\nexport default exportedWindow;\nexport { _setCurrentHandler };\n","var baseGetTag = require('./_baseGetTag'),\n    getPrototype = require('./_getPrototype'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var baseAssignValue = require('./_baseAssignValue'),\n    baseForOwn = require('./_baseForOwn'),\n    baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n *   'fred':    { 'user': 'fred',    'age': 40 },\n *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n  var result = {};\n  iteratee = baseIteratee(iteratee, 3);\n\n  baseForOwn(object, function(value, key, object) {\n    baseAssignValue(result, key, iteratee(value, key, object));\n  });\n  return result;\n}\n\nmodule.exports = mapValues;\n","var isFunction = require('./isFunction'),\n    isMasked = require('./_isMasked'),\n    isObject = require('./isObject'),\n    toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nmodule.exports = createBaseFor;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nmodule.exports = baseTimes;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = stubFalse;\n","var baseGetTag = require('./_baseGetTag'),\n    isLength = require('./isLength'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var baseIsMatch = require('./_baseIsMatch'),\n    getMatchData = require('./_getMatchData'),\n    matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n  }\n  return function(object) {\n    return object === source || baseIsMatch(object, source, matchData);\n  };\n}\n\nmodule.exports = baseMatches;\n","var Stack = require('./_Stack'),\n    baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var stack = new Stack;\n      if (customizer) {\n        var result = customizer(objValue, srcValue, key, object, source, stack);\n      }\n      if (!(result === undefined\n            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n            : result\n          )) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\nmodule.exports = baseIsMatch;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nmodule.exports = listCacheSet;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var ListCache = require('./_ListCache'),\n    Map = require('./_Map'),\n    MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nmodule.exports = stackSet;\n","var Hash = require('./_Hash'),\n    ListCache = require('./_ListCache'),\n    Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nmodule.exports = mapCacheClear;\n","var hashClear = require('./_hashClear'),\n    hashDelete = require('./_hashDelete'),\n    hashGet = require('./_hashGet'),\n    hashHas = require('./_hashHas'),\n    hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nmodule.exports = hashSet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = mapCacheDelete;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nmodule.exports = mapCacheSet;\n","var Stack = require('./_Stack'),\n    equalArrays = require('./_equalArrays'),\n    equalByTag = require('./_equalByTag'),\n    equalObjects = require('./_equalObjects'),\n    getTag = require('./_getTag'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nmodule.exports = arraySome;\n","var Symbol = require('./_Symbol'),\n    Uint8Array = require('./_Uint8Array'),\n    eq = require('./eq'),\n    equalArrays = require('./_equalArrays'),\n    mapToArray = require('./_mapToArray'),\n    setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\nmodule.exports = equalByTag;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\nmodule.exports = mapToArray;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Check that cyclic values are equal.\n  var objStacked = stack.get(object);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalObjects;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayFilter;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var isStrictComparable = require('./_isStrictComparable'),\n    keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = keys(object),\n      length = result.length;\n\n  while (length--) {\n    var key = result[length],\n        value = object[key];\n\n    result[length] = [key, value, isStrictComparable(value)];\n  }\n  return result;\n}\n\nmodule.exports = getMatchData;\n","var baseIsEqual = require('./_baseIsEqual'),\n    get = require('./get'),\n    hasIn = require('./hasIn'),\n    isKey = require('./_isKey'),\n    isStrictComparable = require('./_isStrictComparable'),\n    matchesStrictComparable = require('./_matchesStrictComparable'),\n    toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  if (isKey(path) && isStrictComparable(srcValue)) {\n    return matchesStrictComparable(toKey(path), srcValue);\n  }\n  return function(object) {\n    var objValue = get(object, path);\n    return (objValue === undefined && objValue === srcValue)\n      ? hasIn(object, path)\n      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n  };\n}\n\nmodule.exports = baseMatchesProperty;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nmodule.exports = stringToPath;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nmodule.exports = memoizeCapped;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var Symbol = require('./_Symbol'),\n    arrayMap = require('./_arrayMap'),\n    isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n  return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var baseProperty = require('./_baseProperty'),\n    basePropertyDeep = require('./_basePropertyDeep'),\n    isKey = require('./_isKey'),\n    toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': 2 } },\n *   { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n  return function(object) {\n    return baseGet(object, path);\n  };\n}\n\nmodule.exports = basePropertyDeep;\n","var baseUniq = require('./_baseUniq');\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n  return (array && array.length) ? baseUniq(array) : [];\n}\n\nmodule.exports = uniq;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n  var length = array == null ? 0 : array.length;\n  return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","var baseFindIndex = require('./_baseFindIndex'),\n    baseIsNaN = require('./_baseIsNaN'),\n    strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n  return value === value\n    ? strictIndexOf(array, value, fromIndex)\n    : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n  return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n  var index = fromIndex - 1,\n      length = array.length;\n\n  while (++index < length) {\n    if (array[index] === value) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = strictIndexOf;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (comparator(value, array[index])) {\n      return true;\n    }\n  }\n  return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","var Set = require('./_Set'),\n    noop = require('./noop'),\n    setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n  return new Set(values);\n};\n\nmodule.exports = createSet;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n  // No operation performed.\n}\n\nmodule.exports = noop;\n","var arrayPush = require('./_arrayPush'),\n    isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseFlatten;\n","var Symbol = require('./_Symbol'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","var createCaseFirst = require('./_createCaseFirst');\n\n/**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\nvar lowerFirst = createCaseFirst('toLowerCase');\n\nmodule.exports = lowerFirst;\n","var castSlice = require('./_castSlice'),\n    hasUnicode = require('./_hasUnicode'),\n    stringToArray = require('./_stringToArray'),\n    toString = require('./toString');\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n  return function(string) {\n    string = toString(string);\n\n    var strSymbols = hasUnicode(string)\n      ? stringToArray(string)\n      : undefined;\n\n    var chr = strSymbols\n      ? strSymbols[0]\n      : string.charAt(0);\n\n    var trailing = strSymbols\n      ? castSlice(strSymbols, 1).join('')\n      : string.slice(1);\n\n    return chr[methodName]() + trailing;\n  };\n}\n\nmodule.exports = createCaseFirst;\n","var baseSlice = require('./_baseSlice');\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n  var length = array.length;\n  end = end === undefined ? length : end;\n  return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nmodule.exports = castSlice;\n","var asciiToArray = require('./_asciiToArray'),\n    hasUnicode = require('./_hasUnicode'),\n    unicodeToArray = require('./_unicodeToArray');\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n  return hasUnicode(string)\n    ? unicodeToArray(string)\n    : asciiToArray(string);\n}\n\nmodule.exports = stringToArray;\n","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n  return string.split('');\n}\n\nmodule.exports = asciiToArray;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n  return string.match(reUnicode) || [];\n}\n\nmodule.exports = unicodeToArray;\n","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n  return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n","var arrayMap = require('./_arrayMap'),\n    baseIteratee = require('./_baseIteratee'),\n    baseMap = require('./_baseMap'),\n    isArray = require('./isArray');\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n *   return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n *   { 'user': 'barney' },\n *   { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n  var func = isArray(collection) ? arrayMap : baseMap;\n  return func(collection, baseIteratee(iteratee, 3));\n}\n\nmodule.exports = map;\n","var baseEach = require('./_baseEach'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n  var index = -1,\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value, key, collection) {\n    result[++index] = iteratee(value, key, collection);\n  });\n  return result;\n}\n\nmodule.exports = baseMap;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    if (collection == null) {\n      return collection;\n    }\n    if (!isArrayLike(collection)) {\n      return eachFunc(collection, iteratee);\n    }\n    var length = collection.length,\n        index = fromRight ? length : -1,\n        iterable = Object(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\nmodule.exports = createBaseEach;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n","var Stack = require('./_Stack'),\n    arrayEach = require('./_arrayEach'),\n    assignValue = require('./_assignValue'),\n    baseAssign = require('./_baseAssign'),\n    baseAssignIn = require('./_baseAssignIn'),\n    cloneBuffer = require('./_cloneBuffer'),\n    copyArray = require('./_copyArray'),\n    copySymbols = require('./_copySymbols'),\n    copySymbolsIn = require('./_copySymbolsIn'),\n    getAllKeys = require('./_getAllKeys'),\n    getAllKeysIn = require('./_getAllKeysIn'),\n    getTag = require('./_getTag'),\n    initCloneArray = require('./_initCloneArray'),\n    initCloneByTag = require('./_initCloneByTag'),\n    initCloneObject = require('./_initCloneObject'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isMap = require('./isMap'),\n    isObject = require('./isObject'),\n    isSet = require('./isSet'),\n    keys = require('./keys'),\n    keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\nmodule.exports = baseClone;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nmodule.exports = arrayEach;\n","var copyObject = require('./_copyObject'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","var copyObject = require('./_copyObject'),\n    keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var isObject = require('./isObject'),\n    isPrototype = require('./_isPrototype'),\n    nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeysIn;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = nativeKeysIn;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nmodule.exports = copyArray;\n","var copyObject = require('./_copyObject'),\n    getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var copyObject = require('./_copyObject'),\n    getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbolsIn = require('./_getSymbolsIn'),\n    keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\nmodule.exports = initCloneArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n    cloneDataView = require('./_cloneDataView'),\n    cloneRegExp = require('./_cloneRegExp'),\n    cloneSymbol = require('./_cloneSymbol'),\n    cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\nmodule.exports = initCloneByTag;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","var baseCreate = require('./_baseCreate'),\n    getPrototype = require('./_getPrototype'),\n    isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nmodule.exports = initCloneObject;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nmodule.exports = baseCreate;\n","var baseIsMap = require('./_baseIsMap'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var baseIsSet = require('./_baseIsSet'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","var apply = require('./_apply'),\n    baseEach = require('./_baseEach'),\n    baseInvoke = require('./_baseInvoke'),\n    baseRest = require('./_baseRest'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n *  the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\nvar invokeMap = baseRest(function(collection, path, args) {\n  var index = -1,\n      isFunc = typeof path == 'function',\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value) {\n    result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n  });\n  return result;\n});\n\nmodule.exports = invokeMap;\n","var apply = require('./_apply'),\n    castPath = require('./_castPath'),\n    last = require('./last'),\n    parent = require('./_parent'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\nfunction baseInvoke(object, path, args) {\n  path = castPath(path, object);\n  object = parent(object, path);\n  var func = object == null ? object : object[toKey(last(path))];\n  return func == null ? undefined : apply(func, object, args);\n}\n\nmodule.exports = baseInvoke;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n","var baseGet = require('./_baseGet'),\n    baseSlice = require('./_baseSlice');\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n  return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nmodule.exports = parent;\n","var constant = require('./constant'),\n    defineProperty = require('./_defineProperty'),\n    identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\nmodule.exports = baseSetToString;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\nmodule.exports = constant;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nmodule.exports = shortOut;\n","/**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `-0`, `0n`, `\"\"`, `undefined`, and `NaN` are falsy.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\nfunction compact(array) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (value) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = compact;\n","var baseHas = require('./_baseHas'),\n    hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n  return object != null && hasPath(object, path, baseHas);\n}\n\nmodule.exports = has;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n  return object != null && hasOwnProperty.call(object, key);\n}\n\nmodule.exports = baseHas;\n","var baseValues = require('./_baseValues'),\n    keys = require('./keys');\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n  return object == null ? [] : baseValues(object, keys(object));\n}\n\nmodule.exports = values;\n","var arrayMap = require('./_arrayMap');\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n  return arrayMap(props, function(key) {\n    return object[key];\n  });\n}\n\nmodule.exports = baseValues;\n","var baseKeys = require('./_baseKeys'),\n    getTag = require('./_getTag'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isArrayLike = require('./isArrayLike'),\n    isBuffer = require('./isBuffer'),\n    isPrototype = require('./_isPrototype'),\n    isTypedArray = require('./isTypedArray');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n  if (value == null) {\n    return true;\n  }\n  if (isArrayLike(value) &&\n      (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n        isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n    return !value.length;\n  }\n  var tag = getTag(value);\n  if (tag == mapTag || tag == setTag) {\n    return !value.size;\n  }\n  if (isPrototype(value)) {\n    return !baseKeys(value).length;\n  }\n  for (var key in value) {\n    if (hasOwnProperty.call(value, key)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nmodule.exports = isEmpty;\n","var baseIteratee = require('./_baseIteratee'),\n    baseUniq = require('./_baseUniq');\n\n/**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\nfunction uniqBy(array, iteratee) {\n  return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : [];\n}\n\nmodule.exports = uniqBy;\n","var baseFor = require('./_baseFor'),\n    castFunction = require('./_castFunction'),\n    keysIn = require('./keysIn');\n\n/**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\nfunction forIn(object, iteratee) {\n  return object == null\n    ? object\n    : baseFor(object, castFunction(iteratee), keysIn);\n}\n\nmodule.exports = forIn;\n","var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n  return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n","var basePick = require('./_basePick'),\n    flatRest = require('./_flatRest');\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n  return object == null ? {} : basePick(object, paths);\n});\n\nmodule.exports = pick;\n","var basePickBy = require('./_basePickBy'),\n    hasIn = require('./hasIn');\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n  return basePickBy(object, paths, function(value, path) {\n    return hasIn(object, path);\n  });\n}\n\nmodule.exports = basePick;\n","var baseGet = require('./_baseGet'),\n    baseSet = require('./_baseSet'),\n    castPath = require('./_castPath');\n\n/**\n * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n  var index = -1,\n      length = paths.length,\n      result = {};\n\n  while (++index < length) {\n    var path = paths[index],\n        value = baseGet(object, path);\n\n    if (predicate(value, path)) {\n      baseSet(result, castPath(path, object), value);\n    }\n  }\n  return result;\n}\n\nmodule.exports = basePickBy;\n","var assignValue = require('./_assignValue'),\n    castPath = require('./_castPath'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n  if (!isObject(object)) {\n    return object;\n  }\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      lastIndex = length - 1,\n      nested = object;\n\n  while (nested != null && ++index < length) {\n    var key = toKey(path[index]),\n        newValue = value;\n\n    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n      return object;\n    }\n\n    if (index != lastIndex) {\n      var objValue = nested[key];\n      newValue = customizer ? customizer(objValue, key, nested) : undefined;\n      if (newValue === undefined) {\n        newValue = isObject(objValue)\n          ? objValue\n          : (isIndex(path[index + 1]) ? [] : {});\n      }\n    }\n    assignValue(nested, key, newValue);\n    nested = nested[key];\n  }\n  return object;\n}\n\nmodule.exports = baseSet;\n","var flatten = require('./flatten'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n  return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n","var assignValue = require('./_assignValue'),\n    copyObject = require('./_copyObject'),\n    createAssigner = require('./_createAssigner'),\n    isArrayLike = require('./isArrayLike'),\n    isPrototype = require('./_isPrototype'),\n    keys = require('./keys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * function Bar() {\n *   this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\nvar assign = createAssigner(function(object, source) {\n  if (isPrototype(source) || isArrayLike(source)) {\n    copyObject(source, keys(source), object);\n    return;\n  }\n  for (var key in source) {\n    if (hasOwnProperty.call(source, key)) {\n      assignValue(object, key, source[key]);\n    }\n  }\n});\n\nmodule.exports = assign;\n","var baseRest = require('./_baseRest'),\n    isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nmodule.exports = createAssigner;\n","var eq = require('./eq'),\n    isArrayLike = require('./isArrayLike'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\nmodule.exports = isIterateeCall;\n","var createFind = require('./_createFind'),\n    findIndex = require('./findIndex');\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'age': 36, 'active': true },\n *   { 'user': 'fred',    'age': 40, 'active': false },\n *   { 'user': 'pebbles', 'age': 1,  'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nmodule.exports = find;\n","var baseIteratee = require('./_baseIteratee'),\n    isArrayLike = require('./isArrayLike'),\n    keys = require('./keys');\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n  return function(collection, predicate, fromIndex) {\n    var iterable = Object(collection);\n    if (!isArrayLike(collection)) {\n      var iteratee = baseIteratee(predicate, 3);\n      collection = keys(collection);\n      predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n    }\n    var index = findIndexFunc(collection, predicate, fromIndex);\n    return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n  };\n}\n\nmodule.exports = createFind;\n","var baseFindIndex = require('./_baseFindIndex'),\n    baseIteratee = require('./_baseIteratee'),\n    toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'active': false },\n *   { 'user': 'fred',    'active': false },\n *   { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n  var length = array == null ? 0 : array.length;\n  if (!length) {\n    return -1;\n  }\n  var index = fromIndex == null ? 0 : toInteger(fromIndex);\n  if (index < 0) {\n    index = nativeMax(length + index, 0);\n  }\n  return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nmodule.exports = findIndex;\n","var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n  if (!value) {\n    return value === 0 ? value : 0;\n  }\n  value = toNumber(value);\n  if (value === INFINITY || value === -INFINITY) {\n    var sign = (value < 0 ? -1 : 1);\n    return sign * MAX_INTEGER;\n  }\n  return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n","var baseTrim = require('./_baseTrim'),\n    isObject = require('./isObject'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nmodule.exports = baseTrim;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var toInteger = require('./toInteger');\n\n/**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\nfunction isInteger(value) {\n  return typeof value == 'number' && value == toInteger(value);\n}\n\nmodule.exports = isInteger;\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a!==a && b!==b;\n};\n","\"use strict\";\n\n/**\n * Expose `md5omatic(str)`.\n */\n \nmodule.exports = md5omatic;\n\n/**\n * Hash any string using message digest.\n *\n * @param {String} str\n * @return {String}\n * @api public\n */\n \nfunction md5omatic(str) {\n    var x = str2blks_MD5(str);\n    var a =  1732584193;\n    var b = -271733879;\n    var c = -1732584194;\n    var d =  271733878;\n\n    for(var i=0; i<x.length; i += 16)\n    {\n        var olda = a;\n        var oldb = b;\n        var oldc = c;\n        var oldd = d;\n\n        a = ff(a, b, c, d, x[i+ 0], 7 , -680876936);\n        d = ff(d, a, b, c, x[i+ 1], 12, -389564586);\n        c = ff(c, d, a, b, x[i+ 2], 17,  606105819);\n        b = ff(b, c, d, a, x[i+ 3], 22, -1044525330);\n        a = ff(a, b, c, d, x[i+ 4], 7 , -176418897);\n        d = ff(d, a, b, c, x[i+ 5], 12,  1200080426);\n        c = ff(c, d, a, b, x[i+ 6], 17, -1473231341);\n        b = ff(b, c, d, a, x[i+ 7], 22, -45705983);\n        a = ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);\n        d = ff(d, a, b, c, x[i+ 9], 12, -1958414417);\n        c = ff(c, d, a, b, x[i+10], 17, -42063);\n        b = ff(b, c, d, a, x[i+11], 22, -1990404162);\n        a = ff(a, b, c, d, x[i+12], 7 ,  1804603682);\n        d = ff(d, a, b, c, x[i+13], 12, -40341101);\n        c = ff(c, d, a, b, x[i+14], 17, -1502002290);\n        b = ff(b, c, d, a, x[i+15], 22,  1236535329);\n        a = gg(a, b, c, d, x[i+ 1], 5 , -165796510);\n        d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632);\n        c = gg(c, d, a, b, x[i+11], 14,  643717713);\n        b = gg(b, c, d, a, x[i+ 0], 20, -373897302);\n        a = gg(a, b, c, d, x[i+ 5], 5 , -701558691);\n        d = gg(d, a, b, c, x[i+10], 9 ,  38016083);\n        c = gg(c, d, a, b, x[i+15], 14, -660478335);\n        b = gg(b, c, d, a, x[i+ 4], 20, -405537848);\n        a = gg(a, b, c, d, x[i+ 9], 5 ,  568446438);\n        d = gg(d, a, b, c, x[i+14], 9 , -1019803690);\n        c = gg(c, d, a, b, x[i+ 3], 14, -187363961);\n        b = gg(b, c, d, a, x[i+ 8], 20,  1163531501);\n        a = gg(a, b, c, d, x[i+13], 5 , -1444681467);\n        d = gg(d, a, b, c, x[i+ 2], 9 , -51403784);\n        c = gg(c, d, a, b, x[i+ 7], 14,  1735328473);\n        b = gg(b, c, d, a, x[i+12], 20, -1926607734);\n        a = hh(a, b, c, d, x[i+ 5], 4 , -378558);\n        d = hh(d, a, b, c, x[i+ 8], 11, -2022574463);\n        c = hh(c, d, a, b, x[i+11], 16,  1839030562);\n        b = hh(b, c, d, a, x[i+14], 23, -35309556);\n        a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060);\n        d = hh(d, a, b, c, x[i+ 4], 11,  1272893353);\n        c = hh(c, d, a, b, x[i+ 7], 16, -155497632);\n        b = hh(b, c, d, a, x[i+10], 23, -1094730640);\n        a = hh(a, b, c, d, x[i+13], 4 ,  681279174);\n        d = hh(d, a, b, c, x[i+ 0], 11, -358537222);\n        c = hh(c, d, a, b, x[i+ 3], 16, -722521979);\n        b = hh(b, c, d, a, x[i+ 6], 23,  76029189);\n        a = hh(a, b, c, d, x[i+ 9], 4 , -640364487);\n        d = hh(d, a, b, c, x[i+12], 11, -421815835);\n        c = hh(c, d, a, b, x[i+15], 16,  530742520);\n        b = hh(b, c, d, a, x[i+ 2], 23, -995338651);\n        a = ii(a, b, c, d, x[i+ 0], 6 , -198630844);\n        d = ii(d, a, b, c, x[i+ 7], 10,  1126891415);\n        c = ii(c, d, a, b, x[i+14], 15, -1416354905);\n        b = ii(b, c, d, a, x[i+ 5], 21, -57434055);\n        a = ii(a, b, c, d, x[i+12], 6 ,  1700485571);\n        d = ii(d, a, b, c, x[i+ 3], 10, -1894986606);\n        c = ii(c, d, a, b, x[i+10], 15, -1051523);\n        b = ii(b, c, d, a, x[i+ 1], 21, -2054922799);\n        a = ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);\n        d = ii(d, a, b, c, x[i+15], 10, -30611744);\n        c = ii(c, d, a, b, x[i+ 6], 15, -1560198380);\n        b = ii(b, c, d, a, x[i+13], 21,  1309151649);\n        a = ii(a, b, c, d, x[i+ 4], 6 , -145523070);\n        d = ii(d, a, b, c, x[i+11], 10, -1120210379);\n        c = ii(c, d, a, b, x[i+ 2], 15,  718787259);\n        b = ii(b, c, d, a, x[i+ 9], 21, -343485551);\n\n        a = addme(a, olda);\n        b = addme(b, oldb);\n        c = addme(c, oldc);\n        d = addme(d, oldd);\n    }\n\n    return rhex(a) + rhex(b) + rhex(c) + rhex(d);\n};\n\nvar hex_chr = \"0123456789abcdef\";\n\nfunction bitOR(a, b)\n{\n    var lsb = (a & 0x1) | (b & 0x1);\n    var msb31 = (a >>> 1) | (b >>> 1);\n\n    return (msb31 << 1) | lsb;\n}\n\nfunction bitXOR(a, b)\n{\n    var lsb = (a & 0x1) ^ (b & 0x1);\n    var msb31 = (a >>> 1) ^ (b >>> 1);\n\n    return (msb31 << 1) | lsb;\n}\n\nfunction bitAND(a, b)\n{\n    var lsb = (a & 0x1) & (b & 0x1);\n    var msb31 = (a >>> 1) & (b >>> 1);\n\n    return (msb31 << 1) | lsb;\n}\n\nfunction addme(x, y)\n{\n    var lsw = (x & 0xFFFF)+(y & 0xFFFF);\n    var msw = (x >> 16)+(y >> 16)+(lsw >> 16);\n\n    return (msw << 16) | (lsw & 0xFFFF);\n}\n\nfunction rhex(num)\n{\n    var str = \"\";\n    var j;\n\n    for(j=0; j<=3; j++)\n        str += hex_chr.charAt((num >> (j * 8 + 4)) & 0x0F) + hex_chr.charAt((num >> (j * 8)) & 0x0F);\n\n    return str;\n}\n\nfunction str2blks_MD5(str)\n{\n    var nblk = ((str.length + 8) >> 6) + 1;\n    var blks = new Array(nblk * 16);\n    var i;\n\n    for(i=0; i<nblk * 16; i++)\n        blks[i] = 0;\n\n    for(i=0; i<str.length; i++)\n        blks[i >> 2] |= str.charCodeAt(i) << (((str.length * 8 + i) % 4) * 8);\n\n    blks[i >> 2] |= 0x80 << (((str.length * 8 + i) % 4) * 8);\n\n    var l = str.length * 8;\n    blks[nblk * 16 - 2] = (l & 0xFF);\n    blks[nblk * 16 - 2] |= ((l >>> 8) & 0xFF) << 8;\n    blks[nblk * 16 - 2] |= ((l >>> 16) & 0xFF) << 16;\n    blks[nblk * 16 - 2] |= ((l >>> 24) & 0xFF) << 24;\n\n    return blks;\n}\n\nfunction rol(num, cnt)\n{\n    return (num << cnt) | (num >>> (32 - cnt));\n}\n\nfunction cmn(q, a, b, x, s, t)\n{\n    return addme(rol((addme(addme(a, q), addme(x, t))), s), b);\n}\n\nfunction ff(a, b, c, d, x, s, t)\n{\n    return cmn(bitOR(bitAND(b, c), bitAND((~b), d)), a, b, x, s, t);\n}\n\nfunction gg(a, b, c, d, x, s, t)\n{\n    return cmn(bitOR(bitAND(b, d), bitAND(c, (~d))), a, b, x, s, t);\n}\n\nfunction hh(a, b, c, d, x, s, t)\n{\n    return cmn(bitXOR(bitXOR(b, c), d), a, b, x, s, t);\n}\n\nfunction ii(a, b, c, d, x, s, t)\n{\n    return cmn(bitXOR(c, bitOR(b, (~d))), a, b, x, s, t);\n}","'use strict';\n\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n  if (Array.isArray(glob)) {\n    const fns = glob.map(input => picomatch(input, options, returnState));\n    const arrayMatcher = str => {\n      for (const isMatch of fns) {\n        const state = isMatch(str);\n        if (state) return state;\n      }\n      return false;\n    };\n    return arrayMatcher;\n  }\n\n  const isState = isObject(glob) && glob.tokens && glob.input;\n\n  if (glob === '' || (typeof glob !== 'string' && !isState)) {\n    throw new TypeError('Expected pattern to be a non-empty string');\n  }\n\n  const opts = options || {};\n  const posix = opts.windows;\n  const regex = isState\n    ? picomatch.compileRe(glob, options)\n    : picomatch.makeRe(glob, options, false, true);\n\n  const state = regex.state;\n  delete regex.state;\n\n  let isIgnored = () => false;\n  if (opts.ignore) {\n    const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n    isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n  }\n\n  const matcher = (input, returnObject = false) => {\n    const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n    const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n    if (typeof opts.onResult === 'function') {\n      opts.onResult(result);\n    }\n\n    if (isMatch === false) {\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (isIgnored(input)) {\n      if (typeof opts.onIgnore === 'function') {\n        opts.onIgnore(result);\n      }\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (typeof opts.onMatch === 'function') {\n      opts.onMatch(result);\n    }\n    return returnObject ? result : true;\n  };\n\n  if (returnState) {\n    matcher.state = state;\n  }\n\n  return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected input to be a string');\n  }\n\n  if (input === '') {\n    return { isMatch: false, output: '' };\n  }\n\n  const opts = options || {};\n  const format = opts.format || (posix ? utils.toPosixSlashes : null);\n  let match = input === glob;\n  let output = (match && format) ? format(input) : input;\n\n  if (match === false) {\n    output = format ? format(input) : input;\n    match = output === glob;\n  }\n\n  if (match === false || opts.capture === true) {\n    if (opts.matchBase === true || opts.basename === true) {\n      match = picomatch.matchBase(input, regex, options, posix);\n    } else {\n      match = regex.exec(output);\n    }\n  }\n\n  return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options) => {\n  const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n  return regex.test(utils.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n  if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n  return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n *   input: '!./foo/*.js',\n *   start: 3,\n *   base: 'foo',\n *   glob: '*.js',\n *   isBrace: false,\n *   isBracket: false,\n *   isGlob: true,\n *   isExtglob: false,\n *   isGlobstar: false,\n *   negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n  if (returnOutput === true) {\n    return state.output;\n  }\n\n  const opts = options || {};\n  const prepend = opts.contains ? '' : '^';\n  const append = opts.contains ? '' : '$';\n\n  let source = `${prepend}(?:${state.output})${append}`;\n  if (state && state.negated === true) {\n    source = `^(?!${source}).*$`;\n  }\n\n  const regex = picomatch.toRegex(source, options);\n  if (returnState === true) {\n    regex.state = state;\n  }\n\n  return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.makeRe(state[, options]);\n *\n * const result = picomatch.makeRe('*.js');\n * console.log(result);\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n  if (!input || typeof input !== 'string') {\n    throw new TypeError('Expected a non-empty string');\n  }\n\n  let parsed = { negated: false, fastpaths: true };\n\n  if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n    parsed.output = parse.fastpaths(input, options);\n  }\n\n  if (!parsed.output) {\n    parsed = parse(input, options);\n  }\n\n  return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n  try {\n    const opts = options || {};\n    return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n  } catch (err) {\n    if (options && options.debug === true) throw err;\n    return /$^/;\n  }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n  CHAR_ASTERISK,             /* * */\n  CHAR_AT,                   /* @ */\n  CHAR_BACKWARD_SLASH,       /* \\ */\n  CHAR_COMMA,                /* , */\n  CHAR_DOT,                  /* . */\n  CHAR_EXCLAMATION_MARK,     /* ! */\n  CHAR_FORWARD_SLASH,        /* / */\n  CHAR_LEFT_CURLY_BRACE,     /* { */\n  CHAR_LEFT_PARENTHESES,     /* ( */\n  CHAR_LEFT_SQUARE_BRACKET,  /* [ */\n  CHAR_PLUS,                 /* + */\n  CHAR_QUESTION_MARK,        /* ? */\n  CHAR_RIGHT_CURLY_BRACE,    /* } */\n  CHAR_RIGHT_PARENTHESES,    /* ) */\n  CHAR_RIGHT_SQUARE_BRACKET  /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n  return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n  if (token.isPrefix !== true) {\n    token.depth = token.isGlobstar ? Infinity : 1;\n  }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n  const opts = options || {};\n\n  const length = input.length - 1;\n  const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n  const slashes = [];\n  const tokens = [];\n  const parts = [];\n\n  let str = input;\n  let index = -1;\n  let start = 0;\n  let lastIndex = 0;\n  let isBrace = false;\n  let isBracket = false;\n  let isGlob = false;\n  let isExtglob = false;\n  let isGlobstar = false;\n  let braceEscaped = false;\n  let backslashes = false;\n  let negated = false;\n  let negatedExtglob = false;\n  let finished = false;\n  let braces = 0;\n  let prev;\n  let code;\n  let token = { value: '', depth: 0, isGlob: false };\n\n  const eos = () => index >= length;\n  const peek = () => str.charCodeAt(index + 1);\n  const advance = () => {\n    prev = code;\n    return str.charCodeAt(++index);\n  };\n\n  while (index < length) {\n    code = advance();\n    let next;\n\n    if (code === CHAR_BACKWARD_SLASH) {\n      backslashes = token.backslashes = true;\n      code = advance();\n\n      if (code === CHAR_LEFT_CURLY_BRACE) {\n        braceEscaped = true;\n      }\n      continue;\n    }\n\n    if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n      braces++;\n\n      while (eos() !== true && (code = advance())) {\n        if (code === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (code === CHAR_LEFT_CURLY_BRACE) {\n          braces++;\n          continue;\n        }\n\n        if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (braceEscaped !== true && code === CHAR_COMMA) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (code === CHAR_RIGHT_CURLY_BRACE) {\n          braces--;\n\n          if (braces === 0) {\n            braceEscaped = false;\n            isBrace = token.isBrace = true;\n            finished = true;\n            break;\n          }\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (code === CHAR_FORWARD_SLASH) {\n      slashes.push(index);\n      tokens.push(token);\n      token = { value: '', depth: 0, isGlob: false };\n\n      if (finished === true) continue;\n      if (prev === CHAR_DOT && index === (start + 1)) {\n        start += 2;\n        continue;\n      }\n\n      lastIndex = index + 1;\n      continue;\n    }\n\n    if (opts.noext !== true) {\n      const isExtglobChar = code === CHAR_PLUS\n        || code === CHAR_AT\n        || code === CHAR_ASTERISK\n        || code === CHAR_QUESTION_MARK\n        || code === CHAR_EXCLAMATION_MARK;\n\n      if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n        isGlob = token.isGlob = true;\n        isExtglob = token.isExtglob = true;\n        finished = true;\n        if (code === CHAR_EXCLAMATION_MARK && index === start) {\n          negatedExtglob = true;\n        }\n\n        if (scanToEnd === true) {\n          while (eos() !== true && (code = advance())) {\n            if (code === CHAR_BACKWARD_SLASH) {\n              backslashes = token.backslashes = true;\n              code = advance();\n              continue;\n            }\n\n            if (code === CHAR_RIGHT_PARENTHESES) {\n              isGlob = token.isGlob = true;\n              finished = true;\n              break;\n            }\n          }\n          continue;\n        }\n        break;\n      }\n    }\n\n    if (code === CHAR_ASTERISK) {\n      if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_QUESTION_MARK) {\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_LEFT_SQUARE_BRACKET) {\n      while (eos() !== true && (next = advance())) {\n        if (next === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n          isBracket = token.isBracket = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n          break;\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n      negated = token.negated = true;\n      start++;\n      continue;\n    }\n\n    if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n      isGlob = token.isGlob = true;\n\n      if (scanToEnd === true) {\n        while (eos() !== true && (code = advance())) {\n          if (code === CHAR_LEFT_PARENTHESES) {\n            backslashes = token.backslashes = true;\n            code = advance();\n            continue;\n          }\n\n          if (code === CHAR_RIGHT_PARENTHESES) {\n            finished = true;\n            break;\n          }\n        }\n        continue;\n      }\n      break;\n    }\n\n    if (isGlob === true) {\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n  }\n\n  if (opts.noext === true) {\n    isExtglob = false;\n    isGlob = false;\n  }\n\n  let base = str;\n  let prefix = '';\n  let glob = '';\n\n  if (start > 0) {\n    prefix = str.slice(0, start);\n    str = str.slice(start);\n    lastIndex -= start;\n  }\n\n  if (base && isGlob === true && lastIndex > 0) {\n    base = str.slice(0, lastIndex);\n    glob = str.slice(lastIndex);\n  } else if (isGlob === true) {\n    base = '';\n    glob = str;\n  } else {\n    base = str;\n  }\n\n  if (base && base !== '' && base !== '/' && base !== str) {\n    if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n      base = base.slice(0, -1);\n    }\n  }\n\n  if (opts.unescape === true) {\n    if (glob) glob = utils.removeBackslashes(glob);\n\n    if (base && backslashes === true) {\n      base = utils.removeBackslashes(base);\n    }\n  }\n\n  const state = {\n    prefix,\n    input,\n    start,\n    base,\n    glob,\n    isBrace,\n    isBracket,\n    isGlob,\n    isExtglob,\n    isGlobstar,\n    negated,\n    negatedExtglob\n  };\n\n  if (opts.tokens === true) {\n    state.maxDepth = 0;\n    if (!isPathSeparator(code)) {\n      tokens.push(token);\n    }\n    state.tokens = tokens;\n  }\n\n  if (opts.parts === true || opts.tokens === true) {\n    let prevIndex;\n\n    for (let idx = 0; idx < slashes.length; idx++) {\n      const n = prevIndex ? prevIndex + 1 : start;\n      const i = slashes[idx];\n      const value = input.slice(n, i);\n      if (opts.tokens) {\n        if (idx === 0 && start !== 0) {\n          tokens[idx].isPrefix = true;\n          tokens[idx].value = prefix;\n        } else {\n          tokens[idx].value = value;\n        }\n        depth(tokens[idx]);\n        state.maxDepth += tokens[idx].depth;\n      }\n      if (idx !== 0 || value !== '') {\n        parts.push(value);\n      }\n      prevIndex = i;\n    }\n\n    if (prevIndex && prevIndex + 1 < input.length) {\n      const value = input.slice(prevIndex + 1);\n      parts.push(value);\n\n      if (opts.tokens) {\n        tokens[tokens.length - 1].value = value;\n        depth(tokens[tokens.length - 1]);\n        state.maxDepth += tokens[tokens.length - 1].depth;\n      }\n    }\n\n    state.slashes = slashes;\n    state.parts = parts;\n  }\n\n  return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n  MAX_LENGTH,\n  POSIX_REGEX_SOURCE,\n  REGEX_NON_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_BACKREF,\n  REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n  if (typeof options.expandRange === 'function') {\n    return options.expandRange(...args, options);\n  }\n\n  args.sort();\n  const value = `[${args.join('-')}]`;\n\n  try {\n    /* eslint-disable-next-line no-new */\n    new RegExp(value);\n  } catch (ex) {\n    return args.map(v => utils.escapeRegex(v)).join('..');\n  }\n\n  return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n  return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\nconst splitTopLevel = input => {\n  const parts = [];\n  let bracket = 0;\n  let paren = 0;\n  let quote = 0;\n  let value = '';\n  let escaped = false;\n\n  for (const ch of input) {\n    if (escaped === true) {\n      value += ch;\n      escaped = false;\n      continue;\n    }\n\n    if (ch === '\\\\') {\n      value += ch;\n      escaped = true;\n      continue;\n    }\n\n    if (ch === '\"') {\n      quote = quote === 1 ? 0 : 1;\n      value += ch;\n      continue;\n    }\n\n    if (quote === 0) {\n      if (ch === '[') {\n        bracket++;\n      } else if (ch === ']' && bracket > 0) {\n        bracket--;\n      } else if (bracket === 0) {\n        if (ch === '(') {\n          paren++;\n        } else if (ch === ')' && paren > 0) {\n          paren--;\n        } else if (ch === '|' && paren === 0) {\n          parts.push(value);\n          value = '';\n          continue;\n        }\n      }\n    }\n\n    value += ch;\n  }\n\n  parts.push(value);\n  return parts;\n};\n\nconst isPlainBranch = branch => {\n  let escaped = false;\n\n  for (const ch of branch) {\n    if (escaped === true) {\n      escaped = false;\n      continue;\n    }\n\n    if (ch === '\\\\') {\n      escaped = true;\n      continue;\n    }\n\n    if (/[?*+@!()[\\]{}]/.test(ch)) {\n      return false;\n    }\n  }\n\n  return true;\n};\n\nconst normalizeSimpleBranch = branch => {\n  let value = branch.trim();\n  let changed = true;\n\n  while (changed === true) {\n    changed = false;\n\n    if (/^@\\([^\\\\()[\\]{}|]+\\)$/.test(value)) {\n      value = value.slice(2, -1);\n      changed = true;\n    }\n  }\n\n  if (!isPlainBranch(value)) {\n    return;\n  }\n\n  return value.replace(/\\\\(.)/g, '$1');\n};\n\nconst hasRepeatedCharPrefixOverlap = branches => {\n  const values = branches.map(normalizeSimpleBranch).filter(Boolean);\n\n  for (let i = 0; i < values.length; i++) {\n    for (let j = i + 1; j < values.length; j++) {\n      const a = values[i];\n      const b = values[j];\n      const char = a[0];\n\n      if (!char || a !== char.repeat(a.length) || b !== char.repeat(b.length)) {\n        continue;\n      }\n\n      if (a === b || a.startsWith(b) || b.startsWith(a)) {\n        return true;\n      }\n    }\n  }\n\n  return false;\n};\n\nconst parseRepeatedExtglob = (pattern, requireEnd = true) => {\n  if ((pattern[0] !== '+' && pattern[0] !== '*') || pattern[1] !== '(') {\n    return;\n  }\n\n  let bracket = 0;\n  let paren = 0;\n  let quote = 0;\n  let escaped = false;\n\n  for (let i = 1; i < pattern.length; i++) {\n    const ch = pattern[i];\n\n    if (escaped === true) {\n      escaped = false;\n      continue;\n    }\n\n    if (ch === '\\\\') {\n      escaped = true;\n      continue;\n    }\n\n    if (ch === '\"') {\n      quote = quote === 1 ? 0 : 1;\n      continue;\n    }\n\n    if (quote === 1) {\n      continue;\n    }\n\n    if (ch === '[') {\n      bracket++;\n      continue;\n    }\n\n    if (ch === ']' && bracket > 0) {\n      bracket--;\n      continue;\n    }\n\n    if (bracket > 0) {\n      continue;\n    }\n\n    if (ch === '(') {\n      paren++;\n      continue;\n    }\n\n    if (ch === ')') {\n      paren--;\n\n      if (paren === 0) {\n        if (requireEnd === true && i !== pattern.length - 1) {\n          return;\n        }\n\n        return {\n          type: pattern[0],\n          body: pattern.slice(2, i),\n          end: i\n        };\n      }\n    }\n  }\n};\n\nconst getStarExtglobSequenceOutput = pattern => {\n  let index = 0;\n  const chars = [];\n\n  while (index < pattern.length) {\n    const match = parseRepeatedExtglob(pattern.slice(index), false);\n\n    if (!match || match.type !== '*') {\n      return;\n    }\n\n    const branches = splitTopLevel(match.body).map(branch => branch.trim());\n    if (branches.length !== 1) {\n      return;\n    }\n\n    const branch = normalizeSimpleBranch(branches[0]);\n    if (!branch || branch.length !== 1) {\n      return;\n    }\n\n    chars.push(branch);\n    index += match.end + 1;\n  }\n\n  if (chars.length < 1) {\n    return;\n  }\n\n  const source = chars.length === 1\n    ? utils.escapeRegex(chars[0])\n    : `[${chars.map(ch => utils.escapeRegex(ch)).join('')}]`;\n\n  return `${source}*`;\n};\n\nconst repeatedExtglobRecursion = pattern => {\n  let depth = 0;\n  let value = pattern.trim();\n  let match = parseRepeatedExtglob(value);\n\n  while (match) {\n    depth++;\n    value = match.body.trim();\n    match = parseRepeatedExtglob(value);\n  }\n\n  return depth;\n};\n\nconst analyzeRepeatedExtglob = (body, options) => {\n  if (options.maxExtglobRecursion === false) {\n    return { risky: false };\n  }\n\n  const max =\n    typeof options.maxExtglobRecursion === 'number'\n      ? options.maxExtglobRecursion\n      : constants.DEFAULT_MAX_EXTGLOB_RECURSION;\n\n  const branches = splitTopLevel(body).map(branch => branch.trim());\n\n  if (branches.length > 1) {\n    if (\n      branches.some(branch => branch === '') ||\n      branches.some(branch => /^[*?]+$/.test(branch)) ||\n      hasRepeatedCharPrefixOverlap(branches)\n    ) {\n      return { risky: true };\n    }\n  }\n\n  for (const branch of branches) {\n    const safeOutput = getStarExtglobSequenceOutput(branch);\n    if (safeOutput) {\n      return { risky: true, safeOutput };\n    }\n\n    if (repeatedExtglobRecursion(branch) > max) {\n      return { risky: true };\n    }\n  }\n\n  return { risky: false };\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected a string');\n  }\n\n  input = REPLACEMENTS[input] || input;\n\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n  let len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n  const tokens = [bos];\n\n  const capture = opts.capture ? '' : '?:';\n\n  // create constants based on platform, for windows or posix\n  const PLATFORM_CHARS = constants.globChars(opts.windows);\n  const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n  const {\n    DOT_LITERAL,\n    PLUS_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOT_SLASH,\n    NO_DOTS_SLASH,\n    QMARK,\n    QMARK_NO_DOT,\n    STAR,\n    START_ANCHOR\n  } = PLATFORM_CHARS;\n\n  const globstar = opts => {\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const nodot = opts.dot ? '' : NO_DOT;\n  const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n  let star = opts.bash === true ? globstar(opts) : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  // minimatch options support\n  if (typeof opts.noext === 'boolean') {\n    opts.noextglob = opts.noext;\n  }\n\n  const state = {\n    input,\n    index: -1,\n    start: 0,\n    dot: opts.dot === true,\n    consumed: '',\n    output: '',\n    prefix: '',\n    backtrack: false,\n    negated: false,\n    brackets: 0,\n    braces: 0,\n    parens: 0,\n    quotes: 0,\n    globstar: false,\n    tokens\n  };\n\n  input = utils.removePrefix(input, state);\n  len = input.length;\n\n  const extglobs = [];\n  const braces = [];\n  const stack = [];\n  let prev = bos;\n  let value;\n\n  /**\n   * Tokenizing helpers\n   */\n\n  const eos = () => state.index === len - 1;\n  const peek = state.peek = (n = 1) => input[state.index + n];\n  const advance = state.advance = () => input[++state.index] || '';\n  const remaining = () => input.slice(state.index + 1);\n  const consume = (value = '', num = 0) => {\n    state.consumed += value;\n    state.index += num;\n  };\n\n  const append = token => {\n    state.output += token.output != null ? token.output : token.value;\n    consume(token.value);\n  };\n\n  const negate = () => {\n    let count = 1;\n\n    while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n      advance();\n      state.start++;\n      count++;\n    }\n\n    if (count % 2 === 0) {\n      return false;\n    }\n\n    state.negated = true;\n    state.start++;\n    return true;\n  };\n\n  const increment = type => {\n    state[type]++;\n    stack.push(type);\n  };\n\n  const decrement = type => {\n    state[type]--;\n    stack.pop();\n  };\n\n  /**\n   * Push tokens onto the tokens array. This helper speeds up\n   * tokenizing by 1) helping us avoid backtracking as much as possible,\n   * and 2) helping us avoid creating extra tokens when consecutive\n   * characters are plain text. This improves performance and simplifies\n   * lookbehinds.\n   */\n\n  const push = tok => {\n    if (prev.type === 'globstar') {\n      const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n      const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n      if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n        state.output = state.output.slice(0, -prev.output.length);\n        prev.type = 'star';\n        prev.value = '*';\n        prev.output = star;\n        state.output += prev.output;\n      }\n    }\n\n    if (extglobs.length && tok.type !== 'paren') {\n      extglobs[extglobs.length - 1].inner += tok.value;\n    }\n\n    if (tok.value || tok.output) append(tok);\n    if (prev && prev.type === 'text' && tok.type === 'text') {\n      prev.output = (prev.output || prev.value) + tok.value;\n      prev.value += tok.value;\n      return;\n    }\n\n    tok.prev = prev;\n    tokens.push(tok);\n    prev = tok;\n  };\n\n  const extglobOpen = (type, value) => {\n    const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n    token.prev = prev;\n    token.parens = state.parens;\n    token.output = state.output;\n    token.startIndex = state.index;\n    token.tokensIndex = tokens.length;\n    const output = (opts.capture ? '(' : '') + token.open;\n\n    increment('parens');\n    push({ type, value, output: state.output ? '' : ONE_CHAR });\n    push({ type: 'paren', extglob: true, value: advance(), output });\n    extglobs.push(token);\n  };\n\n  const extglobClose = token => {\n    const literal = input.slice(token.startIndex, state.index + 1);\n    const body = input.slice(token.startIndex + 2, state.index);\n    const analysis = analyzeRepeatedExtglob(body, opts);\n\n    if ((token.type === 'plus' || token.type === 'star') && analysis.risky) {\n      const safeOutput = analysis.safeOutput\n        ? (token.output ? '' : ONE_CHAR) + (opts.capture ? `(${analysis.safeOutput})` : analysis.safeOutput)\n        : undefined;\n      const open = tokens[token.tokensIndex];\n\n      open.type = 'text';\n      open.value = literal;\n      open.output = safeOutput || utils.escapeRegex(literal);\n\n      for (let i = token.tokensIndex + 1; i < tokens.length; i++) {\n        tokens[i].value = '';\n        tokens[i].output = '';\n        delete tokens[i].suffix;\n      }\n\n      state.output = token.output + open.output;\n      state.backtrack = true;\n\n      push({ type: 'paren', extglob: true, value, output: '' });\n      decrement('parens');\n      return;\n    }\n\n    let output = token.close + (opts.capture ? ')' : '');\n    let rest;\n\n    if (token.type === 'negate') {\n      let extglobStar = star;\n\n      if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n        extglobStar = globstar(opts);\n      }\n\n      if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n        output = token.close = `)$))${extglobStar}`;\n      }\n\n      if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n        // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n        // In this case, we need to parse the string and use it in the output of the original pattern.\n        // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n        //\n        // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n        const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n        output = token.close = `)${expression})${extglobStar})`;\n      }\n\n      if (token.prev.type === 'bos') {\n        state.negatedExtglob = true;\n      }\n    }\n\n    push({ type: 'paren', extglob: true, value, output });\n    decrement('parens');\n  };\n\n  /**\n   * Fast paths\n   */\n\n  if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n    let backslashes = false;\n\n    let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n      if (first === '\\\\') {\n        backslashes = true;\n        return m;\n      }\n\n      if (first === '?') {\n        if (esc) {\n          return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        if (index === 0) {\n          return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        return QMARK.repeat(chars.length);\n      }\n\n      if (first === '.') {\n        return DOT_LITERAL.repeat(chars.length);\n      }\n\n      if (first === '*') {\n        if (esc) {\n          return esc + first + (rest ? star : '');\n        }\n        return star;\n      }\n      return esc ? m : `\\\\${m}`;\n    });\n\n    if (backslashes === true) {\n      if (opts.unescape === true) {\n        output = output.replace(/\\\\/g, '');\n      } else {\n        output = output.replace(/\\\\+/g, m => {\n          return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n        });\n      }\n    }\n\n    if (output === input && opts.contains === true) {\n      state.output = input;\n      return state;\n    }\n\n    state.output = utils.wrapOutput(output, state, options);\n    return state;\n  }\n\n  /**\n   * Tokenize input until we reach end-of-string\n   */\n\n  while (!eos()) {\n    value = advance();\n\n    if (value === '\\u0000') {\n      continue;\n    }\n\n    /**\n     * Escaped characters\n     */\n\n    if (value === '\\\\') {\n      const next = peek();\n\n      if (next === '/' && opts.bash !== true) {\n        continue;\n      }\n\n      if (next === '.' || next === ';') {\n        continue;\n      }\n\n      if (!next) {\n        value += '\\\\';\n        push({ type: 'text', value });\n        continue;\n      }\n\n      // collapse slashes to reduce potential for exploits\n      const match = /^\\\\+/.exec(remaining());\n      let slashes = 0;\n\n      if (match && match[0].length > 2) {\n        slashes = match[0].length;\n        state.index += slashes;\n        if (slashes % 2 !== 0) {\n          value += '\\\\';\n        }\n      }\n\n      if (opts.unescape === true) {\n        value = advance();\n      } else {\n        value += advance();\n      }\n\n      if (state.brackets === 0) {\n        push({ type: 'text', value });\n        continue;\n      }\n    }\n\n    /**\n     * If we're inside a regex character class, continue\n     * until we reach the closing bracket.\n     */\n\n    if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n      if (opts.posix !== false && value === ':') {\n        const inner = prev.value.slice(1);\n        if (inner.includes('[')) {\n          prev.posix = true;\n\n          if (inner.includes(':')) {\n            const idx = prev.value.lastIndexOf('[');\n            const pre = prev.value.slice(0, idx);\n            const rest = prev.value.slice(idx + 2);\n            const posix = POSIX_REGEX_SOURCE[rest];\n            if (posix) {\n              prev.value = pre + posix;\n              state.backtrack = true;\n              advance();\n\n              if (!bos.output && tokens.indexOf(prev) === 1) {\n                bos.output = ONE_CHAR;\n              }\n              continue;\n            }\n          }\n        }\n      }\n\n      if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n        value = `\\\\${value}`;\n      }\n\n      if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n        value = `\\\\${value}`;\n      }\n\n      if (opts.posix === true && value === '!' && prev.value === '[') {\n        value = '^';\n      }\n\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * If we're inside a quoted string, continue\n     * until we reach the closing double quote.\n     */\n\n    if (state.quotes === 1 && value !== '\"') {\n      value = utils.escapeRegex(value);\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * Double quotes\n     */\n\n    if (value === '\"') {\n      state.quotes = state.quotes === 1 ? 0 : 1;\n      if (opts.keepQuotes === true) {\n        push({ type: 'text', value });\n      }\n      continue;\n    }\n\n    /**\n     * Parentheses\n     */\n\n    if (value === '(') {\n      increment('parens');\n      push({ type: 'paren', value });\n      continue;\n    }\n\n    if (value === ')') {\n      if (state.parens === 0 && opts.strictBrackets === true) {\n        throw new SyntaxError(syntaxError('opening', '('));\n      }\n\n      const extglob = extglobs[extglobs.length - 1];\n      if (extglob && state.parens === extglob.parens + 1) {\n        extglobClose(extglobs.pop());\n        continue;\n      }\n\n      push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n      decrement('parens');\n      continue;\n    }\n\n    /**\n     * Square brackets\n     */\n\n    if (value === '[') {\n      if (opts.nobracket === true || !remaining().includes(']')) {\n        if (opts.nobracket !== true && opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('closing', ']'));\n        }\n\n        value = `\\\\${value}`;\n      } else {\n        increment('brackets');\n      }\n\n      push({ type: 'bracket', value });\n      continue;\n    }\n\n    if (value === ']') {\n      if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      if (state.brackets === 0) {\n        if (opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('opening', '['));\n        }\n\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      decrement('brackets');\n\n      const prevValue = prev.value.slice(1);\n      if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n        value = `/${value}`;\n      }\n\n      prev.value += value;\n      append({ value });\n\n      // when literal brackets are explicitly disabled\n      // assume we should match with a regex character class\n      if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n        continue;\n      }\n\n      const escaped = utils.escapeRegex(prev.value);\n      state.output = state.output.slice(0, -prev.value.length);\n\n      // when literal brackets are explicitly enabled\n      // assume we should escape the brackets to match literal characters\n      if (opts.literalBrackets === true) {\n        state.output += escaped;\n        prev.value = escaped;\n        continue;\n      }\n\n      // when the user specifies nothing, try to match both\n      prev.value = `(${capture}${escaped}|${prev.value})`;\n      state.output += prev.value;\n      continue;\n    }\n\n    /**\n     * Braces\n     */\n\n    if (value === '{' && opts.nobrace !== true) {\n      increment('braces');\n\n      const open = {\n        type: 'brace',\n        value,\n        output: '(',\n        outputIndex: state.output.length,\n        tokensIndex: state.tokens.length\n      };\n\n      braces.push(open);\n      push(open);\n      continue;\n    }\n\n    if (value === '}') {\n      const brace = braces[braces.length - 1];\n\n      if (opts.nobrace === true || !brace) {\n        push({ type: 'text', value, output: value });\n        continue;\n      }\n\n      let output = ')';\n\n      if (brace.dots === true) {\n        const arr = tokens.slice();\n        const range = [];\n\n        for (let i = arr.length - 1; i >= 0; i--) {\n          tokens.pop();\n          if (arr[i].type === 'brace') {\n            break;\n          }\n          if (arr[i].type !== 'dots') {\n            range.unshift(arr[i].value);\n          }\n        }\n\n        output = expandRange(range, opts);\n        state.backtrack = true;\n      }\n\n      if (brace.comma !== true && brace.dots !== true) {\n        const out = state.output.slice(0, brace.outputIndex);\n        const toks = state.tokens.slice(brace.tokensIndex);\n        brace.value = brace.output = '\\\\{';\n        value = output = '\\\\}';\n        state.output = out;\n        for (const t of toks) {\n          state.output += (t.output || t.value);\n        }\n      }\n\n      push({ type: 'brace', value, output });\n      decrement('braces');\n      braces.pop();\n      continue;\n    }\n\n    /**\n     * Pipes\n     */\n\n    if (value === '|') {\n      if (extglobs.length > 0) {\n        extglobs[extglobs.length - 1].conditions++;\n      }\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Commas\n     */\n\n    if (value === ',') {\n      let output = value;\n\n      const brace = braces[braces.length - 1];\n      if (brace && stack[stack.length - 1] === 'braces') {\n        brace.comma = true;\n        output = '|';\n      }\n\n      push({ type: 'comma', value, output });\n      continue;\n    }\n\n    /**\n     * Slashes\n     */\n\n    if (value === '/') {\n      // if the beginning of the glob is \"./\", advance the start\n      // to the current index, and don't add the \"./\" characters\n      // to the state. This greatly simplifies lookbehinds when\n      // checking for BOS characters like \"!\" and \".\" (not \"./\")\n      if (prev.type === 'dot' && state.index === state.start + 1) {\n        state.start = state.index + 1;\n        state.consumed = '';\n        state.output = '';\n        tokens.pop();\n        prev = bos; // reset \"prev\" to the first token\n        continue;\n      }\n\n      push({ type: 'slash', value, output: SLASH_LITERAL });\n      continue;\n    }\n\n    /**\n     * Dots\n     */\n\n    if (value === '.') {\n      if (state.braces > 0 && prev.type === 'dot') {\n        if (prev.value === '.') prev.output = DOT_LITERAL;\n        const brace = braces[braces.length - 1];\n        prev.type = 'dots';\n        prev.output += value;\n        prev.value += value;\n        brace.dots = true;\n        continue;\n      }\n\n      if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n        push({ type: 'text', value, output: DOT_LITERAL });\n        continue;\n      }\n\n      push({ type: 'dot', value, output: DOT_LITERAL });\n      continue;\n    }\n\n    /**\n     * Question marks\n     */\n\n    if (value === '?') {\n      const isGroup = prev && prev.value === '(';\n      if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('qmark', value);\n        continue;\n      }\n\n      if (prev && prev.type === 'paren') {\n        const next = peek();\n        let output = value;\n\n        if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n          output = `\\\\${value}`;\n        }\n\n        push({ type: 'text', value, output });\n        continue;\n      }\n\n      if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n        push({ type: 'qmark', value, output: QMARK_NO_DOT });\n        continue;\n      }\n\n      push({ type: 'qmark', value, output: QMARK });\n      continue;\n    }\n\n    /**\n     * Exclamation\n     */\n\n    if (value === '!') {\n      if (opts.noextglob !== true && peek() === '(') {\n        if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n          extglobOpen('negate', value);\n          continue;\n        }\n      }\n\n      if (opts.nonegate !== true && state.index === 0) {\n        negate();\n        continue;\n      }\n    }\n\n    /**\n     * Plus\n     */\n\n    if (value === '+') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('plus', value);\n        continue;\n      }\n\n      if ((prev && prev.value === '(') || opts.regex === false) {\n        push({ type: 'plus', value, output: PLUS_LITERAL });\n        continue;\n      }\n\n      if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n        push({ type: 'plus', value });\n        continue;\n      }\n\n      push({ type: 'plus', value: PLUS_LITERAL });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value === '@') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        push({ type: 'at', extglob: true, value, output: '' });\n        continue;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value !== '*') {\n      if (value === '$' || value === '^') {\n        value = `\\\\${value}`;\n      }\n\n      const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n      if (match) {\n        value += match[0];\n        state.index += match[0].length;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Stars\n     */\n\n    if (prev && (prev.type === 'globstar' || prev.star === true)) {\n      prev.type = 'star';\n      prev.star = true;\n      prev.value += value;\n      prev.output = star;\n      state.backtrack = true;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    let rest = remaining();\n    if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n      extglobOpen('star', value);\n      continue;\n    }\n\n    if (prev.type === 'star') {\n      if (opts.noglobstar === true) {\n        consume(value);\n        continue;\n      }\n\n      const prior = prev.prev;\n      const before = prior.prev;\n      const isStart = prior.type === 'slash' || prior.type === 'bos';\n      const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n      if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n      const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n      if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      // strip consecutive `/**/`\n      while (rest.slice(0, 3) === '/**') {\n        const after = input[state.index + 4];\n        if (after && after !== '/') {\n          break;\n        }\n        rest = rest.slice(3);\n        consume('/**', 3);\n      }\n\n      if (prior.type === 'bos' && eos()) {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = globstar(opts);\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n        prev.value += value;\n        state.globstar = true;\n        state.output += prior.output + prev.output;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n        const end = rest[1] !== void 0 ? '|$' : '';\n\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n        prev.value += value;\n\n        state.output += prior.output + prev.output;\n        state.globstar = true;\n\n        consume(value + advance());\n\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      if (prior.type === 'bos' && rest[0] === '/') {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value + advance());\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      // remove single star from output\n      state.output = state.output.slice(0, -prev.output.length);\n\n      // reset previous token to globstar\n      prev.type = 'globstar';\n      prev.output = globstar(opts);\n      prev.value += value;\n\n      // reset output with globstar\n      state.output += prev.output;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    const token = { type: 'star', value, output: star };\n\n    if (opts.bash === true) {\n      token.output = '.*?';\n      if (prev.type === 'bos' || prev.type === 'slash') {\n        token.output = nodot + token.output;\n      }\n      push(token);\n      continue;\n    }\n\n    if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n      token.output = value;\n      push(token);\n      continue;\n    }\n\n    if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n      if (prev.type === 'dot') {\n        state.output += NO_DOT_SLASH;\n        prev.output += NO_DOT_SLASH;\n\n      } else if (opts.dot === true) {\n        state.output += NO_DOTS_SLASH;\n        prev.output += NO_DOTS_SLASH;\n\n      } else {\n        state.output += nodot;\n        prev.output += nodot;\n      }\n\n      if (peek() !== '*') {\n        state.output += ONE_CHAR;\n        prev.output += ONE_CHAR;\n      }\n    }\n\n    push(token);\n  }\n\n  while (state.brackets > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n    state.output = utils.escapeLast(state.output, '[');\n    decrement('brackets');\n  }\n\n  while (state.parens > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n    state.output = utils.escapeLast(state.output, '(');\n    decrement('parens');\n  }\n\n  while (state.braces > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n    state.output = utils.escapeLast(state.output, '{');\n    decrement('braces');\n  }\n\n  if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n    push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n  }\n\n  // rebuild the output if we had to backtrack at any point\n  if (state.backtrack === true) {\n    state.output = '';\n\n    for (const token of state.tokens) {\n      state.output += token.output != null ? token.output : token.value;\n\n      if (token.suffix) {\n        state.output += token.suffix;\n      }\n    }\n  }\n\n  return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n  const len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  input = REPLACEMENTS[input] || input;\n\n  // create constants based on platform, for windows or posix\n  const {\n    DOT_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOTS,\n    NO_DOTS_SLASH,\n    STAR,\n    START_ANCHOR\n  } = constants.globChars(opts.windows);\n\n  const nodot = opts.dot ? NO_DOTS : NO_DOT;\n  const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n  const capture = opts.capture ? '' : '?:';\n  const state = { negated: false, prefix: '' };\n  let star = opts.bash === true ? '.*?' : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  const globstar = opts => {\n    if (opts.noglobstar === true) return star;\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const create = str => {\n    switch (str) {\n      case '*':\n        return `${nodot}${ONE_CHAR}${star}`;\n\n      case '.*':\n        return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*.*':\n        return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*/*':\n        return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n      case '**':\n        return nodot + globstar(opts);\n\n      case '**/*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n      case '**/*.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '**/.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      default: {\n        const match = /^(.*?)\\.(\\w+)$/.exec(str);\n        if (!match) return;\n\n        const source = create(match[1]);\n        if (!source) return;\n\n        return source + DOT_LITERAL + match[2];\n      }\n    }\n  };\n\n  const output = utils.removePrefix(input, state);\n  let source = create(output);\n\n  if (source && opts.strictSlashes !== true) {\n    source += `${SLASH_LITERAL}?`;\n  }\n\n  return source;\n};\n\nmodule.exports = parse;\n","// can-promise has a crash in some versions of react native that dont have\n// standard global objects\n// https://github.com/soldair/node-qrcode/issues/157\n\nmodule.exports = function () {\n  return typeof Promise === 'function' && Promise.prototype && Promise.prototype.then\n}\n","function BitBuffer () {\n  this.buffer = []\n  this.length = 0\n}\n\nBitBuffer.prototype = {\n\n  get: function (index) {\n    const bufIndex = Math.floor(index / 8)\n    return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1\n  },\n\n  put: function (num, length) {\n    for (let i = 0; i < length; i++) {\n      this.putBit(((num >>> (length - i - 1)) & 1) === 1)\n    }\n  },\n\n  getLengthInBits: function () {\n    return this.length\n  },\n\n  putBit: function (bit) {\n    const bufIndex = Math.floor(this.length / 8)\n    if (this.buffer.length <= bufIndex) {\n      this.buffer.push(0)\n    }\n\n    if (bit) {\n      this.buffer[bufIndex] |= (0x80 >>> (this.length % 8))\n    }\n\n    this.length++\n  }\n}\n\nmodule.exports = BitBuffer\n","/**\n * Helper class to handle QR Code symbol modules\n *\n * @param {Number} size Symbol size\n */\nfunction BitMatrix (size) {\n  if (!size || size < 1) {\n    throw new Error('BitMatrix size must be defined and greater than 0')\n  }\n\n  this.size = size\n  this.data = new Uint8Array(size * size)\n  this.reservedBit = new Uint8Array(size * size)\n}\n\n/**\n * Set bit value at specified location\n * If reserved flag is set, this bit will be ignored during masking process\n *\n * @param {Number}  row\n * @param {Number}  col\n * @param {Boolean} value\n * @param {Boolean} reserved\n */\nBitMatrix.prototype.set = function (row, col, value, reserved) {\n  const index = row * this.size + col\n  this.data[index] = value\n  if (reserved) this.reservedBit[index] = true\n}\n\n/**\n * Returns bit value at specified location\n *\n * @param  {Number}  row\n * @param  {Number}  col\n * @return {Boolean}\n */\nBitMatrix.prototype.get = function (row, col) {\n  return this.data[row * this.size + col]\n}\n\n/**\n * Applies xor operator at specified location\n * (used during masking process)\n *\n * @param {Number}  row\n * @param {Number}  col\n * @param {Boolean} value\n */\nBitMatrix.prototype.xor = function (row, col, value) {\n  this.data[row * this.size + col] ^= value\n}\n\n/**\n * Check if bit at specified location is reserved\n *\n * @param {Number}   row\n * @param {Number}   col\n * @return {Boolean}\n */\nBitMatrix.prototype.isReserved = function (row, col) {\n  return this.reservedBit[row * this.size + col]\n}\n\nmodule.exports = BitMatrix\n","/**\n * Alignment pattern are fixed reference pattern in defined positions\n * in a matrix symbology, which enables the decode software to re-synchronise\n * the coordinate mapping of the image modules in the event of moderate amounts\n * of distortion of the image.\n *\n * Alignment patterns are present only in QR Code symbols of version 2 or larger\n * and their number depends on the symbol version.\n */\n\nconst getSymbolSize = require('./utils').getSymbolSize\n\n/**\n * Calculate the row/column coordinates of the center module of each alignment pattern\n * for the specified QR Code version.\n *\n * The alignment patterns are positioned symmetrically on either side of the diagonal\n * running from the top left corner of the symbol to the bottom right corner.\n *\n * Since positions are simmetrical only half of the coordinates are returned.\n * Each item of the array will represent in turn the x and y coordinate.\n * @see {@link getPositions}\n *\n * @param  {Number} version QR Code version\n * @return {Array}          Array of coordinate\n */\nexports.getRowColCoords = function getRowColCoords (version) {\n  if (version === 1) return []\n\n  const posCount = Math.floor(version / 7) + 2\n  const size = getSymbolSize(version)\n  const intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2\n  const positions = [size - 7] // Last coord is always (size - 7)\n\n  for (let i = 1; i < posCount - 1; i++) {\n    positions[i] = positions[i - 1] - intervals\n  }\n\n  positions.push(6) // First coord is always 6\n\n  return positions.reverse()\n}\n\n/**\n * Returns an array containing the positions of each alignment pattern.\n * Each array's element represent the center point of the pattern as (x, y) coordinates\n *\n * Coordinates are calculated expanding the row/column coordinates returned by {@link getRowColCoords}\n * and filtering out the items that overlaps with finder pattern\n *\n * @example\n * For a Version 7 symbol {@link getRowColCoords} returns values 6, 22 and 38.\n * The alignment patterns, therefore, are to be centered on (row, column)\n * positions (6,22), (22,6), (22,22), (22,38), (38,22), (38,38).\n * Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns\n * and are not therefore used for alignment patterns.\n *\n * let pos = getPositions(7)\n * // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]\n *\n * @param  {Number} version QR Code version\n * @return {Array}          Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n  const coords = []\n  const pos = exports.getRowColCoords(version)\n  const posLength = pos.length\n\n  for (let i = 0; i < posLength; i++) {\n    for (let j = 0; j < posLength; j++) {\n      // Skip if position is occupied by finder patterns\n      if ((i === 0 && j === 0) || // top-left\n          (i === 0 && j === posLength - 1) || // bottom-left\n          (i === posLength - 1 && j === 0)) { // top-right\n        continue\n      }\n\n      coords.push([pos[i], pos[j]])\n    }\n  }\n\n  return coords\n}\n","const ECLevel = require('./error-correction-level')\r\n\r\nconst EC_BLOCKS_TABLE = [\r\n// L  M  Q  H\r\n  1, 1, 1, 1,\r\n  1, 1, 1, 1,\r\n  1, 1, 2, 2,\r\n  1, 2, 2, 4,\r\n  1, 2, 4, 4,\r\n  2, 4, 4, 4,\r\n  2, 4, 6, 5,\r\n  2, 4, 6, 6,\r\n  2, 5, 8, 8,\r\n  4, 5, 8, 8,\r\n  4, 5, 8, 11,\r\n  4, 8, 10, 11,\r\n  4, 9, 12, 16,\r\n  4, 9, 16, 16,\r\n  6, 10, 12, 18,\r\n  6, 10, 17, 16,\r\n  6, 11, 16, 19,\r\n  6, 13, 18, 21,\r\n  7, 14, 21, 25,\r\n  8, 16, 20, 25,\r\n  8, 17, 23, 25,\r\n  9, 17, 23, 34,\r\n  9, 18, 25, 30,\r\n  10, 20, 27, 32,\r\n  12, 21, 29, 35,\r\n  12, 23, 34, 37,\r\n  12, 25, 34, 40,\r\n  13, 26, 35, 42,\r\n  14, 28, 38, 45,\r\n  15, 29, 40, 48,\r\n  16, 31, 43, 51,\r\n  17, 33, 45, 54,\r\n  18, 35, 48, 57,\r\n  19, 37, 51, 60,\r\n  19, 38, 53, 63,\r\n  20, 40, 56, 66,\r\n  21, 43, 59, 70,\r\n  22, 45, 62, 74,\r\n  24, 47, 65, 77,\r\n  25, 49, 68, 81\r\n]\r\n\r\nconst EC_CODEWORDS_TABLE = [\r\n// L  M  Q  H\r\n  7, 10, 13, 17,\r\n  10, 16, 22, 28,\r\n  15, 26, 36, 44,\r\n  20, 36, 52, 64,\r\n  26, 48, 72, 88,\r\n  36, 64, 96, 112,\r\n  40, 72, 108, 130,\r\n  48, 88, 132, 156,\r\n  60, 110, 160, 192,\r\n  72, 130, 192, 224,\r\n  80, 150, 224, 264,\r\n  96, 176, 260, 308,\r\n  104, 198, 288, 352,\r\n  120, 216, 320, 384,\r\n  132, 240, 360, 432,\r\n  144, 280, 408, 480,\r\n  168, 308, 448, 532,\r\n  180, 338, 504, 588,\r\n  196, 364, 546, 650,\r\n  224, 416, 600, 700,\r\n  224, 442, 644, 750,\r\n  252, 476, 690, 816,\r\n  270, 504, 750, 900,\r\n  300, 560, 810, 960,\r\n  312, 588, 870, 1050,\r\n  336, 644, 952, 1110,\r\n  360, 700, 1020, 1200,\r\n  390, 728, 1050, 1260,\r\n  420, 784, 1140, 1350,\r\n  450, 812, 1200, 1440,\r\n  480, 868, 1290, 1530,\r\n  510, 924, 1350, 1620,\r\n  540, 980, 1440, 1710,\r\n  570, 1036, 1530, 1800,\r\n  570, 1064, 1590, 1890,\r\n  600, 1120, 1680, 1980,\r\n  630, 1204, 1770, 2100,\r\n  660, 1260, 1860, 2220,\r\n  720, 1316, 1950, 2310,\r\n  750, 1372, 2040, 2430\r\n]\r\n\r\n/**\r\n * Returns the number of error correction block that the QR Code should contain\r\n * for the specified version and error correction level.\r\n *\r\n * @param  {Number} version              QR Code version\r\n * @param  {Number} errorCorrectionLevel Error correction level\r\n * @return {Number}                      Number of error correction blocks\r\n */\r\nexports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {\r\n  switch (errorCorrectionLevel) {\r\n    case ECLevel.L:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]\r\n    case ECLevel.M:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]\r\n    case ECLevel.Q:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]\r\n    case ECLevel.H:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]\r\n    default:\r\n      return undefined\r\n  }\r\n}\r\n\r\n/**\r\n * Returns the number of error correction codewords to use for the specified\r\n * version and error correction level.\r\n *\r\n * @param  {Number} version              QR Code version\r\n * @param  {Number} errorCorrectionLevel Error correction level\r\n * @return {Number}                      Number of error correction codewords\r\n */\r\nexports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {\r\n  switch (errorCorrectionLevel) {\r\n    case ECLevel.L:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]\r\n    case ECLevel.M:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]\r\n    case ECLevel.Q:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]\r\n    case ECLevel.H:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]\r\n    default:\r\n      return undefined\r\n  }\r\n}\r\n","const Polynomial = require('./polynomial')\n\nfunction ReedSolomonEncoder (degree) {\n  this.genPoly = undefined\n  this.degree = degree\n\n  if (this.degree) this.initialize(this.degree)\n}\n\n/**\n * Initialize the encoder.\n * The input param should correspond to the number of error correction codewords.\n *\n * @param  {Number} degree\n */\nReedSolomonEncoder.prototype.initialize = function initialize (degree) {\n  // create an irreducible generator polynomial\n  this.degree = degree\n  this.genPoly = Polynomial.generateECPolynomial(this.degree)\n}\n\n/**\n * Encodes a chunk of data\n *\n * @param  {Uint8Array} data Buffer containing input data\n * @return {Uint8Array}      Buffer containing encoded data\n */\nReedSolomonEncoder.prototype.encode = function encode (data) {\n  if (!this.genPoly) {\n    throw new Error('Encoder not initialized')\n  }\n\n  // Calculate EC for this data block\n  // extends data size to data+genPoly size\n  const paddedData = new Uint8Array(data.length + this.degree)\n  paddedData.set(data)\n\n  // The error correction codewords are the remainder after dividing the data codewords\n  // by a generator polynomial\n  const remainder = Polynomial.mod(paddedData, this.genPoly)\n\n  // return EC data blocks (last n byte, where n is the degree of genPoly)\n  // If coefficients number in remainder are less than genPoly degree,\n  // pad with 0s to the left to reach the needed number of coefficients\n  const start = this.degree - remainder.length\n  if (start > 0) {\n    const buff = new Uint8Array(this.degree)\n    buff.set(remainder, start)\n\n    return buff\n  }\n\n  return remainder\n}\n\nmodule.exports = ReedSolomonEncoder\n","const GF = require('./galois-field')\n\n/**\n * Multiplies two polynomials inside Galois Field\n *\n * @param  {Uint8Array} p1 Polynomial\n * @param  {Uint8Array} p2 Polynomial\n * @return {Uint8Array}    Product of p1 and p2\n */\nexports.mul = function mul (p1, p2) {\n  const coeff = new Uint8Array(p1.length + p2.length - 1)\n\n  for (let i = 0; i < p1.length; i++) {\n    for (let j = 0; j < p2.length; j++) {\n      coeff[i + j] ^= GF.mul(p1[i], p2[j])\n    }\n  }\n\n  return coeff\n}\n\n/**\n * Calculate the remainder of polynomials division\n *\n * @param  {Uint8Array} divident Polynomial\n * @param  {Uint8Array} divisor  Polynomial\n * @return {Uint8Array}          Remainder\n */\nexports.mod = function mod (divident, divisor) {\n  let result = new Uint8Array(divident)\n\n  while ((result.length - divisor.length) >= 0) {\n    const coeff = result[0]\n\n    for (let i = 0; i < divisor.length; i++) {\n      result[i] ^= GF.mul(divisor[i], coeff)\n    }\n\n    // remove all zeros from buffer head\n    let offset = 0\n    while (offset < result.length && result[offset] === 0) offset++\n    result = result.slice(offset)\n  }\n\n  return result\n}\n\n/**\n * Generate an irreducible generator polynomial of specified degree\n * (used by Reed-Solomon encoder)\n *\n * @param  {Number} degree Degree of the generator polynomial\n * @return {Uint8Array}    Buffer containing polynomial coefficients\n */\nexports.generateECPolynomial = function generateECPolynomial (degree) {\n  let poly = new Uint8Array([1])\n  for (let i = 0; i < degree; i++) {\n    poly = exports.mul(poly, new Uint8Array([1, GF.exp(i)]))\n  }\n\n  return poly\n}\n","/**\n * Check if QR Code version is valid\n *\n * @param  {Number}  version QR Code version\n * @return {Boolean}         true if valid version, false otherwise\n */\nexports.isValid = function isValid (version) {\n  return !isNaN(version) && version >= 1 && version <= 40\n}\n","const numeric = '[0-9]+'\nconst alphanumeric = '[A-Z $%*+\\\\-./:]+'\nlet kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +\n  '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +\n  '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +\n  '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'\nkanji = kanji.replace(/u/g, '\\\\u')\n\nconst byte = '(?:(?![A-Z0-9 $%*+\\\\-./:]|' + kanji + ')(?:.|[\\r\\n]))+'\n\nexports.KANJI = new RegExp(kanji, 'g')\nexports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\\\-./:]+', 'g')\nexports.BYTE = new RegExp(byte, 'g')\nexports.NUMERIC = new RegExp(numeric, 'g')\nexports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')\n\nconst TEST_KANJI = new RegExp('^' + kanji + '$')\nconst TEST_NUMERIC = new RegExp('^' + numeric + '$')\nconst TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\\\-./:]+$')\n\nexports.testKanji = function testKanji (str) {\n  return TEST_KANJI.test(str)\n}\n\nexports.testNumeric = function testNumeric (str) {\n  return TEST_NUMERIC.test(str)\n}\n\nexports.testAlphanumeric = function testAlphanumeric (str) {\n  return TEST_ALPHANUMERIC.test(str)\n}\n","const Mode = require('./mode')\n\nfunction NumericData (data) {\n  this.mode = Mode.NUMERIC\n  this.data = data.toString()\n}\n\nNumericData.getBitsLength = function getBitsLength (length) {\n  return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)\n}\n\nNumericData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nNumericData.prototype.getBitsLength = function getBitsLength () {\n  return NumericData.getBitsLength(this.data.length)\n}\n\nNumericData.prototype.write = function write (bitBuffer) {\n  let i, group, value\n\n  // The input data string is divided into groups of three digits,\n  // and each group is converted to its 10-bit binary equivalent.\n  for (i = 0; i + 3 <= this.data.length; i += 3) {\n    group = this.data.substr(i, 3)\n    value = parseInt(group, 10)\n\n    bitBuffer.put(value, 10)\n  }\n\n  // If the number of input digits is not an exact multiple of three,\n  // the final one or two digits are converted to 4 or 7 bits respectively.\n  const remainingNum = this.data.length - i\n  if (remainingNum > 0) {\n    group = this.data.substr(i)\n    value = parseInt(group, 10)\n\n    bitBuffer.put(value, remainingNum * 3 + 1)\n  }\n}\n\nmodule.exports = NumericData\n","const Mode = require('./mode')\n\n/**\n * Array of characters available in alphanumeric mode\n *\n * As per QR Code specification, to each character\n * is assigned a value from 0 to 44 which in this case coincides\n * with the array index\n *\n * @type {Array}\n */\nconst ALPHA_NUM_CHARS = [\n  '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\n  ' ', '$', '%', '*', '+', '-', '.', '/', ':'\n]\n\nfunction AlphanumericData (data) {\n  this.mode = Mode.ALPHANUMERIC\n  this.data = data\n}\n\nAlphanumericData.getBitsLength = function getBitsLength (length) {\n  return 11 * Math.floor(length / 2) + 6 * (length % 2)\n}\n\nAlphanumericData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nAlphanumericData.prototype.getBitsLength = function getBitsLength () {\n  return AlphanumericData.getBitsLength(this.data.length)\n}\n\nAlphanumericData.prototype.write = function write (bitBuffer) {\n  let i\n\n  // Input data characters are divided into groups of two characters\n  // and encoded as 11-bit binary codes.\n  for (i = 0; i + 2 <= this.data.length; i += 2) {\n    // The character value of the first character is multiplied by 45\n    let value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45\n\n    // The character value of the second digit is added to the product\n    value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])\n\n    // The sum is then stored as 11-bit binary number\n    bitBuffer.put(value, 11)\n  }\n\n  // If the number of input data characters is not a multiple of two,\n  // the character value of the final character is encoded as a 6-bit binary number.\n  if (this.data.length % 2) {\n    bitBuffer.put(ALPHA_NUM_CHARS.indexOf(this.data[i]), 6)\n  }\n}\n\nmodule.exports = AlphanumericData\n","const Mode = require('./mode')\n\nfunction ByteData (data) {\n  this.mode = Mode.BYTE\n  if (typeof (data) === 'string') {\n    this.data = new TextEncoder().encode(data)\n  } else {\n    this.data = new Uint8Array(data)\n  }\n}\n\nByteData.getBitsLength = function getBitsLength (length) {\n  return length * 8\n}\n\nByteData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nByteData.prototype.getBitsLength = function getBitsLength () {\n  return ByteData.getBitsLength(this.data.length)\n}\n\nByteData.prototype.write = function (bitBuffer) {\n  for (let i = 0, l = this.data.length; i < l; i++) {\n    bitBuffer.put(this.data[i], 8)\n  }\n}\n\nmodule.exports = ByteData\n","const Mode = require('./mode')\nconst Utils = require('./utils')\n\nfunction KanjiData (data) {\n  this.mode = Mode.KANJI\n  this.data = data\n}\n\nKanjiData.getBitsLength = function getBitsLength (length) {\n  return length * 13\n}\n\nKanjiData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nKanjiData.prototype.getBitsLength = function getBitsLength () {\n  return KanjiData.getBitsLength(this.data.length)\n}\n\nKanjiData.prototype.write = function (bitBuffer) {\n  let i\n\n  // In the Shift JIS system, Kanji characters are represented by a two byte combination.\n  // These byte values are shifted from the JIS X 0208 values.\n  // JIS X 0208 gives details of the shift coded representation.\n  for (i = 0; i < this.data.length; i++) {\n    let value = Utils.toSJIS(this.data[i])\n\n    // For characters with Shift JIS values from 0x8140 to 0x9FFC:\n    if (value >= 0x8140 && value <= 0x9FFC) {\n      // Subtract 0x8140 from Shift JIS value\n      value -= 0x8140\n\n    // For characters with Shift JIS values from 0xE040 to 0xEBBF\n    } else if (value >= 0xE040 && value <= 0xEBBF) {\n      // Subtract 0xC140 from Shift JIS value\n      value -= 0xC140\n    } else {\n      throw new Error(\n        'Invalid SJIS character: ' + this.data[i] + '\\n' +\n        'Make sure your charset is UTF-8')\n    }\n\n    // Multiply most significant byte of result by 0xC0\n    // and add least significant byte to product\n    value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff)\n\n    // Convert result to a 13-bit binary string\n    bitBuffer.put(value, 13)\n  }\n}\n\nmodule.exports = KanjiData\n","'use strict';\n\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n *   Wyatt Baldwin <self@wyattbaldwin.com>\n *   All rights reserved\n *\n * Licensed under the MIT license.\n *\n *   http://www.opensource.org/licenses/mit-license.php\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nvar dijkstra = {\n  single_source_shortest_paths: function(graph, s, d) {\n    // Predecessor map for each node that has been encountered.\n    // node ID => predecessor node ID\n    var predecessors = {};\n\n    // Costs of shortest paths from s to all nodes encountered.\n    // node ID => cost\n    var costs = {};\n    costs[s] = 0;\n\n    // Costs of shortest paths from s to all nodes encountered; differs from\n    // `costs` in that it provides easy access to the node that currently has\n    // the known shortest path from s.\n    // XXX: Do we actually need both `costs` and `open`?\n    var open = dijkstra.PriorityQueue.make();\n    open.push(s, 0);\n\n    var closest,\n        u, v,\n        cost_of_s_to_u,\n        adjacent_nodes,\n        cost_of_e,\n        cost_of_s_to_u_plus_cost_of_e,\n        cost_of_s_to_v,\n        first_visit;\n    while (!open.empty()) {\n      // In the nodes remaining in graph that have a known cost from s,\n      // find the node, u, that currently has the shortest path from s.\n      closest = open.pop();\n      u = closest.value;\n      cost_of_s_to_u = closest.cost;\n\n      // Get nodes adjacent to u...\n      adjacent_nodes = graph[u] || {};\n\n      // ...and explore the edges that connect u to those nodes, updating\n      // the cost of the shortest paths to any or all of those nodes as\n      // necessary. v is the node across the current edge from u.\n      for (v in adjacent_nodes) {\n        if (adjacent_nodes.hasOwnProperty(v)) {\n          // Get the cost of the edge running from u to v.\n          cost_of_e = adjacent_nodes[v];\n\n          // Cost of s to u plus the cost of u to v across e--this is *a*\n          // cost from s to v that may or may not be less than the current\n          // known cost to v.\n          cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n          // If we haven't visited v yet OR if the current known cost from s to\n          // v is greater than the new cost we just found (cost of s to u plus\n          // cost of u to v across e), update v's cost in the cost list and\n          // update v's predecessor in the predecessor list (it's now u).\n          cost_of_s_to_v = costs[v];\n          first_visit = (typeof costs[v] === 'undefined');\n          if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n            costs[v] = cost_of_s_to_u_plus_cost_of_e;\n            open.push(v, cost_of_s_to_u_plus_cost_of_e);\n            predecessors[v] = u;\n          }\n        }\n      }\n    }\n\n    if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {\n      var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');\n      throw new Error(msg);\n    }\n\n    return predecessors;\n  },\n\n  extract_shortest_path_from_predecessor_list: function(predecessors, d) {\n    var nodes = [];\n    var u = d;\n    var predecessor;\n    while (u) {\n      nodes.push(u);\n      predecessor = predecessors[u];\n      u = predecessors[u];\n    }\n    nodes.reverse();\n    return nodes;\n  },\n\n  find_path: function(graph, s, d) {\n    var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);\n    return dijkstra.extract_shortest_path_from_predecessor_list(\n      predecessors, d);\n  },\n\n  /**\n   * A very naive priority queue implementation.\n   */\n  PriorityQueue: {\n    make: function (opts) {\n      var T = dijkstra.PriorityQueue,\n          t = {},\n          key;\n      opts = opts || {};\n      for (key in T) {\n        if (T.hasOwnProperty(key)) {\n          t[key] = T[key];\n        }\n      }\n      t.queue = [];\n      t.sorter = opts.sorter || T.default_sorter;\n      return t;\n    },\n\n    default_sorter: function (a, b) {\n      return a.cost - b.cost;\n    },\n\n    /**\n     * Add a new item to the queue and ensure the highest priority element\n     * is at the front of the queue.\n     */\n    push: function (value, cost) {\n      var item = {value: value, cost: cost};\n      this.queue.push(item);\n      this.queue.sort(this.sorter);\n    },\n\n    /**\n     * Return the highest priority element in the queue.\n     */\n    pop: function () {\n      return this.queue.shift();\n    },\n\n    empty: function () {\n      return this.queue.length === 0;\n    }\n  }\n};\n\n\n// node.js module exports\nif (typeof module !== 'undefined') {\n  module.exports = dijkstra;\n}\n","const Utils = require('./utils')\n\nfunction clearCanvas (ctx, canvas, size) {\n  ctx.clearRect(0, 0, canvas.width, canvas.height)\n\n  if (!canvas.style) canvas.style = {}\n  canvas.height = size\n  canvas.width = size\n  canvas.style.height = size + 'px'\n  canvas.style.width = size + 'px'\n}\n\nfunction getCanvasElement () {\n  try {\n    return document.createElement('canvas')\n  } catch (e) {\n    throw new Error('You need to specify a canvas element')\n  }\n}\n\nexports.render = function render (qrData, canvas, options) {\n  let opts = options\n  let canvasEl = canvas\n\n  if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n    opts = canvas\n    canvas = undefined\n  }\n\n  if (!canvas) {\n    canvasEl = getCanvasElement()\n  }\n\n  opts = Utils.getOptions(opts)\n  const size = Utils.getImageWidth(qrData.modules.size, opts)\n\n  const ctx = canvasEl.getContext('2d')\n  const image = ctx.createImageData(size, size)\n  Utils.qrToImageData(image.data, qrData, opts)\n\n  clearCanvas(ctx, canvasEl, size)\n  ctx.putImageData(image, 0, 0)\n\n  return canvasEl\n}\n\nexports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {\n  let opts = options\n\n  if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n    opts = canvas\n    canvas = undefined\n  }\n\n  if (!opts) opts = {}\n\n  const canvasEl = exports.render(qrData, canvas, opts)\n\n  const type = opts.type || 'image/png'\n  const rendererOpts = opts.rendererOpts || {}\n\n  return canvasEl.toDataURL(type, rendererOpts.quality)\n}\n","module.exports = function(md, options) {\n  options = options || {};\n  options.listUnicodeChar = options.hasOwnProperty('listUnicodeChar') ? options.listUnicodeChar : false;\n  options.stripListLeaders = options.hasOwnProperty('stripListLeaders') ? options.stripListLeaders : true;\n  options.gfm = options.hasOwnProperty('gfm') ? options.gfm : true;\n  options.useImgAltText = options.hasOwnProperty('useImgAltText') ? options.useImgAltText : true;\n  options.abbr = options.hasOwnProperty('abbr') ? options.abbr : false;\n  options.replaceLinksWithURL = options.hasOwnProperty('replaceLinksWithURL') ? options.replaceLinksWithURL : false;\n  options.htmlTagsToSkip = options.hasOwnProperty('htmlTagsToSkip') ? options.htmlTagsToSkip : [];\n  options.throwError = options.hasOwnProperty('throwError') ? options.throwError : false;\n\n  var output = md || '';\n\n  // Remove horizontal rules (stripListHeaders conflict with this rule, which is why it has been moved to the top)\n  output = output.replace(/^(-\\s*?|\\*\\s*?|_\\s*?){3,}\\s*/gm, '');\n\n  try {\n    if (options.stripListLeaders) {\n      if (options.listUnicodeChar)\n        output = output.replace(/^([\\s\\t]*)([\\*\\-\\+]|\\d+\\.)\\s+/gm, options.listUnicodeChar + ' $1');\n      else\n        output = output.replace(/^([\\s\\t]*)([\\*\\-\\+]|\\d+\\.)\\s+/gm, '$1');\n    }\n    if (options.gfm) {\n      output = output\n      // Header\n        .replace(/\\n={2,}/g, '\\n')\n        // Fenced codeblocks\n        .replace(/~{3}.*\\n/g, '')\n        // Strikethrough\n        .replace(/~~/g, '')\n        // Fenced codeblocks\n        .replace(/`{3}.*\\n/g, '');\n    }\n    if (options.abbr) {\n      // Remove abbreviations\n      output = output.replace(/\\*\\[.*\\]:.*\\n/, '');\n    }\n    output = output\n    // Remove HTML tags\n      .replace(/<[^>]*>/g, '')\n\n    var htmlReplaceRegex = new RegExp('<[^>]*>', 'g');\n    if (options.htmlTagsToSkip.length > 0) {\n      // Using negative lookahead. Eg. (?!sup|sub) will not match 'sup' and 'sub' tags.\n      var joinedHtmlTagsToSkip = '(?!' + options.htmlTagsToSkip.join(\"|\") + ')';\n\n      // Adding the lookahead literal with the default regex for html. Eg./<(?!sup|sub)[^>]*>/ig\n      htmlReplaceRegex = new RegExp(\n          '<' +\n          joinedHtmlTagsToSkip +\n          '[^>]*>', \n          'ig'\n      );\n    }\n\n    output = output\n      // Remove HTML tags\n      .replace(htmlReplaceRegex, '')\n      // Remove setext-style headers\n      .replace(/^[=\\-]{2,}\\s*$/g, '')\n      // Remove footnotes?\n      .replace(/\\[\\^.+?\\](\\: .*?$)?/g, '')\n      .replace(/\\s{0,2}\\[.*?\\]: .*?$/g, '')\n      // Remove images\n      .replace(/\\!\\[(.*?)\\][\\[\\(].*?[\\]\\)]/g, options.useImgAltText ? '$1' : '')\n      // Remove inline links\n      .replace(/\\[([^\\]]*?)\\][\\[\\(].*?[\\]\\)]/g, options.replaceLinksWithURL ? '$2' : '$1')\n      // Remove blockquotes\n      .replace(/^(\\n)?\\s{0,3}>\\s?/gm, '$1')\n      // .replace(/(^|\\n)\\s{0,3}>\\s?/g, '\\n\\n')\n      // Remove reference-style links?\n      .replace(/^\\s{1,2}\\[(.*?)\\]: (\\S+)( \".*?\")?\\s*$/g, '')\n      // Remove atx-style headers\n      .replace(/^(\\n)?\\s{0,}#{1,6}\\s*( (.+))? +#+$|^(\\n)?\\s{0,}#{1,6}\\s*( (.+))?$/gm, '$1$3$4$6')\n      // Remove * emphasis\n      .replace(/([\\*]+)(\\S)(.*?\\S)??\\1/g, '$2$3')\n      // Remove _ emphasis. Unlike *, _ emphasis gets rendered only if \n      //   1. Either there is a whitespace character before opening _ and after closing _.\n      //   2. Or _ is at the start/end of the string.\n      .replace(/(^|\\W)([_]+)(\\S)(.*?\\S)??\\2($|\\W)/g, '$1$3$4$5')\n      // Remove code blocks\n      .replace(/(`{3,})(.*?)\\1/gm, '$2')\n      // Remove inline code\n      .replace(/`(.+?)`/g, '$1')\n      // // Replace two or more newlines with exactly two? Not entirely sure this belongs here...\n      // .replace(/\\n{2,}/g, '\\n\\n')\n      // // Remove newlines in a paragraph\n      // .replace(/(\\S+)\\n\\s*(\\S+)/g, '$1 $2')\n      // Replace strike through\n      .replace(/~(.*?)~/g, '$1');\n  } catch(e) {\n    if (options.throwError) throw e;\n\n    console.error(\"remove-markdown encountered error: %s\", e);\n    return md;\n  }\n  return output;\n};\n","const htmlparser = require('htmlparser2');\nconst escapeStringRegexp = require('escape-string-regexp');\nconst { isPlainObject } = require('is-plain-object');\nconst deepmerge = require('deepmerge');\nconst parseSrcset = require('parse-srcset');\nconst { parse: postcssParse } = require('postcss');\nconst { naughtyHref: launderNaughtyHref } = require('launder');\n// Tags that can conceivably represent stand-alone media.\nconst mediaTags = [\n  'img', 'audio', 'video', 'picture', 'svg',\n  'object', 'map', 'iframe', 'embed'\n];\n// Tags that are inherently vulnerable to being used in XSS attacks.\nconst vulnerableTags = [ 'script', 'style' ];\n// SVG SMIL animation elements. These do not carry a URL themselves: they\n// retarget an attribute of another element, naming it with `attributeName`\n// and supplying the new value(s) in `values`, `from`, `to` and `by`.\nconst svgAnimationTags = [\n  'animate', 'animatecolor', 'animatemotion', 'animatetransform', 'set'\n];\n// Attribute names that always name a URL sink, whatever\n// `allowedSchemesAppliedToAttributes` has been narrowed to. A namespace prefix\n// is ignored when matching, so `xlink:href` and any other prefixed spelling of\n// `href` are covered.\nconst alwaysUrlAttributes = [ 'href' ];\n\nfunction each(obj, cb) {\n  if (obj) {\n    Object.keys(obj).forEach(function (key) {\n      cb(obj[key], key);\n    });\n  }\n}\n\n// Avoid false positives with .__proto__, .hasOwnProperty, etc.\nfunction has(obj, key) {\n  return ({}).hasOwnProperty.call(obj, key);\n}\n\n// Returns those elements of `a` for which `cb(a)` returns truthy\nfunction filter(a, cb) {\n  const n = [];\n  each(a, function(v) {\n    if (cb(v)) {\n      n.push(v);\n    }\n  });\n  return n;\n}\n\nfunction isEmptyObject(obj) {\n  for (const key in obj) {\n    if (has(obj, key)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction stringifySrcset(parsedSrcset) {\n  return parsedSrcset.map(function(part) {\n    if (!part.url) {\n      throw new Error('URL missing');\n    }\n\n    return (\n      part.url +\n      (part.w ? ` ${part.w}w` : '') +\n      (part.h ? ` ${part.h}h` : '') +\n      (part.d ? ` ${part.d}x` : '')\n    );\n  }).join(', ');\n}\n\nmodule.exports = sanitizeHtml;\n\n// A valid attribute name.\n// We use a tolerant definition based on the set of strings defined by\n// html.spec.whatwg.org/multipage/parsing.html#before-attribute-name-state\n// and html.spec.whatwg.org/multipage/parsing.html#attribute-name-state .\n// The characters accepted are ones which can be appended to the attribute\n// name buffer without triggering a parse error:\n//   * unexpected-equals-sign-before-attribute-name\n//   * unexpected-null-character\n//   * unexpected-character-in-attribute-name\n// We exclude the empty string because it's impossible to get to the after\n// attribute name state with an empty attribute name buffer.\nconst VALID_HTML_ATTRIBUTE_NAME = /^[^\\0\\t\\n\\f\\r /<=>]+$/;\n\n// Ignore the _recursing flag; it's there for recursive\n// invocation as a guard against this exploit:\n// https://github.com/fb55/htmlparser2/issues/105\n\nfunction sanitizeHtml(html, options, _recursing) {\n  if (html == null) {\n    return '';\n  }\n  if (typeof html === 'number') {\n    html = html.toString();\n  }\n\n  let result = '';\n  // Used for hot swapping the result variable with an empty string\n  // in order to \"capture\" the text written to it.\n  let tempResult = '';\n\n  function Frame(tag, attribs) {\n    const that = this;\n    this.tag = tag;\n    this.attribs = attribs || {};\n    this.tagPosition = result.length;\n    this.text = ''; // Node inner text\n    this.openingTagLength = 0;\n    this.mediaChildren = [];\n\n    this.updateParentNodeText = function() {\n      if (stack.length) {\n        const parentFrame = stack[stack.length - 1];\n        parentFrame.text += that.text;\n      }\n    };\n\n    this.updateParentNodeMediaChildren = function() {\n      if (stack.length && mediaTags.includes(this.tag)) {\n        const parentFrame = stack[stack.length - 1];\n        parentFrame.mediaChildren.push(this.tag);\n      }\n    };\n  }\n\n  options = Object.assign({}, sanitizeHtml.defaults, options);\n  options.parser = Object.assign({}, htmlParserDefaults, options.parser);\n\n  const tagAllowed = function (name) {\n    return options.allowedTags === false ||\n      (options.allowedTags || []).indexOf(name) > -1;\n  };\n\n  // vulnerableTags\n  vulnerableTags.forEach(function (tag) {\n    if (tagAllowed(tag) && !options.allowVulnerableTags) {\n      console.warn(`\\n\\n⚠️ Your \\`allowedTags\\` option includes, \\`${tag}\\`, which is inherently\\nvulnerable to XSS attacks. Please remove it from \\`allowedTags\\`.\\nOr, to disable this warning, add the \\`allowVulnerableTags\\` option\\nand ensure you are accounting for this risk.\\n\\n`);\n    }\n  });\n\n  // Tags that contain something other than HTML, or where discarding\n  // the text when the tag is disallowed makes sense for other reasons.\n  // If we are not allowing these tags, we should drop their content too.\n  // For other tags you would drop the tag but keep its content.\n  // `xmp` is included because htmlparser2 treats it as a raw-text element,\n  // so markup inside is parsed as text on input but would otherwise be\n  // re-emitted unescaped via the `ontext` branch below, allowing XSS bypass\n  // when `xmp` is disallowed (which is the default).\n  const nonTextTagsArray = options.nonTextTags || [\n    'script',\n    'style',\n    'textarea',\n    'option',\n    'xmp'\n  ];\n  let allowedAttributesMap;\n  let allowedAttributesGlobMap;\n  if (options.allowedAttributes) {\n    allowedAttributesMap = {};\n    allowedAttributesGlobMap = {};\n    each(options.allowedAttributes, function(attributes, tag) {\n      allowedAttributesMap[tag] = [];\n      const globRegex = [];\n      attributes.forEach(function(obj) {\n        if (typeof obj === 'string' && obj.indexOf('*') >= 0) {\n          globRegex.push(escapeStringRegexp(obj).replace(/\\\\\\*/g, '.*'));\n        } else {\n          allowedAttributesMap[tag].push(obj);\n        }\n      });\n      if (globRegex.length) {\n        allowedAttributesGlobMap[tag] = new RegExp('^(' + globRegex.join('|') + ')$');\n      }\n    });\n  }\n  const allowedClassesMap = {};\n  const allowedClassesGlobMap = {};\n  const allowedClassesRegexMap = {};\n  each(options.allowedClasses, function(classes, tag) {\n    // Implicitly allows the class attribute\n    if (allowedAttributesMap) {\n      if (!has(allowedAttributesMap, tag)) {\n        allowedAttributesMap[tag] = [];\n      }\n      allowedAttributesMap[tag].push('class');\n    }\n\n    allowedClassesMap[tag] = classes;\n\n    if (Array.isArray(classes)) {\n      const globRegex = [];\n      allowedClassesMap[tag] = [];\n      allowedClassesRegexMap[tag] = [];\n      classes.forEach(function(obj) {\n        if (typeof obj === 'string' && obj.indexOf('*') >= 0) {\n          globRegex.push(escapeStringRegexp(obj).replace(/\\\\\\*/g, '.*'));\n        } else if (obj instanceof RegExp) {\n          allowedClassesRegexMap[tag].push(obj);\n        } else {\n          allowedClassesMap[tag].push(obj);\n        }\n      });\n      if (globRegex.length) {\n        allowedClassesGlobMap[tag] = new RegExp('^(' + globRegex.join('|') + ')$');\n      }\n    }\n  });\n\n  const transformTagsMap = {};\n  let transformTagsAll;\n  each(options.transformTags, function(transform, tag) {\n    let transFun;\n    if (typeof transform === 'function') {\n      transFun = transform;\n    } else if (typeof transform === 'string') {\n      transFun = sanitizeHtml.simpleTransform(transform);\n    }\n    if (tag === '*') {\n      transformTagsAll = transFun;\n    } else {\n      transformTagsMap[tag] = transFun;\n    }\n  });\n\n  let depth;\n  let stack;\n  let skipMap;\n  let transformMap;\n  let skipText;\n  let skipTextDepth;\n  let addedText = false;\n\n  initializeState();\n\n  const parser = new htmlparser.Parser({\n    onopentag: function(name, attribs) {\n      if (options.onOpenTag) {\n        options.onOpenTag(name, attribs);\n      }\n\n      // If `enforceHtmlBoundary` is `true` and this has found the opening\n      // `html` tag, reset the state.\n      if (options.enforceHtmlBoundary && name === 'html') {\n        initializeState();\n      }\n\n      if (skipText) {\n        skipTextDepth++;\n        return;\n      }\n      const frame = new Frame(name, attribs);\n      stack.push(frame);\n\n      let skip = false;\n      const hasText = !!frame.text;\n      let transformedTag;\n      if (has(transformTagsMap, name)) {\n        transformedTag = transformTagsMap[name](name, attribs);\n\n        frame.attribs = attribs = transformedTag.attribs;\n\n        if (transformedTag.text !== undefined) {\n          frame.innerText = transformedTag.text;\n        }\n\n        if (name !== transformedTag.tagName) {\n          frame.name = name = transformedTag.tagName;\n          transformMap[depth] = transformedTag.tagName;\n        }\n      }\n      if (transformTagsAll) {\n        transformedTag = transformTagsAll(name, attribs);\n\n        frame.attribs = attribs = transformedTag.attribs;\n        if (name !== transformedTag.tagName) {\n          frame.name = name = transformedTag.tagName;\n          transformMap[depth] = transformedTag.tagName;\n        }\n      }\n\n      if (!tagAllowed(name) || animatesUrlAttribute(name, attribs) || (options.disallowedTagsMode === 'recursiveEscape' && !isEmptyObject(skipMap)) || (options.nestingLimit != null && depth >= options.nestingLimit)) {\n        skip = true;\n        skipMap[depth] = true;\n        if (options.disallowedTagsMode === 'discard' || options.disallowedTagsMode === 'completelyDiscard') {\n          if (nonTextTagsArray.indexOf(name) !== -1) {\n            skipText = true;\n            skipTextDepth = 1;\n          }\n        }\n      }\n      depth++;\n      if (skip) {\n        if (options.disallowedTagsMode === 'discard' || options.disallowedTagsMode === 'completelyDiscard') {\n          // We want the contents but not this tag\n          if (frame.innerText && !hasText) {\n            const escaped = escapeHtml(frame.innerText);\n            if (options.textFilter) {\n              result += options.textFilter(escaped, name);\n            } else {\n              result += escaped;\n            }\n            addedText = true;\n          }\n          return;\n        }\n        tempResult = result;\n        result = '';\n      }\n      result += '<' + name;\n\n      if (name === 'script') {\n        if (options.allowedScriptHostnames || options.allowedScriptDomains) {\n          frame.innerText = '';\n        }\n      }\n\n      const isBeingEscaped = skip && (options.disallowedTagsMode === 'escape' || options.disallowedTagsMode === 'recursiveEscape');\n      const shouldPreserveEscapedAttributes = isBeingEscaped &&\n        options.preserveEscapedAttributes;\n\n      if (shouldPreserveEscapedAttributes) {\n        each(attribs, function(value, a) {\n          result += ' ' + a + '=\"' + escapeHtml((value || ''), true) + '\"';\n        });\n      } else if (!allowedAttributesMap || has(allowedAttributesMap, name) || allowedAttributesMap['*']) {\n        each(attribs, function(value, a) {\n          if (!VALID_HTML_ATTRIBUTE_NAME.test(a)) {\n            // This prevents part of an attribute name in the output from being\n            // interpreted as the end of an attribute, or end of a tag.\n            delete frame.attribs[a];\n            return;\n          }\n          // If the value is empty, check if the attribute is\n          // in the allowedEmptyAttributes array.\n          // If it is not in the allowedEmptyAttributes array,\n          // and it is a known non-boolean attribute, delete it\n          // List taken from https://html.spec.whatwg.org/multipage/indices.html#attributes-3\n          if (value === '' && (!options.allowedEmptyAttributes.includes(a)) &&\n            (options.nonBooleanAttributes.includes(a) || options.nonBooleanAttributes.includes('*'))) {\n            delete frame.attribs[a];\n            return;\n          }\n          // check allowedAttributesMap for the element and attribute and modify the value\n          // as necessary if there are specific values defined.\n          let passedAllowedAttributesMapCheck = false;\n          if (!allowedAttributesMap ||\n            (has(allowedAttributesMap, name) &&\n              allowedAttributesMap[name].indexOf(a) !== -1) ||\n            (allowedAttributesMap['*'] && allowedAttributesMap['*'].indexOf(a) !== -1) ||\n            (has(allowedAttributesGlobMap, name) &&\n              allowedAttributesGlobMap[name].test(a)) ||\n            (allowedAttributesGlobMap['*'] && allowedAttributesGlobMap['*'].test(a))) {\n            passedAllowedAttributesMapCheck = true;\n          } else if (allowedAttributesMap && allowedAttributesMap[name]) {\n            for (const o of allowedAttributesMap[name]) {\n              if (isPlainObject(o) && o.name && (o.name === a)) {\n                passedAllowedAttributesMapCheck = true;\n                let newValue = '';\n                if (o.multiple === true) {\n                  // verify the values that are allowed\n                  const splitStrArray = value.split(' ');\n                  for (const s of splitStrArray) {\n                    if (o.values.indexOf(s) !== -1) {\n                      if (newValue === '') {\n                        newValue = s;\n                      } else {\n                        newValue += ' ' + s;\n                      }\n                    }\n                  }\n                } else if (o.values.indexOf(value) >= 0) {\n                  // verified an allowed value matches the entire attribute value\n                  newValue = value;\n                }\n                value = newValue;\n              }\n            }\n          }\n          if (passedAllowedAttributesMapCheck) {\n            if (options.allowedSchemesAppliedToAttributes.indexOf(a) !== -1) {\n              if (naughtyHref(name, value)) {\n                delete frame.attribs[a];\n                return;\n              }\n            }\n\n            if (name === 'script' && a === 'src') {\n\n              let allowed = true;\n\n              try {\n                const parsed = parseUrl(value);\n\n                if (options.allowedScriptHostnames || options.allowedScriptDomains) {\n                  const allowedHostname = (options.allowedScriptHostnames || [])\n                    .find(function (hostname) {\n                      return hostname === parsed.url.hostname;\n                    });\n                  const allowedDomain = (options.allowedScriptDomains || [])\n                    .find(function(domain) {\n                      return parsed.url.hostname === domain || parsed.url.hostname.endsWith(`.${domain}`);\n                    });\n                  allowed = allowedHostname || allowedDomain;\n                }\n              } catch (e) {\n                allowed = false;\n              }\n\n              if (!allowed) {\n                delete frame.attribs[a];\n                return;\n              }\n            }\n\n            if (name === 'iframe' && a === 'src') {\n              let allowed = true;\n              try {\n                const parsed = parseUrl(value);\n\n                if (parsed.isRelativeUrl) {\n                  // default value of allowIframeRelativeUrls is true\n                  // unless allowedIframeHostnames or allowedIframeDomains specified\n                  allowed = has(options, 'allowIframeRelativeUrls')\n                    ? options.allowIframeRelativeUrls\n                    : (!options.allowedIframeHostnames && !options.allowedIframeDomains);\n                } else if (\n                  options.allowedIframeHostnames ||\n                  options.allowedIframeDomains\n                ) {\n                  const allowedHostname = (options.allowedIframeHostnames || [])\n                    .find(function (hostname) {\n                      return hostname === parsed.url.hostname;\n                    });\n                  const allowedDomain = (options.allowedIframeDomains || [])\n                    .find(function(domain) {\n                      return parsed.url.hostname === domain || parsed.url.hostname.endsWith(`.${domain}`);\n                    });\n                  allowed = allowedHostname || allowedDomain;\n                }\n              } catch (e) {\n                // Unparseable iframe src\n                allowed = false;\n              }\n              if (!allowed) {\n                delete frame.attribs[a];\n                return;\n              }\n            }\n            if (a === 'srcset' || a === 'imagesrcset') {\n              try {\n                let parsed = parseSrcset(value);\n                parsed.forEach(function(value) {\n                  if (naughtyHref(a, value.url)) {\n                    value.evil = true;\n                  }\n                });\n                parsed = filter(parsed, function(v) {\n                  return !v.evil;\n                });\n                if (!parsed.length) {\n                  delete frame.attribs[a];\n                  return;\n                } else {\n                  value = stringifySrcset(filter(parsed, function(v) {\n                    return !v.evil;\n                  }));\n                  frame.attribs[a] = value;\n                }\n              } catch (e) {\n                // Unparseable srcset\n                delete frame.attribs[a];\n                return;\n              }\n            }\n            if (a === 'class') {\n              const allowedSpecificClasses = allowedClassesMap[name];\n              const allowedWildcardClasses = allowedClassesMap['*'];\n              const allowedSpecificClassesGlob = allowedClassesGlobMap[name];\n              const allowedSpecificClassesRegex = allowedClassesRegexMap[name];\n              const allowedWildcardClassesRegex = allowedClassesRegexMap['*'];\n              const allowedWildcardClassesGlob = allowedClassesGlobMap['*'];\n              const allowedClassesGlobs = [\n                allowedSpecificClassesGlob,\n                allowedWildcardClassesGlob\n              ]\n                .concat(allowedSpecificClassesRegex, allowedWildcardClassesRegex)\n                .filter(function (t) {\n                  return t;\n                });\n              if (allowedSpecificClasses && allowedWildcardClasses) {\n                value = filterClasses(\n                  value,\n                  deepmerge(allowedSpecificClasses, allowedWildcardClasses),\n                  allowedClassesGlobs\n                );\n              } else {\n                value = filterClasses(\n                  value,\n                  allowedSpecificClasses || allowedWildcardClasses,\n                  allowedClassesGlobs\n                );\n              }\n              if (!value.length) {\n                delete frame.attribs[a];\n                return;\n              }\n            }\n            if (a === 'style') {\n              if (options.parseStyleAttributes) {\n                try {\n                  const abstractSyntaxTree = postcssParse(name + ' {' + value + '}', { map: false });\n                  const filteredAST = filterCss(\n                    abstractSyntaxTree,\n                    options.allowedStyles\n                  );\n\n                  value = stringifyStyleAttributes(filteredAST);\n\n                  if (value.length === 0) {\n                    delete frame.attribs[a];\n                    return;\n                  }\n                } catch (e) {\n                  if (typeof window !== 'undefined') {\n                    console.warn('Failed to parse \"' + name + ' {' + value + '}' + '\", If you\\'re running this in a browser, we recommend to disable style parsing: options.parseStyleAttributes: false, since this only works in a node environment due to a postcss dependency, More info: https://github.com/apostrophecms/sanitize-html/issues/547');\n                  }\n                  delete frame.attribs[a];\n                  return;\n                }\n              } else if (options.allowedStyles) {\n                throw new Error('allowedStyles option cannot be used together with parseStyleAttributes: false.');\n              }\n            }\n            result += ' ' + a;\n            if (value && value.length) {\n              result += '=\"' + escapeHtml(value, true) + '\"';\n            } else if (options.allowedEmptyAttributes.includes(a)) {\n              result += '=\"\"';\n            }\n          } else {\n            delete frame.attribs[a];\n          }\n        });\n      }\n      if (options.selfClosing.indexOf(name) !== -1) {\n        result += ' />';\n      } else {\n        result += '>';\n        if (frame.innerText && !hasText) {\n          const escaped = escapeHtml(frame.innerText);\n          if (options.textFilter) {\n            result += options.textFilter(escaped, name);\n          } else {\n            result += escaped;\n          }\n          addedText = true;\n        }\n      }\n      if (skip) {\n        result = tempResult + escapeHtml(result);\n        tempResult = '';\n      }\n      frame.openingTagLength = result.length - frame.tagPosition;\n    },\n    ontext: function(text) {\n      if (skipText) {\n        return;\n      }\n      const lastFrame = stack[stack.length - 1];\n      let tag;\n\n      if (lastFrame) {\n        tag = lastFrame.tag;\n        // If inner text was set by transform function then let's use it\n        text = lastFrame.innerText !== undefined ? lastFrame.innerText : text;\n      }\n\n      if (options.disallowedTagsMode === 'completelyDiscard' && !tagAllowed(tag)) {\n        text = '';\n      } else if (tag && tagAllowed(tag) && (options.disallowedTagsMode === 'discard' || options.disallowedTagsMode === 'completelyDiscard') && ((tag === 'script') || (tag === 'style'))) {\n        // htmlparser2 gives us these as-is. Escaping them ruins the content. Allowing\n        // script tags is, by definition, game over for XSS protection, so if that's\n        // your concern, don't allow them. The same is essentially true for style tags\n        // which have their own collection of XSS vectors.\n        result += text;\n      } else if (tag && tagAllowed(tag) && (options.disallowedTagsMode === 'discard' || options.disallowedTagsMode === 'completelyDiscard') && (tag === 'textarea' || tag === 'xmp')) {\n        // <textarea> and <xmp> hold text that must not be re-emitted verbatim:\n        // if a raw `<` survives into the output it can reopen a tag when the\n        // result is re-parsed by a browser, smuggling non-allowlisted markup\n        // through the allowlist (mutation-XSS, GHSA-jxwj-j7wr-gfrw — e.g. the\n        // `</textarea/>` solidus mis-close). We therefore ALWAYS escape this\n        // content rather than passing it through. Escaping unconditionally also\n        // closes the related SVG/MathML foreign-content bypass (where the HTML5\n        // parser treats <textarea>/<xmp> as ordinary foreign elements and a\n        // browser re-parses their contents as live markup, e.g.\n        // `<svg><textarea><img src=x onerror=alert(1)></textarea></svg>`): since\n        // we never re-emit raw text for these tags, no namespace check is\n        // needed. The two tags need different escaping because htmlparser2\n        // tokenizes them differently:\n        if (tag === 'xmp') {\n          // <xmp> is a raw-text (CDATA) element: entities are NOT decoded, so\n          // its content reaches us as raw source that is already entity-encoded.\n          // Escape only the angle brackets so a literal `<` cannot reopen a tag,\n          // while leaving `&` untouched to avoid double-encoding entities that\n          // are already encoded in the source.\n          result += text.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n        } else {\n          // <textarea> is an RCDATA element: htmlparser2 (>= 11) decodes\n          // entities inside it, so its content reaches us as plain decoded text.\n          // It must therefore be fully escaped like any other text — escaping\n          // `&` as well as `<`/`>` — so entities round-trip faithfully (no\n          // double-encoding, see the CVE-2026-40186 regression tests) and no\n          // `<` can reopen a tag.\n          result += escapeHtml(text, false);\n        }\n        // Other \"nonTextTags\" like <option> are not raw text elements in\n        // htmlparser2, so their contents are decoded and must be escaped below\n        // like any other text (important to prevent XSS via entity-encoded\n        // payloads such as <option>&lt;script&gt;...&lt;/script&gt;</option>).\n      } else if (!addedText) {\n        const escaped = escapeHtml(text, false);\n        if (options.textFilter) {\n          result += options.textFilter(escaped, tag);\n        } else {\n          result += escaped;\n        }\n      }\n      if (stack.length) {\n        const frame = stack[stack.length - 1];\n        frame.text += text;\n      }\n    },\n    onclosetag: function(name, isImplied) {\n      if (options.onCloseTag) {\n        options.onCloseTag(name, isImplied);\n      }\n\n      if (skipText) {\n        skipTextDepth--;\n        if (!skipTextDepth) {\n          skipText = false;\n        } else {\n          return;\n        }\n      }\n\n      const frame = stack.pop();\n      if (!frame) {\n        // Do not crash on bad markup\n        return;\n      }\n\n      if (frame.tag !== name) {\n        // Another case of bad markup.\n        // Push to stack, so that it will be used in future closing tags.\n        stack.push(frame);\n        return;\n      }\n\n      skipText = options.enforceHtmlBoundary ? name === 'html' : false;\n      depth--;\n      const skip = skipMap[depth];\n      if (skip) {\n        delete skipMap[depth];\n        if (options.disallowedTagsMode === 'discard' || options.disallowedTagsMode === 'completelyDiscard') {\n          frame.updateParentNodeText();\n          return;\n        }\n        tempResult = result;\n        result = '';\n      }\n\n      if (transformMap[depth]) {\n        name = transformMap[depth];\n        delete transformMap[depth];\n      }\n\n      if (options.exclusiveFilter) {\n        const filterResult = options.exclusiveFilter(frame);\n        if (filterResult === 'excludeTag') {\n          if (skip) {\n            // no longer escaping the tag since it's not added at all\n            result = tempResult;\n            tempResult = '';\n          }\n          // remove the opening tag from the result\n          result = result.substring(0, frame.tagPosition) +\n            result.substring(frame.tagPosition + frame.openingTagLength);\n          return;\n        } else if (filterResult) {\n          result = result.substring(0, frame.tagPosition);\n          return;\n        }\n      }\n\n      frame.updateParentNodeMediaChildren();\n      frame.updateParentNodeText();\n\n      if (\n        // Already output />\n        options.selfClosing.indexOf(name) !== -1 ||\n        // Escaped tag, closing tag is implied\n        (isImplied && !tagAllowed(name) && [ 'escape', 'recursiveEscape' ].indexOf(options.disallowedTagsMode) >= 0)\n      ) {\n        if (skip) {\n          result = tempResult;\n          tempResult = '';\n        }\n        return;\n      }\n\n      result += '</' + name + '>';\n      if (skip) {\n        result = tempResult + escapeHtml(result);\n        tempResult = '';\n      }\n      addedText = false;\n    }\n  }, options.parser);\n  parser.write(html);\n  parser.end();\n\n  if (options.disallowedTagsMode === 'escape' || options.disallowedTagsMode === 'recursiveEscape') {\n    const lastParsedIndex = parser.endIndex;\n    if (lastParsedIndex != null && lastParsedIndex >= 0 &&\n        lastParsedIndex < html.length) {\n      const unparsed = html.substring(lastParsedIndex);\n      result += escapeHtml(unparsed);\n    } else if ((lastParsedIndex == null || lastParsedIndex < 0) && html.length > 0 && result === '') {\n      result = escapeHtml(html);\n    }\n  }\n\n  return result;\n\n  function initializeState() {\n    result = '';\n    depth = 0;\n    stack = [];\n    skipMap = {};\n    transformMap = {};\n    skipText = false;\n    skipTextDepth = 0;\n  }\n\n  function escapeHtml(s, quote) {\n    if (typeof (s) !== 'string') {\n      s = s + '';\n    }\n    if (options.parser.decodeEntities) {\n      s = s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n      if (quote) {\n        s = s.replace(/\"/g, '&quot;');\n      }\n    }\n    // TODO: this is inadequate because it will pass `&0;`. This approach\n    // will not work, each & must be considered with regard to whether it\n    // is followed by a 100% syntactically valid entity or not, and escaped\n    // if it is not. If this bothers you, don't set parser.decodeEntities\n    // to false. (The default is true.)\n    s = s.replace(/&(?![a-zA-Z0-9#]{1,20};)/g, '&amp;') // Match ampersands not part of existing HTML entity\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;');\n    if (quote) {\n      s = s.replace(/\"/g, '&quot;');\n    }\n    return s;\n  }\n\n  function naughtyHref(name, href) {\n    // Resolve the per-tag scheme allowlist if one is configured for\n    // this tag, otherwise fall back to the global allowedSchemes.\n    const allowedSchemes = has(options.allowedSchemesByTag, name)\n      ? options.allowedSchemesByTag[name]\n      : (options.allowedSchemes || []);\n    return launderNaughtyHref(href, {\n      allowedSchemes,\n      allowProtocolRelative: options.allowProtocolRelative\n    });\n  }\n\n  // True if this is an SVG SMIL animation element that animates a URL-bearing\n  // attribute, e.g. `<animate attributeName=\"href\" values=\"#safe;javascript:...\">`.\n  //\n  // Such an element carries no URL of its own: the browser copies the animation\n  // values into the target attribute *after* sanitization, so a `javascript:`\n  // destination reaches a live link sink without ever being scheme checked.\n  // `values` compounds this, because it is a semicolon-separated LIST of\n  // destinations: checking it as one flat URL only validates its first entry, so\n  // a leading `#safe` fragment carries the rest of the list past the policy.\n  //\n  // Re-checking each entry of each value attribute would leave the safety of the\n  // output resting on our imitation of SMIL list parsing, so we reject the\n  // animation on the strength of its target instead. Animations of attributes\n  // that are not URL sinks, such as `fill` or `opacity`, are unaffected.\n  function animatesUrlAttribute(name, attribs) {\n    if (svgAnimationTags.indexOf(name.toLowerCase()) === -1) {\n      return false;\n    }\n    const schemeCheckedAttributes = options.allowedSchemesAppliedToAttributes || [];\n    return Object.keys(attribs || {}).some(function(attributeName) {\n      if (attributeName.toLowerCase() !== 'attributename') {\n        return false;\n      }\n      const target = (attribs[attributeName] || '').trim().toLowerCase();\n      // The target may be namespace prefixed (`xlink:href`). Which prefixes are\n      // in scope depends on the document, so consider the local name too.\n      const localName = target.slice(target.lastIndexOf(':') + 1);\n      return alwaysUrlAttributes.indexOf(localName) !== -1 ||\n        schemeCheckedAttributes.indexOf(target) !== -1 ||\n        schemeCheckedAttributes.indexOf(localName) !== -1;\n    });\n  }\n\n  function parseUrl(value) {\n    value = value.replace(/^(\\w+:)?\\s*[\\\\/]\\s*[\\\\/]/, '$1//');\n    if (value.startsWith('relative:')) {\n      // An attempt to exploit our workaround for base URLs being\n      // mandatory for relative URL validation in the WHATWG\n      // URL parser, reject it\n      throw new Error('relative: exploit attempt');\n    }\n    // naughtyHref is in charge of whether protocol relative URLs\n    // are cool. Here we are concerned just with allowed hostnames and\n    // whether to allow relative URLs.\n    //\n    // Build a placeholder \"base URL\" against which any reasonable\n    // relative URL may be parsed successfully\n    let base = 'relative://relative-site';\n    for (let i = 0; (i < 100); i++) {\n      base += `/${i}`;\n    }\n\n    const parsed = new URL(value, base);\n\n    const isRelativeUrl = parsed && parsed.hostname === 'relative-site' && parsed.protocol === 'relative:';\n    return {\n      isRelativeUrl,\n      url: parsed\n    };\n  }\n  /**\n   * Filters user input css properties by allowlisted regex attributes.\n   * Modifies the abstractSyntaxTree object.\n   *\n   * @param {object} abstractSyntaxTree  - Object representation of CSS attributes.\n   * @property {array[Declaration]} abstractSyntaxTree.nodes[0] -\n   * Each object contains prop and value key, i.e { prop: 'color', value: 'red' }.\n   * @param {object} allowedStyles       - Keys are properties (i.e color),\n   * value is list of permitted regex rules (i.e /green/i).\n   * @return {object}                    - The modified tree.\n   */\n  function filterCss(abstractSyntaxTree, allowedStyles) {\n    if (!allowedStyles) {\n      return abstractSyntaxTree;\n    }\n\n    const astRules = abstractSyntaxTree.nodes[0];\n    let selectedRule;\n\n    // Merge global and tag-specific styles into new AST.\n    if (allowedStyles[astRules.selector] && allowedStyles['*']) {\n      selectedRule = deepmerge(\n        allowedStyles[astRules.selector],\n        allowedStyles['*']\n      );\n    } else {\n      selectedRule = allowedStyles[astRules.selector] || allowedStyles['*'];\n    }\n\n    if (selectedRule) {\n      abstractSyntaxTree.nodes[0].nodes = astRules.nodes\n        .reduce(filterDeclarations(selectedRule), []);\n    }\n\n    return abstractSyntaxTree;\n  }\n\n  /**\n   * Extracts the style attributes from an AbstractSyntaxTree and formats those\n   * values in the inline style attribute format.\n   *\n   * @param  {AbstractSyntaxTree} filteredAST\n   * @return {string}             - Example:\n   * \"color:yellow;text-align:center !important;font-family:helvetica;\"\n   */\n  function stringifyStyleAttributes(filteredAST) {\n    return filteredAST.nodes[0].nodes\n      .reduce(function(extractedAttributes, attrObject) {\n        extractedAttributes.push(\n          `${attrObject.prop}:${attrObject.value}${attrObject.important ? ' !important' : ''}`\n        );\n        return extractedAttributes;\n      }, [])\n      .join(';');\n  }\n\n  /**\n    * Filters the existing attributes for the given property. Discards any attributes\n    * which don't match the allowlist.\n    *\n    * @param  {object} selectedRule - Example: { color: red, font-family: helvetica }\n    * @param  {array} allowedDeclarationsList - List of declarations\n    * which pass the allowlist.\n    * @param  {object} attributeObject - Object representing the current css property.\n    * @property {string} attributeObject.type - Typically 'declaration'.\n    * @property {string} attributeObject.prop - The CSS property, i.e 'color'.\n    * @property {string} attributeObject.value - The corresponding value to\n    * the css property, i.e 'red'.\n    * @return {function} - When used in Array.reduce,\n    * will return an array of Declaration objects\n    */\n  function filterDeclarations(selectedRule) {\n    return function (allowedDeclarationsList, attributeObject) {\n      // If this property is allowlisted...\n      if (has(selectedRule, attributeObject.prop)) {\n        const matchesRegex = selectedRule[attributeObject.prop]\n          .some(function(regularExpression) {\n            return regularExpression.test(attributeObject.value);\n          });\n\n        if (matchesRegex) {\n          allowedDeclarationsList.push(attributeObject);\n        }\n      }\n      return allowedDeclarationsList;\n    };\n  }\n\n  function filterClasses(classes, allowed, allowedGlobs) {\n    if (!allowed) {\n      // The class attribute is allowed without filtering on this tag\n      return classes;\n    }\n    classes = classes.split(/\\s+/);\n    return classes.filter(function(clss) {\n      return allowed.indexOf(clss) !== -1 || allowedGlobs.some(function(glob) {\n        return glob.test(clss);\n      });\n    }).join(' ');\n  }\n}\n\n// Defaults are accessible to you so that you can use them as a starting point\n// programmatically if you wish\n\nconst htmlParserDefaults = {\n  decodeEntities: true\n};\nsanitizeHtml.defaults = {\n  allowedTags: [\n    // Sections derived from MDN element categories and limited to the more\n    // benign categories.\n    // https://developer.mozilla.org/en-US/docs/Web/HTML/Element\n    // Content sectioning\n    'address', 'article', 'aside', 'footer', 'header',\n    'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hgroup',\n    'main', 'nav', 'section',\n    // Text content\n    'blockquote', 'dd', 'div', 'dl', 'dt', 'figcaption', 'figure',\n    'hr', 'li', 'menu', 'ol', 'p', 'pre', 'ul',\n    // Inline text semantics\n    'a', 'abbr', 'b', 'bdi', 'bdo', 'br', 'cite', 'code', 'data', 'dfn',\n    'em', 'i', 'kbd', 'mark', 'q',\n    'rb', 'rp', 'rt', 'rtc', 'ruby',\n    's', 'samp', 'small', 'span', 'strong', 'sub', 'sup', 'time', 'u', 'var', 'wbr',\n    // Table content\n    'caption', 'col', 'colgroup', 'table', 'tbody', 'td', 'tfoot', 'th',\n    'thead', 'tr'\n  ],\n  // Tags that cannot be boolean\n  nonBooleanAttributes: [\n    'abbr', 'accept', 'accept-charset', 'accesskey', 'action',\n    'allow', 'alt', 'as', 'autocapitalize', 'autocomplete',\n    'blocking', 'charset', 'cite', 'class', 'color', 'cols',\n    'colspan', 'content', 'contenteditable', 'coords', 'crossorigin',\n    'data', 'datetime', 'decoding', 'dir', 'dirname', 'download',\n    'draggable', 'enctype', 'enterkeyhint', 'fetchpriority', 'for',\n    'form', 'formaction', 'formenctype', 'formmethod', 'formtarget',\n    'headers', 'height', 'hidden', 'high', 'href', 'hreflang',\n    'http-equiv', 'id', 'imagesizes', 'imagesrcset', 'inputmode',\n    'integrity', 'is', 'itemid', 'itemprop', 'itemref', 'itemtype',\n    'kind', 'label', 'lang', 'list', 'loading', 'low', 'max',\n    'maxlength', 'media', 'method', 'min', 'minlength', 'name',\n    'nonce', 'optimum', 'pattern', 'ping', 'placeholder', 'popover',\n    'popovertarget', 'popovertargetaction', 'poster', 'preload',\n    'referrerpolicy', 'rel', 'rows', 'rowspan', 'sandbox', 'scope',\n    'shape', 'size', 'sizes', 'slot', 'span', 'spellcheck', 'src',\n    'srcdoc', 'srclang', 'srcset', 'start', 'step', 'style',\n    'tabindex', 'target', 'title', 'translate', 'type', 'usemap',\n    'value', 'width', 'wrap',\n    // Event handlers\n    'onauxclick', 'onafterprint', 'onbeforematch', 'onbeforeprint',\n    'onbeforeunload', 'onbeforetoggle', 'onblur', 'oncancel',\n    'oncanplay', 'oncanplaythrough', 'onchange', 'onclick', 'onclose',\n    'oncontextlost', 'oncontextmenu', 'oncontextrestored', 'oncopy',\n    'oncuechange', 'oncut', 'ondblclick', 'ondrag', 'ondragend',\n    'ondragenter', 'ondragleave', 'ondragover', 'ondragstart',\n    'ondrop', 'ondurationchange', 'onemptied', 'onended',\n    'onerror', 'onfocus', 'onformdata', 'onhashchange', 'oninput',\n    'oninvalid', 'onkeydown', 'onkeypress', 'onkeyup',\n    'onlanguagechange', 'onload', 'onloadeddata', 'onloadedmetadata',\n    'onloadstart', 'onmessage', 'onmessageerror', 'onmousedown',\n    'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout',\n    'onmouseover', 'onmouseup', 'onoffline', 'ononline', 'onpagehide',\n    'onpageshow', 'onpaste', 'onpause', 'onplay', 'onplaying',\n    'onpopstate', 'onprogress', 'onratechange', 'onreset', 'onresize',\n    'onrejectionhandled', 'onscroll', 'onscrollend',\n    'onsecuritypolicyviolation', 'onseeked', 'onseeking', 'onselect',\n    'onslotchange', 'onstalled', 'onstorage', 'onsubmit', 'onsuspend',\n    'ontimeupdate', 'ontoggle', 'onunhandledrejection', 'onunload',\n    'onvolumechange', 'onwaiting', 'onwheel'\n  ],\n  disallowedTagsMode: 'discard',\n  allowedAttributes: {\n    a: [ 'href', 'name', 'target' ],\n    // We don't currently allow img itself by default, but\n    // these attributes would make sense if we did.\n    img: [ 'src', 'srcset', 'alt', 'title', 'width', 'height', 'loading' ]\n  },\n  allowedEmptyAttributes: [\n    'alt'\n  ],\n  // Lots of these won't come up by default because we don't allow them\n  selfClosing: [ 'img', 'br', 'hr', 'area', 'base', 'basefont', 'input', 'link', 'meta', 'col' ],\n  // URL schemes we permit\n  allowedSchemes: [ 'http', 'https', 'ftp', 'mailto', 'tel' ],\n  allowedSchemesByTag: {},\n  allowedSchemesAppliedToAttributes: [\n    'href', 'src', 'cite',\n    'action', 'formaction', 'data', 'xlink:href',\n    'poster', 'background', 'ping',\n    'longdesc', 'usemap', 'codebase', 'classid', 'archive',\n    'profile', 'manifest', 'itemid',\n    'dynsrc', 'lowsrc'\n  ],\n  allowProtocolRelative: true,\n  enforceHtmlBoundary: false,\n  parseStyleAttributes: true,\n  preserveEscapedAttributes: false\n};\n\nsanitizeHtml.simpleTransform = function(newTagName, newAttribs, merge) {\n  merge = (merge === undefined) ? true : merge;\n  newAttribs = newAttribs || {};\n\n  return function(tagName, attribs) {\n    let attrib;\n    if (merge) {\n      for (attrib in newAttribs) {\n        attribs[attrib] = newAttribs[attrib];\n      }\n    } else {\n      attribs = newAttribs;\n    }\n\n    return {\n      tagName: newTagName,\n      attribs\n    };\n  };\n};\n","'use strict';\n\nmodule.exports = string => {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a \\unnnn escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n};\n","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn target.propertyIsEnumerable(symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","/**\n * Srcset Parser\n *\n * By Alex Bell |  MIT License\n *\n * JS Parser for the string value that appears in markup <img srcset=\"here\">\n *\n * @returns Array [{url: _, d: _, w: _, h:_}, ...]\n *\n * Based super duper closely on the reference algorithm at:\n * https://html.spec.whatwg.org/multipage/embedded-content.html#parse-a-srcset-attribute\n *\n * Most comments are copied in directly from the spec\n * (except for comments in parens).\n */\n\n(function (root, factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([], factory);\n\t} else if (typeof module === 'object' && module.exports) {\n\t\t// Node. Does not work with strict CommonJS, but\n\t\t// only CommonJS-like environments that support module.exports,\n\t\t// like Node.\n\t\tmodule.exports = factory();\n\t} else {\n\t\t// Browser globals (root is window)\n\t\troot.parseSrcset = factory();\n\t}\n}(this, function () {\n\n\t// 1. Let input be the value passed to this algorithm.\n\treturn function (input) {\n\n\t\t// UTILITY FUNCTIONS\n\n\t\t// Manual is faster than RegEx\n\t\t// http://bjorn.tipling.com/state-and-regular-expressions-in-javascript\n\t\t// http://jsperf.com/whitespace-character/5\n\t\tfunction isSpace(c) {\n\t\t\treturn (c === \"\\u0020\" || // space\n\t\t\tc === \"\\u0009\" || // horizontal tab\n\t\t\tc === \"\\u000A\" || // new line\n\t\t\tc === \"\\u000C\" || // form feed\n\t\t\tc === \"\\u000D\");  // carriage return\n\t\t}\n\n\t\tfunction collectCharacters(regEx) {\n\t\t\tvar chars,\n\t\t\t\tmatch = regEx.exec(input.substring(pos));\n\t\t\tif (match) {\n\t\t\t\tchars = match[ 0 ];\n\t\t\t\tpos += chars.length;\n\t\t\t\treturn chars;\n\t\t\t}\n\t\t}\n\n\t\tvar inputLength = input.length,\n\n\t\t\t// (Don't use \\s, to avoid matching non-breaking space)\n\t\t\tregexLeadingSpaces = /^[ \\t\\n\\r\\u000c]+/,\n\t\t\tregexLeadingCommasOrSpaces = /^[, \\t\\n\\r\\u000c]+/,\n\t\t\tregexLeadingNotSpaces = /^[^ \\t\\n\\r\\u000c]+/,\n\t\t\tregexTrailingCommas = /[,]+$/,\n\t\t\tregexNonNegativeInteger = /^\\d+$/,\n\n\t\t\t// ( Positive or negative or unsigned integers or decimals, without or without exponents.\n\t\t\t// Must include at least one digit.\n\t\t\t// According to spec tests any decimal point must be followed by a digit.\n\t\t\t// No leading plus sign is allowed.)\n\t\t\t// https://html.spec.whatwg.org/multipage/infrastructure.html#valid-floating-point-number\n\t\t\tregexFloatingPoint = /^-?(?:[0-9]+|[0-9]*\\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/,\n\n\t\t\turl,\n\t\t\tdescriptors,\n\t\t\tcurrentDescriptor,\n\t\t\tstate,\n\t\t\tc,\n\n\t\t\t// 2. Let position be a pointer into input, initially pointing at the start\n\t\t\t//    of the string.\n\t\t\tpos = 0,\n\n\t\t\t// 3. Let candidates be an initially empty source set.\n\t\t\tcandidates = [];\n\n\t\t// 4. Splitting loop: Collect a sequence of characters that are space\n\t\t//    characters or U+002C COMMA characters. If any U+002C COMMA characters\n\t\t//    were collected, that is a parse error.\n\t\twhile (true) {\n\t\t\tcollectCharacters(regexLeadingCommasOrSpaces);\n\n\t\t\t// 5. If position is past the end of input, return candidates and abort these steps.\n\t\t\tif (pos >= inputLength) {\n\t\t\t\treturn candidates; // (we're done, this is the sole return path)\n\t\t\t}\n\n\t\t\t// 6. Collect a sequence of characters that are not space characters,\n\t\t\t//    and let that be url.\n\t\t\turl = collectCharacters(regexLeadingNotSpaces);\n\n\t\t\t// 7. Let descriptors be a new empty list.\n\t\t\tdescriptors = [];\n\n\t\t\t// 8. If url ends with a U+002C COMMA character (,), follow these substeps:\n\t\t\t//\t\t(1). Remove all trailing U+002C COMMA characters from url. If this removed\n\t\t\t//         more than one character, that is a parse error.\n\t\t\tif (url.slice(-1) === \",\") {\n\t\t\t\turl = url.replace(regexTrailingCommas, \"\");\n\t\t\t\t// (Jump ahead to step 9 to skip tokenization and just push the candidate).\n\t\t\t\tparseDescriptors();\n\n\t\t\t\t//\tOtherwise, follow these substeps:\n\t\t\t} else {\n\t\t\t\ttokenize();\n\t\t\t} // (close else of step 8)\n\n\t\t\t// 16. Return to the step labeled splitting loop.\n\t\t} // (Close of big while loop.)\n\n\t\t/**\n\t\t * Tokenizes descriptor properties prior to parsing\n\t\t * Returns undefined.\n\t\t */\n\t\tfunction tokenize() {\n\n\t\t\t// 8.1. Descriptor tokeniser: Skip whitespace\n\t\t\tcollectCharacters(regexLeadingSpaces);\n\n\t\t\t// 8.2. Let current descriptor be the empty string.\n\t\t\tcurrentDescriptor = \"\";\n\n\t\t\t// 8.3. Let state be in descriptor.\n\t\t\tstate = \"in descriptor\";\n\n\t\t\twhile (true) {\n\n\t\t\t\t// 8.4. Let c be the character at position.\n\t\t\t\tc = input.charAt(pos);\n\n\t\t\t\t//  Do the following depending on the value of state.\n\t\t\t\t//  For the purpose of this step, \"EOF\" is a special character representing\n\t\t\t\t//  that position is past the end of input.\n\n\t\t\t\t// In descriptor\n\t\t\t\tif (state === \"in descriptor\") {\n\t\t\t\t\t// Do the following, depending on the value of c:\n\n\t\t\t\t\t// Space character\n\t\t\t\t\t// If current descriptor is not empty, append current descriptor to\n\t\t\t\t\t// descriptors and let current descriptor be the empty string.\n\t\t\t\t\t// Set state to after descriptor.\n\t\t\t\t\tif (isSpace(c)) {\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t\tcurrentDescriptor = \"\";\n\t\t\t\t\t\t\tstate = \"after descriptor\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// U+002C COMMA (,)\n\t\t\t\t\t\t// Advance position to the next character in input. If current descriptor\n\t\t\t\t\t\t// is not empty, append current descriptor to descriptors. Jump to the step\n\t\t\t\t\t\t// labeled descriptor parser.\n\t\t\t\t\t} else if (c === \",\") {\n\t\t\t\t\t\tpos += 1;\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// U+0028 LEFT PARENTHESIS (()\n\t\t\t\t\t\t// Append c to current descriptor. Set state to in parens.\n\t\t\t\t\t} else if (c === \"\\u0028\") {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t\tstate = \"in parens\";\n\n\t\t\t\t\t\t// EOF\n\t\t\t\t\t\t// If current descriptor is not empty, append current descriptor to\n\t\t\t\t\t\t// descriptors. Jump to the step labeled descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// Anything else\n\t\t\t\t\t\t// Append c to current descriptor.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t}\n\t\t\t\t\t// (end \"in descriptor\"\n\n\t\t\t\t\t// In parens\n\t\t\t\t} else if (state === \"in parens\") {\n\n\t\t\t\t\t// U+0029 RIGHT PARENTHESIS ())\n\t\t\t\t\t// Append c to current descriptor. Set state to in descriptor.\n\t\t\t\t\tif (c === \")\") {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t\tstate = \"in descriptor\";\n\n\t\t\t\t\t\t// EOF\n\t\t\t\t\t\t// Append current descriptor to descriptors. Jump to the step labeled\n\t\t\t\t\t\t// descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// Anything else\n\t\t\t\t\t\t// Append c to current descriptor.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t}\n\n\t\t\t\t\t// After descriptor\n\t\t\t\t} else if (state === \"after descriptor\") {\n\n\t\t\t\t\t// Do the following, depending on the value of c:\n\t\t\t\t\t// Space character: Stay in this state.\n\t\t\t\t\tif (isSpace(c)) {\n\n\t\t\t\t\t\t// EOF: Jump to the step labeled descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// Anything else\n\t\t\t\t\t\t// Set state to in descriptor. Set position to the previous character in input.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate = \"in descriptor\";\n\t\t\t\t\t\tpos -= 1;\n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Advance position to the next character in input.\n\t\t\t\tpos += 1;\n\n\t\t\t\t// Repeat this step.\n\t\t\t} // (close while true loop)\n\t\t}\n\n\t\t/**\n\t\t * Adds descriptor properties to a candidate, pushes to the candidates array\n\t\t * @return undefined\n\t\t */\n\t\t// Declared outside of the while loop so that it's only created once.\n\t\tfunction parseDescriptors() {\n\n\t\t\t// 9. Descriptor parser: Let error be no.\n\t\t\tvar pError = false,\n\n\t\t\t\t// 10. Let width be absent.\n\t\t\t\t// 11. Let density be absent.\n\t\t\t\t// 12. Let future-compat-h be absent. (We're implementing it now as h)\n\t\t\t\tw, d, h, i,\n\t\t\t\tcandidate = {},\n\t\t\t\tdesc, lastChar, value, intVal, floatVal;\n\n\t\t\t// 13. For each descriptor in descriptors, run the appropriate set of steps\n\t\t\t// from the following list:\n\t\t\tfor (i = 0 ; i < descriptors.length; i++) {\n\t\t\t\tdesc = descriptors[ i ];\n\n\t\t\t\tlastChar = desc[ desc.length - 1 ];\n\t\t\t\tvalue = desc.substring(0, desc.length - 1);\n\t\t\t\tintVal = parseInt(value, 10);\n\t\t\t\tfloatVal = parseFloat(value);\n\n\t\t\t\t// If the descriptor consists of a valid non-negative integer followed by\n\t\t\t\t// a U+0077 LATIN SMALL LETTER W character\n\t\t\t\tif (regexNonNegativeInteger.test(value) && (lastChar === \"w\")) {\n\n\t\t\t\t\t// If width and density are not both absent, then let error be yes.\n\t\t\t\t\tif (w || d) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing non-negative integers to the descriptor.\n\t\t\t\t\t// If the result is zero, let error be yes.\n\t\t\t\t\t// Otherwise, let width be the result.\n\t\t\t\t\tif (intVal === 0) {pError = true;} else {w = intVal;}\n\n\t\t\t\t\t// If the descriptor consists of a valid floating-point number followed by\n\t\t\t\t\t// a U+0078 LATIN SMALL LETTER X character\n\t\t\t\t} else if (regexFloatingPoint.test(value) && (lastChar === \"x\")) {\n\n\t\t\t\t\t// If width, density and future-compat-h are not all absent, then let error\n\t\t\t\t\t// be yes.\n\t\t\t\t\tif (w || d || h) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing floating-point number values to the descriptor.\n\t\t\t\t\t// If the result is less than zero, let error be yes. Otherwise, let density\n\t\t\t\t\t// be the result.\n\t\t\t\t\tif (floatVal < 0) {pError = true;} else {d = floatVal;}\n\n\t\t\t\t\t// If the descriptor consists of a valid non-negative integer followed by\n\t\t\t\t\t// a U+0068 LATIN SMALL LETTER H character\n\t\t\t\t} else if (regexNonNegativeInteger.test(value) && (lastChar === \"h\")) {\n\n\t\t\t\t\t// If height and density are not both absent, then let error be yes.\n\t\t\t\t\tif (h || d) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing non-negative integers to the descriptor.\n\t\t\t\t\t// If the result is zero, let error be yes. Otherwise, let future-compat-h\n\t\t\t\t\t// be the result.\n\t\t\t\t\tif (intVal === 0) {pError = true;} else {h = intVal;}\n\n\t\t\t\t\t// Anything else, Let error be yes.\n\t\t\t\t} else {pError = true;}\n\t\t\t} // (close step 13 for loop)\n\n\t\t\t// 15. If error is still no, then append a new image source to candidates whose\n\t\t\t// URL is url, associated with a width width if not absent and a pixel\n\t\t\t// density density if not absent. Otherwise, there is a parse error.\n\t\t\tif (!pError) {\n\t\t\t\tcandidate.url = url;\n\t\t\t\tif (w) { candidate.w = w;}\n\t\t\t\tif (d) { candidate.d = d;}\n\t\t\t\tif (h) { candidate.h = h;}\n\t\t\t\tcandidates.push(candidate);\n\t\t\t} else if (console && console.log) {\n\t\t\t\tconsole.log(\"Invalid srcset descriptor found in '\" +\n\t\t\t\t\tinput + \"' at '\" + desc + \"'.\");\n\t\t\t}\n\t\t} // (close parseDescriptors fn)\n\n\t}\n}));\n","'use strict'\n\nlet AtRule = require('./at-rule')\nlet Comment = require('./comment')\nlet Container = require('./container')\nlet CssSyntaxError = require('./css-syntax-error')\nlet Declaration = require('./declaration')\nlet Document = require('./document')\nlet fromJSON = require('./fromJSON')\nlet Input = require('./input')\nlet LazyResult = require('./lazy-result')\nlet list = require('./list')\nlet Node = require('./node')\nlet parse = require('./parse')\nlet Processor = require('./processor')\nlet Result = require('./result.js')\nlet Root = require('./root')\nlet Rule = require('./rule')\nlet stringify = require('./stringify')\nlet Warning = require('./warning')\n\nfunction postcss(...plugins) {\n  if (plugins.length === 1 && Array.isArray(plugins[0])) {\n    plugins = plugins[0]\n  }\n  return new Processor(plugins)\n}\n\npostcss.plugin = function plugin(name, initializer) {\n  let warningPrinted = false\n  function creator(...args) {\n    // eslint-disable-next-line no-console\n    if (console && console.warn && !warningPrinted) {\n      warningPrinted = true\n      // eslint-disable-next-line no-console\n      console.warn(\n        name +\n          ': postcss.plugin was deprecated. Migration guide:\\n' +\n          'https://evilmartians.com/chronicles/postcss-8-plugin-migration'\n      )\n      if (process.env.LANG && process.env.LANG.startsWith('zh')) {\n        /* c8 ignore next 7 */\n        // eslint-disable-next-line no-console\n        console.warn(\n          name +\n            ': 里面 postcss.plugin 被弃用. 迁移指南:\\n' +\n            'https://www.w3ctech.com/topic/2226'\n        )\n      }\n    }\n    let transformer = initializer(...args)\n    transformer.postcssPlugin = name\n    transformer.postcssVersion = new Processor().version\n    return transformer\n  }\n\n  let cache\n  Object.defineProperty(creator, 'postcss', {\n    get() {\n      if (!cache) cache = creator()\n      return cache\n    }\n  })\n\n  creator.process = function (css, processOpts, pluginOpts) {\n    return postcss([creator(pluginOpts)]).process(css, processOpts)\n  }\n\n  return creator\n}\n\npostcss.stringify = stringify\npostcss.parse = parse\npostcss.fromJSON = fromJSON\npostcss.list = list\n\npostcss.comment = defaults => new Comment(defaults)\npostcss.atRule = defaults => new AtRule(defaults)\npostcss.decl = defaults => new Declaration(defaults)\npostcss.rule = defaults => new Rule(defaults)\npostcss.root = defaults => new Root(defaults)\npostcss.document = defaults => new Document(defaults)\n\npostcss.CssSyntaxError = CssSyntaxError\npostcss.Declaration = Declaration\npostcss.Container = Container\npostcss.Processor = Processor\npostcss.Document = Document\npostcss.Comment = Comment\npostcss.Warning = Warning\npostcss.AtRule = AtRule\npostcss.Result = Result\npostcss.Input = Input\npostcss.Rule = Rule\npostcss.Root = Root\npostcss.Node = Node\n\nLazyResult.registerPostcss(postcss)\n\nmodule.exports = postcss\npostcss.default = postcss\n","var x=String;\nvar create=function() {return {isColorSupported:false,reset:x,bold:x,dim:x,italic:x,underline:x,inverse:x,hidden:x,strikethrough:x,black:x,red:x,green:x,yellow:x,blue:x,magenta:x,cyan:x,white:x,gray:x,bgBlack:x,bgRed:x,bgGreen:x,bgYellow:x,bgBlue:x,bgMagenta:x,bgCyan:x,bgWhite:x,blackBright:x,redBright:x,greenBright:x,yellowBright:x,blueBright:x,magentaBright:x,cyanBright:x,whiteBright:x,bgBlackBright:x,bgRedBright:x,bgGreenBright:x,bgYellowBright:x,bgBlueBright:x,bgMagentaBright:x,bgCyanBright:x,bgWhiteBright:x}};\nmodule.exports=create();\nmodule.exports.createColors = create;\n","'use strict'\n\nlet AtRule = require('./at-rule')\nlet Comment = require('./comment')\nlet Declaration = require('./declaration')\nlet Input = require('./input')\nlet PreviousMap = require('./previous-map')\nlet Root = require('./root')\nlet Rule = require('./rule')\n\nfunction hydrateInputs(json, inputs) {\n  if (!json.inputs) return inputs\n  return json.inputs.map(input => {\n    let inputHydrated = { ...input, __proto__: Input.prototype }\n    if (inputHydrated.map) {\n      inputHydrated.map = {\n        ...inputHydrated.map,\n        __proto__: PreviousMap.prototype\n      }\n    }\n    return inputHydrated\n  })\n}\n\nfunction constructNode(json, inputs, children) {\n  let defaults = { ...json }\n  delete defaults.inputs\n  delete defaults.nodes\n  if (defaults.source) {\n    let { inputId, ...source } = defaults.source\n    defaults.source = source\n    if (inputId != null) {\n      defaults.source.input = inputs[inputId]\n    }\n  }\n\n  let node\n  if (defaults.type === 'root') {\n    node = new Root(defaults)\n  } else if (defaults.type === 'decl') {\n    node = new Declaration(defaults)\n  } else if (defaults.type === 'rule') {\n    node = new Rule(defaults)\n  } else if (defaults.type === 'comment') {\n    node = new Comment(defaults)\n  } else if (defaults.type === 'atrule') {\n    node = new AtRule(defaults)\n  } else {\n    throw new Error('Unknown node type: ' + json.type)\n  }\n\n  // Rehydrated children are attached after construction. Passing them\n  // through the container constructor would re-run insertion spacing\n  // normalization and overwrite each child's own `raws.before`.\n  if (children) {\n    node.nodes = children\n    for (let child of children) child.parent = node\n  }\n\n  return node\n}\n\nfunction fromJSON(json, inputs) {\n  if (Array.isArray(json)) return json.map(n => fromJSON(n))\n\n  // An explicit stack instead of recursive calls to survive deeply\n  // nested trees. Children are rehydrated before their parent node\n  // is constructed.\n  let result\n  let stack = [\n    { childIndex: 0, children: [], inputs: hydrateInputs(json, inputs), json }\n  ]\n\n  while (stack.length > 0) {\n    let frame = stack[stack.length - 1]\n    let jsonNodes = frame.json.nodes\n\n    if (jsonNodes && frame.childIndex < jsonNodes.length) {\n      let childJson = jsonNodes[frame.childIndex]\n      frame.childIndex += 1\n      stack.push({\n        childIndex: 0,\n        children: [],\n        inputs: hydrateInputs(childJson, frame.inputs),\n        json: childJson\n      })\n      continue\n    }\n\n    stack.pop()\n    let node = constructNode(\n      frame.json,\n      frame.inputs,\n      jsonNodes ? frame.children : undefined\n    )\n    if (stack.length > 0) {\n      stack[stack.length - 1].children.push(node)\n    } else {\n      result = node\n    }\n  }\n\n  return result\n}\n\nmodule.exports = fromJSON\nfromJSON.default = fromJSON\n","'use strict'\n\nlet AtRule = require('./at-rule')\nlet Comment = require('./comment')\nlet Declaration = require('./declaration')\nlet Root = require('./root')\nlet Rule = require('./rule')\nlet tokenizer = require('./tokenize')\n\nconst SAFE_COMMENT_NEIGHBOR = {\n  empty: true,\n  space: true\n}\n\nfunction findLastWithPosition(tokens) {\n  for (let i = tokens.length - 1; i >= 0; i--) {\n    let token = tokens[i]\n    let pos = token[3] || token[2]\n    if (pos) return pos\n  }\n}\n\nfunction tokensToString(tokens, from, to) {\n  let result = ''\n  for (let i = from; i < to; i++) result += tokens[i][1]\n  return result\n}\n\nclass Parser {\n  constructor(input) {\n    this.input = input\n\n    this.root = new Root()\n    this.current = this.root\n    this.spaces = ''\n    this.semicolon = false\n\n    this.createTokenizer()\n    this.root.source = { input, start: { column: 1, line: 1, offset: 0 } }\n  }\n\n  atrule(token) {\n    let node = new AtRule()\n    node.name = token[1].slice(1)\n    if (node.name === '') {\n      this.unnamedAtrule(node, token)\n    }\n    this.init(node, token[2])\n\n    let type\n    let prev\n    let shift\n    let last = false\n    let open = false\n    let params = []\n    let brackets = []\n\n    while (!this.tokenizer.endOfFile()) {\n      token = this.tokenizer.nextToken()\n      type = token[0]\n\n      if (type === '(' || type === '[') {\n        brackets.push(type === '(' ? ')' : ']')\n      } else if (type === '{' && brackets.length > 0) {\n        brackets.push('}')\n      } else if (type === brackets[brackets.length - 1]) {\n        brackets.pop()\n      }\n\n      if (brackets.length === 0) {\n        if (type === ';') {\n          node.source.end = this.getPosition(token[2])\n          node.source.end.offset++\n          this.semicolon = true\n          break\n        } else if (type === '{') {\n          open = true\n          break\n        } else if (type === '}') {\n          if (params.length > 0) {\n            shift = params.length - 1\n            prev = params[shift]\n            while (prev && prev[0] === 'space') {\n              prev = params[--shift]\n            }\n            if (prev) {\n              node.source.end = this.getPosition(prev[3] || prev[2])\n              node.source.end.offset++\n            }\n          }\n          this.end(token)\n          break\n        } else {\n          params.push(token)\n        }\n      } else {\n        params.push(token)\n      }\n\n      if (this.tokenizer.endOfFile()) {\n        last = true\n        break\n      }\n    }\n\n    node.raws.between = this.spacesAndCommentsFromEnd(params)\n    if (params.length) {\n      node.raws.afterName = this.spacesAndCommentsFromStart(params)\n      this.raw(node, 'params', params)\n      if (last) {\n        token = params[params.length - 1]\n        node.source.end = this.getPosition(token[3] || token[2])\n        node.source.end.offset++\n        this.spaces = node.raws.between\n        node.raws.between = ''\n      }\n    } else {\n      node.raws.afterName = ''\n      node.params = ''\n    }\n\n    if (open) {\n      node.nodes = []\n      this.current = node\n    }\n  }\n\n  checkMissedSemicolon(tokens) {\n    let colon = this.colon(tokens)\n    if (colon === false) return\n\n    let founded = 0\n    let token\n    for (let j = colon - 1; j >= 0; j--) {\n      token = tokens[j]\n      if (token[0] !== 'space') {\n        founded += 1\n        if (founded === 2) break\n      }\n    }\n    // If the token is a word, e.g. `!important`, `red` or any other valid\n    // property's value. Then we need to return the colon after that word\n    // token. [3] is the \"end\" colon of that word. And because we need it\n    // after that one we do +1 to get the next one.\n    throw this.input.error(\n      'Missed semicolon',\n      token[0] === 'word' ? token[3] + 1 : token[2]\n    )\n  }\n\n  colon(tokens) {\n    let brackets = 0\n    let prev, token, type\n    for (let [i, element] of tokens.entries()) {\n      token = element\n      type = token[0]\n\n      if (type === '(') {\n        brackets += 1\n      }\n      if (type === ')') {\n        brackets -= 1\n      }\n      if (brackets === 0 && type === ':') {\n        if (!prev) {\n          this.doubleColon(token)\n        } else if (prev[0] === 'word' && prev[1] === 'progid') {\n          continue\n        } else {\n          return i\n        }\n      }\n\n      prev = token\n    }\n    return false\n  }\n\n  comment(token) {\n    let node = new Comment()\n    this.init(node, token[2])\n    node.source.end = this.getPosition(token[3] || token[2])\n    node.source.end.offset++\n\n    let text = token[1].slice(2, -2)\n    if (!text.trim()) {\n      node.text = ''\n      node.raws.left = text\n      node.raws.right = ''\n    } else {\n      let match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/)\n      node.text = match[2]\n      node.raws.left = match[1]\n      node.raws.right = match[3]\n    }\n  }\n\n  createTokenizer() {\n    this.tokenizer = tokenizer(this.input)\n  }\n\n  decl(tokens, customProperty) {\n    let node = new Declaration()\n    this.init(node, tokens[0][2])\n\n    let last = tokens[tokens.length - 1]\n    if (last[0] === ';') {\n      this.semicolon = true\n      tokens.pop()\n    }\n\n    node.source.end = this.getPosition(\n      last[3] || last[2] || findLastWithPosition(tokens)\n    )\n    node.source.end.offset++\n\n    let start = 0\n    while (tokens[start][0] !== 'word') {\n      if (start === tokens.length - 1) this.unknownWord([tokens[start]])\n      start++\n    }\n    node.raws.before += tokensToString(tokens, 0, start)\n    node.source.start = this.getPosition(tokens[start][2])\n\n    let propStart = start\n    while (start < tokens.length) {\n      let type = tokens[start][0]\n      if (type === ':' || type === 'space' || type === 'comment') {\n        break\n      }\n      start++\n    }\n    node.prop = tokensToString(tokens, propStart, start)\n\n    let betweenStart = start\n    let token\n    while (start < tokens.length) {\n      token = tokens[start]\n      start++\n      if (token[0] === ':') break\n      if (token[0] === 'word' && /\\w/.test(token[1])) {\n        this.unknownWord([token])\n      }\n    }\n    node.raws.between = tokensToString(tokens, betweenStart, start)\n\n    if (node.prop[0] === '_' || node.prop[0] === '*') {\n      node.raws.before += node.prop[0]\n      node.prop = node.prop.slice(1)\n    }\n\n    let firstSpacesStart = start\n    while (start < tokens.length) {\n      let next = tokens[start][0]\n      if (next !== 'space' && next !== 'comment') break\n      start++\n    }\n    let firstSpaces = tokens.slice(firstSpacesStart, start)\n\n    tokens = tokens.slice(start)\n\n    this.precheckMissedSemicolon(tokens)\n\n    for (let i = tokens.length - 1; i >= 0; i--) {\n      token = tokens[i]\n      if (token[1].toLowerCase() === '!important') {\n        node.important = true\n        let string = this.stringFrom(tokens, i)\n        string = this.spacesFromEnd(tokens) + string\n        if (string !== ' !important') node.raws.important = string\n        break\n      } else if (token[1].toLowerCase() === 'important') {\n        let cache = tokens.slice(0)\n        let str = ''\n        for (let j = i; j > 0; j--) {\n          let type = cache[j][0]\n          if (str.trim().startsWith('!') && type !== 'space') {\n            break\n          }\n          str = cache.pop()[1] + str\n        }\n        if (str.trim().startsWith('!')) {\n          node.important = true\n          node.raws.important = str\n          tokens = cache\n        }\n      }\n\n      if (token[0] !== 'space' && token[0] !== 'comment') {\n        break\n      }\n    }\n\n    let hasWord = tokens.some(i => i[0] !== 'space' && i[0] !== 'comment')\n\n    if (hasWord) {\n      node.raws.between += firstSpaces.map(i => i[1]).join('')\n      firstSpaces = []\n    }\n    this.raw(node, 'value', firstSpaces.concat(tokens), customProperty)\n\n    if (node.value.includes(':') && !customProperty) {\n      this.checkMissedSemicolon(tokens)\n    }\n  }\n\n  doubleColon(token) {\n    throw this.input.error(\n      'Double colon',\n      { offset: token[2] },\n      { offset: token[2] + token[1].length }\n    )\n  }\n\n  emptyRule(token) {\n    let node = new Rule()\n    this.init(node, token[2])\n    node.selector = ''\n    node.raws.between = ''\n    this.current = node\n  }\n\n  end(token) {\n    if (this.current.nodes && this.current.nodes.length) {\n      this.current.raws.semicolon = this.semicolon\n    }\n    this.semicolon = false\n\n    this.current.raws.after = (this.current.raws.after || '') + this.spaces\n    this.spaces = ''\n\n    if (this.current.parent) {\n      this.current.source.end = this.getPosition(token[2])\n      this.current.source.end.offset++\n      this.current = this.current.parent\n    } else {\n      this.unexpectedClose(token)\n    }\n  }\n\n  endFile() {\n    if (this.current.parent) this.unclosedBlock()\n    if (this.current.nodes && this.current.nodes.length) {\n      this.current.raws.semicolon = this.semicolon\n    }\n    this.current.raws.after = (this.current.raws.after || '') + this.spaces\n    this.root.source.end = this.getPosition(this.tokenizer.position())\n  }\n\n  freeSemicolon(token) {\n    this.spaces += token[1]\n    if (this.current.nodes) {\n      let prev = this.current.nodes[this.current.nodes.length - 1]\n      if (prev && prev.type === 'rule' && !prev.raws.ownSemicolon) {\n        prev.raws.ownSemicolon = this.spaces\n        this.spaces = ''\n        // `ownSemicolon` also holds the spaces before the semicolon, but\n        // the position above is the semicolon itself, so the node ends\n        // right after it.\n        prev.source.end = this.getPosition(token[2])\n        prev.source.end.offset++\n      }\n    }\n  }\n\n  // Helpers\n\n  getPosition(offset) {\n    let pos = this.input.fromOffset(offset)\n    return {\n      column: pos.col,\n      line: pos.line,\n      offset\n    }\n  }\n\n  init(node, offset) {\n    this.current.push(node)\n    node.source = {\n      input: this.input,\n      start: this.getPosition(offset)\n    }\n    node.raws.before = this.spaces\n    this.spaces = ''\n    if (node.type !== 'comment') this.semicolon = false\n  }\n\n  other(start) {\n    let end = false\n    let type = null\n    let colon = false\n    let bracket = null\n    let brackets = []\n    let customProperty = start[1].startsWith('--')\n\n    let tokens = []\n    let token = start\n    while (token) {\n      type = token[0]\n      tokens.push(token)\n\n      if (type === '(' || type === '[') {\n        if (!bracket) bracket = token\n        brackets.push(type === '(' ? ')' : ']')\n      } else if (customProperty && colon && type === '{') {\n        if (!bracket) bracket = token\n        brackets.push('}')\n      } else if (brackets.length === 0) {\n        if (type === ';') {\n          if (colon) {\n            this.decl(tokens, customProperty)\n            return\n          } else {\n            break\n          }\n        } else if (type === '{') {\n          this.rule(tokens)\n          return\n        } else if (type === '}') {\n          this.tokenizer.back(tokens.pop())\n          end = true\n          break\n        } else if (type === ':') {\n          colon = true\n        }\n      } else if (type === brackets[brackets.length - 1]) {\n        brackets.pop()\n        if (brackets.length === 0) bracket = null\n      }\n\n      token = this.tokenizer.nextToken()\n    }\n\n    if (this.tokenizer.endOfFile()) end = true\n    if (brackets.length > 0) this.unclosedBracket(bracket)\n\n    if (end && colon) {\n      if (!customProperty) {\n        while (tokens.length) {\n          token = tokens[tokens.length - 1][0]\n          if (token !== 'space' && token !== 'comment') break\n          this.tokenizer.back(tokens.pop())\n        }\n      }\n      this.decl(tokens, customProperty)\n    } else {\n      this.unknownWord(tokens)\n    }\n  }\n\n  parse() {\n    let token\n    while (!this.tokenizer.endOfFile()) {\n      token = this.tokenizer.nextToken()\n\n      switch (token[0]) {\n        case 'space':\n          this.spaces += token[1]\n          break\n\n        case ';':\n          this.freeSemicolon(token)\n          break\n\n        case '}':\n          this.end(token)\n          break\n\n        case 'comment':\n          this.comment(token)\n          break\n\n        case 'at-word':\n          this.atrule(token)\n          break\n\n        case '{':\n          this.emptyRule(token)\n          break\n\n        default:\n          this.other(token)\n          break\n      }\n    }\n    this.endFile()\n  }\n\n  precheckMissedSemicolon(/* tokens */) {\n    // Hook for Safe Parser\n  }\n\n  raw(node, prop, tokens, customProperty) {\n    let token, type\n    let length = tokens.length\n    let value = ''\n    let clean = true\n    let next, prev\n\n    for (let i = 0; i < length; i += 1) {\n      token = tokens[i]\n      type = token[0]\n      if (type === 'space' && i === length - 1 && !customProperty) {\n        clean = false\n      } else if (type === 'comment') {\n        prev = tokens[i - 1] ? tokens[i - 1][0] : 'empty'\n        next = tokens[i + 1] ? tokens[i + 1][0] : 'empty'\n        if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) {\n          if (value.slice(-1) === ',') {\n            clean = false\n          } else {\n            value += token[1]\n          }\n        } else {\n          clean = false\n        }\n      } else {\n        value += token[1]\n      }\n    }\n    if (!clean) {\n      let raw = tokens.reduce((all, i) => all + i[1], '')\n      node.raws[prop] = { raw, value }\n    }\n    node[prop] = value\n  }\n\n  rule(tokens) {\n    tokens.pop()\n\n    let node = new Rule()\n    this.init(node, tokens[0][2])\n\n    node.raws.between = this.spacesAndCommentsFromEnd(tokens)\n    this.raw(node, 'selector', tokens)\n    this.current = node\n  }\n\n  spacesAndCommentsFromEnd(tokens) {\n    let lastTokenType\n    let spaces = ''\n    while (tokens.length) {\n      lastTokenType = tokens[tokens.length - 1][0]\n      if (lastTokenType !== 'space' && lastTokenType !== 'comment') break\n      spaces = tokens.pop()[1] + spaces\n    }\n    return spaces\n  }\n\n  // Errors\n\n  spacesAndCommentsFromStart(tokens) {\n    let next\n    let spaces = ''\n    while (tokens.length) {\n      next = tokens[0][0]\n      if (next !== 'space' && next !== 'comment') break\n      spaces += tokens.shift()[1]\n    }\n    return spaces\n  }\n\n  spacesFromEnd(tokens) {\n    let lastTokenType\n    let spaces = ''\n    while (tokens.length) {\n      lastTokenType = tokens[tokens.length - 1][0]\n      if (lastTokenType !== 'space') break\n      spaces = tokens.pop()[1] + spaces\n    }\n    return spaces\n  }\n\n  stringFrom(tokens, from) {\n    let result = ''\n    for (let i = from; i < tokens.length; i++) {\n      result += tokens[i][1]\n    }\n    tokens.splice(from, tokens.length - from)\n    return result\n  }\n\n  unclosedBlock() {\n    let pos = this.current.source.start\n    throw this.input.error('Unclosed block', pos.line, pos.column)\n  }\n\n  unclosedBracket(bracket) {\n    throw this.input.error(\n      'Unclosed bracket',\n      { offset: bracket[2] },\n      { offset: bracket[2] + 1 }\n    )\n  }\n\n  unexpectedClose(token) {\n    throw this.input.error(\n      'Unexpected }',\n      { offset: token[2] },\n      { offset: token[2] + 1 }\n    )\n  }\n\n  unknownWord(tokens) {\n    throw this.input.error(\n      'Unknown word ' + tokens[0][1],\n      { offset: tokens[0][2] },\n      { offset: tokens[0][2] + tokens[0][1].length }\n    )\n  }\n\n  unnamedAtrule(node, token) {\n    throw this.input.error(\n      'At-rule without name',\n      { offset: token[2] },\n      { offset: token[2] + token[1].length }\n    )\n  }\n}\n\nmodule.exports = Parser\n","'use strict'\n\nconst SINGLE_QUOTE = \"'\".charCodeAt(0)\nconst DOUBLE_QUOTE = '\"'.charCodeAt(0)\nconst BACKSLASH = '\\\\'.charCodeAt(0)\nconst SLASH = '/'.charCodeAt(0)\nconst NEWLINE = '\\n'.charCodeAt(0)\nconst SPACE = ' '.charCodeAt(0)\nconst FEED = '\\f'.charCodeAt(0)\nconst TAB = '\\t'.charCodeAt(0)\nconst CR = '\\r'.charCodeAt(0)\nconst OPEN_SQUARE = '['.charCodeAt(0)\nconst CLOSE_SQUARE = ']'.charCodeAt(0)\nconst OPEN_PARENTHESES = '('.charCodeAt(0)\nconst CLOSE_PARENTHESES = ')'.charCodeAt(0)\nconst OPEN_CURLY = '{'.charCodeAt(0)\nconst CLOSE_CURLY = '}'.charCodeAt(0)\nconst SEMICOLON = ';'.charCodeAt(0)\nconst ASTERISK = '*'.charCodeAt(0)\nconst COLON = ':'.charCodeAt(0)\nconst AT = '@'.charCodeAt(0)\n\nconst RE_AT_END = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g\nconst RE_WORD_END = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g\nconst RE_BAD_BRACKET = /.[\\r\\n\"'(/\\\\]/\nconst RE_HEX_ESCAPE = /[\\da-f]/i\n\nmodule.exports = function tokenizer(input, options = {}) {\n  let css = input.css.valueOf()\n  let ignore = options.ignoreErrors\n\n  let code, content, escape, next, quote\n  let currentToken, escaped, escapePos, n, prev\n\n  let length = css.length\n  let pos = 0\n  let buffer = []\n  let returned = []\n  let lastBadParen = -1\n\n  function position() {\n    return pos\n  }\n\n  function unclosed(what) {\n    throw input.error('Unclosed ' + what, pos)\n  }\n\n  function endOfFile() {\n    return returned.length === 0 && pos >= length\n  }\n\n  function nextToken(opts) {\n    if (returned.length) return returned.pop()\n    if (pos >= length) return\n\n    let ignoreUnclosed = opts ? opts.ignoreUnclosed : false\n\n    code = css.charCodeAt(pos)\n\n    switch (code) {\n      case NEWLINE:\n      case SPACE:\n      case TAB:\n      case CR:\n      case FEED: {\n        next = pos\n        do {\n          next += 1\n          code = css.charCodeAt(next)\n        } while (\n          code === SPACE ||\n          code === NEWLINE ||\n          code === TAB ||\n          code === CR ||\n          code === FEED\n        )\n\n        currentToken = ['space', css.slice(pos, next)]\n        pos = next - 1\n        break\n      }\n\n      case OPEN_SQUARE:\n      case CLOSE_SQUARE:\n      case OPEN_CURLY:\n      case CLOSE_CURLY:\n      case COLON:\n      case SEMICOLON:\n      case CLOSE_PARENTHESES: {\n        let controlChar = String.fromCharCode(code)\n        currentToken = [controlChar, controlChar, pos]\n        break\n      }\n\n      case OPEN_PARENTHESES: {\n        prev = buffer.length ? buffer.pop()[1] : ''\n        n = css.charCodeAt(pos + 1)\n        if (\n          prev === 'url' &&\n          n !== SINGLE_QUOTE &&\n          n !== DOUBLE_QUOTE &&\n          n !== SPACE &&\n          n !== NEWLINE &&\n          n !== TAB &&\n          n !== FEED &&\n          n !== CR\n        ) {\n          next = pos\n          do {\n            escaped = false\n            next = css.indexOf(')', next + 1)\n            if (next === -1) {\n              if (ignore || ignoreUnclosed) {\n                next = pos\n                break\n              } else {\n                unclosed('bracket')\n              }\n            }\n            escapePos = next\n            while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n              escapePos -= 1\n              escaped = !escaped\n            }\n          } while (escaped)\n\n          currentToken = ['brackets', css.slice(pos, next + 1), pos, next]\n\n          pos = next\n        } else if (pos <= lastBadParen) {\n          currentToken = ['(', '(', pos]\n        } else {\n          next = css.indexOf(')', pos + 1)\n          content = css.slice(pos, next + 1)\n\n          if (next === -1 || RE_BAD_BRACKET.test(content)) {\n            lastBadParen = next === -1 ? length : next\n            currentToken = ['(', '(', pos]\n          } else {\n            currentToken = ['brackets', content, pos, next]\n            pos = next\n          }\n        }\n\n        break\n      }\n\n      case SINGLE_QUOTE:\n      case DOUBLE_QUOTE: {\n        quote = code === SINGLE_QUOTE ? \"'\" : '\"'\n        next = pos\n        do {\n          escaped = false\n          next = css.indexOf(quote, next + 1)\n          if (next === -1) {\n            if (ignore || ignoreUnclosed) {\n              next = pos + 1\n              break\n            } else {\n              unclosed('string')\n            }\n          }\n          escapePos = next\n          while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n            escapePos -= 1\n            escaped = !escaped\n          }\n        } while (escaped)\n\n        currentToken = ['string', css.slice(pos, next + 1), pos, next]\n        pos = next\n        break\n      }\n\n      case AT: {\n        RE_AT_END.lastIndex = pos + 1\n        RE_AT_END.test(css)\n        if (RE_AT_END.lastIndex === 0) {\n          next = css.length - 1\n        } else {\n          next = RE_AT_END.lastIndex - 2\n        }\n\n        currentToken = ['at-word', css.slice(pos, next + 1), pos, next]\n\n        pos = next\n        break\n      }\n\n      case BACKSLASH: {\n        next = pos\n        escape = true\n        while (css.charCodeAt(next + 1) === BACKSLASH) {\n          next += 1\n          escape = !escape\n        }\n        code = css.charCodeAt(next + 1)\n        if (\n          escape &&\n          code !== SLASH &&\n          code !== SPACE &&\n          code !== NEWLINE &&\n          code !== TAB &&\n          code !== CR &&\n          code !== FEED\n        ) {\n          next += 1\n          if (RE_HEX_ESCAPE.test(css.charAt(next))) {\n            while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) {\n              next += 1\n            }\n            if (css.charCodeAt(next + 1) === SPACE) {\n              next += 1\n            }\n          }\n        }\n\n        currentToken = ['word', css.slice(pos, next + 1), pos, next]\n\n        pos = next\n        break\n      }\n\n      default: {\n        if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {\n          next = css.indexOf('*/', pos + 2) + 1\n          if (next === 0) {\n            if (ignore || ignoreUnclosed) {\n              next = css.length\n            } else {\n              unclosed('comment')\n            }\n          }\n\n          currentToken = ['comment', css.slice(pos, next + 1), pos, next]\n          pos = next\n        } else {\n          RE_WORD_END.lastIndex = pos + 1\n          RE_WORD_END.test(css)\n          if (RE_WORD_END.lastIndex === 0) {\n            next = css.length - 1\n          } else {\n            next = RE_WORD_END.lastIndex - 2\n          }\n\n          currentToken = ['word', css.slice(pos, next + 1), pos, next]\n          buffer.push(currentToken)\n          pos = next\n        }\n\n        break\n      }\n    }\n\n    pos++\n    return currentToken\n  }\n\n  function back(token) {\n    returned.push(token)\n  }\n\n  return {\n    back,\n    endOfFile,\n    nextToken,\n    position\n  }\n}\n","'use strict'\n\nlet Document = require('./document')\nlet LazyResult = require('./lazy-result')\nlet NoWorkResult = require('./no-work-result')\nlet Root = require('./root')\n\nclass Processor {\n  constructor(plugins = []) {\n    this.version = '8.5.28'\n    this.plugins = this.normalize(plugins)\n  }\n\n  normalize(plugins) {\n    let normalized = []\n    for (let i of plugins) {\n      if (i.postcss === true) {\n        i = i()\n      } else if (i.postcss) {\n        i = i.postcss\n      }\n\n      if (typeof i === 'object' && Array.isArray(i.plugins)) {\n        normalized = normalized.concat(i.plugins)\n      } else if (typeof i === 'object' && i.postcssPlugin) {\n        normalized.push(i)\n      } else if (typeof i === 'function') {\n        normalized.push(i)\n      } else if (typeof i === 'object' && (i.parse || i.stringify)) {\n        if (process.env.NODE_ENV !== 'production') {\n          throw new Error(\n            'PostCSS syntaxes cannot be used as plugins. Instead, please use ' +\n              'one of the syntax/parser/stringifier options as outlined ' +\n              'in your PostCSS runner documentation.'\n          )\n        }\n      } else {\n        throw new Error(i + ' is not a PostCSS plugin')\n      }\n    }\n    return normalized\n  }\n\n  process(css, opts = {}) {\n    if (\n      !this.plugins.length &&\n      !opts.parser &&\n      !opts.stringifier &&\n      !opts.syntax\n    ) {\n      return new NoWorkResult(this, css, opts)\n    } else {\n      return new LazyResult(this, css, opts)\n    }\n  }\n\n  use(plugin) {\n    this.plugins = this.plugins.concat(this.normalize([plugin]))\n    return this\n  }\n}\n\nmodule.exports = Processor\nProcessor.default = Processor\n\nRoot.registerProcessor(Processor)\nDocument.registerProcessor(Processor)\n","'use strict'\n\nlet MapGenerator = require('./map-generator')\nlet parse = require('./parse')\nlet Result = require('./result')\nlet stringify = require('./stringify')\nlet warnOnce = require('./warn-once')\n\nclass NoWorkResult {\n  get content() {\n    return this.result.css\n  }\n\n  get css() {\n    return this.result.css\n  }\n\n  get map() {\n    return this.result.map\n  }\n\n  get messages() {\n    return []\n  }\n\n  get opts() {\n    return this.result.opts\n  }\n\n  get processor() {\n    return this.result.processor\n  }\n\n  get root() {\n    if (this._root) {\n      return this._root\n    }\n\n    let root\n    let parser = parse\n\n    try {\n      root = parser(this._css, this._opts)\n    } catch (error) {\n      this.error = error\n    }\n\n    if (this.error) {\n      throw this.error\n    } else {\n      this._root = root\n      return root\n    }\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'NoWorkResult'\n  }\n\n  constructor(processor, css, opts) {\n    css = css.toString()\n    this.stringified = false\n\n    this._processor = processor\n    this._css = css\n    this._opts = opts\n    this._map = undefined\n\n    let str = stringify\n    this.result = new Result(this._processor, undefined, this._opts)\n    this.result.css = css\n\n    let self = this\n    Object.defineProperty(this.result, 'root', {\n      get() {\n        return self.root\n      }\n    })\n\n    let map = new MapGenerator(str, undefined, this._opts, css)\n    if (map.isMap()) {\n      let [generatedCSS, generatedMap] = map.generate()\n      if (generatedCSS) {\n        this.result.css = generatedCSS\n      }\n      if (generatedMap) {\n        this.result.map = generatedMap\n      }\n    } else {\n      map.clearAnnotation()\n      this.result.css = map.css\n    }\n  }\n\n  async() {\n    if (this.error) return Promise.reject(this.error)\n    return Promise.resolve(this.result)\n  }\n\n  catch(onRejected) {\n    return this.async().catch(onRejected)\n  }\n\n  finally(onFinally) {\n    return this.async().then(onFinally, onFinally)\n  }\n\n  sync() {\n    if (this.error) throw this.error\n    return this.result\n  }\n\n  then(onFulfilled, onRejected) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (!('from' in this._opts)) {\n        warnOnce(\n          'Without `from` option PostCSS could generate wrong source map ' +\n            'and will not find Browserslist config. Set it to CSS file path ' +\n            'or to `undefined` to prevent this warning.'\n        )\n      }\n    }\n\n    return this.async().then(onFulfilled, onRejected)\n  }\n\n  toString() {\n    return this._css\n  }\n\n  warnings() {\n    return []\n  }\n}\n\nmodule.exports = NoWorkResult\nNoWorkResult.default = NoWorkResult\n","const dayjs = require('dayjs');\n\n// Strip characters browsers ignore inside URLs (control chars and\n// embedded HTML comments) that are commonly used to sneak XSS\n// payloads past simple scheme checks.\nfunction cleanHref(href) {\n  // Browsers ignore character codes of 32 (space) and below in a surprising\n  // number of situations. Start reading here:\n  // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet#Embedded_tab\n  // eslint-disable-next-line no-control-regex\n  href = href.replace(/[\\x00-\\x20]+/g, '');\n  // Clobber any comments in URLs, which the browser might\n  // interpret inside an XML data island, allowing\n  // a javascript: URL to be snuck through\n  while (true) {\n    const firstIndex = href.indexOf('<!--');\n    if (firstIndex === -1) {\n      break;\n    }\n    const lastIndex = href.indexOf('-->', firstIndex + 4);\n    if (lastIndex === -1) {\n      break;\n    }\n    href = href.substring(0, firstIndex) + href.substring(lastIndex + 3);\n  }\n  return href;\n}\n\n// Returns true if `href` should be rejected as unsafe. Used to block\n// `javascript:`, `data:` and other dangerous schemes both when\n// validating URL fields and when sanitizing HTML attribute values.\n//\n// `options.allowedSchemes` is an array of permitted URL schemes\n// (defaults to the schemes long permitted by `launder().url`).\n// `options.allowProtocolRelative` controls whether protocol-relative\n// URLs (e.g. `//example.com`) are permitted. Defaults to true.\nfunction naughtyHref(href, options) {\n  options = options || {};\n  const allowedSchemes = options.allowedSchemes ||\n    [ 'http', 'https', 'ftp', 'mailto', 'tel', 'sms' ];\n  const allowProtocolRelative = (options.allowProtocolRelative !== false);\n  if (typeof href !== 'string') {\n    return false;\n  }\n  href = cleanHref(href);\n  // Case insensitive so we don't get faked out by JAVASCRIPT #1\n  // Allow more characters after the first so we don't get faked\n  // out by certain schemes browsers accept\n  const matches = href.match(/^([a-zA-Z][a-zA-Z0-9.\\-+]*):/);\n  if (!matches) {\n    // Protocol-relative URL starting with any combination of '/' and '\\'\n    if (href.match(/^[/\\\\]{2}/)) {\n      return !allowProtocolRelative;\n    }\n    // No scheme\n    return false;\n  }\n  const scheme = matches[1].toLowerCase();\n  return allowedSchemes.indexOf(scheme) === -1;\n}\n\nmodule.exports = function(options) {\n  const self = {};\n  self.options = options || {};\n\n  self.filterTag = self.options.filterTag || function(tag) {\n    tag = tag.trim();\n    return tag.toLowerCase();\n  };\n\n  self.string = function(s, def) {\n    if (typeof (s) !== 'string') {\n      if ((typeof (s) === 'number') || (typeof (s) === 'boolean')) {\n        s += '';\n      } else {\n        s = '';\n      }\n    }\n    s = s.trim();\n    if (def !== undefined) {\n      if (s === '') {\n        s = def;\n      }\n    }\n    return s;\n  };\n\n  self.strings = function(strings) {\n    if (!Array.isArray(strings)) {\n      return [];\n    }\n    return strings.map(function(s) {\n      return self.string(s);\n    });\n  };\n\n  self.integer = function(i, def, min, max) {\n    if (def === undefined) {\n      def = 0;\n    }\n    if (typeof (i) === 'number') {\n      i = Math.floor(i);\n    } else {\n      try {\n        i = parseInt(i, 10);\n        if (isNaN(i)) {\n          i = def;\n        }\n      } catch (e) {\n        i = def;\n      }\n    }\n    if ((typeof (min) === 'number') && (i < min)) {\n      i = min;\n    }\n    if ((typeof (max) === 'number') && (i > max)) {\n      i = max;\n    }\n    return i;\n  };\n\n  self.padInteger = function(i, places) {\n    let s = i + '';\n    while (s.length < places) {\n      s = '0' + s;\n    }\n    return s;\n  };\n\n  self.float = function(i, def, min, max) {\n    if (def === undefined) {\n      def = 0;\n    }\n    if (!(typeof (i) === 'number')) {\n      try {\n        i = parseFloat(i, 10);\n        if (isNaN(i)) {\n          i = def;\n        }\n      } catch (e) {\n        i = def;\n      }\n    }\n    if ((typeof (min) === 'number') && (i < min)) {\n      i = min;\n    }\n    if ((typeof (max) === 'number') && (i > max)) {\n      i = max;\n    }\n    return i;\n  };\n\n  self.naughtyHref = naughtyHref;\n\n  self.url = function(s, def, httpsFix) {\n    s = self.string(s, def);\n    // Allow the default to be undefined, null, false, etc.\n    if (s === def) {\n      return s;\n    }\n    // Strip characters browsers ignore that are commonly used to\n    // smuggle dangerous schemes past validation.\n    s = cleanHref(s);\n    // Reject naughty URLs (e.g. `javascript:`, `data:`) before fixUrl\n    // runs. Otherwise fixUrl could mask such schemes by prepending\n    // `https://` to anything containing a `.`, turning\n    // `javascript:alert(document.domain)` into a syntactically odd\n    // but accepted `https://...` URL.\n    if (naughtyHref(s)) {\n      return def;\n    }\n    s = fixUrl(s);\n    if (s === null) {\n      return def;\n    }\n    return s;\n\n    function fixUrl(href) {\n      if (href.match(/^(((https?|ftp):\\/\\/)|((mailto|tel|sms):)|#|([^/.]+)?\\/|[^/.]+$)/)) {\n        // All good - no change required\n        return href;\n      } else if (href.match(/^[^/.]+\\.[^/.]+/)) {\n        // Smells like a domain name. Educated guess: they left off http://\n        const protocol = httpsFix ? 'https://' : 'http://';\n        return protocol + href;\n      } else {\n        return null;\n      }\n    };\n  };\n\n  self.select = function(s, choices, def) {\n    s = self.string(s);\n    if (!choices || !choices.length) {\n      return def;\n    }\n    let choice;\n    if (typeof (choices[0]) === 'object') {\n      choice = choices.find(function(choice) {\n        if ((choice.value === null) || (choice.value === undefined)) {\n          // Don't crash on invalid choices\n          return false;\n        }\n        return choice.value.toString() === s;\n      });\n      if (choice != null) {\n        return choice.value;\n      }\n      return def;\n    }\n    choice = choices.find(function(choice) {\n      if ((choice === null) || (choice === undefined)) {\n        // Don't crash on invalid choices\n        return false;\n      }\n      return choice.toString() === s;\n    });\n    if (choice !== undefined) {\n      return choice;\n    }\n    return def;\n  };\n\n  self.boolean = function(b, def) {\n    if (b === true) {\n      return true;\n    }\n    if (b === false) {\n      return false;\n    }\n    b = self.string(b, def);\n    if (b === def) {\n      if (b === undefined) {\n        return false;\n      }\n      return b;\n    }\n    b = b.toLowerCase().charAt(0);\n    if ((b === '') || (b === 'n') || (b === '0') || (b === 'f')) {\n      return false;\n    }\n    if ((b === 't') || (b === 'y') || (b === '1')) {\n      return true;\n    }\n    return false;\n  };\n\n  // Given an `options` object in which options[name] is a string\n  // set to '0', '1', or 'any', this method adds mongodb criteria\n  // to the `criteria` object.\n  //\n  // '0' or false means \"the property must be false or absent,\" '1' or true\n  // means \"the property must be true,\" and 'any' or null means \"we don't care\n  // what the property is.\"\n  //\n  // See `booleanOrNull` for additional synonyms accepted for the\n  // three possible values.\n  //\n  // An empty string is considered equivalent to '0'.\n  //\n  // This is not the same as apos.sanitizeBoolean which is concerned only with\n  // true or false and does not address \"any.\"\n  //\n  // `def` defaults to `any`.\n  //\n  // This method is most often used with REST API parameters and forms.\n\n  self.addBooleanFilterToCriteria = function(options, name, criteria, def) {\n    // if any or null, we aren't changing criteria\n    if (def === undefined) {\n      def = null;\n    }\n\n    // allow object or boolean\n    let value = (typeof (options) === 'object' && options !== null) ? options[name] : options;\n    value = (value === undefined) ? def : value;\n    value = self.booleanOrNull(value);\n\n    if (value === null) {\n      // Don't care, show all\n    } else if (!value) {\n      // Must be absent or false. Hooray for $ne\n      criteria[name] = { $ne: true };\n    } else {\n      // Must be true\n      criteria[name] = true;\n    }\n  };\n\n  // This method is used for tristate filters, i.e. \"published,\"\n  // \"unpublished\", and \"show me both\".\n  //\n  // Accepts `true`, `false`, or `null` and returns them exactly\n  // as such; if the parameter is none of those or their synonyms\n  // below, returns `def`.\n  //\n  // Also accepts the strings `'yes'` (or starting with y), `'no'` (or\n  // starting with n), `'true'` (or starting with t), `'false'`\n  // (or starting with f), `'1'`, `'0'` and the strings `'any'` and\n  // `'null'`. The string `'null'` must be an exact match, anything\n  // else starting with `n` is taken as `no` (false).\n  //\n  // These various synonyms are useful for string input, such as from\n  // a user friendly query string.\n\n  self.booleanOrNull = function(b, def) {\n    if (b === true) {\n      return b;\n    }\n    if (b === false) {\n      return b;\n    }\n    if (b === null) {\n      return b;\n    }\n\n    b = self.string(b, def);\n    if (b === def) {\n      if (def === undefined) {\n        return null;\n      }\n      return b;\n    }\n\n    // String 'null' must match as a full string to disambiguate from string 'n' for 'no'\n    if (b === 'null') {\n      return null;\n    }\n\n    b = b.toLowerCase().charAt(0);\n\n    if ((b === '') || (b === 'n') || (b === '0') || (b === 'f')) {\n      return false;\n    }\n\n    if ((b === 't') || (b === 'y') || (b === '1')) {\n      return true;\n    }\n\n    if ((b === 'a')) {\n      return null;\n    }\n\n    return def;\n  };\n\n  // Accept a user-entered string in YYYY-MM-DD, MM/DD, MM/DD/YY, or MM/DD/YYYY format\n  // (tolerates missing leading zeroes on MM and DD). Also accepts a Date object.\n  // Returns YYYY-MM-DD.\n  //\n  // The current year is assumed when MM/DD is used. If there is no explicit default\n  // any unparseable date is returned as today's date.\n  //\n  // If the default is explicitly `null` (not `undefined`) then `null` is returned for\n  // any unparseable date.\n  //\n  // The `now` argument can be passed for performance if you prefer to call\n  // `new Date()` just once before many calls to this method and pass that single\n  // value to all of them.\n\n  self.date = function(date, def, now) {\n    let components;\n\n    function returnDefault() {\n      if (def === undefined) {\n        def = dayjs().format('YYYY-MM-DD');\n      }\n      return def;\n    }\n\n    if (typeof (date) === 'string') {\n      if (date.match(/\\//)) {\n        components = date.split('/');\n        if (components.length === 2) {\n          // Convert mm/dd to yyyy-mm-dd\n          return (now || new Date()).getFullYear() + '-' + self.padInteger(components[0], 2) + '-' + self.padInteger(components[1], 2);\n        } else if (components.length === 3) {\n          // Convert mm/dd/yy to mm/dd/yyyy\n          if (components[2] < 100) {\n            // Add the current century. If the result is more than\n            // 50 years in the future, assume they meant the\n            // previous century. Thus in 2015, we find that\n            // we get the intuitive result for both 1/1/75,\n            // 1/1/99 and 1/1/25. It's a nasty habit among\n            // us imprecise humans. -Tom\n            const d = (now || new Date());\n            const nowYear = d.getFullYear() % 100;\n            const nowCentury = d.getFullYear() - nowYear;\n            let theirYear = parseInt(components[2]) + nowCentury;\n            if (theirYear - d.getFullYear() > 50) {\n              theirYear -= 100;\n            }\n            components[2] = theirYear;\n          }\n          // Convert mm/dd/yyyy to yyyy-mm-dd\n          return self.padInteger(components[2], 4) + '-' + self.padInteger(components[0], 2) + '-' + self.padInteger(components[1], 2);\n        } else {\n          return returnDefault();\n        }\n      } else if (date.match(/-/)) {\n        components = date.split('-');\n        if (components.length === 2) {\n          // Convert mm-dd to yyyy-mm-dd\n          return (now || new Date()).getFullYear() + '-' + self.padInteger(components[0], 2) + '-' + self.padInteger(components[1], 2);\n        } else if (components.length === 3) {\n          // Convert yyyy-mm-dd (with questionable padding) to yyyy-mm-dd\n          return self.padInteger(components[0], 4) + '-' + self.padInteger(components[1], 2) + '-' + self.padInteger(components[2], 2);\n        } else {\n          return returnDefault();\n        }\n      }\n    }\n    try {\n      if (date === null) {\n        return returnDefault();\n      }\n      date = (now || new Date(date));\n      if (isNaN(date.getTime())) {\n        return returnDefault();\n      }\n      return date.getFullYear() + '-' + self.padInteger(date.getMonth() + 1, 2) + '-' + self.padInteger(date.getDate(), 2);\n    } catch (e) {\n      return returnDefault();\n    }\n  };\n\n  // This is likely not relevent to you unless you're using Apostrophe\n  // Given a date object, return a date string in Apostrophe's preferred sortable,\n  // comparable, JSON-able format, which is YYYY-MM-DD. If `date` is undefined\n  // the current date is used.\n  self.formatDate = function(date) {\n    return dayjs(date).format('YYYY-MM-DD');\n  };\n\n  // Accepts a user-entered string in 12-hour or 24-hour time and returns a string\n  // in 24-hour time. This method is tolerant of syntax such as `4pm`; minutes and\n  // seconds are optional.\n  //\n  // If `def` is not set the default is the current time.\n\n  self.time = function(time, def) {\n    time = self.string(time).toLowerCase();\n    time = time.trim();\n    const components = time.match(/^(\\d+)([:|.](\\d+))?([:|.](\\d+))?\\s*(am|pm|AM|PM|a|p|A|M)?$/);\n    if (components) {\n      let hours = parseInt(components[1], 10);\n      const minutes = (components[3] !== undefined) ? parseInt(components[3], 10) : 0;\n      const seconds = (components[5] !== undefined) ? parseInt(components[5], 10) : 0;\n      let ampm = (components[6]) ? components[6].toLowerCase() : components[6];\n      ampm = ampm && ampm.charAt(0);\n      if ((hours === 12) && (ampm === 'a')) {\n        hours -= 12;\n      } else if ((hours === 12) && (ampm === 'p')) {\n        // Leave it be\n      } else if (ampm === 'p') {\n        hours += 12;\n      }\n      if ((hours === 24) || (hours === '24')) {\n        hours = 0;\n      }\n      return self.padInteger(hours, 2) + ':' + self.padInteger(minutes, 2) + ':' + self.padInteger(seconds, 2);\n    } else {\n      if (def !== undefined) {\n        return def;\n      }\n      return dayjs().format('HH:mm');\n    }\n  };\n\n  // This is likely not relevent to you unless you're using Apostrophe\n  // Given a JavaScript Date object, return a time string in\n  // Apostrophe's preferred sortable, comparable, JSON-able format:\n  // 24-hour time, with seconds.\n  //\n  // If `date` is missing the current time is used.\n\n  self.formatTime = function(date) {\n    return dayjs(date).format('HH:mm:ss');\n  };\n\n  // Sanitize tags. Tags should be submitted as an array of strings,\n  // or a comma-separated string.\n  //\n  // This method ensures the input is an array or string and, if\n  // an array, that the elements of the array are strings.\n  //\n  // If a filterTag function is passed as an option when initializing\n  // Launder, then all tags are passed through it (as individual\n  // strings, one per call) and the return value is used instead. You\n  // may also pass a filterTag when calling this function\n\n  self.tags = function(tags, filter) {\n    if (typeof (tags) === 'string') {\n      tags = tags.split(/,\\s*/);\n    }\n    if (!Array.isArray(tags)) {\n      return [];\n    }\n    const strings = tags.map(tag => self.string(tag));\n    const rewritten = strings.map(filter || self.filterTag);\n    const filtered = rewritten.filter(tag => tag.length > 0);\n    return filtered;\n  };\n\n  // Sanitize an id. IDs must consist solely of upper and lower case\n  // letters, numbers, and digits unless options.idRegExp is set.\n\n  self.idRegExp = self.options.idRegExp || /^[A-Za-z0-9_]+$/;\n\n  self.id = function(s, def) {\n    const id = self.string(s, def);\n    if (id === def) {\n      return id;\n    }\n    if (!id.match(self.idRegExp)) {\n      return def;\n    }\n    return id;\n  };\n\n  // Sanitize an array of IDs. IDs must consist solely of upper and lower case\n  // letters and numbers, digits, and underscores. Any elements that are not\n  // IDs are omitted from the final array.\n  self.ids = function(ids) {\n    if (!Array.isArray(ids)) {\n      return [];\n    }\n    const result = ids.filter(function(id) {\n      return (self.id(id) !== undefined);\n    });\n    return result;\n  };\n  return self;\n};\n\n// Expose `naughtyHref` statically so callers (notably sanitize-html)\n// can use it without instantiating a launder.\nmodule.exports.naughtyHref = naughtyHref;\n","'use strict'\n\nconst numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n  if (typeof a === 'number' && typeof b === 'number') {\n    return a === b ? 0 : a < b ? -1 : 1\n  }\n\n  const anum = numeric.test(a)\n  const bnum = numeric.test(b)\n\n  if (anum && bnum) {\n    a = +a\n    b = +b\n  }\n\n  return a === b ? 0\n    : (anum && !bnum) ? -1\n    : (bnum && !anum) ? 1\n    : a < b ? -1\n    : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n  compareIdentifiers,\n  rcompareIdentifiers,\n}\n","'use strict'\n\nconst parse = require('./parse')\nconst valid = (version, options) => {\n  const v = parse(version, options)\n  return v ? v.version : null\n}\nmodule.exports = valid\n","'use strict'\n\nconst parse = require('./parse')\nconst clean = (version, options) => {\n  const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n  return s ? s.version : null\n}\nmodule.exports = clean\n","'use strict'\n\nconst SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n  if (typeof (options) === 'string') {\n    identifierBase = identifier\n    identifier = options\n    options = undefined\n  }\n\n  try {\n    return new SemVer(\n      version instanceof SemVer ? version.version : version,\n      options\n    ).inc(release, identifier, identifierBase).version\n  } catch (er) {\n    return null\n  }\n}\nmodule.exports = inc\n","'use strict'\n\nconst parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n  const v1 = parse(version1, null, true)\n  const v2 = parse(version2, null, true)\n  const comparison = v1.compare(v2)\n\n  if (comparison === 0) {\n    return null\n  }\n\n  const v1Higher = comparison > 0\n  const highVersion = v1Higher ? v1 : v2\n  const lowVersion = v1Higher ? v2 : v1\n  const highHasPre = !!highVersion.prerelease.length\n  const lowHasPre = !!lowVersion.prerelease.length\n\n  if (lowHasPre && !highHasPre) {\n    // Going from prerelease -> no prerelease requires some special casing\n\n    // If the low version has only a major, then it will always be a major\n    // Some examples:\n    // 1.0.0-1 -> 1.0.0\n    // 1.0.0-1 -> 1.1.1\n    // 1.0.0-1 -> 2.0.0\n    if (!lowVersion.patch && !lowVersion.minor) {\n      return 'major'\n    }\n\n    // If the main part has no difference\n    if (lowVersion.compareMain(highVersion) === 0) {\n      if (lowVersion.minor && !lowVersion.patch) {\n        return 'minor'\n      }\n      return 'patch'\n    }\n  }\n\n  // add the `pre` prefix if we are going to a prerelease version\n  const prefix = highHasPre ? 'pre' : ''\n\n  if (v1.major !== v2.major) {\n    return prefix + 'major'\n  }\n\n  if (v1.minor !== v2.minor) {\n    return prefix + 'minor'\n  }\n\n  if (v1.patch !== v2.patch) {\n    return prefix + 'patch'\n  }\n\n  // high and low are prereleases\n  return 'prerelease'\n}\n\nmodule.exports = diff\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","'use strict'\n\nconst parse = require('./parse')\nconst prerelease = (version, options) => {\n  const parsed = parse(version, options)\n  return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","'use strict'\n\nconst compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","'use strict'\n\nconst compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","'use strict'\n\nconst compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","'use strict'\n\nconst compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n  if (version instanceof SemVer) {\n    return version\n  }\n\n  if (typeof version === 'number') {\n    version = String(version)\n  }\n\n  if (typeof version !== 'string') {\n    return null\n  }\n\n  options = options || {}\n\n  let match = null\n  if (!options.rtl) {\n    match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n  } else {\n    // Find the right-most coercible string that does not share\n    // a terminus with a more left-ward coercible string.\n    // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n    // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n    //\n    // Walk through the string checking with a /g regexp\n    // Manually set the index so as to pick up overlapping matches.\n    // Stop when we get a match that ends at the string end, since no\n    // coercible string can be more right-ward without the same terminus.\n    const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n    let next\n    while ((next = coerceRtlRegex.exec(version)) &&\n        (!match || match.index + match[0].length !== version.length)\n    ) {\n      if (!match ||\n            next.index + next[0].length !== match.index + match[0].length) {\n        match = next\n      }\n      coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n    }\n    // leave it in a clean state\n    coerceRtlRegex.lastIndex = -1\n  }\n\n  if (match === null) {\n    return null\n  }\n\n  const major = match[2]\n  const minor = match[3] || '0'\n  const patch = match[4] || '0'\n  const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n  const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n  return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n","'use strict'\n\nconst parse = require('./parse')\nconst constants = require('../internal/constants')\nconst SemVer = require('../classes/semver')\n\nconst truncate = (version, truncation, options) => {\n  if (!constants.RELEASE_TYPES.includes(truncation)) {\n    return null\n  }\n\n  const clonedVersion = cloneInputVersion(version, options)\n  return clonedVersion && doTruncation(clonedVersion, truncation)\n}\n\nconst cloneInputVersion = (version, options) => {\n  const versionStringToParse = (\n    version instanceof SemVer ? version.version : version\n  )\n\n  return parse(versionStringToParse, options)\n}\n\nconst doTruncation = (version, truncation) => {\n  if (isPrerelease(truncation)) {\n    return version.version\n  }\n\n  version.prerelease = []\n\n  switch (truncation) {\n    case 'major':\n      version.minor = 0\n      version.patch = 0\n      break\n    case 'minor':\n      version.patch = 0\n      break\n  }\n\n  return version.format()\n}\n\nconst isPrerelease = (type) => {\n  return type.startsWith('pre')\n}\n\nmodule.exports = truncate\n","'use strict'\n\nclass LRUCache {\n  constructor () {\n    this.max = 1000\n    this.map = new Map()\n  }\n\n  get (key) {\n    const value = this.map.get(key)\n    if (value === undefined) {\n      return undefined\n    } else {\n      // Remove the key from the map and add it to the end\n      this.map.delete(key)\n      this.map.set(key, value)\n      return value\n    }\n  }\n\n  delete (key) {\n    return this.map.delete(key)\n  }\n\n  set (key, value) {\n    const deleted = this.delete(key)\n\n    if (!deleted && value !== undefined) {\n      // If cache is full, delete the least recently used item\n      if (this.map.size >= this.max) {\n        const firstKey = this.map.keys().next().value\n        this.delete(firstKey)\n      }\n\n      this.map.set(key, value)\n    }\n\n    return this\n  }\n}\n\nmodule.exports = LRUCache\n","'use strict'\n\nconst Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n  new Range(range, options).set\n    .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n  let max = null\n  let maxSV = null\n  let rangeObj = null\n  try {\n    rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach((v) => {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!max || maxSV.compare(v) === -1) {\n        // compare(max, v, true)\n        max = v\n        maxSV = new SemVer(max, options)\n      }\n    }\n  })\n  return max\n}\nmodule.exports = maxSatisfying\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n  let min = null\n  let minSV = null\n  let rangeObj = null\n  try {\n    rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach((v) => {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!min || minSV.compare(v) === 1) {\n        // compare(min, v, true)\n        min = v\n        minSV = new SemVer(min, options)\n      }\n    }\n  })\n  return min\n}\nmodule.exports = minSatisfying\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n  range = new Range(range, loose)\n\n  let minver = new SemVer('0.0.0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = new SemVer('0.0.0-0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = null\n  for (let i = 0; i < range.set.length; ++i) {\n    const comparators = range.set[i]\n\n    let setMin = null\n    comparators.forEach((comparator) => {\n      // Clone to avoid manipulating the comparator's semver object.\n      const compver = new SemVer(comparator.semver.version)\n      switch (comparator.operator) {\n        case '>':\n          if (compver.prerelease.length === 0) {\n            compver.patch++\n          } else {\n            compver.prerelease.push(0)\n          }\n          compver.raw = compver.format()\n          /* fallthrough */\n        case '':\n        case '>=':\n          if (!setMin || gt(compver, setMin)) {\n            setMin = compver\n          }\n          break\n        case '<':\n        case '<=':\n          /* Ignore maximum versions */\n          break\n        /* istanbul ignore next */\n        default:\n          throw new Error(`Unexpected operation: ${comparator.operator}`)\n      }\n    })\n    if (setMin && (!minver || gt(minver, setMin))) {\n      minver = setMin\n    }\n  }\n\n  if (minver && range.test(minver)) {\n    return minver\n  }\n\n  return null\n}\nmodule.exports = minVersion\n","'use strict'\n\nconst Range = require('../classes/range')\nconst validRange = (range, options) => {\n  try {\n    // Return '*' instead of '' so that truthiness works.\n    // This will throw if it's invalid anyway\n    return new Range(range, options).range || '*'\n  } catch (er) {\n    return null\n  }\n}\nmodule.exports = validRange\n","'use strict'\n\n// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","'use strict'\n\nconst outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","'use strict'\n\nconst Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n  r1 = new Range(r1, options)\n  r2 = new Range(r2, options)\n  return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n","'use strict'\n\n// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n  const set = []\n  let first = null\n  let prev = null\n  const v = versions.sort((a, b) => compare(a, b, options))\n  for (const version of v) {\n    const included = satisfies(version, range, options)\n    if (included) {\n      prev = version\n      if (!first) {\n        first = version\n      }\n    } else {\n      if (prev) {\n        set.push([first, prev])\n      }\n      prev = null\n      first = null\n    }\n  }\n  if (first) {\n    set.push([first, null])\n  }\n\n  const ranges = []\n  for (const [min, max] of set) {\n    if (min === max) {\n      ranges.push(min)\n    } else if (!max && min === v[0]) {\n      ranges.push('*')\n    } else if (!max) {\n      ranges.push(`>=${min}`)\n    } else if (min === v[0]) {\n      ranges.push(`<=${max}`)\n    } else {\n      ranges.push(`${min} - ${max}`)\n    }\n  }\n  const simplified = ranges.join(' || ')\n  const original = typeof range.raw === 'string' ? range.raw : String(range)\n  return simplified.length < original.length ? simplified : range\n}\n","'use strict'\n\nconst Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n//   some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n//   - If C is only the ANY comparator, return true\n//   - Else if in prerelease mode, return false\n//   - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n//   - if in prerelease mode, return true\n//   - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n//   - If GT, and EQ does not satisfy GT, return true (null set)\n//   - If LT, and EQ does not satisfy LT, return true (null set)\n//   - If EQ satisfies every C, return true\n//   - Else return false\n// - If GT\n//   - If GT.semver is lower than any > or >= comp in C, return false\n//   - If GT is >=, and GT.semver does not satisfy every C, return false\n//   - If GT.semver has a prerelease, and not in prerelease mode\n//     - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n//   - If LT.semver is greater than any < or <= comp in C, return false\n//   - If LT is <=, and LT.semver does not satisfy every C, return false\n//   - If LT.semver has a prerelease, and not in prerelease mode\n//     - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n  if (sub === dom) {\n    return true\n  }\n\n  sub = new Range(sub, options)\n  dom = new Range(dom, options)\n  let sawNonNull = false\n\n  OUTER: for (const simpleSub of sub.set) {\n    for (const simpleDom of dom.set) {\n      const isSub = simpleSubset(simpleSub, simpleDom, options)\n      sawNonNull = sawNonNull || isSub !== null\n      if (isSub) {\n        continue OUTER\n      }\n    }\n    // the null set is a subset of everything, but null simple ranges in\n    // a complex range should be ignored.  so if we saw a non-null range,\n    // then we know this isn't a subset, but if EVERY simple range was null,\n    // then it is a subset.\n    if (sawNonNull) {\n      return false\n    }\n  }\n  return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n  if (sub === dom) {\n    return true\n  }\n\n  if (sub.length === 1 && sub[0].semver === ANY) {\n    if (dom.length === 1 && dom[0].semver === ANY) {\n      return true\n    } else if (options.includePrerelease) {\n      sub = minimumVersionWithPreRelease\n    } else {\n      sub = minimumVersion\n    }\n  }\n\n  if (dom.length === 1 && dom[0].semver === ANY) {\n    if (options.includePrerelease) {\n      return true\n    } else {\n      dom = minimumVersion\n    }\n  }\n\n  const eqSet = new Set()\n  let gt, lt\n  for (const c of sub) {\n    if (c.operator === '>' || c.operator === '>=') {\n      gt = higherGT(gt, c, options)\n    } else if (c.operator === '<' || c.operator === '<=') {\n      lt = lowerLT(lt, c, options)\n    } else {\n      eqSet.add(c.semver)\n    }\n  }\n\n  if (eqSet.size > 1) {\n    return null\n  }\n\n  let gtltComp\n  if (gt && lt) {\n    gtltComp = compare(gt.semver, lt.semver, options)\n    if (gtltComp > 0) {\n      return null\n    } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n      return null\n    }\n  }\n\n  // will iterate one or zero times\n  for (const eq of eqSet) {\n    if (gt && !satisfies(eq, String(gt), options)) {\n      return null\n    }\n\n    if (lt && !satisfies(eq, String(lt), options)) {\n      return null\n    }\n\n    for (const c of dom) {\n      if (!satisfies(eq, String(c), options)) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  let higher, lower\n  let hasDomLT, hasDomGT\n  // if the subset has a prerelease, we need a comparator in the superset\n  // with the same tuple and a prerelease, or it's not a subset\n  let needDomLTPre = lt &&\n    !options.includePrerelease &&\n    lt.semver.prerelease.length ? lt.semver : false\n  let needDomGTPre = gt &&\n    !options.includePrerelease &&\n    gt.semver.prerelease.length ? gt.semver : false\n  // exception: <1.2.3-0 is the same as <1.2.3\n  if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n      lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n    needDomLTPre = false\n  }\n\n  for (const c of dom) {\n    hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n    hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n    if (gt) {\n      if (needDomGTPre) {\n        if (c.semver.prerelease && c.semver.prerelease.length &&\n            c.semver.major === needDomGTPre.major &&\n            c.semver.minor === needDomGTPre.minor &&\n            c.semver.patch === needDomGTPre.patch) {\n          needDomGTPre = false\n        }\n      }\n      if (c.operator === '>' || c.operator === '>=') {\n        higher = higherGT(gt, c, options)\n        if (higher === c && higher !== gt) {\n          return false\n        }\n      } else if (gt.operator === '>=' && !c.test(gt.semver)) {\n        return false\n      }\n    }\n    if (lt) {\n      if (needDomLTPre) {\n        if (c.semver.prerelease && c.semver.prerelease.length &&\n            c.semver.major === needDomLTPre.major &&\n            c.semver.minor === needDomLTPre.minor &&\n            c.semver.patch === needDomLTPre.patch) {\n          needDomLTPre = false\n        }\n      }\n      if (c.operator === '<' || c.operator === '<=') {\n        lower = lowerLT(lt, c, options)\n        if (lower === c && lower !== lt) {\n          return false\n        }\n      } else if (lt.operator === '<=' && !c.test(lt.semver)) {\n        return false\n      }\n    }\n    if (!c.operator && (lt || gt) && gtltComp !== 0) {\n      return false\n    }\n  }\n\n  // if there was a < or >, and nothing in the dom, then must be false\n  // UNLESS it was limited by another range in the other direction.\n  // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n  if (gt && hasDomLT && !lt && gtltComp !== 0) {\n    return false\n  }\n\n  if (lt && hasDomGT && !gt && gtltComp !== 0) {\n    return false\n  }\n\n  // we needed a prerelease range in a specific tuple, but didn't get one\n  // then this isn't a subset.  eg >=1.2.3-pre is not a subset of >=1.0.0,\n  // because it includes prereleases in the 1.2.3 tuple\n  if (needDomGTPre || needDomLTPre) {\n    return false\n  }\n\n  return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n  if (!a) {\n    return b\n  }\n  const comp = compare(a.semver, b.semver, options)\n  return comp > 0 ? a\n    : comp < 0 ? b\n    : b.operator === '>' && a.operator === '>=' ? b\n    : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n  if (!a) {\n    return b\n  }\n  const comp = compare(a.semver, b.semver, options)\n  return comp < 0 ? a\n    : comp > 0 ? b\n    : b.operator === '<' && a.operator === '<=' ? b\n    : a\n}\n\nmodule.exports = subset\n","'use strict';\n\nconst word = '[a-fA-F\\\\d:]';\nconst b = options => options && options.includeBoundaries ?\n\t`(?:(?<=\\\\s|^)(?=${word})|(?<=${word})(?=\\\\s|$))` :\n\t'';\n\nconst v4 = '(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}';\n\nconst v6seg = '[a-fA-F\\\\d]{1,4}';\nconst v6 = `\n(?:\n(?:${v6seg}:){7}(?:${v6seg}|:)|                                    // 1:2:3:4:5:6:7::  1:2:3:4:5:6:7:8\n(?:${v6seg}:){6}(?:${v4}|:${v6seg}|:)|                             // 1:2:3:4:5:6::    1:2:3:4:5:6::8   1:2:3:4:5:6::8  1:2:3:4:5:6::1.2.3.4\n(?:${v6seg}:){5}(?::${v4}|(?::${v6seg}){1,2}|:)|                   // 1:2:3:4:5::      1:2:3:4:5::7:8   1:2:3:4:5::8    1:2:3:4:5::7:1.2.3.4\n(?:${v6seg}:){4}(?:(?::${v6seg}){0,1}:${v4}|(?::${v6seg}){1,3}|:)| // 1:2:3:4::        1:2:3:4::6:7:8   1:2:3:4::8      1:2:3:4::6:7:1.2.3.4\n(?:${v6seg}:){3}(?:(?::${v6seg}){0,2}:${v4}|(?::${v6seg}){1,4}|:)| // 1:2:3::          1:2:3::5:6:7:8   1:2:3::8        1:2:3::5:6:7:1.2.3.4\n(?:${v6seg}:){2}(?:(?::${v6seg}){0,3}:${v4}|(?::${v6seg}){1,5}|:)| // 1:2::            1:2::4:5:6:7:8   1:2::8          1:2::4:5:6:7:1.2.3.4\n(?:${v6seg}:){1}(?:(?::${v6seg}){0,4}:${v4}|(?::${v6seg}){1,6}|:)| // 1::              1::3:4:5:6:7:8   1::8            1::3:4:5:6:7:1.2.3.4\n(?::(?:(?::${v6seg}){0,5}:${v4}|(?::${v6seg}){1,7}|:))             // ::2:3:4:5:6:7:8  ::2:3:4:5:6:7:8  ::8             ::1.2.3.4\n)(?:%[0-9a-zA-Z]{1,})?                                             // %eth0            %1\n`.replace(/\\s*\\/\\/.*$/gm, '').replace(/\\n/g, '').trim();\n\n// Pre-compile only the exact regexes because adding a global flag make regexes stateful\nconst v46Exact = new RegExp(`(?:^${v4}$)|(?:^${v6}$)`);\nconst v4exact = new RegExp(`^${v4}$`);\nconst v6exact = new RegExp(`^${v6}$`);\n\nconst ip = options => options && options.exact ?\n\tv46Exact :\n\tnew RegExp(`(?:${b(options)}${v4}${b(options)})|(?:${b(options)}${v6}${b(options)})`, 'g');\n\nip.v4 = options => options && options.exact ? v4exact : new RegExp(`${b(options)}${v4}${b(options)}`, 'g');\nip.v6 = options => options && options.exact ? v6exact : new RegExp(`${b(options)}${v6}${b(options)}`, 'g');\n\nmodule.exports = ip;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsFormFieldLayoutValues {\n  Vertical = 'vertical',\n  Flag = 'flag',\n}\n\nexport type HdsFormFieldLayouts = `${HdsFormFieldLayoutValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsFormTextInputTypeValues {\n  Text = 'text',\n  Email = 'email',\n  Password = 'password',\n  Url = 'url',\n  Date = 'date',\n  Time = 'time',\n  DateTimeLocal = 'datetime-local',\n  Search = 'search',\n  Month = 'month',\n  Week = 'week',\n  Tel = 'tel',\n}\n\nexport type HdsFormTextInputTypes = `${HdsFormTextInputTypeValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsCopySnippetColorValues {\n  Primary = 'primary',\n  Secondary = 'secondary',\n}\nexport type HdsCopySnippetColors = `${HdsCopySnippetColorValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsDropdownListItemInteractiveColorValues {\n  Action = 'action',\n  Critical = 'critical',\n}\nexport type HdsDropdownListItemInteractiveColors =\n  `${HdsDropdownListItemInteractiveColorValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsSeparatorSpacingValues {\n  Zero = '0',\n  TwentyFour = '24',\n}\nexport type HdsSeparatorSpacing = `${HdsSeparatorSpacingValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsTooltipPlacementValues {\n  Top = 'top',\n  TopStart = 'top-start',\n  TopEnd = 'top-end',\n  Right = 'right',\n  RightStart = 'right-start',\n  RightEnd = 'right-end',\n  Bottom = 'bottom',\n  BottomStart = 'bottom-start',\n  BottomEnd = 'bottom-end',\n  Left = 'left',\n  LeftStart = 'left-start',\n  LeftEnd = 'left-end',\n}\n\nexport type HdsTooltipPlacements = `${HdsTooltipPlacementValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type {\n  HdsCompositeItem,\n  HdsCompositeNavigationConfig,\n  HdsCompositeNavigationSnapshot,\n  HdsCompositeOrientations,\n} from './types.ts';\n\nfunction matchesAxis(\n  value: boolean | HdsCompositeOrientations,\n  axis: HdsCompositeOrientations\n): boolean {\n  // `true` matches all axes, a string value matches only that axis\n  return value === true || value === axis;\n}\n\nfunction findEnabledItem(\n  items: HdsCompositeItem[],\n  startIndex: number,\n  direction: 1 | -1,\n  loop: boolean\n): HdsCompositeItem | undefined {\n  const length = items.length;\n\n  if (length === 0) {\n    return undefined;\n  }\n\n  let index = startIndex + direction;\n\n  if (loop === true) {\n    for (let step = 0; step < length; step++) {\n      const item = items[((index % length) + length) % length]!;\n\n      if (item.disabled === false) {\n        return item;\n      }\n\n      index += direction;\n    }\n  } else {\n    while (index >= 0 && index < length) {\n      const item = items[index]!;\n\n      if (item.disabled === false) {\n        return item;\n      }\n\n      index += direction;\n    }\n  }\n\n  return undefined;\n}\n\nexport function findFirstEnabled(\n  items: HdsCompositeItem[]\n): HdsCompositeItem | undefined {\n  return items.find((item) => item.disabled === false);\n}\n\nfunction findLastEnabled(\n  items: HdsCompositeItem[]\n): HdsCompositeItem | undefined {\n  for (let index = items.length - 1; index >= 0; index--) {\n    if (items[index]!.disabled === false) {\n      return items[index];\n    }\n  }\n\n  return undefined;\n}\n\nfunction getItemsInGroup(\n  items: HdsCompositeItem[],\n  groupId: string\n): HdsCompositeItem[] {\n  return items.filter((item) => item.groupId === groupId);\n}\n\nfunction resolveColumnTarget(\n  targetItems: HdsCompositeItem[],\n  columnIndex: number\n): HdsCompositeItem | undefined {\n  if (columnIndex < 0 || columnIndex >= targetItems.length) {\n    return findLastEnabled(targetItems);\n  }\n\n  const target = targetItems[columnIndex]!;\n\n  if (target.disabled === false) {\n    return target;\n  }\n\n  return (\n    findEnabledItem(targetItems, columnIndex, 1, false) ??\n    findEnabledItem(targetItems, columnIndex, -1, false)\n  );\n}\n\nexport function handleKey(\n  event: KeyboardEvent,\n  snapshot: HdsCompositeNavigationSnapshot,\n  config: HdsCompositeNavigationConfig\n): HdsCompositeItem | undefined {\n  const { key, ctrlKey } = event;\n  const hasGroups = snapshot.groups.length > 0;\n\n  if (hasGroups === true && config.orientation === undefined) {\n    return handle2DKey(key, ctrlKey, snapshot, config);\n  }\n\n  return handle1DKey(key, snapshot, config);\n}\n\nfunction handle1DKey(\n  key: string,\n  snapshot: HdsCompositeNavigationSnapshot,\n  config: HdsCompositeNavigationConfig\n): HdsCompositeItem | undefined {\n  const { orientation } = config;\n\n  switch (key) {\n    case 'ArrowRight':\n      if (orientation === 'vertical') {\n        return undefined;\n      }\n\n      return navigateLinear(snapshot, config, 'horizontal', 1);\n\n    case 'ArrowLeft':\n      if (orientation === 'vertical') {\n        return undefined;\n      }\n\n      return navigateLinear(snapshot, config, 'horizontal', -1);\n\n    case 'ArrowDown':\n      if (orientation === 'horizontal') {\n        return undefined;\n      }\n\n      return navigateLinear(snapshot, config, 'vertical', 1);\n\n    case 'ArrowUp':\n      if (orientation === 'horizontal') {\n        return undefined;\n      }\n\n      return navigateLinear(snapshot, config, 'vertical', -1);\n\n    case 'Home':\n      return findFirstEnabled(snapshot.items);\n\n    case 'End':\n      return findLastEnabled(snapshot.items);\n\n    default:\n      return undefined;\n  }\n}\n\nfunction handle2DKey(\n  key: string,\n  ctrlKey: boolean,\n  snapshot: HdsCompositeNavigationSnapshot,\n  config: HdsCompositeNavigationConfig\n): HdsCompositeItem | undefined {\n  switch (key) {\n    case 'ArrowRight':\n      return navigateInRow(snapshot, config, 1);\n\n    case 'ArrowLeft':\n      return navigateInRow(snapshot, config, -1);\n\n    case 'ArrowDown':\n      return navigateColumn(snapshot, config, 1);\n\n    case 'ArrowUp':\n      return navigateColumn(snapshot, config, -1);\n\n    case 'Home':\n      if (ctrlKey === true) {\n        return findFirstEnabled(snapshot.items);\n      }\n\n      return navigateRowEnd(snapshot, -1);\n\n    case 'End':\n      if (ctrlKey === true) {\n        return findLastEnabled(snapshot.items);\n      }\n\n      return navigateRowEnd(snapshot, 1);\n\n    case 'PageDown':\n      return navigateColumnEnd(snapshot, 1);\n\n    case 'PageUp':\n      return navigateColumnEnd(snapshot, -1);\n\n    default:\n      return undefined;\n  }\n}\n\nfunction navigateLinear(\n  snapshot: HdsCompositeNavigationSnapshot,\n  config: HdsCompositeNavigationConfig,\n  axis: HdsCompositeOrientations,\n  direction: 1 | -1\n): HdsCompositeItem | undefined {\n  const { items, currentIndex } = snapshot;\n\n  if (currentIndex === -1) {\n    return direction === 1 ? findFirstEnabled(items) : findLastEnabled(items);\n  }\n\n  return findEnabledItem(\n    items,\n    currentIndex,\n    direction,\n    matchesAxis(config.loop, axis)\n  );\n}\n\nfunction navigateInRow(\n  snapshot: HdsCompositeNavigationSnapshot,\n  config: HdsCompositeNavigationConfig,\n  direction: 1 | -1\n): HdsCompositeItem | undefined {\n  const { currentItem, items, groups } = snapshot;\n\n  if (currentItem === undefined || currentItem.groupId === undefined) {\n    return undefined;\n  }\n\n  const rowItems = getItemsInGroup(items, currentItem.groupId);\n  const rowIndex = rowItems.findIndex((item) => item.id === currentItem.id);\n  const shouldLoop = matchesAxis(config.loop, 'horizontal');\n  const found = findEnabledItem(rowItems, rowIndex, direction, shouldLoop);\n\n  if (found !== undefined) {\n    return found;\n  }\n\n  if (matchesAxis(config.wrap, 'horizontal') === false) {\n    return undefined;\n  }\n\n  const groupIndex = groups.findIndex(\n    (group) => group.id === currentItem.groupId\n  );\n  const adjacentGroupIndex = groupIndex + direction;\n\n  if (adjacentGroupIndex < 0 || adjacentGroupIndex >= groups.length) {\n    return undefined;\n  }\n\n  const adjacentItems = getItemsInGroup(items, groups[adjacentGroupIndex]!.id);\n\n  return direction === 1\n    ? findFirstEnabled(adjacentItems)\n    : findLastEnabled(adjacentItems);\n}\n\nfunction navigateColumn(\n  snapshot: HdsCompositeNavigationSnapshot,\n  config: HdsCompositeNavigationConfig,\n  direction: 1 | -1\n): HdsCompositeItem | undefined {\n  const { currentItem, items, groups } = snapshot;\n\n  if (currentItem === undefined || currentItem.groupId === undefined) {\n    return undefined;\n  }\n\n  const columnIndex = getItemsInGroup(items, currentItem.groupId).findIndex(\n    (item) => item.id === currentItem.id\n  );\n\n  const currentGroupIndex = groups.findIndex(\n    (group) => group.id === currentItem.groupId\n  );\n\n  let targetGroupIndex = currentGroupIndex + direction;\n\n  if (matchesAxis(config.loop, 'vertical') === true) {\n    const length = groups.length;\n    targetGroupIndex = ((targetGroupIndex % length) + length) % length;\n\n    for (let step = 0; step < length - 1; step++) {\n      const targetItems = getItemsInGroup(items, groups[targetGroupIndex]!.id);\n      const target = resolveColumnTarget(targetItems, columnIndex);\n\n      if (target !== undefined) {\n        return target;\n      }\n\n      targetGroupIndex =\n        (((targetGroupIndex + direction) % length) + length) % length;\n    }\n\n    return undefined;\n  } else if (targetGroupIndex < 0 || targetGroupIndex >= groups.length) {\n    if (matchesAxis(config.wrap, 'vertical') === false) {\n      return undefined;\n    }\n\n    let wrapGroupIndex = direction === 1 ? 0 : groups.length - 1;\n    const nextColumnIndex = columnIndex + direction;\n\n    if (nextColumnIndex < 0) {\n      return undefined;\n    }\n\n    while (wrapGroupIndex >= 0 && wrapGroupIndex < groups.length) {\n      const wrapItems = getItemsInGroup(items, groups[wrapGroupIndex]!.id);\n\n      if (nextColumnIndex < wrapItems.length) {\n        const target = resolveColumnTarget(wrapItems, nextColumnIndex);\n\n        if (target !== undefined) {\n          return target;\n        }\n      }\n\n      wrapGroupIndex += direction;\n    }\n\n    return undefined;\n  }\n\n  while (targetGroupIndex >= 0 && targetGroupIndex < groups.length) {\n    const targetItems = getItemsInGroup(items, groups[targetGroupIndex]!.id);\n    const target = resolveColumnTarget(targetItems, columnIndex);\n\n    if (target !== undefined) {\n      return target;\n    }\n\n    targetGroupIndex += direction;\n  }\n\n  return undefined;\n}\n\nfunction navigateColumnEnd(\n  snapshot: HdsCompositeNavigationSnapshot,\n  direction: 1 | -1\n): HdsCompositeItem | undefined {\n  const { currentItem, items, groups } = snapshot;\n\n  if (currentItem === undefined || currentItem.groupId === undefined) {\n    return undefined;\n  }\n\n  const columnIndex = getItemsInGroup(items, currentItem.groupId).findIndex(\n    (item) => item.id === currentItem.id\n  );\n\n  let targetGroupIndex = direction === 1 ? groups.length - 1 : 0;\n\n  while (targetGroupIndex >= 0 && targetGroupIndex < groups.length) {\n    const targetItems = getItemsInGroup(items, groups[targetGroupIndex]!.id);\n    const target = resolveColumnTarget(targetItems, columnIndex);\n\n    if (target !== undefined) {\n      return target;\n    }\n\n    targetGroupIndex -= direction;\n  }\n\n  return undefined;\n}\n\nfunction navigateRowEnd(\n  snapshot: HdsCompositeNavigationSnapshot,\n  direction: 1 | -1\n): HdsCompositeItem | undefined {\n  const { currentItem, items } = snapshot;\n\n  if (currentItem === undefined || currentItem.groupId === undefined) {\n    return undefined;\n  }\n\n  const rowItems = getItemsInGroup(items, currentItem.groupId);\n\n  return direction === 1\n    ? findLastEnabled(rowItems)\n    : findFirstEnabled(rowItems);\n}\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsCopyButtonSizeValues {\n  Small = 'small',\n  Medium = 'medium',\n}\nexport type HdsCopyButtonSizes = `${HdsCopyButtonSizeValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsFlyoutSizesValues {\n  Medium = 'medium',\n  Large = 'large',\n}\n\nexport type HdsFlyoutSizes = `${HdsFlyoutSizesValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsDialogPrimitiveHeaderTitleTagValues {\n  Div = 'div',\n  H1 = 'h1',\n  H2 = 'h2',\n  H3 = 'h3',\n  H4 = 'h4',\n  H5 = 'h5',\n  H6 = 'h6',\n}\n\nexport type HdsDialogPrimitiveHeaderTitleTags =\n  `${HdsDialogPrimitiveHeaderTitleTagValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsFormFieldsetLayoutValues {\n  Vertical = 'vertical',\n  Horizontal = 'horizontal',\n}\n\nexport type HdsFormFieldsetLayouts = `${HdsFormFieldsetLayoutValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsTabsSizeValues {\n  Medium = 'medium',\n  Large = 'large',\n}\n\nexport type HdsTabsSizes = `${HdsTabsSizeValues}`;\n\nexport type HdsTabsPanelIds = string[];\n\nexport type HdsTabsTabIds = string[];\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nexport default function(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n      : new Selection([[selector]], root);\n}\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n  event = sourceEvent(event);\n  if (node === undefined) node = event.currentTarget;\n  if (node) {\n    var svg = node.ownerSVGElement || node;\n    if (svg.createSVGPoint) {\n      var point = svg.createSVGPoint();\n      point.x = event.clientX, point.y = event.clientY;\n      point = point.matrixTransform(node.getScreenCTM().inverse());\n      return [point.x, point.y];\n    }\n    if (node.getBoundingClientRect) {\n      var rect = node.getBoundingClientRect();\n      return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n    }\n  }\n  return [event.pageX, event.pageY];\n}\n","export const TASKABLE_MIXIN = {\n  _performCount: 0,\n\n  setState(state) {\n    this._performCount = this._performCount + (state.numPerformedInc || 0);\n\n    let isRunning = state.numRunning > 0;\n    let isQueued = state.numQueued > 0;\n    let derivedState = Object.assign({}, state, {\n      performCount: this._performCount,\n      isRunning,\n      isQueued,\n      isIdle: !isRunning && !isQueued,\n      state: isRunning ? 'running' : 'idle',\n    });\n    Object.assign(this, derivedState);\n  },\n\n  onState(state, task) {\n    if (task.onStateCallback) {\n      task.onStateCallback(state, task);\n    }\n  },\n};\n","// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nclass LuxonError extends Error {}\n\n/**\n * @private\n */\nexport class InvalidDateTimeError extends LuxonError {\n  constructor(reason) {\n    super(`Invalid DateTime: ${reason.toMessage()}`);\n  }\n}\n\n/**\n * @private\n */\nexport class InvalidIntervalError extends LuxonError {\n  constructor(reason) {\n    super(`Invalid Interval: ${reason.toMessage()}`);\n  }\n}\n\n/**\n * @private\n */\nexport class InvalidDurationError extends LuxonError {\n  constructor(reason) {\n    super(`Invalid Duration: ${reason.toMessage()}`);\n  }\n}\n\n/**\n * @private\n */\nexport class ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nexport class InvalidUnitError extends LuxonError {\n  constructor(unit) {\n    super(`Invalid unit ${unit}`);\n  }\n}\n\n/**\n * @private\n */\nexport class InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nexport class ZoneIsAbstractError extends LuxonError {\n  constructor() {\n    super(\"Zone is an abstract class\");\n  }\n}\n","/**\n * @private\n */\n\nconst n = \"numeric\",\n  s = \"short\",\n  l = \"long\";\n\nexport const DATE_SHORT = {\n  year: n,\n  month: n,\n  day: n,\n};\n\nexport const DATE_MED = {\n  year: n,\n  month: s,\n  day: n,\n};\n\nexport const DATE_MED_WITH_WEEKDAY = {\n  year: n,\n  month: s,\n  day: n,\n  weekday: s,\n};\n\nexport const DATE_FULL = {\n  year: n,\n  month: l,\n  day: n,\n};\n\nexport const DATE_HUGE = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l,\n};\n\nexport const TIME_SIMPLE = {\n  hour: n,\n  minute: n,\n};\n\nexport const TIME_WITH_SECONDS = {\n  hour: n,\n  minute: n,\n  second: n,\n};\n\nexport const TIME_WITH_SHORT_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: s,\n};\n\nexport const TIME_WITH_LONG_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: l,\n};\n\nexport const TIME_24_SIMPLE = {\n  hour: n,\n  minute: n,\n  hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SECONDS = {\n  hour: n,\n  minute: n,\n  second: n,\n  hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SHORT_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  hourCycle: \"h23\",\n  timeZoneName: s,\n};\n\nexport const TIME_24_WITH_LONG_OFFSET = {\n  hour: n,\n  minute: n,\n  second: n,\n  hourCycle: \"h23\",\n  timeZoneName: l,\n};\n\nexport const DATETIME_SHORT = {\n  year: n,\n  month: n,\n  day: n,\n  hour: n,\n  minute: n,\n};\n\nexport const DATETIME_SHORT_WITH_SECONDS = {\n  year: n,\n  month: n,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n,\n};\n\nexport const DATETIME_MED = {\n  year: n,\n  month: s,\n  day: n,\n  hour: n,\n  minute: n,\n};\n\nexport const DATETIME_MED_WITH_SECONDS = {\n  year: n,\n  month: s,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n,\n};\n\nexport const DATETIME_MED_WITH_WEEKDAY = {\n  year: n,\n  month: s,\n  day: n,\n  weekday: s,\n  hour: n,\n  minute: n,\n};\n\nexport const DATETIME_FULL = {\n  year: n,\n  month: l,\n  day: n,\n  hour: n,\n  minute: n,\n  timeZoneName: s,\n};\n\nexport const DATETIME_FULL_WITH_SECONDS = {\n  year: n,\n  month: l,\n  day: n,\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: s,\n};\n\nexport const DATETIME_HUGE = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l,\n  hour: n,\n  minute: n,\n  timeZoneName: l,\n};\n\nexport const DATETIME_HUGE_WITH_SECONDS = {\n  year: n,\n  month: l,\n  day: n,\n  weekday: l,\n  hour: n,\n  minute: n,\n  second: n,\n  timeZoneName: l,\n};\n","import { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nexport default class Zone {\n  /**\n   * The type of zone\n   * @abstract\n   * @type {string}\n   */\n  get type() {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * The name of this zone.\n   * @abstract\n   * @type {string}\n   */\n  get name() {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * The IANA name of this zone.\n   * Defaults to `name` if not overwritten by a subclass.\n   * @abstract\n   * @type {string}\n   */\n  get ianaName() {\n    return this.name;\n  }\n\n  /**\n   * Returns whether the offset is known to be fixed for the whole year.\n   * @abstract\n   * @type {boolean}\n   */\n  get isUniversal() {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Returns the offset's common name (such as EST) at the specified timestamp\n   * @abstract\n   * @param {number} ts - Epoch milliseconds for which to get the name\n   * @param {Object} opts - Options to affect the format\n   * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n   * @param {string} opts.locale - What locale to return the offset name in.\n   * @return {string}\n   */\n  offsetName(ts, opts) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Returns the offset's value as a string\n   * @abstract\n   * @param {number} ts - Epoch milliseconds for which to get the offset\n   * @param {string} format - What style of offset to return.\n   *                          Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n   * @return {string}\n   */\n  formatOffset(ts, format) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Return the offset in minutes for this zone at the specified timestamp.\n   * @abstract\n   * @param {number} ts - Epoch milliseconds for which to compute the offset\n   * @return {number}\n   */\n  offset(ts) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Return whether this Zone is equal to another zone\n   * @abstract\n   * @param {Zone} otherZone - the zone to compare\n   * @return {boolean}\n   */\n  equals(otherZone) {\n    throw new ZoneIsAbstractError();\n  }\n\n  /**\n   * Return whether this Zone is valid.\n   * @abstract\n   * @type {boolean}\n   */\n  get isValid() {\n    throw new ZoneIsAbstractError();\n  }\n}\n","import { formatOffset, parseZoneInfo } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\nexport default class SystemZone extends Zone {\n  /**\n   * Get a singleton instance of the local zone\n   * @return {SystemZone}\n   */\n  static get instance() {\n    if (singleton === null) {\n      singleton = new SystemZone();\n    }\n    return singleton;\n  }\n\n  /** @override **/\n  get type() {\n    return \"system\";\n  }\n\n  /** @override **/\n  get name() {\n    return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n  }\n\n  /** @override **/\n  get isUniversal() {\n    return false;\n  }\n\n  /** @override **/\n  offsetName(ts, { format, locale }) {\n    return parseZoneInfo(ts, format, locale);\n  }\n\n  /** @override **/\n  formatOffset(ts, format) {\n    return formatOffset(this.offset(ts), format);\n  }\n\n  /** @override **/\n  offset(ts) {\n    return -new Date(ts).getTimezoneOffset();\n  }\n\n  /** @override **/\n  equals(otherZone) {\n    return otherZone.type === \"system\";\n  }\n\n  /** @override **/\n  get isValid() {\n    return true;\n  }\n}\n","import { formatOffset, parseZoneInfo, isUndefined, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nconst dtfCache = new Map();\nfunction makeDTF(zoneName) {\n  let dtf = dtfCache.get(zoneName);\n  if (dtf === undefined) {\n    dtf = new Intl.DateTimeFormat(\"en-US\", {\n      hour12: false,\n      timeZone: zoneName,\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      era: \"short\",\n    });\n    dtfCache.set(zoneName, dtf);\n  }\n  return dtf;\n}\n\nconst typeToPos = {\n  year: 0,\n  month: 1,\n  day: 2,\n  era: 3,\n  hour: 4,\n  minute: 5,\n  second: 6,\n};\n\nfunction hackyOffset(dtf, date) {\n  const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n    parsed = /(\\d+)\\/(\\d+)\\/(\\d+) (AD|BC),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n    [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed;\n  return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n  const formatted = dtf.formatToParts(date);\n  const filled = [];\n  for (let i = 0; i < formatted.length; i++) {\n    const { type, value } = formatted[i];\n    const pos = typeToPos[type];\n\n    if (type === \"era\") {\n      filled[pos] = value;\n    } else if (!isUndefined(pos)) {\n      filled[pos] = parseInt(value, 10);\n    }\n  }\n  return filled;\n}\n\nconst ianaZoneCache = new Map();\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nexport default class IANAZone extends Zone {\n  /**\n   * @param {string} name - Zone name\n   * @return {IANAZone}\n   */\n  static create(name) {\n    let zone = ianaZoneCache.get(name);\n    if (zone === undefined) {\n      ianaZoneCache.set(name, (zone = new IANAZone(name)));\n    }\n    return zone;\n  }\n\n  /**\n   * Reset local caches. Should only be necessary in testing scenarios.\n   * @return {void}\n   */\n  static resetCache() {\n    ianaZoneCache.clear();\n    dtfCache.clear();\n  }\n\n  /**\n   * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n   * @param {string} s - The string to check validity on\n   * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n   * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n   * @deprecated For backward compatibility, this forwards to isValidZone, better use `isValidZone()` directly instead.\n   * @return {boolean}\n   */\n  static isValidSpecifier(s) {\n    return this.isValidZone(s);\n  }\n\n  /**\n   * Returns whether the provided string identifies a real zone\n   * @param {string} zone - The string to check\n   * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n   * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n   * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n   * @return {boolean}\n   */\n  static isValidZone(zone) {\n    if (!zone) {\n      return false;\n    }\n    try {\n      new Intl.DateTimeFormat(\"en-US\", { timeZone: zone }).format();\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  constructor(name) {\n    super();\n    /** @private **/\n    this.zoneName = name;\n    /** @private **/\n    this.valid = IANAZone.isValidZone(name);\n  }\n\n  /**\n   * The type of zone. `iana` for all instances of `IANAZone`.\n   * @override\n   * @type {string}\n   */\n  get type() {\n    return \"iana\";\n  }\n\n  /**\n   * The name of this zone (i.e. the IANA zone name).\n   * @override\n   * @type {string}\n   */\n  get name() {\n    return this.zoneName;\n  }\n\n  /**\n   * Returns whether the offset is known to be fixed for the whole year:\n   * Always returns false for all IANA zones.\n   * @override\n   * @type {boolean}\n   */\n  get isUniversal() {\n    return false;\n  }\n\n  /**\n   * Returns the offset's common name (such as EST) at the specified timestamp\n   * @override\n   * @param {number} ts - Epoch milliseconds for which to get the name\n   * @param {Object} opts - Options to affect the format\n   * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n   * @param {string} opts.locale - What locale to return the offset name in.\n   * @return {string}\n   */\n  offsetName(ts, { format, locale }) {\n    return parseZoneInfo(ts, format, locale, this.name);\n  }\n\n  /**\n   * Returns the offset's value as a string\n   * @override\n   * @param {number} ts - Epoch milliseconds for which to get the offset\n   * @param {string} format - What style of offset to return.\n   *                          Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n   * @return {string}\n   */\n  formatOffset(ts, format) {\n    return formatOffset(this.offset(ts), format);\n  }\n\n  /**\n   * Return the offset in minutes for this zone at the specified timestamp.\n   * @override\n   * @param {number} ts - Epoch milliseconds for which to compute the offset\n   * @return {number}\n   */\n  offset(ts) {\n    if (!this.valid) return NaN;\n    const date = new Date(ts);\n\n    if (isNaN(date)) return NaN;\n\n    const dtf = makeDTF(this.name);\n    let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts\n      ? partsOffset(dtf, date)\n      : hackyOffset(dtf, date);\n\n    if (adOrBc === \"BC\") {\n      year = -Math.abs(year) + 1;\n    }\n\n    // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n    const adjustedHour = hour === 24 ? 0 : hour;\n\n    const asUTC = objToLocalTS({\n      year,\n      month,\n      day,\n      hour: adjustedHour,\n      minute,\n      second,\n      millisecond: 0,\n    });\n\n    let asTS = +date;\n    const over = asTS % 1000;\n    asTS -= over >= 0 ? over : 1000 + over;\n    return (asUTC - asTS) / (60 * 1000);\n  }\n\n  /**\n   * Return whether this Zone is equal to another zone\n   * @override\n   * @param {Zone} otherZone - the zone to compare\n   * @return {boolean}\n   */\n  equals(otherZone) {\n    return otherZone.type === \"iana\" && otherZone.name === this.name;\n  }\n\n  /**\n   * Return whether this Zone is valid.\n   * @override\n   * @type {boolean}\n   */\n  get isValid() {\n    return this.valid;\n  }\n}\n","import { hasLocaleWeekInfo, hasRelative, padStart, roundTo, validateWeekSettings } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n// todo - remap caching\n\nlet intlLFCache = {};\nfunction getCachedLF(locString, opts = {}) {\n  const key = JSON.stringify([locString, opts]);\n  let dtf = intlLFCache[key];\n  if (!dtf) {\n    dtf = new Intl.ListFormat(locString, opts);\n    intlLFCache[key] = dtf;\n  }\n  return dtf;\n}\n\nconst intlDTCache = new Map();\nfunction getCachedDTF(locString, opts = {}) {\n  const key = JSON.stringify([locString, opts]);\n  let dtf = intlDTCache.get(key);\n  if (dtf === undefined) {\n    dtf = new Intl.DateTimeFormat(locString, opts);\n    intlDTCache.set(key, dtf);\n  }\n  return dtf;\n}\n\nconst intlNumCache = new Map();\nfunction getCachedINF(locString, opts = {}) {\n  const key = JSON.stringify([locString, opts]);\n  let inf = intlNumCache.get(key);\n  if (inf === undefined) {\n    inf = new Intl.NumberFormat(locString, opts);\n    intlNumCache.set(key, inf);\n  }\n  return inf;\n}\n\nconst intlRelCache = new Map();\nfunction getCachedRTF(locString, opts = {}) {\n  const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options\n  const key = JSON.stringify([locString, cacheKeyOpts]);\n  let inf = intlRelCache.get(key);\n  if (inf === undefined) {\n    inf = new Intl.RelativeTimeFormat(locString, opts);\n    intlRelCache.set(key, inf);\n  }\n  return inf;\n}\n\nlet sysLocaleCache = null;\nfunction systemLocale() {\n  if (sysLocaleCache) {\n    return sysLocaleCache;\n  } else {\n    sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale;\n    return sysLocaleCache;\n  }\n}\n\nconst intlResolvedOptionsCache = new Map();\nfunction getCachedIntResolvedOptions(locString) {\n  let opts = intlResolvedOptionsCache.get(locString);\n  if (opts === undefined) {\n    opts = new Intl.DateTimeFormat(locString).resolvedOptions();\n    intlResolvedOptionsCache.set(locString, opts);\n  }\n  return opts;\n}\n\nconst weekInfoCache = new Map();\nfunction getCachedWeekInfo(locString) {\n  let data = weekInfoCache.get(locString);\n  if (!data) {\n    const locale = new Intl.Locale(locString);\n    // browsers currently implement this as a property, but spec says it should be a getter function\n    data = \"getWeekInfo\" in locale ? locale.getWeekInfo() : locale.weekInfo;\n    // minimalDays was removed from WeekInfo: https://github.com/tc39/proposal-intl-locale-info/issues/86\n    if (!(\"minimalDays\" in data)) {\n      data = { ...fallbackWeekSettings, ...data };\n    }\n    weekInfoCache.set(locString, data);\n  }\n  return data;\n}\n\nfunction parseLocaleString(localeStr) {\n  // I really want to avoid writing a BCP 47 parser\n  // see, e.g. https://github.com/wooorm/bcp-47\n  // Instead, we'll do this:\n\n  // a) if the string has no -u extensions, just leave it alone\n  // b) if it does, use Intl to resolve everything\n  // c) if Intl fails, try again without the -u\n\n  // private subtags and unicode subtags have ordering requirements,\n  // and we're not properly parsing this, so just strip out the\n  // private ones if they exist.\n  const xIndex = localeStr.indexOf(\"-x-\");\n  if (xIndex !== -1) {\n    localeStr = localeStr.substring(0, xIndex);\n  }\n\n  const uIndex = localeStr.indexOf(\"-u-\");\n  if (uIndex === -1) {\n    return [localeStr];\n  } else {\n    let options;\n    let selectedStr;\n    try {\n      options = getCachedDTF(localeStr).resolvedOptions();\n      selectedStr = localeStr;\n    } catch (e) {\n      const smaller = localeStr.substring(0, uIndex);\n      options = getCachedDTF(smaller).resolvedOptions();\n      selectedStr = smaller;\n    }\n\n    const { numberingSystem, calendar } = options;\n    return [selectedStr, numberingSystem, calendar];\n  }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n  if (outputCalendar || numberingSystem) {\n    if (!localeStr.includes(\"-u-\")) {\n      localeStr += \"-u\";\n    }\n\n    if (outputCalendar) {\n      localeStr += `-ca-${outputCalendar}`;\n    }\n\n    if (numberingSystem) {\n      localeStr += `-nu-${numberingSystem}`;\n    }\n    return localeStr;\n  } else {\n    return localeStr;\n  }\n}\n\nfunction mapMonths(f) {\n  const ms = [];\n  for (let i = 1; i <= 12; i++) {\n    const dt = DateTime.utc(2009, i, 1);\n    ms.push(f(dt));\n  }\n  return ms;\n}\n\nfunction mapWeekdays(f) {\n  const ms = [];\n  for (let i = 1; i <= 7; i++) {\n    const dt = DateTime.utc(2016, 11, 13 + i);\n    ms.push(f(dt));\n  }\n  return ms;\n}\n\nfunction listStuff(loc, length, englishFn, intlFn) {\n  const mode = loc.listingMode();\n\n  if (mode === \"error\") {\n    return null;\n  } else if (mode === \"en\") {\n    return englishFn(length);\n  } else {\n    return intlFn(length);\n  }\n}\n\nfunction supportsFastNumbers(loc) {\n  if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n    return false;\n  } else {\n    return (\n      loc.numberingSystem === \"latn\" ||\n      !loc.locale ||\n      loc.locale.startsWith(\"en\") ||\n      getCachedIntResolvedOptions(loc.locale).numberingSystem === \"latn\"\n    );\n  }\n}\n\n/**\n * @private\n */\n\nclass PolyNumberFormatter {\n  constructor(intl, forceSimple, opts) {\n    this.padTo = opts.padTo || 0;\n    this.floor = opts.floor || false;\n\n    const { padTo, floor, ...otherOpts } = opts;\n\n    if (!forceSimple || Object.keys(otherOpts).length > 0) {\n      const intlOpts = { useGrouping: false, ...opts };\n      if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n      this.inf = getCachedINF(intl, intlOpts);\n    }\n  }\n\n  format(i) {\n    if (this.inf) {\n      const fixed = this.floor ? Math.floor(i) : i;\n      return this.inf.format(fixed);\n    } else {\n      // to match the browser's numberformatter defaults\n      const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n      return padStart(fixed, this.padTo);\n    }\n  }\n}\n\n/**\n * @private\n */\n\nclass PolyDateFormatter {\n  constructor(dt, intl, opts) {\n    this.opts = opts;\n    this.originalZone = undefined;\n\n    let z = undefined;\n    if (this.opts.timeZone) {\n      // Don't apply any workarounds if a timeZone is explicitly provided in opts\n      this.dt = dt;\n    } else if (dt.zone.type === \"fixed\") {\n      // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like.\n      // That is why fixed-offset TZ is set to that unless it is:\n      // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT.\n      // 2. Unsupported by the browser:\n      //    - some do not support Etc/\n      //    - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata\n      const gmtOffset = -1 * (dt.offset / 60);\n      const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;\n      if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) {\n        z = offsetZ;\n        this.dt = dt;\n      } else {\n        // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so\n        // we manually apply the offset and substitute the zone as needed.\n        z = \"UTC\";\n        this.dt = dt.offset === 0 ? dt : dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n        this.originalZone = dt.zone;\n      }\n    } else if (dt.zone.type === \"system\") {\n      this.dt = dt;\n    } else if (dt.zone.type === \"iana\") {\n      this.dt = dt;\n      z = dt.zone.name;\n    } else {\n      // Custom zones can have any offset / offsetName so we just manually\n      // apply the offset and substitute the zone as needed.\n      z = \"UTC\";\n      this.dt = dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n      this.originalZone = dt.zone;\n    }\n\n    const intlOpts = { ...this.opts };\n    intlOpts.timeZone = intlOpts.timeZone || z;\n    this.dtf = getCachedDTF(intl, intlOpts);\n  }\n\n  format() {\n    if (this.originalZone) {\n      // If we have to substitute in the actual zone name, we have to use\n      // formatToParts so that the timezone can be replaced.\n      return this.formatToParts()\n        .map(({ value }) => value)\n        .join(\"\");\n    }\n    return this.dtf.format(this.dt.toJSDate());\n  }\n\n  formatToParts() {\n    const parts = this.dtf.formatToParts(this.dt.toJSDate());\n    if (this.originalZone) {\n      return parts.map((part) => {\n        if (part.type === \"timeZoneName\") {\n          const offsetName = this.originalZone.offsetName(this.dt.ts, {\n            locale: this.dt.locale,\n            format: this.opts.timeZoneName,\n          });\n          return {\n            ...part,\n            value: offsetName,\n          };\n        } else {\n          return part;\n        }\n      });\n    }\n    return parts;\n  }\n\n  resolvedOptions() {\n    return this.dtf.resolvedOptions();\n  }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n  constructor(intl, isEnglish, opts) {\n    this.opts = { style: \"long\", ...opts };\n    if (!isEnglish && hasRelative()) {\n      this.rtf = getCachedRTF(intl, opts);\n    }\n  }\n\n  format(count, unit) {\n    if (this.rtf) {\n      return this.rtf.format(count, unit);\n    } else {\n      return English.formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n    }\n  }\n\n  formatToParts(count, unit) {\n    if (this.rtf) {\n      return this.rtf.formatToParts(count, unit);\n    } else {\n      return [];\n    }\n  }\n}\n\nconst fallbackWeekSettings = {\n  firstDay: 1,\n  minimalDays: 4,\n  weekend: [6, 7],\n};\n\n/**\n * @private\n */\nexport default class Locale {\n  static fromOpts(opts) {\n    return Locale.create(\n      opts.locale,\n      opts.numberingSystem,\n      opts.outputCalendar,\n      opts.weekSettings,\n      opts.defaultToEN\n    );\n  }\n\n  static create(locale, numberingSystem, outputCalendar, weekSettings, defaultToEN = false) {\n    const specifiedLocale = locale || Settings.defaultLocale;\n    // the system locale is useful for human-readable strings but annoying for parsing/formatting known formats\n    const localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale());\n    const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem;\n    const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n    const weekSettingsR = validateWeekSettings(weekSettings) || Settings.defaultWeekSettings;\n    return new Locale(localeR, numberingSystemR, outputCalendarR, weekSettingsR, specifiedLocale);\n  }\n\n  static resetCache() {\n    sysLocaleCache = null;\n    intlDTCache.clear();\n    intlNumCache.clear();\n    intlRelCache.clear();\n    intlResolvedOptionsCache.clear();\n    weekInfoCache.clear();\n  }\n\n  static fromObject({ locale, numberingSystem, outputCalendar, weekSettings } = {}) {\n    return Locale.create(locale, numberingSystem, outputCalendar, weekSettings);\n  }\n\n  constructor(locale, numbering, outputCalendar, weekSettings, specifiedLocale) {\n    const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n\n    this.locale = parsedLocale;\n    this.numberingSystem = numbering || parsedNumberingSystem || null;\n    this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n    this.weekSettings = weekSettings;\n    this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n    this.weekdaysCache = { format: {}, standalone: {} };\n    this.monthsCache = { format: {}, standalone: {} };\n    this.meridiemCache = null;\n    this.eraCache = {};\n\n    this.specifiedLocale = specifiedLocale;\n    this.fastNumbersCached = null;\n  }\n\n  get fastNumbers() {\n    if (this.fastNumbersCached == null) {\n      this.fastNumbersCached = supportsFastNumbers(this);\n    }\n\n    return this.fastNumbersCached;\n  }\n\n  listingMode() {\n    const isActuallyEn = this.isEnglish();\n    const hasNoWeirdness =\n      (this.numberingSystem === null || this.numberingSystem === \"latn\") &&\n      (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n    return isActuallyEn && hasNoWeirdness ? \"en\" : \"intl\";\n  }\n\n  clone(alts) {\n    if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n      return this;\n    } else {\n      return Locale.create(\n        alts.locale || this.specifiedLocale,\n        alts.numberingSystem || this.numberingSystem,\n        alts.outputCalendar || this.outputCalendar,\n        validateWeekSettings(alts.weekSettings) || this.weekSettings,\n        alts.defaultToEN || false\n      );\n    }\n  }\n\n  redefaultToEN(alts = {}) {\n    return this.clone({ ...alts, defaultToEN: true });\n  }\n\n  redefaultToSystem(alts = {}) {\n    return this.clone({ ...alts, defaultToEN: false });\n  }\n\n  months(length, format = false) {\n    return listStuff(this, length, English.months, () => {\n      // Workaround for \"ja\" locale: formatToParts does not label all parts of the month\n      // as \"month\" and for this locale there is no difference between \"format\" and \"non-format\".\n      // As such, just use format() instead of formatToParts() and take the whole string\n      const monthSpecialCase = this.intl === \"ja\" || this.intl.startsWith(\"ja-\");\n      format &= !monthSpecialCase;\n      const intl = format ? { month: length, day: \"numeric\" } : { month: length },\n        formatStr = format ? \"format\" : \"standalone\";\n      if (!this.monthsCache[formatStr][length]) {\n        const mapper = !monthSpecialCase\n          ? (dt) => this.extract(dt, intl, \"month\")\n          : (dt) => this.dtFormatter(dt, intl).format();\n        this.monthsCache[formatStr][length] = mapMonths(mapper);\n      }\n      return this.monthsCache[formatStr][length];\n    });\n  }\n\n  weekdays(length, format = false) {\n    return listStuff(this, length, English.weekdays, () => {\n      const intl = format\n          ? { weekday: length, year: \"numeric\", month: \"long\", day: \"numeric\" }\n          : { weekday: length },\n        formatStr = format ? \"format\" : \"standalone\";\n      if (!this.weekdaysCache[formatStr][length]) {\n        this.weekdaysCache[formatStr][length] = mapWeekdays((dt) =>\n          this.extract(dt, intl, \"weekday\")\n        );\n      }\n      return this.weekdaysCache[formatStr][length];\n    });\n  }\n\n  meridiems() {\n    return listStuff(\n      this,\n      undefined,\n      () => English.meridiems,\n      () => {\n        // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n        // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n        if (!this.meridiemCache) {\n          const intl = { hour: \"numeric\", hourCycle: \"h12\" };\n          this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(\n            (dt) => this.extract(dt, intl, \"dayperiod\")\n          );\n        }\n\n        return this.meridiemCache;\n      }\n    );\n  }\n\n  eras(length) {\n    return listStuff(this, length, English.eras, () => {\n      const intl = { era: length };\n\n      // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n      // to definitely enumerate them.\n      if (!this.eraCache[length]) {\n        this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map((dt) =>\n          this.extract(dt, intl, \"era\")\n        );\n      }\n\n      return this.eraCache[length];\n    });\n  }\n\n  extract(dt, intlOpts, field) {\n    const df = this.dtFormatter(dt, intlOpts),\n      results = df.formatToParts(),\n      matching = results.find((m) => m.type.toLowerCase() === field);\n    return matching ? matching.value : null;\n  }\n\n  numberFormatter(opts = {}) {\n    // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n    // (in contrast, the rest of the condition is used heavily)\n    return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n  }\n\n  dtFormatter(dt, intlOpts = {}) {\n    return new PolyDateFormatter(dt, this.intl, intlOpts);\n  }\n\n  relFormatter(opts = {}) {\n    return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n  }\n\n  listFormatter(opts = {}) {\n    return getCachedLF(this.intl, opts);\n  }\n\n  isEnglish() {\n    return (\n      this.locale === \"en\" ||\n      this.locale.toLowerCase() === \"en-us\" ||\n      getCachedIntResolvedOptions(this.intl).locale.startsWith(\"en-us\")\n    );\n  }\n\n  getWeekSettings() {\n    if (this.weekSettings) {\n      return this.weekSettings;\n    } else if (!hasLocaleWeekInfo()) {\n      return fallbackWeekSettings;\n    } else {\n      return getCachedWeekInfo(this.locale);\n    }\n  }\n\n  getStartOfWeek() {\n    return this.getWeekSettings().firstDay;\n  }\n\n  getMinDaysInFirstWeek() {\n    return this.getWeekSettings().minimalDays;\n  }\n\n  getWeekendDays() {\n    return this.getWeekSettings().weekend;\n  }\n\n  equals(other) {\n    return (\n      this.locale === other.locale &&\n      this.numberingSystem === other.numberingSystem &&\n      this.outputCalendar === other.outputCalendar\n    );\n  }\n\n  toString() {\n    return `Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`;\n  }\n}\n","import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\n\nfunction stringify(obj) {\n  return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\n  \"January\",\n  \"February\",\n  \"March\",\n  \"April\",\n  \"May\",\n  \"June\",\n  \"July\",\n  \"August\",\n  \"September\",\n  \"October\",\n  \"November\",\n  \"December\",\n];\n\nexport const monthsShort = [\n  \"Jan\",\n  \"Feb\",\n  \"Mar\",\n  \"Apr\",\n  \"May\",\n  \"Jun\",\n  \"Jul\",\n  \"Aug\",\n  \"Sep\",\n  \"Oct\",\n  \"Nov\",\n  \"Dec\",\n];\n\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n\nexport function months(length) {\n  switch (length) {\n    case \"narrow\":\n      return [...monthsNarrow];\n    case \"short\":\n      return [...monthsShort];\n    case \"long\":\n      return [...monthsLong];\n    case \"numeric\":\n      return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n    case \"2-digit\":\n      return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n    default:\n      return null;\n  }\n}\n\nexport const weekdaysLong = [\n  \"Monday\",\n  \"Tuesday\",\n  \"Wednesday\",\n  \"Thursday\",\n  \"Friday\",\n  \"Saturday\",\n  \"Sunday\",\n];\n\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n\nexport function weekdays(length) {\n  switch (length) {\n    case \"narrow\":\n      return [...weekdaysNarrow];\n    case \"short\":\n      return [...weekdaysShort];\n    case \"long\":\n      return [...weekdaysLong];\n    case \"numeric\":\n      return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n    default:\n      return null;\n  }\n}\n\nexport const meridiems = [\"AM\", \"PM\"];\n\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\n\nexport const erasShort = [\"BC\", \"AD\"];\n\nexport const erasNarrow = [\"B\", \"A\"];\n\nexport function eras(length) {\n  switch (length) {\n    case \"narrow\":\n      return [...erasNarrow];\n    case \"short\":\n      return [...erasShort];\n    case \"long\":\n      return [...erasLong];\n    default:\n      return null;\n  }\n}\n\nexport function meridiemForDateTime(dt) {\n  return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nexport function weekdayForDateTime(dt, length) {\n  return weekdays(length)[dt.weekday - 1];\n}\n\nexport function monthForDateTime(dt, length) {\n  return months(length)[dt.month - 1];\n}\n\nexport function eraForDateTime(dt, length) {\n  return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nexport function formatRelativeTime(unit, count, numeric = \"always\", narrow = false) {\n  const units = {\n    years: [\"year\", \"yr.\"],\n    quarters: [\"quarter\", \"qtr.\"],\n    months: [\"month\", \"mo.\"],\n    weeks: [\"week\", \"wk.\"],\n    days: [\"day\", \"day\", \"days\"],\n    hours: [\"hour\", \"hr.\"],\n    minutes: [\"minute\", \"min.\"],\n    seconds: [\"second\", \"sec.\"],\n  };\n\n  const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n  if (numeric === \"auto\" && lastable) {\n    const isDay = unit === \"days\";\n    switch (count) {\n      case 1:\n        return isDay ? \"tomorrow\" : `next ${units[unit][0]}`;\n      case -1:\n        return isDay ? \"yesterday\" : `last ${units[unit][0]}`;\n      case 0:\n        return isDay ? \"today\" : `this ${units[unit][0]}`;\n      default: // fall through\n    }\n  }\n\n  const isInPast = Object.is(count, -0) || count < 0,\n    fmtValue = Math.abs(count),\n    singular = fmtValue === 1,\n    lilUnits = units[unit],\n    fmtUnit = narrow\n      ? singular\n        ? lilUnits[1]\n        : lilUnits[2] || lilUnits[1]\n      : singular\n      ? units[unit][0]\n      : unit;\n  return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\n\nexport function formatString(knownFormat) {\n  // these all have the offsets removed because we don't have access to them\n  // without all the intl stuff this is backfilling\n  const filtered = pick(knownFormat, [\n      \"weekday\",\n      \"era\",\n      \"year\",\n      \"month\",\n      \"day\",\n      \"hour\",\n      \"minute\",\n      \"second\",\n      \"timeZoneName\",\n      \"hourCycle\",\n    ]),\n    key = stringify(filtered),\n    dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n  switch (key) {\n    case stringify(Formats.DATE_SHORT):\n      return \"M/d/yyyy\";\n    case stringify(Formats.DATE_MED):\n      return \"LLL d, yyyy\";\n    case stringify(Formats.DATE_MED_WITH_WEEKDAY):\n      return \"EEE, LLL d, yyyy\";\n    case stringify(Formats.DATE_FULL):\n      return \"LLLL d, yyyy\";\n    case stringify(Formats.DATE_HUGE):\n      return \"EEEE, LLLL d, yyyy\";\n    case stringify(Formats.TIME_SIMPLE):\n      return \"h:mm a\";\n    case stringify(Formats.TIME_WITH_SECONDS):\n      return \"h:mm:ss a\";\n    case stringify(Formats.TIME_WITH_SHORT_OFFSET):\n      return \"h:mm a\";\n    case stringify(Formats.TIME_WITH_LONG_OFFSET):\n      return \"h:mm a\";\n    case stringify(Formats.TIME_24_SIMPLE):\n      return \"HH:mm\";\n    case stringify(Formats.TIME_24_WITH_SECONDS):\n      return \"HH:mm:ss\";\n    case stringify(Formats.TIME_24_WITH_SHORT_OFFSET):\n      return \"HH:mm\";\n    case stringify(Formats.TIME_24_WITH_LONG_OFFSET):\n      return \"HH:mm\";\n    case stringify(Formats.DATETIME_SHORT):\n      return \"M/d/yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_MED):\n      return \"LLL d, yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_FULL):\n      return \"LLLL d, yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_HUGE):\n      return dateTimeHuge;\n    case stringify(Formats.DATETIME_SHORT_WITH_SECONDS):\n      return \"M/d/yyyy, h:mm:ss a\";\n    case stringify(Formats.DATETIME_MED_WITH_SECONDS):\n      return \"LLL d, yyyy, h:mm:ss a\";\n    case stringify(Formats.DATETIME_MED_WITH_WEEKDAY):\n      return \"EEE, d LLL yyyy, h:mm a\";\n    case stringify(Formats.DATETIME_FULL_WITH_SECONDS):\n      return \"LLLL d, yyyy, h:mm:ss a\";\n    case stringify(Formats.DATETIME_HUGE_WITH_SECONDS):\n      return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n    default:\n      return dateTimeHuge;\n  }\n}\n","import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nexport default class FixedOffsetZone extends Zone {\n  /**\n   * Get a singleton instance of UTC\n   * @return {FixedOffsetZone}\n   */\n  static get utcInstance() {\n    if (singleton === null) {\n      singleton = new FixedOffsetZone(0);\n    }\n    return singleton;\n  }\n\n  /**\n   * Get an instance with a specified offset\n   * @param {number} offset - The offset in minutes\n   * @return {FixedOffsetZone}\n   */\n  static instance(offset) {\n    return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n  }\n\n  /**\n   * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n   * @param {string} s - The offset string to parse\n   * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n   * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n   * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n   * @return {FixedOffsetZone}\n   */\n  static parseSpecifier(s) {\n    if (s) {\n      const r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n      if (r) {\n        return new FixedOffsetZone(signedOffset(r[1], r[2]));\n      }\n    }\n    return null;\n  }\n\n  constructor(offset) {\n    super();\n    /** @private **/\n    this.fixed = offset;\n  }\n\n  /**\n   * The type of zone. `fixed` for all instances of `FixedOffsetZone`.\n   * @override\n   * @type {string}\n   */\n  get type() {\n    return \"fixed\";\n  }\n\n  /**\n   * The name of this zone.\n   * All fixed zones' names always start with \"UTC\" (plus optional offset)\n   * @override\n   * @type {string}\n   */\n  get name() {\n    return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n  }\n\n  /**\n   * The IANA name of this zone, i.e. `Etc/UTC` or `Etc/GMT+/-nn`\n   *\n   * @override\n   * @type {string}\n   */\n  get ianaName() {\n    if (this.fixed === 0) {\n      return \"Etc/UTC\";\n    } else {\n      return `Etc/GMT${formatOffset(-this.fixed, \"narrow\")}`;\n    }\n  }\n\n  /**\n   * Returns the offset's common name at the specified timestamp.\n   *\n   * For fixed offset zones this equals to the zone name.\n   * @override\n   */\n  offsetName() {\n    return this.name;\n  }\n\n  /**\n   * Returns the offset's value as a string\n   * @override\n   * @param {number} ts - Epoch milliseconds for which to get the offset\n   * @param {string} format - What style of offset to return.\n   *                          Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n   * @return {string}\n   */\n  formatOffset(ts, format) {\n    return formatOffset(this.fixed, format);\n  }\n\n  /**\n   * Returns whether the offset is known to be fixed for the whole year:\n   * Always returns true for all fixed offset zones.\n   * @override\n   * @type {boolean}\n   */\n  get isUniversal() {\n    return true;\n  }\n\n  /**\n   * Return the offset in minutes for this zone at the specified timestamp.\n   *\n   * For fixed offset zones, this is constant and does not depend on a timestamp.\n   * @override\n   * @return {number}\n   */\n  offset() {\n    return this.fixed;\n  }\n\n  /**\n   * Return whether this Zone is equal to another zone (i.e. also fixed and same offset)\n   * @override\n   * @param {Zone} otherZone - the zone to compare\n   * @return {boolean}\n   */\n  equals(otherZone) {\n    return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n  }\n\n  /**\n   * Return whether this Zone is valid:\n   * All fixed offset zones are valid.\n   * @override\n   * @type {boolean}\n   */\n  get isValid() {\n    return true;\n  }\n}\n","import Zone from \"../zone.js\";\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nexport default class InvalidZone extends Zone {\n  constructor(zoneName) {\n    super();\n    /**  @private */\n    this.zoneName = zoneName;\n  }\n\n  /** @override **/\n  get type() {\n    return \"invalid\";\n  }\n\n  /** @override **/\n  get name() {\n    return this.zoneName;\n  }\n\n  /** @override **/\n  get isUniversal() {\n    return false;\n  }\n\n  /** @override **/\n  offsetName() {\n    return null;\n  }\n\n  /** @override **/\n  formatOffset() {\n    return \"\";\n  }\n\n  /** @override **/\n  offset() {\n    return NaN;\n  }\n\n  /** @override **/\n  equals() {\n    return false;\n  }\n\n  /** @override **/\n  get isValid() {\n    return false;\n  }\n}\n","/**\n * @private\n */\n\nimport Zone from \"../zone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport InvalidZone from \"../zones/invalidZone.js\";\n\nimport { isUndefined, isString, isNumber } from \"./util.js\";\nimport SystemZone from \"../zones/systemZone.js\";\n\nexport function normalizeZone(input, defaultZone) {\n  let offset;\n  if (isUndefined(input) || input === null) {\n    return defaultZone;\n  } else if (input instanceof Zone) {\n    return input;\n  } else if (isString(input)) {\n    const lowered = input.toLowerCase();\n    if (lowered === \"default\") return defaultZone;\n    else if (lowered === \"local\" || lowered === \"system\") return SystemZone.instance;\n    else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;\n    else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input);\n  } else if (isNumber(input)) {\n    return FixedOffsetZone.instance(input);\n  } else if (typeof input === \"object\" && \"offset\" in input && typeof input.offset === \"function\") {\n    // This is dumb, but the instanceof check above doesn't seem to really work\n    // so we're duck checking it\n    return input;\n  } else {\n    return new InvalidZone(input);\n  }\n}\n","/*\n  This is just a junk drawer, containing anything used across multiple classes.\n  Because Luxon is small(ish), this should stay small and we won't worry about splitting\n  it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\nimport { InvalidArgumentError } from \"../errors.js\";\nimport Settings from \"../settings.js\";\nimport { dayOfWeek, isoWeekdayToLocal } from \"./conversions.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n  return typeof o === \"undefined\";\n}\n\nexport function isNumber(o) {\n  return typeof o === \"number\";\n}\n\nexport function isInteger(o) {\n  return typeof o === \"number\" && o % 1 === 0;\n}\n\nexport function isString(o) {\n  return typeof o === \"string\";\n}\n\nexport function isDate(o) {\n  return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasRelative() {\n  try {\n    return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n  } catch (e) {\n    return false;\n  }\n}\n\nexport function hasLocaleWeekInfo() {\n  try {\n    return (\n      typeof Intl !== \"undefined\" &&\n      !!Intl.Locale &&\n      (\"weekInfo\" in Intl.Locale.prototype || \"getWeekInfo\" in Intl.Locale.prototype)\n    );\n  } catch (e) {\n    return false;\n  }\n}\n\n// OBJECTS AND ARRAYS\n\nexport function maybeArray(thing) {\n  return Array.isArray(thing) ? thing : [thing];\n}\n\nexport function bestBy(arr, by, compare) {\n  if (arr.length === 0) {\n    return undefined;\n  }\n  return arr.reduce((best, next) => {\n    const pair = [by(next), next];\n    if (!best) {\n      return pair;\n    } else if (compare(best[0], pair[0]) === best[0]) {\n      return best;\n    } else {\n      return pair;\n    }\n  }, null)[1];\n}\n\nexport function pick(obj, keys) {\n  return keys.reduce((a, k) => {\n    a[k] = obj[k];\n    return a;\n  }, {});\n}\n\nexport function hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function validateWeekSettings(settings) {\n  if (settings == null) {\n    return null;\n  } else if (typeof settings !== \"object\") {\n    throw new InvalidArgumentError(\"Week settings must be an object\");\n  } else {\n    if (\n      !integerBetween(settings.firstDay, 1, 7) ||\n      !integerBetween(settings.minimalDays, 1, 7) ||\n      !Array.isArray(settings.weekend) ||\n      settings.weekend.some((v) => !integerBetween(v, 1, 7))\n    ) {\n      throw new InvalidArgumentError(\"Invalid week settings\");\n    }\n    return {\n      firstDay: settings.firstDay,\n      minimalDays: settings.minimalDays,\n      weekend: Array.from(settings.weekend),\n    };\n  }\n}\n\n// NUMBERS AND STRINGS\n\nexport function integerBetween(thing, bottom, top) {\n  return isInteger(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nexport function floorMod(x, n) {\n  return x - n * Math.floor(x / n);\n}\n\nexport function padStart(input, n = 2) {\n  const isNeg = input < 0;\n  let padded;\n  if (isNeg) {\n    padded = \"-\" + (\"\" + -input).padStart(n, \"0\");\n  } else {\n    padded = (\"\" + input).padStart(n, \"0\");\n  }\n  return padded;\n}\n\nexport function parseInteger(string) {\n  if (isUndefined(string) || string === null || string === \"\") {\n    return undefined;\n  } else {\n    return parseInt(string, 10);\n  }\n}\n\nexport function parseFloating(string) {\n  if (isUndefined(string) || string === null || string === \"\") {\n    return undefined;\n  } else {\n    return parseFloat(string);\n  }\n}\n\nexport function parseMillis(fraction) {\n  // Return undefined (instead of 0) in these cases, where fraction is not set\n  if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n    return undefined;\n  } else {\n    const f = parseFloat(\"0.\" + fraction) * 1000;\n    return Math.floor(f);\n  }\n}\n\nexport function roundTo(number, digits, rounding = \"round\") {\n  const factor = 10 ** digits;\n  switch (rounding) {\n    case \"expand\":\n      return number > 0\n        ? Math.ceil(number * factor) / factor\n        : Math.floor(number * factor) / factor;\n    case \"trunc\":\n      return Math.trunc(number * factor) / factor;\n    case \"round\":\n      return Math.round(number * factor) / factor;\n    case \"floor\":\n      return Math.floor(number * factor) / factor;\n    case \"ceil\":\n      return Math.ceil(number * factor) / factor;\n    default:\n      throw new RangeError(`Value rounding ${rounding} is out of range`);\n  }\n}\n\n// DATE BASICS\n\nexport function isLeapYear(year) {\n  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function daysInYear(year) {\n  return isLeapYear(year) ? 366 : 365;\n}\n\nexport function daysInMonth(year, month) {\n  const modMonth = floorMod(month - 1, 12) + 1,\n    modYear = year + (month - modMonth) / 12;\n\n  if (modMonth === 2) {\n    return isLeapYear(modYear) ? 29 : 28;\n  } else {\n    return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n  }\n}\n\n// convert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n  let d = Date.UTC(\n    obj.year,\n    obj.month - 1,\n    obj.day,\n    obj.hour,\n    obj.minute,\n    obj.second,\n    obj.millisecond\n  );\n\n  // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n  if (obj.year < 100 && obj.year >= 0) {\n    d = new Date(d);\n    // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not\n    // so if obj.year is in 99, but obj.day makes it roll over into year 100,\n    // the calculations done by Date.UTC are using year 2000 - which is incorrect\n    d.setUTCFullYear(obj.year, obj.month - 1, obj.day);\n  }\n  return +d;\n}\n\n// adapted from moment.js: https://github.com/moment/moment/blob/000ac1800e620f770f4eb31b5ae908f6167b0ab2/src/lib/units/week-calendar-utils.js\nfunction firstWeekOffset(year, minDaysInFirstWeek, startOfWeek) {\n  const fwdlw = isoWeekdayToLocal(dayOfWeek(year, 1, minDaysInFirstWeek), startOfWeek);\n  return -fwdlw + minDaysInFirstWeek - 1;\n}\n\nexport function weeksInWeekYear(weekYear, minDaysInFirstWeek = 4, startOfWeek = 1) {\n  const weekOffset = firstWeekOffset(weekYear, minDaysInFirstWeek, startOfWeek);\n  const weekOffsetNext = firstWeekOffset(weekYear + 1, minDaysInFirstWeek, startOfWeek);\n  return (daysInYear(weekYear) - weekOffset + weekOffsetNext) / 7;\n}\n\nexport function untruncateYear(year) {\n  if (year > 99) {\n    return year;\n  } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nexport function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {\n  const date = new Date(ts),\n    intlOpts = {\n      hourCycle: \"h23\",\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n    };\n\n  if (timeZone) {\n    intlOpts.timeZone = timeZone;\n  }\n\n  const modified = { timeZoneName: offsetFormat, ...intlOpts };\n\n  const parsed = new Intl.DateTimeFormat(locale, modified)\n    .formatToParts(date)\n    .find((m) => m.type.toLowerCase() === \"timezonename\");\n  return parsed ? parsed.value : null;\n}\n\n// signedOffset('-5', '30') -> -330\nexport function signedOffset(offHourStr, offMinuteStr) {\n  let offHour = parseInt(offHourStr, 10);\n\n  // don't || this because we want to preserve -0\n  if (Number.isNaN(offHour)) {\n    offHour = 0;\n  }\n\n  const offMin = parseInt(offMinuteStr, 10) || 0,\n    offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n  return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nexport function asNumber(value) {\n  const numericValue = Number(value);\n  if (typeof value === \"boolean\" || value === \"\" || !Number.isFinite(numericValue))\n    throw new InvalidArgumentError(`Invalid unit value ${value}`);\n  return numericValue;\n}\n\nexport function normalizeObject(obj, normalizer) {\n  const normalized = {};\n  for (const u in obj) {\n    if (hasOwnProperty(obj, u)) {\n      const v = obj[u];\n      if (v === undefined || v === null) continue;\n      normalized[normalizer(u)] = asNumber(v);\n    }\n  }\n  return normalized;\n}\n\n/**\n * Returns the offset's value as a string\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n *                          Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\nexport function formatOffset(offset, format) {\n  const hours = Math.trunc(Math.abs(offset / 60)),\n    minutes = Math.trunc(Math.abs(offset % 60)),\n    sign = offset >= 0 ? \"+\" : \"-\";\n\n  switch (format) {\n    case \"short\":\n      return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`;\n    case \"narrow\":\n      return `${sign}${hours}${minutes > 0 ? `:${minutes}` : \"\"}`;\n    case \"techie\":\n      return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`;\n    default:\n      throw new RangeError(`Value format ${format} is out of range for property format`);\n  }\n}\n\nexport function timeObject(obj) {\n  return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n","const numberingSystems = {\n  arab: \"[\\u0660-\\u0669]\",\n  arabext: \"[\\u06F0-\\u06F9]\",\n  bali: \"[\\u1B50-\\u1B59]\",\n  beng: \"[\\u09E6-\\u09EF]\",\n  deva: \"[\\u0966-\\u096F]\",\n  fullwide: \"[\\uFF10-\\uFF19]\",\n  gujr: \"[\\u0AE6-\\u0AEF]\",\n  hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n  khmr: \"[\\u17E0-\\u17E9]\",\n  knda: \"[\\u0CE6-\\u0CEF]\",\n  laoo: \"[\\u0ED0-\\u0ED9]\",\n  limb: \"[\\u1946-\\u194F]\",\n  mlym: \"[\\u0D66-\\u0D6F]\",\n  mong: \"[\\u1810-\\u1819]\",\n  mymr: \"[\\u1040-\\u1049]\",\n  orya: \"[\\u0B66-\\u0B6F]\",\n  tamldec: \"[\\u0BE6-\\u0BEF]\",\n  telu: \"[\\u0C66-\\u0C6F]\",\n  thai: \"[\\u0E50-\\u0E59]\",\n  tibt: \"[\\u0F20-\\u0F29]\",\n  latn: \"\\\\d\",\n};\n\nconst numberingSystemsUTF16 = {\n  arab: [1632, 1641],\n  arabext: [1776, 1785],\n  bali: [6992, 7001],\n  beng: [2534, 2543],\n  deva: [2406, 2415],\n  fullwide: [65296, 65303],\n  gujr: [2790, 2799],\n  khmr: [6112, 6121],\n  knda: [3302, 3311],\n  laoo: [3792, 3801],\n  limb: [6470, 6479],\n  mlym: [3430, 3439],\n  mong: [6160, 6169],\n  mymr: [4160, 4169],\n  orya: [2918, 2927],\n  tamldec: [3046, 3055],\n  telu: [3174, 3183],\n  thai: [3664, 3673],\n  tibt: [3872, 3881],\n};\n\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n\nexport function parseDigits(str) {\n  let value = parseInt(str, 10);\n  if (isNaN(value)) {\n    value = \"\";\n    for (let i = 0; i < str.length; i++) {\n      const code = str.charCodeAt(i);\n\n      if (str[i].search(numberingSystems.hanidec) !== -1) {\n        value += hanidecChars.indexOf(str[i]);\n      } else {\n        for (const key in numberingSystemsUTF16) {\n          const [min, max] = numberingSystemsUTF16[key];\n          if (code >= min && code <= max) {\n            value += code - min;\n          }\n        }\n      }\n    }\n    return parseInt(value, 10);\n  } else {\n    return value;\n  }\n}\n\n// cache of {numberingSystem: {append: regex}}\nconst digitRegexCache = new Map();\nexport function resetDigitRegexCache() {\n  digitRegexCache.clear();\n}\n\nexport function digitRegex({ numberingSystem }, append = \"\") {\n  const ns = numberingSystem || \"latn\";\n\n  let appendCache = digitRegexCache.get(ns);\n  if (appendCache === undefined) {\n    appendCache = new Map();\n    digitRegexCache.set(ns, appendCache);\n  }\n  let regex = appendCache.get(append);\n  if (regex === undefined) {\n    regex = new RegExp(`${numberingSystems[ns]}${append}`);\n    appendCache.set(append, regex);\n  }\n\n  return regex;\n}\n","import SystemZone from \"./zones/systemZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport DateTime from \"./datetime.js\";\n\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport { validateWeekSettings } from \"./impl/util.js\";\nimport { resetDigitRegexCache } from \"./impl/digits.js\";\n\nlet now = () => Date.now(),\n  defaultZone = \"system\",\n  defaultLocale = null,\n  defaultNumberingSystem = null,\n  defaultOutputCalendar = null,\n  twoDigitCutoffYear = 60,\n  throwOnInvalid,\n  defaultWeekSettings = null;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\nexport default class Settings {\n  /**\n   * Get the callback for returning the current timestamp.\n   * @type {function}\n   */\n  static get now() {\n    return now;\n  }\n\n  /**\n   * Set the callback for returning the current timestamp.\n   * The function should return a number, which will be interpreted as an Epoch millisecond count\n   * @type {function}\n   * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n   * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n   */\n  static set now(n) {\n    now = n;\n  }\n\n  /**\n   * Set the default time zone to create DateTimes in. Does not affect existing instances.\n   * Use the value \"system\" to reset this value to the system's time zone.\n   * @type {string}\n   */\n  static set defaultZone(zone) {\n    defaultZone = zone;\n  }\n\n  /**\n   * Get the default time zone object currently used to create DateTimes. Does not affect existing instances.\n   * The default value is the system's time zone (the one set on the machine that runs this code).\n   * @type {Zone}\n   */\n  static get defaultZone() {\n    return normalizeZone(defaultZone, SystemZone.instance);\n  }\n\n  /**\n   * Get the default locale to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static get defaultLocale() {\n    return defaultLocale;\n  }\n\n  /**\n   * Set the default locale to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static set defaultLocale(locale) {\n    defaultLocale = locale;\n  }\n\n  /**\n   * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static get defaultNumberingSystem() {\n    return defaultNumberingSystem;\n  }\n\n  /**\n   * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static set defaultNumberingSystem(numberingSystem) {\n    defaultNumberingSystem = numberingSystem;\n  }\n\n  /**\n   * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static get defaultOutputCalendar() {\n    return defaultOutputCalendar;\n  }\n\n  /**\n   * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n   * @type {string}\n   */\n  static set defaultOutputCalendar(outputCalendar) {\n    defaultOutputCalendar = outputCalendar;\n  }\n\n  /**\n   * @typedef {Object} WeekSettings\n   * @property {number} firstDay\n   * @property {number} minimalDays\n   * @property {number[]} weekend\n   */\n\n  /**\n   * @return {WeekSettings|null}\n   */\n  static get defaultWeekSettings() {\n    return defaultWeekSettings;\n  }\n\n  /**\n   * Allows overriding the default locale week settings, i.e. the start of the week, the weekend and\n   * how many days are required in the first week of a year.\n   * Does not affect existing instances.\n   *\n   * @param {WeekSettings|null} weekSettings\n   */\n  static set defaultWeekSettings(weekSettings) {\n    defaultWeekSettings = validateWeekSettings(weekSettings);\n  }\n\n  /**\n   * Get the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n   * @type {number}\n   */\n  static get twoDigitCutoffYear() {\n    return twoDigitCutoffYear;\n  }\n\n  /**\n   * Set the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n   * @type {number}\n   * @example Settings.twoDigitCutoffYear = 0 // all 'yy' are interpreted as 20th century\n   * @example Settings.twoDigitCutoffYear = 99 // all 'yy' are interpreted as 21st century\n   * @example Settings.twoDigitCutoffYear = 50 // '49' -> 2049; '50' -> 1950\n   * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50\n   * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50\n   */\n  static set twoDigitCutoffYear(cutoffYear) {\n    twoDigitCutoffYear = cutoffYear % 100;\n  }\n\n  /**\n   * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n   * @type {boolean}\n   */\n  static get throwOnInvalid() {\n    return throwOnInvalid;\n  }\n\n  /**\n   * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n   * @type {boolean}\n   */\n  static set throwOnInvalid(t) {\n    throwOnInvalid = t;\n  }\n\n  /**\n   * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n   * @return {void}\n   */\n  static resetCaches() {\n    Locale.resetCache();\n    IANAZone.resetCache();\n    DateTime.resetCache();\n    resetDigitRegexCache();\n  }\n}\n","export default class Invalid {\n  constructor(reason, explanation) {\n    this.reason = reason;\n    this.explanation = explanation;\n  }\n\n  toMessage() {\n    if (this.explanation) {\n      return `${this.reason}: ${this.explanation}`;\n    } else {\n      return this.reason;\n    }\n  }\n}\n","import {\n  integerBetween,\n  isLeapYear,\n  timeObject,\n  daysInYear,\n  daysInMonth,\n  weeksInWeekYear,\n  isInteger,\n  isUndefined,\n} from \"./util.js\";\nimport Invalid from \"./invalid.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n  leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n  return new Invalid(\n    \"unit out of range\",\n    `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`\n  );\n}\n\nexport function dayOfWeek(year, month, day) {\n  const d = new Date(Date.UTC(year, month - 1, day));\n\n  if (year < 100 && year >= 0) {\n    d.setUTCFullYear(d.getUTCFullYear() - 1900);\n  }\n\n  const js = d.getUTCDay();\n\n  return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n  return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n  const table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n    month0 = table.findIndex((i) => i < ordinal),\n    day = ordinal - table[month0];\n  return { month: month0 + 1, day };\n}\n\nexport function isoWeekdayToLocal(isoWeekday, startOfWeek) {\n  return ((isoWeekday - startOfWeek + 7) % 7) + 1;\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n  const { year, month, day } = gregObj,\n    ordinal = computeOrdinal(year, month, day),\n    weekday = isoWeekdayToLocal(dayOfWeek(year, month, day), startOfWeek);\n\n  let weekNumber = Math.floor((ordinal - weekday + 14 - minDaysInFirstWeek) / 7),\n    weekYear;\n\n  if (weekNumber < 1) {\n    weekYear = year - 1;\n    weekNumber = weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek);\n  } else if (weekNumber > weeksInWeekYear(year, minDaysInFirstWeek, startOfWeek)) {\n    weekYear = year + 1;\n    weekNumber = 1;\n  } else {\n    weekYear = year;\n  }\n\n  return { weekYear, weekNumber, weekday, ...timeObject(gregObj) };\n}\n\nexport function weekToGregorian(weekData, minDaysInFirstWeek = 4, startOfWeek = 1) {\n  const { weekYear, weekNumber, weekday } = weekData,\n    weekdayOfJan4 = isoWeekdayToLocal(dayOfWeek(weekYear, 1, minDaysInFirstWeek), startOfWeek),\n    yearInDays = daysInYear(weekYear);\n\n  let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 7 + minDaysInFirstWeek,\n    year;\n\n  if (ordinal < 1) {\n    year = weekYear - 1;\n    ordinal += daysInYear(year);\n  } else if (ordinal > yearInDays) {\n    year = weekYear + 1;\n    ordinal -= daysInYear(weekYear);\n  } else {\n    year = weekYear;\n  }\n\n  const { month, day } = uncomputeOrdinal(year, ordinal);\n  return { year, month, day, ...timeObject(weekData) };\n}\n\nexport function gregorianToOrdinal(gregData) {\n  const { year, month, day } = gregData;\n  const ordinal = computeOrdinal(year, month, day);\n  return { year, ordinal, ...timeObject(gregData) };\n}\n\nexport function ordinalToGregorian(ordinalData) {\n  const { year, ordinal } = ordinalData;\n  const { month, day } = uncomputeOrdinal(year, ordinal);\n  return { year, month, day, ...timeObject(ordinalData) };\n}\n\n/**\n * Check if local week units like localWeekday are used in obj.\n * If so, validates that they are not mixed with ISO week units and then copies them to the normal week unit properties.\n * Modifies obj in-place!\n * @param obj the object values\n */\nexport function usesLocalWeekValues(obj, loc) {\n  const hasLocaleWeekData =\n    !isUndefined(obj.localWeekday) ||\n    !isUndefined(obj.localWeekNumber) ||\n    !isUndefined(obj.localWeekYear);\n  if (hasLocaleWeekData) {\n    const hasIsoWeekData =\n      !isUndefined(obj.weekday) || !isUndefined(obj.weekNumber) || !isUndefined(obj.weekYear);\n\n    if (hasIsoWeekData) {\n      throw new ConflictingSpecificationError(\n        \"Cannot mix locale-based week fields with ISO-based week fields\"\n      );\n    }\n    if (!isUndefined(obj.localWeekday)) obj.weekday = obj.localWeekday;\n    if (!isUndefined(obj.localWeekNumber)) obj.weekNumber = obj.localWeekNumber;\n    if (!isUndefined(obj.localWeekYear)) obj.weekYear = obj.localWeekYear;\n    delete obj.localWeekday;\n    delete obj.localWeekNumber;\n    delete obj.localWeekYear;\n    return {\n      minDaysInFirstWeek: loc.getMinDaysInFirstWeek(),\n      startOfWeek: loc.getStartOfWeek(),\n    };\n  } else {\n    return { minDaysInFirstWeek: 4, startOfWeek: 1 };\n  }\n}\n\nexport function hasInvalidWeekData(obj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n  const validYear = isInteger(obj.weekYear),\n    validWeek = integerBetween(\n      obj.weekNumber,\n      1,\n      weeksInWeekYear(obj.weekYear, minDaysInFirstWeek, startOfWeek)\n    ),\n    validWeekday = integerBetween(obj.weekday, 1, 7);\n\n  if (!validYear) {\n    return unitOutOfRange(\"weekYear\", obj.weekYear);\n  } else if (!validWeek) {\n    return unitOutOfRange(\"week\", obj.weekNumber);\n  } else if (!validWeekday) {\n    return unitOutOfRange(\"weekday\", obj.weekday);\n  } else return false;\n}\n\nexport function hasInvalidOrdinalData(obj) {\n  const validYear = isInteger(obj.year),\n    validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n  if (!validYear) {\n    return unitOutOfRange(\"year\", obj.year);\n  } else if (!validOrdinal) {\n    return unitOutOfRange(\"ordinal\", obj.ordinal);\n  } else return false;\n}\n\nexport function hasInvalidGregorianData(obj) {\n  const validYear = isInteger(obj.year),\n    validMonth = integerBetween(obj.month, 1, 12),\n    validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n  if (!validYear) {\n    return unitOutOfRange(\"year\", obj.year);\n  } else if (!validMonth) {\n    return unitOutOfRange(\"month\", obj.month);\n  } else if (!validDay) {\n    return unitOutOfRange(\"day\", obj.day);\n  } else return false;\n}\n\nexport function hasInvalidTimeData(obj) {\n  const { hour, minute, second, millisecond } = obj;\n  const validHour =\n      integerBetween(hour, 0, 23) ||\n      (hour === 24 && minute === 0 && second === 0 && millisecond === 0),\n    validMinute = integerBetween(minute, 0, 59),\n    validSecond = integerBetween(second, 0, 59),\n    validMillisecond = integerBetween(millisecond, 0, 999);\n\n  if (!validHour) {\n    return unitOutOfRange(\"hour\", hour);\n  } else if (!validMinute) {\n    return unitOutOfRange(\"minute\", minute);\n  } else if (!validSecond) {\n    return unitOutOfRange(\"second\", second);\n  } else if (!validMillisecond) {\n    return unitOutOfRange(\"millisecond\", millisecond);\n  } else return false;\n}\n","import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { padStart } from \"./util.js\";\n\nfunction stringifyTokens(splits, tokenToString) {\n  let s = \"\";\n  for (const token of splits) {\n    if (token.literal) {\n      s += token.val;\n    } else {\n      s += tokenToString(token.val);\n    }\n  }\n  return s;\n}\n\nconst macroTokenToFormatOpts = {\n  D: Formats.DATE_SHORT,\n  DD: Formats.DATE_MED,\n  DDD: Formats.DATE_FULL,\n  DDDD: Formats.DATE_HUGE,\n  t: Formats.TIME_SIMPLE,\n  tt: Formats.TIME_WITH_SECONDS,\n  ttt: Formats.TIME_WITH_SHORT_OFFSET,\n  tttt: Formats.TIME_WITH_LONG_OFFSET,\n  T: Formats.TIME_24_SIMPLE,\n  TT: Formats.TIME_24_WITH_SECONDS,\n  TTT: Formats.TIME_24_WITH_SHORT_OFFSET,\n  TTTT: Formats.TIME_24_WITH_LONG_OFFSET,\n  f: Formats.DATETIME_SHORT,\n  ff: Formats.DATETIME_MED,\n  fff: Formats.DATETIME_FULL,\n  ffff: Formats.DATETIME_HUGE,\n  F: Formats.DATETIME_SHORT_WITH_SECONDS,\n  FF: Formats.DATETIME_MED_WITH_SECONDS,\n  FFF: Formats.DATETIME_FULL_WITH_SECONDS,\n  FFFF: Formats.DATETIME_HUGE_WITH_SECONDS,\n};\n\n/**\n * @private\n */\n\nexport default class Formatter {\n  static create(locale, opts = {}) {\n    return new Formatter(locale, opts);\n  }\n\n  static parseFormat(fmt) {\n    // white-space is always considered a literal in user-provided formats\n    // the \" \" token has a special meaning (see unitForToken)\n\n    let current = null,\n      currentFull = \"\",\n      bracketed = false;\n    const splits = [];\n    for (let i = 0; i < fmt.length; i++) {\n      const c = fmt.charAt(i);\n      if (c === \"'\") {\n        // turn '' into a literal signal quote instead of just skipping the empty literal\n        if (currentFull.length > 0 || bracketed) {\n          splits.push({\n            literal: bracketed || /^\\s+$/.test(currentFull),\n            val: currentFull === \"\" ? \"'\" : currentFull,\n          });\n        }\n        current = null;\n        currentFull = \"\";\n        bracketed = !bracketed;\n      } else if (bracketed) {\n        currentFull += c;\n      } else if (c === current) {\n        currentFull += c;\n      } else {\n        if (currentFull.length > 0) {\n          splits.push({ literal: /^\\s+$/.test(currentFull), val: currentFull });\n        }\n        currentFull = c;\n        current = c;\n      }\n    }\n\n    if (currentFull.length > 0) {\n      splits.push({ literal: bracketed || /^\\s+$/.test(currentFull), val: currentFull });\n    }\n\n    return splits;\n  }\n\n  static macroTokenToFormatOpts(token) {\n    return macroTokenToFormatOpts[token];\n  }\n\n  constructor(locale, formatOpts) {\n    this.opts = formatOpts;\n    this.loc = locale;\n    this.systemLoc = null;\n  }\n\n  formatWithSystemDefault(dt, opts) {\n    if (this.systemLoc === null) {\n      this.systemLoc = this.loc.redefaultToSystem();\n    }\n    const df = this.systemLoc.dtFormatter(dt, { ...this.opts, ...opts });\n    return df.format();\n  }\n\n  dtFormatter(dt, opts = {}) {\n    return this.loc.dtFormatter(dt, { ...this.opts, ...opts });\n  }\n\n  formatDateTime(dt, opts) {\n    return this.dtFormatter(dt, opts).format();\n  }\n\n  formatDateTimeParts(dt, opts) {\n    return this.dtFormatter(dt, opts).formatToParts();\n  }\n\n  formatInterval(interval, opts) {\n    const df = this.dtFormatter(interval.start, opts);\n    return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate());\n  }\n\n  resolvedOptions(dt, opts) {\n    return this.dtFormatter(dt, opts).resolvedOptions();\n  }\n\n  num(n, p = 0, signDisplay = undefined) {\n    // we get some perf out of doing this here, annoyingly\n    if (this.opts.forceSimple) {\n      return padStart(n, p);\n    }\n\n    const opts = { ...this.opts };\n\n    if (p > 0) {\n      opts.padTo = p;\n    }\n    if (signDisplay) {\n      opts.signDisplay = signDisplay;\n    }\n\n    return this.loc.numberFormatter(opts).format(n);\n  }\n\n  formatDateTimeFromString(dt, fmt) {\n    const knownEnglish = this.loc.listingMode() === \"en\",\n      useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\",\n      string = (opts, extract) => this.loc.extract(dt, opts, extract),\n      formatOffset = (opts) => {\n        if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n          return \"Z\";\n        }\n\n        return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n      },\n      meridiem = () =>\n        knownEnglish\n          ? English.meridiemForDateTime(dt)\n          : string({ hour: \"numeric\", hourCycle: \"h12\" }, \"dayperiod\"),\n      month = (length, standalone) =>\n        knownEnglish\n          ? English.monthForDateTime(dt, length)\n          : string(standalone ? { month: length } : { month: length, day: \"numeric\" }, \"month\"),\n      weekday = (length, standalone) =>\n        knownEnglish\n          ? English.weekdayForDateTime(dt, length)\n          : string(\n              standalone ? { weekday: length } : { weekday: length, month: \"long\", day: \"numeric\" },\n              \"weekday\"\n            ),\n      maybeMacro = (token) => {\n        const formatOpts = Formatter.macroTokenToFormatOpts(token);\n        if (formatOpts) {\n          return this.formatWithSystemDefault(dt, formatOpts);\n        } else {\n          return token;\n        }\n      },\n      era = (length) =>\n        knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, \"era\"),\n      tokenToString = (token) => {\n        // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols\n        switch (token) {\n          // ms\n          case \"S\":\n            return this.num(dt.millisecond);\n          case \"u\":\n          // falls through\n          case \"SSS\":\n            return this.num(dt.millisecond, 3);\n          // seconds\n          case \"s\":\n            return this.num(dt.second);\n          case \"ss\":\n            return this.num(dt.second, 2);\n          // fractional seconds\n          case \"uu\":\n            return this.num(Math.floor(dt.millisecond / 10), 2);\n          case \"uuu\":\n            return this.num(Math.floor(dt.millisecond / 100));\n          // minutes\n          case \"m\":\n            return this.num(dt.minute);\n          case \"mm\":\n            return this.num(dt.minute, 2);\n          // hours\n          case \"h\":\n            return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n          case \"hh\":\n            return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n          case \"H\":\n            return this.num(dt.hour);\n          case \"HH\":\n            return this.num(dt.hour, 2);\n          // offset\n          case \"Z\":\n            // like +6\n            return formatOffset({ format: \"narrow\", allowZ: this.opts.allowZ });\n          case \"ZZ\":\n            // like +06:00\n            return formatOffset({ format: \"short\", allowZ: this.opts.allowZ });\n          case \"ZZZ\":\n            // like +0600\n            return formatOffset({ format: \"techie\", allowZ: this.opts.allowZ });\n          case \"ZZZZ\":\n            // like EST\n            return dt.zone.offsetName(dt.ts, { format: \"short\", locale: this.loc.locale });\n          case \"ZZZZZ\":\n            // like Eastern Standard Time\n            return dt.zone.offsetName(dt.ts, { format: \"long\", locale: this.loc.locale });\n          // zone\n          case \"z\":\n            // like America/New_York\n            return dt.zoneName;\n          // meridiems\n          case \"a\":\n            return meridiem();\n          // dates\n          case \"d\":\n            return useDateTimeFormatter ? string({ day: \"numeric\" }, \"day\") : this.num(dt.day);\n          case \"dd\":\n            return useDateTimeFormatter ? string({ day: \"2-digit\" }, \"day\") : this.num(dt.day, 2);\n          // weekdays - standalone\n          case \"c\":\n            // like 1\n            return this.num(dt.weekday);\n          case \"ccc\":\n            // like 'Tues'\n            return weekday(\"short\", true);\n          case \"cccc\":\n            // like 'Tuesday'\n            return weekday(\"long\", true);\n          case \"ccccc\":\n            // like 'T'\n            return weekday(\"narrow\", true);\n          // weekdays - format\n          case \"E\":\n            // like 1\n            return this.num(dt.weekday);\n          case \"EEE\":\n            // like 'Tues'\n            return weekday(\"short\", false);\n          case \"EEEE\":\n            // like 'Tuesday'\n            return weekday(\"long\", false);\n          case \"EEEEE\":\n            // like 'T'\n            return weekday(\"narrow\", false);\n          // months - standalone\n          case \"L\":\n            // like 1\n            return useDateTimeFormatter\n              ? string({ month: \"numeric\", day: \"numeric\" }, \"month\")\n              : this.num(dt.month);\n          case \"LL\":\n            // like 01, doesn't seem to work\n            return useDateTimeFormatter\n              ? string({ month: \"2-digit\", day: \"numeric\" }, \"month\")\n              : this.num(dt.month, 2);\n          case \"LLL\":\n            // like Jan\n            return month(\"short\", true);\n          case \"LLLL\":\n            // like January\n            return month(\"long\", true);\n          case \"LLLLL\":\n            // like J\n            return month(\"narrow\", true);\n          // months - format\n          case \"M\":\n            // like 1\n            return useDateTimeFormatter\n              ? string({ month: \"numeric\" }, \"month\")\n              : this.num(dt.month);\n          case \"MM\":\n            // like 01\n            return useDateTimeFormatter\n              ? string({ month: \"2-digit\" }, \"month\")\n              : this.num(dt.month, 2);\n          case \"MMM\":\n            // like Jan\n            return month(\"short\", false);\n          case \"MMMM\":\n            // like January\n            return month(\"long\", false);\n          case \"MMMMM\":\n            // like J\n            return month(\"narrow\", false);\n          // years\n          case \"y\":\n            // like 2014\n            return useDateTimeFormatter ? string({ year: \"numeric\" }, \"year\") : this.num(dt.year);\n          case \"yy\":\n            // like 14\n            return useDateTimeFormatter\n              ? string({ year: \"2-digit\" }, \"year\")\n              : this.num(dt.year.toString().slice(-2), 2);\n          case \"yyyy\":\n            // like 0012\n            return useDateTimeFormatter\n              ? string({ year: \"numeric\" }, \"year\")\n              : this.num(dt.year, 4);\n          case \"yyyyyy\":\n            // like 000012\n            return useDateTimeFormatter\n              ? string({ year: \"numeric\" }, \"year\")\n              : this.num(dt.year, 6);\n          // eras\n          case \"G\":\n            // like AD\n            return era(\"short\");\n          case \"GG\":\n            // like Anno Domini\n            return era(\"long\");\n          case \"GGGGG\":\n            return era(\"narrow\");\n          case \"kk\":\n            return this.num(dt.weekYear.toString().slice(-2), 2);\n          case \"kkkk\":\n            return this.num(dt.weekYear, 4);\n          case \"W\":\n            return this.num(dt.weekNumber);\n          case \"WW\":\n            return this.num(dt.weekNumber, 2);\n          case \"n\":\n            return this.num(dt.localWeekNumber);\n          case \"nn\":\n            return this.num(dt.localWeekNumber, 2);\n          case \"ii\":\n            return this.num(dt.localWeekYear.toString().slice(-2), 2);\n          case \"iiii\":\n            return this.num(dt.localWeekYear, 4);\n          case \"o\":\n            return this.num(dt.ordinal);\n          case \"ooo\":\n            return this.num(dt.ordinal, 3);\n          case \"q\":\n            // like 1\n            return this.num(dt.quarter);\n          case \"qq\":\n            // like 01\n            return this.num(dt.quarter, 2);\n          case \"X\":\n            return this.num(Math.floor(dt.ts / 1000));\n          case \"x\":\n            return this.num(dt.ts);\n          default:\n            return maybeMacro(token);\n        }\n      };\n\n    return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n  }\n\n  formatDurationFromString(dur, fmt) {\n    const invertLargest = this.opts.signMode === \"negativeLargestOnly\" ? -1 : 1;\n    const tokenToField = (token) => {\n        switch (token[0]) {\n          case \"S\":\n            return \"milliseconds\";\n          case \"s\":\n            return \"seconds\";\n          case \"m\":\n            return \"minutes\";\n          case \"h\":\n            return \"hours\";\n          case \"d\":\n            return \"days\";\n          case \"w\":\n            return \"weeks\";\n          case \"M\":\n            return \"months\";\n          case \"y\":\n            return \"years\";\n          default:\n            return null;\n        }\n      },\n      tokenToString = (lildur, info) => (token) => {\n        const mapped = tokenToField(token);\n        if (mapped) {\n          const inversionFactor =\n            info.isNegativeDuration && mapped !== info.largestUnit ? invertLargest : 1;\n          let signDisplay;\n          if (this.opts.signMode === \"negativeLargestOnly\" && mapped !== info.largestUnit) {\n            signDisplay = \"never\";\n          } else if (this.opts.signMode === \"all\") {\n            signDisplay = \"always\";\n          } else {\n            // \"auto\" and \"negative\" are the same, but \"auto\" has better support\n            signDisplay = \"auto\";\n          }\n          return this.num(lildur.get(mapped) * inversionFactor, token.length, signDisplay);\n        } else {\n          return token;\n        }\n      },\n      tokens = Formatter.parseFormat(fmt),\n      realTokens = tokens.reduce(\n        (found, { literal, val }) => (literal ? found : found.concat(val)),\n        []\n      ),\n      collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t) => t)),\n      durationInfo = {\n        isNegativeDuration: collapsed < 0,\n        // this relies on \"collapsed\" being based on \"shiftTo\", which builds up the object\n        // in order\n        largestUnit: Object.keys(collapsed.values)[0],\n      };\n    return stringifyTokens(tokens, tokenToString(collapsed, durationInfo));\n  }\n}\n","import {\n  untruncateYear,\n  signedOffset,\n  parseInteger,\n  parseMillis,\n  isUndefined,\n  parseFloating,\n} from \"./util.js\";\nimport * as English from \"./english.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nconst ianaRegex = /[A-Za-z_+-]{1,256}(?::?\\/[A-Za-z0-9_+-]{1,256}(?:\\/[A-Za-z0-9_+-]{1,256})?)?/;\n\nfunction combineRegexes(...regexes) {\n  const full = regexes.reduce((f, r) => f + r.source, \"\");\n  return RegExp(`^${full}$`);\n}\n\nfunction combineExtractors(...extractors) {\n  return (m) =>\n    extractors\n      .reduce(\n        ([mergedVals, mergedZone, cursor], ex) => {\n          const [val, zone, next] = ex(m, cursor);\n          return [{ ...mergedVals, ...val }, zone || mergedZone, next];\n        },\n        [{}, null, 1]\n      )\n      .slice(0, 2);\n}\n\nfunction parse(s, ...patterns) {\n  if (s == null) {\n    return [null, null];\n  }\n\n  for (const [regex, extractor] of patterns) {\n    const m = regex.exec(s);\n    if (m) {\n      return extractor(m);\n    }\n  }\n  return [null, null];\n}\n\nfunction simpleParse(...keys) {\n  return (match, cursor) => {\n    const ret = {};\n    let i;\n\n    for (i = 0; i < keys.length; i++) {\n      ret[keys[i]] = parseInteger(match[cursor + i]);\n    }\n    return [ret, null, cursor + i];\n  };\n}\n\n// ISO and SQL parsing\nconst offsetRegex = /(?:([Zz])|([+-]\\d\\d)(?::?(\\d\\d))?)/;\nconst isoExtendedZone = `(?:${offsetRegex.source}?(?:\\\\[(${ianaRegex.source})\\\\])?)?`;\nconst isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/;\nconst isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`);\nconst isoTimeExtensionRegex = RegExp(`(?:[Tt]${isoTimeRegex.source})?`);\nconst isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/;\nconst isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/;\nconst isoOrdinalRegex = /(\\d{4})-?(\\d{3})/;\nconst extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\");\nconst extractISOOrdinalData = simpleParse(\"year\", \"ordinal\");\nconst sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/; // dumbed-down version of the ISO one\nconst sqlTimeRegex = RegExp(\n  `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`\n);\nconst sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\n\nfunction int(match, pos, fallback) {\n  const m = match[pos];\n  return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n  const item = {\n    year: int(match, cursor),\n    month: int(match, cursor + 1, 1),\n    day: int(match, cursor + 2, 1),\n  };\n\n  return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n  const item = {\n    hours: int(match, cursor, 0),\n    minutes: int(match, cursor + 1, 0),\n    seconds: int(match, cursor + 2, 0),\n    milliseconds: parseMillis(match[cursor + 3]),\n  };\n\n  return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n  const local = !match[cursor] && !match[cursor + 1],\n    fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n    zone = local ? null : FixedOffsetZone.instance(fullOffset);\n  return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n  const zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n  return [{}, zone, cursor + 1];\n}\n\n// ISO time parsing\n\nconst isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`);\n\n// ISO duration parsing\n\nconst isoDuration =\n  /^-?P(?:(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)Y)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)W)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)D)?(?:T(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)H)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,20}))?S)?)?)$/;\n\nfunction extractISODuration(match) {\n  const [s, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] =\n    match;\n\n  const hasNegativePrefix = s[0] === \"-\";\n  const negativeSeconds = secondStr && secondStr[0] === \"-\";\n\n  const maybeNegate = (num, force = false) =>\n    num !== undefined && (force || (num && hasNegativePrefix)) ? -num : num;\n\n  return [\n    {\n      years: maybeNegate(parseFloating(yearStr)),\n      months: maybeNegate(parseFloating(monthStr)),\n      weeks: maybeNegate(parseFloating(weekStr)),\n      days: maybeNegate(parseFloating(dayStr)),\n      hours: maybeNegate(parseFloating(hourStr)),\n      minutes: maybeNegate(parseFloating(minuteStr)),\n      seconds: maybeNegate(parseFloating(secondStr), secondStr === \"-0\"),\n      milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds),\n    },\n  ];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nconst obsOffsets = {\n  GMT: 0,\n  EDT: -4 * 60,\n  EST: -5 * 60,\n  CDT: -5 * 60,\n  CST: -6 * 60,\n  MDT: -6 * 60,\n  MST: -7 * 60,\n  PDT: -7 * 60,\n  PST: -8 * 60,\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n  const result = {\n    year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n    month: English.monthsShort.indexOf(monthStr) + 1,\n    day: parseInteger(dayStr),\n    hour: parseInteger(hourStr),\n    minute: parseInteger(minuteStr),\n  };\n\n  if (secondStr) result.second = parseInteger(secondStr);\n  if (weekdayStr) {\n    result.weekday =\n      weekdayStr.length > 3\n        ? English.weekdaysLong.indexOf(weekdayStr) + 1\n        : English.weekdaysShort.indexOf(weekdayStr) + 1;\n  }\n\n  return result;\n}\n\n// RFC 2822/5322\nconst rfc2822 =\n  /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n  const [\n      ,\n      weekdayStr,\n      dayStr,\n      monthStr,\n      yearStr,\n      hourStr,\n      minuteStr,\n      secondStr,\n      obsOffset,\n      milOffset,\n      offHourStr,\n      offMinuteStr,\n    ] = match,\n    result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n  let offset;\n  if (obsOffset) {\n    offset = obsOffsets[obsOffset];\n  } else if (milOffset) {\n    offset = 0;\n  } else {\n    offset = signedOffset(offHourStr, offMinuteStr);\n  }\n\n  return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n  // Remove comments and folding whitespace and replace multiple-spaces with a single space\n  return s\n    .replace(/\\([^()]*\\)|[\\n\\t]/g, \" \")\n    .replace(/(\\s\\s+)/g, \" \")\n    .trim();\n}\n\n// http date\n\nconst rfc1123 =\n    /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n  rfc850 =\n    /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n  ascii =\n    /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n  const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match,\n    result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n  return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n  const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match,\n    result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n  return [result, FixedOffsetZone.utcInstance];\n}\n\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n\nconst extractISOYmdTimeAndOffset = combineExtractors(\n  extractISOYmd,\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\nconst extractISOWeekTimeAndOffset = combineExtractors(\n  extractISOWeekData,\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\nconst extractISOOrdinalDateAndTime = combineExtractors(\n  extractISOOrdinalData,\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\nconst extractISOTimeAndOffset = combineExtractors(\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\n\n/*\n * @private\n */\n\nexport function parseISODate(s) {\n  return parse(\n    s,\n    [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n    [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset],\n    [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime],\n    [isoTimeCombinedRegex, extractISOTimeAndOffset]\n  );\n}\n\nexport function parseRFC2822Date(s) {\n  return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nexport function parseHTTPDate(s) {\n  return parse(\n    s,\n    [rfc1123, extractRFC1123Or850],\n    [rfc850, extractRFC1123Or850],\n    [ascii, extractASCII]\n  );\n}\n\nexport function parseISODuration(s) {\n  return parse(s, [isoDuration, extractISODuration]);\n}\n\nconst extractISOTimeOnly = combineExtractors(extractISOTime);\n\nexport function parseISOTimeOnly(s) {\n  return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\n\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(\n  extractISOTime,\n  extractISOOffset,\n  extractIANAZone\n);\n\nexport function parseSQL(s) {\n  return parse(\n    s,\n    [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n    [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]\n  );\n}\n","import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from \"./errors.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Locale from \"./impl/locale.js\";\nimport { parseISODuration, parseISOTimeOnly } from \"./impl/regexParser.js\";\nimport {\n  asNumber,\n  hasOwnProperty,\n  isNumber,\n  isUndefined,\n  normalizeObject,\n  roundTo,\n} from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\nimport DateTime from \"./datetime.js\";\n\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nexport const lowOrderMatrix = {\n    weeks: {\n      days: 7,\n      hours: 7 * 24,\n      minutes: 7 * 24 * 60,\n      seconds: 7 * 24 * 60 * 60,\n      milliseconds: 7 * 24 * 60 * 60 * 1000,\n    },\n    days: {\n      hours: 24,\n      minutes: 24 * 60,\n      seconds: 24 * 60 * 60,\n      milliseconds: 24 * 60 * 60 * 1000,\n    },\n    hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n    minutes: { seconds: 60, milliseconds: 60 * 1000 },\n    seconds: { milliseconds: 1000 },\n  },\n  casualMatrix = {\n    years: {\n      quarters: 4,\n      months: 12,\n      weeks: 52,\n      days: 365,\n      hours: 365 * 24,\n      minutes: 365 * 24 * 60,\n      seconds: 365 * 24 * 60 * 60,\n      milliseconds: 365 * 24 * 60 * 60 * 1000,\n    },\n    quarters: {\n      months: 3,\n      weeks: 13,\n      days: 91,\n      hours: 91 * 24,\n      minutes: 91 * 24 * 60,\n      seconds: 91 * 24 * 60 * 60,\n      milliseconds: 91 * 24 * 60 * 60 * 1000,\n    },\n    months: {\n      weeks: 4,\n      days: 30,\n      hours: 30 * 24,\n      minutes: 30 * 24 * 60,\n      seconds: 30 * 24 * 60 * 60,\n      milliseconds: 30 * 24 * 60 * 60 * 1000,\n    },\n\n    ...lowOrderMatrix,\n  },\n  daysInYearAccurate = 146097.0 / 400,\n  daysInMonthAccurate = 146097.0 / 4800,\n  accurateMatrix = {\n    years: {\n      quarters: 4,\n      months: 12,\n      weeks: daysInYearAccurate / 7,\n      days: daysInYearAccurate,\n      hours: daysInYearAccurate * 24,\n      minutes: daysInYearAccurate * 24 * 60,\n      seconds: daysInYearAccurate * 24 * 60 * 60,\n      milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000,\n    },\n    quarters: {\n      months: 3,\n      weeks: daysInYearAccurate / 28,\n      days: daysInYearAccurate / 4,\n      hours: (daysInYearAccurate * 24) / 4,\n      minutes: (daysInYearAccurate * 24 * 60) / 4,\n      seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,\n      milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4,\n    },\n    months: {\n      weeks: daysInMonthAccurate / 7,\n      days: daysInMonthAccurate,\n      hours: daysInMonthAccurate * 24,\n      minutes: daysInMonthAccurate * 24 * 60,\n      seconds: daysInMonthAccurate * 24 * 60 * 60,\n      milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000,\n    },\n    ...lowOrderMatrix,\n  };\n\n// units ordered by size\nconst orderedUnits = [\n  \"years\",\n  \"quarters\",\n  \"months\",\n  \"weeks\",\n  \"days\",\n  \"hours\",\n  \"minutes\",\n  \"seconds\",\n  \"milliseconds\",\n];\n\nconst reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts, clear = false) {\n  // deep merge for vals\n  const conf = {\n    values: clear ? alts.values : { ...dur.values, ...(alts.values || {}) },\n    loc: dur.loc.clone(alts.loc),\n    conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy,\n    matrix: alts.matrix || dur.matrix,\n  };\n  return new Duration(conf);\n}\n\nfunction durationToMillis(matrix, vals) {\n  let sum = vals.milliseconds ?? 0;\n  for (const unit of reverseUnits.slice(1)) {\n    if (vals[unit]) {\n      sum += vals[unit] * matrix[unit][\"milliseconds\"];\n    }\n  }\n  return sum;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n  // the logic below assumes the overall value of the duration is positive\n  // if this is not the case, factor is used to make it so\n  const factor = durationToMillis(matrix, vals) < 0 ? -1 : 1;\n\n  orderedUnits.reduceRight((previous, current) => {\n    if (!isUndefined(vals[current])) {\n      if (previous) {\n        const previousVal = vals[previous] * factor;\n        const conv = matrix[current][previous];\n\n        // if (previousVal < 0):\n        // lower order unit is negative (e.g. { years: 2, days: -2 })\n        // normalize this by reducing the higher order unit by the appropriate amount\n        // and increasing the lower order unit\n        // this can never make the higher order unit negative, because this function only operates\n        // on positive durations, so the amount of time represented by the lower order unit cannot\n        // be larger than the higher order unit\n        // else:\n        // lower order unit is positive (e.g. { years: 2, days: 450 } or { years: -2, days: 450 })\n        // in this case we attempt to convert as much as possible from the lower order unit into\n        // the higher order one\n        //\n        // Math.floor takes care of both of these cases, rounding away from 0\n        // if previousVal < 0 it makes the absolute value larger\n        // if previousVal >= it makes the absolute value smaller\n        const rollUp = Math.floor(previousVal / conv);\n        vals[current] += rollUp * factor;\n        vals[previous] -= rollUp * conv * factor;\n      }\n      return current;\n    } else {\n      return previous;\n    }\n  }, null);\n\n  // try to convert any decimals into smaller units if possible\n  // for example for { years: 2.5, days: 0, seconds: 0 } we want to get { years: 2, days: 182, hours: 12 }\n  orderedUnits.reduce((previous, current) => {\n    if (!isUndefined(vals[current])) {\n      if (previous) {\n        const fraction = vals[previous] % 1;\n        vals[previous] -= fraction;\n        vals[current] += fraction * matrix[previous][current];\n      }\n      return current;\n    } else {\n      return previous;\n    }\n  }, null);\n}\n\n// Remove all properties with a value of 0 from an object\nfunction removeZeroes(vals) {\n  const newVals = {};\n  for (const [key, value] of Object.entries(vals)) {\n    if (value !== 0) {\n      newVals[key] = value;\n    }\n  }\n  return newVals;\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors.\n * * **Configuration** See  {@link Duration#locale} and {@link Duration#numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\nexport default class Duration {\n  /**\n   * @private\n   */\n  constructor(config) {\n    const accurate = config.conversionAccuracy === \"longterm\" || false;\n    let matrix = accurate ? accurateMatrix : casualMatrix;\n\n    if (config.matrix) {\n      matrix = config.matrix;\n    }\n\n    /**\n     * @access private\n     */\n    this.values = config.values;\n    /**\n     * @access private\n     */\n    this.loc = config.loc || Locale.create();\n    /**\n     * @access private\n     */\n    this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n    /**\n     * @access private\n     */\n    this.invalid = config.invalid || null;\n    /**\n     * @access private\n     */\n    this.matrix = matrix;\n    /**\n     * @access private\n     */\n    this.isLuxonDuration = true;\n  }\n\n  /**\n   * Create Duration from a number of milliseconds.\n   * @param {number} count of milliseconds\n   * @param {Object} opts - options for parsing\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @return {Duration}\n   */\n  static fromMillis(count, opts) {\n    return Duration.fromObject({ milliseconds: count }, opts);\n  }\n\n  /**\n   * Create a Duration from a JavaScript object with keys like 'years' and 'hours'.\n   * If this object is empty then a zero milliseconds duration is returned.\n   * @param {Object} obj - the object to create the DateTime from\n   * @param {number} obj.years\n   * @param {number} obj.quarters\n   * @param {number} obj.months\n   * @param {number} obj.weeks\n   * @param {number} obj.days\n   * @param {number} obj.hours\n   * @param {number} obj.minutes\n   * @param {number} obj.seconds\n   * @param {number} obj.milliseconds\n   * @param {Object} [opts=[]] - options for creating this Duration\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n   * @param {string} [opts.matrix=Object] - the custom conversion system to use\n   * @return {Duration}\n   */\n  static fromObject(obj, opts = {}) {\n    if (obj == null || typeof obj !== \"object\") {\n      throw new InvalidArgumentError(\n        `Duration.fromObject: argument expected to be an object, got ${\n          obj === null ? \"null\" : typeof obj\n        }`\n      );\n    }\n\n    return new Duration({\n      values: normalizeObject(obj, Duration.normalizeUnit),\n      loc: Locale.fromObject(opts),\n      conversionAccuracy: opts.conversionAccuracy,\n      matrix: opts.matrix,\n    });\n  }\n\n  /**\n   * Create a Duration from DurationLike.\n   *\n   * @param {Object | number | Duration} durationLike\n   * One of:\n   * - object with keys like 'years' and 'hours'.\n   * - number representing milliseconds\n   * - Duration instance\n   * @return {Duration}\n   */\n  static fromDurationLike(durationLike) {\n    if (isNumber(durationLike)) {\n      return Duration.fromMillis(durationLike);\n    } else if (Duration.isDuration(durationLike)) {\n      return durationLike;\n    } else if (typeof durationLike === \"object\") {\n      return Duration.fromObject(durationLike);\n    } else {\n      throw new InvalidArgumentError(\n        `Unknown duration argument ${durationLike} of type ${typeof durationLike}`\n      );\n    }\n  }\n\n  /**\n   * Create a Duration from an ISO 8601 duration string.\n   * @param {string} text - text to parse\n   * @param {Object} opts - options for parsing\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n   * @param {string} [opts.matrix=Object] - the preset conversion system to use\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n   * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n   * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n   * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n   * @return {Duration}\n   */\n  static fromISO(text, opts) {\n    const [parsed] = parseISODuration(text);\n    if (parsed) {\n      return Duration.fromObject(parsed, opts);\n    } else {\n      return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n    }\n  }\n\n  /**\n   * Create a Duration from an ISO 8601 time string.\n   * @param {string} text - text to parse\n   * @param {Object} opts - options for parsing\n   * @param {string} [opts.locale='en-US'] - the locale to use\n   * @param {string} opts.numberingSystem - the numbering system to use\n   * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n   * @param {string} [opts.matrix=Object] - the conversion system to use\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n   * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }\n   * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n   * @return {Duration}\n   */\n  static fromISOTime(text, opts) {\n    const [parsed] = parseISOTimeOnly(text);\n    if (parsed) {\n      return Duration.fromObject(parsed, opts);\n    } else {\n      return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n    }\n  }\n\n  /**\n   * Create an invalid Duration.\n   * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n   * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n   * @return {Duration}\n   */\n  static invalid(reason, explanation = null) {\n    if (!reason) {\n      throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n    }\n\n    const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n    if (Settings.throwOnInvalid) {\n      throw new InvalidDurationError(invalid);\n    } else {\n      return new Duration({ invalid });\n    }\n  }\n\n  /**\n   * @private\n   */\n  static normalizeUnit(unit) {\n    const normalized = {\n      year: \"years\",\n      years: \"years\",\n      quarter: \"quarters\",\n      quarters: \"quarters\",\n      month: \"months\",\n      months: \"months\",\n      week: \"weeks\",\n      weeks: \"weeks\",\n      day: \"days\",\n      days: \"days\",\n      hour: \"hours\",\n      hours: \"hours\",\n      minute: \"minutes\",\n      minutes: \"minutes\",\n      second: \"seconds\",\n      seconds: \"seconds\",\n      millisecond: \"milliseconds\",\n      milliseconds: \"milliseconds\",\n    }[unit ? unit.toLowerCase() : unit];\n\n    if (!normalized) throw new InvalidUnitError(unit);\n\n    return normalized;\n  }\n\n  /**\n   * Check if an object is a Duration. Works across context boundaries\n   * @param {object} o\n   * @return {boolean}\n   */\n  static isDuration(o) {\n    return (o && o.isLuxonDuration) || false;\n  }\n\n  /**\n   * Get  the locale of a Duration, such 'en-GB'\n   * @type {string}\n   */\n  get locale() {\n    return this.isValid ? this.loc.locale : null;\n  }\n\n  /**\n   * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n   *\n   * @type {string}\n   */\n  get numberingSystem() {\n    return this.isValid ? this.loc.numberingSystem : null;\n  }\n\n  /**\n   * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n   * * `S` for milliseconds\n   * * `s` for seconds\n   * * `m` for minutes\n   * * `h` for hours\n   * * `d` for days\n   * * `w` for weeks\n   * * `M` for months\n   * * `y` for years\n   * Notes:\n   * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n   * * Tokens can be escaped by wrapping with single quotes.\n   * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting.\n   * @param {string} fmt - the format string\n   * @param {Object} opts - options\n   * @param {boolean} [opts.floor=true] - floor numerical values\n   * @param {'negative'|'all'|'negativeLargestOnly'} [opts.signMode=negative] - How to handle signs\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n   * @example Duration.fromObject({ days: 6, seconds: 2 }).toFormat(\"d s\", { signMode: \"all\" }) //=> \"+6 +2\"\n   * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat(\"d s\", { signMode: \"all\" }) //=> \"-6 -2\"\n   * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat(\"d s\", { signMode: \"negativeLargestOnly\" }) //=> \"-6 2\"\n   * @return {string}\n   */\n  toFormat(fmt, opts = {}) {\n    // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n    const fmtOpts = {\n      ...opts,\n      floor: opts.round !== false && opts.floor !== false,\n    };\n    return this.isValid\n      ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)\n      : INVALID;\n  }\n\n  /**\n   * Returns a string representation of a Duration with all units included.\n   * To modify its behavior, use `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options\n   * @param {Object} opts - Formatting options. Accepts the same keys as the options parameter of the native `Intl.NumberFormat` constructor, as well as `listStyle`.\n   * @param {string} [opts.listStyle='narrow'] - How to format the merged list. Corresponds to the `style` property of the options parameter of the native `Intl.ListFormat` constructor.\n   * @param {boolean} [opts.showZeros=true] - Show all units previously used by the duration even if they are zero\n   * @example\n   * ```js\n   * var dur = Duration.fromObject({ months: 1, weeks: 0, hours: 5, minutes: 6 })\n   * dur.toHuman() //=> '1 month, 0 weeks, 5 hours, 6 minutes'\n   * dur.toHuman({ listStyle: \"long\" }) //=> '1 month, 0 weeks, 5 hours, and 6 minutes'\n   * dur.toHuman({ unitDisplay: \"short\" }) //=> '1 mth, 0 wks, 5 hr, 6 min'\n   * dur.toHuman({ showZeros: false }) //=> '1 month, 5 hours, 6 minutes'\n   * ```\n   */\n  toHuman(opts = {}) {\n    if (!this.isValid) return INVALID;\n\n    const showZeros = opts.showZeros !== false;\n\n    const l = orderedUnits\n      .map((unit) => {\n        const val = this.values[unit];\n        if (isUndefined(val) || (val === 0 && !showZeros)) {\n          return null;\n        }\n        return this.loc\n          .numberFormatter({ style: \"unit\", unitDisplay: \"long\", ...opts, unit: unit.slice(0, -1) })\n          .format(val);\n      })\n      .filter((n) => n);\n\n    return this.loc\n      .listFormatter({ type: \"conjunction\", style: opts.listStyle || \"narrow\", ...opts })\n      .format(l);\n  }\n\n  /**\n   * Returns a JavaScript object with this Duration's values.\n   * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n   * @return {Object}\n   */\n  toObject() {\n    if (!this.isValid) return {};\n    return { ...this.values };\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this Duration.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n   * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n   * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n   * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n   * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n   * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n   * @return {string}\n   */\n  toISO() {\n    // we could use the formatter, but this is an easier way to get the minimum string\n    if (!this.isValid) return null;\n\n    let s = \"P\";\n    if (this.years !== 0) s += this.years + \"Y\";\n    if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n    if (this.weeks !== 0) s += this.weeks + \"W\";\n    if (this.days !== 0) s += this.days + \"D\";\n    if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)\n      s += \"T\";\n    if (this.hours !== 0) s += this.hours + \"H\";\n    if (this.minutes !== 0) s += this.minutes + \"M\";\n    if (this.seconds !== 0 || this.milliseconds !== 0)\n      // this will handle \"floating point madness\" by removing extra decimal places\n      // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n      s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n    if (s === \"P\") s += \"T0S\";\n    return s;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.\n   * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n   * @param {Object} opts - options\n   * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n   * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n   * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'\n   * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'\n   * @return {string}\n   */\n  toISOTime(opts = {}) {\n    if (!this.isValid) return null;\n\n    const millis = this.toMillis();\n    if (millis < 0 || millis >= 86400000) return null;\n\n    opts = {\n      suppressMilliseconds: false,\n      suppressSeconds: false,\n      includePrefix: false,\n      format: \"extended\",\n      ...opts,\n      includeOffset: false,\n    };\n\n    const dateTime = DateTime.fromMillis(millis, { zone: \"UTC\" });\n    return dateTime.toISOTime(opts);\n  }\n\n  /**\n   * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n   * @return {string}\n   */\n  toJSON() {\n    return this.toISO();\n  }\n\n  /**\n   * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n   * @return {string}\n   */\n  toString() {\n    return this.toISO();\n  }\n\n  /**\n   * Returns a string representation of this Duration appropriate for the REPL.\n   * @return {string}\n   */\n  [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n    if (this.isValid) {\n      return `Duration { values: ${JSON.stringify(this.values)} }`;\n    } else {\n      return `Duration { Invalid, reason: ${this.invalidReason} }`;\n    }\n  }\n\n  /**\n   * Returns an milliseconds value of this Duration.\n   * @return {number}\n   */\n  toMillis() {\n    if (!this.isValid) return NaN;\n\n    return durationToMillis(this.matrix, this.values);\n  }\n\n  /**\n   * Returns an milliseconds value of this Duration. Alias of {@link toMillis}\n   * @return {number}\n   */\n  valueOf() {\n    return this.toMillis();\n  }\n\n  /**\n   * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n   * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   * @return {Duration}\n   */\n  plus(duration) {\n    if (!this.isValid) return this;\n\n    const dur = Duration.fromDurationLike(duration),\n      result = {};\n\n    for (const k of orderedUnits) {\n      if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n        result[k] = dur.get(k) + this.get(k);\n      }\n    }\n\n    return clone(this, { values: result }, true);\n  }\n\n  /**\n   * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n   * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   * @return {Duration}\n   */\n  minus(duration) {\n    if (!this.isValid) return this;\n\n    const dur = Duration.fromDurationLike(duration);\n    return this.plus(dur.negate());\n  }\n\n  /**\n   * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n   * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n   * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 }\n   * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === \"hours\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n   * @return {Duration}\n   */\n  mapUnits(fn) {\n    if (!this.isValid) return this;\n    const result = {};\n    for (const k of Object.keys(this.values)) {\n      result[k] = asNumber(fn(this.values[k], k));\n    }\n    return clone(this, { values: result }, true);\n  }\n\n  /**\n   * Get the value of unit.\n   * @param {string} unit - a unit such as 'minute' or 'day'\n   * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2\n   * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0\n   * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3\n   * @return {number}\n   */\n  get(unit) {\n    return this[Duration.normalizeUnit(unit)];\n  }\n\n  /**\n   * \"Set\" the values of specified units. Return a newly-constructed Duration.\n   * @param {Object} values - a mapping of units to numbers\n   * @example dur.set({ years: 2017 })\n   * @example dur.set({ hours: 8, minutes: 30 })\n   * @return {Duration}\n   */\n  set(values) {\n    if (!this.isValid) return this;\n\n    const mixed = { ...this.values, ...normalizeObject(values, Duration.normalizeUnit) };\n    return clone(this, { values: mixed });\n  }\n\n  /**\n   * \"Set\" the locale and/or numberingSystem.  Returns a newly-constructed Duration.\n   * @example dur.reconfigure({ locale: 'en-GB' })\n   * @return {Duration}\n   */\n  reconfigure({ locale, numberingSystem, conversionAccuracy, matrix } = {}) {\n    const loc = this.loc.clone({ locale, numberingSystem });\n    const opts = { loc, matrix, conversionAccuracy };\n    return clone(this, opts);\n  }\n\n  /**\n   * Return the length of the duration in the specified unit.\n   * @param {string} unit - a unit such as 'minutes' or 'days'\n   * @example Duration.fromObject({years: 1}).as('days') //=> 365\n   * @example Duration.fromObject({years: 1}).as('months') //=> 12\n   * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n   * @return {number}\n   */\n  as(unit) {\n    return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n  }\n\n  /**\n   * Reduce this Duration to its canonical representation in its current units.\n   * Assuming the overall value of the Duration is positive, this means:\n   * - excessive values for lower-order units are converted to higher-order units (if possible, see first and second example)\n   * - negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise\n   *   the overall value would be negative, see third example)\n   * - fractional values for higher-order units are converted to lower-order units (if possible, see fourth example)\n   *\n   * If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`.\n   * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n   * @example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 }\n   * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n   * @example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 }\n   * @return {Duration}\n   */\n  normalize() {\n    if (!this.isValid) return this;\n    const vals = this.toObject();\n    normalizeValues(this.matrix, vals);\n    return clone(this, { values: vals }, true);\n  }\n\n  /**\n   * Rescale units to its largest representation\n   * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 }\n   * @return {Duration}\n   */\n  rescale() {\n    if (!this.isValid) return this;\n    const vals = removeZeroes(this.normalize().shiftToAll().toObject());\n    return clone(this, { values: vals }, true);\n  }\n\n  /**\n   * Convert this Duration into its representation in a different set of units.\n   * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n   * @return {Duration}\n   */\n  shiftTo(...units) {\n    if (!this.isValid) return this;\n\n    if (units.length === 0) {\n      return this;\n    }\n\n    units = units.map((u) => Duration.normalizeUnit(u));\n\n    const built = {},\n      accumulated = {},\n      vals = this.toObject();\n    let lastUnit;\n\n    for (const k of orderedUnits) {\n      if (units.indexOf(k) >= 0) {\n        lastUnit = k;\n\n        let own = 0;\n\n        // anything we haven't boiled down yet should get boiled to this unit\n        for (const ak in accumulated) {\n          own += this.matrix[ak][k] * accumulated[ak];\n          accumulated[ak] = 0;\n        }\n\n        // plus anything that's already in this unit\n        if (isNumber(vals[k])) {\n          own += vals[k];\n        }\n\n        // only keep the integer part for now in the hopes of putting any decimal part\n        // into a smaller unit later\n        const i = Math.trunc(own);\n        built[k] = i;\n        accumulated[k] = (own * 1000 - i * 1000) / 1000;\n\n        // otherwise, keep it in the wings to boil it later\n      } else if (isNumber(vals[k])) {\n        accumulated[k] = vals[k];\n      }\n    }\n\n    // anything leftover becomes the decimal for the last unit\n    // lastUnit must be defined since units is not empty\n    for (const key in accumulated) {\n      if (accumulated[key] !== 0) {\n        built[lastUnit] +=\n          key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n      }\n    }\n\n    normalizeValues(this.matrix, built);\n    return clone(this, { values: built }, true);\n  }\n\n  /**\n   * Shift this Duration to all available units.\n   * Same as shiftTo(\"years\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\")\n   * @return {Duration}\n   */\n  shiftToAll() {\n    if (!this.isValid) return this;\n    return this.shiftTo(\n      \"years\",\n      \"months\",\n      \"weeks\",\n      \"days\",\n      \"hours\",\n      \"minutes\",\n      \"seconds\",\n      \"milliseconds\"\n    );\n  }\n\n  /**\n   * Return the negative of this Duration.\n   * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n   * @return {Duration}\n   */\n  negate() {\n    if (!this.isValid) return this;\n    const negated = {};\n    for (const k of Object.keys(this.values)) {\n      negated[k] = this.values[k] === 0 ? 0 : -this.values[k];\n    }\n    return clone(this, { values: negated }, true);\n  }\n\n  /**\n   * Removes all units with values equal to 0 from this Duration.\n   * @example Duration.fromObject({ years: 2, days: 0, hours: 0, minutes: 0 }).removeZeros().toObject() //=> { years: 2 }\n   * @return {Duration}\n   */\n  removeZeros() {\n    if (!this.isValid) return this;\n    const vals = removeZeroes(this.values);\n    return clone(this, { values: vals }, true);\n  }\n\n  /**\n   * Get the years.\n   * @type {number}\n   */\n  get years() {\n    return this.isValid ? this.values.years || 0 : NaN;\n  }\n\n  /**\n   * Get the quarters.\n   * @type {number}\n   */\n  get quarters() {\n    return this.isValid ? this.values.quarters || 0 : NaN;\n  }\n\n  /**\n   * Get the months.\n   * @type {number}\n   */\n  get months() {\n    return this.isValid ? this.values.months || 0 : NaN;\n  }\n\n  /**\n   * Get the weeks\n   * @type {number}\n   */\n  get weeks() {\n    return this.isValid ? this.values.weeks || 0 : NaN;\n  }\n\n  /**\n   * Get the days.\n   * @type {number}\n   */\n  get days() {\n    return this.isValid ? this.values.days || 0 : NaN;\n  }\n\n  /**\n   * Get the hours.\n   * @type {number}\n   */\n  get hours() {\n    return this.isValid ? this.values.hours || 0 : NaN;\n  }\n\n  /**\n   * Get the minutes.\n   * @type {number}\n   */\n  get minutes() {\n    return this.isValid ? this.values.minutes || 0 : NaN;\n  }\n\n  /**\n   * Get the seconds.\n   * @return {number}\n   */\n  get seconds() {\n    return this.isValid ? this.values.seconds || 0 : NaN;\n  }\n\n  /**\n   * Get the milliseconds.\n   * @return {number}\n   */\n  get milliseconds() {\n    return this.isValid ? this.values.milliseconds || 0 : NaN;\n  }\n\n  /**\n   * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n   * on invalid DateTimes or Intervals.\n   * @return {boolean}\n   */\n  get isValid() {\n    return this.invalid === null;\n  }\n\n  /**\n   * Returns an error code if this Duration became invalid, or null if the Duration is valid\n   * @return {string}\n   */\n  get invalidReason() {\n    return this.invalid ? this.invalid.reason : null;\n  }\n\n  /**\n   * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n   * @type {string}\n   */\n  get invalidExplanation() {\n    return this.invalid ? this.invalid.explanation : null;\n  }\n\n  /**\n   * Equality check\n   * Two Durations are equal iff they have the same units and the same values for each unit.\n   * @param {Duration} other\n   * @return {boolean}\n   */\n  equals(other) {\n    if (!this.isValid || !other.isValid) {\n      return false;\n    }\n\n    if (!this.loc.equals(other.loc)) {\n      return false;\n    }\n\n    function eq(v1, v2) {\n      // Consider 0 and undefined as equal\n      if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;\n      return v1 === v2;\n    }\n\n    for (const u of orderedUnits) {\n      if (!eq(this.values[u], other.values[u])) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n","import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport * as Formats from \"./impl/formats.js\";\n\nconst INVALID = \"Invalid Interval\";\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n  if (!start || !start.isValid) {\n    return Interval.invalid(\"missing or invalid start\");\n  } else if (!end || !end.isValid) {\n    return Interval.invalid(\"missing or invalid end\");\n  } else if (end < start) {\n    return Interval.invalid(\n      \"end before start\",\n      `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`\n    );\n  } else {\n    return null;\n  }\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}.\n * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}.\n * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs}\n * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}.\n */\nexport default class Interval {\n  /**\n   * @private\n   */\n  constructor(config) {\n    /**\n     * @access private\n     */\n    this.s = config.start;\n    /**\n     * @access private\n     */\n    this.e = config.end;\n    /**\n     * @access private\n     */\n    this.invalid = config.invalid || null;\n    /**\n     * @access private\n     */\n    this.isLuxonInterval = true;\n  }\n\n  /**\n   * Create an invalid Interval.\n   * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n   * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n   * @return {Interval}\n   */\n  static invalid(reason, explanation = null) {\n    if (!reason) {\n      throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n    }\n\n    const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n    if (Settings.throwOnInvalid) {\n      throw new InvalidIntervalError(invalid);\n    } else {\n      return new Interval({ invalid });\n    }\n  }\n\n  /**\n   * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n   * @param {DateTime|Date|Object} start\n   * @param {DateTime|Date|Object} end\n   * @return {Interval}\n   */\n  static fromDateTimes(start, end) {\n    const builtStart = friendlyDateTime(start),\n      builtEnd = friendlyDateTime(end);\n\n    const validateError = validateStartEnd(builtStart, builtEnd);\n\n    if (validateError == null) {\n      return new Interval({\n        start: builtStart,\n        end: builtEnd,\n      });\n    } else {\n      return validateError;\n    }\n  }\n\n  /**\n   * Create an Interval from a start DateTime and a Duration to extend to.\n   * @param {DateTime|Date|Object} start\n   * @param {Duration|Object|number} duration - the length of the Interval.\n   * @return {Interval}\n   */\n  static after(start, duration) {\n    const dur = Duration.fromDurationLike(duration),\n      dt = friendlyDateTime(start);\n    return Interval.fromDateTimes(dt, dt.plus(dur));\n  }\n\n  /**\n   * Create an Interval from an end DateTime and a Duration to extend backwards to.\n   * @param {DateTime|Date|Object} end\n   * @param {Duration|Object|number} duration - the length of the Interval.\n   * @return {Interval}\n   */\n  static before(end, duration) {\n    const dur = Duration.fromDurationLike(duration),\n      dt = friendlyDateTime(end);\n    return Interval.fromDateTimes(dt.minus(dur), dt);\n  }\n\n  /**\n   * Create an Interval from an ISO 8601 string.\n   * Accepts `<start>/<end>`, `<start>/<duration>`, and `<duration>/<end>` formats.\n   * @param {string} text - the ISO string to parse\n   * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO}\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @return {Interval}\n   */\n  static fromISO(text, opts) {\n    const [s, e] = (text || \"\").split(\"/\", 2);\n    if (s && e) {\n      let start, startIsValid;\n      try {\n        start = DateTime.fromISO(s, opts);\n        startIsValid = start.isValid;\n      } catch (e) {\n        startIsValid = false;\n      }\n\n      let end, endIsValid;\n      try {\n        end = DateTime.fromISO(e, opts);\n        endIsValid = end.isValid;\n      } catch (e) {\n        endIsValid = false;\n      }\n\n      if (startIsValid && endIsValid) {\n        return Interval.fromDateTimes(start, end);\n      }\n\n      if (startIsValid) {\n        const dur = Duration.fromISO(e, opts);\n        if (dur.isValid) {\n          return Interval.after(start, dur);\n        }\n      } else if (endIsValid) {\n        const dur = Duration.fromISO(s, opts);\n        if (dur.isValid) {\n          return Interval.before(end, dur);\n        }\n      }\n    }\n    return Interval.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n  }\n\n  /**\n   * Check if an object is an Interval. Works across context boundaries\n   * @param {object} o\n   * @return {boolean}\n   */\n  static isInterval(o) {\n    return (o && o.isLuxonInterval) || false;\n  }\n\n  /**\n   * Returns the start of the Interval\n   * @type {DateTime}\n   */\n  get start() {\n    return this.isValid ? this.s : null;\n  }\n\n  /**\n   * Returns the end of the Interval. This is the first instant which is not part of the interval\n   * (Interval is half-open).\n   * @type {DateTime}\n   */\n  get end() {\n    return this.isValid ? this.e : null;\n  }\n\n  /**\n   * Returns the last DateTime included in the interval (since end is not part of the interval)\n   * @type {DateTime}\n   */\n  get lastDateTime() {\n    return this.isValid ? (this.e ? this.e.minus(1) : null) : null;\n  }\n\n  /**\n   * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n   * @type {boolean}\n   */\n  get isValid() {\n    return this.invalidReason === null;\n  }\n\n  /**\n   * Returns an error code if this Interval is invalid, or null if the Interval is valid\n   * @type {string}\n   */\n  get invalidReason() {\n    return this.invalid ? this.invalid.reason : null;\n  }\n\n  /**\n   * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n   * @type {string}\n   */\n  get invalidExplanation() {\n    return this.invalid ? this.invalid.explanation : null;\n  }\n\n  /**\n   * Returns the length of the Interval in the specified unit.\n   * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n   * @return {number}\n   */\n  length(unit = \"milliseconds\") {\n    return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;\n  }\n\n  /**\n   * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n   * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n   * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n   * @param {string} [unit='milliseconds'] - the unit of time to count.\n   * @param {Object} opts - options\n   * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; this operation will always use the locale of the start DateTime\n   * @return {number}\n   */\n  count(unit = \"milliseconds\", opts) {\n    if (!this.isValid) return NaN;\n    const start = this.start.startOf(unit, opts);\n    let end;\n    if (opts?.useLocaleWeeks) {\n      end = this.end.reconfigure({ locale: start.locale });\n    } else {\n      end = this.end;\n    }\n    end = end.startOf(unit, opts);\n    return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf());\n  }\n\n  /**\n   * Returns whether this Interval's start and end are both in the same unit of time\n   * @param {string} unit - the unit of time to check sameness on\n   * @return {boolean}\n   */\n  hasSame(unit) {\n    return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;\n  }\n\n  /**\n   * Return whether this Interval has the same start and end DateTimes.\n   * @return {boolean}\n   */\n  isEmpty() {\n    return this.s.valueOf() === this.e.valueOf();\n  }\n\n  /**\n   * Return whether this Interval's start is after the specified DateTime.\n   * @param {DateTime} dateTime\n   * @return {boolean}\n   */\n  isAfter(dateTime) {\n    if (!this.isValid) return false;\n    return this.s > dateTime;\n  }\n\n  /**\n   * Return whether this Interval's end is before the specified DateTime.\n   * @param {DateTime} dateTime\n   * @return {boolean}\n   */\n  isBefore(dateTime) {\n    if (!this.isValid) return false;\n    return this.e <= dateTime;\n  }\n\n  /**\n   * Return whether this Interval contains the specified DateTime.\n   * @param {DateTime} dateTime\n   * @return {boolean}\n   */\n  contains(dateTime) {\n    if (!this.isValid) return false;\n    return this.s <= dateTime && this.e > dateTime;\n  }\n\n  /**\n   * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n   * @param {Object} values - the values to set\n   * @param {DateTime} values.start - the starting DateTime\n   * @param {DateTime} values.end - the ending DateTime\n   * @return {Interval}\n   */\n  set({ start, end } = {}) {\n    if (!this.isValid) return this;\n    return Interval.fromDateTimes(start || this.s, end || this.e);\n  }\n\n  /**\n   * Split this Interval at each of the specified DateTimes\n   * @param {...DateTime} dateTimes - the unit of time to count.\n   * @return {Array}\n   */\n  splitAt(...dateTimes) {\n    if (!this.isValid) return [];\n    const sorted = dateTimes\n        .map(friendlyDateTime)\n        .filter((d) => this.contains(d))\n        .sort((a, b) => a.toMillis() - b.toMillis()),\n      results = [];\n    let { s } = this,\n      i = 0;\n\n    while (s < this.e) {\n      const added = sorted[i] || this.e,\n        next = +added > +this.e ? this.e : added;\n      results.push(Interval.fromDateTimes(s, next));\n      s = next;\n      i += 1;\n    }\n\n    return results;\n  }\n\n  /**\n   * Split this Interval into smaller Intervals, each of the specified length.\n   * Left over time is grouped into a smaller interval\n   * @param {Duration|Object|number} duration - The length of each resulting interval.\n   * @return {Array}\n   */\n  splitBy(duration) {\n    const dur = Duration.fromDurationLike(duration);\n\n    if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n      return [];\n    }\n\n    let { s } = this,\n      idx = 1,\n      next;\n\n    const results = [];\n    while (s < this.e) {\n      const added = this.start.plus(dur.mapUnits((x) => x * idx));\n      next = +added > +this.e ? this.e : added;\n      results.push(Interval.fromDateTimes(s, next));\n      s = next;\n      idx += 1;\n    }\n\n    return results;\n  }\n\n  /**\n   * Split this Interval into the specified number of smaller intervals.\n   * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n   * @return {Array}\n   */\n  divideEqually(numberOfParts) {\n    if (!this.isValid) return [];\n    return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n  }\n\n  /**\n   * Return whether this Interval overlaps with the specified Interval\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  overlaps(other) {\n    return this.e > other.s && this.s < other.e;\n  }\n\n  /**\n   * Return whether this Interval's end is adjacent to the specified Interval's start.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  abutsStart(other) {\n    if (!this.isValid) return false;\n    return +this.e === +other.s;\n  }\n\n  /**\n   * Return whether this Interval's start is adjacent to the specified Interval's end.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  abutsEnd(other) {\n    if (!this.isValid) return false;\n    return +other.e === +this.s;\n  }\n\n  /**\n   * Returns true if this Interval fully contains the specified Interval, specifically if the intersect (of this Interval and the other Interval) is equal to the other Interval; false otherwise.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  engulfs(other) {\n    if (!this.isValid) return false;\n    return this.s <= other.s && this.e >= other.e;\n  }\n\n  /**\n   * Return whether this Interval has the same start and end as the specified Interval.\n   * @param {Interval} other\n   * @return {boolean}\n   */\n  equals(other) {\n    if (!this.isValid || !other.isValid) {\n      return false;\n    }\n\n    return this.s.equals(other.s) && this.e.equals(other.e);\n  }\n\n  /**\n   * Return an Interval representing the intersection of this Interval and the specified Interval.\n   * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n   * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n   * @param {Interval} other\n   * @return {Interval}\n   */\n  intersection(other) {\n    if (!this.isValid) return this;\n    const s = this.s > other.s ? this.s : other.s,\n      e = this.e < other.e ? this.e : other.e;\n\n    if (s >= e) {\n      return null;\n    } else {\n      return Interval.fromDateTimes(s, e);\n    }\n  }\n\n  /**\n   * Return an Interval representing the union of this Interval and the specified Interval.\n   * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n   * @param {Interval} other\n   * @return {Interval}\n   */\n  union(other) {\n    if (!this.isValid) return this;\n    const s = this.s < other.s ? this.s : other.s,\n      e = this.e > other.e ? this.e : other.e;\n    return Interval.fromDateTimes(s, e);\n  }\n\n  /**\n   * Merge an array of Intervals into an equivalent minimal set of Intervals.\n   * Combines overlapping and adjacent Intervals.\n   * The resulting array will contain the Intervals in ascending order, that is, starting with the earliest Interval\n   * and ending with the latest.\n   *\n   * @param {Array} intervals\n   * @return {Array}\n   */\n  static merge(intervals) {\n    const [found, final] = intervals\n      .sort((a, b) => a.s - b.s)\n      .reduce(\n        ([sofar, current], item) => {\n          if (!current) {\n            return [sofar, item];\n          } else if (current.overlaps(item) || current.abutsStart(item)) {\n            return [sofar, current.union(item)];\n          } else {\n            return [sofar.concat([current]), item];\n          }\n        },\n        [[], null]\n      );\n    if (final) {\n      found.push(final);\n    }\n    return found;\n  }\n\n  /**\n   * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n   * @param {Array} intervals\n   * @return {Array}\n   */\n  static xor(intervals) {\n    let start = null,\n      currentCount = 0;\n    const results = [],\n      ends = intervals.map((i) => [\n        { time: i.s, type: \"s\" },\n        { time: i.e, type: \"e\" },\n      ]),\n      flattened = Array.prototype.concat(...ends),\n      arr = flattened.sort((a, b) => a.time - b.time);\n\n    for (const i of arr) {\n      currentCount += i.type === \"s\" ? 1 : -1;\n\n      if (currentCount === 1) {\n        start = i.time;\n      } else {\n        if (start && +start !== +i.time) {\n          results.push(Interval.fromDateTimes(start, i.time));\n        }\n\n        start = null;\n      }\n    }\n\n    return Interval.merge(results);\n  }\n\n  /**\n   * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n   * @param {...Interval} intervals\n   * @return {Array}\n   */\n  difference(...intervals) {\n    return Interval.xor([this].concat(intervals))\n      .map((i) => this.intersection(i))\n      .filter((i) => i && !i.isEmpty());\n  }\n\n  /**\n   * Returns a string representation of this Interval appropriate for debugging.\n   * @return {string}\n   */\n  toString() {\n    if (!this.isValid) return INVALID;\n    return `[${this.s.toISO()} – ${this.e.toISO()})`;\n  }\n\n  /**\n   * Returns a string representation of this Interval appropriate for the REPL.\n   * @return {string}\n   */\n  [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n    if (this.isValid) {\n      return `Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`;\n    } else {\n      return `Interval { Invalid, reason: ${this.invalidReason} }`;\n    }\n  }\n\n  /**\n   * Returns a localized string representing this Interval. Accepts the same options as the\n   * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as\n   * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method\n   * is browser-specific, but in general it will return an appropriate representation of the\n   * Interval in the assigned locale. Defaults to the system's locale if no locale has been\n   * specified.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or\n   * Intl.DateTimeFormat constructor options.\n   * @param {Object} opts - Options to override the configuration of the start DateTime.\n   * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022\n   * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022\n   * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022\n   * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM\n   * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p\n   * @return {string}\n   */\n  toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n    return this.isValid\n      ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this)\n      : INVALID;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this Interval.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @param {Object} opts - The same options as {@link DateTime#toISO}\n   * @return {string}\n   */\n  toISO(opts) {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of date of this Interval.\n   * The time components are ignored.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @return {string}\n   */\n  toISODate() {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toISODate()}/${this.e.toISODate()}`;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of time of this Interval.\n   * The date components are ignored.\n   * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @param {Object} opts - The same options as {@link DateTime#toISO}\n   * @return {string}\n   */\n  toISOTime(opts) {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;\n  }\n\n  /**\n   * Returns a string representation of this Interval formatted according to the specified format\n   * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible\n   * formatting tool.\n   * @param {string} dateFormat - The format string. This string formats the start and end time.\n   * See {@link DateTime#toFormat} for details.\n   * @param {Object} opts - Options.\n   * @param {string} [opts.separator =  ' – '] - A separator to place between the start and end\n   * representations.\n   * @return {string}\n   */\n  toFormat(dateFormat, { separator = \" – \" } = {}) {\n    if (!this.isValid) return INVALID;\n    return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;\n  }\n\n  /**\n   * Return a Duration representing the time spanned by this interval.\n   * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n   * @param {Object} opts - options that affect the creation of the Duration\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n   * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n   * @return {Duration}\n   */\n  toDuration(unit, opts) {\n    if (!this.isValid) {\n      return Duration.invalid(this.invalidReason);\n    }\n    return this.e.diff(this.s, unit, opts);\n  }\n\n  /**\n   * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n   * @param {function} mapFn\n   * @return {Interval}\n   * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n   * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n   */\n  mapEndpoints(mapFn) {\n    return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n  }\n}\n","import DateTime from \"./datetime.js\";\nimport Settings from \"./settings.js\";\nimport Locale from \"./impl/locale.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nimport { hasLocaleWeekInfo, hasRelative } from \"./impl/util.js\";\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\nexport default class Info {\n  /**\n   * Return whether the specified zone contains a DST.\n   * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n   * @return {boolean}\n   */\n  static hasDST(zone = Settings.defaultZone) {\n    const proto = DateTime.now().setZone(zone).set({ month: 12 });\n\n    return !zone.isUniversal && proto.offset !== proto.set({ month: 6 }).offset;\n  }\n\n  /**\n   * Return whether the specified zone is a valid IANA specifier.\n   * @param {string} zone - Zone to check\n   * @return {boolean}\n   */\n  static isValidIANAZone(zone) {\n    return IANAZone.isValidZone(zone);\n  }\n\n  /**\n   * Converts the input into a {@link Zone} instance.\n   *\n   * * If `input` is already a Zone instance, it is returned unchanged.\n   * * If `input` is a string containing a valid time zone name, a Zone instance\n   *   with that name is returned.\n   * * If `input` is a string that doesn't refer to a known time zone, a Zone\n   *   instance with {@link Zone#isValid} == false is returned.\n   * * If `input is a number, a Zone instance with the specified fixed offset\n   *   in minutes is returned.\n   * * If `input` is `null` or `undefined`, the default zone is returned.\n   * @param {string|Zone|number} [input] - the value to be converted\n   * @return {Zone}\n   */\n  static normalizeZone(input) {\n    return normalizeZone(input, Settings.defaultZone);\n  }\n\n  /**\n   * Get the weekday on which the week starts according to the given locale.\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @returns {number} the start of the week, 1 for Monday through 7 for Sunday\n   */\n  static getStartOfWeek({ locale = null, locObj = null } = {}) {\n    return (locObj || Locale.create(locale)).getStartOfWeek();\n  }\n\n  /**\n   * Get the minimum number of days necessary in a week before it is considered part of the next year according\n   * to the given locale.\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @returns {number}\n   */\n  static getMinimumDaysInFirstWeek({ locale = null, locObj = null } = {}) {\n    return (locObj || Locale.create(locale)).getMinDaysInFirstWeek();\n  }\n\n  /**\n   * Get the weekdays, which are considered the weekend according to the given locale\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @returns {number[]} an array of weekdays, 1 for Monday through 7 for Sunday\n   */\n  static getWeekendWeekdays({ locale = null, locObj = null } = {}) {\n    // copy the array, because we cache it internally\n    return (locObj || Locale.create(locale)).getWeekendDays().slice();\n  }\n\n  /**\n   * Return an array of standalone month names.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @param {string} [opts.outputCalendar='gregory'] - the calendar\n   * @example Info.months()[0] //=> 'January'\n   * @example Info.months('short')[0] //=> 'Jan'\n   * @example Info.months('numeric')[0] //=> '1'\n   * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n   * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n   * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n   * @return {Array}\n   */\n  static months(\n    length = \"long\",\n    { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n  ) {\n    return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);\n  }\n\n  /**\n   * Return an array of format month names.\n   * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n   * changes the string.\n   * See {@link Info#months}\n   * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @param {string} [opts.outputCalendar='gregory'] - the calendar\n   * @return {Array}\n   */\n  static monthsFormat(\n    length = \"long\",\n    { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n  ) {\n    return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);\n  }\n\n  /**\n   * Return an array of standalone week names.\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @example Info.weekdays()[0] //=> 'Monday'\n   * @example Info.weekdays('short')[0] //=> 'Mon'\n   * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n   * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n   * @return {Array}\n   */\n  static weekdays(length = \"long\", { locale = null, numberingSystem = null, locObj = null } = {}) {\n    return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);\n  }\n\n  /**\n   * Return an array of format week names.\n   * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n   * changes the string.\n   * See {@link Info#weekdays}\n   * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n   * @param {Object} opts - options\n   * @param {string} [opts.locale=null] - the locale code\n   * @param {string} [opts.numberingSystem=null] - the numbering system\n   * @param {string} [opts.locObj=null] - an existing locale object to use\n   * @return {Array}\n   */\n  static weekdaysFormat(\n    length = \"long\",\n    { locale = null, numberingSystem = null, locObj = null } = {}\n  ) {\n    return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);\n  }\n\n  /**\n   * Return an array of meridiems.\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n   * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n   * @return {Array}\n   */\n  static meridiems({ locale = null } = {}) {\n    return Locale.create(locale).meridiems();\n  }\n\n  /**\n   * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n   * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n   * @param {Object} opts - options\n   * @param {string} [opts.locale] - the locale code\n   * @example Info.eras() //=> [ 'BC', 'AD' ]\n   * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n   * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n   * @return {Array}\n   */\n  static eras(length = \"short\", { locale = null } = {}) {\n    return Locale.create(locale, null, \"gregory\").eras(length);\n  }\n\n  /**\n   * Return the set of available features in this environment.\n   * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case.\n   * Keys:\n   * * `relative`: whether this environment supports relative time formatting\n   * * `localeWeek`: whether this environment supports different weekdays for the start of the week based on the locale\n   * @example Info.features() //=> { relative: false, localeWeek: true }\n   * @return {Object}\n   */\n  static features() {\n    return { relative: hasRelative(), localeWeek: hasLocaleWeekInfo() };\n  }\n}\n","import Duration from \"../duration.js\";\n\nfunction dayDiff(earlier, later) {\n  const utcDayStart = (dt) => dt.toUTC(0, { keepLocalTime: true }).startOf(\"day\").valueOf(),\n    ms = utcDayStart(later) - utcDayStart(earlier);\n  return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n  const differs = [\n    [\"years\", (a, b) => b.year - a.year],\n    [\"quarters\", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4],\n    [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12],\n    [\n      \"weeks\",\n      (a, b) => {\n        const days = dayDiff(a, b);\n        return (days - (days % 7)) / 7;\n      },\n    ],\n    [\"days\", dayDiff],\n  ];\n\n  const results = {};\n  const earlier = cursor;\n  let lowestOrder, highWater;\n\n  /* This loop tries to diff using larger units first.\n     If we overshoot, we backtrack and try the next smaller unit.\n     \"cursor\" starts out at the earlier timestamp and moves closer and closer to \"later\"\n     as we use smaller and smaller units.\n     highWater keeps track of where we would be if we added one more of the smallest unit,\n     this is used later to potentially convert any difference smaller than the smallest higher order unit\n     into a fraction of that smallest higher order unit\n  */\n  for (const [unit, differ] of differs) {\n    if (units.indexOf(unit) >= 0) {\n      lowestOrder = unit;\n\n      results[unit] = differ(cursor, later);\n      highWater = earlier.plus(results);\n\n      if (highWater > later) {\n        // we overshot the end point, backtrack cursor by 1\n        results[unit]--;\n        cursor = earlier.plus(results);\n\n        // if we are still overshooting now, we need to backtrack again\n        // this happens in certain situations when diffing times in different zones,\n        // because this calculation ignores time zones\n        if (cursor > later) {\n          // keep the \"overshot by 1\" around as highWater\n          highWater = cursor;\n          // backtrack cursor by 1\n          results[unit]--;\n          cursor = earlier.plus(results);\n        }\n      } else {\n        cursor = highWater;\n      }\n    }\n  }\n\n  return [cursor, results, highWater, lowestOrder];\n}\n\nexport default function (earlier, later, units, opts) {\n  let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n\n  const remainingMillis = later - cursor;\n\n  const lowerOrderUnits = units.filter(\n    (u) => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0\n  );\n\n  if (lowerOrderUnits.length === 0) {\n    if (highWater < later) {\n      highWater = cursor.plus({ [lowestOrder]: 1 });\n    }\n\n    if (highWater !== cursor) {\n      results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n    }\n  }\n\n  const duration = Duration.fromObject(results, opts);\n\n  if (lowerOrderUnits.length > 0) {\n    return Duration.fromMillis(remainingMillis, opts)\n      .shiftTo(...lowerOrderUnits)\n      .plus(duration);\n  } else {\n    return duration;\n  }\n}\n","import { parseMillis, isUndefined, untruncateYear, signedOffset, hasOwnProperty } from \"./util.js\";\nimport Formatter from \"./formatter.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport DateTime from \"../datetime.js\";\nimport { digitRegex, parseDigits } from \"./digits.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post = (i) => i) {\n  return { regex, deser: ([s]) => post(parseDigits(s)) };\n}\n\nconst NBSP = String.fromCharCode(160);\nconst spaceOrNBSP = `[ ${NBSP}]`;\nconst spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\n\nfunction fixListRegex(s) {\n  // make dots optional and also make them literal\n  // make space and non breakable space characters interchangeable\n  return s.replace(/\\./g, \"\\\\.?\").replace(spaceOrNBSPRegExp, spaceOrNBSP);\n}\n\nfunction stripInsensitivities(s) {\n  return s\n    .replace(/\\./g, \"\") // ignore dots that were made optional\n    .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n    .toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n  if (strings === null) {\n    return null;\n  } else {\n    return {\n      regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n      deser: ([s]) =>\n        strings.findIndex((i) => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex,\n    };\n  }\n}\n\nfunction offset(regex, groups) {\n  return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };\n}\n\nfunction simple(regex) {\n  return { regex, deser: ([s]) => s };\n}\n\nfunction escapeToken(value) {\n  return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\n/**\n * @param token\n * @param {Locale} loc\n */\nfunction unitForToken(token, loc) {\n  const one = digitRegex(loc),\n    two = digitRegex(loc, \"{2}\"),\n    three = digitRegex(loc, \"{3}\"),\n    four = digitRegex(loc, \"{4}\"),\n    six = digitRegex(loc, \"{6}\"),\n    oneOrTwo = digitRegex(loc, \"{1,2}\"),\n    oneToThree = digitRegex(loc, \"{1,3}\"),\n    oneToSix = digitRegex(loc, \"{1,6}\"),\n    oneToNine = digitRegex(loc, \"{1,9}\"),\n    twoToFour = digitRegex(loc, \"{2,4}\"),\n    fourToSix = digitRegex(loc, \"{4,6}\"),\n    literal = (t) => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }),\n    unitate = (t) => {\n      if (token.literal) {\n        return literal(t);\n      }\n      switch (t.val) {\n        // era\n        case \"G\":\n          return oneOf(loc.eras(\"short\"), 0);\n        case \"GG\":\n          return oneOf(loc.eras(\"long\"), 0);\n        // years\n        case \"y\":\n          return intUnit(oneToSix);\n        case \"yy\":\n          return intUnit(twoToFour, untruncateYear);\n        case \"yyyy\":\n          return intUnit(four);\n        case \"yyyyy\":\n          return intUnit(fourToSix);\n        case \"yyyyyy\":\n          return intUnit(six);\n        // months\n        case \"M\":\n          return intUnit(oneOrTwo);\n        case \"MM\":\n          return intUnit(two);\n        case \"MMM\":\n          return oneOf(loc.months(\"short\", true), 1);\n        case \"MMMM\":\n          return oneOf(loc.months(\"long\", true), 1);\n        case \"L\":\n          return intUnit(oneOrTwo);\n        case \"LL\":\n          return intUnit(two);\n        case \"LLL\":\n          return oneOf(loc.months(\"short\", false), 1);\n        case \"LLLL\":\n          return oneOf(loc.months(\"long\", false), 1);\n        // dates\n        case \"d\":\n          return intUnit(oneOrTwo);\n        case \"dd\":\n          return intUnit(two);\n        // ordinals\n        case \"o\":\n          return intUnit(oneToThree);\n        case \"ooo\":\n          return intUnit(three);\n        // time\n        case \"HH\":\n          return intUnit(two);\n        case \"H\":\n          return intUnit(oneOrTwo);\n        case \"hh\":\n          return intUnit(two);\n        case \"h\":\n          return intUnit(oneOrTwo);\n        case \"mm\":\n          return intUnit(two);\n        case \"m\":\n          return intUnit(oneOrTwo);\n        case \"q\":\n          return intUnit(oneOrTwo);\n        case \"qq\":\n          return intUnit(two);\n        case \"s\":\n          return intUnit(oneOrTwo);\n        case \"ss\":\n          return intUnit(two);\n        case \"S\":\n          return intUnit(oneToThree);\n        case \"SSS\":\n          return intUnit(three);\n        case \"u\":\n          return simple(oneToNine);\n        case \"uu\":\n          return simple(oneOrTwo);\n        case \"uuu\":\n          return intUnit(one);\n        // meridiem\n        case \"a\":\n          return oneOf(loc.meridiems(), 0);\n        // weekYear (k)\n        case \"kkkk\":\n          return intUnit(four);\n        case \"kk\":\n          return intUnit(twoToFour, untruncateYear);\n        // weekNumber (W)\n        case \"W\":\n          return intUnit(oneOrTwo);\n        case \"WW\":\n          return intUnit(two);\n        // weekdays\n        case \"E\":\n        case \"c\":\n          return intUnit(one);\n        case \"EEE\":\n          return oneOf(loc.weekdays(\"short\", false), 1);\n        case \"EEEE\":\n          return oneOf(loc.weekdays(\"long\", false), 1);\n        case \"ccc\":\n          return oneOf(loc.weekdays(\"short\", true), 1);\n        case \"cccc\":\n          return oneOf(loc.weekdays(\"long\", true), 1);\n        // offset/zone\n        case \"Z\":\n        case \"ZZ\":\n          return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);\n        case \"ZZZ\":\n          return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);\n        // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n        // because we don't have any way to figure out what they are\n        case \"z\":\n          return simple(/[a-z_+-/]{1,256}?/i);\n        // this special-case \"token\" represents a place where a macro-token expanded into a white-space literal\n        // in this case we accept any non-newline white-space\n        case \" \":\n          return simple(/[^\\S\\n\\r]/);\n        default:\n          return literal(t);\n      }\n    };\n\n  const unit = unitate(token) || {\n    invalidReason: MISSING_FTP,\n  };\n\n  unit.token = token;\n\n  return unit;\n}\n\nconst partTypeStyleToTokenVal = {\n  year: {\n    \"2-digit\": \"yy\",\n    numeric: \"yyyyy\",\n  },\n  month: {\n    numeric: \"M\",\n    \"2-digit\": \"MM\",\n    short: \"MMM\",\n    long: \"MMMM\",\n  },\n  day: {\n    numeric: \"d\",\n    \"2-digit\": \"dd\",\n  },\n  weekday: {\n    short: \"EEE\",\n    long: \"EEEE\",\n  },\n  dayperiod: \"a\",\n  dayPeriod: \"a\",\n  hour12: {\n    numeric: \"h\",\n    \"2-digit\": \"hh\",\n  },\n  hour24: {\n    numeric: \"H\",\n    \"2-digit\": \"HH\",\n  },\n  minute: {\n    numeric: \"m\",\n    \"2-digit\": \"mm\",\n  },\n  second: {\n    numeric: \"s\",\n    \"2-digit\": \"ss\",\n  },\n  timeZoneName: {\n    long: \"ZZZZZ\",\n    short: \"ZZZ\",\n  },\n};\n\nfunction tokenForPart(part, formatOpts, resolvedOpts) {\n  const { type, value } = part;\n\n  if (type === \"literal\") {\n    const isSpace = /^\\s+$/.test(value);\n    return {\n      literal: !isSpace,\n      val: isSpace ? \" \" : value,\n    };\n  }\n\n  const style = formatOpts[type];\n\n  // The user might have explicitly specified hour12 or hourCycle\n  // if so, respect their decision\n  // if not, refer back to the resolvedOpts, which are based on the locale\n  let actualType = type;\n  if (type === \"hour\") {\n    if (formatOpts.hour12 != null) {\n      actualType = formatOpts.hour12 ? \"hour12\" : \"hour24\";\n    } else if (formatOpts.hourCycle != null) {\n      if (formatOpts.hourCycle === \"h11\" || formatOpts.hourCycle === \"h12\") {\n        actualType = \"hour12\";\n      } else {\n        actualType = \"hour24\";\n      }\n    } else {\n      // tokens only differentiate between 24 hours or not,\n      // so we do not need to check hourCycle here, which is less supported anyways\n      actualType = resolvedOpts.hour12 ? \"hour12\" : \"hour24\";\n    }\n  }\n  let val = partTypeStyleToTokenVal[actualType];\n  if (typeof val === \"object\") {\n    val = val[style];\n  }\n\n  if (val) {\n    return {\n      literal: false,\n      val,\n    };\n  }\n\n  return undefined;\n}\n\nfunction buildRegex(units) {\n  const re = units.map((u) => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n  return [`^${re}$`, units];\n}\n\nfunction match(input, regex, handlers) {\n  const matches = input.match(regex);\n\n  if (matches) {\n    const all = {};\n    let matchIndex = 1;\n    for (const i in handlers) {\n      if (hasOwnProperty(handlers, i)) {\n        const h = handlers[i],\n          groups = h.groups ? h.groups + 1 : 1;\n        if (!h.literal && h.token) {\n          all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n        }\n        matchIndex += groups;\n      }\n    }\n    return [matches, all];\n  } else {\n    return [matches, {}];\n  }\n}\n\nfunction dateTimeFromMatches(matches) {\n  const toField = (token) => {\n    switch (token) {\n      case \"S\":\n        return \"millisecond\";\n      case \"s\":\n        return \"second\";\n      case \"m\":\n        return \"minute\";\n      case \"h\":\n      case \"H\":\n        return \"hour\";\n      case \"d\":\n        return \"day\";\n      case \"o\":\n        return \"ordinal\";\n      case \"L\":\n      case \"M\":\n        return \"month\";\n      case \"y\":\n        return \"year\";\n      case \"E\":\n      case \"c\":\n        return \"weekday\";\n      case \"W\":\n        return \"weekNumber\";\n      case \"k\":\n        return \"weekYear\";\n      case \"q\":\n        return \"quarter\";\n      default:\n        return null;\n    }\n  };\n\n  let zone = null;\n  let specificOffset;\n  if (!isUndefined(matches.z)) {\n    zone = IANAZone.create(matches.z);\n  }\n\n  if (!isUndefined(matches.Z)) {\n    if (!zone) {\n      zone = new FixedOffsetZone(matches.Z);\n    }\n    specificOffset = matches.Z;\n  }\n\n  if (!isUndefined(matches.q)) {\n    matches.M = (matches.q - 1) * 3 + 1;\n  }\n\n  if (!isUndefined(matches.h)) {\n    if (matches.h < 12 && matches.a === 1) {\n      matches.h += 12;\n    } else if (matches.h === 12 && matches.a === 0) {\n      matches.h = 0;\n    }\n  }\n\n  if (matches.G === 0 && matches.y) {\n    matches.y = -matches.y;\n  }\n\n  if (!isUndefined(matches.u)) {\n    matches.S = parseMillis(matches.u);\n  }\n\n  const vals = Object.keys(matches).reduce((r, k) => {\n    const f = toField(k);\n    if (f) {\n      r[f] = matches[k];\n    }\n\n    return r;\n  }, {});\n\n  return [vals, zone, specificOffset];\n}\n\nlet dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n  if (!dummyDateTimeCache) {\n    dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n  }\n\n  return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n  if (token.literal) {\n    return token;\n  }\n\n  const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n  const tokens = formatOptsToTokens(formatOpts, locale);\n\n  if (tokens == null || tokens.includes(undefined)) {\n    return token;\n  }\n\n  return tokens;\n}\n\nexport function expandMacroTokens(tokens, locale) {\n  return Array.prototype.concat(...tokens.map((t) => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport class TokenParser {\n  constructor(locale, format) {\n    this.locale = locale;\n    this.format = format;\n    this.tokens = expandMacroTokens(Formatter.parseFormat(format), locale);\n    this.units = this.tokens.map((t) => unitForToken(t, locale));\n    this.disqualifyingUnit = this.units.find((t) => t.invalidReason);\n\n    if (!this.disqualifyingUnit) {\n      const [regexString, handlers] = buildRegex(this.units);\n      this.regex = RegExp(regexString, \"i\");\n      this.handlers = handlers;\n    }\n  }\n\n  explainFromTokens(input) {\n    if (!this.isValid) {\n      return { input, tokens: this.tokens, invalidReason: this.invalidReason };\n    } else {\n      const [rawMatches, matches] = match(input, this.regex, this.handlers),\n        [result, zone, specificOffset] = matches\n          ? dateTimeFromMatches(matches)\n          : [null, null, undefined];\n      if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n        throw new ConflictingSpecificationError(\n          \"Can't include meridiem when specifying 24-hour format\"\n        );\n      }\n      return {\n        input,\n        tokens: this.tokens,\n        regex: this.regex,\n        rawMatches,\n        matches,\n        result,\n        zone,\n        specificOffset,\n      };\n    }\n  }\n\n  get isValid() {\n    return !this.disqualifyingUnit;\n  }\n\n  get invalidReason() {\n    return this.disqualifyingUnit ? this.disqualifyingUnit.invalidReason : null;\n  }\n}\n\nexport function explainFromTokens(locale, input, format) {\n  const parser = new TokenParser(locale, format);\n  return parser.explainFromTokens(input);\n}\n\nexport function parseFromTokens(locale, input, format) {\n  const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input, format);\n  return [result, zone, specificOffset, invalidReason];\n}\n\nexport function formatOptsToTokens(formatOpts, locale) {\n  if (!formatOpts) {\n    return null;\n  }\n\n  const formatter = Formatter.create(locale, formatOpts);\n  const df = formatter.dtFormatter(getDummyDateTime());\n  const parts = df.formatToParts();\n  const resolvedOpts = df.resolvedOptions();\n  return parts.map((p) => tokenForPart(p, formatOpts, resolvedOpts));\n}\n","import Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Settings from \"./settings.js\";\nimport Info from \"./info.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport {\n  isUndefined,\n  maybeArray,\n  isDate,\n  isNumber,\n  bestBy,\n  daysInMonth,\n  daysInYear,\n  isLeapYear,\n  weeksInWeekYear,\n  normalizeObject,\n  roundTo,\n  objToLocalTS,\n  padStart,\n} from \"./impl/util.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport diff from \"./impl/diff.js\";\nimport { parseRFC2822Date, parseISODate, parseHTTPDate, parseSQL } from \"./impl/regexParser.js\";\nimport {\n  parseFromTokens,\n  explainFromTokens,\n  formatOptsToTokens,\n  expandMacroTokens,\n  TokenParser,\n} from \"./impl/tokenParser.js\";\nimport {\n  gregorianToWeek,\n  weekToGregorian,\n  gregorianToOrdinal,\n  ordinalToGregorian,\n  hasInvalidGregorianData,\n  hasInvalidWeekData,\n  hasInvalidOrdinalData,\n  hasInvalidTimeData,\n  usesLocalWeekValues,\n  isoWeekdayToLocal,\n} from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport {\n  InvalidArgumentError,\n  ConflictingSpecificationError,\n  InvalidUnitError,\n  InvalidDateTimeError,\n} from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n  return new Invalid(\"unsupported zone\", `the zone \"${zone.name}\" is not supported`);\n}\n\n// we cache week data on the DT object and this intermediates the cache\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedWeekData(dt) {\n  if (dt.weekData === null) {\n    dt.weekData = gregorianToWeek(dt.c);\n  }\n  return dt.weekData;\n}\n\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedLocalWeekData(dt) {\n  if (dt.localWeekData === null) {\n    dt.localWeekData = gregorianToWeek(\n      dt.c,\n      dt.loc.getMinDaysInFirstWeek(),\n      dt.loc.getStartOfWeek()\n    );\n  }\n  return dt.localWeekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone(inst, alts) {\n  const current = {\n    ts: inst.ts,\n    zone: inst.zone,\n    c: inst.c,\n    o: inst.o,\n    loc: inst.loc,\n    invalid: inst.invalid,\n  };\n  return new DateTime({ ...current, ...alts, old: current });\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n  // Our UTC time is just a guess because our offset is just a guess\n  let utcGuess = localTS - o * 60 * 1000;\n\n  // Test whether the zone matches the offset for this ts\n  const o2 = tz.offset(utcGuess);\n\n  // If so, offset didn't change and we're done\n  if (o === o2) {\n    return [utcGuess, o];\n  }\n\n  // If not, change the ts by the difference in the offset\n  utcGuess -= (o2 - o) * 60 * 1000;\n\n  // If that gives us the local time we want, we're done\n  const o3 = tz.offset(utcGuess);\n  if (o2 === o3) {\n    return [utcGuess, o2];\n  }\n\n  // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n  return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n  ts += offset * 60 * 1000;\n\n  const d = new Date(ts);\n\n  return {\n    year: d.getUTCFullYear(),\n    month: d.getUTCMonth() + 1,\n    day: d.getUTCDate(),\n    hour: d.getUTCHours(),\n    minute: d.getUTCMinutes(),\n    second: d.getUTCSeconds(),\n    millisecond: d.getUTCMilliseconds(),\n  };\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n  return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n  const oPre = inst.o,\n    year = inst.c.year + Math.trunc(dur.years),\n    month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,\n    c = {\n      ...inst.c,\n      year,\n      month,\n      day:\n        Math.min(inst.c.day, daysInMonth(year, month)) +\n        Math.trunc(dur.days) +\n        Math.trunc(dur.weeks) * 7,\n    },\n    millisToAdd = Duration.fromObject({\n      years: dur.years - Math.trunc(dur.years),\n      quarters: dur.quarters - Math.trunc(dur.quarters),\n      months: dur.months - Math.trunc(dur.months),\n      weeks: dur.weeks - Math.trunc(dur.weeks),\n      days: dur.days - Math.trunc(dur.days),\n      hours: dur.hours,\n      minutes: dur.minutes,\n      seconds: dur.seconds,\n      milliseconds: dur.milliseconds,\n    }).as(\"milliseconds\"),\n    localTS = objToLocalTS(c);\n\n  let [ts, o] = fixOffset(localTS, oPre, inst.zone);\n\n  if (millisToAdd !== 0) {\n    ts += millisToAdd;\n    // that could have changed the offset by going over a DST, but we want to keep the ts the same\n    o = inst.zone.offset(ts);\n  }\n\n  return { ts, o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) {\n  const { setZone, zone } = opts;\n  if ((parsed && Object.keys(parsed).length !== 0) || parsedZone) {\n    const interpretationZone = parsedZone || zone,\n      inst = DateTime.fromObject(parsed, {\n        ...opts,\n        zone: interpretationZone,\n        specificOffset,\n      });\n    return setZone ? inst : inst.setZone(zone);\n  } else {\n    return DateTime.invalid(\n      new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`)\n    );\n  }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format, allowZ = true) {\n  return dt.isValid\n    ? Formatter.create(Locale.create(\"en-US\"), {\n        allowZ,\n        forceSimple: true,\n      }).formatDateTimeFromString(dt, format)\n    : null;\n}\n\nfunction toISODate(o, extended, precision) {\n  const longFormat = o.c.year > 9999 || o.c.year < 0;\n  let c = \"\";\n  if (longFormat && o.c.year >= 0) c += \"+\";\n  c += padStart(o.c.year, longFormat ? 6 : 4);\n  if (precision === \"year\") return c;\n  if (extended) {\n    c += \"-\";\n    c += padStart(o.c.month);\n    if (precision === \"month\") return c;\n    c += \"-\";\n  } else {\n    c += padStart(o.c.month);\n    if (precision === \"month\") return c;\n  }\n  c += padStart(o.c.day);\n  return c;\n}\n\nfunction toISOTime(\n  o,\n  extended,\n  suppressSeconds,\n  suppressMilliseconds,\n  includeOffset,\n  extendedZone,\n  precision\n) {\n  let showSeconds = !suppressSeconds || o.c.millisecond !== 0 || o.c.second !== 0,\n    c = \"\";\n  switch (precision) {\n    case \"day\":\n    case \"month\":\n    case \"year\":\n      break;\n    default:\n      c += padStart(o.c.hour);\n      if (precision === \"hour\") break;\n      if (extended) {\n        c += \":\";\n        c += padStart(o.c.minute);\n        if (precision === \"minute\") break;\n        if (showSeconds) {\n          c += \":\";\n          c += padStart(o.c.second);\n        }\n      } else {\n        c += padStart(o.c.minute);\n        if (precision === \"minute\") break;\n        if (showSeconds) {\n          c += padStart(o.c.second);\n        }\n      }\n      if (precision === \"second\") break;\n      if (showSeconds && (!suppressMilliseconds || o.c.millisecond !== 0)) {\n        c += \".\";\n        c += padStart(o.c.millisecond, 3);\n      }\n  }\n\n  if (includeOffset) {\n    if (o.isOffsetFixed && o.offset === 0 && !extendedZone) {\n      c += \"Z\";\n    } else if (o.o < 0) {\n      c += \"-\";\n      c += padStart(Math.trunc(-o.o / 60));\n      c += \":\";\n      c += padStart(Math.trunc(-o.o % 60));\n    } else {\n      c += \"+\";\n      c += padStart(Math.trunc(o.o / 60));\n      c += \":\";\n      c += padStart(Math.trunc(o.o % 60));\n    }\n  }\n\n  if (extendedZone) {\n    c += \"[\" + o.zone.ianaName + \"]\";\n  }\n  return c;\n}\n\n// defaults for unspecified units in the supported calendars\nconst defaultUnitValues = {\n    month: 1,\n    day: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    millisecond: 0,\n  },\n  defaultWeekUnitValues = {\n    weekNumber: 1,\n    weekday: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    millisecond: 0,\n  },\n  defaultOrdinalUnitValues = {\n    ordinal: 1,\n    hour: 0,\n    minute: 0,\n    second: 0,\n    millisecond: 0,\n  };\n\n// Units in the supported calendars, sorted by bigness\nconst orderedUnits = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n  orderedWeekUnits = [\n    \"weekYear\",\n    \"weekNumber\",\n    \"weekday\",\n    \"hour\",\n    \"minute\",\n    \"second\",\n    \"millisecond\",\n  ],\n  orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n  const normalized = {\n    year: \"year\",\n    years: \"year\",\n    month: \"month\",\n    months: \"month\",\n    day: \"day\",\n    days: \"day\",\n    hour: \"hour\",\n    hours: \"hour\",\n    minute: \"minute\",\n    minutes: \"minute\",\n    quarter: \"quarter\",\n    quarters: \"quarter\",\n    second: \"second\",\n    seconds: \"second\",\n    millisecond: \"millisecond\",\n    milliseconds: \"millisecond\",\n    weekday: \"weekday\",\n    weekdays: \"weekday\",\n    weeknumber: \"weekNumber\",\n    weeksnumber: \"weekNumber\",\n    weeknumbers: \"weekNumber\",\n    weekyear: \"weekYear\",\n    weekyears: \"weekYear\",\n    ordinal: \"ordinal\",\n  }[unit.toLowerCase()];\n\n  if (!normalized) throw new InvalidUnitError(unit);\n\n  return normalized;\n}\n\nfunction normalizeUnitWithLocalWeeks(unit) {\n  switch (unit.toLowerCase()) {\n    case \"localweekday\":\n    case \"localweekdays\":\n      return \"localWeekday\";\n    case \"localweeknumber\":\n    case \"localweeknumbers\":\n      return \"localWeekNumber\";\n    case \"localweekyear\":\n    case \"localweekyears\":\n      return \"localWeekYear\";\n    default:\n      return normalizeUnit(unit);\n  }\n}\n\n// cache offsets for zones based on the current timestamp when this function is\n// first called. When we are handling a datetime from components like (year,\n// month, day, hour) in a time zone, we need a guess about what the timezone\n// offset is so that we can convert into a UTC timestamp. One way is to find the\n// offset of now in the zone. The actual date may have a different offset (for\n// example, if we handle a date in June while we're in December in a zone that\n// observes DST), but we can check and adjust that.\n//\n// When handling many dates, calculating the offset for now every time is\n// expensive. It's just a guess, so we can cache the offset to use even if we\n// are right on a time change boundary (we'll just correct in the other\n// direction). Using a timestamp from first read is a slight optimization for\n// handling dates close to the current date, since those dates will usually be\n// in the same offset (we could set the timestamp statically, instead). We use a\n// single timestamp for all zones to make things a bit more predictable.\n//\n// This is safe for quickDT (used by local() and utc()) because we don't fill in\n// higher-order units from tsNow (as we do in fromObject, this requires that\n// offset is calculated from tsNow).\n/**\n * @param {Zone} zone\n * @return {number}\n */\nfunction guessOffsetForZone(zone) {\n  if (zoneOffsetTs === undefined) {\n    zoneOffsetTs = Settings.now();\n  }\n\n  // Do not cache anything but IANA zones, because it is not safe to do so.\n  // Guessing an offset which is not present in the zone can cause wrong results from fixOffset\n  if (zone.type !== \"iana\") {\n    return zone.offset(zoneOffsetTs);\n  }\n  const zoneName = zone.name;\n  let offsetGuess = zoneOffsetGuessCache.get(zoneName);\n  if (offsetGuess === undefined) {\n    offsetGuess = zone.offset(zoneOffsetTs);\n    zoneOffsetGuessCache.set(zoneName, offsetGuess);\n  }\n  return offsetGuess;\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, opts) {\n  const zone = normalizeZone(opts.zone, Settings.defaultZone);\n  if (!zone.isValid) {\n    return DateTime.invalid(unsupportedZone(zone));\n  }\n\n  const loc = Locale.fromObject(opts);\n\n  let ts, o;\n\n  // assume we have the higher-order units\n  if (!isUndefined(obj.year)) {\n    for (const u of orderedUnits) {\n      if (isUndefined(obj[u])) {\n        obj[u] = defaultUnitValues[u];\n      }\n    }\n\n    const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    }\n\n    const offsetProvis = guessOffsetForZone(zone);\n    [ts, o] = objToTS(obj, offsetProvis, zone);\n  } else {\n    ts = Settings.now();\n  }\n\n  return new DateTime({ ts, zone, loc, o });\n}\n\nfunction diffRelative(start, end, opts) {\n  const round = isUndefined(opts.round) ? true : opts.round,\n    rounding = isUndefined(opts.rounding) ? \"trunc\" : opts.rounding,\n    format = (c, unit) => {\n      c = roundTo(c, round || opts.calendary ? 0 : 2, opts.calendary ? \"round\" : rounding);\n      const formatter = end.loc.clone(opts).relFormatter(opts);\n      return formatter.format(c, unit);\n    },\n    differ = (unit) => {\n      if (opts.calendary) {\n        if (!end.hasSame(start, unit)) {\n          return end.startOf(unit).diff(start.startOf(unit), unit).get(unit);\n        } else return 0;\n      } else {\n        return end.diff(start, unit).get(unit);\n      }\n    };\n\n  if (opts.unit) {\n    return format(differ(opts.unit), opts.unit);\n  }\n\n  for (const unit of opts.units) {\n    const count = differ(unit);\n    if (Math.abs(count) >= 1) {\n      return format(count, unit);\n    }\n  }\n  return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);\n}\n\nfunction lastOpts(argList) {\n  let opts = {},\n    args;\n  if (argList.length > 0 && typeof argList[argList.length - 1] === \"object\") {\n    opts = argList[argList.length - 1];\n    args = Array.from(argList).slice(0, argList.length - 1);\n  } else {\n    args = Array.from(argList);\n  }\n  return [opts, args];\n}\n\n/**\n * Timestamp to use for cached zone offset guesses (exposed for test)\n */\nlet zoneOffsetTs;\n/**\n * Cache for zone offset guesses (exposed for test).\n *\n * This optimizes quickDT via guessOffsetForZone to avoid repeated calls of\n * zone.offset().\n */\nconst zoneOffsetGuessCache = new Map();\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month},\n * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors.\n * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\nexport default class DateTime {\n  /**\n   * @access private\n   */\n  constructor(config) {\n    const zone = config.zone || Settings.defaultZone;\n\n    let invalid =\n      config.invalid ||\n      (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) ||\n      (!zone.isValid ? unsupportedZone(zone) : null);\n    /**\n     * @access private\n     */\n    this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n    let c = null,\n      o = null;\n    if (!invalid) {\n      const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n      if (unchanged) {\n        [c, o] = [config.old.c, config.old.o];\n      } else {\n        // If an offset has been passed and we have not been called from\n        // clone(), we can trust it and avoid the offset calculation.\n        const ot = isNumber(config.o) && !config.old ? config.o : zone.offset(this.ts);\n        c = tsToObj(this.ts, ot);\n        invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n        c = invalid ? null : c;\n        o = invalid ? null : ot;\n      }\n    }\n\n    /**\n     * @access private\n     */\n    this._zone = zone;\n    /**\n     * @access private\n     */\n    this.loc = config.loc || Locale.create();\n    /**\n     * @access private\n     */\n    this.invalid = invalid;\n    /**\n     * @access private\n     */\n    this.weekData = null;\n    /**\n     * @access private\n     */\n    this.localWeekData = null;\n    /**\n     * @access private\n     */\n    this.c = c;\n    /**\n     * @access private\n     */\n    this.o = o;\n    /**\n     * @access private\n     */\n    this.isLuxonDateTime = true;\n  }\n\n  // CONSTRUCT\n\n  /**\n   * Create a DateTime for the current instant, in the system's time zone.\n   *\n   * Use Settings to override these default values if needed.\n   * @example DateTime.now().toISO() //~> now in the ISO format\n   * @return {DateTime}\n   */\n  static now() {\n    return new DateTime({});\n  }\n\n  /**\n   * Create a local DateTime\n   * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n   * @param {number} [month=1] - The month, 1-indexed\n   * @param {number} [day=1] - The day of the month, 1-indexed\n   * @param {number} [hour=0] - The hour of the day, in 24-hour time\n   * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n   * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n   * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n   * @example DateTime.local()                                  //~> now\n   * @example DateTime.local({ zone: \"America/New_York\" })      //~> now, in US east coast time\n   * @example DateTime.local(2017)                              //~> 2017-01-01T00:00:00\n   * @example DateTime.local(2017, 3)                           //~> 2017-03-01T00:00:00\n   * @example DateTime.local(2017, 3, 12, { locale: \"fr\" })     //~> 2017-03-12T00:00:00, with a French locale\n   * @example DateTime.local(2017, 3, 12, 5)                    //~> 2017-03-12T05:00:00\n   * @example DateTime.local(2017, 3, 12, 5, { zone: \"utc\" })   //~> 2017-03-12T05:00:00, in UTC\n   * @example DateTime.local(2017, 3, 12, 5, 45)                //~> 2017-03-12T05:45:00\n   * @example DateTime.local(2017, 3, 12, 5, 45, 10)            //~> 2017-03-12T05:45:10\n   * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765)       //~> 2017-03-12T05:45:10.765\n   * @return {DateTime}\n   */\n  static local() {\n    const [opts, args] = lastOpts(arguments),\n      [year, month, day, hour, minute, second, millisecond] = args;\n    return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n  }\n\n  /**\n   * Create a DateTime in UTC\n   * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n   * @param {number} [month=1] - The month, 1-indexed\n   * @param {number} [day=1] - The day of the month\n   * @param {number} [hour=0] - The hour of the day, in 24-hour time\n   * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n   * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n   * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n   * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance\n   * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance\n   * @param {string} [options.weekSettings] - the week settings to set on the resulting DateTime instance\n   * @example DateTime.utc()                                              //~> now\n   * @example DateTime.utc(2017)                                          //~> 2017-01-01T00:00:00Z\n   * @example DateTime.utc(2017, 3)                                       //~> 2017-03-01T00:00:00Z\n   * @example DateTime.utc(2017, 3, 12)                                   //~> 2017-03-12T00:00:00Z\n   * @example DateTime.utc(2017, 3, 12, 5)                                //~> 2017-03-12T05:00:00Z\n   * @example DateTime.utc(2017, 3, 12, 5, 45)                            //~> 2017-03-12T05:45:00Z\n   * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: \"fr\" })          //~> 2017-03-12T05:45:00Z with a French locale\n   * @example DateTime.utc(2017, 3, 12, 5, 45, 10)                        //~> 2017-03-12T05:45:10Z\n   * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: \"fr\" }) //~> 2017-03-12T05:45:10.765Z with a French locale\n   * @return {DateTime}\n   */\n  static utc() {\n    const [opts, args] = lastOpts(arguments),\n      [year, month, day, hour, minute, second, millisecond] = args;\n\n    opts.zone = FixedOffsetZone.utcInstance;\n    return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n  }\n\n  /**\n   * Create a DateTime from a JavaScript Date object. Uses the default zone.\n   * @param {Date} date - a JavaScript Date object\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n   * @return {DateTime}\n   */\n  static fromJSDate(date, options = {}) {\n    const ts = isDate(date) ? date.valueOf() : NaN;\n    if (Number.isNaN(ts)) {\n      return DateTime.invalid(\"invalid input\");\n    }\n\n    const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n    if (!zoneToUse.isValid) {\n      return DateTime.invalid(unsupportedZone(zoneToUse));\n    }\n\n    return new DateTime({\n      ts: ts,\n      zone: zoneToUse,\n      loc: Locale.fromObject(options),\n    });\n  }\n\n  /**\n   * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n   * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n   * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n   * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n   * @return {DateTime}\n   */\n  static fromMillis(milliseconds, options = {}) {\n    if (!isNumber(milliseconds)) {\n      throw new InvalidArgumentError(\n        `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`\n      );\n    } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n      // this isn't perfect because we can still end up out of range because of additional shifting, but it's a start\n      return DateTime.invalid(\"Timestamp out of range\");\n    } else {\n      return new DateTime({\n        ts: milliseconds,\n        zone: normalizeZone(options.zone, Settings.defaultZone),\n        loc: Locale.fromObject(options),\n      });\n    }\n  }\n\n  /**\n   * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n   * @param {number} seconds - a number of seconds since 1970 UTC\n   * @param {Object} options - configuration options for the DateTime\n   * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n   * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n   * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n   * @return {DateTime}\n   */\n  static fromSeconds(seconds, options = {}) {\n    if (!isNumber(seconds)) {\n      throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n    } else {\n      return new DateTime({\n        ts: seconds * 1000,\n        zone: normalizeZone(options.zone, Settings.defaultZone),\n        loc: Locale.fromObject(options),\n      });\n    }\n  }\n\n  /**\n   * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults.\n   * @param {Object} obj - the object to create the DateTime from\n   * @param {number} obj.year - a year, such as 1987\n   * @param {number} obj.month - a month, 1-12\n   * @param {number} obj.day - a day of the month, 1-31, depending on the month\n   * @param {number} obj.ordinal - day of the year, 1-365 or 366\n   * @param {number} obj.weekYear - an ISO week year\n   * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n   * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n   * @param {number} obj.localWeekYear - a week year, according to the locale\n   * @param {number} obj.localWeekNumber - a week number, between 1 and 52 or 53, depending on the year, according to the locale\n   * @param {number} obj.localWeekday - a weekday, 1-7, where 1 is the first and 7 is the last day of the week, according to the locale\n   * @param {number} obj.hour - hour of the day, 0-23\n   * @param {number} obj.minute - minute of the hour, 0-59\n   * @param {number} obj.second - second of the minute, 0-59\n   * @param {number} obj.millisecond - millisecond of the second, 0-999\n   * @param {Object} opts - options for creating this DateTime\n   * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n   * @param {string} [opts.locale='system\\'s locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n   * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n   * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }),\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' })\n   * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' })\n   * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n   * @example DateTime.fromObject({ localWeekYear: 2022, localWeekNumber: 1, localWeekday: 1 }, { locale: \"en-US\" }).toISODate() //=> '2021-12-26'\n   * @return {DateTime}\n   */\n  static fromObject(obj, opts = {}) {\n    obj = obj || {};\n    const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone);\n    if (!zoneToUse.isValid) {\n      return DateTime.invalid(unsupportedZone(zoneToUse));\n    }\n\n    const loc = Locale.fromObject(opts);\n    const normalized = normalizeObject(obj, normalizeUnitWithLocalWeeks);\n    const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, loc);\n\n    const tsNow = Settings.now(),\n      offsetProvis = !isUndefined(opts.specificOffset)\n        ? opts.specificOffset\n        : zoneToUse.offset(tsNow),\n      containsOrdinal = !isUndefined(normalized.ordinal),\n      containsGregorYear = !isUndefined(normalized.year),\n      containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n      containsGregor = containsGregorYear || containsGregorMD,\n      definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n    // cases:\n    // just a weekday -> this week's instance of that weekday, no worries\n    // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n    // (gregorian month or day) + ordinal -> error\n    // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n    if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n      throw new ConflictingSpecificationError(\n        \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n      );\n    }\n\n    if (containsGregorMD && containsOrdinal) {\n      throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n    }\n\n    const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor);\n\n    // configure ourselves to deal with gregorian dates or week stuff\n    let units,\n      defaultValues,\n      objNow = tsToObj(tsNow, offsetProvis);\n    if (useWeekData) {\n      units = orderedWeekUnits;\n      defaultValues = defaultWeekUnitValues;\n      objNow = gregorianToWeek(objNow, minDaysInFirstWeek, startOfWeek);\n    } else if (containsOrdinal) {\n      units = orderedOrdinalUnits;\n      defaultValues = defaultOrdinalUnitValues;\n      objNow = gregorianToOrdinal(objNow);\n    } else {\n      units = orderedUnits;\n      defaultValues = defaultUnitValues;\n    }\n\n    // set default values for missing stuff\n    let foundFirst = false;\n    for (const u of units) {\n      const v = normalized[u];\n      if (!isUndefined(v)) {\n        foundFirst = true;\n      } else if (foundFirst) {\n        normalized[u] = defaultValues[u];\n      } else {\n        normalized[u] = objNow[u];\n      }\n    }\n\n    // make sure the values we have are in range\n    const higherOrderInvalid = useWeekData\n        ? hasInvalidWeekData(normalized, minDaysInFirstWeek, startOfWeek)\n        : containsOrdinal\n        ? hasInvalidOrdinalData(normalized)\n        : hasInvalidGregorianData(normalized),\n      invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    }\n\n    // compute the actual time\n    const gregorian = useWeekData\n        ? weekToGregorian(normalized, minDaysInFirstWeek, startOfWeek)\n        : containsOrdinal\n        ? ordinalToGregorian(normalized)\n        : normalized,\n      [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse),\n      inst = new DateTime({\n        ts: tsFinal,\n        zone: zoneToUse,\n        o: offsetFinal,\n        loc,\n      });\n\n    // gregorian data + weekday serves only to validate\n    if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n      return DateTime.invalid(\n        \"mismatched weekday\",\n        `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`\n      );\n    }\n\n    if (!inst.isValid) {\n      return DateTime.invalid(inst.invalid);\n    }\n\n    return inst;\n  }\n\n  /**\n   * Create a DateTime from an ISO 8601 string\n   * @param {string} text - the ISO string\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n   * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance\n   * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance\n   * @param {string} [opts.weekSettings] - the week settings to set on the resulting DateTime instance\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n   * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n   * @example DateTime.fromISO('2016-W05-4')\n   * @return {DateTime}\n   */\n  static fromISO(text, opts = {}) {\n    const [vals, parsedZone] = parseISODate(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n  }\n\n  /**\n   * Create a DateTime from an RFC 2822 string\n   * @param {string} text - the RFC 2822 string\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n   * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n   * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n   * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n   * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n   * @return {DateTime}\n   */\n  static fromRFC2822(text, opts = {}) {\n    const [vals, parsedZone] = parseRFC2822Date(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n  }\n\n  /**\n   * Create a DateTime from an HTTP header date\n   * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n   * @param {string} text - the HTTP header date\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n   * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n   * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n   * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n   * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n   * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n   * @example DateTime.fromHTTP('Sun Nov  6 08:49:37 1994')\n   * @return {DateTime}\n   */\n  static fromHTTP(text, opts = {}) {\n    const [vals, parsedZone] = parseHTTPDate(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n  }\n\n  /**\n   * Create a DateTime from an input string and format string.\n   * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens).\n   * @param {string} text - the string to parse\n   * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n   * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n   * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n   * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @return {DateTime}\n   */\n  static fromFormat(text, fmt, opts = {}) {\n    if (isUndefined(text) || isUndefined(fmt)) {\n      throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n    }\n\n    const { locale = null, numberingSystem = null } = opts,\n      localeToUse = Locale.fromOpts({\n        locale,\n        numberingSystem,\n        defaultToEN: true,\n      }),\n      [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt);\n    if (invalid) {\n      return DateTime.invalid(invalid);\n    } else {\n      return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset);\n    }\n  }\n\n  /**\n   * @deprecated use fromFormat instead\n   */\n  static fromString(text, fmt, opts = {}) {\n    return DateTime.fromFormat(text, fmt, opts);\n  }\n\n  /**\n   * Create a DateTime from a SQL date, time, or datetime\n   * Defaults to en-US if no locale has been specified, regardless of the system's locale\n   * @param {string} text - the string to parse\n   * @param {Object} opts - options to affect the creation\n   * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n   * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n   * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n   * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n   * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n   * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n   * @example DateTime.fromSQL('2017-05-15')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n   * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n   * @example DateTime.fromSQL('09:12:34.342')\n   * @return {DateTime}\n   */\n  static fromSQL(text, opts = {}) {\n    const [vals, parsedZone] = parseSQL(text);\n    return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n  }\n\n  /**\n   * Create an invalid DateTime.\n   * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent.\n   * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n   * @return {DateTime}\n   */\n  static invalid(reason, explanation = null) {\n    if (!reason) {\n      throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n    }\n\n    const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n    if (Settings.throwOnInvalid) {\n      throw new InvalidDateTimeError(invalid);\n    } else {\n      return new DateTime({ invalid });\n    }\n  }\n\n  /**\n   * Check if an object is an instance of DateTime. Works across context boundaries\n   * @param {object} o\n   * @return {boolean}\n   */\n  static isDateTime(o) {\n    return (o && o.isLuxonDateTime) || false;\n  }\n\n  /**\n   * Produce the format string for a set of options\n   * @param formatOpts\n   * @param localeOpts\n   * @returns {string}\n   */\n  static parseFormatForOpts(formatOpts, localeOpts = {}) {\n    const tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts));\n    return !tokenList ? null : tokenList.map((t) => (t ? t.val : null)).join(\"\");\n  }\n\n  /**\n   * Produce the the fully expanded format token for the locale\n   * Does NOT quote characters, so quoted tokens will not round trip correctly\n   * @param fmt\n   * @param localeOpts\n   * @returns {string}\n   */\n  static expandFormat(fmt, localeOpts = {}) {\n    const expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts));\n    return expanded.map((t) => t.val).join(\"\");\n  }\n\n  static resetCache() {\n    zoneOffsetTs = undefined;\n    zoneOffsetGuessCache.clear();\n  }\n\n  // INFO\n\n  /**\n   * Get the value of unit.\n   * @param {string} unit - a unit such as 'minute' or 'day'\n   * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n   * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n   * @return {number}\n   */\n  get(unit) {\n    return this[unit];\n  }\n\n  /**\n   * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n   * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n   * * The DateTime was created by an operation on another invalid date\n   * @type {boolean}\n   */\n  get isValid() {\n    return this.invalid === null;\n  }\n\n  /**\n   * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n   * @type {string}\n   */\n  get invalidReason() {\n    return this.invalid ? this.invalid.reason : null;\n  }\n\n  /**\n   * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n   * @type {string}\n   */\n  get invalidExplanation() {\n    return this.invalid ? this.invalid.explanation : null;\n  }\n\n  /**\n   * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n   *\n   * @type {string}\n   */\n  get locale() {\n    return this.isValid ? this.loc.locale : null;\n  }\n\n  /**\n   * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n   *\n   * @type {string}\n   */\n  get numberingSystem() {\n    return this.isValid ? this.loc.numberingSystem : null;\n  }\n\n  /**\n   * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n   *\n   * @type {string}\n   */\n  get outputCalendar() {\n    return this.isValid ? this.loc.outputCalendar : null;\n  }\n\n  /**\n   * Get the time zone associated with this DateTime.\n   * @type {Zone}\n   */\n  get zone() {\n    return this._zone;\n  }\n\n  /**\n   * Get the name of the time zone.\n   * @type {string}\n   */\n  get zoneName() {\n    return this.isValid ? this.zone.name : null;\n  }\n\n  /**\n   * Get the year\n   * @example DateTime.local(2017, 5, 25).year //=> 2017\n   * @type {number}\n   */\n  get year() {\n    return this.isValid ? this.c.year : NaN;\n  }\n\n  /**\n   * Get the quarter\n   * @example DateTime.local(2017, 5, 25).quarter //=> 2\n   * @type {number}\n   */\n  get quarter() {\n    return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n  }\n\n  /**\n   * Get the month (1-12).\n   * @example DateTime.local(2017, 5, 25).month //=> 5\n   * @type {number}\n   */\n  get month() {\n    return this.isValid ? this.c.month : NaN;\n  }\n\n  /**\n   * Get the day of the month (1-30ish).\n   * @example DateTime.local(2017, 5, 25).day //=> 25\n   * @type {number}\n   */\n  get day() {\n    return this.isValid ? this.c.day : NaN;\n  }\n\n  /**\n   * Get the hour of the day (0-23).\n   * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n   * @type {number}\n   */\n  get hour() {\n    return this.isValid ? this.c.hour : NaN;\n  }\n\n  /**\n   * Get the minute of the hour (0-59).\n   * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n   * @type {number}\n   */\n  get minute() {\n    return this.isValid ? this.c.minute : NaN;\n  }\n\n  /**\n   * Get the second of the minute (0-59).\n   * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n   * @type {number}\n   */\n  get second() {\n    return this.isValid ? this.c.second : NaN;\n  }\n\n  /**\n   * Get the millisecond of the second (0-999).\n   * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n   * @type {number}\n   */\n  get millisecond() {\n    return this.isValid ? this.c.millisecond : NaN;\n  }\n\n  /**\n   * Get the week year\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2014, 12, 31).weekYear //=> 2015\n   * @type {number}\n   */\n  get weekYear() {\n    return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n  }\n\n  /**\n   * Get the week number of the week year (1-52ish).\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n   * @type {number}\n   */\n  get weekNumber() {\n    return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n  }\n\n  /**\n   * Get the day of the week.\n   * 1 is Monday and 7 is Sunday\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2014, 11, 31).weekday //=> 4\n   * @type {number}\n   */\n  get weekday() {\n    return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n  }\n\n  /**\n   * Returns true if this date is on a weekend according to the locale, false otherwise\n   * @returns {boolean}\n   */\n  get isWeekend() {\n    return this.isValid && this.loc.getWeekendDays().includes(this.weekday);\n  }\n\n  /**\n   * Get the day of the week according to the locale.\n   * 1 is the first day of the week and 7 is the last day of the week.\n   * If the locale assigns Sunday as the first day of the week, then a date which is a Sunday will return 1,\n   * @returns {number}\n   */\n  get localWeekday() {\n    return this.isValid ? possiblyCachedLocalWeekData(this).weekday : NaN;\n  }\n\n  /**\n   * Get the week number of the week year according to the locale. Different locales assign week numbers differently,\n   * because the week can start on different days of the week (see localWeekday) and because a different number of days\n   * is required for a week to count as the first week of a year.\n   * @returns {number}\n   */\n  get localWeekNumber() {\n    return this.isValid ? possiblyCachedLocalWeekData(this).weekNumber : NaN;\n  }\n\n  /**\n   * Get the week year according to the locale. Different locales assign week numbers (and therefor week years)\n   * differently, see localWeekNumber.\n   * @returns {number}\n   */\n  get localWeekYear() {\n    return this.isValid ? possiblyCachedLocalWeekData(this).weekYear : NaN;\n  }\n\n  /**\n   * Get the ordinal (meaning the day of the year)\n   * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n   * @type {number|DateTime}\n   */\n  get ordinal() {\n    return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n  }\n\n  /**\n   * Get the human readable short month name, such as 'Oct'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n   * @type {string}\n   */\n  get monthShort() {\n    return this.isValid ? Info.months(\"short\", { locObj: this.loc })[this.month - 1] : null;\n  }\n\n  /**\n   * Get the human readable long month name, such as 'October'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).monthLong //=> October\n   * @type {string}\n   */\n  get monthLong() {\n    return this.isValid ? Info.months(\"long\", { locObj: this.loc })[this.month - 1] : null;\n  }\n\n  /**\n   * Get the human readable short weekday, such as 'Mon'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n   * @type {string}\n   */\n  get weekdayShort() {\n    return this.isValid ? Info.weekdays(\"short\", { locObj: this.loc })[this.weekday - 1] : null;\n  }\n\n  /**\n   * Get the human readable long weekday, such as 'Monday'.\n   * Defaults to the system's locale if no locale has been specified\n   * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n   * @type {string}\n   */\n  get weekdayLong() {\n    return this.isValid ? Info.weekdays(\"long\", { locObj: this.loc })[this.weekday - 1] : null;\n  }\n\n  /**\n   * Get the UTC offset of this DateTime in minutes\n   * @example DateTime.now().offset //=> -240\n   * @example DateTime.utc().offset //=> 0\n   * @type {number}\n   */\n  get offset() {\n    return this.isValid ? +this.o : NaN;\n  }\n\n  /**\n   * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n   * Defaults to the system's locale if no locale has been specified\n   * @type {string}\n   */\n  get offsetNameShort() {\n    if (this.isValid) {\n      return this.zone.offsetName(this.ts, {\n        format: \"short\",\n        locale: this.locale,\n      });\n    } else {\n      return null;\n    }\n  }\n\n  /**\n   * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n   * Defaults to the system's locale if no locale has been specified\n   * @type {string}\n   */\n  get offsetNameLong() {\n    if (this.isValid) {\n      return this.zone.offsetName(this.ts, {\n        format: \"long\",\n        locale: this.locale,\n      });\n    } else {\n      return null;\n    }\n  }\n\n  /**\n   * Get whether this zone's offset ever changes, as in a DST.\n   * @type {boolean}\n   */\n  get isOffsetFixed() {\n    return this.isValid ? this.zone.isUniversal : null;\n  }\n\n  /**\n   * Get whether the DateTime is in a DST.\n   * @type {boolean}\n   */\n  get isInDST() {\n    if (this.isOffsetFixed) {\n      return false;\n    } else {\n      return (\n        this.offset > this.set({ month: 1, day: 1 }).offset ||\n        this.offset > this.set({ month: 5 }).offset\n      );\n    }\n  }\n\n  /**\n   * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC\n   * in this DateTime's zone. During DST changes local time can be ambiguous, for example\n   * `2023-10-29T02:30:00` in `Europe/Berlin` can have offset `+01:00` or `+02:00`.\n   * This method will return both possible DateTimes if this DateTime's local time is ambiguous.\n   * @returns {DateTime[]}\n   */\n  getPossibleOffsets() {\n    if (!this.isValid || this.isOffsetFixed) {\n      return [this];\n    }\n    const dayMs = 86400000;\n    const minuteMs = 60000;\n    const localTS = objToLocalTS(this.c);\n    const oEarlier = this.zone.offset(localTS - dayMs);\n    const oLater = this.zone.offset(localTS + dayMs);\n\n    const o1 = this.zone.offset(localTS - oEarlier * minuteMs);\n    const o2 = this.zone.offset(localTS - oLater * minuteMs);\n    if (o1 === o2) {\n      return [this];\n    }\n    const ts1 = localTS - o1 * minuteMs;\n    const ts2 = localTS - o2 * minuteMs;\n    const c1 = tsToObj(ts1, o1);\n    const c2 = tsToObj(ts2, o2);\n    if (\n      c1.hour === c2.hour &&\n      c1.minute === c2.minute &&\n      c1.second === c2.second &&\n      c1.millisecond === c2.millisecond\n    ) {\n      return [clone(this, { ts: ts1 }), clone(this, { ts: ts2 })];\n    }\n    return [this];\n  }\n\n  /**\n   * Returns true if this DateTime is in a leap year, false otherwise\n   * @example DateTime.local(2016).isInLeapYear //=> true\n   * @example DateTime.local(2013).isInLeapYear //=> false\n   * @type {boolean}\n   */\n  get isInLeapYear() {\n    return isLeapYear(this.year);\n  }\n\n  /**\n   * Returns the number of days in this DateTime's month\n   * @example DateTime.local(2016, 2).daysInMonth //=> 29\n   * @example DateTime.local(2016, 3).daysInMonth //=> 31\n   * @type {number}\n   */\n  get daysInMonth() {\n    return daysInMonth(this.year, this.month);\n  }\n\n  /**\n   * Returns the number of days in this DateTime's year\n   * @example DateTime.local(2016).daysInYear //=> 366\n   * @example DateTime.local(2013).daysInYear //=> 365\n   * @type {number}\n   */\n  get daysInYear() {\n    return this.isValid ? daysInYear(this.year) : NaN;\n  }\n\n  /**\n   * Returns the number of weeks in this DateTime's year\n   * @see https://en.wikipedia.org/wiki/ISO_week_date\n   * @example DateTime.local(2004).weeksInWeekYear //=> 53\n   * @example DateTime.local(2013).weeksInWeekYear //=> 52\n   * @type {number}\n   */\n  get weeksInWeekYear() {\n    return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n  }\n\n  /**\n   * Returns the number of weeks in this DateTime's local week year\n   * @example DateTime.local(2020, 6, {locale: 'en-US'}).weeksInLocalWeekYear //=> 52\n   * @example DateTime.local(2020, 6, {locale: 'de-DE'}).weeksInLocalWeekYear //=> 53\n   * @type {number}\n   */\n  get weeksInLocalWeekYear() {\n    return this.isValid\n      ? weeksInWeekYear(\n          this.localWeekYear,\n          this.loc.getMinDaysInFirstWeek(),\n          this.loc.getStartOfWeek()\n        )\n      : NaN;\n  }\n\n  /**\n   * Returns the resolved Intl options for this DateTime.\n   * This is useful in understanding the behavior of formatting methods\n   * @param {Object} opts - the same options as toLocaleString\n   * @return {Object}\n   */\n  resolvedLocaleOptions(opts = {}) {\n    const { locale, numberingSystem, calendar } = Formatter.create(\n      this.loc.clone(opts),\n      opts\n    ).resolvedOptions(this);\n    return { locale, numberingSystem, outputCalendar: calendar };\n  }\n\n  // TRANSFORM\n\n  /**\n   * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n   *\n   * Equivalent to {@link DateTime#setZone}('utc')\n   * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n   * @param {Object} [opts={}] - options to pass to `setZone()`\n   * @return {DateTime}\n   */\n  toUTC(offset = 0, opts = {}) {\n    return this.setZone(FixedOffsetZone.instance(offset), opts);\n  }\n\n  /**\n   * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n   *\n   * Equivalent to `setZone('local')`\n   * @return {DateTime}\n   */\n  toLocal() {\n    return this.setZone(Settings.defaultZone);\n  }\n\n  /**\n   * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n   *\n   * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones.\n   * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class.\n   * @param {Object} opts - options\n   * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n   * @return {DateTime}\n   */\n  setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {\n    zone = normalizeZone(zone, Settings.defaultZone);\n    if (zone.equals(this.zone)) {\n      return this;\n    } else if (!zone.isValid) {\n      return DateTime.invalid(unsupportedZone(zone));\n    } else {\n      let newTS = this.ts;\n      if (keepLocalTime || keepCalendarTime) {\n        const offsetGuess = zone.offset(this.ts);\n        const asObj = this.toObject();\n        [newTS] = objToTS(asObj, offsetGuess, zone);\n      }\n      return clone(this, { ts: newTS, zone });\n    }\n  }\n\n  /**\n   * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n   * @param {Object} properties - the properties to set\n   * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n   * @return {DateTime}\n   */\n  reconfigure({ locale, numberingSystem, outputCalendar } = {}) {\n    const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });\n    return clone(this, { loc });\n  }\n\n  /**\n   * \"Set\" the locale. Returns a newly-constructed DateTime.\n   * Just a convenient alias for reconfigure({ locale })\n   * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n   * @return {DateTime}\n   */\n  setLocale(locale) {\n    return this.reconfigure({ locale });\n  }\n\n  /**\n   * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n   * You can only set units with this method; for \"setting\" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}.\n   *\n   * This method also supports setting locale-based week units, i.e. `localWeekday`, `localWeekNumber` and `localWeekYear`.\n   * They cannot be mixed with ISO-week units like `weekday`.\n   * @param {Object} values - a mapping of units to numbers\n   * @example dt.set({ year: 2017 })\n   * @example dt.set({ hour: 8, minute: 30 })\n   * @example dt.set({ weekday: 5 })\n   * @example dt.set({ year: 2005, ordinal: 234 })\n   * @return {DateTime}\n   */\n  set(values) {\n    if (!this.isValid) return this;\n\n    const normalized = normalizeObject(values, normalizeUnitWithLocalWeeks);\n    const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, this.loc);\n\n    const settingWeekStuff =\n        !isUndefined(normalized.weekYear) ||\n        !isUndefined(normalized.weekNumber) ||\n        !isUndefined(normalized.weekday),\n      containsOrdinal = !isUndefined(normalized.ordinal),\n      containsGregorYear = !isUndefined(normalized.year),\n      containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n      containsGregor = containsGregorYear || containsGregorMD,\n      definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n    if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n      throw new ConflictingSpecificationError(\n        \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n      );\n    }\n\n    if (containsGregorMD && containsOrdinal) {\n      throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n    }\n\n    let mixed;\n    if (settingWeekStuff) {\n      mixed = weekToGregorian(\n        { ...gregorianToWeek(this.c, minDaysInFirstWeek, startOfWeek), ...normalized },\n        minDaysInFirstWeek,\n        startOfWeek\n      );\n    } else if (!isUndefined(normalized.ordinal)) {\n      mixed = ordinalToGregorian({ ...gregorianToOrdinal(this.c), ...normalized });\n    } else {\n      mixed = { ...this.toObject(), ...normalized };\n\n      // if we didn't set the day but we ended up on an overflow date,\n      // use the last day of the right month\n      if (isUndefined(normalized.day)) {\n        mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n      }\n    }\n\n    const [ts, o] = objToTS(mixed, this.o, this.zone);\n    return clone(this, { ts, o });\n  }\n\n  /**\n   * Add a period of time to this DateTime and return the resulting DateTime\n   *\n   * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n   * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   * @example DateTime.now().plus(123) //~> in 123 milliseconds\n   * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes\n   * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow\n   * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday\n   * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n   * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n   * @return {DateTime}\n   */\n  plus(duration) {\n    if (!this.isValid) return this;\n    const dur = Duration.fromDurationLike(duration);\n    return clone(this, adjustTime(this, dur));\n  }\n\n  /**\n   * Subtract a period of time to this DateTime and return the resulting DateTime\n   * See {@link DateTime#plus}\n   * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n   @return {DateTime}\n   */\n  minus(duration) {\n    if (!this.isValid) return this;\n    const dur = Duration.fromDurationLike(duration).negate();\n    return clone(this, adjustTime(this, dur));\n  }\n\n  /**\n   * \"Set\" this DateTime to the beginning of a unit of time.\n   * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n   * @param {Object} opts - options\n   * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n   * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n   * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n   * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays\n   * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n   * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n   * @return {DateTime}\n   */\n  startOf(unit, { useLocaleWeeks = false } = {}) {\n    if (!this.isValid) return this;\n\n    const o = {},\n      normalizedUnit = Duration.normalizeUnit(unit);\n    switch (normalizedUnit) {\n      case \"years\":\n        o.month = 1;\n      // falls through\n      case \"quarters\":\n      case \"months\":\n        o.day = 1;\n      // falls through\n      case \"weeks\":\n      case \"days\":\n        o.hour = 0;\n      // falls through\n      case \"hours\":\n        o.minute = 0;\n      // falls through\n      case \"minutes\":\n        o.second = 0;\n      // falls through\n      case \"seconds\":\n        o.millisecond = 0;\n        break;\n      case \"milliseconds\":\n        break;\n      // no default, invalid units throw in normalizeUnit()\n    }\n\n    if (normalizedUnit === \"weeks\") {\n      if (useLocaleWeeks) {\n        const startOfWeek = this.loc.getStartOfWeek();\n        const { weekday } = this;\n        if (weekday < startOfWeek) {\n          o.weekNumber = this.weekNumber - 1;\n        }\n        o.weekday = startOfWeek;\n      } else {\n        o.weekday = 1;\n      }\n    }\n\n    if (normalizedUnit === \"quarters\") {\n      const q = Math.ceil(this.month / 3);\n      o.month = (q - 1) * 3 + 1;\n    }\n\n    return this.set(o);\n  }\n\n  /**\n   * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n   * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n   * @param {Object} opts - options\n   * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n   * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n   * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n   * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays\n   * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n   * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n   * @return {DateTime}\n   */\n  endOf(unit, opts) {\n    return this.isValid\n      ? this.plus({ [unit]: 1 })\n          .startOf(unit, opts)\n          .minus(1)\n      : this;\n  }\n\n  // OUTPUT\n\n  /**\n   * Returns a string representation of this DateTime formatted according to the specified format string.\n   * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens).\n   * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n   * @param {string} fmt - the format string\n   * @param {Object} opts - opts to override the configuration options on this DateTime\n   * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n   * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n   * @example DateTime.now().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n   * @example DateTime.now().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n   * @return {string}\n   */\n  toFormat(fmt, opts = {}) {\n    return this.isValid\n      ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt)\n      : INVALID;\n  }\n\n  /**\n   * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n   * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n   * of the DateTime in the assigned locale.\n   * Defaults to the system's locale if no locale has been specified\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n   * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options\n   * @param {Object} opts - opts to override the configuration options on this DateTime\n   * @example DateTime.now().toLocaleString(); //=> 4/20/2017\n   * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n   * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n   * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022'\n   * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n   * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n   * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n   * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n   * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32'\n   * @return {string}\n   */\n  toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n    return this.isValid\n      ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this)\n      : INVALID;\n  }\n\n  /**\n   * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n   * Defaults to the system's locale if no locale has been specified\n   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n   * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n   * @example DateTime.now().toLocaleParts(); //=> [\n   *                                   //=>   { type: 'day', value: '25' },\n   *                                   //=>   { type: 'literal', value: '/' },\n   *                                   //=>   { type: 'month', value: '05' },\n   *                                   //=>   { type: 'literal', value: '/' },\n   *                                   //=>   { type: 'year', value: '1982' }\n   *                                   //=> ]\n   */\n  toLocaleParts(opts = {}) {\n    return this.isValid\n      ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this)\n      : [];\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime\n   * @param {Object} opts - options\n   * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n   * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.extendedZone=false] - add the time zone format extension\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'years', 'months', 'days', 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0.\n   * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n   * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n   * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n   * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n   * @example DateTime.now().toISO({ precision: 'day' }) //=> '2017-04-22Z'\n   * @example DateTime.now().toISO({ precision: 'minute' }) //=> '2017-04-22T20:47Z'\n   * @return {string|null}\n   */\n  toISO({\n    format = \"extended\",\n    suppressSeconds = false,\n    suppressMilliseconds = false,\n    includeOffset = true,\n    extendedZone = false,\n    precision = \"milliseconds\",\n  } = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n\n    precision = normalizeUnit(precision);\n    const ext = format === \"extended\";\n\n    let c = toISODate(this, ext, precision);\n    if (orderedUnits.indexOf(precision) >= 3) c += \"T\";\n    c += toISOTime(\n      this,\n      ext,\n      suppressSeconds,\n      suppressMilliseconds,\n      includeOffset,\n      extendedZone,\n      precision\n    );\n    return c;\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime's date component\n   * @param {Object} opts - options\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @param {string} [opts.precision='day'] - truncate output to desired precision: 'years', 'months', or 'days'.\n   * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n   * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n   * @example DateTime.utc(1982, 5, 25).toISODate({ precision: 'month' }) //=> '1982-05'\n   * @return {string|null}\n   */\n  toISODate({ format = \"extended\", precision = \"day\" } = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n    return toISODate(this, format === \"extended\", normalizeUnit(precision));\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime's week date\n   * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n   * @return {string}\n   */\n  toISOWeekDate() {\n    return toTechFormat(this, \"kkkk-'W'WW-c\");\n  }\n\n  /**\n   * Returns an ISO 8601-compliant string representation of this DateTime's time component\n   * @param {Object} opts - options\n   * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n   * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.extendedZone=true] - add the time zone format extension\n   * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n   * @param {string} [opts.format='extended'] - choose between the basic and extended format\n   * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0.\n   * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z'\n   * @example DateTime.utc().set({ hour: 7, minute: 34, second: 56 }).toISOTime({ precision: 'minute' }) //=> '07:34Z'\n   * @return {string}\n   */\n  toISOTime({\n    suppressMilliseconds = false,\n    suppressSeconds = false,\n    includeOffset = true,\n    includePrefix = false,\n    extendedZone = false,\n    format = \"extended\",\n    precision = \"milliseconds\",\n  } = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n\n    precision = normalizeUnit(precision);\n    let c = includePrefix && orderedUnits.indexOf(precision) >= 3 ? \"T\" : \"\";\n    return (\n      c +\n      toISOTime(\n        this,\n        format === \"extended\",\n        suppressSeconds,\n        suppressMilliseconds,\n        includeOffset,\n        extendedZone,\n        precision\n      )\n    );\n  }\n\n  /**\n   * Returns an RFC 2822-compatible string representation of this DateTime\n   * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n   * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n   * @return {string}\n   */\n  toRFC2822() {\n    return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT.\n   * Specifically, the string conforms to RFC 1123.\n   * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n   * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n   * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n   * @return {string}\n   */\n  toHTTP() {\n    return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in SQL Date\n   * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n   * @return {string|null}\n   */\n  toSQLDate() {\n    if (!this.isValid) {\n      return null;\n    }\n    return toISODate(this, true);\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in SQL Time\n   * @param {Object} opts - options\n   * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n   * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n   * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00'\n   * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n   * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n   * @return {string}\n   */\n  toSQLTime({ includeOffset = true, includeZone = false, includeOffsetSpace = true } = {}) {\n    let fmt = \"HH:mm:ss.SSS\";\n\n    if (includeZone || includeOffset) {\n      if (includeOffsetSpace) {\n        fmt += \" \";\n      }\n      if (includeZone) {\n        fmt += \"z\";\n      } else if (includeOffset) {\n        fmt += \"ZZ\";\n      }\n    }\n\n    return toTechFormat(this, fmt, true);\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n   * @param {Object} opts - options\n   * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n   * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n   * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n   * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n   * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n   * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n   * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n   * @return {string}\n   */\n  toSQL(opts = {}) {\n    if (!this.isValid) {\n      return null;\n    }\n\n    return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for debugging\n   * @return {string}\n   */\n  toString() {\n    return this.isValid ? this.toISO() : INVALID;\n  }\n\n  /**\n   * Returns a string representation of this DateTime appropriate for the REPL.\n   * @return {string}\n   */\n  [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n    if (this.isValid) {\n      return `DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`;\n    } else {\n      return `DateTime { Invalid, reason: ${this.invalidReason} }`;\n    }\n  }\n\n  /**\n   * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis}\n   * @return {number}\n   */\n  valueOf() {\n    return this.toMillis();\n  }\n\n  /**\n   * Returns the epoch milliseconds of this DateTime.\n   * @return {number}\n   */\n  toMillis() {\n    return this.isValid ? this.ts : NaN;\n  }\n\n  /**\n   * Returns the epoch seconds (including milliseconds in the fractional part) of this DateTime.\n   * @return {number}\n   */\n  toSeconds() {\n    return this.isValid ? this.ts / 1000 : NaN;\n  }\n\n  /**\n   * Returns the epoch seconds (as a whole number) of this DateTime.\n   * @return {number}\n   */\n  toUnixInteger() {\n    return this.isValid ? Math.floor(this.ts / 1000) : NaN;\n  }\n\n  /**\n   * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n   * @return {string}\n   */\n  toJSON() {\n    return this.toISO();\n  }\n\n  /**\n   * Returns a BSON serializable equivalent to this DateTime.\n   * @return {Date}\n   */\n  toBSON() {\n    return this.toJSDate();\n  }\n\n  /**\n   * Returns a JavaScript object with this DateTime's year, month, day, and so on.\n   * @param opts - options for generating the object\n   * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n   * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n   * @return {Object}\n   */\n  toObject(opts = {}) {\n    if (!this.isValid) return {};\n\n    const base = { ...this.c };\n\n    if (opts.includeConfig) {\n      base.outputCalendar = this.outputCalendar;\n      base.numberingSystem = this.loc.numberingSystem;\n      base.locale = this.loc.locale;\n    }\n    return base;\n  }\n\n  /**\n   * Returns a JavaScript Date equivalent to this DateTime.\n   * @return {Date}\n   */\n  toJSDate() {\n    return new Date(this.isValid ? this.ts : NaN);\n  }\n\n  // COMPARE\n\n  /**\n   * Return the difference between two DateTimes as a Duration.\n   * @param {DateTime} otherDateTime - the DateTime to compare this one to\n   * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n   * @param {Object} opts - options that affect the creation of the Duration\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @example\n   * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n   *     i2 = DateTime.fromISO('1983-10-14T10:30');\n   * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n   * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n   * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n   * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n   * @return {Duration}\n   */\n  diff(otherDateTime, unit = \"milliseconds\", opts = {}) {\n    if (!this.isValid || !otherDateTime.isValid) {\n      return Duration.invalid(\"created by diffing an invalid DateTime\");\n    }\n\n    const durOpts = { locale: this.locale, numberingSystem: this.numberingSystem, ...opts };\n\n    const units = maybeArray(unit).map(Duration.normalizeUnit),\n      otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n      earlier = otherIsLater ? this : otherDateTime,\n      later = otherIsLater ? otherDateTime : this,\n      diffed = diff(earlier, later, units, durOpts);\n\n    return otherIsLater ? diffed.negate() : diffed;\n  }\n\n  /**\n   * Return the difference between this DateTime and right now.\n   * See {@link DateTime#diff}\n   * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n   * @param {Object} opts - options that affect the creation of the Duration\n   * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n   * @return {Duration}\n   */\n  diffNow(unit = \"milliseconds\", opts = {}) {\n    return this.diff(DateTime.now(), unit, opts);\n  }\n\n  /**\n   * Return an Interval spanning between this DateTime and another DateTime\n   * @param {DateTime} otherDateTime - the other end point of the Interval\n   * @return {Interval|DateTime}\n   */\n  until(otherDateTime) {\n    return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n  }\n\n  /**\n   * Return whether this DateTime is in the same unit of time as another DateTime.\n   * Higher-order units must also be identical for this function to return `true`.\n   * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed.\n   * @param {DateTime} otherDateTime - the other DateTime\n   * @param {string} unit - the unit of time to check sameness on\n   * @param {Object} opts - options\n   * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; only the locale of this DateTime is used\n   * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day\n   * @return {boolean}\n   */\n  hasSame(otherDateTime, unit, opts) {\n    if (!this.isValid) return false;\n\n    const inputMs = otherDateTime.valueOf();\n    const adjustedToZone = this.setZone(otherDateTime.zone, { keepLocalTime: true });\n    return (\n      adjustedToZone.startOf(unit, opts) <= inputMs && inputMs <= adjustedToZone.endOf(unit, opts)\n    );\n  }\n\n  /**\n   * Equality check\n   * Two DateTimes are equal if and only if they represent the same millisecond, have the same zone and location, and are both valid.\n   * To compare just the millisecond values, use `+dt1 === +dt2`.\n   * @param {DateTime} other - the other DateTime\n   * @return {boolean}\n   */\n  equals(other) {\n    return (\n      this.isValid &&\n      other.isValid &&\n      this.valueOf() === other.valueOf() &&\n      this.zone.equals(other.zone) &&\n      this.loc.equals(other.loc)\n    );\n  }\n\n  /**\n   * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n   * platform supports Intl.RelativeTimeFormat. Rounds towards zero by default.\n   * @param {Object} options - options that affect the output\n   * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n   * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n   * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n   * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n   * @param {string} [options.rounding=\"trunc\"] - rounding method to use when rounding the numbers in the output. Can be \"trunc\" (toward zero), \"expand\" (away from zero), \"round\", \"floor\", or \"ceil\".\n   * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n   * @param {string} options.locale - override the locale of this DateTime\n   * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n   * @example DateTime.now().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n   * @example DateTime.now().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n   * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n   * @example DateTime.now().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n   * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n   * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n   */\n  toRelative(options = {}) {\n    if (!this.isValid) return null;\n    const base = options.base || DateTime.fromObject({}, { zone: this.zone }),\n      padding = options.padding ? (this < base ? -options.padding : options.padding) : 0;\n    let units = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\n    let unit = options.unit;\n    if (Array.isArray(options.unit)) {\n      units = options.unit;\n      unit = undefined;\n    }\n    return diffRelative(base, this.plus(padding), {\n      ...options,\n      numeric: \"always\",\n      units,\n      unit,\n    });\n  }\n\n  /**\n   * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n   * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n   * @param {Object} options - options that affect the output\n   * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n   * @param {string} options.locale - override the locale of this DateTime\n   * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n   * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n   * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n   * @example DateTime.now().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n   * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n   * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n   */\n  toRelativeCalendar(options = {}) {\n    if (!this.isValid) return null;\n\n    return diffRelative(options.base || DateTime.fromObject({}, { zone: this.zone }), this, {\n      ...options,\n      numeric: \"auto\",\n      units: [\"years\", \"months\", \"days\"],\n      calendary: true,\n    });\n  }\n\n  /**\n   * Return the min of several date times\n   * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n   * @return {DateTime} the min DateTime, or undefined if called with no argument\n   */\n  static min(...dateTimes) {\n    if (!dateTimes.every(DateTime.isDateTime)) {\n      throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n    }\n    return bestBy(dateTimes, (i) => i.valueOf(), Math.min);\n  }\n\n  /**\n   * Return the max of several date times\n   * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n   * @return {DateTime} the max DateTime, or undefined if called with no argument\n   */\n  static max(...dateTimes) {\n    if (!dateTimes.every(DateTime.isDateTime)) {\n      throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n    }\n    return bestBy(dateTimes, (i) => i.valueOf(), Math.max);\n  }\n\n  // MISC\n\n  /**\n   * Explain how a string would be parsed by fromFormat()\n   * @param {string} text - the string to parse\n   * @param {string} fmt - the format the string is expected to be in (see description)\n   * @param {Object} options - options taken by fromFormat()\n   * @return {Object}\n   */\n  static fromFormatExplain(text, fmt, options = {}) {\n    const { locale = null, numberingSystem = null } = options,\n      localeToUse = Locale.fromOpts({\n        locale,\n        numberingSystem,\n        defaultToEN: true,\n      });\n    return explainFromTokens(localeToUse, text, fmt);\n  }\n\n  /**\n   * @deprecated use fromFormatExplain instead\n   */\n  static fromStringExplain(text, fmt, options = {}) {\n    return DateTime.fromFormatExplain(text, fmt, options);\n  }\n\n  /**\n   * Build a parser for `fmt` using the given locale. This parser can be passed\n   * to {@link DateTime.fromFormatParser} to a parse a date in this format. This\n   * can be used to optimize cases where many dates need to be parsed in a\n   * specific format.\n   *\n   * @param {String} fmt - the format the string is expected to be in (see\n   * description)\n   * @param {Object} options - options used to set locale and numberingSystem\n   * for parser\n   * @returns {TokenParser} - opaque object to be used\n   */\n  static buildFormatParser(fmt, options = {}) {\n    const { locale = null, numberingSystem = null } = options,\n      localeToUse = Locale.fromOpts({\n        locale,\n        numberingSystem,\n        defaultToEN: true,\n      });\n    return new TokenParser(localeToUse, fmt);\n  }\n\n  /**\n   * Create a DateTime from an input string and format parser.\n   *\n   * The format parser must have been created with the same locale as this call.\n   *\n   * @param {String} text - the string to parse\n   * @param {TokenParser} formatParser - parser from {@link DateTime.buildFormatParser}\n   * @param {Object} opts - options taken by fromFormat()\n   * @returns {DateTime}\n   */\n  static fromFormatParser(text, formatParser, opts = {}) {\n    if (isUndefined(text) || isUndefined(formatParser)) {\n      throw new InvalidArgumentError(\n        \"fromFormatParser requires an input string and a format parser\"\n      );\n    }\n    const { locale = null, numberingSystem = null } = opts,\n      localeToUse = Locale.fromOpts({\n        locale,\n        numberingSystem,\n        defaultToEN: true,\n      });\n\n    if (!localeToUse.equals(formatParser.locale)) {\n      throw new InvalidArgumentError(\n        `fromFormatParser called with a locale of ${localeToUse}, ` +\n          `but the format parser was created for ${formatParser.locale}`\n      );\n    }\n\n    const { result, zone, specificOffset, invalidReason } = formatParser.explainFromTokens(text);\n\n    if (invalidReason) {\n      return DateTime.invalid(invalidReason);\n    } else {\n      return parseDataToDateTime(\n        result,\n        zone,\n        opts,\n        `format ${formatParser.format}`,\n        text,\n        specificOffset\n      );\n    }\n  }\n\n  // FORMAT PRESETS\n\n  /**\n   * {@link DateTime#toLocaleString} format like 10/14/1983\n   * @type {Object}\n   */\n  static get DATE_SHORT() {\n    return Formats.DATE_SHORT;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Oct 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_MED() {\n    return Formats.DATE_MED;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_MED_WITH_WEEKDAY() {\n    return Formats.DATE_MED_WITH_WEEKDAY;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'October 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_FULL() {\n    return Formats.DATE_FULL;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983'\n   * @type {Object}\n   */\n  static get DATE_HUGE() {\n    return Formats.DATE_HUGE;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_SIMPLE() {\n    return Formats.TIME_SIMPLE;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_WITH_SECONDS() {\n    return Formats.TIME_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_WITH_SHORT_OFFSET() {\n    return Formats.TIME_WITH_SHORT_OFFSET;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get TIME_WITH_LONG_OFFSET() {\n    return Formats.TIME_WITH_LONG_OFFSET;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_SIMPLE() {\n    return Formats.TIME_24_SIMPLE;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_WITH_SECONDS() {\n    return Formats.TIME_24_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_WITH_SHORT_OFFSET() {\n    return Formats.TIME_24_WITH_SHORT_OFFSET;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n   * @type {Object}\n   */\n  static get TIME_24_WITH_LONG_OFFSET() {\n    return Formats.TIME_24_WITH_LONG_OFFSET;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_SHORT() {\n    return Formats.DATETIME_SHORT;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_SHORT_WITH_SECONDS() {\n    return Formats.DATETIME_SHORT_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_MED() {\n    return Formats.DATETIME_MED;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_MED_WITH_SECONDS() {\n    return Formats.DATETIME_MED_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_MED_WITH_WEEKDAY() {\n    return Formats.DATETIME_MED_WITH_WEEKDAY;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_FULL() {\n    return Formats.DATETIME_FULL;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_FULL_WITH_SECONDS() {\n    return Formats.DATETIME_FULL_WITH_SECONDS;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_HUGE() {\n    return Formats.DATETIME_HUGE;\n  }\n\n  /**\n   * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n   * @type {Object}\n   */\n  static get DATETIME_HUGE_WITH_SECONDS() {\n    return Formats.DATETIME_HUGE_WITH_SECONDS;\n  }\n}\n\n/**\n * @private\n */\nexport function friendlyDateTime(dateTimeish) {\n  if (DateTime.isDateTime(dateTimeish)) {\n    return dateTimeish;\n  } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n    return DateTime.fromJSDate(dateTimeish);\n  } else if (dateTimeish && typeof dateTimeish === \"object\") {\n    return DateTime.fromObject(dateTimeish);\n  } else {\n    throw new InvalidArgumentError(\n      `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`\n    );\n  }\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nexport default dispatch;\n","var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n  return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","export default function(event) {\n  let sourceEvent;\n  while (sourceEvent = event.sourceEvent) event = sourceEvent;\n  return event;\n}\n","export interface Config {\n  destination?: string;\n  rootElement?: string;\n}\n\nlet _config: Config = {};\n\n// This will be removed in next major, don't use this outside the package!\nlet _configSet = false;\n\nexport function setConfig(config: Config) {\n  _config = config;\n  _configSet = true;\n}\n\nexport { _config as config, _configSet };\n","export function assertNonEmptyArray(arr, message) {\n    if (arr.length === 0) {\n        throw new Error(message || \"Expected a non-empty array\");\n    }\n}\nexport function assertArrayHasExactly2(arr, message) {\n    if (arr.length !== 2) {\n        throw new Error(message || \"Expected an array with exactly 2 items\");\n    }\n}\nexport function assertArrayHasExactly1(arr, message) {\n    if (arr.length !== 1) {\n        throw new Error(message || \"Expected an array with exactly 1 item\");\n    }\n}\nexport function assertArrayHasAtLeast2(arr, message) {\n    if (arr.length < 2) {\n        throw new Error(message || \"Expected an array with at least 2 items\");\n    }\n}\nexport function isNonEmptyArray(arr) {\n    return arr.length > 0;\n}\nexport function isArrayWithAtLeast2(arr) {\n    return arr.length >= 2;\n}\nexport function isArrayWithAtLeast3(arr) {\n    return arr.length >= 3;\n}\nexport function isArrayWithExactly1(arr) {\n    return arr.length === 1;\n}\nexport function isArrayWithExactly2(arr) {\n    return arr.length === 2;\n}\nexport function isArrayWithExactly3(arr) {\n    return arr.length === 3;\n}\n/**\n * type-safe version of `arr[arr.length - 1]`\n * @param arr a non empty array\n * @returns the last element of the array\n */\nexport const lastNonEmpty = (arr) => arr[arr.length - 1];\n",null,null,null,null,null,"/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsIconSizeValues {\n  Sixteen = '16',\n  TwentyFour = '24',\n}\n\nexport type HdsIconSizes = `${HdsIconSizeValues}`;\n\nexport enum HdsIconColorValues {\n  Primary = 'primary',\n  Strong = 'strong',\n  Faint = 'faint',\n  Disabled = 'disabled',\n  HighContrast = 'high-contrast',\n  Action = 'action',\n  ActionHover = 'action-hover',\n  ActionActive = 'action-active',\n  Highlight = 'highlight',\n  HighlightOnSurface = 'highlight-on-surface',\n  HighlightHighContrast = 'highlight-high-contrast',\n  Success = 'success',\n  SuccessOnSurface = 'success-on-surface',\n  SuccessHighContrast = 'success-high-contrast',\n  Warning = 'warning',\n  WarningOnSurface = 'warning-on-surface',\n  WarningHighContrast = 'warning-high-contrast',\n  Critical = 'critical',\n  CriticalOnSurface = 'critical-on-surface',\n  CriticalHighContrast = 'critical-high-contrast',\n}\nexport type HdsIconColors = `${HdsIconColorValues}`;\n","/**\n * Diff Match and Patch\n * Copyright 2018 The diff-match-patch Authors.\n * https://github.com/google/diff-match-patch\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * 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,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Computes the difference between two texts to create a patch.\n * Applies the patch onto another text, allowing for errors.\n * @author fraser@google.com (Neil Fraser)\n */\n\n/**\n * Class containing the diff, match and patch methods.\n * @constructor\n */\nexport const diff_match_patch = function() {\n\n  // Defaults.\n  // Redefine these in your program to override the defaults.\n\n  // Number of seconds to map a diff before giving up (0 for infinity).\n  this.Diff_Timeout = 1.0;\n  // Cost of an empty edit operation in terms of edit characters.\n  this.Diff_EditCost = 4;\n  // At what point is no match declared (0.0 = perfection, 1.0 = very loose).\n  this.Match_Threshold = 0.5;\n  // How far to search for a match (0 = exact location, 1000+ = broad match).\n  // A match this many characters away from the expected location will add\n  // 1.0 to the score (0.0 is a perfect match).\n  this.Match_Distance = 1000;\n  // When deleting a large block of text (over ~64 characters), how close do\n  // the contents have to be to match the expected contents. (0.0 = perfection,\n  // 1.0 = very loose).  Note that Match_Threshold controls how closely the\n  // end points of a delete need to match.\n  this.Patch_DeleteThreshold = 0.5;\n  // Chunk size for context length.\n  this.Patch_Margin = 4;\n\n  // The number of bits in an int.\n  this.Match_MaxBits = 32;\n};\n\n\n//  DIFF FUNCTIONS\n\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nexport const DIFF_DELETE = -1;\nexport const DIFF_INSERT = 1;\nexport const DIFF_EQUAL = 0;\n\n/**\n * Class representing one diff tuple.\n * Attempts to look like a two-element array (which is what this used to be).\n * @param {number} op Operation, one of: DIFF_DELETE, DIFF_INSERT, DIFF_EQUAL.\n * @param {string} text Text to be deleted, inserted, or retained.\n * @constructor\n */\ndiff_match_patch.Diff = function(op, text) {\n  this[0] = op;\n  this[1] = text;\n};\n\ndiff_match_patch.Diff.prototype.length = 2;\n\n/**\n * Emulate the output of a two-element array.\n * @return {string} Diff operation as a string.\n */\ndiff_match_patch.Diff.prototype.toString = function() {\n  return this[0] + ',' + this[1];\n};\n\n/**\n * Provide an iterable instance on a Diff object.\n *\n * While it's not intended that the Diff be iterated,\n * this instance is useful for destructuring assignment.\n *\n * Example:\n *\n *     const diff = new diff_match_patch.Diff(DIFF_EQUAL, 'hello');\n *     const [op, text] = diff;\n */\ndiff_match_patch.Diff.prototype[Symbol.iterator] = function*() {\n  yield this[0];\n  yield this[1];\n}\n\n/**\n * Find the differences between two texts.  Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {boolean=} opt_checklines Optional speedup flag. If present and false,\n *     then don't run a line-level diff first to identify the changed areas.\n *     Defaults to true, which does a faster, slightly less optimal diff.\n * @param {number=} opt_deadline Optional time when the diff should be complete\n *     by.  Used internally for recursive calls.  Users should set DiffTimeout\n *     instead.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_main = function(text1, text2, opt_checklines,\n    opt_deadline) {\n  // Set a deadline by which time the diff must be complete.\n  if (typeof opt_deadline == 'undefined') {\n    if (this.Diff_Timeout <= 0) {\n      opt_deadline = Number.MAX_VALUE;\n    } else {\n      opt_deadline = (new Date).getTime() + this.Diff_Timeout * 1000;\n    }\n  }\n  var deadline = opt_deadline;\n\n  // Check for null inputs.\n  if (text1 == null || text2 == null) {\n    throw new Error('Null input. (diff_main)');\n  }\n\n  // Check for equality (speedup).\n  if (text1 == text2) {\n    if (text1) {\n      return [new diff_match_patch.Diff(DIFF_EQUAL, text1)];\n    }\n    return [];\n  }\n\n  if (typeof opt_checklines == 'undefined') {\n    opt_checklines = true;\n  }\n  var checklines = opt_checklines;\n\n  // Trim off common prefix (speedup).\n  var commonlength = this.diff_commonPrefix(text1, text2);\n  var commonprefix = text1.substring(0, commonlength);\n  text1 = text1.substring(commonlength);\n  text2 = text2.substring(commonlength);\n\n  // Trim off common suffix (speedup).\n  commonlength = this.diff_commonSuffix(text1, text2);\n  var commonsuffix = text1.substring(text1.length - commonlength);\n  text1 = text1.substring(0, text1.length - commonlength);\n  text2 = text2.substring(0, text2.length - commonlength);\n\n  // Compute the diff on the middle block.\n  var diffs = this.diff_compute_(text1, text2, checklines, deadline);\n\n  // Restore the prefix and suffix.\n  if (commonprefix) {\n    diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, commonprefix));\n  }\n  if (commonsuffix) {\n    diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, commonsuffix));\n  }\n  this.diff_cleanupMerge(diffs);\n  return diffs;\n};\n\n\n/**\n * Find the differences between two texts.  Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {boolean} checklines Speedup flag.  If false, then don't run a\n *     line-level diff first to identify the changed areas.\n *     If true, then run a faster, slightly less optimal diff.\n * @param {number} deadline Time when the diff should be complete by.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_compute_ = function(text1, text2, checklines,\n    deadline) {\n  var diffs;\n\n  if (!text1) {\n    // Just add some text (speedup).\n    return [new diff_match_patch.Diff(DIFF_INSERT, text2)];\n  }\n\n  if (!text2) {\n    // Just delete some text (speedup).\n    return [new diff_match_patch.Diff(DIFF_DELETE, text1)];\n  }\n\n  var longtext = text1.length > text2.length ? text1 : text2;\n  var shorttext = text1.length > text2.length ? text2 : text1;\n  var i = longtext.indexOf(shorttext);\n  if (i != -1) {\n    // Shorter text is inside the longer text (speedup).\n    diffs = [new diff_match_patch.Diff(DIFF_INSERT, longtext.substring(0, i)),\n             new diff_match_patch.Diff(DIFF_EQUAL, shorttext),\n             new diff_match_patch.Diff(DIFF_INSERT,\n                 longtext.substring(i + shorttext.length))];\n    // Swap insertions for deletions if diff is reversed.\n    if (text1.length > text2.length) {\n      diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n    }\n    return diffs;\n  }\n\n  if (shorttext.length == 1) {\n    // Single character string.\n    // After the previous speedup, the character can't be an equality.\n    return [new diff_match_patch.Diff(DIFF_DELETE, text1),\n            new diff_match_patch.Diff(DIFF_INSERT, text2)];\n  }\n\n  // Check to see if the problem can be split in two.\n  var hm = this.diff_halfMatch_(text1, text2);\n  if (hm) {\n    // A half-match was found, sort out the return data.\n    var text1_a = hm[0];\n    var text1_b = hm[1];\n    var text2_a = hm[2];\n    var text2_b = hm[3];\n    var mid_common = hm[4];\n    // Send both pairs off for separate processing.\n    var diffs_a = this.diff_main(text1_a, text2_a, checklines, deadline);\n    var diffs_b = this.diff_main(text1_b, text2_b, checklines, deadline);\n    // Merge the results.\n    return diffs_a.concat([new diff_match_patch.Diff(DIFF_EQUAL, mid_common)],\n                          diffs_b);\n  }\n\n  if (checklines && text1.length > 100 && text2.length > 100) {\n    return this.diff_lineMode_(text1, text2, deadline);\n  }\n\n  return this.diff_bisect_(text1, text2, deadline);\n};\n\n\n/**\n * Do a quick line-level diff on both strings, then rediff the parts for\n * greater accuracy.\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} deadline Time when the diff should be complete by.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_lineMode_ = function(text1, text2, deadline) {\n  // Scan the text on a line-by-line basis first.\n  var a = this.diff_linesToChars_(text1, text2);\n  text1 = a.chars1;\n  text2 = a.chars2;\n  var linearray = a.lineArray;\n\n  var diffs = this.diff_main(text1, text2, false, deadline);\n\n  // Convert the diff back to original text.\n  this.diff_charsToLines_(diffs, linearray);\n  // Eliminate freak matches (e.g. blank lines)\n  this.diff_cleanupSemantic(diffs);\n\n  // Rediff any replacement blocks, this time character-by-character.\n  // Add a dummy entry at the end.\n  diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, ''));\n  var pointer = 0;\n  var count_delete = 0;\n  var count_insert = 0;\n  var text_delete = '';\n  var text_insert = '';\n  while (pointer < diffs.length) {\n    switch (diffs[pointer][0]) {\n      case DIFF_INSERT:\n        count_insert++;\n        text_insert += diffs[pointer][1];\n        break;\n      case DIFF_DELETE:\n        count_delete++;\n        text_delete += diffs[pointer][1];\n        break;\n      case DIFF_EQUAL:\n        // Upon reaching an equality, check for prior redundancies.\n        if (count_delete >= 1 && count_insert >= 1) {\n          // Delete the offending records and add the merged ones.\n          diffs.splice(pointer - count_delete - count_insert,\n                       count_delete + count_insert);\n          pointer = pointer - count_delete - count_insert;\n          var subDiff =\n              this.diff_main(text_delete, text_insert, false, deadline);\n          for (var j = subDiff.length - 1; j >= 0; j--) {\n            diffs.splice(pointer, 0, subDiff[j]);\n          }\n          pointer = pointer + subDiff.length;\n        }\n        count_insert = 0;\n        count_delete = 0;\n        text_delete = '';\n        text_insert = '';\n        break;\n    }\n    pointer++;\n  }\n  diffs.pop();  // Remove the dummy entry at the end.\n\n  return diffs;\n};\n\n\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} deadline Time at which to bail if not yet complete.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_bisect_ = function(text1, text2, deadline) {\n  // Cache the text lengths to prevent multiple calls.\n  var text1_length = text1.length;\n  var text2_length = text2.length;\n  var max_d = Math.ceil((text1_length + text2_length) / 2);\n  var v_offset = max_d;\n  var v_length = 2 * max_d;\n  var v1 = new Array(v_length);\n  var v2 = new Array(v_length);\n  // Setting all elements to -1 is faster in Chrome & Firefox than mixing\n  // integers and undefined.\n  for (var x = 0; x < v_length; x++) {\n    v1[x] = -1;\n    v2[x] = -1;\n  }\n  v1[v_offset + 1] = 0;\n  v2[v_offset + 1] = 0;\n  var delta = text1_length - text2_length;\n  // If the total number of characters is odd, then the front path will collide\n  // with the reverse path.\n  var front = (delta % 2 != 0);\n  // Offsets for start and end of k loop.\n  // Prevents mapping of space beyond the grid.\n  var k1start = 0;\n  var k1end = 0;\n  var k2start = 0;\n  var k2end = 0;\n  for (var d = 0; d < max_d; d++) {\n    // Bail out if deadline is reached.\n    if ((new Date()).getTime() > deadline) {\n      break;\n    }\n\n    // Walk the front path one step.\n    for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n      var k1_offset = v_offset + k1;\n      var x1;\n      if (k1 == -d || (k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1])) {\n        x1 = v1[k1_offset + 1];\n      } else {\n        x1 = v1[k1_offset - 1] + 1;\n      }\n      var y1 = x1 - k1;\n      while (x1 < text1_length && y1 < text2_length &&\n             text1.charAt(x1) == text2.charAt(y1)) {\n        x1++;\n        y1++;\n      }\n      v1[k1_offset] = x1;\n      if (x1 > text1_length) {\n        // Ran off the right of the graph.\n        k1end += 2;\n      } else if (y1 > text2_length) {\n        // Ran off the bottom of the graph.\n        k1start += 2;\n      } else if (front) {\n        var k2_offset = v_offset + delta - k1;\n        if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) {\n          // Mirror x2 onto top-left coordinate system.\n          var x2 = text1_length - v2[k2_offset];\n          if (x1 >= x2) {\n            // Overlap detected.\n            return this.diff_bisectSplit_(text1, text2, x1, y1, deadline);\n          }\n        }\n      }\n    }\n\n    // Walk the reverse path one step.\n    for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n      var k2_offset = v_offset + k2;\n      var x2;\n      if (k2 == -d || (k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1])) {\n        x2 = v2[k2_offset + 1];\n      } else {\n        x2 = v2[k2_offset - 1] + 1;\n      }\n      var y2 = x2 - k2;\n      while (x2 < text1_length && y2 < text2_length &&\n             text1.charAt(text1_length - x2 - 1) ==\n             text2.charAt(text2_length - y2 - 1)) {\n        x2++;\n        y2++;\n      }\n      v2[k2_offset] = x2;\n      if (x2 > text1_length) {\n        // Ran off the left of the graph.\n        k2end += 2;\n      } else if (y2 > text2_length) {\n        // Ran off the top of the graph.\n        k2start += 2;\n      } else if (!front) {\n        var k1_offset = v_offset + delta - k2;\n        if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) {\n          var x1 = v1[k1_offset];\n          var y1 = v_offset + x1 - k1_offset;\n          // Mirror x2 onto top-left coordinate system.\n          x2 = text1_length - x2;\n          if (x1 >= x2) {\n            // Overlap detected.\n            return this.diff_bisectSplit_(text1, text2, x1, y1, deadline);\n          }\n        }\n      }\n    }\n  }\n  // Diff took too long and hit the deadline or\n  // number of diffs equals number of characters, no commonality at all.\n  return [new diff_match_patch.Diff(DIFF_DELETE, text1),\n          new diff_match_patch.Diff(DIFF_INSERT, text2)];\n};\n\n\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @param {number} deadline Time at which to bail if not yet complete.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_bisectSplit_ = function(text1, text2, x, y,\n    deadline) {\n  var text1a = text1.substring(0, x);\n  var text2a = text2.substring(0, y);\n  var text1b = text1.substring(x);\n  var text2b = text2.substring(y);\n\n  // Compute both diffs serially.\n  var diffs = this.diff_main(text1a, text2a, false, deadline);\n  var diffsb = this.diff_main(text1b, text2b, false, deadline);\n\n  return diffs.concat(diffsb);\n};\n\n\n/**\n * Split two texts into an array of strings.  Reduce the texts to a string of\n * hashes where each Unicode character represents one line.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {{chars1: string, chars2: string, lineArray: !Array.<string>}}\n *     An object containing the encoded text1, the encoded text2 and\n *     the array of unique strings.\n *     The zeroth element of the array of unique strings is intentionally blank.\n * @private\n */\ndiff_match_patch.prototype.diff_linesToChars_ = function(text1, text2) {\n  var lineArray = [];  // e.g. lineArray[4] == 'Hello\\n'\n  var lineHash = {};   // e.g. lineHash['Hello\\n'] == 4\n\n  // '\\x00' is a valid character, but various debuggers don't like it.\n  // So we'll insert a junk entry to avoid generating a null character.\n  lineArray[0] = '';\n\n  /**\n   * Split a text into an array of strings.  Reduce the texts to a string of\n   * hashes where each Unicode character represents one line.\n   * Modifies linearray and linehash through being a closure.\n   * @param {string} text String to encode.\n   * @return {string} Encoded string.\n   * @private\n   */\n  function diff_linesToCharsMunge_(text) {\n    var chars = '';\n    // Walk the text, pulling out a substring for each line.\n    // text.split('\\n') would would temporarily double our memory footprint.\n    // Modifying text would create many large strings to garbage collect.\n    var lineStart = 0;\n    var lineEnd = -1;\n    // Keeping our own length variable is faster than looking it up.\n    var lineArrayLength = lineArray.length;\n    while (lineEnd < text.length - 1) {\n      lineEnd = text.indexOf('\\n', lineStart);\n      if (lineEnd == -1) {\n        lineEnd = text.length - 1;\n      }\n      var line = text.substring(lineStart, lineEnd + 1);\n\n      if (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) :\n          (lineHash[line] !== undefined)) {\n        chars += String.fromCharCode(lineHash[line]);\n      } else {\n        if (lineArrayLength == maxLines) {\n          // Bail out at 65535 because\n          // String.fromCharCode(65536) == String.fromCharCode(0)\n          line = text.substring(lineStart);\n          lineEnd = text.length;\n        }\n        chars += String.fromCharCode(lineArrayLength);\n        lineHash[line] = lineArrayLength;\n        lineArray[lineArrayLength++] = line;\n      }\n      lineStart = lineEnd + 1;\n    }\n    return chars;\n  }\n  // Allocate 2/3rds of the space for text1, the rest for text2.\n  var maxLines = 40000;\n  var chars1 = diff_linesToCharsMunge_(text1);\n  maxLines = 65535;\n  var chars2 = diff_linesToCharsMunge_(text2);\n  return {chars1: chars1, chars2: chars2, lineArray: lineArray};\n};\n\n\n/**\n * Rehydrate the text in a diff from a string of line hashes to real lines of\n * text.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @param {!Array.<string>} lineArray Array of unique strings.\n * @private\n */\ndiff_match_patch.prototype.diff_charsToLines_ = function(diffs, lineArray) {\n  for (var i = 0; i < diffs.length; i++) {\n    var chars = diffs[i][1];\n    var text = [];\n    for (var j = 0; j < chars.length; j++) {\n      text[j] = lineArray[chars.charCodeAt(j)];\n    }\n    diffs[i][1] = text.join('');\n  }\n};\n\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n *     string.\n */\ndiff_match_patch.prototype.diff_commonPrefix = function(text1, text2) {\n  // Quick check for common null cases.\n  if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {\n    return 0;\n  }\n  // Binary search.\n  // Performance analysis: https://neil.fraser.name/news/2007/10/09/\n  var pointermin = 0;\n  var pointermax = Math.min(text1.length, text2.length);\n  var pointermid = pointermax;\n  var pointerstart = 0;\n  while (pointermin < pointermid) {\n    if (text1.substring(pointerstart, pointermid) ==\n        text2.substring(pointerstart, pointermid)) {\n      pointermin = pointermid;\n      pointerstart = pointermin;\n    } else {\n      pointermax = pointermid;\n    }\n    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n  }\n  return pointermid;\n};\n\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\ndiff_match_patch.prototype.diff_commonSuffix = function(text1, text2) {\n  // Quick check for common null cases.\n  if (!text1 || !text2 ||\n      text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) {\n    return 0;\n  }\n  // Binary search.\n  // Performance analysis: https://neil.fraser.name/news/2007/10/09/\n  var pointermin = 0;\n  var pointermax = Math.min(text1.length, text2.length);\n  var pointermid = pointermax;\n  var pointerend = 0;\n  while (pointermin < pointermid) {\n    if (text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n        text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n      pointermin = pointermid;\n      pointerend = pointermin;\n    } else {\n      pointermax = pointermid;\n    }\n    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n  }\n  return pointermid;\n};\n\n\n/**\n * Determine if the suffix of one string is the prefix of another.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of the first\n *     string and the start of the second string.\n * @private\n */\ndiff_match_patch.prototype.diff_commonOverlap_ = function(text1, text2) {\n  // Cache the text lengths to prevent multiple calls.\n  var text1_length = text1.length;\n  var text2_length = text2.length;\n  // Eliminate the null case.\n  if (text1_length == 0 || text2_length == 0) {\n    return 0;\n  }\n  // Truncate the longer string.\n  if (text1_length > text2_length) {\n    text1 = text1.substring(text1_length - text2_length);\n  } else if (text1_length < text2_length) {\n    text2 = text2.substring(0, text1_length);\n  }\n  var text_length = Math.min(text1_length, text2_length);\n  // Quick check for the worst case.\n  if (text1 == text2) {\n    return text_length;\n  }\n\n  // Start by looking for a single character match\n  // and increase length until no match is found.\n  // Performance analysis: https://neil.fraser.name/news/2010/11/04/\n  var best = 0;\n  var length = 1;\n  while (true) {\n    var pattern = text1.substring(text_length - length);\n    var found = text2.indexOf(pattern);\n    if (found == -1) {\n      return best;\n    }\n    length += found;\n    if (found == 0 || text1.substring(text_length - length) ==\n        text2.substring(0, length)) {\n      best = length;\n      length++;\n    }\n  }\n};\n\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.<string>} Five element Array, containing the prefix of\n *     text1, the suffix of text1, the prefix of text2, the suffix of\n *     text2 and the common middle.  Or null if there was no match.\n * @private\n */\ndiff_match_patch.prototype.diff_halfMatch_ = function(text1, text2) {\n  if (this.Diff_Timeout <= 0) {\n    // Don't risk returning a non-optimal diff if we have unlimited time.\n    return null;\n  }\n  var longtext = text1.length > text2.length ? text1 : text2;\n  var shorttext = text1.length > text2.length ? text2 : text1;\n  if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n    return null;  // Pointless.\n  }\n  var dmp = this;  // 'this' becomes 'window' in a closure.\n\n  /**\n   * Does a substring of shorttext exist within longtext such that the substring\n   * is at least half the length of longtext?\n   * Closure, but does not reference any external variables.\n   * @param {string} longtext Longer string.\n   * @param {string} shorttext Shorter string.\n   * @param {number} i Start index of quarter length substring within longtext.\n   * @return {Array.<string>} Five element Array, containing the prefix of\n   *     longtext, the suffix of longtext, the prefix of shorttext, the suffix\n   *     of shorttext and the common middle.  Or null if there was no match.\n   * @private\n   */\n  function diff_halfMatchI_(longtext, shorttext, i) {\n    // Start with a 1/4 length substring at position i as a seed.\n    var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n    var j = -1;\n    var best_common = '';\n    var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n    while ((j = shorttext.indexOf(seed, j + 1)) != -1) {\n      var prefixLength = dmp.diff_commonPrefix(longtext.substring(i),\n                                               shorttext.substring(j));\n      var suffixLength = dmp.diff_commonSuffix(longtext.substring(0, i),\n                                               shorttext.substring(0, j));\n      if (best_common.length < suffixLength + prefixLength) {\n        best_common = shorttext.substring(j - suffixLength, j) +\n            shorttext.substring(j, j + prefixLength);\n        best_longtext_a = longtext.substring(0, i - suffixLength);\n        best_longtext_b = longtext.substring(i + prefixLength);\n        best_shorttext_a = shorttext.substring(0, j - suffixLength);\n        best_shorttext_b = shorttext.substring(j + prefixLength);\n      }\n    }\n    if (best_common.length * 2 >= longtext.length) {\n      return [best_longtext_a, best_longtext_b,\n              best_shorttext_a, best_shorttext_b, best_common];\n    } else {\n      return null;\n    }\n  }\n\n  // First check if the second quarter is the seed for a half-match.\n  var hm1 = diff_halfMatchI_(longtext, shorttext,\n                             Math.ceil(longtext.length / 4));\n  // Check again based on the third quarter.\n  var hm2 = diff_halfMatchI_(longtext, shorttext,\n                             Math.ceil(longtext.length / 2));\n  var hm;\n  if (!hm1 && !hm2) {\n    return null;\n  } else if (!hm2) {\n    hm = hm1;\n  } else if (!hm1) {\n    hm = hm2;\n  } else {\n    // Both matched.  Select the longest.\n    hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n  }\n\n  // A half-match was found, sort out the return data.\n  var text1_a, text1_b, text2_a, text2_b;\n  if (text1.length > text2.length) {\n    text1_a = hm[0];\n    text1_b = hm[1];\n    text2_a = hm[2];\n    text2_b = hm[3];\n  } else {\n    text2_a = hm[0];\n    text2_b = hm[1];\n    text1_a = hm[2];\n    text1_b = hm[3];\n  }\n  var mid_common = hm[4];\n  return [text1_a, text1_b, text2_a, text2_b, mid_common];\n};\n\n\n/**\n * Reduce the number of edits by eliminating semantically trivial equalities.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupSemantic = function(diffs) {\n  var changes = false;\n  var equalities = [];  // Stack of indices where equalities are found.\n  var equalitiesLength = 0;  // Keeping our own length var is faster in JS.\n  /** @type {?string} */\n  var lastEquality = null;\n  // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n  var pointer = 0;  // Index of current position.\n  // Number of characters that changed prior to the equality.\n  var length_insertions1 = 0;\n  var length_deletions1 = 0;\n  // Number of characters that changed after the equality.\n  var length_insertions2 = 0;\n  var length_deletions2 = 0;\n  while (pointer < diffs.length) {\n    if (diffs[pointer][0] == DIFF_EQUAL) {  // Equality found.\n      equalities[equalitiesLength++] = pointer;\n      length_insertions1 = length_insertions2;\n      length_deletions1 = length_deletions2;\n      length_insertions2 = 0;\n      length_deletions2 = 0;\n      lastEquality = diffs[pointer][1];\n    } else {  // An insertion or deletion.\n      if (diffs[pointer][0] == DIFF_INSERT) {\n        length_insertions2 += diffs[pointer][1].length;\n      } else {\n        length_deletions2 += diffs[pointer][1].length;\n      }\n      // Eliminate an equality that is smaller or equal to the edits on both\n      // sides of it.\n      if (lastEquality && (lastEquality.length <=\n          Math.max(length_insertions1, length_deletions1)) &&\n          (lastEquality.length <= Math.max(length_insertions2,\n                                           length_deletions2))) {\n        // Duplicate record.\n        diffs.splice(equalities[equalitiesLength - 1], 0,\n                     new diff_match_patch.Diff(DIFF_DELETE, lastEquality));\n        // Change second copy to insert.\n        diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n        // Throw away the equality we just deleted.\n        equalitiesLength--;\n        // Throw away the previous equality (it needs to be reevaluated).\n        equalitiesLength--;\n        pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n        length_insertions1 = 0;  // Reset the counters.\n        length_deletions1 = 0;\n        length_insertions2 = 0;\n        length_deletions2 = 0;\n        lastEquality = null;\n        changes = true;\n      }\n    }\n    pointer++;\n  }\n\n  // Normalize the diff.\n  if (changes) {\n    this.diff_cleanupMerge(diffs);\n  }\n  this.diff_cleanupSemanticLossless(diffs);\n\n  // Find any overlaps between deletions and insertions.\n  // e.g: <del>abcxxx</del><ins>xxxdef</ins>\n  //   -> <del>abc</del>xxx<ins>def</ins>\n  // e.g: <del>xxxabc</del><ins>defxxx</ins>\n  //   -> <ins>def</ins>xxx<del>abc</del>\n  // Only extract an overlap if it is as big as the edit ahead or behind it.\n  pointer = 1;\n  while (pointer < diffs.length) {\n    if (diffs[pointer - 1][0] == DIFF_DELETE &&\n        diffs[pointer][0] == DIFF_INSERT) {\n      var deletion = diffs[pointer - 1][1];\n      var insertion = diffs[pointer][1];\n      var overlap_length1 = this.diff_commonOverlap_(deletion, insertion);\n      var overlap_length2 = this.diff_commonOverlap_(insertion, deletion);\n      if (overlap_length1 >= overlap_length2) {\n        if (overlap_length1 >= deletion.length / 2 ||\n            overlap_length1 >= insertion.length / 2) {\n          // Overlap found.  Insert an equality and trim the surrounding edits.\n          diffs.splice(pointer, 0, new diff_match_patch.Diff(DIFF_EQUAL,\n              insertion.substring(0, overlap_length1)));\n          diffs[pointer - 1][1] =\n              deletion.substring(0, deletion.length - overlap_length1);\n          diffs[pointer + 1][1] = insertion.substring(overlap_length1);\n          pointer++;\n        }\n      } else {\n        if (overlap_length2 >= deletion.length / 2 ||\n            overlap_length2 >= insertion.length / 2) {\n          // Reverse overlap found.\n          // Insert an equality and swap and trim the surrounding edits.\n          diffs.splice(pointer, 0, new diff_match_patch.Diff(DIFF_EQUAL,\n              deletion.substring(0, overlap_length2)));\n          diffs[pointer - 1][0] = DIFF_INSERT;\n          diffs[pointer - 1][1] =\n              insertion.substring(0, insertion.length - overlap_length2);\n          diffs[pointer + 1][0] = DIFF_DELETE;\n          diffs[pointer + 1][1] =\n              deletion.substring(overlap_length2);\n          pointer++;\n        }\n      }\n      pointer++;\n    }\n    pointer++;\n  }\n};\n\n\n/**\n * Look for single edits surrounded on both sides by equalities\n * which can be shifted sideways to align the edit to a word boundary.\n * e.g: The c<ins>at c</ins>ame. -> The <ins>cat </ins>came.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupSemanticLossless = function(diffs) {\n  /**\n   * Given two strings, compute a score representing whether the internal\n   * boundary falls on logical boundaries.\n   * Scores range from 6 (best) to 0 (worst).\n   * Closure, but does not reference any external variables.\n   * @param {string} one First string.\n   * @param {string} two Second string.\n   * @return {number} The score.\n   * @private\n   */\n  function diff_cleanupSemanticScore_(one, two) {\n    if (!one || !two) {\n      // Edges are the best.\n      return 6;\n    }\n\n    // Each port of this function behaves slightly differently due to\n    // subtle differences in each language's definition of things like\n    // 'whitespace'.  Since this function's purpose is largely cosmetic,\n    // the choice has been made to use each language's native features\n    // rather than force total conformity.\n    var char1 = one.charAt(one.length - 1);\n    var char2 = two.charAt(0);\n    var nonAlphaNumeric1 = char1.match(diff_match_patch.nonAlphaNumericRegex_);\n    var nonAlphaNumeric2 = char2.match(diff_match_patch.nonAlphaNumericRegex_);\n    var whitespace1 = nonAlphaNumeric1 &&\n        char1.match(diff_match_patch.whitespaceRegex_);\n    var whitespace2 = nonAlphaNumeric2 &&\n        char2.match(diff_match_patch.whitespaceRegex_);\n    var lineBreak1 = whitespace1 &&\n        char1.match(diff_match_patch.linebreakRegex_);\n    var lineBreak2 = whitespace2 &&\n        char2.match(diff_match_patch.linebreakRegex_);\n    var blankLine1 = lineBreak1 &&\n        one.match(diff_match_patch.blanklineEndRegex_);\n    var blankLine2 = lineBreak2 &&\n        two.match(diff_match_patch.blanklineStartRegex_);\n\n    if (blankLine1 || blankLine2) {\n      // Five points for blank lines.\n      return 5;\n    } else if (lineBreak1 || lineBreak2) {\n      // Four points for line breaks.\n      return 4;\n    } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) {\n      // Three points for end of sentences.\n      return 3;\n    } else if (whitespace1 || whitespace2) {\n      // Two points for whitespace.\n      return 2;\n    } else if (nonAlphaNumeric1 || nonAlphaNumeric2) {\n      // One point for non-alphanumeric.\n      return 1;\n    }\n    return 0;\n  }\n\n  var pointer = 1;\n  // Intentionally ignore the first and last element (don't need checking).\n  while (pointer < diffs.length - 1) {\n    if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n        diffs[pointer + 1][0] == DIFF_EQUAL) {\n      // This is a single edit surrounded by equalities.\n      var equality1 = diffs[pointer - 1][1];\n      var edit = diffs[pointer][1];\n      var equality2 = diffs[pointer + 1][1];\n\n      // First, shift the edit as far left as possible.\n      var commonOffset = this.diff_commonSuffix(equality1, edit);\n      if (commonOffset) {\n        var commonString = edit.substring(edit.length - commonOffset);\n        equality1 = equality1.substring(0, equality1.length - commonOffset);\n        edit = commonString + edit.substring(0, edit.length - commonOffset);\n        equality2 = commonString + equality2;\n      }\n\n      // Second, step character by character right, looking for the best fit.\n      var bestEquality1 = equality1;\n      var bestEdit = edit;\n      var bestEquality2 = equality2;\n      var bestScore = diff_cleanupSemanticScore_(equality1, edit) +\n          diff_cleanupSemanticScore_(edit, equality2);\n      while (edit.charAt(0) === equality2.charAt(0)) {\n        equality1 += edit.charAt(0);\n        edit = edit.substring(1) + equality2.charAt(0);\n        equality2 = equality2.substring(1);\n        var score = diff_cleanupSemanticScore_(equality1, edit) +\n            diff_cleanupSemanticScore_(edit, equality2);\n        // The >= encourages trailing rather than leading whitespace on edits.\n        if (score >= bestScore) {\n          bestScore = score;\n          bestEquality1 = equality1;\n          bestEdit = edit;\n          bestEquality2 = equality2;\n        }\n      }\n\n      if (diffs[pointer - 1][1] != bestEquality1) {\n        // We have an improvement, save it back to the diff.\n        if (bestEquality1) {\n          diffs[pointer - 1][1] = bestEquality1;\n        } else {\n          diffs.splice(pointer - 1, 1);\n          pointer--;\n        }\n        diffs[pointer][1] = bestEdit;\n        if (bestEquality2) {\n          diffs[pointer + 1][1] = bestEquality2;\n        } else {\n          diffs.splice(pointer + 1, 1);\n          pointer--;\n        }\n      }\n    }\n    pointer++;\n  }\n};\n\n// Define some regex patterns for matching boundaries.\ndiff_match_patch.nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/;\ndiff_match_patch.whitespaceRegex_ = /\\s/;\ndiff_match_patch.linebreakRegex_ = /[\\r\\n]/;\ndiff_match_patch.blanklineEndRegex_ = /\\n\\r?\\n$/;\ndiff_match_patch.blanklineStartRegex_ = /^\\r?\\n\\r?\\n/;\n\n/**\n * Reduce the number of edits by eliminating operationally trivial equalities.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupEfficiency = function(diffs) {\n  var changes = false;\n  var equalities = [];  // Stack of indices where equalities are found.\n  var equalitiesLength = 0;  // Keeping our own length var is faster in JS.\n  /** @type {?string} */\n  var lastEquality = null;\n  // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n  var pointer = 0;  // Index of current position.\n  // Is there an insertion operation before the last equality.\n  var pre_ins = false;\n  // Is there a deletion operation before the last equality.\n  var pre_del = false;\n  // Is there an insertion operation after the last equality.\n  var post_ins = false;\n  // Is there a deletion operation after the last equality.\n  var post_del = false;\n  while (pointer < diffs.length) {\n    if (diffs[pointer][0] == DIFF_EQUAL) {  // Equality found.\n      if (diffs[pointer][1].length < this.Diff_EditCost &&\n          (post_ins || post_del)) {\n        // Candidate found.\n        equalities[equalitiesLength++] = pointer;\n        pre_ins = post_ins;\n        pre_del = post_del;\n        lastEquality = diffs[pointer][1];\n      } else {\n        // Not a candidate, and can never become one.\n        equalitiesLength = 0;\n        lastEquality = null;\n      }\n      post_ins = post_del = false;\n    } else {  // An insertion or deletion.\n      if (diffs[pointer][0] == DIFF_DELETE) {\n        post_del = true;\n      } else {\n        post_ins = true;\n      }\n      /*\n       * Five types to be split:\n       * <ins>A</ins><del>B</del>XY<ins>C</ins><del>D</del>\n       * <ins>A</ins>X<ins>C</ins><del>D</del>\n       * <ins>A</ins><del>B</del>X<ins>C</ins>\n       * <ins>A</del>X<ins>C</ins><del>D</del>\n       * <ins>A</ins><del>B</del>X<del>C</del>\n       */\n      if (lastEquality && ((pre_ins && pre_del && post_ins && post_del) ||\n                           ((lastEquality.length < this.Diff_EditCost / 2) &&\n                            (pre_ins + pre_del + post_ins + post_del) == 3))) {\n        // Duplicate record.\n        diffs.splice(equalities[equalitiesLength - 1], 0,\n                     new diff_match_patch.Diff(DIFF_DELETE, lastEquality));\n        // Change second copy to insert.\n        diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n        equalitiesLength--;  // Throw away the equality we just deleted;\n        lastEquality = null;\n        if (pre_ins && pre_del) {\n          // No changes made which could affect previous entry, keep going.\n          post_ins = post_del = true;\n          equalitiesLength = 0;\n        } else {\n          equalitiesLength--;  // Throw away the previous equality.\n          pointer = equalitiesLength > 0 ?\n              equalities[equalitiesLength - 1] : -1;\n          post_ins = post_del = false;\n        }\n        changes = true;\n      }\n    }\n    pointer++;\n  }\n\n  if (changes) {\n    this.diff_cleanupMerge(diffs);\n  }\n};\n\n\n/**\n * Reorder and merge like edit sections.  Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupMerge = function(diffs) {\n  // Add a dummy entry at the end.\n  diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, ''));\n  var pointer = 0;\n  var count_delete = 0;\n  var count_insert = 0;\n  var text_delete = '';\n  var text_insert = '';\n  var commonlength;\n  while (pointer < diffs.length) {\n    switch (diffs[pointer][0]) {\n      case DIFF_INSERT:\n        count_insert++;\n        text_insert += diffs[pointer][1];\n        pointer++;\n        break;\n      case DIFF_DELETE:\n        count_delete++;\n        text_delete += diffs[pointer][1];\n        pointer++;\n        break;\n      case DIFF_EQUAL:\n        // Upon reaching an equality, check for prior redundancies.\n        if (count_delete + count_insert > 1) {\n          if (count_delete !== 0 && count_insert !== 0) {\n            // Factor out any common prefixies.\n            commonlength = this.diff_commonPrefix(text_insert, text_delete);\n            if (commonlength !== 0) {\n              if ((pointer - count_delete - count_insert) > 0 &&\n                  diffs[pointer - count_delete - count_insert - 1][0] ==\n                  DIFF_EQUAL) {\n                diffs[pointer - count_delete - count_insert - 1][1] +=\n                    text_insert.substring(0, commonlength);\n              } else {\n                diffs.splice(0, 0, new diff_match_patch.Diff(DIFF_EQUAL,\n                    text_insert.substring(0, commonlength)));\n                pointer++;\n              }\n              text_insert = text_insert.substring(commonlength);\n              text_delete = text_delete.substring(commonlength);\n            }\n            // Factor out any common suffixies.\n            commonlength = this.diff_commonSuffix(text_insert, text_delete);\n            if (commonlength !== 0) {\n              diffs[pointer][1] = text_insert.substring(text_insert.length -\n                  commonlength) + diffs[pointer][1];\n              text_insert = text_insert.substring(0, text_insert.length -\n                  commonlength);\n              text_delete = text_delete.substring(0, text_delete.length -\n                  commonlength);\n            }\n          }\n          // Delete the offending records and add the merged ones.\n          pointer -= count_delete + count_insert;\n          diffs.splice(pointer, count_delete + count_insert);\n          if (text_delete.length) {\n            diffs.splice(pointer, 0,\n                new diff_match_patch.Diff(DIFF_DELETE, text_delete));\n            pointer++;\n          }\n          if (text_insert.length) {\n            diffs.splice(pointer, 0,\n                new diff_match_patch.Diff(DIFF_INSERT, text_insert));\n            pointer++;\n          }\n          pointer++;\n        } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {\n          // Merge this equality with the previous one.\n          diffs[pointer - 1][1] += diffs[pointer][1];\n          diffs.splice(pointer, 1);\n        } else {\n          pointer++;\n        }\n        count_insert = 0;\n        count_delete = 0;\n        text_delete = '';\n        text_insert = '';\n        break;\n    }\n  }\n  if (diffs[diffs.length - 1][1] === '') {\n    diffs.pop();  // Remove the dummy entry at the end.\n  }\n\n  // Second pass: look for single edits surrounded on both sides by equalities\n  // which can be shifted sideways to eliminate an equality.\n  // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC\n  var changes = false;\n  pointer = 1;\n  // Intentionally ignore the first and last element (don't need checking).\n  while (pointer < diffs.length - 1) {\n    if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n        diffs[pointer + 1][0] == DIFF_EQUAL) {\n      // This is a single edit surrounded by equalities.\n      if (diffs[pointer][1].substring(diffs[pointer][1].length -\n          diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) {\n        // Shift the edit over the previous equality.\n        diffs[pointer][1] = diffs[pointer - 1][1] +\n            diffs[pointer][1].substring(0, diffs[pointer][1].length -\n                                        diffs[pointer - 1][1].length);\n        diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n        diffs.splice(pointer - 1, 1);\n        changes = true;\n      } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n          diffs[pointer + 1][1]) {\n        // Shift the edit over the next equality.\n        diffs[pointer - 1][1] += diffs[pointer + 1][1];\n        diffs[pointer][1] =\n            diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n            diffs[pointer + 1][1];\n        diffs.splice(pointer + 1, 1);\n        changes = true;\n      }\n    }\n    pointer++;\n  }\n  // If shifts were made, the diff needs reordering and another shift sweep.\n  if (changes) {\n    this.diff_cleanupMerge(diffs);\n  }\n};\n\n/**\n * Rearrange diff boundaries that split Unicode surrogate pairs.\n *\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupSplitSurrogates = function(diffs) {\n  var lastEnd;\n  for (var x = 0; x < diffs.length; x++) {\n    var thisDiff = diffs[x];\n    var thisTop  = thisDiff[1][0];\n    var thisEnd  = thisDiff[1][thisDiff[1].length - 1];\n\n    if (0 === thisDiff[1].length) {\n      diffs.splice(x--, 1);\n      continue;\n    }\n\n    if (thisEnd && this.isHighSurrogate(thisEnd)) {\n      lastEnd = thisEnd;\n      thisDiff[1] = thisDiff[1].slice(0, -1);\n    }\n\n    if (lastEnd && thisTop && this.isHighSurrogate(lastEnd) && this.isLowSurrogate(thisTop)) {\n      thisDiff[1] = lastEnd + thisDiff[1];\n    }\n\n    if (0 === thisDiff[1].length) {\n      diffs.splice(x--, 1);\n      continue;\n    }\n  }\n\n  return diffs;\n};\n\ndiff_match_patch.prototype.isHighSurrogate = function(c) {\n  var v = c.charCodeAt(0);\n  return v >= 0xD800 && v <= 0xDBFF;\n};\n\ndiff_match_patch.prototype.isLowSurrogate = function(c) {\n  var v = c.charCodeAt(0);\n  return v >= 0xDC00 && v <= 0xDFFF;\n};\n\ndiff_match_patch.prototype.digit16 = function(c) {\n  switch (c) {\n    case '0': return 0;\n    case '1': return 1;\n    case '2': return 2;\n    case '3': return 3;\n    case '4': return 4;\n    case '5': return 5;\n    case '6': return 6;\n    case '7': return 7;\n    case '8': return 8;\n    case '9': return 9;\n    case 'A': case 'a': return 10;\n    case 'B': case 'b': return 11;\n    case 'C': case 'c': return 12;\n    case 'D': case 'd': return 13;\n    case 'E': case 'e': return 14;\n    case 'F': case 'f': return 15;\n    default: throw new Error('Invalid hex-code');\n  }\n};\n\n/**\n * Decode URI-encoded string but allow for encoded surrogate halves\n *\n * diff_match_patch needs this relaxation of the requirements because\n * not all libraries and versions produce valid URI strings in toDelta\n * and we don't want to crash this code when the input is valid input\n * but at the same time invalid utf-8\n *\n * @example: decodeURI( 'abcd%3A %F0%9F%85%B0' ) = 'abcd: \\ud83c\\udd70'\n * @example: decodeURI( 'abcd%3A %ED%A0%BC' ) = 'abcd: \\ud83c'\n *\n * @cite: @mathiasbynens utf8.js at https://github.com/mathiasbynens/utf8.js\n *\n * @param {String} text input string encoded by encodeURI() or equivalent\n * @return {String}\n */\ndiff_match_patch.prototype.decodeURI = function(text) {\n  try {\n    return decodeURI(text);\n  } catch ( e ) {\n    var i = 0;\n    var decoded = '';\n\n    while (i < text.length) {\n      if ( text[i] !== '%' ) {\n        decoded += text[i++];\n        continue;\n      }\n\n      // start a percent-sequence\n      var byte1 = (this.digit16(text[i + 1]) << 4) + this.digit16(text[i + 2]);\n      if ((byte1 & 0x80) === 0) {\n        decoded += String.fromCharCode(byte1);\n        i += 3;\n        continue;\n      }\n\n      if ('%' !== text[i + 3]) {\n        throw new URIError('URI malformed');\n      }\n\n      var byte2 = (this.digit16(text[i + 4]) << 4) + this.digit16(text[i + 5]);\n      if ((byte2 & 0xC0) !== 0x80) {\n        throw new URIError('URI malformed');\n      }\n      byte2 = byte2 & 0x3F;\n      if ((byte1 & 0xE0) === 0xC0) {\n        decoded += String.fromCharCode(((byte1 & 0x1F) << 6) | byte2);\n        i += 6;\n        continue;\n      }\n\n      if ('%' !== text[i + 6]) {\n        throw new URIError('URI malformed');\n      }\n\n      var byte3 = (this.digit16(text[i + 7]) << 4) + this.digit16(text[i + 8]);\n      if ((byte3 & 0xC0) !== 0x80) {\n        throw new URIError('URI malformed');\n      }\n      byte3 = byte3 & 0x3F;\n      if ((byte1 & 0xF0) === 0xE0) {\n        // unpaired surrogate are fine here\n        decoded += String.fromCharCode(((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3);\n        i += 9;\n        continue;\n      }\n\n      if ('%' !== text[i + 9]) {\n        throw new URIError('URI malformed');\n      }\n\n      var byte4 = (this.digit16(text[i + 10]) << 4) + this.digit16(text[i + 11]);\n      if ((byte4 & 0xC0) !== 0x80) {\n        throw new URIError('URI malformed');\n      }\n      byte4 = byte4 & 0x3F;\n      if ((byte1 & 0xF8) === 0xF0) {\n        var codePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) | (byte3 << 0x06) | byte4;\n        if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n          decoded += String.fromCharCode((codePoint & 0xFFFF) >>> 10 & 0x3FF | 0xD800);\n          decoded += String.fromCharCode(0xDC00 | (codePoint & 0xFFFF) & 0x3FF);\n          i += 12;\n          continue;\n        }\n      }\n\n      throw new URIError('URI malformed');\n    }\n\n    return decoded;\n  }\n};\n\n/**\n * loc is a location in text1, compute and return the equivalent location in\n * text2.\n * e.g. 'The cat' vs 'The big cat', 1->1, 5->8\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @param {number} loc Location within text1.\n * @return {number} Location within text2.\n */\ndiff_match_patch.prototype.diff_xIndex = function(diffs, loc) {\n  var chars1 = 0;\n  var chars2 = 0;\n  var last_chars1 = 0;\n  var last_chars2 = 0;\n  var x;\n  for (x = 0; x < diffs.length; x++) {\n    if (diffs[x][0] !== DIFF_INSERT) {  // Equality or deletion.\n      chars1 += diffs[x][1].length;\n    }\n    if (diffs[x][0] !== DIFF_DELETE) {  // Equality or insertion.\n      chars2 += diffs[x][1].length;\n    }\n    if (chars1 > loc) {  // Overshot the location.\n      break;\n    }\n    last_chars1 = chars1;\n    last_chars2 = chars2;\n  }\n  // Was the location was deleted?\n  if (diffs.length != x && diffs[x][0] === DIFF_DELETE) {\n    return last_chars2;\n  }\n  // Add the remaining character length.\n  return last_chars2 + (loc - last_chars1);\n};\n\n\n/**\n * Convert a diff array into a pretty HTML report.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} HTML representation.\n */\ndiff_match_patch.prototype.diff_prettyHtml = function(diffs) {\n  diffs = this.diff_cleanupSplitSurrogates(diffs);\n  var html = [];\n  var pattern_amp = /&/g;\n  var pattern_lt = /</g;\n  var pattern_gt = />/g;\n  var pattern_para = /\\n/g;\n  for (var x = 0; x < diffs.length; x++) {\n    var op = diffs[x][0];    // Operation (insert, delete, equal)\n    var data = diffs[x][1];  // Text of change.\n    var text = data.replace(pattern_amp, '&amp;').replace(pattern_lt, '&lt;')\n        .replace(pattern_gt, '&gt;').replace(pattern_para, '&para;<br>');\n    switch (op) {\n      case DIFF_INSERT:\n        html[x] = '<ins style=\"background:#e6ffe6;\">' + text + '</ins>';\n        break;\n      case DIFF_DELETE:\n        html[x] = '<del style=\"background:#ffe6e6;\">' + text + '</del>';\n        break;\n      case DIFF_EQUAL:\n        html[x] = '<span>' + text + '</span>';\n        break;\n    }\n  }\n  return html.join('');\n};\n\n\n/**\n * Compute and return the source text (all equalities and deletions).\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} Source text.\n */\ndiff_match_patch.prototype.diff_text1 = function(diffs) {\n  var text = [];\n  for (var x = 0; x < diffs.length; x++) {\n    if (diffs[x][0] !== DIFF_INSERT) {\n      text[x] = diffs[x][1];\n    }\n  }\n  return text.join('');\n};\n\n\n/**\n * Compute and return the destination text (all equalities and insertions).\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} Destination text.\n */\ndiff_match_patch.prototype.diff_text2 = function(diffs) {\n  var text = [];\n  for (var x = 0; x < diffs.length; x++) {\n    if (diffs[x][0] !== DIFF_DELETE) {\n      text[x] = diffs[x][1];\n    }\n  }\n  return text.join('');\n};\n\n\n/**\n * Compute the Levenshtein distance; the number of inserted, deleted or\n * substituted characters.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {number} Number of changes.\n */\ndiff_match_patch.prototype.diff_levenshtein = function(diffs) {\n  var levenshtein = 0;\n  var insertions = 0;\n  var deletions = 0;\n  for (var x = 0; x < diffs.length; x++) {\n    var op = diffs[x][0];\n    var data = diffs[x][1];\n    switch (op) {\n      case DIFF_INSERT:\n        insertions += data.length;\n        break;\n      case DIFF_DELETE:\n        deletions += data.length;\n        break;\n      case DIFF_EQUAL:\n        // A deletion and an insertion is one substitution.\n        levenshtein += Math.max(insertions, deletions);\n        insertions = 0;\n        deletions = 0;\n        break;\n    }\n  }\n  levenshtein += Math.max(insertions, deletions);\n  return levenshtein;\n};\n\n\n/**\n * Crush the diff into an encoded string which describes the operations\n * required to transform text1 into text2.\n * E.g. =3\\t-2\\t+ing  -> Keep 3 chars, delete 2 chars, insert 'ing'.\n * Operations are tab-separated.  Inserted text is escaped using %xx notation.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} Delta text.\n */\ndiff_match_patch.prototype.diff_toDelta = function(diffs) {\n  diffs = this.diff_cleanupSplitSurrogates(diffs);\n  var text = [];\n  for (var x = 0; x < diffs.length; x++) {\n    switch (diffs[x][0]) {\n      case DIFF_INSERT:\n        text[x] = '+' + encodeURI(diffs[x][1]);\n        break;\n      case DIFF_DELETE:\n        text[x] = '-' + diffs[x][1].length;\n        break;\n      case DIFF_EQUAL:\n        text[x] = '=' + diffs[x][1].length;\n        break;\n    }\n  }\n  return text.join('\\t').replace(/%20/g, ' ');\n};\n\n\n/**\n * Given the original text1, and an encoded string which describes the\n * operations required to transform text1 into text2, compute the full diff.\n * @param {string} text1 Source string for the diff.\n * @param {string} delta Delta text.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @throws {!Error} If invalid input.\n */\ndiff_match_patch.prototype.diff_fromDelta = function(text1, delta) {\n  var diffs = [];\n  var diffsLength = 0;  // Keeping our own length var is faster in JS.\n  var pointer = 0;  // Cursor in text1\n  var tokens = delta.split(/\\t/g);\n  for (var x = 0; x < tokens.length; x++) {\n    // Each token begins with a one character parameter which specifies the\n    // operation of this token (delete, insert, equality).\n    var param = tokens[x].substring(1);\n    switch (tokens[x].charAt(0)) {\n      case '+':\n        try {\n          diffs[diffsLength++] =\n              new diff_match_patch.Diff(DIFF_INSERT, this.decodeURI(param));\n        } catch (ex) {\n          // Malformed URI sequence.\n          throw new Error('Illegal escape in diff_fromDelta: ' + param);\n        }\n        break;\n      case '-':\n        // Fall through.\n      case '=':\n        var n = parseInt(param, 10);\n        if (isNaN(n) || n < 0) {\n          throw new Error('Invalid number in diff_fromDelta: ' + param);\n        }\n        var text = text1.substring(pointer, pointer += n);\n        if (tokens[x].charAt(0) == '=') {\n          diffs[diffsLength++] = new diff_match_patch.Diff(DIFF_EQUAL, text);\n        } else {\n          diffs[diffsLength++] = new diff_match_patch.Diff(DIFF_DELETE, text);\n        }\n        break;\n      default:\n        // Blank tokens are ok (from a trailing \\t).\n        // Anything else is an error.\n        if (tokens[x]) {\n          throw new Error('Invalid diff operation in diff_fromDelta: ' +\n                          tokens[x]);\n        }\n    }\n  }\n  if (pointer != text1.length) {\n    throw new Error('Delta length (' + pointer +\n        ') does not equal source text length (' + text1.length + ').');\n  }\n  return diffs;\n};\n\n\n//  MATCH FUNCTIONS\n\n\n/**\n * Locate the best instance of 'pattern' in 'text' near 'loc'.\n * @param {string} text The text to search.\n * @param {string} pattern The pattern to search for.\n * @param {number} loc The location to search around.\n * @return {number} Best match index or -1.\n */\ndiff_match_patch.prototype.match_main = function(text, pattern, loc) {\n  // Check for null inputs.\n  if (text == null || pattern == null || loc == null) {\n    throw new Error('Null input. (match_main)');\n  }\n\n  loc = Math.max(0, Math.min(loc, text.length));\n  if (text == pattern) {\n    // Shortcut (potentially not guaranteed by the algorithm)\n    return 0;\n  } else if (!text.length) {\n    // Nothing to match.\n    return -1;\n  } else if (text.substring(loc, loc + pattern.length) == pattern) {\n    // Perfect match at the perfect spot!  (Includes case of null pattern)\n    return loc;\n  } else {\n    // Do a fuzzy compare.\n    return this.match_bitap_(text, pattern, loc);\n  }\n};\n\n\n/**\n * Locate the best instance of 'pattern' in 'text' near 'loc' using the\n * Bitap algorithm.\n * @param {string} text The text to search.\n * @param {string} pattern The pattern to search for.\n * @param {number} loc The location to search around.\n * @return {number} Best match index or -1.\n * @private\n */\ndiff_match_patch.prototype.match_bitap_ = function(text, pattern, loc) {\n  if (pattern.length > this.Match_MaxBits) {\n    throw new Error('Pattern too long for this browser.');\n  }\n\n  // Initialise the alphabet.\n  var s = this.match_alphabet_(pattern);\n\n  var dmp = this;  // 'this' becomes 'window' in a closure.\n\n  /**\n   * Compute and return the score for a match with e errors and x location.\n   * Accesses loc and pattern through being a closure.\n   * @param {number} e Number of errors in match.\n   * @param {number} x Location of match.\n   * @return {number} Overall score for match (0.0 = good, 1.0 = bad).\n   * @private\n   */\n  function match_bitapScore_(e, x) {\n    var accuracy = e / pattern.length;\n    var proximity = Math.abs(loc - x);\n    if (!dmp.Match_Distance) {\n      // Dodge divide by zero error.\n      return proximity ? 1.0 : accuracy;\n    }\n    return accuracy + (proximity / dmp.Match_Distance);\n  }\n\n  // Highest score beyond which we give up.\n  var score_threshold = this.Match_Threshold;\n  // Is there a nearby exact match? (speedup)\n  var best_loc = text.indexOf(pattern, loc);\n  if (best_loc != -1) {\n    score_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold);\n    // What about in the other direction? (speedup)\n    best_loc = text.lastIndexOf(pattern, loc + pattern.length);\n    if (best_loc != -1) {\n      score_threshold =\n          Math.min(match_bitapScore_(0, best_loc), score_threshold);\n    }\n  }\n\n  // Initialise the bit arrays.\n  var matchmask = 1 << (pattern.length - 1);\n  best_loc = -1;\n\n  var bin_min, bin_mid;\n  var bin_max = pattern.length + text.length;\n  var last_rd;\n  for (var d = 0; d < pattern.length; d++) {\n    // Scan for the best match; each iteration allows for one more error.\n    // Run a binary search to determine how far from 'loc' we can stray at this\n    // error level.\n    bin_min = 0;\n    bin_mid = bin_max;\n    while (bin_min < bin_mid) {\n      if (match_bitapScore_(d, loc + bin_mid) <= score_threshold) {\n        bin_min = bin_mid;\n      } else {\n        bin_max = bin_mid;\n      }\n      bin_mid = Math.floor((bin_max - bin_min) / 2 + bin_min);\n    }\n    // Use the result from this iteration as the maximum for the next.\n    bin_max = bin_mid;\n    var start = Math.max(1, loc - bin_mid + 1);\n    var finish = Math.min(loc + bin_mid, text.length) + pattern.length;\n\n    var rd = Array(finish + 2);\n    rd[finish + 1] = (1 << d) - 1;\n    for (var j = finish; j >= start; j--) {\n      // The alphabet (s) is a sparse hash, so the following line generates\n      // warnings.\n      var charMatch = s[text.charAt(j - 1)];\n      if (d === 0) {  // First pass: exact match.\n        rd[j] = ((rd[j + 1] << 1) | 1) & charMatch;\n      } else {  // Subsequent passes: fuzzy match.\n        rd[j] = (((rd[j + 1] << 1) | 1) & charMatch) |\n                (((last_rd[j + 1] | last_rd[j]) << 1) | 1) |\n                last_rd[j + 1];\n      }\n      if (rd[j] & matchmask) {\n        var score = match_bitapScore_(d, j - 1);\n        // This match will almost certainly be better than any existing match.\n        // But check anyway.\n        if (score <= score_threshold) {\n          // Told you so.\n          score_threshold = score;\n          best_loc = j - 1;\n          if (best_loc > loc) {\n            // When passing loc, don't exceed our current distance from loc.\n            start = Math.max(1, 2 * loc - best_loc);\n          } else {\n            // Already passed loc, downhill from here on in.\n            break;\n          }\n        }\n      }\n    }\n    // No hope for a (better) match at greater error levels.\n    if (match_bitapScore_(d + 1, loc) > score_threshold) {\n      break;\n    }\n    last_rd = rd;\n  }\n  return best_loc;\n};\n\n\n/**\n * Initialise the alphabet for the Bitap algorithm.\n * @param {string} pattern The text to encode.\n * @return {!Object} Hash of character locations.\n * @private\n */\ndiff_match_patch.prototype.match_alphabet_ = function(pattern) {\n  var s = {};\n  for (var i = 0; i < pattern.length; i++) {\n    s[pattern.charAt(i)] = 0;\n  }\n  for (var i = 0; i < pattern.length; i++) {\n    s[pattern.charAt(i)] |= 1 << (pattern.length - i - 1);\n  }\n  return s;\n};\n\n\n//  PATCH FUNCTIONS\n\n\n/**\n * Increase the context until it is unique,\n * but don't let the pattern expand beyond Match_MaxBits.\n * @param {!diff_match_patch.patch_obj} patch The patch to grow.\n * @param {string} text Source text.\n * @private\n */\ndiff_match_patch.prototype.patch_addContext_ = function(patch, text) {\n  if (text.length == 0) {\n    return;\n  }\n  if (patch.start2 === null) {\n    throw Error('patch not initialized');\n  }\n  var pattern = text.substring(patch.start2, patch.start2 + patch.length1);\n  var padding = 0;\n\n  // Look for the first and last matches of pattern in text.  If two different\n  // matches are found, increase the pattern length.\n  while (text.indexOf(pattern) != text.lastIndexOf(pattern) &&\n         pattern.length < this.Match_MaxBits - this.Patch_Margin -\n         this.Patch_Margin) {\n    padding += this.Patch_Margin;\n    pattern = text.substring(patch.start2 - padding,\n                             patch.start2 + patch.length1 + padding);\n  }\n  // Add one chunk for good luck.\n  padding += this.Patch_Margin;\n\n  // Add the prefix.\n  if (\n    patch.start2 - padding > 0 &&\n    diff_match_patch.prototype.isLowSurrogate(text[patch.start2 - padding])\n  ) {\n    padding++;\n  }\n  var prefix = text.substring(patch.start2 - padding, patch.start2);\n  if (prefix) {\n    patch.diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, prefix));\n  }\n  // Add the suffix.\n  if (\n    patch.start2 + patch.length1 + padding < text.length &&\n    diff_match_patch.prototype.isHighSurrogate(text[patch.start2 + patch.length1 + padding])\n  ) {\n    padding++;\n  }\n  var suffix = text.substring(patch.start2 + patch.length1,\n                              patch.start2 + patch.length1 + padding);\n  if (suffix) {\n    patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, suffix));\n  }\n\n  // Roll back the start points.\n  patch.start1 -= prefix.length;\n  patch.start2 -= prefix.length;\n  // Extend the lengths.\n  patch.length1 += prefix.length + suffix.length;\n  patch.length2 += prefix.length + suffix.length;\n};\n\n\n/**\n * Compute a list of patches to turn text1 into text2.\n * Use diffs if provided, otherwise compute it ourselves.\n * There are four ways to call this function, depending on what data is\n * available to the caller:\n * Method 1:\n * a = text1, b = text2\n * Method 2:\n * a = diffs\n * Method 3 (optimal):\n * a = text1, b = diffs\n * Method 4 (deprecated, use method 3):\n * a = text1, b = text2, c = diffs\n *\n * @param {string|!Array.<!diff_match_patch.Diff>} a text1 (methods 1,3,4) or\n * Array of diff tuples for text1 to text2 (method 2).\n * @param {string|!Array.<!diff_match_patch.Diff>=} opt_b text2 (methods 1,4) or\n * Array of diff tuples for text1 to text2 (method 3) or undefined (method 2).\n * @param {string|!Array.<!diff_match_patch.Diff>=} opt_c Array of diff tuples\n * for text1 to text2 (method 4) or undefined (methods 1,2,3).\n * @return {!Array.<!diff_match_patch.patch_obj>} Array of Patch objects.\n */\ndiff_match_patch.prototype.patch_make = function(a, opt_b, opt_c) {\n  var text1, diffs;\n  if (typeof a == 'string' && typeof opt_b == 'string' &&\n      typeof opt_c == 'undefined') {\n    // Method 1: text1, text2\n    // Compute diffs from text1 and text2.\n    text1 = /** @type {string} */(a);\n    diffs = this.diff_main(text1, /** @type {string} */(opt_b), true);\n    if (diffs.length > 2) {\n      this.diff_cleanupSemantic(diffs);\n      this.diff_cleanupEfficiency(diffs);\n    }\n  } else if (a && typeof a == 'object' && typeof opt_b == 'undefined' &&\n      typeof opt_c == 'undefined') {\n    // Method 2: diffs\n    // Compute text1 from diffs.\n    diffs = /** @type {!Array.<!diff_match_patch.Diff>} */(a);\n    text1 = this.diff_text1(diffs);\n  } else if (typeof a == 'string' && opt_b && typeof opt_b == 'object' &&\n      typeof opt_c == 'undefined') {\n    // Method 3: text1, diffs\n    text1 = /** @type {string} */(a);\n    diffs = /** @type {!Array.<!diff_match_patch.Diff>} */(opt_b);\n  } else if (typeof a == 'string' && typeof opt_b == 'string' &&\n      opt_c && typeof opt_c == 'object') {\n    // Method 4: text1, text2, diffs\n    // text2 is not used.\n    text1 = /** @type {string} */(a);\n    diffs = /** @type {!Array.<!diff_match_patch.Diff>} */(opt_c);\n  } else {\n    throw new Error('Unknown call format to patch_make.');\n  }\n\n  if (diffs.length === 0) {\n    return [];  // Get rid of the null case.\n  }\n  diffs = this.diff_cleanupSplitSurrogates(diffs);\n  var patches = [];\n  var patch = new diff_match_patch.patch_obj();\n  var patchDiffLength = 0;  // Keeping our own length var is faster in JS.\n  var char_count1 = 0;  // Number of characters into the text1 string.\n  var char_count2 = 0;  // Number of characters into the text2 string.\n  // Start with text1 (prepatch_text) and apply the diffs until we arrive at\n  // text2 (postpatch_text).  We recreate the patches one by one to determine\n  // context info.\n  var prepatch_text = text1;\n  var postpatch_text = text1;\n  for (var x = 0; x < diffs.length; x++) {\n    var diff_type = diffs[x][0];\n    var diff_text = diffs[x][1];\n\n    if (!patchDiffLength && diff_type !== DIFF_EQUAL) {\n      // A new patch starts here.\n      patch.start1 = char_count1;\n      patch.start2 = char_count2;\n    }\n\n    switch (diff_type) {\n      case DIFF_INSERT:\n        patch.diffs[patchDiffLength++] = diffs[x];\n        patch.length2 += diff_text.length;\n        postpatch_text = postpatch_text.substring(0, char_count2) + diff_text +\n                         postpatch_text.substring(char_count2);\n        break;\n      case DIFF_DELETE:\n        patch.length1 += diff_text.length;\n        patch.diffs[patchDiffLength++] = diffs[x];\n        postpatch_text = postpatch_text.substring(0, char_count2) +\n                         postpatch_text.substring(char_count2 +\n                             diff_text.length);\n        break;\n      case DIFF_EQUAL:\n        if (diff_text.length <= 2 * this.Patch_Margin &&\n            patchDiffLength && diffs.length != x + 1) {\n          // Small equality inside a patch.\n          patch.diffs[patchDiffLength++] = diffs[x];\n          patch.length1 += diff_text.length;\n          patch.length2 += diff_text.length;\n        } else if (diff_text.length >= 2 * this.Patch_Margin) {\n          // Time for a new patch.\n          if (patchDiffLength) {\n            this.patch_addContext_(patch, prepatch_text);\n            patches.push(patch);\n            patch = new diff_match_patch.patch_obj();\n            patchDiffLength = 0;\n            // Unlike Unidiff, our patch lists have a rolling context.\n            // https://github.com/google/diff-match-patch/wiki/Unidiff\n            // Update prepatch text & pos to reflect the application of the\n            // just completed patch.\n            prepatch_text = postpatch_text;\n            char_count1 = char_count2;\n          }\n        }\n        break;\n    }\n\n    // Update the current character count.\n    if (diff_type !== DIFF_INSERT) {\n      char_count1 += diff_text.length;\n    }\n    if (diff_type !== DIFF_DELETE) {\n      char_count2 += diff_text.length;\n    }\n  }\n  // Pick up the leftover patch if not empty.\n  if (patchDiffLength) {\n    this.patch_addContext_(patch, prepatch_text);\n    patches.push(patch);\n  }\n\n  return patches;\n};\n\n\n/**\n * Given an array of patches, return another array that is identical.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @return {!Array.<!diff_match_patch.patch_obj>} Array of Patch objects.\n */\ndiff_match_patch.prototype.patch_deepCopy = function(patches) {\n  // Making deep copies is hard in JavaScript.\n  var patchesCopy = [];\n  for (var x = 0; x < patches.length; x++) {\n    var patch = patches[x];\n    var patchCopy = new diff_match_patch.patch_obj();\n    patchCopy.diffs = [];\n    for (var y = 0; y < patch.diffs.length; y++) {\n      patchCopy.diffs[y] =\n          new diff_match_patch.Diff(patch.diffs[y][0], patch.diffs[y][1]);\n    }\n    patchCopy.start1 = patch.start1;\n    patchCopy.start2 = patch.start2;\n    patchCopy.length1 = patch.length1;\n    patchCopy.length2 = patch.length2;\n    patchesCopy[x] = patchCopy;\n  }\n  return patchesCopy;\n};\n\n\n/**\n * Merge a set of patches onto the text.  Return a patched text, as well\n * as a list of true/false values indicating which patches were applied.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @param {string} text Old text.\n * @return {!Array.<string|!Array.<boolean>>} Two element Array, containing the\n *      new text and an array of boolean values.\n */\ndiff_match_patch.prototype.patch_apply = function(patches, text) {\n  if (patches.length == 0) {\n    return [text, []];\n  }\n\n  // Deep copy the patches so that no changes are made to originals.\n  patches = this.patch_deepCopy(patches);\n\n  var nullPadding = this.patch_addPadding(patches);\n  text = nullPadding + text + nullPadding;\n\n  this.patch_splitMax(patches);\n  // delta keeps track of the offset between the expected and actual location\n  // of the previous patch.  If there are patches expected at positions 10 and\n  // 20, but the first patch was found at 12, delta is 2 and the second patch\n  // has an effective expected position of 22.\n  var delta = 0;\n  var results = [];\n  for (var x = 0; x < patches.length; x++) {\n    var expected_loc = patches[x].start2 + delta;\n    var text1 = this.diff_text1(patches[x].diffs);\n    var start_loc;\n    var end_loc = -1;\n    if (text1.length > this.Match_MaxBits) {\n      // patch_splitMax will only provide an oversized pattern in the case of\n      // a monster delete.\n      start_loc = this.match_main(text, text1.substring(0, this.Match_MaxBits),\n                                  expected_loc);\n      if (start_loc != -1) {\n        end_loc = this.match_main(text,\n            text1.substring(text1.length - this.Match_MaxBits),\n            expected_loc + text1.length - this.Match_MaxBits);\n        if (end_loc == -1 || start_loc >= end_loc) {\n          // Can't find valid trailing context.  Drop this patch.\n          start_loc = -1;\n        }\n      }\n    } else {\n      start_loc = this.match_main(text, text1, expected_loc);\n    }\n    if (start_loc == -1) {\n      // No match found.  :(\n      results[x] = false;\n      // Subtract the delta for this failed patch from subsequent patches.\n      delta -= patches[x].length2 - patches[x].length1;\n    } else {\n      // Found a match.  :)\n      results[x] = true;\n      delta = start_loc - expected_loc;\n      var text2;\n      if (end_loc == -1) {\n        text2 = text.substring(start_loc, start_loc + text1.length);\n      } else {\n        text2 = text.substring(start_loc, end_loc + this.Match_MaxBits);\n      }\n      if (text1 == text2) {\n        // Perfect match, just shove the replacement text in.\n        text = text.substring(0, start_loc) +\n               this.diff_text2(patches[x].diffs) +\n               text.substring(start_loc + text1.length);\n      } else {\n        // Imperfect match.  Run a diff to get a framework of equivalent\n        // indices.\n        var diffs = this.diff_main(text1, text2, false);\n        if (text1.length > this.Match_MaxBits &&\n            this.diff_levenshtein(diffs) / text1.length >\n            this.Patch_DeleteThreshold) {\n          // The end points match, but the content is unacceptably bad.\n          results[x] = false;\n        } else {\n          this.diff_cleanupSemanticLossless(diffs);\n          var index1 = 0;\n          var index2;\n          for (var y = 0; y < patches[x].diffs.length; y++) {\n            var mod = patches[x].diffs[y];\n            if (mod[0] !== DIFF_EQUAL) {\n              index2 = this.diff_xIndex(diffs, index1);\n            }\n            if (mod[0] === DIFF_INSERT) {  // Insertion\n              text = text.substring(0, start_loc + index2) + mod[1] +\n                     text.substring(start_loc + index2);\n            } else if (mod[0] === DIFF_DELETE) {  // Deletion\n              text = text.substring(0, start_loc + index2) +\n                     text.substring(start_loc + this.diff_xIndex(diffs,\n                         index1 + mod[1].length));\n            }\n            if (mod[0] !== DIFF_DELETE) {\n              index1 += mod[1].length;\n            }\n          }\n        }\n      }\n    }\n  }\n  // Strip the padding off.\n  text = text.substring(nullPadding.length, text.length - nullPadding.length);\n  return [text, results];\n};\n\n\n/**\n * Add some padding on text start and end so that edges can match something.\n * Intended to be called only from within patch_apply.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @return {string} The padding string added to each side.\n */\ndiff_match_patch.prototype.patch_addPadding = function(patches) {\n  var paddingLength = this.Patch_Margin;\n  var nullPadding = '';\n  for (var x = 1; x <= paddingLength; x++) {\n    nullPadding += String.fromCharCode(x);\n  }\n\n  // Bump all the patches forward.\n  for (var x = 0; x < patches.length; x++) {\n    patches[x].start1 += paddingLength;\n    patches[x].start2 += paddingLength;\n  }\n\n  // Add some padding on start of first diff.\n  var patch = patches[0];\n  var diffs = patch.diffs;\n  if (diffs.length == 0 || diffs[0][0] != DIFF_EQUAL) {\n    // Add nullPadding equality.\n    diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, nullPadding));\n    patch.start1 -= paddingLength;  // Should be 0.\n    patch.start2 -= paddingLength;  // Should be 0.\n    patch.length1 += paddingLength;\n    patch.length2 += paddingLength;\n  } else if (paddingLength > diffs[0][1].length) {\n    // Grow first equality.\n    var extraLength = paddingLength - diffs[0][1].length;\n    diffs[0][1] = nullPadding.substring(diffs[0][1].length) + diffs[0][1];\n    patch.start1 -= extraLength;\n    patch.start2 -= extraLength;\n    patch.length1 += extraLength;\n    patch.length2 += extraLength;\n  }\n\n  // Add some padding on end of last diff.\n  patch = patches[patches.length - 1];\n  diffs = patch.diffs;\n  if (diffs.length == 0 || diffs[diffs.length - 1][0] != DIFF_EQUAL) {\n    // Add nullPadding equality.\n    diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, nullPadding));\n    patch.length1 += paddingLength;\n    patch.length2 += paddingLength;\n  } else if (paddingLength > diffs[diffs.length - 1][1].length) {\n    // Grow last equality.\n    var extraLength = paddingLength - diffs[diffs.length - 1][1].length;\n    diffs[diffs.length - 1][1] += nullPadding.substring(0, extraLength);\n    patch.length1 += extraLength;\n    patch.length2 += extraLength;\n  }\n\n  return nullPadding;\n};\n\n\n/**\n * Look through the patches and break up any which are longer than the maximum\n * limit of the match algorithm.\n * Intended to be called only from within patch_apply.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n */\ndiff_match_patch.prototype.patch_splitMax = function(patches) {\n  var patch_size = this.Match_MaxBits;\n  for (var x = 0; x < patches.length; x++) {\n    if (patches[x].length1 <= patch_size) {\n      continue;\n    }\n    var bigpatch = patches[x];\n    // Remove the big old patch.\n    patches.splice(x--, 1);\n    var start1 = bigpatch.start1;\n    var start2 = bigpatch.start2;\n    var precontext = '';\n    while (bigpatch.diffs.length !== 0) {\n      // Create one of several smaller patches.\n      var patch = new diff_match_patch.patch_obj();\n      var empty = true;\n      patch.start1 = start1 - precontext.length;\n      patch.start2 = start2 - precontext.length;\n      if (precontext !== '') {\n        patch.length1 = patch.length2 = precontext.length;\n        patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, precontext));\n      }\n      while (bigpatch.diffs.length !== 0 &&\n             patch.length1 < patch_size - this.Patch_Margin) {\n        var diff_type = bigpatch.diffs[0][0];\n        var diff_text = bigpatch.diffs[0][1];\n        if (diff_type === DIFF_INSERT) {\n          // Insertions are harmless.\n          patch.length2 += diff_text.length;\n          start2 += diff_text.length;\n          patch.diffs.push(bigpatch.diffs.shift());\n          empty = false;\n        } else if (diff_type === DIFF_DELETE && patch.diffs.length == 1 &&\n                   patch.diffs[0][0] == DIFF_EQUAL &&\n                   diff_text.length > 2 * patch_size) {\n          // This is a large deletion.  Let it pass in one chunk.\n          patch.length1 += diff_text.length;\n          start1 += diff_text.length;\n          empty = false;\n          patch.diffs.push(new diff_match_patch.Diff(diff_type, diff_text));\n          bigpatch.diffs.shift();\n        } else {\n          // Deletion or equality.  Only take as much as we can stomach.\n          diff_text = diff_text.substring(0,\n              patch_size - patch.length1 - this.Patch_Margin);\n          patch.length1 += diff_text.length;\n          start1 += diff_text.length;\n          if (diff_type === DIFF_EQUAL) {\n            patch.length2 += diff_text.length;\n            start2 += diff_text.length;\n          } else {\n            empty = false;\n          }\n          patch.diffs.push(new diff_match_patch.Diff(diff_type, diff_text));\n          if (diff_text == bigpatch.diffs[0][1]) {\n            bigpatch.diffs.shift();\n          } else {\n            bigpatch.diffs[0][1] =\n                bigpatch.diffs[0][1].substring(diff_text.length);\n          }\n        }\n      }\n      // Compute the head context for the next patch.\n      precontext = this.diff_text2(patch.diffs);\n      precontext =\n          precontext.substring(precontext.length - this.Patch_Margin);\n      // Append the end context for this patch.\n      var postcontext = this.diff_text1(bigpatch.diffs)\n                            .substring(0, this.Patch_Margin);\n      if (postcontext !== '') {\n        patch.length1 += postcontext.length;\n        patch.length2 += postcontext.length;\n        if (patch.diffs.length !== 0 &&\n            patch.diffs[patch.diffs.length - 1][0] === DIFF_EQUAL) {\n          patch.diffs[patch.diffs.length - 1][1] += postcontext;\n        } else {\n          patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, postcontext));\n        }\n      }\n      if (!empty) {\n        patches.splice(++x, 0, patch);\n      }\n    }\n  }\n};\n\n\n/**\n * Take a list of patches and return a textual representation.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @return {string} Text representation of patches.\n */\ndiff_match_patch.prototype.patch_toText = function(patches) {\n  var text = [];\n  for (var x = 0; x < patches.length; x++) {\n    text[x] = patches[x];\n  }\n  return text.join('');\n};\n\n\n/**\n * Parse a textual representation of patches and return a list of Patch objects.\n * @param {string} textline Text representation of patches.\n * @return {!Array.<!diff_match_patch.patch_obj>} Array of Patch objects.\n * @throws {!Error} If invalid input.\n */\ndiff_match_patch.prototype.patch_fromText = function(textline) {\n  var patches = [];\n  if (!textline) {\n    return patches;\n  }\n  var text = textline.split('\\n');\n  var textPointer = 0;\n  var patchHeader = /^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;\n  while (textPointer < text.length) {\n    var m = text[textPointer].match(patchHeader);\n    if (!m) {\n      throw new Error('Invalid patch string: ' + text[textPointer]);\n    }\n    var patch = new diff_match_patch.patch_obj();\n    patches.push(patch);\n    patch.start1 = parseInt(m[1], 10);\n    if (m[2] === '') {\n      patch.start1--;\n      patch.length1 = 1;\n    } else if (m[2] == '0') {\n      patch.length1 = 0;\n    } else {\n      patch.start1--;\n      patch.length1 = parseInt(m[2], 10);\n    }\n\n    patch.start2 = parseInt(m[3], 10);\n    if (m[4] === '') {\n      patch.start2--;\n      patch.length2 = 1;\n    } else if (m[4] == '0') {\n      patch.length2 = 0;\n    } else {\n      patch.start2--;\n      patch.length2 = parseInt(m[4], 10);\n    }\n    textPointer++;\n\n    while (textPointer < text.length) {\n      var sign = text[textPointer].charAt(0);\n      try {\n        var line = decodeURI(text[textPointer].substring(1));\n      } catch (ex) {\n        // Malformed URI sequence.\n        throw new Error('Illegal escape in patch_fromText: ' + line);\n      }\n      if (sign == '-') {\n        // Deletion.\n        patch.diffs.push(new diff_match_patch.Diff(DIFF_DELETE, line));\n      } else if (sign == '+') {\n        // Insertion.\n        patch.diffs.push(new diff_match_patch.Diff(DIFF_INSERT, line));\n      } else if (sign == ' ') {\n        // Minor equality.\n        patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, line));\n      } else if (sign == '@') {\n        // Start of next patch.\n        break;\n      } else if (sign === '') {\n        // Blank line?  Whatever.\n      } else {\n        // WTF?\n        throw new Error('Invalid patch mode \"' + sign + '\" in: ' + line);\n      }\n      textPointer++;\n    }\n  }\n  return patches;\n};\n\n\n/**\n * Class representing one patch operation.\n * @constructor\n */\ndiff_match_patch.patch_obj = function() {\n  /** @type {!Array.<!diff_match_patch.Diff>} */\n  this.diffs = [];\n  /** @type {?number} */\n  this.start1 = null;\n  /** @type {?number} */\n  this.start2 = null;\n  /** @type {number} */\n  this.length1 = 0;\n  /** @type {number} */\n  this.length2 = 0;\n};\n\n\n/**\n * Emulate GNU diff's format.\n * Header: @@ -382,8 +481,9 @@\n * Indices are printed as 1-based, not 0-based.\n * @return {string} The GNU diff string.\n */\ndiff_match_patch.patch_obj.prototype.toString = function() {\n  var coords1, coords2;\n  if (this.length1 === 0) {\n    coords1 = this.start1 + ',0';\n  } else if (this.length1 == 1) {\n    coords1 = this.start1 + 1;\n  } else {\n    coords1 = (this.start1 + 1) + ',' + this.length1;\n  }\n  if (this.length2 === 0) {\n    coords2 = this.start2 + ',0';\n  } else if (this.length2 == 1) {\n    coords2 = this.start2 + 1;\n  } else {\n    coords2 = (this.start2 + 1) + ',' + this.length2;\n  }\n  var text = ['@@ -' + coords1 + ' +' + coords2 + ' @@\\n'];\n  var op;\n  // Escape the body of the patch with %xx notation.\n  diff_match_patch.prototype.diff_cleanupSplitSurrogates(this.diffs);\n  for (var x = 0; x < this.diffs.length; x++) {\n    switch (this.diffs[x][0]) {\n      case DIFF_INSERT:\n        op = '+';\n        break;\n      case DIFF_DELETE:\n        op = '-';\n        break;\n      case DIFF_EQUAL:\n        op = ' ';\n        break;\n    }\n    text[x + 1] = op + encodeURI(this.diffs[x][1]) + '\\n';\n  }\n  return text.join('').replace(/%20/g, ' ');\n};","const executeScript = require('./execute')\nconst parser = require('./parser')\n\nfunction checkScript(script) {\n  try {\n    parser.parse(script)\n    return true\n  } catch (e) {\n    return false\n  }\n}\n\nmodule.exports = {\n  checkScript,\n  executeScript,\n  parseScript: parser.parse,\n}\n","import { assert } from '@ember/debug';\n\nimport { isDescriptor } from './-private/class-field-descriptor.js';\n\n/**\n * A macro that takes a decorator function and allows it to optionally\n * receive parameters\n *\n * ```js\n * let foo = decoratorWithParams((target, desc, key, params) => {\n *   console.log(params);\n * });\n *\n * class {\n *   @foo bar; // undefined\n *   @foo('bar') baz; // ['bar']\n * }\n * ```\n *\n * @param {Function} fn - decorator function\n */\nexport function decoratorWithParams(fn) {\n  return function(...params) {\n    // determine if user called as @computed('blah', 'blah') or @computed\n    if (isDescriptor(params)) {\n      return fn(...params);\n    } else {\n      return (...desc) => fn(...desc, params);\n    }\n  };\n}\n\n/**\n * A macro that takes a decorator function and requires it to receive\n * parameters:\n *\n * ```js\n * let foo = decoratorWithRequiredParams((target, desc, key, params) => {\n *   console.log(params);\n * });\n *\n * class {\n *   @foo('bar') baz; // ['bar']\n *   @foo bar; // Error\n * }\n * ```\n *\n * @param {Function} fn - decorator function\n */\nexport function decoratorWithRequiredParams(fn, name) {\n  return function(...params) {\n    assert(\n      `The @${name || fn.name} decorator requires parameters`,\n      !isDescriptor(params) && params.length > 0\n    );\n\n    return (...desc) => fn(...desc, params);\n  };\n}\n","function isClassDescriptor(possibleDesc) {\n  let [target] = possibleDesc;\n\n  return (\n    possibleDesc.length === 1 &&\n    typeof target === 'function' &&\n    'prototype' in target &&\n    !target.__isComputedDecorator\n  );\n}\n\nexport function isFieldDescriptor(possibleDesc) {\n  let [target, key, desc] = possibleDesc;\n\n  return (\n    possibleDesc.length === 3 &&\n    typeof target === 'object' &&\n    target !== null &&\n    typeof key === 'string' &&\n    ((typeof desc === 'object' &&\n      desc !== null &&\n      'enumerable' in desc &&\n      'configurable' in desc) ||\n      desc === undefined) // TS compatibility\n  );\n}\n\nexport function isDescriptor(possibleDesc) {\n  return isFieldDescriptor(possibleDesc) || isClassDescriptor(possibleDesc);\n}\n","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n    return cooked;\n};\nvar PacketKind;\n(function (PacketKind) {\n    PacketKind[PacketKind[\"EOS\"] = 0] = \"EOS\";\n    PacketKind[PacketKind[\"Text\"] = 1] = \"Text\";\n    PacketKind[PacketKind[\"Incomplete\"] = 2] = \"Incomplete\";\n    PacketKind[PacketKind[\"ESC\"] = 3] = \"ESC\";\n    PacketKind[PacketKind[\"Unknown\"] = 4] = \"Unknown\";\n    PacketKind[PacketKind[\"SGR\"] = 5] = \"SGR\";\n    PacketKind[PacketKind[\"OSCURL\"] = 6] = \"OSCURL\";\n})(PacketKind || (PacketKind = {}));\nexport class AnsiUp {\n    constructor() {\n        this.VERSION = \"6.0.6\";\n        this.setup_palettes();\n        this._use_classes = false;\n        this.bold = false;\n        this.faint = false;\n        this.italic = false;\n        this.underline = false;\n        this.fg = this.bg = null;\n        this._buffer = '';\n        this._url_allowlist = { 'http': 1, 'https': 1 };\n        this._escape_html = true;\n        this.boldStyle = 'font-weight:bold';\n        this.faintStyle = 'opacity:0.7';\n        this.italicStyle = 'font-style:italic';\n        this.underlineStyle = 'text-decoration:underline';\n        this._boldClass = 'ansi-bold';\n        this._faintClass = 'ansi-faint';\n        this._italicClass = 'ansi-italic';\n        this._underlineClass = 'ansi-underline';\n    }\n    set use_classes(arg) {\n        this._use_classes = arg;\n    }\n    get use_classes() {\n        return this._use_classes;\n    }\n    set url_allowlist(arg) {\n        this._url_allowlist = arg;\n    }\n    get url_allowlist() {\n        return this._url_allowlist;\n    }\n    set escape_html(arg) {\n        this._escape_html = arg;\n    }\n    get escape_html() {\n        return this._escape_html;\n    }\n    set boldStyle(arg) { this._boldStyle = arg; }\n    get boldStyle() { return this._boldStyle; }\n    set faintStyle(arg) { this._faintStyle = arg; }\n    get faintStyle() { return this._faintStyle; }\n    set italicStyle(arg) { this._italicStyle = arg; }\n    get italicStyle() { return this._italicStyle; }\n    set underlineStyle(arg) { this._underlineStyle = arg; }\n    get underlineStyle() { return this._underlineStyle; }\n    setup_palettes() {\n        this.ansi_colors =\n            [\n                [\n                    { rgb: [0, 0, 0], class_name: \"ansi-black\" },\n                    { rgb: [187, 0, 0], class_name: \"ansi-red\" },\n                    { rgb: [0, 187, 0], class_name: \"ansi-green\" },\n                    { rgb: [187, 187, 0], class_name: \"ansi-yellow\" },\n                    { rgb: [0, 0, 187], class_name: \"ansi-blue\" },\n                    { rgb: [187, 0, 187], class_name: \"ansi-magenta\" },\n                    { rgb: [0, 187, 187], class_name: \"ansi-cyan\" },\n                    { rgb: [255, 255, 255], class_name: \"ansi-white\" }\n                ],\n                [\n                    { rgb: [85, 85, 85], class_name: \"ansi-bright-black\" },\n                    { rgb: [255, 85, 85], class_name: \"ansi-bright-red\" },\n                    { rgb: [0, 255, 0], class_name: \"ansi-bright-green\" },\n                    { rgb: [255, 255, 85], class_name: \"ansi-bright-yellow\" },\n                    { rgb: [85, 85, 255], class_name: \"ansi-bright-blue\" },\n                    { rgb: [255, 85, 255], class_name: \"ansi-bright-magenta\" },\n                    { rgb: [85, 255, 255], class_name: \"ansi-bright-cyan\" },\n                    { rgb: [255, 255, 255], class_name: \"ansi-bright-white\" }\n                ]\n            ];\n        this.palette_256 = [];\n        this.ansi_colors.forEach(palette => {\n            palette.forEach(rec => {\n                rec.truecolor_class_name = rec.class_name;\n                this.palette_256.push(rec);\n            });\n        });\n        let levels = [0, 95, 135, 175, 215, 255];\n        let xterm_index = 16;\n        for (let r = 0; r < 6; ++r) {\n            for (let g = 0; g < 6; ++g) {\n                for (let b = 0; b < 6; ++b) {\n                    let class_name = `ansi-xterm-${xterm_index}`;\n                    let col = { rgb: [levels[r], levels[g], levels[b]], class_name: class_name, truecolor_class_name: class_name };\n                    this.palette_256.push(col);\n                    ++xterm_index;\n                }\n            }\n        }\n        let grey_level = 8;\n        for (let i = 0; i < 24; ++i, grey_level += 10) {\n            let class_name = `ansi-xterm-${xterm_index}`;\n            let gry = { rgb: [grey_level, grey_level, grey_level], class_name: class_name, truecolor_class_name: class_name };\n            this.palette_256.push(gry);\n            ++xterm_index;\n        }\n    }\n    rgb_to_xterm_index(r, g, b) {\n        let best_index = 0;\n        let best_distance = Number.MAX_VALUE;\n        this.palette_256.forEach((rec, idx) => {\n            let dr = rec.rgb[0] - r;\n            let dg = rec.rgb[1] - g;\n            let db = rec.rgb[2] - b;\n            let distance = dr * dr + dg * dg + db * db;\n            if (distance < best_distance) {\n                best_distance = distance;\n                best_index = idx;\n            }\n        });\n        return best_index;\n    }\n    escape_txt_for_html(txt) {\n        if (!this._escape_html)\n            return txt;\n        return txt.replace(/[&<>\"']/gm, (str) => {\n            if (str === \"&\")\n                return \"&amp;\";\n            if (str === \"<\")\n                return \"&lt;\";\n            if (str === \">\")\n                return \"&gt;\";\n            if (str === \"\\\"\")\n                return \"&quot;\";\n            if (str === \"'\")\n                return \"&#x27;\";\n        });\n    }\n    append_buffer(txt) {\n        var str = this._buffer + txt;\n        this._buffer = str;\n    }\n    get_next_packet() {\n        var pkt = {\n            kind: PacketKind.EOS,\n            text: '',\n            url: ''\n        };\n        var len = this._buffer.length;\n        if (len == 0)\n            return pkt;\n        var pos = this._buffer.indexOf(\"\\x1B\");\n        if (pos == -1) {\n            pkt.kind = PacketKind.Text;\n            pkt.text = this._buffer;\n            this._buffer = '';\n            return pkt;\n        }\n        if (pos > 0) {\n            pkt.kind = PacketKind.Text;\n            pkt.text = this._buffer.slice(0, pos);\n            this._buffer = this._buffer.slice(pos);\n            return pkt;\n        }\n        if (pos == 0) {\n            if (len < 3) {\n                pkt.kind = PacketKind.Incomplete;\n                return pkt;\n            }\n            var next_char = this._buffer.charAt(1);\n            if ((next_char != '[') && (next_char != ']') && (next_char != '(')) {\n                pkt.kind = PacketKind.ESC;\n                pkt.text = this._buffer.slice(0, 1);\n                this._buffer = this._buffer.slice(1);\n                return pkt;\n            }\n            if (next_char == '[') {\n                if (!this._csi_regex) {\n                    this._csi_regex = rgx(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n                        ^                           # beginning of line\\n                                                    #\\n                                                    # First attempt\\n                        (?:                         # legal sequence\\n                          \\u001B[                      # CSI\\n                          ([<-?]?)              # private-mode char\\n                          ([d;]*)                    # any digits or semicolons\\n                          ([ -/]?               # an intermediate modifier\\n                          [@-~])                # the command\\n                        )\\n                        |                           # alternate (second attempt)\\n                        (?:                         # illegal sequence\\n                          \\u001B[                      # CSI\\n                          [ -~]*                # anything legal\\n                          ([\\0-\\u001F:])              # anything illegal\\n                        )\\n                    \"], [\"\\n                        ^                           # beginning of line\\n                                                    #\\n                                                    # First attempt\\n                        (?:                         # legal sequence\\n                          \\\\x1b\\\\[                      # CSI\\n                          ([\\\\x3c-\\\\x3f]?)              # private-mode char\\n                          ([\\\\d;]*)                    # any digits or semicolons\\n                          ([\\\\x20-\\\\x2f]?               # an intermediate modifier\\n                          [\\\\x40-\\\\x7e])                # the command\\n                        )\\n                        |                           # alternate (second attempt)\\n                        (?:                         # illegal sequence\\n                          \\\\x1b\\\\[                      # CSI\\n                          [\\\\x20-\\\\x7e]*                # anything legal\\n                          ([\\\\x00-\\\\x1f:])              # anything illegal\\n                        )\\n                    \"])));\n                }\n                let match = this._buffer.match(this._csi_regex);\n                if (match === null) {\n                    pkt.kind = PacketKind.Incomplete;\n                    return pkt;\n                }\n                if (match[4]) {\n                    pkt.kind = PacketKind.ESC;\n                    pkt.text = this._buffer.slice(0, 1);\n                    this._buffer = this._buffer.slice(1);\n                    return pkt;\n                }\n                if ((match[1] != '') || (match[3] != 'm'))\n                    pkt.kind = PacketKind.Unknown;\n                else\n                    pkt.kind = PacketKind.SGR;\n                pkt.text = match[2];\n                var rpos = match[0].length;\n                this._buffer = this._buffer.slice(rpos);\n                return pkt;\n            }\n            else if (next_char == ']') {\n                if (len < 4) {\n                    pkt.kind = PacketKind.Incomplete;\n                    return pkt;\n                }\n                if ((this._buffer.charAt(2) != '8')\n                    || (this._buffer.charAt(3) != ';')) {\n                    pkt.kind = PacketKind.ESC;\n                    pkt.text = this._buffer.slice(0, 1);\n                    this._buffer = this._buffer.slice(1);\n                    return pkt;\n                }\n                if (!this._osc_st) {\n                    this._osc_st = rgxG(templateObject_2 || (templateObject_2 = __makeTemplateObject([\"\\n                        (?:                         # legal sequence\\n                          (\\u001B\\\\)                    # ESC                           |                           # alternate\\n                          (\\u0007)                      # BEL (what xterm did)\\n                        )\\n                        |                           # alternate (second attempt)\\n                        (                           # illegal sequence\\n                          [\\0-\\u0006]                 # anything illegal\\n                          |                           # alternate\\n                          [\\b-\\u001A]                 # anything illegal\\n                          |                           # alternate\\n                          [\\u001C-\\u001F]                 # anything illegal\\n                        )\\n                    \"], [\"\\n                        (?:                         # legal sequence\\n                          (\\\\x1b\\\\\\\\)                    # ESC \\\\\\n                          |                           # alternate\\n                          (\\\\x07)                      # BEL (what xterm did)\\n                        )\\n                        |                           # alternate (second attempt)\\n                        (                           # illegal sequence\\n                          [\\\\x00-\\\\x06]                 # anything illegal\\n                          |                           # alternate\\n                          [\\\\x08-\\\\x1a]                 # anything illegal\\n                          |                           # alternate\\n                          [\\\\x1c-\\\\x1f]                 # anything illegal\\n                        )\\n                    \"])));\n                }\n                this._osc_st.lastIndex = 0;\n                {\n                    let match = this._osc_st.exec(this._buffer);\n                    if (match === null) {\n                        pkt.kind = PacketKind.Incomplete;\n                        return pkt;\n                    }\n                    if (match[3]) {\n                        pkt.kind = PacketKind.ESC;\n                        pkt.text = this._buffer.slice(0, 1);\n                        this._buffer = this._buffer.slice(1);\n                        return pkt;\n                    }\n                }\n                {\n                    let match = this._osc_st.exec(this._buffer);\n                    if (match === null) {\n                        pkt.kind = PacketKind.Incomplete;\n                        return pkt;\n                    }\n                    if (match[3]) {\n                        pkt.kind = PacketKind.ESC;\n                        pkt.text = this._buffer.slice(0, 1);\n                        this._buffer = this._buffer.slice(1);\n                        return pkt;\n                    }\n                }\n                if (!this._osc_regex) {\n                    this._osc_regex = rgx(templateObject_3 || (templateObject_3 = __makeTemplateObject([\"\\n                        ^                           # beginning of line\\n                                                    #\\n                        \\u001B]8;                    # OSC Hyperlink\\n                        [ -:<-~]*       # params (excluding ;)\\n                        ;                           # end of params\\n                        ([!-~]{0,512})        # URL capture\\n                        (?:                         # ST\\n                          (?:\\u001B\\\\)                  # ESC                           |                           # alternate\\n                          (?:\\u0007)                    # BEL (what xterm did)\\n                        )\\n                        ([ -~]+)              # TEXT capture\\n                        \\u001B]8;;                   # OSC Hyperlink End\\n                        (?:                         # ST\\n                          (?:\\u001B\\\\)                  # ESC                           |                           # alternate\\n                          (?:\\u0007)                    # BEL (what xterm did)\\n                        )\\n                    \"], [\"\\n                        ^                           # beginning of line\\n                                                    #\\n                        \\\\x1b\\\\]8;                    # OSC Hyperlink\\n                        [\\\\x20-\\\\x3a\\\\x3c-\\\\x7e]*       # params (excluding ;)\\n                        ;                           # end of params\\n                        ([\\\\x21-\\\\x7e]{0,512})        # URL capture\\n                        (?:                         # ST\\n                          (?:\\\\x1b\\\\\\\\)                  # ESC \\\\\\n                          |                           # alternate\\n                          (?:\\\\x07)                    # BEL (what xterm did)\\n                        )\\n                        ([\\\\x20-\\\\x7e]+)              # TEXT capture\\n                        \\\\x1b\\\\]8;;                   # OSC Hyperlink End\\n                        (?:                         # ST\\n                          (?:\\\\x1b\\\\\\\\)                  # ESC \\\\\\n                          |                           # alternate\\n                          (?:\\\\x07)                    # BEL (what xterm did)\\n                        )\\n                    \"])));\n                }\n                let match = this._buffer.match(this._osc_regex);\n                if (match === null) {\n                    pkt.kind = PacketKind.ESC;\n                    pkt.text = this._buffer.slice(0, 1);\n                    this._buffer = this._buffer.slice(1);\n                    return pkt;\n                }\n                pkt.kind = PacketKind.OSCURL;\n                pkt.url = match[1];\n                pkt.text = match[2];\n                var rpos = match[0].length;\n                this._buffer = this._buffer.slice(rpos);\n                return pkt;\n            }\n            else if (next_char == '(') {\n                pkt.kind = PacketKind.Unknown;\n                this._buffer = this._buffer.slice(3);\n                return pkt;\n            }\n        }\n    }\n    ansi_to_html(txt) {\n        this.append_buffer(txt);\n        var blocks = [];\n        while (true) {\n            var packet = this.get_next_packet();\n            if ((packet.kind == PacketKind.EOS)\n                || (packet.kind == PacketKind.Incomplete))\n                break;\n            if ((packet.kind == PacketKind.ESC)\n                || (packet.kind == PacketKind.Unknown))\n                continue;\n            if (packet.kind == PacketKind.Text)\n                blocks.push(this.transform_to_html(this.with_state(packet)));\n            else if (packet.kind == PacketKind.SGR)\n                this.process_ansi(packet);\n            else if (packet.kind == PacketKind.OSCURL)\n                blocks.push(this.process_hyperlink(packet));\n        }\n        return blocks.join(\"\");\n    }\n    with_state(pkt) {\n        return { bold: this.bold, faint: this.faint, italic: this.italic, underline: this.underline, fg: this.fg, bg: this.bg, text: pkt.text };\n    }\n    process_ansi(pkt) {\n        let sgr_cmds = pkt.text.split(';');\n        while (sgr_cmds.length > 0) {\n            let sgr_cmd_str = sgr_cmds.shift();\n            let num = parseInt(sgr_cmd_str, 10);\n            if (isNaN(num) || num === 0) {\n                this.fg = null;\n                this.bg = null;\n                this.bold = false;\n                this.faint = false;\n                this.italic = false;\n                this.underline = false;\n            }\n            else if (num === 1) {\n                this.bold = true;\n            }\n            else if (num === 2) {\n                this.faint = true;\n            }\n            else if (num === 3) {\n                this.italic = true;\n            }\n            else if (num === 4) {\n                this.underline = true;\n            }\n            else if (num === 21) {\n                this.bold = false;\n            }\n            else if (num === 22) {\n                this.faint = false;\n                this.bold = false;\n            }\n            else if (num === 23) {\n                this.italic = false;\n            }\n            else if (num === 24) {\n                this.underline = false;\n            }\n            else if (num === 39) {\n                this.fg = null;\n            }\n            else if (num === 49) {\n                this.bg = null;\n            }\n            else if ((num >= 30) && (num < 38)) {\n                this.fg = this.ansi_colors[0][(num - 30)];\n            }\n            else if ((num >= 40) && (num < 48)) {\n                this.bg = this.ansi_colors[0][(num - 40)];\n            }\n            else if ((num >= 90) && (num < 98)) {\n                this.fg = this.ansi_colors[1][(num - 90)];\n            }\n            else if ((num >= 100) && (num < 108)) {\n                this.bg = this.ansi_colors[1][(num - 100)];\n            }\n            else if (num === 38 || num === 48) {\n                if (sgr_cmds.length > 0) {\n                    let is_foreground = (num === 38);\n                    let mode_cmd = sgr_cmds.shift();\n                    if (mode_cmd === '5' && sgr_cmds.length > 0) {\n                        let palette_index = parseInt(sgr_cmds.shift(), 10);\n                        if (palette_index >= 0 && palette_index <= 255) {\n                            if (is_foreground)\n                                this.fg = this.palette_256[palette_index];\n                            else\n                                this.bg = this.palette_256[palette_index];\n                        }\n                    }\n                    if (mode_cmd === '2' && sgr_cmds.length > 2) {\n                        let r = parseInt(sgr_cmds.shift(), 10);\n                        let g = parseInt(sgr_cmds.shift(), 10);\n                        let b = parseInt(sgr_cmds.shift(), 10);\n                        if ((r >= 0 && r <= 255) && (g >= 0 && g <= 255) && (b >= 0 && b <= 255)) {\n                            let nearest_idx = this.rgb_to_xterm_index(r, g, b);\n                            let nearest_color = this.palette_256[nearest_idx];\n                            let c = {\n                                rgb: [r, g, b],\n                                class_name: 'truecolor',\n                                truecolor_class_name: nearest_color.truecolor_class_name || nearest_color.class_name\n                            };\n                            if (is_foreground)\n                                this.fg = c;\n                            else\n                                this.bg = c;\n                        }\n                    }\n                }\n            }\n        }\n    }\n    transform_to_html(fragment) {\n        let txt = fragment.text;\n        if (txt.length === 0)\n            return txt;\n        txt = this.escape_txt_for_html(txt);\n        if (!fragment.bold && !fragment.italic && !fragment.faint && !fragment.underline && fragment.fg === null && fragment.bg === null)\n            return txt;\n        let styles = [];\n        let classes = [];\n        let fg = fragment.fg;\n        let bg = fragment.bg;\n        if (this._use_classes) {\n            if (fragment.bold)\n                classes.push(this._boldClass);\n            if (fragment.faint)\n                classes.push(this._faintClass);\n            if (fragment.italic)\n                classes.push(this._italicClass);\n            if (fragment.underline)\n                classes.push(this._underlineClass);\n        }\n        else {\n            if (fragment.bold)\n                styles.push(this._boldStyle);\n            if (fragment.faint)\n                styles.push(this._faintStyle);\n            if (fragment.italic)\n                styles.push(this._italicStyle);\n            if (fragment.underline)\n                styles.push(this._underlineStyle);\n        }\n        if (!this._use_classes) {\n            if (fg)\n                styles.push(`color:rgb(${fg.rgb.join(',')})`);\n            if (bg)\n                styles.push(`background-color:rgb(${bg.rgb})`);\n        }\n        else {\n            if (fg) {\n                let fg_class_name = fg.class_name;\n                if (fg_class_name === 'truecolor')\n                    fg_class_name = fg.truecolor_class_name || fg_class_name;\n                classes.push(`${fg_class_name}-fg`);\n            }\n            if (bg) {\n                let bg_class_name = bg.class_name;\n                if (bg_class_name === 'truecolor')\n                    bg_class_name = bg.truecolor_class_name || bg_class_name;\n                classes.push(`${bg_class_name}-bg`);\n            }\n        }\n        let class_string = '';\n        let style_string = '';\n        if (classes.length)\n            class_string = ` class=\"${classes.join(' ')}\"`;\n        if (styles.length)\n            style_string = ` style=\"${styles.join(';')}\"`;\n        return `<span${style_string}${class_string}>${txt}</span>`;\n    }\n    ;\n    process_hyperlink(pkt) {\n        let parts = pkt.url.split(':');\n        if (parts.length < 1)\n            return '';\n        if (!this._url_allowlist[parts[0]])\n            return '';\n        let result = `<a href=\"${this.escape_txt_for_html(pkt.url)}\">${this.escape_txt_for_html(pkt.text)}</a>`;\n        return result;\n    }\n}\nfunction rgx(tmplObj, ...subst) {\n    let regexText = tmplObj.raw[0];\n    let wsrgx = /^\\s+|\\s+\\n|\\s*#[\\s\\S]*?\\n|\\n/gm;\n    let txt2 = regexText.replace(wsrgx, '');\n    return new RegExp(txt2);\n}\nfunction rgxG(tmplObj, ...subst) {\n    let regexText = tmplObj.raw[0];\n    let wsrgx = /^\\s+|\\s+\\n|\\s*#[\\s\\S]*?\\n|\\n/gm;\n    let txt2 = regexText.replace(wsrgx, '');\n    return new RegExp(txt2, 'g');\n}\nvar templateObject_1, templateObject_2, templateObject_3;\n","(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t/**\n\t * Plugin name which is used as a class name for <pre> which is activating the plugin\n\t *\n\t * @type {string}\n\t */\n\tvar PLUGIN_NAME = 'line-numbers';\n\n\t/**\n\t * Regular expression used for determining line breaks\n\t *\n\t * @type {RegExp}\n\t */\n\tvar NEW_LINE_EXP = /\\n(?!$)/g;\n\n\n\t/**\n\t * Global exports\n\t */\n\tvar config = Prism.plugins.lineNumbers = {\n\t\t/**\n\t\t * Get node for provided line number\n\t\t *\n\t\t * @param {Element} element pre element\n\t\t * @param {number} number line number\n\t\t * @returns {Element|undefined}\n\t\t */\n\t\tgetLine: function (element, number) {\n\t\t\tif (element.tagName !== 'PRE' || !element.classList.contains(PLUGIN_NAME)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar lineNumberRows = element.querySelector('.line-numbers-rows');\n\t\t\tif (!lineNumberRows) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar lineNumberStart = parseInt(element.getAttribute('data-start'), 10) || 1;\n\t\t\tvar lineNumberEnd = lineNumberStart + (lineNumberRows.children.length - 1);\n\n\t\t\tif (number < lineNumberStart) {\n\t\t\t\tnumber = lineNumberStart;\n\t\t\t}\n\t\t\tif (number > lineNumberEnd) {\n\t\t\t\tnumber = lineNumberEnd;\n\t\t\t}\n\n\t\t\tvar lineIndex = number - lineNumberStart;\n\n\t\t\treturn lineNumberRows.children[lineIndex];\n\t\t},\n\n\t\t/**\n\t\t * Resizes the line numbers of the given element.\n\t\t *\n\t\t * This function will not add line numbers. It will only resize existing ones.\n\t\t *\n\t\t * @param {HTMLElement} element A `<pre>` element with line numbers.\n\t\t * @returns {void}\n\t\t */\n\t\tresize: function (element) {\n\t\t\tresizeElements([element]);\n\t\t},\n\n\t\t/**\n\t\t * Whether the plugin can assume that the units font sizes and margins are not depended on the size of\n\t\t * the current viewport.\n\t\t *\n\t\t * Setting this to `true` will allow the plugin to do certain optimizations for better performance.\n\t\t *\n\t\t * Set this to `false` if you use any of the following CSS units: `vh`, `vw`, `vmin`, `vmax`.\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\tassumeViewportIndependence: true\n\t};\n\n\t/**\n\t * Resizes the given elements.\n\t *\n\t * @param {HTMLElement[]} elements\n\t */\n\tfunction resizeElements(elements) {\n\t\telements = elements.filter(function (e) {\n\t\t\tvar codeStyles = getStyles(e);\n\t\t\tvar whiteSpace = codeStyles['white-space'];\n\t\t\treturn whiteSpace === 'pre-wrap' || whiteSpace === 'pre-line';\n\t\t});\n\n\t\tif (elements.length == 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar infos = elements.map(function (element) {\n\t\t\tvar codeElement = element.querySelector('code');\n\t\t\tvar lineNumbersWrapper = element.querySelector('.line-numbers-rows');\n\t\t\tif (!codeElement || !lineNumbersWrapper) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\t/** @type {HTMLElement} */\n\t\t\tvar lineNumberSizer = element.querySelector('.line-numbers-sizer');\n\t\t\tvar codeLines = codeElement.textContent.split(NEW_LINE_EXP);\n\n\t\t\tif (!lineNumberSizer) {\n\t\t\t\tlineNumberSizer = document.createElement('span');\n\t\t\t\tlineNumberSizer.className = 'line-numbers-sizer';\n\n\t\t\t\tcodeElement.appendChild(lineNumberSizer);\n\t\t\t}\n\n\t\t\tlineNumberSizer.innerHTML = '0';\n\t\t\tlineNumberSizer.style.display = 'block';\n\n\t\t\tvar oneLinerHeight = lineNumberSizer.getBoundingClientRect().height;\n\t\t\tlineNumberSizer.innerHTML = '';\n\n\t\t\treturn {\n\t\t\t\telement: element,\n\t\t\t\tlines: codeLines,\n\t\t\t\tlineHeights: [],\n\t\t\t\toneLinerHeight: oneLinerHeight,\n\t\t\t\tsizer: lineNumberSizer,\n\t\t\t};\n\t\t}).filter(Boolean);\n\n\t\tinfos.forEach(function (info) {\n\t\t\tvar lineNumberSizer = info.sizer;\n\t\t\tvar lines = info.lines;\n\t\t\tvar lineHeights = info.lineHeights;\n\t\t\tvar oneLinerHeight = info.oneLinerHeight;\n\n\t\t\tlineHeights[lines.length - 1] = undefined;\n\t\t\tlines.forEach(function (line, index) {\n\t\t\t\tif (line && line.length > 1) {\n\t\t\t\t\tvar e = lineNumberSizer.appendChild(document.createElement('span'));\n\t\t\t\t\te.style.display = 'block';\n\t\t\t\t\te.textContent = line;\n\t\t\t\t} else {\n\t\t\t\t\tlineHeights[index] = oneLinerHeight;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tinfos.forEach(function (info) {\n\t\t\tvar lineNumberSizer = info.sizer;\n\t\t\tvar lineHeights = info.lineHeights;\n\n\t\t\tvar childIndex = 0;\n\t\t\tfor (var i = 0; i < lineHeights.length; i++) {\n\t\t\t\tif (lineHeights[i] === undefined) {\n\t\t\t\t\tlineHeights[i] = lineNumberSizer.children[childIndex++].getBoundingClientRect().height;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tinfos.forEach(function (info) {\n\t\t\tvar lineNumberSizer = info.sizer;\n\t\t\tvar wrapper = info.element.querySelector('.line-numbers-rows');\n\n\t\t\tlineNumberSizer.style.display = 'none';\n\t\t\tlineNumberSizer.innerHTML = '';\n\n\t\t\tinfo.lineHeights.forEach(function (height, lineNumber) {\n\t\t\t\twrapper.children[lineNumber].style.height = height + 'px';\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Returns style declarations for the element\n\t *\n\t * @param {Element} element\n\t */\n\tfunction getStyles(element) {\n\t\tif (!element) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn window.getComputedStyle ? getComputedStyle(element) : (element.currentStyle || null);\n\t}\n\n\tvar lastWidth = undefined;\n\twindow.addEventListener('resize', function () {\n\t\tif (config.assumeViewportIndependence && lastWidth === window.innerWidth) {\n\t\t\treturn;\n\t\t}\n\t\tlastWidth = window.innerWidth;\n\n\t\tresizeElements(Array.prototype.slice.call(document.querySelectorAll('pre.' + PLUGIN_NAME)));\n\t});\n\n\tPrism.hooks.add('complete', function (env) {\n\t\tif (!env.code) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar code = /** @type {Element} */ (env.element);\n\t\tvar pre = /** @type {HTMLElement} */ (code.parentNode);\n\n\t\t// works only for <code> wrapped inside <pre> (not inline)\n\t\tif (!pre || !/pre/i.test(pre.nodeName)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Abort if line numbers already exists\n\t\tif (code.querySelector('.line-numbers-rows')) {\n\t\t\treturn;\n\t\t}\n\n\t\t// only add line numbers if <code> or one of its ancestors has the `line-numbers` class\n\t\tif (!Prism.util.isActive(code, PLUGIN_NAME)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remove the class 'line-numbers' from the <code>\n\t\tcode.classList.remove(PLUGIN_NAME);\n\t\t// Add the class 'line-numbers' to the <pre>\n\t\tpre.classList.add(PLUGIN_NAME);\n\n\t\tvar match = env.code.match(NEW_LINE_EXP);\n\t\tvar linesNum = match ? match.length + 1 : 1;\n\t\tvar lineNumbersWrapper;\n\n\t\tvar lines = new Array(linesNum + 1).join('<span></span>');\n\n\t\tlineNumbersWrapper = document.createElement('span');\n\t\tlineNumbersWrapper.setAttribute('aria-hidden', 'true');\n\t\tlineNumbersWrapper.className = 'line-numbers-rows';\n\t\tlineNumbersWrapper.innerHTML = lines;\n\n\t\tif (pre.hasAttribute('data-start')) {\n\t\t\tpre.style.counterReset = 'linenumber ' + (parseInt(pre.getAttribute('data-start'), 10) - 1);\n\t\t}\n\n\t\tenv.element.appendChild(lineNumbersWrapper);\n\n\t\tresizeElements([pre]);\n\n\t\tPrism.hooks.run('line-numbers', env);\n\t});\n\n\tPrism.hooks.add('line-numbers', function (env) {\n\t\tenv.plugins = env.plugins || {};\n\t\tenv.plugins.lineNumbers = true;\n\t});\n\n}());\n","(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined' || !document.querySelector) {\n\t\treturn;\n\t}\n\n\tvar LINE_NUMBERS_CLASS = 'line-numbers';\n\tvar LINKABLE_LINE_NUMBERS_CLASS = 'linkable-line-numbers';\n\tvar NEW_LINE_EXP = /\\n(?!$)/g;\n\n\t/**\n\t * @param {string} selector\n\t * @param {ParentNode} [container]\n\t * @returns {HTMLElement[]}\n\t */\n\tfunction $$(selector, container) {\n\t\treturn Array.prototype.slice.call((container || document).querySelectorAll(selector));\n\t}\n\n\t/**\n\t * Returns whether the given element has the given class.\n\t *\n\t * @param {Element} element\n\t * @param {string} className\n\t * @returns {boolean}\n\t */\n\tfunction hasClass(element, className) {\n\t\treturn element.classList.contains(className);\n\t}\n\n\t/**\n\t * Calls the given function.\n\t *\n\t * @param {() => any} func\n\t * @returns {void}\n\t */\n\tfunction callFunction(func) {\n\t\tfunc();\n\t}\n\n\t// Some browsers round the line-height, others don't.\n\t// We need to test for it to position the elements properly.\n\tvar isLineHeightRounded = (function () {\n\t\tvar res;\n\t\treturn function () {\n\t\t\tif (typeof res === 'undefined') {\n\t\t\t\tvar d = document.createElement('div');\n\t\t\t\td.style.fontSize = '13px';\n\t\t\t\td.style.lineHeight = '1.5';\n\t\t\t\td.style.padding = '0';\n\t\t\t\td.style.border = '0';\n\t\t\t\td.innerHTML = '&nbsp;<br />&nbsp;';\n\t\t\t\tdocument.body.appendChild(d);\n\t\t\t\t// Browsers that round the line-height should have offsetHeight === 38\n\t\t\t\t// The others should have 39.\n\t\t\t\tres = d.offsetHeight === 38;\n\t\t\t\tdocument.body.removeChild(d);\n\t\t\t}\n\t\t\treturn res;\n\t\t};\n\t}());\n\n\t/**\n\t * Returns the top offset of the content box of the given parent and the content box of one of its children.\n\t *\n\t * @param {HTMLElement} parent\n\t * @param {HTMLElement} child\n\t */\n\tfunction getContentBoxTopOffset(parent, child) {\n\t\tvar parentStyle = getComputedStyle(parent);\n\t\tvar childStyle = getComputedStyle(child);\n\n\t\t/**\n\t\t * Returns the numeric value of the given pixel value.\n\t\t *\n\t\t * @param {string} px\n\t\t */\n\t\tfunction pxToNumber(px) {\n\t\t\treturn +px.substr(0, px.length - 2);\n\t\t}\n\n\t\treturn child.offsetTop\n\t\t\t+ pxToNumber(childStyle.borderTopWidth)\n\t\t\t+ pxToNumber(childStyle.paddingTop)\n\t\t\t- pxToNumber(parentStyle.paddingTop);\n\t}\n\n\t/**\n\t * Returns whether the Line Highlight plugin is active for the given element.\n\t *\n\t * If this function returns `false`, do not call `highlightLines` for the given element.\n\t *\n\t * @param {HTMLElement | null | undefined} pre\n\t * @returns {boolean}\n\t */\n\tfunction isActiveFor(pre) {\n\t\tif (!pre || !/pre/i.test(pre.nodeName)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (pre.hasAttribute('data-line')) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (pre.id && Prism.util.isActive(pre, LINKABLE_LINE_NUMBERS_CLASS)) {\n\t\t\t// Technically, the line numbers plugin is also necessary but this plugin doesn't control the classes of\n\t\t\t// the line numbers plugin, so we can't assume that they are present.\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tvar scrollIntoView = true;\n\n\tPrism.plugins.lineHighlight = {\n\t\t/**\n\t\t * Highlights the lines of the given pre.\n\t\t *\n\t\t * This function is split into a DOM measuring and mutate phase to improve performance.\n\t\t * The returned function mutates the DOM when called.\n\t\t *\n\t\t * @param {HTMLElement} pre\n\t\t * @param {string | null} [lines]\n\t\t * @param {string} [classes='']\n\t\t * @returns {() => void}\n\t\t */\n\t\thighlightLines: function highlightLines(pre, lines, classes) {\n\t\t\tlines = typeof lines === 'string' ? lines : (pre.getAttribute('data-line') || '');\n\n\t\t\tvar ranges = lines.replace(/\\s+/g, '').split(',').filter(Boolean);\n\t\t\tvar offset = +pre.getAttribute('data-line-offset') || 0;\n\n\t\t\tvar parseMethod = isLineHeightRounded() ? parseInt : parseFloat;\n\t\t\tvar lineHeight = parseMethod(getComputedStyle(pre).lineHeight);\n\t\t\tvar hasLineNumbers = Prism.util.isActive(pre, LINE_NUMBERS_CLASS);\n\t\t\tvar codeElement = pre.querySelector('code');\n\t\t\tvar parentElement = hasLineNumbers ? pre : codeElement || pre;\n\t\t\tvar mutateActions = /** @type {(() => void)[]} */ ([]);\n\t\t\tvar lineBreakMatch = codeElement.textContent.match(NEW_LINE_EXP);\n\t\t\tvar numberOfLines = lineBreakMatch ? lineBreakMatch.length + 1 : 1;\n\t\t\t/**\n\t\t\t * The top offset between the content box of the <code> element and the content box of the parent element of\n\t\t\t * the line highlight element (either `<pre>` or `<code>`).\n\t\t\t *\n\t\t\t * This offset might not be zero for some themes where the <code> element has a top margin. Some plugins\n\t\t\t * (or users) might also add element above the <code> element. Because the line highlight is aligned relative\n\t\t\t * to the <pre> element, we have to take this into account.\n\t\t\t *\n\t\t\t * This offset will be 0 if the parent element of the line highlight element is the `<code>` element.\n\t\t\t */\n\t\t\tvar codePreOffset = !codeElement || parentElement == codeElement ? 0 : getContentBoxTopOffset(pre, codeElement);\n\n\t\t\tranges.forEach(function (currentRange) {\n\t\t\t\tvar range = currentRange.split('-');\n\n\t\t\t\tvar start = +range[0];\n\t\t\t\tvar end = +range[1] || start;\n\t\t\t\tend = Math.min(numberOfLines + offset, end);\n\n\t\t\t\tif (end < start) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t/** @type {HTMLElement} */\n\t\t\t\tvar line = pre.querySelector('.line-highlight[data-range=\"' + currentRange + '\"]') || document.createElement('div');\n\n\t\t\t\tmutateActions.push(function () {\n\t\t\t\t\tline.setAttribute('aria-hidden', 'true');\n\t\t\t\t\tline.setAttribute('data-range', currentRange);\n\t\t\t\t\tline.className = (classes || '') + ' line-highlight';\n\t\t\t\t});\n\n\t\t\t\t// if the line-numbers plugin is enabled, then there is no reason for this plugin to display the line numbers\n\t\t\t\tif (hasLineNumbers && Prism.plugins.lineNumbers) {\n\t\t\t\t\tvar startNode = Prism.plugins.lineNumbers.getLine(pre, start);\n\t\t\t\t\tvar endNode = Prism.plugins.lineNumbers.getLine(pre, end);\n\n\t\t\t\t\tif (startNode) {\n\t\t\t\t\t\tvar top = startNode.offsetTop + codePreOffset + 'px';\n\t\t\t\t\t\tmutateActions.push(function () {\n\t\t\t\t\t\t\tline.style.top = top;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (endNode) {\n\t\t\t\t\t\tvar height = (endNode.offsetTop - startNode.offsetTop) + endNode.offsetHeight + 'px';\n\t\t\t\t\t\tmutateActions.push(function () {\n\t\t\t\t\t\t\tline.style.height = height;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tmutateActions.push(function () {\n\t\t\t\t\t\tline.setAttribute('data-start', String(start));\n\n\t\t\t\t\t\tif (end > start) {\n\t\t\t\t\t\t\tline.setAttribute('data-end', String(end));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tline.style.top = (start - offset - 1) * lineHeight + codePreOffset + 'px';\n\n\t\t\t\t\t\tline.textContent = new Array(end - start + 2).join(' \\n');\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tmutateActions.push(function () {\n\t\t\t\t\tline.style.width = pre.scrollWidth + 'px';\n\t\t\t\t});\n\n\t\t\t\tmutateActions.push(function () {\n\t\t\t\t\t// allow this to play nicely with the line-numbers plugin\n\t\t\t\t\t// need to attack to pre as when line-numbers is enabled, the code tag is relatively which screws up the positioning\n\t\t\t\t\tparentElement.appendChild(line);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tvar id = pre.id;\n\t\t\tif (hasLineNumbers && Prism.util.isActive(pre, LINKABLE_LINE_NUMBERS_CLASS) && id) {\n\t\t\t\t// This implements linkable line numbers. Linkable line numbers use Line Highlight to create a link to a\n\t\t\t\t// specific line. For this to work, the pre element has to:\n\t\t\t\t//  1) have line numbers,\n\t\t\t\t//  2) have the `linkable-line-numbers` class or an ascendant that has that class, and\n\t\t\t\t//  3) have an id.\n\n\t\t\t\tif (!hasClass(pre, LINKABLE_LINE_NUMBERS_CLASS)) {\n\t\t\t\t\t// add class to pre\n\t\t\t\t\tmutateActions.push(function () {\n\t\t\t\t\t\tpre.classList.add(LINKABLE_LINE_NUMBERS_CLASS);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tvar start = parseInt(pre.getAttribute('data-start') || '1');\n\n\t\t\t\t// iterate all line number spans\n\t\t\t\t$$('.line-numbers-rows > span', pre).forEach(function (lineSpan, i) {\n\t\t\t\t\tvar lineNumber = i + start;\n\t\t\t\t\tlineSpan.onclick = function () {\n\t\t\t\t\t\tvar hash = id + '.' + lineNumber;\n\n\t\t\t\t\t\t// this will prevent scrolling since the span is obviously in view\n\t\t\t\t\t\tscrollIntoView = false;\n\t\t\t\t\t\tlocation.hash = hash;\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tscrollIntoView = true;\n\t\t\t\t\t\t}, 1);\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn function () {\n\t\t\t\tmutateActions.forEach(callFunction);\n\t\t\t};\n\t\t}\n\t};\n\n\n\tfunction applyHash() {\n\t\tvar hash = location.hash.slice(1);\n\n\t\t// Remove pre-existing temporary lines\n\t\t$$('.temporary.line-highlight').forEach(function (line) {\n\t\t\tline.parentNode.removeChild(line);\n\t\t});\n\n\t\tvar range = (hash.match(/\\.([\\d,-]+)$/) || [, ''])[1];\n\n\t\tif (!range || document.getElementById(hash)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar id = hash.slice(0, hash.lastIndexOf('.'));\n\t\tvar pre = document.getElementById(id);\n\n\t\tif (!pre) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!pre.hasAttribute('data-line')) {\n\t\t\tpre.setAttribute('data-line', '');\n\t\t}\n\n\t\tvar mutateDom = Prism.plugins.lineHighlight.highlightLines(pre, range, 'temporary ');\n\t\tmutateDom();\n\n\t\tif (scrollIntoView) {\n\t\t\tdocument.querySelector('.temporary.line-highlight').scrollIntoView();\n\t\t}\n\t}\n\n\tvar fakeTimer = 0; // Hack to limit the number of times applyHash() runs\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar pre = env.element.parentElement;\n\t\tif (!isActiveFor(pre)) {\n\t\t\treturn;\n\t\t}\n\n\t\t/*\n\t\t * Cleanup for other plugins (e.g. autoloader).\n\t\t *\n\t\t * Sometimes <code> blocks are highlighted multiple times. It is necessary\n\t\t * to cleanup any left-over tags, because the whitespace inside of the <div>\n\t\t * tags change the content of the <code> tag.\n\t\t */\n\t\tvar num = 0;\n\t\t$$('.line-highlight', pre).forEach(function (line) {\n\t\t\tnum += line.textContent.length;\n\t\t\tline.parentNode.removeChild(line);\n\t\t});\n\t\t// Remove extra whitespace\n\t\tif (num && /^(?: \\n)+$/.test(env.code.slice(-num))) {\n\t\t\tenv.code = env.code.slice(0, -num);\n\t\t}\n\t});\n\n\tPrism.hooks.add('complete', function completeHook(env) {\n\t\tvar pre = env.element.parentElement;\n\t\tif (!isActiveFor(pre)) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout(fakeTimer);\n\n\t\tvar hasLineNumbers = Prism.plugins.lineNumbers;\n\t\tvar isLineNumbersLoaded = env.plugins && env.plugins.lineNumbers;\n\n\t\tif (hasClass(pre, LINE_NUMBERS_CLASS) && hasLineNumbers && !isLineNumbersLoaded) {\n\t\t\tPrism.hooks.add('line-numbers', completeHook);\n\t\t} else {\n\t\t\tvar mutateDom = Prism.plugins.lineHighlight.highlightLines(pre);\n\t\t\tmutateDom();\n\t\t\tfakeTimer = setTimeout(applyHash, 1);\n\t\t}\n\t});\n\n\twindow.addEventListener('hashchange', applyHash);\n\twindow.addEventListener('resize', function () {\n\t\tvar actions = $$('pre')\n\t\t\t.filter(isActiveFor)\n\t\t\t.map(function (pre) {\n\t\t\t\treturn Prism.plugins.lineHighlight.highlightLines(pre);\n\t\t\t});\n\t\tactions.forEach(callFunction);\n\t});\n\n}());\n","(function (Prism) {\n\t// $ set | grep '^[A-Z][^[:space:]]*=' | cut -d= -f1 | tr '\\n' '|'\n\t// + LC_ALL, RANDOM, REPLY, SECONDS.\n\t// + make sure PS1..4 are here as they are not always set,\n\t// - some useless things.\n\tvar envVars = '\\\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\\\b';\n\n\tvar commandAfterHeredoc = {\n\t\tpattern: /(^([\"']?)\\w+\\2)[ \\t]+\\S.*/,\n\t\tlookbehind: true,\n\t\talias: 'punctuation', // this looks reasonably well in all themes\n\t\tinside: null // see below\n\t};\n\n\tvar insideString = {\n\t\t'bash': commandAfterHeredoc,\n\t\t'environment': {\n\t\t\tpattern: RegExp('\\\\$' + envVars),\n\t\t\talias: 'constant'\n\t\t},\n\t\t'variable': [\n\t\t\t// [0]: Arithmetic Environment\n\t\t\t{\n\t\t\t\tpattern: /\\$?\\(\\([\\s\\S]+?\\)\\)/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t// If there is a $ sign at the beginning highlight $(( and )) as variable\n\t\t\t\t\t'variable': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /(^\\$\\(\\([\\s\\S]+)\\)\\)/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t},\n\t\t\t\t\t\t/^\\$\\(\\(/\n\t\t\t\t\t],\n\t\t\t\t\t'number': /\\b0x[\\dA-Fa-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[Ee]-?\\d+)?/,\n\t\t\t\t\t// Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic\n\t\t\t\t\t'operator': /--|\\+\\+|\\*\\*=?|<<=?|>>=?|&&|\\|\\||[=!+\\-*/%<>^&|]=?|[?~:]/,\n\t\t\t\t\t// If there is no $ sign at the beginning highlight (( and )) as punctuation\n\t\t\t\t\t'punctuation': /\\(\\(?|\\)\\)?|,|;/\n\t\t\t\t}\n\t\t\t},\n\t\t\t// [1]: Command Substitution\n\t\t\t{\n\t\t\t\tpattern: /\\$\\((?:\\([^)]+\\)|[^()])+\\)|`[^`]+`/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'variable': /^\\$\\(|^`|\\)$|`$/\n\t\t\t\t}\n\t\t\t},\n\t\t\t// [2]: Brace expansion\n\t\t\t{\n\t\t\t\tpattern: /\\$\\{[^}]+\\}/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'operator': /:[-=?+]?|[!\\/]|##?|%%?|\\^\\^?|,,?/,\n\t\t\t\t\t'punctuation': /[\\[\\]]/,\n\t\t\t\t\t'environment': {\n\t\t\t\t\t\tpattern: RegExp('(\\\\{)' + envVars),\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\talias: 'constant'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t/\\$(?:\\w+|[#?*!@$])/\n\t\t],\n\t\t// Escape sequences from echo and printf's manuals, and escaped quotes.\n\t\t'entity': /\\\\(?:[abceEfnrtv\\\\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/\n\t};\n\n\tPrism.languages.bash = {\n\t\t'shebang': {\n\t\t\tpattern: /^#!\\s*\\/.*/,\n\t\t\talias: 'important'\n\t\t},\n\t\t'comment': {\n\t\t\tpattern: /(^|[^\"{\\\\$])#.*/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'function-name': [\n\t\t\t// a) function foo {\n\t\t\t// b) foo() {\n\t\t\t// c) function foo() {\n\t\t\t// but not “foo {”\n\t\t\t{\n\t\t\t\t// a) and c)\n\t\t\t\tpattern: /(\\bfunction\\s+)[\\w-]+(?=(?:\\s*\\(?:\\s*\\))?\\s*\\{)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'function'\n\t\t\t},\n\t\t\t{\n\t\t\t\t// b)\n\t\t\t\tpattern: /\\b[\\w-]+(?=\\s*\\(\\s*\\)\\s*\\{)/,\n\t\t\t\talias: 'function'\n\t\t\t}\n\t\t],\n\t\t// Highlight variable names as variables in for and select beginnings.\n\t\t'for-or-select': {\n\t\t\tpattern: /(\\b(?:for|select)\\s+)\\w+(?=\\s+in\\s)/,\n\t\t\talias: 'variable',\n\t\t\tlookbehind: true\n\t\t},\n\t\t// Highlight variable names as variables in the left-hand part\n\t\t// of assignments (“=” and “+=”).\n\t\t'assign-left': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()\\w+(?:\\.\\w+)*(?=\\+?=)/,\n\t\t\tinside: {\n\t\t\t\t'environment': {\n\t\t\t\t\tpattern: RegExp('(^|[\\\\s;|&]|[<>]\\\\()' + envVars),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'constant'\n\t\t\t\t}\n\t\t\t},\n\t\t\talias: 'variable',\n\t\t\tlookbehind: true\n\t\t},\n\t\t// Highlight parameter names as variables\n\t\t'parameter': {\n\t\t\tpattern: /(^|\\s)-{1,2}(?:\\w+:[+-]?)?\\w+(?:\\.\\w+)*(?=[=\\s]|$)/,\n\t\t\talias: 'variable',\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': [\n\t\t\t// Support for Here-documents https://en.wikipedia.org/wiki/Here_document\n\t\t\t{\n\t\t\t\tpattern: /((?:^|[^<])<<-?\\s*)(\\w+)\\s[\\s\\S]*?(?:\\r?\\n|\\r)\\2/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: insideString\n\t\t\t},\n\t\t\t// Here-document with quotes around the tag\n\t\t\t// → No expansion (so no “inside”).\n\t\t\t{\n\t\t\t\tpattern: /((?:^|[^<])<<-?\\s*)([\"'])(\\w+)\\2\\s[\\s\\S]*?(?:\\r?\\n|\\r)\\3/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'bash': commandAfterHeredoc\n\t\t\t\t}\n\t\t\t},\n\t\t\t// “Normal” string\n\t\t\t{\n\t\t\t\t// https://www.gnu.org/software/bash/manual/html_node/Double-Quotes.html\n\t\t\t\tpattern: /(^|[^\\\\](?:\\\\\\\\)*)\"(?:\\\\[\\s\\S]|\\$\\([^)]+\\)|\\$(?!\\()|`[^`]+`|[^\"\\\\`$])*\"/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: insideString\n\t\t\t},\n\t\t\t{\n\t\t\t\t// https://www.gnu.org/software/bash/manual/html_node/Single-Quotes.html\n\t\t\t\tpattern: /(^|[^$\\\\])'[^']*'/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\t// https://www.gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html\n\t\t\t\tpattern: /\\$'(?:[^'\\\\]|\\\\[\\s\\S])*'/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'entity': insideString.entity\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'environment': {\n\t\t\tpattern: RegExp('\\\\$?' + envVars),\n\t\t\talias: 'constant'\n\t\t},\n\t\t'variable': insideString.variable,\n\t\t'function': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\\s;|&])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'keyword': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\\s;|&])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t// https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n\t\t'builtin': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:\\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\\s;|&])/,\n\t\t\tlookbehind: true,\n\t\t\t// Alias added to make those easier to distinguish from strings.\n\t\t\talias: 'class-name'\n\t\t},\n\t\t'boolean': {\n\t\t\tpattern: /(^|[\\s;|&]|[<>]\\()(?:false|true)(?=$|[)\\s;|&])/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'file-descriptor': {\n\t\t\tpattern: /\\B&\\d\\b/,\n\t\t\talias: 'important'\n\t\t},\n\t\t'operator': {\n\t\t\t// Lots of redirections here, but not just that.\n\t\t\tpattern: /\\d?<>|>\\||\\+=|=[=~]?|!=?|<<[<-]?|[&\\d]?>>|\\d[<>]&?|[<>][&=]?|&[>&]?|\\|[&|]?/,\n\t\t\tinside: {\n\t\t\t\t'file-descriptor': {\n\t\t\t\t\tpattern: /^\\d/,\n\t\t\t\t\talias: 'important'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'punctuation': /\\$?\\(\\(?|\\)\\)?|\\.\\.|[{}[\\];\\\\]/,\n\t\t'number': {\n\t\t\tpattern: /(^|\\s)(?:[1-9]\\d*|0)(?:[.,]\\d+)?\\b/,\n\t\t\tlookbehind: true\n\t\t}\n\t};\n\n\tcommandAfterHeredoc.inside = Prism.languages.bash;\n\n\t/* Patterns in command substitution. */\n\tvar toBeCopied = [\n\t\t'comment',\n\t\t'function-name',\n\t\t'for-or-select',\n\t\t'assign-left',\n\t\t'parameter',\n\t\t'string',\n\t\t'environment',\n\t\t'function',\n\t\t'keyword',\n\t\t'builtin',\n\t\t'boolean',\n\t\t'file-descriptor',\n\t\t'operator',\n\t\t'punctuation',\n\t\t'number'\n\t];\n\tvar inside = insideString.variable[1].inside;\n\tfor (var i = 0; i < toBeCopied.length; i++) {\n\t\tinside[toBeCopied[i]] = Prism.languages.bash[toBeCopied[i]];\n\t}\n\n\tPrism.languages.sh = Prism.languages.bash;\n\tPrism.languages.shell = Prism.languages.bash;\n}(Prism));\n","Prism.languages.go = Prism.languages.extend('clike', {\n\t'string': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\"\\\\\\r\\n])*\"|`[^`]*`/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'keyword': /\\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\\b/,\n\t'boolean': /\\b(?:_|false|iota|nil|true)\\b/,\n\t'number': [\n\t\t// binary and octal integers\n\t\t/\\b0(?:b[01_]+|o[0-7_]+)i?\\b/i,\n\t\t// hexadecimal integers and floats\n\t\t/\\b0x(?:[a-f\\d_]+(?:\\.[a-f\\d_]*)?|\\.[a-f\\d_]+)(?:p[+-]?\\d+(?:_\\d+)*)?i?(?!\\w)/i,\n\t\t// decimal integers and floats\n\t\t/(?:\\b\\d[\\d_]*(?:\\.[\\d_]*)?|\\B\\.\\d[\\d_]*)(?:e[+-]?[\\d_]+)?i?(?!\\w)/i\n\t],\n\t'operator': /[*\\/%^!=]=?|\\+[=+]?|-[=-]?|\\|[=|]?|&(?:=|&|\\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\\.\\.\\./,\n\t'builtin': /\\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\\b/\n});\n\nPrism.languages.insertBefore('go', 'string', {\n\t'char': {\n\t\tpattern: /'(?:\\\\.|[^'\\\\\\r\\n]){0,10}'/,\n\t\tgreedy: true\n\t}\n});\n\ndelete Prism.languages.go['class-name'];\n","Prism.languages.hcl = {\n\t'comment': /(?:\\/\\/|#).*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t'heredoc': {\n\t\tpattern: /<<-?(\\w+\\b)[\\s\\S]*?^[ \\t]*\\1/m,\n\t\tgreedy: true,\n\t\talias: 'string'\n\t},\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /(?:data|resource)\\s+(?:\"(?:\\\\[\\s\\S]|[^\\\\\"])*\")(?=\\s+\"[\\w-]+\"\\s+\\{)/i,\n\t\t\tinside: {\n\t\t\t\t'type': {\n\t\t\t\t\tpattern: /(resource|data|\\s+)(?:\"(?:\\\\[\\s\\S]|[^\\\\\"])*\")/i,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'variable'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: /(?:backend|module|output|provider|provisioner|variable)\\s+(?:[\\w-]+|\"(?:\\\\[\\s\\S]|[^\\\\\"])*\")\\s+(?=\\{)/i,\n\t\t\tinside: {\n\t\t\t\t'type': {\n\t\t\t\t\tpattern: /(backend|module|output|provider|provisioner|variable)\\s+(?:[\\w-]+|\"(?:\\\\[\\s\\S]|[^\\\\\"])*\")\\s+/i,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'variable'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/[\\w-]+(?=\\s+\\{)/\n\t],\n\t'property': [\n\t\t/[-\\w\\.]+(?=\\s*=(?!=))/,\n\t\t/\"(?:\\\\[\\s\\S]|[^\\\\\"])+\"(?=\\s*[:=])/,\n\t],\n\t'string': {\n\t\tpattern: /\"(?:[^\\\\$\"]|\\\\[\\s\\S]|\\$(?:(?=\")|\\$+(?!\\$)|[^\"${])|\\$\\{(?:[^{}\"]|\"(?:[^\\\\\"]|\\\\[\\s\\S])*\")*\\})*\"/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /(^|[^$])\\$\\{(?:[^{}\"]|\"(?:[^\\\\\"]|\\\\[\\s\\S])*\")*\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'type': {\n\t\t\t\t\t\tpattern: /(\\b(?:count|data|local|module|path|self|terraform|var)\\b\\.)[\\w\\*]+/i,\n\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\talias: 'variable'\n\t\t\t\t\t},\n\t\t\t\t\t'keyword': /\\b(?:count|data|local|module|path|self|terraform|var)\\b/i,\n\t\t\t\t\t'function': /\\w+(?=\\()/,\n\t\t\t\t\t'string': {\n\t\t\t\t\t\tpattern: /\"(?:\\\\[\\s\\S]|[^\\\\\"])*\"/,\n\t\t\t\t\t\tgreedy: true,\n\t\t\t\t\t},\n\t\t\t\t\t'number': /\\b0x[\\da-f]+\\b|\\b\\d+(?:\\.\\d*)?(?:e[+-]?\\d+)?/i,\n\t\t\t\t\t'punctuation': /[!\\$#%&'()*+,.\\/;<=>@\\[\\\\\\]^`{|}~?:]/,\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t},\n\t'number': /\\b0x[\\da-f]+\\b|\\b\\d+(?:\\.\\d*)?(?:e[+-]?\\d+)?/i,\n\t'boolean': /\\b(?:false|true)\\b/i,\n\t'punctuation': /[=\\[\\]{}]/,\n};\n","// https://www.json.org/json-en.html\nPrism.languages.json = {\n\t'property': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?!\\s*:)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'comment': {\n\t\tpattern: /\\/\\/.*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\tgreedy: true\n\t},\n\t'number': /-?\\b\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?\\b/i,\n\t'punctuation': /[{}[\\],]/,\n\t'operator': /:/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'null': {\n\t\tpattern: /\\bnull\\b/,\n\t\talias: 'keyword'\n\t}\n};\n\nPrism.languages.webmanifest = Prism.languages.json;\n","// This is a language definition for generic log files.\n// Since there is no one log format, this language definition has to support all formats to some degree.\n//\n// Based on https://github.com/MTDL9/vim-log-highlighting\n\nPrism.languages.log = {\n\t'string': {\n\t\t// Single-quoted strings must not be confused with plain text. E.g. Can't isn't Susan's Chris' toy\n\t\tpattern: /\"(?:[^\"\\\\\\r\\n]|\\\\.)*\"|'(?![st] | \\w)(?:[^'\\\\\\r\\n]|\\\\.)*'/,\n\t\tgreedy: true,\n\t},\n\n\t'exception': {\n\t\tpattern: /(^|[^\\w.])[a-z][\\w.]*(?:Error|Exception):.*(?:(?:\\r\\n?|\\n)[ \\t]*(?:at[ \\t].+|\\.{3}.*|Caused by:.*))+(?:(?:\\r\\n?|\\n)[ \\t]*\\.\\.\\. .*)?/,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: ['javastacktrace', 'language-javastacktrace'],\n\t\tinside: Prism.languages['javastacktrace'] || {\n\t\t\t'keyword': /\\bat\\b/,\n\t\t\t'function': /[a-z_][\\w$]*(?=\\()/,\n\t\t\t'punctuation': /[.:()]/\n\t\t}\n\t},\n\n\t'level': [\n\t\t{\n\t\t\tpattern: /\\b(?:ALERT|CRIT|CRITICAL|EMERG|EMERGENCY|ERR|ERROR|FAILURE|FATAL|SEVERE)\\b/,\n\t\t\talias: ['error', 'important']\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(?:WARN|WARNING|WRN)\\b/,\n\t\t\talias: ['warning', 'important']\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(?:DISPLAY|INF|INFO|NOTICE|STATUS)\\b/,\n\t\t\talias: ['info', 'keyword']\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(?:DBG|DEBUG|FINE)\\b/,\n\t\t\talias: ['debug', 'keyword']\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(?:FINER|FINEST|TRACE|TRC|VERBOSE|VRB)\\b/,\n\t\t\talias: ['trace', 'comment']\n\t\t}\n\t],\n\n\t'property': {\n\t\tpattern: /((?:^|[\\]|])[ \\t]*)[a-z_](?:[\\w-]|\\b\\/\\b)*(?:[. ]\\(?\\w(?:[\\w-]|\\b\\/\\b)*\\)?)*:(?=\\s)/im,\n\t\tlookbehind: true\n\t},\n\n\t'separator': {\n\t\tpattern: /(^|[^-+])-{3,}|={3,}|\\*{3,}|- - /m,\n\t\tlookbehind: true,\n\t\talias: 'comment'\n\t},\n\n\t'url': /\\b(?:file|ftp|https?):\\/\\/[^\\s|,;'\"]*[^\\s|,;'\">.]/,\n\t'email': {\n\t\tpattern: /(^|\\s)[-\\w+.]+@[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)+(?=\\s)/,\n\t\tlookbehind: true,\n\t\talias: 'url'\n\t},\n\n\t'ip-address': {\n\t\tpattern: /\\b(?:\\d{1,3}(?:\\.\\d{1,3}){3})\\b/,\n\t\talias: 'constant'\n\t},\n\t'mac-address': {\n\t\tpattern: /\\b[a-f0-9]{2}(?::[a-f0-9]{2}){5}\\b/i,\n\t\talias: 'constant'\n\t},\n\t'domain': {\n\t\tpattern: /(^|\\s)[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)*\\.[a-z][a-z0-9-]+(?=\\s)/,\n\t\tlookbehind: true,\n\t\talias: 'constant'\n\t},\n\n\t'uuid': {\n\t\tpattern: /\\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\b/i,\n\t\talias: 'constant'\n\t},\n\t'hash': {\n\t\tpattern: /\\b(?:[a-f0-9]{32}){1,2}\\b/i,\n\t\talias: 'constant'\n\t},\n\n\t'file-path': {\n\t\tpattern: /\\b[a-z]:[\\\\/][^\\s|,;:(){}\\[\\]\"']+|(^|[\\s:\\[\\](>|])\\.{0,2}\\/\\w[^\\s|,;:(){}\\[\\]\"']*/i,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'string'\n\t},\n\n\t'date': {\n\t\tpattern: RegExp(\n\t\t\t/\\b\\d{4}[-/]\\d{2}[-/]\\d{2}(?:T(?=\\d{1,2}:)|(?=\\s\\d{1,2}:))/.source +\n\t\t\t'|' +\n\t\t\t/\\b\\d{1,4}[-/ ](?:\\d{1,2}|Apr|Aug|Dec|Feb|Jan|Jul|Jun|Mar|May|Nov|Oct|Sep)[-/ ]\\d{2,4}T?\\b/.source +\n\t\t\t'|' +\n\t\t\t/\\b(?:(?:Fri|Mon|Sat|Sun|Thu|Tue|Wed)(?:\\s{1,2}(?:Apr|Aug|Dec|Feb|Jan|Jul|Jun|Mar|May|Nov|Oct|Sep))?|Apr|Aug|Dec|Feb|Jan|Jul|Jun|Mar|May|Nov|Oct|Sep)\\s{1,2}\\d{1,2}\\b/.source,\n\t\t\t'i'\n\t\t),\n\t\talias: 'number'\n\t},\n\t'time': {\n\t\tpattern: /\\b\\d{1,2}:\\d{1,2}:\\d{1,2}(?:[.,:]\\d+)?(?:\\s?[+-]\\d{2}:?\\d{2}|Z)?\\b/,\n\t\talias: 'number'\n\t},\n\n\t'boolean': /\\b(?:false|null|true)\\b/i,\n\t'number': {\n\t\tpattern: /(^|[^.\\w])(?:0x[a-f0-9]+|0o[0-7]+|0b[01]+|v?\\d[\\da-f]*(?:\\.\\d+)*(?:e[+-]?\\d+)?[a-z]{0,3}\\b)\\b(?!\\.\\w)/i,\n\t\tlookbehind: true\n\t},\n\n\t'operator': /[;:?<=>~/@!$%&+\\-|^(){}*#]/,\n\t'punctuation': /[\\[\\].,]/\n};\n","/**\n * Original by Samuel Flores\n *\n * Adds the following new token classes:\n *     constant, builtin, variable, symbol, regex\n */\n(function (Prism) {\n\tPrism.languages.ruby = Prism.languages.extend('clike', {\n\t\t'comment': {\n\t\t\tpattern: /#.*|^=begin\\s[\\s\\S]*?^=end/m,\n\t\t\tgreedy: true\n\t\t},\n\t\t'class-name': {\n\t\t\tpattern: /(\\b(?:class|module)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+|\\b[A-Z_]\\w*(?=\\s*\\.\\s*new\\b)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /[.\\\\]/\n\t\t\t}\n\t\t},\n\t\t'keyword': /\\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\\b/,\n\t\t'operator': /\\.{2,3}|&\\.|===|<?=>|[!=]?~|(?:&&|\\|\\||<<|>>|\\*\\*|[+\\-*/%<>!^&|=])=?|[?:]/,\n\t\t'punctuation': /[(){}[\\].,;]/,\n\t});\n\n\tPrism.languages.insertBefore('ruby', 'operator', {\n\t\t'double-colon': {\n\t\t\tpattern: /::/,\n\t\t\talias: 'punctuation'\n\t\t},\n\t});\n\n\tvar interpolation = {\n\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)#\\{(?:[^{}]|\\{[^{}]*\\})*\\}/,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'content': {\n\t\t\t\tpattern: /^(#\\{)[\\s\\S]+(?=\\}$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: Prism.languages.ruby\n\t\t\t},\n\t\t\t'delimiter': {\n\t\t\t\tpattern: /^#\\{|\\}$/,\n\t\t\t\talias: 'punctuation'\n\t\t\t}\n\t\t}\n\t};\n\n\tdelete Prism.languages.ruby.function;\n\n\tvar percentExpression = '(?:' + [\n\t\t/([^a-zA-Z0-9\\s{(\\[<=])(?:(?!\\1)[^\\\\]|\\\\[\\s\\S])*\\1/.source,\n\t\t/\\((?:[^()\\\\]|\\\\[\\s\\S]|\\((?:[^()\\\\]|\\\\[\\s\\S])*\\))*\\)/.source,\n\t\t/\\{(?:[^{}\\\\]|\\\\[\\s\\S]|\\{(?:[^{}\\\\]|\\\\[\\s\\S])*\\})*\\}/.source,\n\t\t/\\[(?:[^\\[\\]\\\\]|\\\\[\\s\\S]|\\[(?:[^\\[\\]\\\\]|\\\\[\\s\\S])*\\])*\\]/.source,\n\t\t/<(?:[^<>\\\\]|\\\\[\\s\\S]|<(?:[^<>\\\\]|\\\\[\\s\\S])*>)*>/.source\n\t].join('|') + ')';\n\n\tvar symbolName = /(?:\"(?:\\\\.|[^\"\\\\\\r\\n])*\"|(?:\\b[a-zA-Z_]\\w*|[^\\s\\0-\\x7F]+)[?!]?|\\$.)/.source;\n\n\tPrism.languages.insertBefore('ruby', 'keyword', {\n\t\t'regex-literal': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/%r/.source + percentExpression + /[egimnosux]{0,6}/.source),\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation,\n\t\t\t\t\t'regex': /[\\s\\S]+/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(^|[^/])\\/(?!\\/)(?:\\[[^\\r\\n\\]]+\\]|\\\\.|[^[/\\\\\\r\\n])+\\/[egimnosux]{0,6}(?=\\s*(?:$|[\\r\\n,.;})#]))/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation,\n\t\t\t\t\t'regex': /[\\s\\S]+/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'variable': /[@$]+[a-zA-Z_]\\w*(?:[?!]|\\b)/,\n\t\t'symbol': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(^|[^:]):/.source + symbolName),\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: RegExp(/([\\r\\n{(,][ \\t]*)/.source + symbolName + /(?=:(?!:))/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t],\n\t\t'method-definition': {\n\t\t\tpattern: /(\\bdef\\s+)\\w+(?:\\s*\\.\\s*\\w+)?/,\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'function': /\\b\\w+$/,\n\t\t\t\t'keyword': /^self\\b/,\n\t\t\t\t'class-name': /^\\w+/,\n\t\t\t\t'punctuation': /\\./\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('ruby', 'string', {\n\t\t'string-literal': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/%[qQiIwWs]?/.source + percentExpression),\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation,\n\t\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(\"|')(?:#\\{[^}]+\\}|#(?!\\{)|\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\#\\r\\n])*\\1/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation,\n\t\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /<<[-~]?([a-z_]\\w*)[\\r\\n](?:.*[\\r\\n])*?[\\t ]*\\1/i,\n\t\t\t\talias: 'heredoc-string',\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'delimiter': {\n\t\t\t\t\t\tpattern: /^<<[-~]?[a-z_]\\w*|\\b[a-z_]\\w*$/i,\n\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t'symbol': /\\b\\w+/,\n\t\t\t\t\t\t\t'punctuation': /^<<[-~]?/\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t'interpolation': interpolation,\n\t\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /<<[-~]?'([a-z_]\\w*)'[\\r\\n](?:.*[\\r\\n])*?[\\t ]*\\1/i,\n\t\t\t\talias: 'heredoc-string',\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'delimiter': {\n\t\t\t\t\t\tpattern: /^<<[-~]?'[a-z_]\\w*'|\\b[a-z_]\\w*$/i,\n\t\t\t\t\t\tinside: {\n\t\t\t\t\t\t\t'symbol': /\\b\\w+/,\n\t\t\t\t\t\t\t'punctuation': /^<<[-~]?'|'$/,\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'command-literal': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/%x/.source + percentExpression),\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation,\n\t\t\t\t\t'command': {\n\t\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\t\talias: 'string'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /`(?:#\\{[^}]+\\}|#(?!\\{)|\\\\(?:\\r\\n|[\\s\\S])|[^\\\\`#\\r\\n])*`/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation': interpolation,\n\t\t\t\t\t'command': {\n\t\t\t\t\t\tpattern: /[\\s\\S]+/,\n\t\t\t\t\t\talias: 'string'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t});\n\n\tdelete Prism.languages.ruby.string;\n\n\tPrism.languages.insertBefore('ruby', 'number', {\n\t\t'builtin': /\\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\\b/,\n\t\t'constant': /\\b[A-Z][A-Z0-9_]*(?:[?!]|\\b)/\n\t});\n\n\tPrism.languages.rb = Prism.languages.ruby;\n}(Prism));\n","(function (Prism) {\n\n\t// CAREFUL!\n\t// The following patterns are concatenated, so the group referenced by a back reference is non-obvious!\n\n\tvar strings = [\n\t\t// normal string\n\t\t/\"(?:\\\\[\\s\\S]|\\$\\([^)]+\\)|\\$(?!\\()|`[^`]+`|[^\"\\\\`$])*\"/.source,\n\t\t/'[^']*'/.source,\n\t\t/\\$'(?:[^'\\\\]|\\\\[\\s\\S])*'/.source,\n\n\t\t// here doc\n\t\t// 2 capturing groups\n\t\t/<<-?\\s*([\"']?)(\\w+)\\1\\s[\\s\\S]*?[\\r\\n]\\2/.source\n\t].join('|');\n\n\tPrism.languages['shell-session'] = {\n\t\t'command': {\n\t\t\tpattern: RegExp(\n\t\t\t\t// user info\n\t\t\t\t/^/.source +\n\t\t\t\t'(?:' +\n\t\t\t\t(\n\t\t\t\t\t// <user> \":\" ( <path> )?\n\t\t\t\t\t/[^\\s@:$#%*!/\\\\]+@[^\\r\\n@:$#%*!/\\\\]+(?::[^\\0-\\x1F$#%*?\"<>:;|]+)?/.source +\n\t\t\t\t\t'|' +\n\t\t\t\t\t// <path>\n\t\t\t\t\t// Since the path pattern is quite general, we will require it to start with a special character to\n\t\t\t\t\t// prevent false positives.\n\t\t\t\t\t/[/~.][^\\0-\\x1F$#%*?\"<>@:;|]*/.source\n\t\t\t\t) +\n\t\t\t\t')?' +\n\t\t\t\t// shell symbol\n\t\t\t\t/[$#%](?=\\s)/.source +\n\t\t\t\t// bash command\n\t\t\t\t/(?:[^\\\\\\r\\n \\t'\"<$]|[ \\t](?:(?!#)|#.*$)|\\\\(?:[^\\r]|\\r\\n?)|\\$(?!')|<(?!<)|<<str>>)+/.source.replace(/<<str>>/g, function () { return strings; }),\n\t\t\t\t'm'\n\t\t\t),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'info': {\n\t\t\t\t\t// foo@bar:~/files$ exit\n\t\t\t\t\t// foo@bar$ exit\n\t\t\t\t\t// ~/files$ exit\n\t\t\t\t\tpattern: /^[^#$%]+/,\n\t\t\t\t\talias: 'punctuation',\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'user': /^[^\\s@:$#%*!/\\\\]+@[^\\r\\n@:$#%*!/\\\\]+/,\n\t\t\t\t\t\t'punctuation': /:/,\n\t\t\t\t\t\t'path': /[\\s\\S]+/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'bash': {\n\t\t\t\t\tpattern: /(^[$#%]\\s*)\\S[\\s\\S]*/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'language-bash',\n\t\t\t\t\tinside: Prism.languages.bash\n\t\t\t\t},\n\t\t\t\t'shell-symbol': {\n\t\t\t\t\tpattern: /^[$#%]/,\n\t\t\t\t\talias: 'important'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'output': /.(?:.*(?:[\\r\\n]|.$))*/\n\t};\n\n\tPrism.languages['sh-session'] = Prism.languages['shellsession'] = Prism.languages['shell-session'];\n\n}(Prism));\n","(function (Prism) {\n\n\t// https://yaml.org/spec/1.2/spec.html#c-ns-anchor-property\n\t// https://yaml.org/spec/1.2/spec.html#c-ns-alias-node\n\tvar anchorOrAlias = /[*&][^\\s[\\]{},]+/;\n\t// https://yaml.org/spec/1.2/spec.html#c-ns-tag-property\n\tvar tag = /!(?:<[\\w\\-%#;/?:@&=+$,.!~*'()[\\]]+>|(?:[a-zA-Z\\d-]*!)?[\\w\\-%#;/?:@&=+$.~*'()]+)?/;\n\t// https://yaml.org/spec/1.2/spec.html#c-ns-properties(n,c)\n\tvar properties = '(?:' + tag.source + '(?:[ \\t]+' + anchorOrAlias.source + ')?|'\n\t\t+ anchorOrAlias.source + '(?:[ \\t]+' + tag.source + ')?)';\n\t// https://yaml.org/spec/1.2/spec.html#ns-plain(n,c)\n\t// This is a simplified version that doesn't support \"#\" and multiline keys\n\t// All these long scarry character classes are simplified versions of YAML's characters\n\tvar plainKey = /(?:[^\\s\\x00-\\x08\\x0e-\\x1f!\"#%&'*,\\-:>?@[\\]`{|}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]|[?:-]<PLAIN>)(?:[ \\t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source\n\t\t.replace(/<PLAIN>/g, function () { return /[^\\s\\x00-\\x08\\x0e-\\x1f,[\\]{}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]/.source; });\n\tvar string = /\"(?:[^\"\\\\\\r\\n]|\\\\.)*\"|'(?:[^'\\\\\\r\\n]|\\\\.)*'/.source;\n\n\t/**\n\t *\n\t * @param {string} value\n\t * @param {string} [flags]\n\t * @returns {RegExp}\n\t */\n\tfunction createValuePattern(value, flags) {\n\t\tflags = (flags || '').replace(/m/g, '') + 'm'; // add m flag\n\t\tvar pattern = /([:\\-,[{]\\s*(?:\\s<<prop>>[ \\t]+)?)(?:<<value>>)(?=[ \\t]*(?:$|,|\\]|\\}|(?:[\\r\\n]\\s*)?#))/.source\n\t\t\t.replace(/<<prop>>/g, function () { return properties; }).replace(/<<value>>/g, function () { return value; });\n\t\treturn RegExp(pattern, flags);\n\t}\n\n\tPrism.languages.yaml = {\n\t\t'scalar': {\n\t\t\tpattern: RegExp(/([\\-:]\\s*(?:\\s<<prop>>[ \\t]+)?[|>])[ \\t]*(?:((?:\\r?\\n|\\r)[ \\t]+)\\S[^\\r\\n]*(?:\\2[^\\r\\n]+)*)/.source\n\t\t\t\t.replace(/<<prop>>/g, function () { return properties; })),\n\t\t\tlookbehind: true,\n\t\t\talias: 'string'\n\t\t},\n\t\t'comment': /#.*/,\n\t\t'key': {\n\t\t\tpattern: RegExp(/((?:^|[:\\-,[{\\r\\n?])[ \\t]*(?:<<prop>>[ \\t]+)?)<<key>>(?=\\s*:\\s)/.source\n\t\t\t\t.replace(/<<prop>>/g, function () { return properties; })\n\t\t\t\t.replace(/<<key>>/g, function () { return '(?:' + plainKey + '|' + string + ')'; })),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: 'atrule'\n\t\t},\n\t\t'directive': {\n\t\t\tpattern: /(^[ \\t]*)%.+/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'important'\n\t\t},\n\t\t'datetime': {\n\t\t\tpattern: createValuePattern(/\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ \\t]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ \\t]*(?:Z|[-+]\\d\\d?(?::\\d{2})?))?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?/.source),\n\t\t\tlookbehind: true,\n\t\t\talias: 'number'\n\t\t},\n\t\t'boolean': {\n\t\t\tpattern: createValuePattern(/false|true/.source, 'i'),\n\t\t\tlookbehind: true,\n\t\t\talias: 'important'\n\t\t},\n\t\t'null': {\n\t\t\tpattern: createValuePattern(/null|~/.source, 'i'),\n\t\t\tlookbehind: true,\n\t\t\talias: 'important'\n\t\t},\n\t\t'string': {\n\t\t\tpattern: createValuePattern(string),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t'number': {\n\t\t\tpattern: createValuePattern(/[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)/.source, 'i'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'tag': tag,\n\t\t'important': anchorOrAlias,\n\t\t'punctuation': /---|[:[\\]{}\\-,|>?]|\\.\\.\\./\n\t};\n\n\tPrism.languages.yml = Prism.languages.yaml;\n\n}(Prism));\n","(function (Prism) {\n\n\t/**\n\t * Returns the placeholder for the given language id and index.\n\t *\n\t * @param {string} language\n\t * @param {string|number} index\n\t * @returns {string}\n\t */\n\tfunction getPlaceholder(language, index) {\n\t\treturn '___' + language.toUpperCase() + index + '___';\n\t}\n\n\tObject.defineProperties(Prism.languages['markup-templating'] = {}, {\n\t\tbuildPlaceholders: {\n\t\t\t/**\n\t\t\t * Tokenize all inline templating expressions matching `placeholderPattern`.\n\t\t\t *\n\t\t\t * If `replaceFilter` is provided, only matches of `placeholderPattern` for which `replaceFilter` returns\n\t\t\t * `true` will be replaced.\n\t\t\t *\n\t\t\t * @param {object} env The environment of the `before-tokenize` hook.\n\t\t\t * @param {string} language The language id.\n\t\t\t * @param {RegExp} placeholderPattern The matches of this pattern will be replaced by placeholders.\n\t\t\t * @param {(match: string) => boolean} [replaceFilter]\n\t\t\t */\n\t\t\tvalue: function (env, language, placeholderPattern, replaceFilter) {\n\t\t\t\tif (env.language !== language) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar tokenStack = env.tokenStack = [];\n\n\t\t\t\tenv.code = env.code.replace(placeholderPattern, function (match) {\n\t\t\t\t\tif (typeof replaceFilter === 'function' && !replaceFilter(match)) {\n\t\t\t\t\t\treturn match;\n\t\t\t\t\t}\n\t\t\t\t\tvar i = tokenStack.length;\n\t\t\t\t\tvar placeholder;\n\n\t\t\t\t\t// Check for existing strings\n\t\t\t\t\twhile (env.code.indexOf(placeholder = getPlaceholder(language, i)) !== -1) {\n\t\t\t\t\t\t++i;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create a sparse array\n\t\t\t\t\ttokenStack[i] = match;\n\n\t\t\t\t\treturn placeholder;\n\t\t\t\t});\n\n\t\t\t\t// Switch the grammar to markup\n\t\t\t\tenv.grammar = Prism.languages.markup;\n\t\t\t}\n\t\t},\n\t\ttokenizePlaceholders: {\n\t\t\t/**\n\t\t\t * Replace placeholders with proper tokens after tokenizing.\n\t\t\t *\n\t\t\t * @param {object} env The environment of the `after-tokenize` hook.\n\t\t\t * @param {string} language The language id.\n\t\t\t */\n\t\t\tvalue: function (env, language) {\n\t\t\t\tif (env.language !== language || !env.tokenStack) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Switch the grammar back\n\t\t\t\tenv.grammar = Prism.languages[language];\n\n\t\t\t\tvar j = 0;\n\t\t\t\tvar keys = Object.keys(env.tokenStack);\n\n\t\t\t\tfunction walkTokens(tokens) {\n\t\t\t\t\tfor (var i = 0; i < tokens.length; i++) {\n\t\t\t\t\t\t// all placeholders are replaced already\n\t\t\t\t\t\tif (j >= keys.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar token = tokens[i];\n\t\t\t\t\t\tif (typeof token === 'string' || (token.content && typeof token.content === 'string')) {\n\t\t\t\t\t\t\tvar k = keys[j];\n\t\t\t\t\t\t\tvar t = env.tokenStack[k];\n\t\t\t\t\t\t\tvar s = typeof token === 'string' ? token : token.content;\n\t\t\t\t\t\t\tvar placeholder = getPlaceholder(language, k);\n\n\t\t\t\t\t\t\tvar index = s.indexOf(placeholder);\n\t\t\t\t\t\t\tif (index > -1) {\n\t\t\t\t\t\t\t\t++j;\n\n\t\t\t\t\t\t\t\tvar before = s.substring(0, index);\n\t\t\t\t\t\t\t\tvar middle = new Prism.Token(language, Prism.tokenize(t, env.grammar), 'language-' + language, t);\n\t\t\t\t\t\t\t\tvar after = s.substring(index + placeholder.length);\n\n\t\t\t\t\t\t\t\tvar replacement = [];\n\t\t\t\t\t\t\t\tif (before) {\n\t\t\t\t\t\t\t\t\treplacement.push.apply(replacement, walkTokens([before]));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treplacement.push(middle);\n\t\t\t\t\t\t\t\tif (after) {\n\t\t\t\t\t\t\t\t\treplacement.push.apply(replacement, walkTokens([after]));\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (typeof token === 'string') {\n\t\t\t\t\t\t\t\t\ttokens.splice.apply(tokens, [i, 1].concat(replacement));\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ttoken.content = replacement;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (token.content /* && typeof token.content !== 'string' */) {\n\t\t\t\t\t\t\twalkTokens(token.content);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn tokens;\n\t\t\t\t}\n\n\t\t\t\twalkTokens(env.tokens);\n\t\t\t}\n\t\t}\n\t});\n\n}(Prism));\n","(function (Prism) {\n\n\tPrism.languages.handlebars = {\n\t\t'comment': /\\{\\{![\\s\\S]*?\\}\\}/,\n\t\t'delimiter': {\n\t\t\tpattern: /^\\{\\{\\{?|\\}\\}\\}?$/,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'string': /([\"'])(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\t'number': /\\b0x[\\dA-Fa-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:[Ee][+-]?\\d+)?/,\n\t\t'boolean': /\\b(?:false|true)\\b/,\n\t\t'block': {\n\t\t\tpattern: /^(\\s*(?:~\\s*)?)[#\\/]\\S+?(?=\\s*(?:~\\s*)?$|\\s)/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'keyword'\n\t\t},\n\t\t'brackets': {\n\t\t\tpattern: /\\[[^\\]]+\\]/,\n\t\t\tinside: {\n\t\t\t\tpunctuation: /\\[|\\]/,\n\t\t\t\tvariable: /[\\s\\S]+/\n\t\t\t}\n\t\t},\n\t\t'punctuation': /[!\"#%&':()*+,.\\/;<=>@\\[\\\\\\]^`{|}~]/,\n\t\t'variable': /[^!\"#%&'()*+,\\/;<=>@\\[\\\\\\]^`{|}~\\s]+/\n\t};\n\n\tPrism.hooks.add('before-tokenize', function (env) {\n\t\tvar handlebarsPattern = /\\{\\{\\{[\\s\\S]+?\\}\\}\\}|\\{\\{[\\s\\S]+?\\}\\}/g;\n\t\tPrism.languages['markup-templating'].buildPlaceholders(env, 'handlebars', handlebarsPattern);\n\t});\n\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tPrism.languages['markup-templating'].tokenizePlaceholders(env, 'handlebars');\n\t});\n\n\tPrism.languages.hbs = Prism.languages.handlebars;\n\tPrism.languages.mustache = Prism.languages.handlebars;\n\n}(Prism));\n","import BoundedPolicy from './bounded-policy';\nimport { makeCancelState, STARTED } from './execution-states';\n\nconst CANCELLED = makeCancelState(\n  `it belongs to a 'drop' Task that was already running`,\n);\n\nclass DropReducer {\n  constructor(remainingSlots) {\n    this.remainingSlots = remainingSlots;\n  }\n\n  step() {\n    if (this.remainingSlots > 0) {\n      this.remainingSlots--;\n      return STARTED;\n    }\n\n    return CANCELLED;\n  }\n}\n\nclass DropPolicy extends BoundedPolicy {\n  makeReducer() {\n    return new DropReducer(this.maxConcurrency);\n  }\n}\n\nexport default DropPolicy;\n","import BoundedPolicy from './bounded-policy';\nimport { STARTED, QUEUED, makeCancelState } from './execution-states';\n\nconst CANCELLED = makeCancelState(\n  `it belongs to a 'keepLatest' Task that was already running`,\n);\n\n// Given:\n// - started tasks: [a,b,_]\n// - queued tasks:  [c,d,e,f]\n// KeepLatest will cancel all but the last queued task instance, producing:\n// - started tasks: [a,b,c]\n// - queued tasks: [f]\n\n// TODO: perhaps we should expose another config for the number to keep enqueued.\n//       this would also make sense for enqueued, e.g. perform a max of maxConcurrency\n//       concurrent task instances, but after a number of queued instances has been\n//       reached, they should be cancelled.\n\nclass KeepLatestReducer {\n  constructor(remainingSlots, numToCancel) {\n    this.remainingSlots = remainingSlots;\n    this.numToCancel = numToCancel;\n  }\n\n  step() {\n    if (this.remainingSlots > 0) {\n      this.remainingSlots--;\n      return STARTED;\n    } else {\n      if (this.numToCancel > 0) {\n        this.numToCancel--;\n        return CANCELLED;\n      } else {\n        return QUEUED;\n      }\n    }\n  }\n}\n\nclass KeepLatestPolicy extends BoundedPolicy {\n  makeReducer(numRunning, numQueued) {\n    let maxEnqueued = 1;\n    let totalRunning = numRunning + numQueued;\n    return new KeepLatestReducer(\n      this.maxConcurrency,\n      totalRunning - this.maxConcurrency - maxEnqueued,\n    );\n  }\n}\n\nexport default KeepLatestPolicy;\n","import BoundedPolicy from './bounded-policy';\nimport { STARTED, makeCancelState } from './execution-states';\n\nconst CANCELLED = makeCancelState(\n  `it belongs to a 'restartable' Task that was .perform()ed again`,\n);\n\nclass RestartableReducer {\n  constructor(numToCancel) {\n    this.numToCancel = numToCancel;\n  }\n\n  step() {\n    if (this.numToCancel > 0) {\n      this.numToCancel--;\n      return CANCELLED;\n    } else {\n      return STARTED;\n    }\n  }\n}\n\nclass RestartablePolicy extends BoundedPolicy {\n  makeReducer(numRunning, numQueued) {\n    return new RestartableReducer(numRunning + numQueued - this.maxConcurrency);\n  }\n}\n\nexport default RestartablePolicy;\n","import { Taskable } from './taskable';\nimport {\n  PERFORM_TYPE_DEFAULT,\n  PERFORM_TYPE_LINKED,\n  PERFORM_TYPE_UNLINKED,\n  getRunningInstance,\n  TaskInstanceExecutor,\n} from '../task-instance/executor';\n\nclass TaskLinkProxy {\n  constructor(task, performType, linkedObject) {\n    this.task = task;\n    this.performType = performType;\n    this.linkedObject = linkedObject;\n  }\n\n  perform(...args) {\n    return this.task._performShared(args, this.performType, this.linkedObject);\n  }\n}\n\nexport class Task extends Taskable {\n  constructor(options) {\n    super(options);\n    this.generatorFactory = options.generatorFactory;\n    this.perform = this._perform.bind(this);\n  }\n\n  linked() {\n    let linkedObject = getRunningInstance();\n    if (!linkedObject) {\n      throw new Error(`You can only call .linked() from within a task.`);\n    }\n\n    return new TaskLinkProxy(this, PERFORM_TYPE_LINKED, linkedObject);\n  }\n\n  unlinked() {\n    return new TaskLinkProxy(this, PERFORM_TYPE_UNLINKED, null);\n  }\n\n  toString() {\n    return `<Task:${this.name}>`;\n  }\n\n  _clone() {\n    return new Task({\n      context: this.context,\n      debug: this.debug,\n      env: this.env,\n      generatorFactory: this.generatorFactory,\n      group: this.group,\n      hasEnabledEvents: this.hasEnabledEvents,\n      name: this.name,\n      onStateCallback: this.onStateCallback,\n      scheduler: this.scheduler,\n    });\n  }\n\n  _curry(...args) {\n    let task = this._clone();\n    task._curryArgs = [...(this._curryArgs || []), ...args];\n    return task;\n  }\n\n  _perform(...args) {\n    return this._performShared(args, PERFORM_TYPE_DEFAULT, null);\n  }\n\n  _performShared(args, performType, linkedObject) {\n    let fullArgs = this._curryArgs ? [...this._curryArgs, ...args] : args;\n    let taskInstance = this._taskInstanceFactory(\n      fullArgs,\n      performType,\n      linkedObject,\n    );\n\n    if (performType === PERFORM_TYPE_LINKED) {\n      linkedObject._expectsLinkedYield = true;\n    }\n\n    if (!this._isAlive) {\n      // a task linked to a dead lifetime should immediately cancel.\n      taskInstance.cancel();\n    }\n\n    this.scheduler.perform(taskInstance);\n    return taskInstance;\n  }\n\n  // eslint-disable-next-line no-unused-vars\n  _taskInstanceOptions(args, performType, _linkedObject) {\n    let generatorFactory = () => this.generatorFactory(args);\n    let taskInstanceOptions = {\n      task: this,\n      args,\n      executor: new TaskInstanceExecutor({\n        generatorFactory,\n        env: this.env,\n        debug: this.debug,\n      }),\n      performType,\n      hasEnabledEvents: this.hasEnabledEvents,\n    };\n\n    return taskInstanceOptions;\n  }\n}\n","import { Taskable } from './taskable';\n\nexport class TaskGroup extends Taskable {}\n","export class Environment {\n  assert() {}\n\n  async(callback) {\n    Promise.resolve().then(callback);\n  }\n\n  reportUncaughtRejection() {\n    this.async((error) => {\n      throw error;\n    });\n  }\n\n  defer() {\n    let deferable = {\n      promise: null,\n      resolve: null,\n      reject: null,\n    };\n\n    let promise = new Promise((resolve, reject) => {\n      deferable.resolve = resolve;\n      deferable.reject = reject;\n    });\n\n    deferable.promise = promise;\n\n    return deferable;\n  }\n\n  globalDebuggingEnabled() {\n    return false;\n  }\n}\n\nexport const DEFAULT_ENVIRONMENT = new Environment();\n","const C = \"\\u037c\"\nconst COUNT = typeof Symbol == \"undefined\" ? \"__\" + C : Symbol.for(C)\nconst SET = typeof Symbol == \"undefined\" ? \"__styleSet\" + Math.floor(Math.random() * 1e8) : Symbol(\"styleSet\")\nconst top = typeof globalThis != \"undefined\" ? globalThis : typeof window != \"undefined\" ? window : {}\n\n// :: - Style modules encapsulate a set of CSS rules defined from\n// JavaScript. Their definitions are only available in a given DOM\n// root after it has been _mounted_ there with `StyleModule.mount`.\n//\n// Style modules should be created once and stored somewhere, as\n// opposed to re-creating them every time you need them. The amount of\n// CSS rules generated for a given DOM root is bounded by the amount\n// of style modules that were used. So to avoid leaking rules, don't\n// create these dynamically, but treat them as one-time allocations.\nexport class StyleModule {\n  // :: (Object<Style>, ?{finish: ?(string) → string})\n  // Create a style module from the given spec.\n  //\n  // When `finish` is given, it is called on regular (non-`@`)\n  // selectors (after `&` expansion) to compute the final selector.\n  constructor(spec, options) {\n    this.rules = []\n    let {finish} = options || {}\n\n    function splitSelector(selector) {\n      return /^@/.test(selector) ? [selector] : selector.split(/,\\s*/)\n    }\n\n    function render(selectors, spec, target, isKeyframes) {\n      let local = [], isAt = /^@(\\w+)\\b/.exec(selectors[0]), keyframes = isAt && isAt[1] == \"keyframes\"\n      if (isAt && spec == null) return target.push(selectors[0] + \";\")\n      for (let prop in spec) {\n        let value = spec[prop]\n        if (/&/.test(prop)) {\n          render(prop.split(/,\\s*/).map(part => selectors.map(sel => part.replace(/&/, sel))).reduce((a, b) => a.concat(b)),\n                 value, target)\n        } else if (value && typeof value == \"object\") {\n          if (!isAt) throw new RangeError(\"The value of a property (\" + prop + \") should be a primitive value.\")\n          render(splitSelector(prop), value, local, keyframes)\n        } else if (value != null) {\n          local.push(prop.replace(/_.*/, \"\").replace(/[A-Z]/g, l => \"-\" + l.toLowerCase()) + \": \" + value + \";\")\n        }\n      }\n      if (local.length || keyframes) {\n        target.push((finish && !isAt && !isKeyframes ? selectors.map(finish) : selectors).join(\", \") +\n                    \" {\" + local.join(\" \") + \"}\")\n      }\n    }\n\n    for (let prop in spec) render(splitSelector(prop), spec[prop], this.rules)\n  }\n\n  // :: () → string\n  // Returns a string containing the module's CSS rules.\n  getRules() { return this.rules.join(\"\\n\") }\n\n  // :: () → string\n  // Generate a new unique CSS class name.\n  static newName() {\n    let id = top[COUNT] || 1\n    top[COUNT] = id + 1\n    return C + id.toString(36)\n  }\n\n  // :: (union<Document, ShadowRoot>, union<[StyleModule], StyleModule>, ?{nonce: ?string})\n  //\n  // Mount the given set of modules in the given DOM root, which ensures\n  // that the CSS rules defined by the module are available in that\n  // context.\n  //\n  // Rules are only added to the document once per root.\n  //\n  // Rule order will follow the order of the modules, so that rules from\n  // modules later in the array take precedence of those from earlier\n  // modules. If you call this function multiple times for the same root\n  // in a way that changes the order of already mounted modules, the old\n  // order will be changed.\n  //\n  // If a Content Security Policy nonce is provided, it is added to\n  // the `<style>` tag generated by the library.\n  static mount(root, modules, options) {\n    let set = root[SET], nonce = options && options.nonce\n    if (!set) set = new StyleSet(root, nonce)\n    else if (nonce) set.setNonce(nonce)\n    set.mount(Array.isArray(modules) ? modules : [modules], root)\n  }\n}\n\nlet adoptedSet = new Map //<Document, StyleSet>\n\nclass StyleSet {\n  constructor(root, nonce) {\n    let doc = root.ownerDocument || root, win = doc.defaultView\n    if (!root.head && root.adoptedStyleSheets && win.CSSStyleSheet) {\n      let adopted = adoptedSet.get(doc)\n      if (adopted) return root[SET] = adopted\n      this.sheet = new win.CSSStyleSheet\n      adoptedSet.set(doc, this)\n    } else {\n      this.styleTag = doc.createElement(\"style\")\n      if (nonce) this.styleTag.setAttribute(\"nonce\", nonce)\n    }\n    this.modules = []\n    root[SET] = this\n  }\n\n  mount(modules, root) {\n    let sheet = this.sheet\n    let pos = 0 /* Current rule offset */, j = 0 /* Index into this.modules */\n    for (let i = 0; i < modules.length; i++) {\n      let mod = modules[i], index = this.modules.indexOf(mod)\n      if (index < j && index > -1) { // Ordering conflict\n        this.modules.splice(index, 1)\n        j--\n        index = -1\n      }\n      if (index == -1) {\n        this.modules.splice(j++, 0, mod)\n        if (sheet) for (let k = 0; k < mod.rules.length; k++)\n          sheet.insertRule(mod.rules[k], pos++)\n      } else {\n        while (j < index) pos += this.modules[j++].rules.length\n        pos += mod.rules.length\n        j++\n      }\n    }\n\n    if (sheet) {\n      if (root.adoptedStyleSheets.indexOf(this.sheet) < 0)\n        root.adoptedStyleSheets = [this.sheet, ...root.adoptedStyleSheets]\n    } else {\n      let text = \"\"\n      for (let i = 0; i < this.modules.length; i++)\n        text += this.modules[i].getRules() + \"\\n\"\n      this.styleTag.textContent = text\n      let target = root.head || root\n      if (this.styleTag.parentNode != target)\n        target.insertBefore(this.styleTag, target.firstChild)\n    }\n  }\n\n  setNonce(nonce) {\n    if (this.styleTag && this.styleTag.getAttribute(\"nonce\") != nonce)\n      this.styleTag.setAttribute(\"nonce\", nonce)\n  }\n}\n\n// Style::Object<union<Style,string>>\n//\n// A style is an object that, in the simple case, maps CSS property\n// names to strings holding their values, as in `{color: \"red\",\n// fontWeight: \"bold\"}`. The property names can be given in\n// camel-case—the library will insert a dash before capital letters\n// when converting them to CSS.\n//\n// If you include an underscore in a property name, it and everything\n// after it will be removed from the output, which can be useful when\n// providing a property multiple times, for browser compatibility\n// reasons.\n//\n// A property in a style object can also be a sub-selector, which\n// extends the current context to add a pseudo-selector or a child\n// selector. Such a property should contain a `&` character, which\n// will be replaced by the current selector. For example `{\"&:before\":\n// {content: '\"hi\"'}}`. Sub-selectors and regular properties can\n// freely be mixed in a given object. Any property containing a `&` is\n// assumed to be a sub-selector.\n//\n// Finally, a property can specify an @-block to be wrapped around the\n// styles defined inside the object that's the property's value. For\n// example to create a media query you can do `{\"@media screen and\n// (min-width: 400px)\": {...}}`.\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { isTesting } from '@embroider/macros';\n\nimport type ApplicationInstance from '@ember/application/instance';\n\ninterface Config {\n  flightIconsSpriteLazyEmbed?: boolean;\n}\n\nexport async function initialize(appInstance: ApplicationInstance) {\n  const config = appInstance.resolveRegistration(\n    'config:environment'\n  ) as Config;\n\n  if (config.flightIconsSpriteLazyEmbed) {\n    const { default: svgSprite } = await import(\n      '@hashicorp/flight-icons/svg-sprite/svg-sprite-module'\n    );\n\n    // in test environments we can inject the sprite directly into the ember testing container\n    // to avoid issues with tools like Percy that only consider content inside that element\n    if (isTesting()) {\n      const container = window.document?.getElementById('ember-testing');\n\n      if (container && !container.querySelector('.flight-sprite-container')) {\n        container.insertAdjacentHTML('afterbegin', svgSprite);\n      }\n    } else {\n      const container = window.document?.body;\n\n      if (container && !container.querySelector('.flight-sprite-container')) {\n        container.insertAdjacentHTML('beforeend', svgSprite);\n      }\n    }\n  }\n}\n\nexport default {\n  initialize,\n};\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport enum HdsCodeEditorLanguageValues {\n  Rego = 'rego',\n  Ruby = 'ruby',\n  Shell = 'shell',\n  Go = 'go',\n  Hcl = 'hcl',\n  JavaScript = 'javascript',\n  Json = 'json',\n  Markdown = 'markdown',\n  Sentinel = 'sentinel',\n  Sql = 'sql',\n  Yaml = 'yaml',\n}\n\nexport type HdsCodeEditorLanguages = `${HdsCodeEditorLanguageValues}`;\n","/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Service from '@ember/service';\nimport { getOwner } from '@ember/owner';\nimport { isPresent } from '@ember/utils';\nimport { assert } from '@ember/debug';\n\nimport type { IntlService } from 'ember-intl';\n\ntype IntlTOptions = Parameters<IntlService['t']>[1];\n\nexport type HdsIntlTOptions = IntlTOptions & {\n  default: string;\n};\n\nexport default class HdsIntlService extends Service {\n  get intl(): IntlService | undefined {\n    const owner = getOwner(this);\n\n    if (\n      typeof owner?.factoryFor === 'function' &&\n      owner.factoryFor('service:intl')\n    ) {\n      return owner.lookup('service:intl');\n    }\n\n    return undefined;\n  }\n\n  t(key: string, options: HdsIntlTOptions): string {\n    const { default: defaultString, ...restOptions } = options;\n\n    assert(\n      'HdsIntlService requires a key as the first positional argument',\n      typeof key === 'string' && isPresent(key)\n    );\n\n    // try to use ember-intl if available and a translation key exists\n    if (this.intl !== undefined) {\n      const localeIsSet = this.intl.locales && this.intl.locales.length > 0;\n\n      if (localeIsSet && this.intl.exists(key)) {\n        return this.intl.t(key, restOptions);\n      }\n    }\n\n    return defaultString;\n  }\n}\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Service from '@ember/service';\nimport { dropTask, timeout } from 'ember-concurrency';\nimport { tracked } from '@glimmer/tracking';\nimport { DateTime } from 'luxon';\nimport { isTesting } from '@embroider/macros';\nimport type {\n  DisplayType,\n  DefaultDisplayType,\n  DisplayFormatType,\n} from './hds-time-types.ts';\n\nexport const MILLISECOND_IN_MS = 1;\nexport const SECOND_IN_MS = 1000 * MILLISECOND_IN_MS;\nexport const MINUTE_IN_MS = 60 * SECOND_IN_MS;\nexport const HOUR_IN_MS = 60 * MINUTE_IN_MS;\nexport const DAY_IN_MS = 24 * HOUR_IN_MS;\nexport const WEEK_IN_MS = 7 * DAY_IN_MS;\n\nexport const THRESHOLD_RELATIVE_TIME_IN_MS = WEEK_IN_MS;\n\nexport enum HdsTimeRelativeUnitValues {\n  Second = 'second',\n  Hour = 'hour',\n  Minute = 'minute',\n  Day = 'day',\n  Week = 'week',\n}\n\nexport const DEFAULT_RELATIVE_THRESHOLDS = {\n  [HdsTimeRelativeUnitValues.Second]: 1 * MINUTE_IN_MS,\n  [HdsTimeRelativeUnitValues.Minute]: 1 * HOUR_IN_MS,\n  [HdsTimeRelativeUnitValues.Hour]: 1 * DAY_IN_MS,\n  [HdsTimeRelativeUnitValues.Day]: 100 * WEEK_IN_MS,\n};\n\nexport enum HdsDisplayKeyValues {\n  FriendlyRelative = 'friendly-relative', // Example: 'Sep 5, 2018 (30 minutes ago)'\n  FriendlyLocal = 'friendly-local', // Example: 'Sep 5, 2018, 4:07:32 pm'\n  FriendlyOnly = 'friendly-only', // Example: 'Sep 5, 2018'\n  Relative = 'relative', // Example: 'in 7 days'\n  Utc = 'utc', // Example: '2018-09-05T23:15:17345Z'\n}\n\nexport const FORMAT_PRECISION_SHORT_DATE: DisplayFormatType = {\n  month: 'short',\n  day: 'numeric',\n  year: 'numeric',\n};\nexport const FORMAT_PRECISION_MINUTE: DisplayFormatType = {\n  ...FORMAT_PRECISION_SHORT_DATE,\n  hour: 'numeric',\n  minute: 'numeric',\n};\nexport const FORMAT_PRECISION_SECOND: DisplayFormatType = {\n  ...FORMAT_PRECISION_SHORT_DATE,\n  hour: 'numeric',\n  minute: 'numeric',\n  second: 'numeric',\n  timeZoneName: 'short',\n};\nexport const DATE_DISPLAY_FORMATS: {\n  [x: string]: DisplayFormatType;\n} = {\n  [HdsDisplayKeyValues.FriendlyLocal]: FORMAT_PRECISION_SECOND,\n  [HdsDisplayKeyValues.FriendlyOnly]: FORMAT_PRECISION_SHORT_DATE,\n};\n\nexport const DEFAULT_DISPLAY = '';\n\nexport const DEFAULT_DISPLAY_MAPPING: {\n  [x: string]: DefaultDisplayType;\n} = {\n  [HdsDisplayKeyValues.FriendlyRelative]: {\n    displayFormat: FORMAT_PRECISION_SHORT_DATE,\n    showFriendly: true,\n    showRelative: true,\n    tooltipFormat: FORMAT_PRECISION_SECOND,\n  },\n  [HdsDisplayKeyValues.FriendlyLocal]: {\n    displayFormat: DATE_DISPLAY_FORMATS[HdsDisplayKeyValues.FriendlyLocal],\n    showFriendly: true,\n    showRelative: false,\n    tooltipFormat: null,\n  },\n  [HdsDisplayKeyValues.FriendlyOnly]: {\n    displayFormat: DATE_DISPLAY_FORMATS[HdsDisplayKeyValues.FriendlyOnly],\n    showFriendly: true,\n    showRelative: false,\n    tooltipFormat: null,\n  },\n  [HdsDisplayKeyValues.Relative]: {\n    displayFormat: null,\n    showFriendly: false,\n    showRelative: true,\n    tooltipFormat: FORMAT_PRECISION_MINUTE,\n  },\n  [HdsDisplayKeyValues.Utc]: {\n    displayFormat: null,\n    showFriendly: true,\n    showRelative: false,\n    tooltipFormat: null,\n  },\n};\n\nexport const DISPLAY_SCALE = Object.keys(DEFAULT_DISPLAY_MAPPING);\n\nexport const DISPLAYS = [\n  HdsDisplayKeyValues.FriendlyRelative,\n  HdsDisplayKeyValues.FriendlyLocal,\n  HdsDisplayKeyValues.FriendlyOnly,\n  HdsDisplayKeyValues.Relative,\n  HdsDisplayKeyValues.Utc,\n];\n\nexport default class TimeService extends Service {\n  #listeners = new Set<Date>();\n\n  @tracked now = Date.now();\n\n  format(\n    difference: {\n      absValueInMs: number;\n      valueInMs: number;\n    },\n    display = DEFAULT_DISPLAY\n  ): DisplayType {\n    let displayKey;\n    // If the scale display is defined and valid then set that display.\n    if (display && DISPLAY_SCALE.includes(display)) {\n      displayKey = display;\n    } else {\n      // If there's no defined display then we will execute the design system's\n      // prefered algorithm.\n\n      // By default, we assume we will display just a relative display only.\n      displayKey = HdsDisplayKeyValues.Relative;\n\n      // If the difference in date is greater than the threshold for showing the\n      // relative time then switch the display key.\n      if (difference.absValueInMs > THRESHOLD_RELATIVE_TIME_IN_MS) {\n        displayKey = HdsDisplayKeyValues.FriendlyLocal;\n      }\n    }\n\n    const options: DefaultDisplayType | undefined =\n      DEFAULT_DISPLAY_MAPPING[displayKey];\n\n    return {\n      options,\n      difference,\n      relative: this.selectTimeRelativeUnit(difference),\n    };\n  }\n\n  // Formats the value of a relative unit.\n  formatTimeRelativeUnit(\n    value: number,\n    unit: Intl.RelativeTimeFormatUnit\n  ): { value: number; unit: Intl.RelativeTimeFormatUnit } {\n    return {\n      value: Math.trunc(value),\n      unit,\n    };\n  }\n\n  // Selects an appropriate display format for the difference.\n  selectTimeRelativeUnit(\n    { absValueInMs, valueInMs }: { absValueInMs: number; valueInMs: number },\n    thresholds: {\n      second: number;\n      minute: number;\n      hour: number;\n      day: number;\n    } = DEFAULT_RELATIVE_THRESHOLDS\n  ): { value: number; unit: Intl.RelativeTimeFormatUnit } {\n    if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Second]) {\n      return this.formatTimeRelativeUnit(\n        valueInMs / SECOND_IN_MS,\n        HdsTimeRelativeUnitValues.Second\n      );\n    }\n\n    if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Minute]) {\n      return this.formatTimeRelativeUnit(\n        valueInMs / MINUTE_IN_MS,\n        HdsTimeRelativeUnitValues.Minute\n      );\n    }\n\n    if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Hour]) {\n      return this.formatTimeRelativeUnit(\n        valueInMs / HOUR_IN_MS,\n        HdsTimeRelativeUnitValues.Hour\n      );\n    }\n\n    if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Day]) {\n      return this.formatTimeRelativeUnit(\n        valueInMs / DAY_IN_MS,\n        HdsTimeRelativeUnitValues.Day\n      );\n    }\n\n    return this.formatTimeRelativeUnit(\n      valueInMs / WEEK_IN_MS,\n      HdsTimeRelativeUnitValues.Week\n    );\n  }\n\n  // Gets the currently subscribed listeners.\n  timeDifference(\n    startDate: number,\n    endDate: Date\n  ): { absValueInMs: number; valueInMs: number } {\n    const valueInMs = Number(endDate) - Number(startDate);\n    return {\n      absValueInMs: Math.abs(valueInMs),\n      valueInMs,\n    };\n  }\n\n  // Subscribes a listener to the ticking task for time changes.\n  register(id: Date): () => void {\n    this.#listeners.add(id);\n\n    void this.start.perform();\n\n    return (): void => {\n      this.unregister(id);\n    };\n  }\n\n  // Unregisters listener for the time task.\n  unregister(id: Date): boolean {\n    return this.#listeners.delete(id);\n  }\n\n  start = dropTask(async () => {\n    while (this.listeners.size) {\n      this.now = Date.now();\n      // When testing and canceling a EC task, a timer will never resolve and\n      // cause the test to hang while waiting for a permanently hanging timeout.\n      // This condition breaks the test out of that.\n      // via: http://ember-concurrency.com/docs/testing-debugging/\n      if (isTesting()) return;\n      await timeout(SECOND_IN_MS);\n    }\n  });\n\n  // Transforms a JS date to a string representing the UTC ISO date.\n  toIsoUtcString(date: Date): string | undefined {\n    try {\n      return DateTime.fromJSDate(date).toUTC().toJSDate().toISOString();\n    } catch (error) {\n      console.error('Error: Could not convert date to ISO UTC string; ', error);\n    }\n  }\n\n  // Gets the currently subscribed listeners.\n  get listeners(): Set<Date> {\n    return this.#listeners;\n  }\n}\n","import { helper } from '@ember/component/helper';\nimport { pipe } from './pipe.ts';\nimport ACTION from '../-private/closure-action.ts';\n\nconst closurePipe = pipe;\nif (ACTION) {\n  closurePipe[ACTION] = true as never; // TODO: remove never\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport default helper(closurePipe as any); // TODO: remove any\n","import { helper } from '@ember/component/helper';\nimport { toggle } from './toggle.ts';\nimport ACTION from '../-private/closure-action.ts';\n\nconst closureToggle = toggle;\nif (ACTION) {\n  closureToggle[ACTION] = true as never; // TODO: remove never\n}\n\nexport default helper(closureToggle);\n","var enLocaleData = {\n    en: {\n        locale: \"en\",\n        numbers: {\n            decimal: {\n                long: [[1000, {\n                            one: [\"0 thousand\", 1],\n                            other: [\"0 thousand\", 1]\n                        }], [10000, {\n                            one: [\"00 thousand\", 2],\n                            other: [\"00 thousand\", 2]\n                        }], [100000, {\n                            one: [\"000 thousand\", 3],\n                            other: [\"000 thousand\", 3]\n                        }], [1000000, {\n                            one: [\"0 million\", 1],\n                            other: [\"0 million\", 1]\n                        }], [10000000, {\n                            one: [\"00 million\", 2],\n                            other: [\"00 million\", 2]\n                        }], [100000000, {\n                            one: [\"000 million\", 3],\n                            other: [\"000 million\", 3]\n                        }], [1000000000, {\n                            one: [\"0 billion\", 1],\n                            other: [\"0 billion\", 1]\n                        }], [10000000000, {\n                            one: [\"00 billion\", 2],\n                            other: [\"00 billion\", 2]\n                        }], [100000000000, {\n                            one: [\"000 billion\", 3],\n                            other: [\"000 billion\", 3]\n                        }], [1000000000000, {\n                            one: [\"0 trillion\", 1],\n                            other: [\"0 trillion\", 1]\n                        }], [10000000000000, {\n                            one: [\"00 trillion\", 2],\n                            other: [\"00 trillion\", 2]\n                        }], [100000000000000, {\n                            one: [\"000 trillion\", 3],\n                            other: [\"000 trillion\", 3]\n                        }]],\n                short: [[1000, {\n                            one: [\"0K\", 1],\n                            other: [\"0K\", 1]\n                        }], [10000, {\n                            one: [\"00K\", 2],\n                            other: [\"00K\", 2]\n                        }], [100000, {\n                            one: [\"000K\", 3],\n                            other: [\"000K\", 3]\n                        }], [1000000, {\n                            one: [\"0M\", 1],\n                            other: [\"0M\", 1]\n                        }], [10000000, {\n                            one: [\"00M\", 2],\n                            other: [\"00M\", 2]\n                        }], [100000000, {\n                            one: [\"000M\", 3],\n                            other: [\"000M\", 3]\n                        }], [1000000000, {\n                            one: [\"0B\", 1],\n                            other: [\"0B\", 1]\n                        }], [10000000000, {\n                            one: [\"00B\", 2],\n                            other: [\"00B\", 2]\n                        }], [100000000000, {\n                            one: [\"000B\", 3],\n                            other: [\"000B\", 3]\n                        }], [1000000000000, {\n                            one: [\"0T\", 1],\n                            other: [\"0T\", 1]\n                        }], [10000000000000, {\n                            one: [\"00T\", 2],\n                            other: [\"00T\", 2]\n                        }], [100000000000000, {\n                            one: [\"000T\", 3],\n                            other: [\"000T\", 3]\n                        }]]\n            }\n        }\n    }\n};\nenLocaleData = JSON.parse(JSON.stringify(enLocaleData));\nvar enLocaleData$1 = enLocaleData;\n\nfunction replaceNumber(normalized, format) {\n    // 1.734 -> 1K\n    // replace 0's with absolute number while preserving space and remaining text\n    // return format.replace(/0*(\\s*)(\\w+)/, Math.round(number) + '$1$2');\n    return format.replace(/0*/, normalized);\n}\nfunction polishString(str) {\n    return str.replace(\"'.'\", '.');\n}\nfunction normalizeLocale(locale) {\n    if (locale instanceof Array) {\n        return locale[0].replace(/_/, '-').toLowerCase();\n    }\n    return locale.replace(/_/, '-').toLowerCase();\n}\n/**\n * If rule only contains 0, it indicates no short number formatting applied\n * e.g. \"ja\" 1234 -> 1234 and not 1K\n */\nfunction needsFormatting(format) {\n    return format.match(/[^0]/);\n}\n/**\n * Given a format: { af: {locale: \"af\", numbers: {…}} af-na: {locale: \"af-NA\", parentLocale: \"af\"} }\n * recursively find numbers hash\n *\n * @method findLocaleData\n * @param localeData\n * @param locale\n */\nfunction findLocaleData(localeData, locale) {\n    locale = Array.isArray(locale) ? locale[0] : locale;\n    var topLevelData = localeData[locale] || localeData[normalizeLocale(locale)];\n    if (!topLevelData) {\n        return;\n    }\n    var numbersHash = topLevelData.numbers;\n    var parentLocale = topLevelData.parentLocale;\n    if (!numbersHash && parentLocale) {\n        numbersHash = findLocaleData(localeData, parentLocale);\n    }\n    return numbersHash;\n}\n\n/**\n * Meant to either localize a number with toLocaleString or return an Integer\n * localization accepts 3 arguments\n *  - significantDigits\n *  - minimumFractionDigits\n *  - maximumFractionDigits\n */\nfunction normalizeNumber(decimal, arbitraryPrecision, sign, locale, _a) {\n    var _b = _a.significantDigits, significantDigits = _b === void 0 ? 0 : _b, _c = _a.minimumFractionDigits, minimumFractionDigits = _c === void 0 ? 0 : _c, _d = _a.maximumFractionDigits, maximumFractionDigits = _d === void 0 ? 2 : _d;\n    if (significantDigits) {\n        return toLocaleFixed(toFixed(decimal, significantDigits) * sign, locale, {\n            maximumFractionDigits: maximumFractionDigits,\n            minimumFractionDigits: minimumFractionDigits\n        });\n    }\n    return withRounding(decimal, arbitraryPrecision) * sign;\n}\nfunction extractIntPart(decimal, range, numberOfDigits) {\n    // 1734 -> 1.734\n    // 17345 -> 17.345\n    // 999949 -> 999.9K with one significant digit or 999,9 mil in Spanish\n    // this gives us the \"int\" (LHS) part of the number with the remains on the RHS\n    return (decimal / range) * Math.pow(10, numberOfDigits - 1);\n}\nfunction toFixed(decimal, significantDigits) {\n    // solves issues with toFixed returning a string\n    // e.g. 999.94 -> 999.9\n    // e.g. 999.95 -> 1000 instead of (999.95).toFixed(1) -> '1000.1'\n    var powOf10 = Math.pow(10, significantDigits);\n    return Math.round(decimal * powOf10) / powOf10;\n}\nfunction withRounding(decimal, arbitraryPrecision) {\n    if (decimal <= 1) {\n        // We do not want to round up to nearest 10 (Math.pow(10, 1)) when < 1.\n        // Just round decimal\n        return Math.round(decimal);\n    }\n    // rounding on floating point numbers\n    // e.g. 99.5 -> 100\n    var powOf10 = Math.pow(10, arbitraryPrecision);\n    return Math.round(decimal / powOf10) * powOf10;\n}\nfunction toLocaleFixed(value, locale, digitsConfig) {\n    if (value && typeof value === 'number') {\n        return value.toLocaleString(locale, digitsConfig);\n    }\n}\n\nvar __assign = (undefined && undefined.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nfunction compactFormat(value, locale, localeData, options) {\n    if (options === void 0) { options = {}; }\n    var num = Number(value);\n    if (!value || typeof num !== 'number') {\n        return value;\n    }\n    localeData = __assign(__assign({}, enLocaleData$1), localeData);\n    // figure out which numbers hash based on the locale\n    var data = findLocaleData(localeData, locale);\n    if (!data) {\n        return value;\n    }\n    // take the absolute value and stash sign to apply at end\n    var sign = 1;\n    if (num < 0) {\n        sign = -1;\n        num = Math.abs(num);\n    }\n    // find specific rules: short or long\n    var _a = options.financialFormat, financialFormat = _a === void 0 ? false : _a, _b = options.long, long = _b === void 0 ? false : _b, _c = options.significantDigits, significantDigits = _c === void 0 ? 0 : _c, _d = options.threshold, threshold = _d === void 0 ? 0.05 : _d;\n    var rules = long ? data.decimal.long : data.decimal.short;\n    if (!rules || num < 1000) {\n        return value;\n    }\n    // 1. Take number and determine range it is in\n    // 2. Extract specific rule from hash - [\"0K\", 1] meaning which value from the rule and number of zeros\n    var matchingRule;\n    var arbitraryPrecision = 0;\n    for (var i = 0; i <= rules.length; i++) {\n        if (num <= rules[i][0]) {\n            var testRangeHigh = rules[i][0];\n            // always use previous rule until within 5% threshold of upper limit\n            if (!financialFormat && 1 - num / testRangeHigh > threshold) {\n                // e.g use 950K instead of 1M\n                // e.g use 101K instead of 0.1M\n                matchingRule = rules[i - 1];\n            }\n            else {\n                matchingRule = rules[i];\n                if (!significantDigits || !financialFormat) {\n                    // if we want to round up, we need to prevent numbers like 99,499 from rounding down to 99K\n                    // /-private/math-utils will use this variable to round a number like 91 to 100 since we are within the threshold\n                    arbitraryPrecision = 1;\n                }\n            }\n            break;\n        }\n    }\n    // 3. Normalise number by converting to decimal and cropping to number of digits\n    //  1000 -> 1.000 -> 1K\n    //  1600 -> 1.600 -> 2K\n    // 4. Format according to formatter e.g. \"0K\"\n    var range = matchingRule[0], opts = matchingRule[1];\n    // cldr data is either `one` or `other`.  Defaulting to `one` for now\n    var _e = opts.one || opts.other, formatter = _e[0], numberOfDigits = _e[1];\n    if (!needsFormatting(formatter)) {\n        return value;\n    }\n    var normalizedLocale = normalizeLocale(locale);\n    var normalized = normalizeNumber(extractIntPart(num, range, numberOfDigits), arbitraryPrecision, sign, normalizedLocale, options);\n    return polishString(replaceNumber(normalized, formatter));\n}\n\nexport default compactFormat;\nexport { compactFormat };\n","export default function(x, y) {\n  var nodes, strength = 1;\n\n  if (x == null) x = 0;\n  if (y == null) y = 0;\n\n  function force() {\n    var i,\n        n = nodes.length,\n        node,\n        sx = 0,\n        sy = 0;\n\n    for (i = 0; i < n; ++i) {\n      node = nodes[i], sx += node.x, sy += node.y;\n    }\n\n    for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {\n      node = nodes[i], node.x -= sx, node.y -= sy;\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n  };\n\n  force.x = function(_) {\n    return arguments.length ? (x = +_, force) : x;\n  };\n\n  force.y = function(_) {\n    return arguments.length ? (y = +_, force) : y;\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = +_, force) : strength;\n  };\n\n  return force;\n}\n","export default function(d) {\n  const x = +this._x.call(null, d),\n      y = +this._y.call(null, d);\n  return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n  if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n  var parent,\n      node = tree._root,\n      leaf = {data: d},\n      x0 = tree._x0,\n      y0 = tree._y0,\n      x1 = tree._x1,\n      y1 = tree._y1,\n      xm,\n      ym,\n      xp,\n      yp,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return tree._root = leaf, tree;\n\n  // Find the existing leaf for the new point, or add it.\n  while (node.length) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n  }\n\n  // Is the new point is exactly coincident with the existing point?\n  xp = +tree._x.call(null, node.data);\n  yp = +tree._y.call(null, node.data);\n  if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n  // Otherwise, split the leaf node until the old and new point are separated.\n  do {\n    parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n  } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n  return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n  var d, i, n = data.length,\n      x,\n      y,\n      xz = new Array(n),\n      yz = new Array(n),\n      x0 = Infinity,\n      y0 = Infinity,\n      x1 = -Infinity,\n      y1 = -Infinity;\n\n  // Compute the points and their extent.\n  for (i = 0; i < n; ++i) {\n    if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n    xz[i] = x;\n    yz[i] = y;\n    if (x < x0) x0 = x;\n    if (x > x1) x1 = x;\n    if (y < y0) y0 = y;\n    if (y > y1) y1 = y;\n  }\n\n  // If there were no (valid) points, abort.\n  if (x0 > x1 || y0 > y1) return this;\n\n  // Expand the tree to cover the new points.\n  this.cover(x0, y0).cover(x1, y1);\n\n  // Add the new points.\n  for (i = 0; i < n; ++i) {\n    add(this, xz[i], yz[i], data[i]);\n  }\n\n  return this;\n}\n","export default function(node, x0, y0, x1, y1) {\n  this.node = node;\n  this.x0 = x0;\n  this.y0 = y0;\n  this.x1 = x1;\n  this.y1 = y1;\n}\n","export function defaultX(d) {\n  return d[0];\n}\n\nexport default function(_) {\n  return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n  return d[1];\n}\n\nexport default function(_) {\n  return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n  var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n  return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n  this._x = x;\n  this._y = y;\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n  var copy = {data: leaf.data}, next = copy;\n  while (leaf = leaf.next) next = next.next = {data: leaf.data};\n  return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n  var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n      node = this._root,\n      nodes,\n      child;\n\n  if (!node) return copy;\n\n  if (!node.length) return copy._root = leaf_copy(node), copy;\n\n  nodes = [{source: node, target: copy._root = new Array(4)}];\n  while (node = nodes.pop()) {\n    for (var i = 0; i < 4; ++i) {\n      if (child = node.source[i]) {\n        if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n        else node.target[i] = leaf_copy(child);\n      }\n    }\n  }\n\n  return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function(random) {\n  return (random() - 0.5) * 1e-6;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction x(d) {\n  return d.x + d.vx;\n}\n\nfunction y(d) {\n  return d.y + d.vy;\n}\n\nexport default function(radius) {\n  var nodes,\n      radii,\n      random,\n      strength = 1,\n      iterations = 1;\n\n  if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n  function force() {\n    var i, n = nodes.length,\n        tree,\n        node,\n        xi,\n        yi,\n        ri,\n        ri2;\n\n    for (var k = 0; k < iterations; ++k) {\n      tree = quadtree(nodes, x, y).visitAfter(prepare);\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        ri = radii[node.index], ri2 = ri * ri;\n        xi = node.x + node.vx;\n        yi = node.y + node.vy;\n        tree.visit(apply);\n      }\n    }\n\n    function apply(quad, x0, y0, x1, y1) {\n      var data = quad.data, rj = quad.r, r = ri + rj;\n      if (data) {\n        if (data.index > node.index) {\n          var x = xi - data.x - data.vx,\n              y = yi - data.y - data.vy,\n              l = x * x + y * y;\n          if (l < r * r) {\n            if (x === 0) x = jiggle(random), l += x * x;\n            if (y === 0) y = jiggle(random), l += y * y;\n            l = (r - (l = Math.sqrt(l))) / l * strength;\n            node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n            node.vy += (y *= l) * r;\n            data.vx -= x * (r = 1 - r);\n            data.vy -= y * r;\n          }\n        }\n        return;\n      }\n      return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n    }\n  }\n\n  function prepare(quad) {\n    if (quad.data) return quad.r = radii[quad.data.index];\n    for (var i = quad.r = 0; i < 4; ++i) {\n      if (quad[i] && quad[i].r > quad.r) {\n        quad.r = quad[i].r;\n      }\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length, node;\n    radii = new Array(n);\n    for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n  }\n\n  force.initialize = function(_nodes, _random) {\n    nodes = _nodes;\n    random = _random;\n    initialize();\n  };\n\n  force.iterations = function(_) {\n    return arguments.length ? (iterations = +_, force) : iterations;\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = +_, force) : strength;\n  };\n\n  force.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n  };\n\n  return force;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n  return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n  var node = nodeById.get(nodeId);\n  if (!node) throw new Error(\"node not found: \" + nodeId);\n  return node;\n}\n\nexport default function(links) {\n  var id = index,\n      strength = defaultStrength,\n      strengths,\n      distance = constant(30),\n      distances,\n      nodes,\n      count,\n      bias,\n      random,\n      iterations = 1;\n\n  if (links == null) links = [];\n\n  function defaultStrength(link) {\n    return 1 / Math.min(count[link.source.index], count[link.target.index]);\n  }\n\n  function force(alpha) {\n    for (var k = 0, n = links.length; k < iterations; ++k) {\n      for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n        link = links[i], source = link.source, target = link.target;\n        x = target.x + target.vx - source.x - source.vx || jiggle(random);\n        y = target.y + target.vy - source.y - source.vy || jiggle(random);\n        l = Math.sqrt(x * x + y * y);\n        l = (l - distances[i]) / l * alpha * strengths[i];\n        x *= l, y *= l;\n        target.vx -= x * (b = bias[i]);\n        target.vy -= y * b;\n        source.vx += x * (b = 1 - b);\n        source.vy += y * b;\n      }\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n\n    var i,\n        n = nodes.length,\n        m = links.length,\n        nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n        link;\n\n    for (i = 0, count = new Array(n); i < m; ++i) {\n      link = links[i], link.index = i;\n      if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n      if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n      count[link.source.index] = (count[link.source.index] || 0) + 1;\n      count[link.target.index] = (count[link.target.index] || 0) + 1;\n    }\n\n    for (i = 0, bias = new Array(m); i < m; ++i) {\n      link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n    }\n\n    strengths = new Array(m), initializeStrength();\n    distances = new Array(m), initializeDistance();\n  }\n\n  function initializeStrength() {\n    if (!nodes) return;\n\n    for (var i = 0, n = links.length; i < n; ++i) {\n      strengths[i] = +strength(links[i], i, links);\n    }\n  }\n\n  function initializeDistance() {\n    if (!nodes) return;\n\n    for (var i = 0, n = links.length; i < n; ++i) {\n      distances[i] = +distance(links[i], i, links);\n    }\n  }\n\n  force.initialize = function(_nodes, _random) {\n    nodes = _nodes;\n    random = _random;\n    initialize();\n  };\n\n  force.links = function(_) {\n    return arguments.length ? (links = _, initialize(), force) : links;\n  };\n\n  force.id = function(_) {\n    return arguments.length ? (id = _, force) : id;\n  };\n\n  force.iterations = function(_) {\n    return arguments.length ? (iterations = +_, force) : iterations;\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n  };\n\n  force.distance = function(_) {\n    return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n  };\n\n  return force;\n}\n","export default function(x, y) {\n  if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n  var x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1;\n\n  // If the quadtree has no extent, initialize them.\n  // Integer extent are necessary so that if we later double the extent,\n  // the existing quadrant boundaries don’t change due to floating point error!\n  if (isNaN(x0)) {\n    x1 = (x0 = Math.floor(x)) + 1;\n    y1 = (y0 = Math.floor(y)) + 1;\n  }\n\n  // Otherwise, double repeatedly to cover.\n  else {\n    var z = x1 - x0 || 1,\n        node = this._root,\n        parent,\n        i;\n\n    while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n      i = (y < y0) << 1 | (x < x0);\n      parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n      switch (i) {\n        case 0: x1 = x0 + z, y1 = y0 + z; break;\n        case 1: x0 = x1 - z, y1 = y0 + z; break;\n        case 2: x1 = x0 + z, y0 = y1 - z; break;\n        case 3: x0 = x1 - z, y0 = y1 - z; break;\n      }\n    }\n\n    if (this._root && this._root.length) this._root = node;\n  }\n\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  return this;\n}\n","export default function() {\n  var data = [];\n  this.visit(function(node) {\n    if (!node.length) do data.push(node.data); while (node = node.next)\n  });\n  return data;\n}\n","export default function(_) {\n  return arguments.length\n      ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n      : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n  var data,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1,\n      y1,\n      x2,\n      y2,\n      x3 = this._x1,\n      y3 = this._y1,\n      quads = [],\n      node = this._root,\n      q,\n      i;\n\n  if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n  if (radius == null) radius = Infinity;\n  else {\n    x0 = x - radius, y0 = y - radius;\n    x3 = x + radius, y3 = y + radius;\n    radius *= radius;\n  }\n\n  while (q = quads.pop()) {\n\n    // Stop searching if this quadrant can’t contain a closer node.\n    if (!(node = q.node)\n        || (x1 = q.x0) > x3\n        || (y1 = q.y0) > y3\n        || (x2 = q.x1) < x0\n        || (y2 = q.y1) < y0) continue;\n\n    // Bisect the current quadrant.\n    if (node.length) {\n      var xm = (x1 + x2) / 2,\n          ym = (y1 + y2) / 2;\n\n      quads.push(\n        new Quad(node[3], xm, ym, x2, y2),\n        new Quad(node[2], x1, ym, xm, y2),\n        new Quad(node[1], xm, y1, x2, ym),\n        new Quad(node[0], x1, y1, xm, ym)\n      );\n\n      // Visit the closest quadrant first.\n      if (i = (y >= ym) << 1 | (x >= xm)) {\n        q = quads[quads.length - 1];\n        quads[quads.length - 1] = quads[quads.length - 1 - i];\n        quads[quads.length - 1 - i] = q;\n      }\n    }\n\n    // Visit this point. (Visiting coincident points isn’t necessary!)\n    else {\n      var dx = x - +this._x.call(null, node.data),\n          dy = y - +this._y.call(null, node.data),\n          d2 = dx * dx + dy * dy;\n      if (d2 < radius) {\n        var d = Math.sqrt(radius = d2);\n        x0 = x - d, y0 = y - d;\n        x3 = x + d, y3 = y + d;\n        data = node.data;\n      }\n    }\n  }\n\n  return data;\n}\n","export default function(d) {\n  if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n  var parent,\n      node = this._root,\n      retainer,\n      previous,\n      next,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1,\n      x,\n      y,\n      xm,\n      ym,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return this;\n\n  // Find the leaf node for the point.\n  // While descending, also retain the deepest parent with a non-removed sibling.\n  if (node.length) while (true) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n    if (!node.length) break;\n    if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n  }\n\n  // Find the point to remove.\n  while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n  if (next = node.next) delete node.next;\n\n  // If there are multiple coincident points, remove just the point.\n  if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n  // If this is the root point, remove it.\n  if (!parent) return this._root = next, this;\n\n  // Remove this leaf.\n  next ? parent[i] = next : delete parent[i];\n\n  // If the parent now contains exactly one leaf, collapse superfluous parents.\n  if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n      && node === (parent[3] || parent[2] || parent[1] || parent[0])\n      && !node.length) {\n    if (retainer) retainer[j] = node;\n    else this._root = node;\n  }\n\n  return this;\n}\n\nexport function removeAll(data) {\n  for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n  return this;\n}\n","export default function() {\n  return this._root;\n}\n","export default function() {\n  var size = 0;\n  this.visit(function(node) {\n    if (!node.length) do ++size; while (node = node.next)\n  });\n  return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n  var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n  if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n      var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n    }\n  }\n  return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n  var quads = [], next = [], q;\n  if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    var node = q.node;\n    if (node.length) {\n      var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n    }\n    next.push(q);\n  }\n  while (q = next.pop()) {\n    callback(q.node, q.x0, q.y0, q.x1, q.y1);\n  }\n  return this;\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n  let s = 1;\n  return () => (s = (a * s + c) % m) / m;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n  return d.x;\n}\n\nexport function y(d) {\n  return d.y;\n}\n\nvar initialRadius = 10,\n    initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n  var simulation,\n      alpha = 1,\n      alphaMin = 0.001,\n      alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n      alphaTarget = 0,\n      velocityDecay = 0.6,\n      forces = new Map(),\n      stepper = timer(step),\n      event = dispatch(\"tick\", \"end\"),\n      random = lcg();\n\n  if (nodes == null) nodes = [];\n\n  function step() {\n    tick();\n    event.call(\"tick\", simulation);\n    if (alpha < alphaMin) {\n      stepper.stop();\n      event.call(\"end\", simulation);\n    }\n  }\n\n  function tick(iterations) {\n    var i, n = nodes.length, node;\n\n    if (iterations === undefined) iterations = 1;\n\n    for (var k = 0; k < iterations; ++k) {\n      alpha += (alphaTarget - alpha) * alphaDecay;\n\n      forces.forEach(function(force) {\n        force(alpha);\n      });\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        if (node.fx == null) node.x += node.vx *= velocityDecay;\n        else node.x = node.fx, node.vx = 0;\n        if (node.fy == null) node.y += node.vy *= velocityDecay;\n        else node.y = node.fy, node.vy = 0;\n      }\n    }\n\n    return simulation;\n  }\n\n  function initializeNodes() {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.index = i;\n      if (node.fx != null) node.x = node.fx;\n      if (node.fy != null) node.y = node.fy;\n      if (isNaN(node.x) || isNaN(node.y)) {\n        var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n        node.x = radius * Math.cos(angle);\n        node.y = radius * Math.sin(angle);\n      }\n      if (isNaN(node.vx) || isNaN(node.vy)) {\n        node.vx = node.vy = 0;\n      }\n    }\n  }\n\n  function initializeForce(force) {\n    if (force.initialize) force.initialize(nodes, random);\n    return force;\n  }\n\n  initializeNodes();\n\n  return simulation = {\n    tick: tick,\n\n    restart: function() {\n      return stepper.restart(step), simulation;\n    },\n\n    stop: function() {\n      return stepper.stop(), simulation;\n    },\n\n    nodes: function(_) {\n      return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n    },\n\n    alpha: function(_) {\n      return arguments.length ? (alpha = +_, simulation) : alpha;\n    },\n\n    alphaMin: function(_) {\n      return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n    },\n\n    alphaDecay: function(_) {\n      return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n    },\n\n    alphaTarget: function(_) {\n      return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n    },\n\n    velocityDecay: function(_) {\n      return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n    },\n\n    randomSource: function(_) {\n      return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n    },\n\n    force: function(name, _) {\n      return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n    },\n\n    find: function(x, y, radius) {\n      var i = 0,\n          n = nodes.length,\n          dx,\n          dy,\n          d2,\n          node,\n          closest;\n\n      if (radius == null) radius = Infinity;\n      else radius *= radius;\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        dx = x - node.x;\n        dy = y - node.y;\n        d2 = dx * dx + dy * dy;\n        if (d2 < radius) closest = node, radius = d2;\n      }\n\n      return closest;\n    },\n\n    on: function(name, _) {\n      return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n    }\n  };\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y} from \"./simulation.js\";\n\nexport default function() {\n  var nodes,\n      node,\n      random,\n      alpha,\n      strength = constant(-30),\n      strengths,\n      distanceMin2 = 1,\n      distanceMax2 = Infinity,\n      theta2 = 0.81;\n\n  function force(_) {\n    var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n    for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length, node;\n    strengths = new Array(n);\n    for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n  }\n\n  function accumulate(quad) {\n    var strength = 0, q, c, weight = 0, x, y, i;\n\n    // For internal nodes, accumulate forces from child quadrants.\n    if (quad.length) {\n      for (x = y = i = 0; i < 4; ++i) {\n        if ((q = quad[i]) && (c = Math.abs(q.value))) {\n          strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n        }\n      }\n      quad.x = x / weight;\n      quad.y = y / weight;\n    }\n\n    // For leaf nodes, accumulate forces from coincident quadrants.\n    else {\n      q = quad;\n      q.x = q.data.x;\n      q.y = q.data.y;\n      do strength += strengths[q.data.index];\n      while (q = q.next);\n    }\n\n    quad.value = strength;\n  }\n\n  function apply(quad, x1, _, x2) {\n    if (!quad.value) return true;\n\n    var x = quad.x - node.x,\n        y = quad.y - node.y,\n        w = x2 - x1,\n        l = x * x + y * y;\n\n    // Apply the Barnes-Hut approximation if possible.\n    // Limit forces for very close nodes; randomize direction if coincident.\n    if (w * w / theta2 < l) {\n      if (l < distanceMax2) {\n        if (x === 0) x = jiggle(random), l += x * x;\n        if (y === 0) y = jiggle(random), l += y * y;\n        if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n        node.vx += x * quad.value * alpha / l;\n        node.vy += y * quad.value * alpha / l;\n      }\n      return true;\n    }\n\n    // Otherwise, process points directly.\n    else if (quad.length || l >= distanceMax2) return;\n\n    // Limit forces for very close nodes; randomize direction if coincident.\n    if (quad.data !== node || quad.next) {\n      if (x === 0) x = jiggle(random), l += x * x;\n      if (y === 0) y = jiggle(random), l += y * y;\n      if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n    }\n\n    do if (quad.data !== node) {\n      w = strengths[quad.data.index] * alpha / l;\n      node.vx += x * w;\n      node.vy += y * w;\n    } while (quad = quad.next);\n  }\n\n  force.initialize = function(_nodes, _random) {\n    nodes = _nodes;\n    random = _random;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n  };\n\n  force.distanceMin = function(_) {\n    return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n  };\n\n  force.distanceMax = function(_) {\n    return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n  };\n\n  force.theta = function(_) {\n    return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n  };\n\n  return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(radius, x, y) {\n  var nodes,\n      strength = constant(0.1),\n      strengths,\n      radiuses;\n\n  if (typeof radius !== \"function\") radius = constant(+radius);\n  if (x == null) x = 0;\n  if (y == null) y = 0;\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length; i < n; ++i) {\n      var node = nodes[i],\n          dx = node.x - x || 1e-6,\n          dy = node.y - y || 1e-6,\n          r = Math.sqrt(dx * dx + dy * dy),\n          k = (radiuses[i] - r) * strengths[i] * alpha / r;\n      node.vx += dx * k;\n      node.vy += dy * k;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    radiuses = new Array(n);\n    for (i = 0; i < n; ++i) {\n      radiuses[i] = +radius(nodes[i], i, nodes);\n      strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _, initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n  };\n\n  force.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n  };\n\n  force.x = function(_) {\n    return arguments.length ? (x = +_, force) : x;\n  };\n\n  force.y = function(_) {\n    return arguments.length ? (y = +_, force) : y;\n  };\n\n  return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(x) {\n  var strength = constant(0.1),\n      nodes,\n      strengths,\n      xz;\n\n  if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    xz = new Array(n);\n    for (i = 0; i < n; ++i) {\n      strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n  };\n\n  force.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n  };\n\n  return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(y) {\n  var strength = constant(0.1),\n      nodes,\n      strengths,\n      yz;\n\n  if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    yz = new Array(n);\n    for (i = 0; i < n; ++i) {\n      strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n  };\n\n  force.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n  };\n\n  return force;\n}\n","import creator from \"./creator.js\";\nimport select from \"./select.js\";\n\nexport default function(name) {\n  return select(creator(name).call(document.documentElement));\n}\n","var nextId = 0;\n\nexport default function local() {\n  return new Local;\n}\n\nfunction Local() {\n  this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n  constructor: Local,\n  get: function(node) {\n    var id = this._;\n    while (!(id in node)) if (!(node = node.parentNode)) return;\n    return node[id];\n  },\n  set: function(node, value) {\n    return node[this._] = value;\n  },\n  remove: function(node) {\n    return this._ in node && delete node[this._];\n  },\n  toString: function() {\n    return this._;\n  }\n};\n","import pointer from \"./pointer.js\";\nimport sourceEvent from \"./sourceEvent.js\";\n\nexport default function(events, node) {\n  if (events.target) { // i.e., instanceof Event, not TouchList or iterable\n    events = sourceEvent(events);\n    if (node === undefined) node = events.currentTarget;\n    events = events.touches || [events];\n  }\n  return Array.from(events, event => pointer(event, node));\n}\n","import array from \"./array.js\";\nimport {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n      : new Selection([array(selector)], root);\n}\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n  return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n  return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n  return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n  // p0 = [ux0, uy0, w0]\n  // p1 = [ux1, uy1, w1]\n  function zoom(p0, p1) {\n    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n        ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n        dx = ux1 - ux0,\n        dy = uy1 - uy0,\n        d2 = dx * dx + dy * dy,\n        i,\n        S;\n\n    // Special case for u0 ≅ u1.\n    if (d2 < epsilon2) {\n      S = Math.log(w1 / w0) / rho;\n      i = function(t) {\n        return [\n          ux0 + t * dx,\n          uy0 + t * dy,\n          w0 * Math.exp(rho * t * S)\n        ];\n      }\n    }\n\n    // General case.\n    else {\n      var d1 = Math.sqrt(d2),\n          b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n          b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n          r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n          r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n      S = (r1 - r0) / rho;\n      i = function(t) {\n        var s = t * S,\n            coshr0 = cosh(r0),\n            u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n        return [\n          ux0 + u * dx,\n          uy0 + u * dy,\n          w0 * coshr0 / cosh(rho * s + r0)\n        ];\n      }\n    }\n\n    i.duration = S * 1000 * rho / Math.SQRT2;\n\n    return i;\n  }\n\n  zoom.rho = function(_) {\n    var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n    return zoomRho(_1, _2, _4);\n  };\n\n  return zoom;\n})(Math.SQRT2, 2, 4);\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(elapsed => {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n  var schedules = node.__transition;\n  if (!schedules) node.__transition = {};\n  else if (id in schedules) return;\n  create(node, id, {\n    name: name,\n    index: index, // For context during callback.\n    group: group, // For context during callback.\n    on: emptyOn,\n    tween: emptyTween,\n    time: timing.time,\n    delay: timing.delay,\n    duration: timing.duration,\n    ease: timing.ease,\n    timer: null,\n    state: CREATED\n  });\n}\n\nexport function init(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n  return schedule;\n}\n\nexport function set(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n  return schedule;\n}\n\nexport function get(node, id) {\n  var schedule = node.__transition;\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n  return schedule;\n}\n\nfunction create(node, id, self) {\n  var schedules = node.__transition,\n      tween;\n\n  // Initialize the self timer when the transition is created.\n  // Note the actual delay is not known until the first callback!\n  schedules[id] = self;\n  self.timer = timer(schedule, 0, self.time);\n\n  function schedule(elapsed) {\n    self.state = SCHEDULED;\n    self.timer.restart(start, self.delay, self.time);\n\n    // If the elapsed delay is less than our first sleep, start immediately.\n    if (self.delay <= elapsed) start(elapsed - self.delay);\n  }\n\n  function start(elapsed) {\n    var i, j, n, o;\n\n    // If the state is not SCHEDULED, then we previously errored on start.\n    if (self.state !== SCHEDULED) return stop();\n\n    for (i in schedules) {\n      o = schedules[i];\n      if (o.name !== self.name) continue;\n\n      // While this element already has a starting transition during this frame,\n      // defer starting an interrupting transition until that transition has a\n      // chance to tick (and possibly end); see d3/d3-transition#54!\n      if (o.state === STARTED) return timeout(start);\n\n      // Interrupt the active transition, if any.\n      if (o.state === RUNNING) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n\n      // Cancel any pre-empted transitions.\n      else if (+i < id) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n    }\n\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\n    // Note the transition may be canceled after start and before the first tick!\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\n    // Assuming this is successful, subsequent callbacks go straight to tick.\n    timeout(function() {\n      if (self.state === STARTED) {\n        self.state = RUNNING;\n        self.timer.restart(tick, self.delay, self.time);\n        tick(elapsed);\n      }\n    });\n\n    // Dispatch the start event.\n    // Note this must be done before the tween are initialized.\n    self.state = STARTING;\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\n    if (self.state !== STARTING) return; // interrupted\n    self.state = STARTED;\n\n    // Initialize the tween, deleting null tween.\n    tween = new Array(n = self.tween.length);\n    for (i = 0, j = -1; i < n; ++i) {\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n        tween[++j] = o;\n      }\n    }\n    tween.length = j + 1;\n  }\n\n  function tick(elapsed) {\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n        i = -1,\n        n = tween.length;\n\n    while (++i < n) {\n      tween[i].call(node, t);\n    }\n\n    // Dispatch the end event.\n    if (self.state === ENDING) {\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\n      stop();\n    }\n  }\n\n  function stop() {\n    self.state = ENDED;\n    self.timer.stop();\n    delete schedules[id];\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\n    delete node.__transition;\n  }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      active,\n      empty = true,\n      i;\n\n  if (!schedules) return;\n\n  name = name == null ? null : name + \"\";\n\n  for (i in schedules) {\n    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n    active = schedule.state > STARTING && schedule.state < ENDING;\n    schedule.state = ENDED;\n    schedule.timer.stop();\n    schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n    delete schedules[i];\n  }\n\n  if (empty) delete node.__transition;\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n  const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n  var tween0, tween1;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = tween0 = tween;\n      for (var i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1 = tween1.slice();\n          tween1.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nfunction tweenFunction(id, name, value) {\n  var tween0, tween1;\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = (tween0 = tween).slice();\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1[i] = t;\n          break;\n        }\n      }\n      if (i === n) tween1.push(t);\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nexport default function(name, value) {\n  var id = this._id;\n\n  name += \"\";\n\n  if (arguments.length < 2) {\n    var tween = get(this.node(), id).tween;\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\n      if ((t = tween[i]).name === name) {\n        return t.value;\n      }\n    }\n    return null;\n  }\n\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n  var id = transition._id;\n\n  transition.each(function() {\n    var schedule = set(this, id);\n    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n  });\n\n  return function(node) {\n    return get(node, id).value[name];\n  };\n}\n","export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n    reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n    reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n    reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n    reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n    reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHex8: color_formatHex8,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n  return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb() {\n    return this;\n  },\n  clamp() {\n    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n  },\n  displayable() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatHex8: rgb_formatHex8,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n  const a = clampa(this.opacity);\n  return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n  return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n  value = clampi(value);\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  clamp() {\n    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n  },\n  displayable() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl() {\n    const a = clampa(this.opacity);\n    return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n  }\n}));\n\nfunction clamph(value) {\n  value = (value || 0) % 360;\n  return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n  return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n  var c;\n  return (typeof b === \"number\" ? interpolateNumber\n      : b instanceof color ? interpolateRgb\n      : (c = color(b)) ? (b = c, interpolateRgb)\n      : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttribute(name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttribute(name);\n    string0 = this.getAttribute(name);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n  return this.attrTween(name, typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n      : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n      : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i.call(this, t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n  };\n}\n\nfunction attrTweenNS(fullname, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction attrTween(name, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value) {\n  var key = \"attr.\" + name;\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  var fullname = namespace(name);\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n  return function() {\n    init(this, id).delay = +value.apply(this, arguments);\n  };\n}\n\nfunction delayConstant(id, value) {\n  return value = +value, function() {\n    init(this, id).delay = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? delayFunction\n          : delayConstant)(id, value))\n      : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n  return function() {\n    set(this, id).duration = +value.apply(this, arguments);\n  };\n}\n\nfunction durationConstant(id, value) {\n  return value = +value, function() {\n    set(this, id).duration = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? durationFunction\n          : durationConstant)(id, value))\n      : get(this.node(), id).duration;\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n  return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        string1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, string10 = string1);\n  };\n}\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = style(this, name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction styleFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        value1 = value(this),\n        string1 = value1 + \"\";\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction styleMaybeRemove(id, name) {\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n  return function() {\n    var schedule = set(this, id),\n        on = schedule.on,\n        listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, value, priority) {\n  var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n  return value == null ? this\n      .styleTween(name, styleNull(name, i))\n      .on(\"end.style.\" + name, styleRemove(name))\n    : typeof value === \"function\" ? this\n      .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n      .each(styleMaybeRemove(this._id, name))\n    : this\n      .styleTween(name, styleConstant(name, i, value), priority)\n      .on(\"end.style.\" + name, null);\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n  this._groups = groups;\n  this._parents = parents;\n  this._name = name;\n  this._id = id;\n}\n\nexport default function transition(name) {\n  return selection().transition(name);\n}\n\nexport function newId() {\n  return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n  constructor: Transition,\n  select: transition_select,\n  selectAll: transition_selectAll,\n  selectChild: selection_prototype.selectChild,\n  selectChildren: selection_prototype.selectChildren,\n  filter: transition_filter,\n  merge: transition_merge,\n  selection: transition_selection,\n  transition: transition_transition,\n  call: selection_prototype.call,\n  nodes: selection_prototype.nodes,\n  node: selection_prototype.node,\n  size: selection_prototype.size,\n  empty: selection_prototype.empty,\n  each: selection_prototype.each,\n  on: transition_on,\n  attr: transition_attr,\n  attrTween: transition_attrTween,\n  style: transition_style,\n  styleTween: transition_styleTween,\n  text: transition_text,\n  textTween: transition_textTween,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  easeVarying: transition_easeVarying,\n  end: transition_end,\n  [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n        schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n          if (child = children[k]) {\n            schedule(child, name, id, k, children, inherit);\n          }\n        }\n        subgroups.push(children);\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n  if (transition._id !== this._id) throw new Error;\n\n  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n  var name = this._name,\n      id0 = this._id,\n      id1 = newId();\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        var inherit = get(node, id0);\n        schedule(node, name, id1, i, group, {\n          time: inherit.time + inherit.delay + inherit.duration,\n          delay: 0,\n          duration: inherit.duration,\n          ease: inherit.ease\n        });\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id1);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n    var i = t.indexOf(\".\");\n    if (i >= 0) t = t.slice(0, i);\n    return !t || t === \"start\";\n  });\n}\n\nfunction onFunction(id, name, listener) {\n  var on0, on1, sit = start(name) ? init : set;\n  return function() {\n    var schedule = sit(this, id),\n        on = schedule.on;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, listener) {\n  var id = this._id;\n\n  return arguments.length < 2\n      ? get(this.node(), id).on.on(name)\n      : this.each(onFunction(id, name, listener));\n}\n","function styleInterpolate(name, i, priority) {\n  return function(t) {\n    this.style.setProperty(name, i.call(this, t), priority);\n  };\n}\n\nfunction styleTween(name, value, priority) {\n  var t, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n    return t;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value, priority) {\n  var key = \"style.\" + (name += \"\");\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var value1 = value(this);\n    this.textContent = value1 == null ? \"\" : value1;\n  };\n}\n\nexport default function(value) {\n  return this.tween(\"text\", typeof value === \"function\"\n      ? textFunction(tweenValue(this, \"text\", value))\n      : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n  return function(t) {\n    this.textContent = i.call(this, t);\n  };\n}\n\nfunction textTween(value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(value) {\n  var key = \"text\";\n  if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, textTween(value));\n}\n","function removeFunction(id) {\n  return function() {\n    var parent = this.parentNode;\n    for (var i in this.__transition) if (+i !== id) return;\n    if (parent) parent.removeChild(this);\n  };\n}\n\nexport default function() {\n  return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    set(this, id).ease = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each(easeConstant(id, value))\n      : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (typeof v !== \"function\") throw new Error;\n    set(this, id).ease = v;\n  };\n}\n\nexport default function(value) {\n  if (typeof value !== \"function\") throw new Error;\n  return this.each(easeVarying(this._id, value));\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n  var on0, on1, that = this, id = that._id, size = that.size();\n  return new Promise(function(resolve, reject) {\n    var cancel = {value: reject},\n        end = {value: function() { if (--size === 0) resolve(); }};\n\n    that.each(function() {\n      var schedule = set(this, id),\n          on = schedule.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we’re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) {\n        on1 = (on0 = on).copy();\n        on1._.cancel.push(cancel);\n        on1._.interrupt.push(cancel);\n        on1._.end.push(end);\n      }\n\n      schedule.on = on1;\n    });\n\n    // The selection was empty, resolve end immediately\n    if (size === 0) resolve();\n  });\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n  time: null, // Set on use.\n  delay: 0,\n  duration: 250,\n  ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n  var timing;\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\n    if (!(node = node.parentNode)) {\n      throw new Error(`transition ${id} not found`);\n    }\n  }\n  return timing;\n}\n\nexport default function(name) {\n  var id,\n      timing;\n\n  if (name instanceof Transition) {\n    id = name._id, name = name._name;\n  } else {\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n  }\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        schedule(node, name, id, i, group, timing || inherit(node, id));\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id);\n}\n","export function cubicIn(t) {\n  return t * t * t;\n}\n\nexport function cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\n","export default x => () => x;\n","export default function ZoomEvent(type, {\n  sourceEvent,\n  target,\n  transform,\n  dispatch\n}) {\n  Object.defineProperties(this, {\n    type: {value: type, enumerable: true, configurable: true},\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n    target: {value: target, enumerable: true, configurable: true},\n    transform: {value: transform, enumerable: true, configurable: true},\n    _: {value: dispatch}\n  });\n}\n","export function Transform(k, x, y) {\n  this.k = k;\n  this.x = x;\n  this.y = y;\n}\n\nTransform.prototype = {\n  constructor: Transform,\n  scale: function(k) {\n    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n  },\n  translate: function(x, y) {\n    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n  },\n  apply: function(point) {\n    return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n  },\n  applyX: function(x) {\n    return x * this.k + this.x;\n  },\n  applyY: function(y) {\n    return y * this.k + this.y;\n  },\n  invert: function(location) {\n    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n  },\n  invertX: function(x) {\n    return (x - this.x) / this.k;\n  },\n  invertY: function(y) {\n    return (y - this.y) / this.k;\n  },\n  rescaleX: function(x) {\n    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n  },\n  rescaleY: function(y) {\n    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n  },\n  toString: function() {\n    return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n  }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n  while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n  return node.__zoom;\n}\n","export function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n  return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n  var e = this;\n  if (e instanceof SVGElement) {\n    e = e.ownerSVGElement || e;\n    if (e.hasAttribute(\"viewBox\")) {\n      e = e.viewBox.baseVal;\n      return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n    }\n    return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n  }\n  return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n  return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n  return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n  var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n      dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n      dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n      dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n  return transform.translate(\n    dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n    dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n  );\n}\n\nexport default function() {\n  var filter = defaultFilter,\n      extent = defaultExtent,\n      constrain = defaultConstrain,\n      wheelDelta = defaultWheelDelta,\n      touchable = defaultTouchable,\n      scaleExtent = [0, Infinity],\n      translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n      duration = 250,\n      interpolate = interpolateZoom,\n      listeners = dispatch(\"start\", \"zoom\", \"end\"),\n      touchstarting,\n      touchfirst,\n      touchending,\n      touchDelay = 500,\n      wheelDelay = 150,\n      clickDistance2 = 0,\n      tapDistance = 10;\n\n  function zoom(selection) {\n    selection\n        .property(\"__zoom\", defaultTransform)\n        .on(\"wheel.zoom\", wheeled, {passive: false})\n        .on(\"mousedown.zoom\", mousedowned)\n        .on(\"dblclick.zoom\", dblclicked)\n      .filter(touchable)\n        .on(\"touchstart.zoom\", touchstarted)\n        .on(\"touchmove.zoom\", touchmoved)\n        .on(\"touchend.zoom touchcancel.zoom\", touchended)\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  zoom.transform = function(collection, transform, point, event) {\n    var selection = collection.selection ? collection.selection() : collection;\n    selection.property(\"__zoom\", defaultTransform);\n    if (collection !== selection) {\n      schedule(collection, transform, point, event);\n    } else {\n      selection.interrupt().each(function() {\n        gesture(this, arguments)\n          .event(event)\n          .start()\n          .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n          .end();\n      });\n    }\n  };\n\n  zoom.scaleBy = function(selection, k, p, event) {\n    zoom.scaleTo(selection, function() {\n      var k0 = this.__zoom.k,\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return k0 * k1;\n    }, p, event);\n  };\n\n  zoom.scaleTo = function(selection, k, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t0 = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n          p1 = t0.invert(p0),\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n    }, p, event);\n  };\n\n  zoom.translateBy = function(selection, x, y, event) {\n    zoom.transform(selection, function() {\n      return constrain(this.__zoom.translate(\n        typeof x === \"function\" ? x.apply(this, arguments) : x,\n        typeof y === \"function\" ? y.apply(this, arguments) : y\n      ), extent.apply(this, arguments), translateExtent);\n    }, null, event);\n  };\n\n  zoom.translateTo = function(selection, x, y, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n      return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n        typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n        typeof y === \"function\" ? -y.apply(this, arguments) : -y\n      ), e, translateExtent);\n    }, p, event);\n  };\n\n  function scale(transform, k) {\n    k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n    return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n  }\n\n  function translate(transform, p0, p1) {\n    var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n    return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n  }\n\n  function centroid(extent) {\n    return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n  }\n\n  function schedule(transition, transform, point, event) {\n    transition\n        .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n        .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n        .tween(\"zoom\", function() {\n          var that = this,\n              args = arguments,\n              g = gesture(that, args).event(event),\n              e = extent.apply(that, args),\n              p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n              w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n              a = that.__zoom,\n              b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n              i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n          return function(t) {\n            if (t === 1) t = b; // Avoid rounding error on end.\n            else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n            g.zoom(null, t);\n          };\n        });\n  }\n\n  function gesture(that, args, clean) {\n    return (!clean && that.__zooming) || new Gesture(that, args);\n  }\n\n  function Gesture(that, args) {\n    this.that = that;\n    this.args = args;\n    this.active = 0;\n    this.sourceEvent = null;\n    this.extent = extent.apply(that, args);\n    this.taps = 0;\n  }\n\n  Gesture.prototype = {\n    event: function(event) {\n      if (event) this.sourceEvent = event;\n      return this;\n    },\n    start: function() {\n      if (++this.active === 1) {\n        this.that.__zooming = this;\n        this.emit(\"start\");\n      }\n      return this;\n    },\n    zoom: function(key, transform) {\n      if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n      if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n      if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n      this.that.__zoom = transform;\n      this.emit(\"zoom\");\n      return this;\n    },\n    end: function() {\n      if (--this.active === 0) {\n        delete this.that.__zooming;\n        this.emit(\"end\");\n      }\n      return this;\n    },\n    emit: function(type) {\n      var d = select(this.that).datum();\n      listeners.call(\n        type,\n        this.that,\n        new ZoomEvent(type, {\n          sourceEvent: this.sourceEvent,\n          target: zoom,\n          type,\n          transform: this.that.__zoom,\n          dispatch: listeners\n        }),\n        d\n      );\n    }\n  };\n\n  function wheeled(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var g = gesture(this, args).event(event),\n        t = this.__zoom,\n        k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n        p = pointer(event);\n\n    // If the mouse is in the same location as before, reuse it.\n    // If there were recent wheel events, reset the wheel idle timeout.\n    if (g.wheel) {\n      if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n        g.mouse[1] = t.invert(g.mouse[0] = p);\n      }\n      clearTimeout(g.wheel);\n    }\n\n    // If this wheel event won’t trigger a transform change, ignore it.\n    else if (t.k === k) return;\n\n    // Otherwise, capture the mouse point and location at the start.\n    else {\n      g.mouse = [p, t.invert(p)];\n      interrupt(this);\n      g.start();\n    }\n\n    noevent(event);\n    g.wheel = setTimeout(wheelidled, wheelDelay);\n    g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n    function wheelidled() {\n      g.wheel = null;\n      g.end();\n    }\n  }\n\n  function mousedowned(event, ...args) {\n    if (touchending || !filter.apply(this, arguments)) return;\n    var currentTarget = event.currentTarget,\n        g = gesture(this, args, true).event(event),\n        v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n        p = pointer(event, currentTarget),\n        x0 = event.clientX,\n        y0 = event.clientY;\n\n    dragDisable(event.view);\n    nopropagation(event);\n    g.mouse = [p, this.__zoom.invert(p)];\n    interrupt(this);\n    g.start();\n\n    function mousemoved(event) {\n      noevent(event);\n      if (!g.moved) {\n        var dx = event.clientX - x0, dy = event.clientY - y0;\n        g.moved = dx * dx + dy * dy > clickDistance2;\n      }\n      g.event(event)\n       .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n    }\n\n    function mouseupped(event) {\n      v.on(\"mousemove.zoom mouseup.zoom\", null);\n      dragEnable(event.view, g.moved);\n      noevent(event);\n      g.event(event).end();\n    }\n  }\n\n  function dblclicked(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var t0 = this.__zoom,\n        p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n        p1 = t0.invert(p0),\n        k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n        t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n    noevent(event);\n    if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n    else select(this).call(zoom.transform, t1, p0, event);\n  }\n\n  function touchstarted(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var touches = event.touches,\n        n = touches.length,\n        g = gesture(this, args, event.changedTouches.length === n).event(event),\n        started, i, t, p;\n\n    nopropagation(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\n      p = [p, this.__zoom.invert(p), t.identifier];\n      if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n      else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n    }\n\n    if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n    if (started) {\n      if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n      interrupt(this);\n      g.start();\n    }\n  }\n\n  function touchmoved(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t, p, l;\n\n    noevent(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\n      if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n      else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n    }\n    t = g.that.__zoom;\n    if (g.touch1) {\n      var p0 = g.touch0[0], l0 = g.touch0[1],\n          p1 = g.touch1[0], l1 = g.touch1[1],\n          dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n          dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n      t = scale(t, Math.sqrt(dp / dl));\n      p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n      l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n    }\n    else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n    else return;\n\n    g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n  }\n\n  function touchended(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t;\n\n    nopropagation(event);\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, touchDelay);\n    for (i = 0; i < n; ++i) {\n      t = touches[i];\n      if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n      else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n    }\n    if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n    if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n    else {\n      g.end();\n      // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n      if (g.taps === 2) {\n        t = pointer(t, this);\n        if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n          var p = select(this).on(\"dblclick.zoom\");\n          if (p) p.apply(this, arguments);\n        }\n      }\n    }\n  }\n\n  zoom.wheelDelta = function(_) {\n    return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n  };\n\n  zoom.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n  };\n\n  zoom.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n  };\n\n  zoom.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n  };\n\n  zoom.scaleExtent = function(_) {\n    return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n  };\n\n  zoom.translateExtent = function(_) {\n    return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n  };\n\n  zoom.constrain = function(_) {\n    return arguments.length ? (constrain = _, zoom) : constrain;\n  };\n\n  zoom.duration = function(_) {\n    return arguments.length ? (duration = +_, zoom) : duration;\n  };\n\n  zoom.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, zoom) : interpolate;\n  };\n\n  zoom.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? zoom : value;\n  };\n\n  zoom.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n  };\n\n  zoom.tapDistance = function(_) {\n    return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n  };\n\n  return zoom;\n}\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n  } else {\n    root.__noselect = root.style.MozUserSelect;\n    root.style.MozUserSelect = \"none\";\n  }\n}\n\nexport function yesdrag(view, noclick) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", null);\n  if (noclick) {\n    selection.on(\"click.drag\", noevent, nonpassivecapture);\n    setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n  }\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", null);\n  } else {\n    root.style.MozUserSelect = root.__noselect;\n    delete root.__noselect;\n  }\n}\n","import { helper as buildHelper } from '@ember/component/helper';\n\nexport function assign(params) {\n  return Object.assign({}, ...params);\n}\n\nexport default buildHelper(assign);\n","import { cancel } from '@ember/runloop';\nimport { registerDestructor } from '@ember/destroyable';\n\nconst NULL_TIMER_ID = -1;\n/**\n * A map of instances/timers that allows us to\n * store cancelIds for scheduled timers per instance.\n *\n * @private\n */\nlet registeredTimers = new WeakMap();\n/**\n * Test use only. Allows for swapping out the WeakMap to a Map, giving\n * us the ability to detect whether the timers set is empty.\n *\n * @private\n * @param {*} mapForTesting A map used to ensure correctness when testing.\n */\nfunction _setRegisteredTimers(mapForTesting) {\n  registeredTimers = mapForTesting;\n}\nfunction getTimersDisposable(destroyable, timers) {\n  return function () {\n    timers.forEach(cancelId => {\n      cancelTask(destroyable, cancelId);\n    });\n    timers.clear();\n  };\n}\nfunction getTimers(destroyable) {\n  let timers = registeredTimers.get(destroyable);\n  if (!timers) {\n    timers = new Set();\n    registeredTimers.set(destroyable, timers);\n    registerDestructor(destroyable, getTimersDisposable(destroyable, timers));\n  }\n  return timers;\n}\n/**\n * Cancel a previously scheduled task.\n *\n * Example:\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { runTask, cancelTask } from 'ember-lifeline';\n *\n * export default CancelableComponent extends Component {\n *   start() {\n *     this._cancelId = runTask(this, () => {\n *       console.log('This runs after 5 seconds if this component is still displayed');\n *     }, 5000)\n *   },\n *\n *   disable() {\n *     cancelTask(this, this._cancelId);\n *   },\n * }\n * ```\n *\n * @function cancelTask\n * @param { Destroyable } destroyable the entangled object that was provided with the original *Task call\n * @param { Number } cancelId the id returned from the *Task call\n * @public\n */\nfunction cancelTask(destroyable, cancelId) {\n  let timers = getTimers(destroyable);\n  timers.delete(cancelId);\n  cancel(cancelId);\n}\n\nexport { NULL_TIMER_ID, _setRegisteredTimers, cancelTask, getTimers, getTimersDisposable };\n","import getTask from './utils/get-task.js';\nimport { registerDestructor } from '@ember/destroyable';\nimport { macroCondition, isTesting } from '@embroider/macros';\n\nfunction indexable(input) {\n  return input;\n}\n/**\n * A map of instances/poller functions that allows us to\n * store poller tokens per instance.\n *\n * @private\n *\n */\nlet registeredPollers = new WeakMap();\n/**\n * Test use only. Allows for swapping out the WeakMap to a Map, giving\n * us the ability to detect whether the pollers set is empty.\n *\n * @private\n * @param {*} mapForTesting A map used to ensure correctness when testing.\n */\nfunction _setRegisteredPollers(mapForTesting) {\n  registeredPollers = mapForTesting;\n}\nlet token = 0;\nlet _shouldPollOverride;\nfunction shouldPoll() {\n  if (_shouldPollOverride) {\n    return _shouldPollOverride();\n  }\n  return macroCondition(isTesting()) ? false : true;\n}\n/**\n * Allows for overriding of the polling behavior to explicitly control\n * whether polling should occur or not.\n *\n * @param { Function } callback\n * @public\n */\nfunction setShouldPoll(callback) {\n  _shouldPollOverride = callback;\n}\nfunction getQueuedPollTasks() {\n  let symbol = Symbol.for('LIFELINE_QUEUED_POLL_TASKS');\n  let globalObj = getGlobal();\n  let queuedPollTasks = globalObj[symbol];\n  if (!queuedPollTasks) {\n    queuedPollTasks = globalObj[symbol] = new Map();\n  }\n  return queuedPollTasks;\n}\n/**\n * Sets up a function that can perform polling logic in a testing safe way.\n * The task is invoked synchronously with an argument (generally called `next`).\n * In normal development/production when `next` is invoked, it will trigger the\n * task again (recursively). However, when in test mode the recursive polling\n * functionality is disabled, and usage of the `pollTaskFor` helper is required.\n *\n * Example:\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { pollTask, runTask } from 'ember-lifeline';\n *\n * export default PollingComponent extends Component {\n *   api: injectService(),\n *\n *   init() {\n *     this._super(...arguments);\n *\n *     let token = pollTask(this, (next) => {\n *       this.get('api').request('get', 'some/path')\n *         .then(() => {\n *           runTask(this, next, 1800);\n *         })\n *     });\n *\n *     this._pollToken = token;\n *   },\n * });\n * ```\n *\n * Test Example:\n *\n * ```js\n * import { settled } from '@ember/test-helpers';\n * import { pollTaskFor } from 'ember-lifeline';\n *\n *\n * test('foo-bar watches things', async function(assert) {\n *   await render(hbs`{{foo-bar}}`);\n *\n *   assert.strictEqual(serverRequests, 1, 'called initially');\n *\n *   pollTaskFor(this._pollToken);\n *\n *   await settled();\n *\n *   assert.strictEqual(serverRequests, 2, 'called again');\n *\n *   await settled();\n * });\n * ```\n *\n * @method pollTask\n * @param { Destroyable } destroyable the entangled object that was provided with the original *Task call\n * @param { TaskOrName } taskOrName a function representing the task, or string\n *                                  specifying a property representing the task,\n *                                  which is run at the provided time specified\n *                                  by timeout\n * @param { Token } token the Token for the pollTask, either a string or number\n * @public\n */\nfunction pollTask(destroyable, taskOrName, token = getNextToken()) {\n  let next;\n  let task = getTask(destroyable, taskOrName, 'pollTask');\n  let tick = () => task.call(destroyable, next);\n  let pollers = registeredPollers.get(destroyable);\n  if (!pollers) {\n    pollers = new Set();\n    registeredPollers.set(destroyable, pollers);\n    registerDestructor(destroyable, getPollersDisposable(destroyable, pollers));\n  }\n  pollers.add(token);\n  if (shouldPoll()) {\n    next = tick;\n  } else {\n    next = () => {\n      getQueuedPollTasks().set(token, tick);\n    };\n  }\n  task.call(destroyable, next);\n  return token;\n}\n/**\n * Clears a previously setup polling task.\n *\n * NOTE: This does not cancel any nested `runTask` calls. You're required to cancel any\n * cancelable behaviors, including any calls to `runTask` using `cancelTask`.\n *\n * Example:\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { inject as service } from '@ember/service';\n * import { pollTask, runTask } from 'ember-lifeline';\n *\n * export default AutoRefreshComponent extends Component {\n *   @service api;\n *\n *   enableAutoRefresh() {\n *     this._pollToken = pollTask(this, (next) => {\n *       this.get('api').request('get', 'some/path')\n *         .then(() => {\n *           runTask(this, next, 1800);\n *         })\n *     });\n *   },\n *\n *   disableAutoRefresh() {\n *     cancelPoll(this, this._pollToken);\n *   },\n * }\n * ```\n *\n * @method cancelPoll\n * @param { Destroyable } destroyable the entangled object that was provided with the original *Task call\n * @param { Token } token the Token for the pollTask to be cleared, either a string or number\n * @public\n */\nfunction cancelPoll(destroyable, token) {\n  let pollToken;\n  let pollers = registeredPollers.get(destroyable);\n  pollToken = token;\n  if (pollers !== undefined) {\n    pollers.delete(pollToken);\n  }\n  getQueuedPollTasks().delete(pollToken);\n}\nfunction getGlobal() {\n  // eslint-disable-next-line n/no-unsupported-features/es-builtins\n  if (typeof globalThis !== 'undefined') return indexable(globalThis);\n  if (typeof self !== 'undefined') return indexable(self);\n  if (typeof window !== 'undefined') return indexable(window);\n  if (typeof global !== 'undefined') return indexable(global);\n  throw new Error('unable to locate global object');\n}\nfunction getPollersDisposable(destroyable, pollers) {\n  return function () {\n    pollers.forEach(token => {\n      cancelPoll(destroyable, token);\n    });\n  };\n}\nfunction getNextToken() {\n  return token++;\n}\n\nexport { _setRegisteredPollers, cancelPoll, getQueuedPollTasks, pollTask, setShouldPoll };\n","import { assert } from '@ember/debug';\nimport { debounce, cancel } from '@ember/runloop';\nimport { registerDestructor } from '@ember/destroyable';\n\n/**\n * A map of instances/debounce functions that allows us to\n * store pending debounces per instance.\n *\n * @private\n */\nconst registeredDebounces = new WeakMap();\n/**\n * Runs the function with the provided name after the timeout has expired on the last\n * invocation. The timer is properly canceled if the object is destroyed before it is\n * invoked.\n *\n * Example:\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { debounceTask } from 'ember-lifeline';\n *\n * export default LoggerComponent extends Component {\n *   logMe() {\n *     console.log('This will only run once every 300ms.');\n *   },\n *\n *   click() {\n *     debounceTask(this, 'logMe', 300);\n *   },\n * }\n * ```\n *\n * @function debounceTask\n * @param { Destroyable } destroyable the instance to register the task for\n * @param { String } name the name of the task to debounce\n * @param { ...* } debounceArgs arguments to pass to the debounced method\n * @param { Number } spacing the amount of time to wait before calling the method (in milliseconds)\n * @param { Boolean } [immediate] Trigger the function on the leading instead of the trailing edge of the wait interval. Defaults to false.\n * @public\n */\nfunction debounceTask(destroyable, name, ...debounceArgs) {\n  assert(`Called \\`debounceTask\\` without a string as the first argument on ${destroyable}.`, typeof name === 'string');\n  assert(`Called \\`destroyable.debounceTask('${name}', ...)\\` where 'destroyable.${name}' is not a function.`, typeof destroyable[name] === 'function');\n  if (destroyable.isDestroying) {\n    return;\n  }\n  const lastArgument = debounceArgs[debounceArgs.length - 1];\n  const spacing = typeof lastArgument === 'boolean' ? debounceArgs[debounceArgs.length - 2] : lastArgument;\n  assert(`Called \\`debounceTask\\` with incorrect \\`spacing\\` argument. Expected Number and received \\`${spacing}\\``, typeof spacing === 'number');\n  let pendingDebounces = registeredDebounces.get(destroyable);\n  if (!pendingDebounces) {\n    pendingDebounces = new Map();\n    registeredDebounces.set(destroyable, pendingDebounces);\n    registerDestructor(destroyable, getDebouncesDisposable(pendingDebounces));\n  }\n  let debouncedTask;\n  if (!pendingDebounces.has(name)) {\n    debouncedTask = (...args) => {\n      pendingDebounces.delete(name);\n      destroyable[name](...args);\n    };\n  } else {\n    debouncedTask = pendingDebounces.get(name).debouncedTask;\n  }\n  // cancelId is new, even if the debounced function was already present\n  let cancelId = debounce(destroyable, debouncedTask, ...debounceArgs);\n  pendingDebounces.set(name, {\n    debouncedTask,\n    cancelId\n  });\n}\n/**\n * Cancel a previously debounced task.\n *\n * Example:\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { debounceTask, cancelDebounce } from 'ember-lifeline';\n *\n * export default LoggerComponent extends Component {\n *   logMe() {\n *     console.log('This will only run once every 300ms.');\n *   },\n *\n *   click() {\n *     debounceTask(this, 'logMe', 300);\n *   },\n *\n *   disable() {\n *      cancelDebounce(this, 'logMe');\n *   },\n * }\n * ```\n *\n * @function cancelDebounce\n * @param { Destroyable } destroyable the instance to register the task for\n * @param { String } methodName the name of the debounced method to cancel\n * @public\n */\nfunction cancelDebounce(destroyable, methodName) {\n  if (!registeredDebounces.has(destroyable)) {\n    return;\n  }\n  const pendingDebounces = registeredDebounces.get(destroyable);\n  if (!pendingDebounces.has(methodName)) {\n    return;\n  }\n  const {\n    cancelId\n  } = pendingDebounces.get(methodName);\n  pendingDebounces.delete(methodName);\n  cancel(cancelId);\n}\nfunction getDebouncesDisposable(debounces) {\n  return function () {\n    if (debounces.size === 0) {\n      return;\n    }\n    debounces.forEach(p => cancel(p.cancelId));\n  };\n}\n\nexport { cancelDebounce, debounceTask };\n","import { modifier } from \"ember-modifier\";\nimport { runTask } from \"ember-lifeline\";\n\nconst focusableElements = [\n  \"BUTTON\",\n  \"SUMMARY\",\n  \"IFRAME\",\n  \"INPUT\",\n  \"SELECT\",\n  \"TEXTAREA\",\n] as const;\n\nconst DEFAULT_SELECTOR =\n  \"input:not([disabled]):not([readonly]),textarea:not([disabled]):not([readonly])\";\n\ninterface ModifierArgs {\n  Element: HTMLElement;\n  Args: {\n    Positional: [string?]; // Optional selector\n    Named: {\n      disabled?: boolean; // Optional 'disabled' parameter\n    };\n  };\n}\n\nconst autofocus = modifier<ModifierArgs>(function autofocus(\n  element: HTMLElement,\n  [selector] = [DEFAULT_SELECTOR],\n  { disabled } = { disabled: false },\n) {\n  if (disabled) {\n    return;\n  }\n\n  const targetElement: HTMLElement =\n    element.querySelector(selector ?? DEFAULT_SELECTOR) || element;\n  const isChildElement = targetElement !== element;\n\n  /**\n   * Only applies to the element that {{autofocus}} is applied to.\n   * opts-out if we're selecting a child element.\n   */\n  const shouldMoveFocus =\n    !isChildElement &&\n    !focusableElements.some(\n      (item) =>\n        element.tagName === item ||\n        element.isContentEditable ||\n        element.hasAttribute(\"aria-disabled\") ||\n        element.hasAttribute(\"href\") ||\n        element.hasAttribute(\"tabindex\"),\n    );\n\n  /**\n   * if {{autofocus}} is applied to a non-focusable element,\n   * For A11y purposes, this is used to move focus to the non-focusable element.\n   * This is helpful when new elements are inserted on to the screen (yet not focus-trapped),\n   * and we want the tab-behavior to move \"near\" the inserted content.\n   *\n   * This still prevents the non-focusable element from being tabbed to, as non-focusable\n   * elements are still not focusable.\n   *\n   * But this is a behavior we can use to help out screen readers and keyboard users alike to\n   * more smoothly interact with newly-inserted content (without needing to focus an interactive-specifically\n   * maybe the inserted contents are just buttons, for example).\n   */\n  if (shouldMoveFocus) {\n    element.setAttribute(\"tabindex\", \"-1\");\n  }\n\n  runTask(element, function () {\n    targetElement.focus();\n  });\n\n  return (): void => {\n    if (shouldMoveFocus) {\n      element.removeAttribute(\"tabindex\");\n    }\n  };\n});\n\nexport { autofocus as default, DEFAULT_SELECTOR as defaultSelector };\n","import { later } from '@ember/runloop';\nimport { isDestroying } from '@ember/destroyable';\nimport getTask from './utils/get-task.js';\nimport { NULL_TIMER_ID, getTimers } from './cancel-task.js';\n\n/**\n * Registers and runs the provided task function for the provided object at the specified\n * timeout (defaulting to 0). The timer is properly canceled if the object is destroyed\n * before it is invoked.\n *\n * Example:\n *\n * ```js\n * import Component from '@glimmer/component';\n * import { runTask } from 'ember-lifeline';\n *\n * export default RunComponent extends Component {\n *   start() {\n *     runTask(this, () => {\n *       console.log('This runs after 5 seconds if this component is still displayed');\n *     }, 5000)\n *   },\n * });\n * ```\n *\n * @function runTask\n * @param { Destroyable } destroyable the instance to register the task for\n * @param { Function | String } taskOrName a function representing the task, or string\n *                                         specifying a property representing the task,\n *                                         which is run at the provided time specified\n *                                         by timeout\n * @param { Number } [timeout=0] the time in the future to run the task\n * @public\n */\nfunction runTask(destroyable, taskOrName, timeout = 0) {\n  if (isDestroying(destroyable)) {\n    return NULL_TIMER_ID;\n  }\n  let task = getTask(destroyable, taskOrName, 'runTask');\n  let timers = getTimers(destroyable);\n  let cancelId = later(() => {\n    timers.delete(cancelId);\n    task.call(destroyable);\n  }, timeout);\n  timers.add(cancelId);\n  return cancelId;\n}\n\nexport { runTask };\n","/**\n * @function getTask\n * @param obj\n * @param taskOrName\n * @param taskName\n */\nfunction getTask(obj, taskOrName, taskName) {\n  let type = typeof taskOrName;\n  let task;\n  if (type === 'function') {\n    task = taskOrName;\n  } else if (type === 'string') {\n    task = obj[taskOrName];\n    if (typeof task !== 'function') {\n      throw new TypeError(`The method name '${taskOrName}' passed to ${taskName} does not resolve to a valid function.`);\n    }\n  } else {\n    throw new TypeError(`You must pass a task function or method name to '${taskName}'.`);\n  }\n  return task;\n}\n\nexport { getTask as default };\n","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\nimport calculatePosition from '../utils/calculate-position.ts';\nimport type {\n  CalculatePosition,\n  CalculatePositionResult,\n  HorizontalPosition,\n  VerticalPosition,\n} from '../utils/calculate-position.ts';\nimport { getOwner } from '@ember/application';\nimport type Owner from '@ember/owner';\nimport { schedule } from '@ember/runloop';\nimport type { ComponentLike } from '@glint/template';\nimport type { BasicDropdownTriggerSignature } from './basic-dropdown-trigger.ts';\nimport type { BasicDropdownContentSignature } from './basic-dropdown-content.ts';\nimport { ensureSafeComponent } from '@embroider/util';\nimport { hash } from '@ember/helper';\nimport BasicDropdownTrigger from './basic-dropdown-trigger.gts';\nimport BasicDropdownContent from './basic-dropdown-content.gts';\nimport { or } from 'ember-truth-helpers';\nimport type {\n  Dropdown,\n  DropdownActions,\n  RepositionChanges,\n  TRootEventType,\n} from '../types.ts';\nimport { deprecate } from '@ember/debug';\nimport { isTesting } from '@embroider/macros';\nimport { config as utilConfig, _configSet, type Config } from '../config.ts';\n\n// To avoid breaking the current types export we need this\nexport type { Dropdown, DropdownActions, TRootEventType };\n\nconst UNINITIALIZED = {};\nconst IGNORED_STYLES = ['top', 'left', 'right', 'width', 'height'];\n\nexport interface BasicDropdownDefaultBlock {\n  uniqueId: string;\n  disabled: boolean;\n  isOpen: boolean;\n  actions: DropdownActions;\n  Trigger: ComponentLike<BasicDropdownTriggerSignature>;\n  Content: ComponentLike<BasicDropdownContentSignature>;\n}\n\nexport interface BasicDropdownSignature {\n  Element: HTMLElement;\n  Args: BasicDropdownArgs;\n  Blocks: {\n    default: [BasicDropdownDefaultBlock];\n  };\n}\n\nexport interface BasicDropdownArgs {\n  initiallyOpened?: boolean;\n  renderInPlace?: boolean;\n  verticalPosition?: VerticalPosition;\n  horizontalPosition?: HorizontalPosition;\n  destination?: string;\n  destinationElement?: HTMLElement;\n  disabled?: boolean;\n  dropdownId?: string;\n  rootEventType?: TRootEventType;\n  preventScroll?: boolean;\n  matchTriggerWidth?: boolean;\n  triggerHtmlTag?: keyof HTMLElementTagNameMap;\n  contentHtmlTag?: keyof HTMLElementTagNameMap;\n  onInit?: (dropdown: Dropdown) => void;\n  registerAPI?: (dropdown: Dropdown | null) => void;\n  onOpen?: (dropdown: Dropdown, e?: Event) => boolean | void;\n  onClose?: (dropdown: Dropdown, e?: Event) => boolean | void;\n  triggerComponent?:\n    | string\n    | ComponentLike<BasicDropdownTriggerSignature>\n    | undefined;\n  contentComponent?:\n    | string\n    | ComponentLike<BasicDropdownContentSignature>\n    | undefined;\n  calculatePosition?: CalculatePosition;\n}\n\nexport default class BasicDropdown extends Component<BasicDropdownSignature> {\n  @tracked hPosition: HorizontalPosition | null = null;\n  @tracked vPosition: VerticalPosition | null = null;\n  @tracked top: string | undefined;\n  @tracked left: string | undefined;\n  @tracked right: string | undefined;\n  @tracked width: string | undefined;\n  @tracked height: string | undefined;\n  @tracked otherStyles: Record<string, string | number | undefined> = {};\n  @tracked isOpen = this.args.initiallyOpened || false;\n  @tracked renderInPlace =\n    this.args.renderInPlace !== undefined ? this.args.renderInPlace : false;\n  private previousVerticalPosition?: VerticalPosition | undefined;\n  private previousHorizontalPosition?: HorizontalPosition | undefined;\n  private triggerElement: HTMLElement | null = null;\n  private dropdownElement: HTMLElement | null = null;\n\n  private _uid = guidFor(this);\n  private _dropdownId: string =\n    this.args.dropdownId || `ember-basic-dropdown-content-${this._uid}`;\n  private _previousDisabled = UNINITIALIZED;\n  private _actions: DropdownActions = {\n    open: this.open.bind(this),\n    close: this.close.bind(this),\n    toggle: this.toggle.bind(this),\n    reposition: this.reposition.bind(this),\n    registerTriggerElement: this.registerTriggerElement.bind(this),\n    registerDropdownElement: this.registerDropdownElement.bind(this),\n    getTriggerElement: () => this.triggerElement,\n  };\n\n  private get horizontalPosition() {\n    return this.args.horizontalPosition || 'auto'; // auto-right | right | center | left\n  }\n\n  private get verticalPosition() {\n    return this.args.verticalPosition || 'auto'; // above | below\n  }\n\n  get destination(): string {\n    return this.args.destination || this._getDestinationId();\n  }\n\n  get destinationElement(): HTMLElement | null {\n    if (this.args.destinationElement) {\n      return this.args.destinationElement;\n    }\n\n    const element = document.getElementById(this.destination);\n\n    if (element) {\n      return element;\n    }\n\n    if (\n      this.triggerElement &&\n      this.triggerElement.getRootNode() instanceof ShadowRoot\n    ) {\n      return (this.triggerElement.getRootNode() as HTMLElement)?.querySelector(\n        `#${this.destination}`,\n      );\n    }\n\n    return null;\n  }\n\n  get disabled(): boolean {\n    const newVal = this.args.disabled || false;\n    if (\n      this._previousDisabled !== UNINITIALIZED &&\n      this._previousDisabled !== newVal\n    ) {\n      // eslint-disable-next-line ember/no-runloop\n      schedule('actions', () => {\n        if (newVal && this.publicAPI.isOpen) {\n          // eslint-disable-next-line ember/no-side-effects\n          this.isOpen = false;\n        }\n        if (this.args.registerAPI) {\n          this.args.registerAPI(this.publicAPI);\n        }\n      });\n    }\n    // eslint-disable-next-line ember/no-side-effects\n    this._previousDisabled = newVal;\n    return newVal;\n  }\n\n  get publicAPI(): Dropdown {\n    return {\n      uniqueId: this._uid,\n      isOpen: this.isOpen,\n      disabled: this.disabled,\n      actions: this._actions,\n    };\n  }\n\n  // Lifecycle hooks\n  constructor(owner: Owner, args: BasicDropdownArgs) {\n    super(owner, args);\n    if (this.args.onInit) {\n      this.args.onInit(this.publicAPI);\n    }\n    if (this.args.registerAPI) {\n      this.args.registerAPI(this.publicAPI);\n    }\n\n    if (this.args.dropdownId !== undefined) {\n      deprecate(\n        'You have passed `@dropdownId` into `ember-basic-dropdown`. This property does not work correctly without custom modifiers and is undocumented. Remove this parameter and use the `uniqueId` property from the public API instead.',\n        false,\n        {\n          for: 'ember-basic-dropdown',\n          id: 'ember-basic-dropdown.deprecate-arg-dropdown-id',\n          since: {\n            enabled: '8.8',\n            available: '8.8',\n          },\n          until: '9.0.0',\n        },\n      );\n    }\n  }\n\n  override willDestroy(): void {\n    super.willDestroy();\n    if (this.args.registerAPI) {\n      this.args.registerAPI(null);\n    }\n  }\n\n  // Actions\n  @action\n  open(e?: Event): void {\n    if (this.isDestroyed) {\n      return;\n    }\n    if (this.publicAPI.disabled || this.publicAPI.isOpen) {\n      return;\n    }\n    if (this.args.onOpen && this.args.onOpen(this.publicAPI, e) === false) {\n      return;\n    }\n    this.isOpen = true;\n    if (this.args.registerAPI) {\n      this.args.registerAPI(this.publicAPI);\n    }\n    const trigger = this._getTriggerElement();\n    if (trigger) {\n      const parent = trigger.parentElement;\n      if (parent) {\n        parent.setAttribute('aria-owns', this._dropdownId);\n      }\n    }\n  }\n\n  @action\n  close(e?: Event, skipFocus?: boolean): void {\n    if (this.isDestroyed) {\n      return;\n    }\n    if (this.publicAPI.disabled || !this.publicAPI.isOpen) {\n      return;\n    }\n    if (this.args.onClose && this.args.onClose(this.publicAPI, e) === false) {\n      return;\n    }\n    if (this.isDestroyed) {\n      return; // To check that the `onClose` didn't destroy the dropdown\n    }\n    this.hPosition = this.vPosition = null;\n    this.top = this.left = this.right = this.width = this.height = undefined;\n    this.previousVerticalPosition = this.previousHorizontalPosition = undefined;\n    this.isOpen = false;\n    if (this.args.registerAPI) {\n      this.args.registerAPI(this.publicAPI);\n    }\n    const trigger = this._getTriggerElement();\n    if (!trigger) {\n      return;\n    }\n    const parent = trigger.parentElement;\n    if (parent) {\n      parent.removeAttribute('aria-owns');\n    }\n    if (skipFocus) {\n      return;\n    }\n    if (trigger.tabIndex > -1) {\n      trigger.focus();\n    }\n  }\n\n  @action\n  toggle(e?: Event): void {\n    if (this.publicAPI.isOpen) {\n      this.close(e);\n    } else {\n      this.open(e);\n    }\n  }\n\n  @action\n  reposition(): undefined | RepositionChanges {\n    if (!this.publicAPI.isOpen) {\n      return;\n    }\n    const dropdownElement = this._getDropdownElement();\n    const triggerElement = this._getTriggerElement();\n    if (!dropdownElement || !triggerElement || !this.destinationElement) {\n      return;\n    }\n\n    const {\n      horizontalPosition,\n      verticalPosition,\n      previousHorizontalPosition,\n      previousVerticalPosition,\n    } = this;\n    const { renderInPlace = false, matchTriggerWidth = false } = this.args;\n    const calculatePositionFn =\n      this.args.calculatePosition || calculatePosition;\n    const positionData = calculatePositionFn(\n      triggerElement,\n      dropdownElement,\n      this.destinationElement,\n      {\n        horizontalPosition,\n        verticalPosition,\n        previousHorizontalPosition,\n        previousVerticalPosition,\n        renderInPlace,\n        matchTriggerWidth,\n        dropdown: this,\n      },\n    );\n    return this.applyReposition(triggerElement, dropdownElement, positionData);\n  }\n\n  @action\n  registerTriggerElement(element: HTMLElement): void {\n    this.triggerElement = element;\n  }\n\n  @action\n  registerDropdownElement(element: HTMLElement): void {\n    this.dropdownElement = element;\n  }\n\n  applyReposition(\n    _trigger: Element,\n    dropdown: HTMLElement,\n    positions: CalculatePositionResult,\n  ): RepositionChanges {\n    const changes: RepositionChanges = {\n      hPosition: positions.horizontalPosition,\n      vPosition: positions.verticalPosition,\n      otherStyles: Object.assign({}, this.otherStyles),\n    };\n\n    if (positions.style) {\n      if (positions.style.top !== undefined) {\n        changes.top = `${positions.style.top}px`;\n      }\n      // The component can be aligned from the right or from the left, but not from both.\n      if (positions.style.left !== undefined) {\n        changes.left = `${positions.style.left}px`;\n        changes.right = undefined;\n        // Since we set the first run manually we may need to unset the `right` property.\n        if (positions.style.right !== undefined) {\n          positions.style.right = undefined;\n        }\n      } else if (positions.style.right !== undefined) {\n        changes.right = `${positions.style.right}px`;\n        changes.left = undefined;\n      }\n      if (positions.style.width !== undefined) {\n        changes.width = `${positions.style.width}px`;\n      }\n      if (positions.style.height !== undefined) {\n        changes.height = `${positions.style.height}px`;\n      }\n      if (this.top === undefined) {\n        // Bypass Ember on the first reposition only to avoid flickering.\n        for (const prop in positions.style) {\n          if (positions.style[prop] !== undefined) {\n            if (typeof positions.style[prop] === 'number') {\n              dropdown.style.setProperty(prop, `${positions.style[prop]}px`);\n            } else {\n              dropdown.style.setProperty(prop, `${positions.style[prop]}`);\n            }\n          }\n        }\n      }\n    }\n    for (const prop in positions.style) {\n      if (!IGNORED_STYLES.includes(prop)) {\n        changes.otherStyles[prop] = positions.style[prop];\n      }\n    }\n\n    this.hPosition = changes.hPosition;\n    this.vPosition = changes.vPosition;\n    this.top = changes.top;\n    this.left = changes.left;\n    this.right = changes.right;\n    this.width = changes.width;\n    this.height = changes.height;\n    this.otherStyles = changes.otherStyles;\n    this.previousHorizontalPosition = positions.horizontalPosition;\n    this.previousVerticalPosition = positions.verticalPosition;\n    return changes;\n  }\n\n  _getDestinationId(): string {\n    let config = utilConfig;\n\n    if (!_configSet) {\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n      const configEnvironment = getOwner(this).resolveRegistration(\n        'config:environment',\n      ) as {\n        APP: {\n          rootElement: string;\n        };\n        'ember-basic-dropdown': Config;\n      };\n\n      if (configEnvironment['ember-basic-dropdown']) {\n        const legacyConfigString = JSON.stringify(\n          configEnvironment['ember-basic-dropdown'],\n        );\n        deprecate(\n          `You have configured \\`ember-basic-dropdown\\` in \\`ember-cli-build.js\\`. Remove that configuration and instead use \\`import { setConfig } from 'ember-basic-dropdown/config'; setConfig(${legacyConfigString});`,\n          false,\n          {\n            for: 'ember-basic-dropdown',\n            id: 'ember-basic-dropdown.config-environment',\n            since: {\n              enabled: '8.9',\n              available: '8.9',\n            },\n            until: '9.0.0',\n          },\n        );\n\n        config = configEnvironment['ember-basic-dropdown'];\n      }\n\n      if (configEnvironment['APP']?.rootElement) {\n        deprecate(\n          `ember-basic-dropdown received the \\`APP.rootElement\\` value from \\`ember-cli-build.js\\`. You now need to pass this value using \\`import { setConfig } from 'ember-basic-dropdown/config'; setConfig({rootElement: config.APP['rootElement']});`,\n          false,\n          {\n            for: 'ember-basic-dropdown',\n            id: 'ember-basic-dropdown.config-environment',\n            since: {\n              enabled: '8.9',\n              available: '8.9',\n            },\n            until: '9.0.0',\n          },\n        );\n\n        config.rootElement = configEnvironment['APP']?.rootElement;\n      }\n    }\n\n    if (isTesting()) {\n      // document doesn't exist in fastboot apps, for this reason we need this check\n      if (typeof document === 'undefined') {\n        return 'ember-basic-dropdown-wormhole';\n      }\n\n      // check if destination exists in tests:\n      if (config.destination) {\n        const destination = config.destination;\n        if (document.getElementById(destination) !== null) {\n          return destination;\n        }\n      }\n\n      // check if default element exists in tests:\n      if (document.getElementById('ember-basic-dropdown-wormhole') !== null) {\n        return 'ember-basic-dropdown-wormhole';\n      }\n\n      // fall back to rootElement as destination\n      const rootElement = config.rootElement;\n      return (\n        (rootElement ? document.querySelector(rootElement)?.id : undefined) ??\n        'ember-basic-dropdown-wormhole'\n      );\n    }\n\n    return config.destination || 'ember-basic-dropdown-wormhole';\n  }\n\n  _getDropdownElement(): HTMLElement | null {\n    if (this.dropdownElement) {\n      return this.dropdownElement;\n    }\n\n    return document.querySelector(`[id=\"${this._dropdownId}\"]`);\n  }\n\n  _getTriggerElement(): HTMLElement | null {\n    if (this.triggerElement) {\n      return this.triggerElement;\n    }\n\n    return document.querySelector(\n      `[data-ebd-id=${this.publicAPI.uniqueId}-trigger]`,\n    );\n  }\n\n  get triggerComponent(): ComponentLike<BasicDropdownTriggerSignature> {\n    if (this.args.triggerComponent) {\n      return ensureSafeComponent(\n        this.args.triggerComponent,\n        this,\n      ) as ComponentLike<BasicDropdownTriggerSignature>;\n    }\n\n    return BasicDropdownTrigger as ComponentLike<BasicDropdownTriggerSignature>;\n  }\n\n  get contentComponent(): ComponentLike<BasicDropdownContentSignature> {\n    if (this.args.contentComponent) {\n      return ensureSafeComponent(\n        this.args.contentComponent,\n        this,\n      ) as ComponentLike<BasicDropdownContentSignature>;\n    }\n\n    return BasicDropdownContent as ComponentLike<BasicDropdownContentSignature>;\n  }\n\n  <template>\n    {{#let\n      (hash\n        uniqueId=this.publicAPI.uniqueId\n        isOpen=this.publicAPI.isOpen\n        disabled=this.publicAPI.disabled\n        actions=this.publicAPI.actions\n        Trigger=(component\n          this.triggerComponent\n          dropdown=this.publicAPI\n          hPosition=this.hPosition\n          renderInPlace=this.renderInPlace\n          vPosition=this.vPosition\n          htmlTag=@triggerHtmlTag\n        )\n        Content=(component\n          this.contentComponent\n          dropdown=this.publicAPI\n          hPosition=this.hPosition\n          renderInPlace=this.renderInPlace\n          preventScroll=@preventScroll\n          rootEventType=(or @rootEventType \"click\")\n          vPosition=this.vPosition\n          htmlTag=@contentHtmlTag\n          destination=this.destination\n          destinationElement=this.destinationElement\n          top=this.top\n          left=this.left\n          right=this.right\n          width=this.width\n          height=this.height\n          otherStyles=this.otherStyles\n        )\n      )\n      as |api|\n    }}\n      {{#if this.renderInPlace}}\n        <div class=\"ember-basic-dropdown\" ...attributes>{{yield api}}</div>\n      {{else}}\n        {{yield api}}\n      {{/if}}\n    {{/let}}\n  </template>\n}\n","import Component from '@glimmer/component';\nimport { getOwner } from '@ember/application';\nimport { config as utilConfig, _configSet, type Config } from '../config.ts';\nimport { deprecate } from '@ember/debug';\n\nexport interface BasicDropdownWormholeSignature {\n  Element: HTMLElement;\n}\n\nexport default class BasicDropdownWormholeComponent extends Component<BasicDropdownWormholeSignature> {\n  get getDestinationId(): string {\n    let config = utilConfig;\n\n    if (!_configSet) {\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n      const configEnvironment = getOwner(this).resolveRegistration(\n        'config:environment',\n      ) as {\n        'ember-basic-dropdown'?: Config;\n      };\n\n      if (configEnvironment['ember-basic-dropdown']) {\n        const legacyConfigString = JSON.stringify(\n          configEnvironment['ember-basic-dropdown'],\n        );\n        deprecate(\n          `You have configured \\`ember-basic-dropdown\\` in \\`ember-cli-build.js\\`. Remove that configuration and instead use \\`import { setConfig } from 'ember-basic-dropdown/config'; setConfig(${legacyConfigString});`,\n          false,\n          {\n            for: 'ember-basic-dropdown',\n            id: 'ember-basic-dropdown.config-environment',\n            since: {\n              enabled: '8.9',\n              available: '8.9',\n            },\n            until: '9.0.0',\n          },\n        );\n\n        config = configEnvironment['ember-basic-dropdown'];\n      }\n    }\n\n    return config.destination || 'ember-basic-dropdown-wormhole';\n  }\n\n  <template>\n    <div id={{this.getDestinationId}} ...attributes></div>\n  </template>\n}\n","import EmberObject from '@ember/object';\nimport { camelize } from '@ember/string';\nimport { get } from '@ember/object';\n\nexport default class EmberObjectAbility extends EmberObject {\n  /**\n   * Parse propertyName into ability property\n   * eg: `createProject` will be parsed to `canCreateProject` using default definition\n   * @public\n   * @param  {[String]} propertyName [description]\n   * @return {[String]}              [description]\n   */\n  parseProperty(propertyName: string): string {\n    return camelize(`can-${propertyName}`);\n  }\n\n  /**\n   * Get parsed ability value based on propertyName\n   * eg: `createProject` will return a value for `canCreateProject`\n   * using default `parseProperty` definition\n   * @param  {String} propertyName property name, eg. `createProject`\n   * @param  {any} model\n   * @param  {Object} properties\n   * @return {*}                   value of parsed `propertyName` property\n   */\n  getAbility(\n    propertyName: string,\n    model?: unknown,\n    properties?: Record<string, unknown>,\n  ): unknown {\n    const abilityValue = get(this, this.parseProperty(propertyName));\n\n    if (typeof abilityValue === 'function') {\n      return abilityValue.call(this, model, properties);\n    }\n\n    return abilityValue;\n  }\n}\n","import type Resolver from 'ember-resolver';\n\nexport default function extendResolver(\n  resolver: typeof Resolver,\n): typeof Resolver {\n  return class EmberCanResolver extends resolver {\n    pluralizedTypes: Record<string, string> = {\n      // @ts-expect-error Property 'pluralizedTypes' is used before its initialization.\n      ...this.pluralizedTypes,\n      ability: 'abilities',\n    };\n  };\n}\n","import Helper from '@ember/component/helper';\nimport { service } from '@ember/service';\nimport type Ability from '../services/abilities.ts';\n\ninterface CanSignature {\n  Args: {\n    Positional: [abilityString: string, model?: unknown];\n    Named: Record<string, unknown>;\n  };\n  Return: boolean;\n}\n\nexport default class CanHelper extends Helper<CanSignature> {\n  @service declare abilities: Ability;\n\n  compute(\n    [abilityString, model]: CanSignature['Args']['Positional'],\n    properties: CanSignature['Args']['Named'] = {},\n  ): boolean {\n    return this.abilities.can(abilityString ?? '', model, properties);\n  }\n}\n","import Helper from '@ember/component/helper';\nimport { service } from '@ember/service';\nimport type Ability from '../services/abilities.ts';\n\ninterface CannotSignature {\n  Args: {\n    Positional: [abilityString: string, model?: unknown];\n    Named: Record<string, unknown>;\n  };\n  Return: boolean;\n}\n\nexport default class CannotHelper extends Helper<CannotSignature> {\n  @service declare abilities: Ability;\n\n  compute(\n    [abilityString, model]: CannotSignature['Args']['Positional'],\n    properties: CannotSignature['Args']['Named'] = {},\n  ): boolean {\n    return this.abilities.cannot(abilityString ?? '', model, properties);\n  }\n}\n","import { camelize } from '@ember/string';\nimport { singularize } from 'ember-inflector';\n\nconst stopWords = ['of', 'in', 'for', 'to', 'from', 'on', 'as'];\n\n/**\n * Normalize string into an object with extracted propertyName and abilityName\n * eg. for 'create projects in account' -> `{ propertyName: 'createProjects', abilityName: 'account'}`\n * @private\n * @param  {String} string eg. 'create projects in account'\n * @return {Object}        extracted propertyName and abilityName\n */\nexport default function (string: string) {\n  const parts = string.split(' ');\n  const abilityName = singularize(parts.pop() as string);\n  const last = parts[parts.length - 1];\n\n  if (stopWords.includes(last as string)) {\n    parts.pop();\n  }\n\n  const propertyName = camelize(parts.join(' '));\n\n  return { propertyName, abilityName };\n}\n","import Service from '@ember/service';\nimport Ability from '../ability.ts';\nimport { assert } from '@ember/debug';\nimport { getOwner } from '@ember/owner';\nimport normalizeAbilityString from '../-private/normalize.ts';\n\nexport default class AbilitiesService extends Service {\n  /**\n   * Parse abilityString into an object with extracted propertyName and abilityName\n   * eg. for 'create projects in account' -> `{ propertyName: 'createProjects', abilityName: 'account'}`\n   * @public\n   * @param  {String} string eg. 'create projects in account'\n   * @return {Object}        extracted propertyName and abilityName\n   */\n  parse(abilityString: string): ReturnType<typeof normalizeAbilityString> {\n    return normalizeAbilityString(abilityString);\n  }\n\n  /**\n   * Create an instance of Ability\n   * @public\n   * @param  {String} abilityName     name of ability class\n   * @param  {*}      model\n   * @param  {Object} [properties={}] extra properties (to be set on the ability instance)\n   * @return {Ability}                Ability instance of requested ability\n   */\n  abilityFor(\n    abilityName: string,\n    model?: unknown,\n    properties: Record<string, unknown> = {},\n  ): Ability {\n    const AbilityFactory = getOwner(this)?.factoryFor(`ability:${abilityName}`);\n\n    assert(`No ability type found for '${abilityName}'`, AbilityFactory);\n\n    if (typeof model !== 'undefined') {\n      properties = { model, ...properties };\n    }\n\n    const ability = AbilityFactory.create(properties);\n    assert(\n      `Ability '${abilityName}' has to inherit from ember-can Ability`,\n      isAbilityClass(ability), // \"ability instanceof Ability\" is not working cause of a bug in ember-auto-import see https://github.com/embroider-build/ember-auto-import/issues/588\n    );\n\n    return ability;\n  }\n\n  /**\n   * Returns a value for requested ability in specified ability class\n   * @public\n   * @param  {String} propertyName name of ability, eg `createProjects`\n   * @param  {String} abilityName  name of ability class\n   * @param  {*}      model\n   * @param  {Object} properties   extra properties (to be set on the ability instance)\n   * @return {*}                   value of ability\n   */\n  valueFor(\n    propertyName: string,\n    abilityName: string,\n    model?: unknown,\n    properties?: Record<string, unknown>,\n  ): unknown {\n    const ability = this.abilityFor(abilityName, model, properties);\n    const result = ability.getAbility(propertyName, model, properties);\n\n    ability.destroy();\n\n    return result;\n  }\n\n  /**\n   * Returns `true` if ability is permitted\n   * @public\n   * @param  {[type]} abilityString eg. 'create projects in account'\n   * @param  {*}      model\n   * @param  {[type]} properties    extra properties (to be set on the ability instance)\n   * @return {Boolean}              value of ability converted to boolean\n   */\n  can(\n    abilityString: string,\n    model?: unknown,\n    properties?: Record<string, unknown>,\n  ): boolean {\n    const { propertyName, abilityName } = this.parse(abilityString);\n    return !!this.valueFor(propertyName, abilityName, model, properties);\n  }\n\n  /**\n   * Returns `true` if ability is not permitted\n   * @public\n   * @param  {[type]} abilityString eg. 'create projects in account'\n   * @param  {*}      model\n   * @param  {[type]} properties    extra properties (to be set on the ability instance)\n   * @return {Boolean}              value of ability converted to boolean\n   */\n  cannot(\n    abilityString: string,\n    model?: unknown,\n    properties?: Record<string, unknown>,\n  ): boolean {\n    return !this.can(abilityString, model, properties);\n  }\n}\n\nfunction isAbilityClass(\n  possibleAbilityClass: unknown,\n): possibleAbilityClass is Ability {\n  const abilityClass = possibleAbilityClass as Ability;\n  return (\n    abilityClass.parseProperty !== undefined &&\n    typeof abilityClass.parseProperty === 'function' &&\n    abilityClass.getAbility !== undefined &&\n    typeof abilityClass.getAbility === 'function'\n  );\n}\n","import { registerDeprecationHandler } from '@ember/debug';\n\nconst LOG_LIMIT = 100;\n\nexport default function setupDeprecationWorkflow(config) {\n  self.deprecationWorkflow = self.deprecationWorkflow || {};\n  self.deprecationWorkflow.deprecationLog = {\n    messages: new Set(),\n  };\n\n  registerDeprecationHandler((message, options, next) =>\n    handleDeprecationWorkflow(config, message, options, next),\n  );\n\n  registerDeprecationHandler(deprecationCollector);\n\n  self.deprecationWorkflow.flushDeprecations = (options) =>\n    flushDeprecations({ config, ...options });\n}\n\nfunction matchesWorkflow(matcher, value) {\n  return (\n    (typeof matcher === 'string' && matcher === value) ||\n    (matcher instanceof RegExp && matcher.exec(value))\n  );\n}\n\nexport function detectWorkflow(config, message, options) {\n  if (!config || !config.workflow) {\n    return;\n  }\n\n  let i, workflow, matcher, idMatcher;\n  for (i = 0; i < config.workflow.length; i++) {\n    workflow = config.workflow[i];\n    matcher = workflow.matchMessage;\n    idMatcher = workflow.matchId;\n\n    if (\n      matchesWorkflow(idMatcher, options?.id) ||\n      matchesWorkflow(matcher, message)\n    ) {\n      return workflow;\n    }\n  }\n}\n\nexport function flushDeprecations({ handler = 'silence', config = {} } = {}) {\n  let messages = self.deprecationWorkflow.deprecationLog.messages;\n  let existing = config.workflow ?? [];\n  let collected = messages\n    .values()\n    .filter((matchId) => !existing.some((entry) => entry.matchId === matchId))\n    .map((matchId) => ({\n      handler,\n      matchId,\n    }));\n\n  let mergedConfig = {\n    ...config,\n    workflow: [...existing, ...collected],\n  };\n\n  return `import setupDeprecationWorkflow from 'ember-cli-deprecation-workflow';\n\nsetupDeprecationWorkflow(${JSON.stringify(mergedConfig, undefined, 2)});`;\n}\n\nexport function handleDeprecationWorkflow(config, message, options, next) {\n  let matchingWorkflow = detectWorkflow(config, message, options);\n  if (!matchingWorkflow) {\n    if (config && config.throwOnUnhandled) {\n      throw new Error(message);\n    } else {\n      next(message, options);\n    }\n  } else {\n    switch (matchingWorkflow.handler) {\n      case 'silence':\n        // no-op\n        break;\n      case 'log': {\n        let key = (options && options.id) || message;\n\n        if (!self.deprecationWorkflow.logCounts) {\n          self.deprecationWorkflow.logCounts = {};\n        }\n\n        let count = self.deprecationWorkflow.logCounts[key] || 0;\n        self.deprecationWorkflow.logCounts[key] = ++count;\n\n        if (count <= LOG_LIMIT) {\n          console.warn('DEPRECATION: ' + message);\n          if (count === LOG_LIMIT) {\n            console.warn(\n              'To avoid console overflow, this deprecation will not be logged any more in this run.',\n            );\n          }\n        }\n\n        break;\n      }\n      case 'throw':\n        throw new Error(message + ` (id: ${options?.id || 'unknown'})`);\n      default:\n        next(message, options);\n        break;\n    }\n  }\n}\n\nexport function deprecationCollector(message, options, next) {\n  self.deprecationWorkflow.deprecationLog.messages.add(options.id);\n\n  next(message, options);\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"<div\\n  class=\\\"flash-message {{this.alertType}} {{if this.exiting this.exitingClass}} {{if this.active \\\"active\\\"}}\\\"\\n  role=\\\"alert\\\"\\n  ...attributes\\n  {{on \\\"click\\\" this.onClick}}\\n  {{this.bindEvents}}\\n  {{! template-lint-disable no-invalid-interactive }}\\n>\\n  {{#if (has-block)}}\\n    {{yield this @flash this.onClose}}\\n  {{else}}\\n    {{@flash.message}}\\n    {{#if this.showProgressBar}}\\n      <div class=\\\"alert-progress\\\">\\n        <div class=\\\"alert-progressBar\\\" style={{this.progressDuration}}></div>\\n      </div>\\n    {{/if}}\\n  {{/if}}\\n</div>\")","import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { classify } from '@ember/string';\nimport { htmlSafe } from '@ember/template';\nimport { isPresent } from '@ember/utils';\nimport { next, cancel } from '@ember/runloop';\n// eslint-disable-next-line ember/no-computed-properties-in-native-classes\nimport { action, computed } from '@ember/object';\nimport { modifier } from 'ember-modifier';\n\n/**\n * ARGS\n *\n * flash: FlashObject\n * messageStyle?: 'bootstrap' | 'foundation'\n * messageStylePrefix?: string\n */\n\nexport default class FlashMessage extends Component {\n  @tracked active = false;\n\n  @tracked pendingSet;\n  @tracked _mouseEnterHandler;\n  @tracked _mouseLeaveHandler;\n\n  get messageStyle() {\n    return this.args.messageStyle ?? 'bootstrap';\n  }\n\n  get showProgress() {\n    return this.args.flash.showProgress;\n  }\n\n  get notExiting() {\n    return !this.exiting;\n  }\n\n  get showProgressBar() {\n    return this.showProgress && this.notExiting;\n  }\n\n  @computed('args.flash.exiting')\n  get exiting() {\n    return this.args.flash.exiting;\n  }\n\n  get exitingClass() {\n    return this.args.exitingClass || 'exiting';\n  }\n\n  get messageStylePrefix() {\n    return this.args.messageStylePrefix ?? this._defaultMessageStylePrefix;\n  }\n\n  @computed('messageStyle')\n  get _defaultMessageStylePrefix() {\n    const isFoundation = this.messageStyle === 'foundation';\n    return isFoundation ? 'alert-box ' : 'alert alert-';\n  }\n\n  @computed('args.flash.type', 'messageStylePrefix')\n  get alertType() {\n    const flashType = this.args.flash.type || '';\n    const prefix = this.messageStylePrefix;\n    return `${prefix}${flashType}`;\n  }\n\n  @computed('args.flash.type')\n  get flashType() {\n    return classify(this.args.flash.type || '');\n  }\n\n  @computed('args.flash.{showProgress,timeout}')\n  get progressDuration() {\n    if (!this.args.flash?.showProgress) {\n      return false;\n    }\n    const duration = this.args.flash?.timeout || 0;\n    return htmlSafe(`transition-duration: ${duration}ms`);\n  }\n\n  @action\n  _mouseEnter() {\n    if (isPresent(this.args.flash)) {\n      this.args.flash.preventExit();\n    }\n  }\n\n  @action\n  _mouseLeave() {\n    if (isPresent(this.args.flash) && !this.args.flash.exiting) {\n      this.args.flash.allowExit();\n    }\n  }\n\n  _destroyFlashMessage() {\n    if (this.args.flash) {\n      this.args.flash.destroyMessage();\n    }\n  }\n\n  @action\n  onClick() {\n    const destroyOnClick = this.args.flash?.destroyOnClick ?? true;\n\n    if (destroyOnClick) {\n      this._destroyFlashMessage();\n    }\n  }\n\n  @action\n  onClose() {\n    this._destroyFlashMessage();\n  }\n\n  bindEvents = modifier((element) => {\n    const pendingSet = next(this, () => {\n      this.active = true;\n    });\n    this.pendingSet = pendingSet;\n    this._mouseEnterHandler = this._mouseEnter;\n    this._mouseLeaveHandler = this._mouseLeave;\n    element.addEventListener('mouseenter', this._mouseEnterHandler);\n    element.addEventListener('mouseleave', this._mouseLeaveHandler);\n\n    return () => {\n      element.removeEventListener('mouseenter', this._mouseEnterHandler);\n      element.removeEventListener('mouseleave', this._mouseLeaveHandler);\n      cancel(this.pendingSet);\n      this._destroyFlashMessage();\n    };\n  });\n}\n","import Evented from '@ember/object/evented';\nimport EmberObject, { set } from '@ember/object';\nimport { cancel, later } from '@ember/runloop';\nimport { guidFor } from '../utils/computed';\nimport { isTesting, macroCondition } from '@embroider/macros';\n\n// Disable timeout by default when running tests\nconst defaultDisableTimeout = macroCondition(isTesting()) ? true : false;\n\n// Note:\n// To avoid https://github.com/adopted-ember-addons/ember-cli-flash/issues/341 from happening, this class can't simply be called Object\nexport default class FlashObject extends EmberObject.extend(Evented) {\n  exitTimer = null;\n  exiting = false;\n  isExitable = true;\n  initializedTime = null;\n\n  // testHelperDisableTimeout – Set by `disableTimeout` and `enableTimeout` in test-support.js\n\n  get disableTimeout() {\n    return this.testHelperDisableTimeout ?? defaultDisableTimeout;\n  }\n\n  @(guidFor('message').readOnly())\n  _guid;\n\n  // eslint-disable-next-line ember/classic-decorator-hooks\n  init() {\n    super.init(...arguments);\n\n    if (this.disableTimeout || this.sticky) {\n      return;\n    }\n    this.timerTask();\n    this._setInitializedTime();\n  }\n\n  destroyMessage() {\n    this._cancelTimer();\n    if (this.exitTaskInstance) {\n      cancel(this.exitTaskInstance);\n      this._teardown();\n    } else {\n      this.exitTimerTask();\n    }\n  }\n\n  exitMessage() {\n    if (!this.isExitable) {\n      return;\n    }\n    this.exitTimerTask();\n    this.trigger('didExitMessage');\n  }\n\n  willDestroy() {\n    if (this.onDestroy) {\n      this.onDestroy();\n    }\n\n    this._cancelTimer();\n    this._cancelTimer('exitTaskInstance');\n    super.willDestroy(...arguments);\n  }\n\n  preventExit() {\n    set(this, 'isExitable', false);\n  }\n\n  allowExit() {\n    set(this, 'isExitable', true);\n    this._checkIfShouldExit();\n  }\n\n  timerTask() {\n    if (!this.timeout) {\n      return;\n    }\n    const timerTaskInstance = later(() => {\n      this.exitMessage();\n    }, this.timeout);\n    set(this, 'timerTaskInstance', timerTaskInstance);\n  }\n\n  exitTimerTask() {\n    if (this.isDestroyed) {\n      return;\n    }\n    set(this, 'exiting', true);\n    if (this.extendedTimeout) {\n      let exitTaskInstance = later(() => {\n        this._teardown();\n      }, this.extendedTimeout);\n      set(this, 'exitTaskInstance', exitTaskInstance);\n    } else {\n      this._teardown();\n    }\n  }\n\n  _setInitializedTime() {\n    let currentTime = new Date().getTime();\n    set(this, 'initializedTime', currentTime);\n\n    return this.initializedTime;\n  }\n\n  _getElapsedTime() {\n    let currentTime = new Date().getTime();\n\n    return currentTime - this.initializedTime;\n  }\n\n  _cancelTimer(taskName = 'timerTaskInstance') {\n    if (this[taskName]) {\n      cancel(this[taskName]);\n    }\n  }\n\n  _checkIfShouldExit() {\n    if (this._getElapsedTime() >= this.timeout && !this.sticky) {\n      this._cancelTimer();\n      this.exitMessage();\n    }\n  }\n\n  _teardown() {\n    const queue = this.flashService?.queue;\n    if (queue) {\n      queue.removeObject(this);\n    }\n    this.destroy();\n    this.trigger('didDestroyMessage');\n  }\n}\n","import { computed, get } from '@ember/object';\nimport { guidFor as emberGuidFor } from '@ember/object/internals';\nimport { isNone } from '@ember/utils';\n\nexport function guidFor(dependentKey) {\n  return computed(dependentKey, {\n    get() {\n      const value = get(this, dependentKey);\n\n      // it's possible that a value has no toString as some objects don't implement the guid field\n      // this early return it to avoid errors being thrown when calling undefined.toString()\n      if (isNone(value)) return;\n\n      return emberGuidFor(value.toString());\n    },\n  });\n}\n","import { get } from '@ember/object';\n\n// This replicates Ember's deprecated `getWithDefault`.\n// Note that, as in the original, `null` is considered a valid value and will\n// not cause the function to return the default value.\nexport default function getWithDefault(objectInstance, key, defaultValue) {\n  let value = get(objectInstance, key);\n\n  if (value === undefined) {\n    return defaultValue;\n  }\n\n  return value;\n}\n","/* eslint-disable ember/no-computed-properties-in-native-classes */\nimport { equal, sort, mapBy } from '@ember/object/computed';\nimport Service from '@ember/service';\nimport { typeOf, isNone } from '@ember/utils';\nimport { warn, assert } from '@ember/debug';\nimport { set, get, setProperties, computed } from '@ember/object';\nimport { classify } from '@ember/string';\nimport { A as emberArray } from '@ember/array';\nimport FlashMessage from '../flash/object';\nimport objectWithout from '../utils/object-without';\nimport { getOwner } from '@ember/application';\nimport flashMessageOptions from '../utils/flash-message-options';\nimport getWithDefault from '../utils/get-with-default';\n\nexport default class FlashMessagesService extends Service {\n  @(equal('queue.length', 0).readOnly())\n  isEmpty;\n\n  @(mapBy('queue', '_guid').readOnly())\n  _guids;\n\n  @(sort('queue', function (a, b) {\n    if (a.priority < b.priority) {\n      return 1;\n    } else if (a.priority > b.priority) {\n      return -1;\n    }\n    return 0;\n  }).readOnly())\n  arrangedQueue;\n\n  constructor() {\n    super(...arguments);\n    this._setDefaults();\n    this.queue = emberArray();\n  }\n\n  willDestroy() {\n    super.willDestroy(...arguments);\n    this.clearMessages();\n  }\n\n  add(options = {}) {\n    this._enqueue(this._newFlashMessage(options));\n\n    return this;\n  }\n\n  clearMessages() {\n    const flashes = this.queue;\n\n    if (isNone(flashes)) {\n      return;\n    }\n\n    flashes.forEach((flash) => flash.destroyMessage());\n    flashes.clear();\n\n    return this;\n  }\n\n  registerTypes(types = emberArray()) {\n    types.forEach((type) => this._registerType(type));\n\n    return this;\n  }\n\n  peekFirst() {\n    return this.queue.firstObject;\n  }\n\n  peekLast() {\n    return this.queue.lastObject;\n  }\n\n  getFlashObject() {\n    const errorText = 'A flash message must be added before it can be returned';\n    assert(errorText, this.queue.length);\n\n    return this.peekLast();\n  }\n\n  _newFlashMessage(options = {}) {\n    assert(\n      'The flash message cannot be empty when preventDuplicates is enabled.',\n      this.defaultPreventDuplicates ? options.message : true,\n    );\n    assert(\n      'The flash message cannot be empty when preventDuplicates is enabled.',\n      options.preventDuplicates ? options.message : true,\n    );\n\n    const flashService = this;\n    const allDefaults = getWithDefault(this, 'flashMessageDefaults', {});\n    const defaults = objectWithout(allDefaults, ['types', 'preventDuplicates']);\n\n    const flashMessageOptions = Object.assign({}, defaults, { flashService });\n\n    for (let key in options) {\n      const value = get(options, key);\n      const option = this._getOptionOrDefault(key, value);\n\n      set(flashMessageOptions, key, option);\n    }\n\n    return FlashMessage.create(flashMessageOptions);\n  }\n\n  _getOptionOrDefault(key, value) {\n    const defaults = getWithDefault(this, 'flashMessageDefaults', {});\n    const defaultOption = get(defaults, key);\n\n    if (typeOf(value) === 'undefined') {\n      return defaultOption;\n    }\n\n    return value;\n  }\n\n  @computed\n  get flashMessageDefaults() {\n    const config = getOwner(this).resolveRegistration('config:environment');\n    const overrides = getWithDefault(config, 'flashMessageDefaults', {});\n    return flashMessageOptions(overrides);\n  }\n\n  _setDefaults() {\n    const defaults = getWithDefault(this, 'flashMessageDefaults', {});\n\n    for (let key in defaults) {\n      const classifiedKey = classify(key);\n      const defaultKey = `default${classifiedKey}`;\n\n      set(this, defaultKey, defaults[key]);\n    }\n\n    this.registerTypes(getWithDefault(this, 'defaultTypes', emberArray()));\n  }\n\n  _registerType(type) {\n    assert('The flash type cannot be undefined', type);\n\n    this[type] = (message, options = {}) => {\n      const flashMessageOptions = Object.assign({}, options);\n      setProperties(flashMessageOptions, { message, type });\n\n      return this.add(flashMessageOptions);\n    };\n  }\n\n  _hasDuplicate(guid) {\n    return this._guids.includes(guid);\n  }\n\n  _enqueue(flashInstance) {\n    const instancePreventDuplicates = flashInstance.preventDuplicates;\n    const preventDuplicates =\n      typeof instancePreventDuplicates === 'boolean'\n        ? // always prefer instance option over global option\n          instancePreventDuplicates\n        : this.defaultPreventDuplicates;\n\n    if (preventDuplicates) {\n      const guid = flashInstance._guid;\n\n      if (this._hasDuplicate(guid)) {\n        warn(\n          'Attempting to add a duplicate message to the Flash Messages Service',\n          false,\n          {\n            id: 'ember-cli-flash.duplicate-message',\n          },\n        );\n        return;\n      }\n    }\n\n    return this.queue.pushObject(flashInstance);\n  }\n}\n","export default function objectWithout(originalObj = {}, keysToRemove = []) {\n  let newObj = {};\n\n  for (let key in originalObj) {\n    if (keysToRemove.indexOf(key) === -1) {\n      newObj[key] = originalObj[key];\n    }\n  }\n\n  return newObj;\n}\n","export default function (configOverrides) {\n  const addonDefaults = {\n    timeout: 3000,\n    extendedTimeout: 0,\n    priority: 100,\n    sticky: false,\n    showProgress: false,\n    type: 'info',\n    types: ['success', 'info', 'warning', 'danger', 'alert', 'secondary'],\n    preventDuplicates: false,\n  };\n  return Object.assign(addonDefaults, configOverrides);\n}\n","import { helper } from '@ember/component/helper';\nimport { assert } from '@ember/debug';\nimport { taskHelperClosure } from '../-private/helpers';\nimport type { Task } from '../index';\n\nconst CANCEL_REASON = \"the 'cancel-all' template helper was invoked\";\n\ntype CancelAllParams = [task: Task<any, any[]>];\n\nexport function cancelHelper(args: CancelAllParams) {\n  let cancelable = args[0];\n  if (!cancelable || typeof cancelable.cancelAll !== 'function') {\n    assert(\n      `The first argument passed to the \\`cancel-all\\` helper should be a Task or TaskGroup (without quotes); you passed ${cancelable}`,\n      false,\n    );\n  }\n\n  return taskHelperClosure('cancel-all', 'cancelAll', [\n    cancelable,\n    { reason: CANCEL_REASON },\n  ]);\n}\n\nexport default helper(cancelHelper);\n","import { helper } from '@ember/component/helper';\nimport { assert } from '@ember/debug';\nimport { taskHelperClosure } from '../-private/helpers';\nimport type { Task } from '../index';\n\nfunction maybeReportError(\n  onError: (error: unknown) => void | null | undefined,\n) {\n  return function (e: unknown) {\n    if (typeof onError === 'function') {\n      onError(e);\n    } else if (onError === null) {\n      // Do nothing\n    } else {\n      assert(\n        `The onError argument passed to the \\`perform\\` helper should be a function or null; you passed ${onError}`,\n        false,\n      );\n    }\n  };\n}\n\ntype PerformParams = [task: Task<any, any[]>, ...args: any[]];\n\nexport function performHelper(args: PerformParams, hash: any) {\n  let perform = taskHelperClosure('perform', 'perform', args, hash);\n\n  if (hash && typeof hash.onError !== 'undefined') {\n    return function (...innerArgs: any[]) {\n      try {\n        let taskInstance = perform(...innerArgs);\n        return taskInstance.catch(maybeReportError(hash.onError));\n        // eslint-disable-next-line no-empty\n      } catch {\n        maybeReportError(hash.onError);\n      }\n    };\n  } else {\n    return perform;\n  }\n}\n\nexport default helper(performHelper);\n","import { helper } from '@ember/component/helper';\nimport type { Task } from '../index';\n\ntype TaskParams = [task: Task<any, any[]>, ...args: any[]];\n\nfunction taskHelper(positional: TaskParams) {\n  let [task, ...args] = positional;\n\n  // @ts-expect-errors _curry isn't typed yet\n  return task._curry(...args);\n}\n\nexport default helper(taskHelper);\n","/* eslint-disable @typescript-eslint/ban-types */\nimport { FindAll } from './-private/resources/find-all.ts';\nimport { FindRecord } from './-private/resources/find-record.ts';\nimport { Query } from './-private/resources/query.ts';\nimport { QueryRecord } from './-private/resources/query-record.ts';\n\nimport type { FindAllOptions } from './-private/resources/find-all';\nimport type { FindRecordOptions } from './-private/resources/find-record';\nimport type { QueryOptions, QueryQuery } from './-private/resources/query';\nimport type { QueryRecordOptions, QueryRecordQuery } from './-private/resources/query-record';\nimport type { Id } from './-private/resources/types';\n\ntype FindRecordThunkResult = Id | [Id] | [Id, FindRecordOptions];\n\n/**\n * Wrapper around store.findRecord\n */\nexport function findRecord<Model = unknown>(\n  destroyable: object,\n  modelName: string,\n  thunk: () => FindRecordThunkResult,\n) {\n  return FindRecord.from(destroyable, () => {\n    const reified = thunk();\n    let id: Id;\n    let options: FindRecordOptions;\n\n    if (Array.isArray(reified)) {\n      id = reified[0];\n      options = reified[1] ?? {};\n    } else {\n      id = reified as Id;\n      options = {};\n    }\n\n    return {\n      positional: [modelName, id],\n      named: {\n        options,\n      },\n    };\n    // Cast needed Until min-supported TS is 4.7\n  }) as FindRecord<Model>;\n}\n\ntype FindAllThunkResult = { options: FindAllOptions } | FindAllOptions | void;\n\n/**\n * Wrapper around store.findAll\n */\nexport function findAll<Model = unknown>(\n  destroyable: object,\n  modelName: string,\n  thunk?: () => FindAllThunkResult,\n) {\n  return FindAll.from(destroyable, () => {\n    const reified = thunk?.() || {};\n    const options = 'options' in reified ? reified.options : reified;\n\n    return {\n      positional: [modelName],\n      named: {\n        options,\n      },\n    };\n    // Cast needed Until min-supported TS is 4.7\n  }) as FindAll<Model>;\n}\n\ntype QueryThunkResult = QueryQuery | [QueryQuery] | [QueryQuery, QueryOptions];\n\n/**\n * Wrapper around store.query\n */\nexport function query<Model = unknown>(\n  destroyable: object,\n  modelName: string,\n  thunk: () => QueryThunkResult,\n) {\n  return Query.from(destroyable, () => {\n    const reified = thunk();\n\n    if (Array.isArray(reified)) {\n      const [query, options] = reified;\n\n      return {\n        positional: [modelName, query],\n        named: {\n          options: options || {},\n        },\n      };\n    }\n\n    return {\n      positional: [modelName, reified],\n      named: {\n        options: {},\n      },\n    };\n    // Cast needed Until min-supported TS is 4.7\n  }) as Query<Model>;\n}\n\ntype QueryRecordThunkResult =\n  | QueryRecordQuery\n  | [QueryRecordQuery]\n  | [QueryRecordQuery, QueryRecordOptions];\n\n/**\n * Wrapper around store.queryRecord\n */\nexport function queryRecord<Model = unknown>(\n  destroyable: object,\n  modelName: string,\n  thunk: () => QueryRecordThunkResult,\n) {\n  return QueryRecord.from(destroyable, () => {\n    const reified = thunk();\n\n    if (Array.isArray(reified)) {\n      const [query, options] = reified;\n\n      return {\n        positional: [modelName, query],\n        named: {\n          options: options || {},\n        },\n      };\n    }\n\n    return {\n      positional: [modelName, reified],\n      named: {\n        options: {},\n      },\n    };\n    // Cast needed Until min-supported TS is 4.7\n  }) as QueryRecord<Model>;\n}\n","/* eslint-disable import/extensions */\nimport { pluralize } from 'ember-inflector';\nimport makeHelper from '../lib/utils/make-helper';\n\n/**\n *\n * If you have Ember Inflector (such as if Ember Data is present),\n * pluralize a word. For example, turn \"ox\" into \"oxen\".\n *\n * Example:\n *\n * {{pluralize count myProperty}}\n * {{pluralize 1 \"oxen\"}}\n * {{pluralize myProperty}}\n * {{pluralize \"ox\"}}\n *\n * @for Ember.HTMLBars.helpers\n * @method pluralize\n * @param {Number|Property} [count] count of objects\n * @param {String|Property} word word to pluralize\n */\nexport default makeHelper(function (params, hash) {\n  let fullParams = new Array(...params);\n\n  if (fullParams.length === 2) {\n    fullParams.push({ withoutCount: hash['without-count'] });\n  }\n\n  return pluralize(...fullParams);\n});\n","/* eslint-disable import/extensions */\nimport { singularize } from 'ember-inflector';\nimport makeHelper from '../lib/utils/make-helper';\n\n/**\n *\n * If you have Ember Inflector (such as if Ember Data is present),\n * singularize a word. For example, turn \"oxen\" into \"ox\".\n *\n * Example:\n *\n * {{singularize myProperty}}\n * {{singularize \"oxen\"}}\n *\n * @for Ember.HTMLBars.helpers\n * @method singularize\n * @param {String|Property} word word to singularize\n */\nexport default makeHelper(function (params) {\n  return singularize(params[0]);\n});\n","//\n// Main\n//\n\ntype Func = (...args: any[]) => any\n\nexport interface Cache<K, V> {\n  create: CacheCreateFunc<K, V>\n}\n\ninterface CacheCreateFunc<K, V> {\n  (): DefaultCache<K, V>\n}\n\ninterface DefaultCache<K, V> {\n  get(key: K): V | undefined\n  set(key: K, value: V | undefined): void\n}\n\nexport type Serializer = (args: any[]) => string\n\nexport interface Options<F extends Func> {\n  cache?: Cache<string, ReturnType<F>>\n  serializer?: Serializer\n  strategy?: MemoizeFunc<F>\n}\n\nexport interface ResolvedOptions<F extends Func> {\n  cache: Cache<string, ReturnType<F>>\n  serializer: Serializer\n}\n\nexport interface MemoizeFunc<F extends Func> {\n  (fn: F, options?: Options<F>): F\n}\n\nexport function memoize<F extends Func>(fn: F, options?: Options<F>): F {\n  const cache = options && options.cache ? options.cache : cacheDefault\n\n  const serializer =\n    options && options.serializer ? options.serializer : serializerDefault\n\n  const strategy =\n    options && options.strategy ? options.strategy : strategyDefault\n\n  return strategy(fn, {\n    cache,\n    serializer,\n  })\n}\n\n//\n// Strategy\n//\n\nfunction isPrimitive(value: any): boolean {\n  return (\n    value == null || typeof value === 'number' || typeof value === 'boolean'\n  ) // || typeof value === \"string\" 'unsafe' primitive for our needs\n}\n\nexport type StrategyFn = <F extends Func>(\n  this: unknown,\n  fn: F,\n  cache: DefaultCache<string, ReturnType<F>>,\n  serializer: Serializer,\n  arg: any\n) => any\n\nfunction monadic<F extends Func>(\n  this: unknown,\n  fn: F,\n  cache: DefaultCache<string, ReturnType<F>>,\n  serializer: Serializer,\n  arg: any\n) {\n  const cacheKey = isPrimitive(arg) ? arg : serializer(arg)\n\n  let computedValue = cache.get(cacheKey)\n  if (typeof computedValue === 'undefined') {\n    computedValue = fn.call(this, arg)\n    cache.set(cacheKey, computedValue)\n  }\n\n  return computedValue\n}\n\nfunction variadic<F extends Func>(\n  this: unknown,\n  fn: F,\n  cache: DefaultCache<string, ReturnType<F>>,\n  serializer: Serializer\n) {\n  const args = Array.prototype.slice.call(arguments, 3)\n  const cacheKey = serializer(args)\n\n  let computedValue = cache.get(cacheKey)\n  if (typeof computedValue === 'undefined') {\n    computedValue = fn.apply(this, args)\n    cache.set(cacheKey, computedValue)\n  }\n\n  return computedValue\n}\n\nfunction assemble<F extends Func>(\n  fn: F,\n  context: unknown,\n  strategy: StrategyFn,\n  cache: DefaultCache<string, ReturnType<F>>,\n  serialize: Serializer\n): F {\n  return strategy.bind(context, fn, cache, serialize) as F\n}\n\nfunction strategyDefault<F extends Func>(\n  this: unknown,\n  fn: F,\n  options: ResolvedOptions<F>\n) {\n  const strategy = fn.length === 1 ? monadic : variadic\n\n  return assemble(\n    fn,\n    this,\n    strategy,\n    options.cache.create(),\n    options.serializer\n  )\n}\n\nfunction strategyVariadic<F extends Func>(\n  this: unknown,\n  fn: F,\n  options: ResolvedOptions<F>\n) {\n  return assemble(\n    fn,\n    this,\n    variadic,\n    options.cache.create(),\n    options.serializer\n  )\n}\n\nfunction strategyMonadic<F extends Func>(\n  this: unknown,\n  fn: F,\n  options: ResolvedOptions<F>\n) {\n  return assemble(fn, this, monadic, options.cache.create(), options.serializer)\n}\n\n//\n// Serializer\n//\n\nconst serializerDefault: Serializer = function (): string {\n  return JSON.stringify(arguments)\n}\n\n//\n// Cache\n//\n\nclass ObjectWithoutPrototypeCache {\n  private cache: Record<string, any>\n\n  constructor() {\n    this.cache = Object.create(null) as Record<string, any>\n  }\n\n  get(key: string) {\n    return this.cache[key]\n  }\n\n  set<T>(key: string, value: T): void {\n    this.cache[key] = value\n  }\n}\n\nconst cacheDefault: Cache<any, any> = {\n  create: function create() {\n    return new ObjectWithoutPrototypeCache()\n  },\n}\n\n//\n// API\n//\n\nexport interface Strategies<F extends Func> {\n  variadic: MemoizeFunc<F>\n  monadic: MemoizeFunc<F>\n}\n\nexport const strategies: Strategies<Func> = {\n  variadic: strategyVariadic as MemoizeFunc<Func>,\n  monadic: strategyMonadic as MemoizeFunc<Func>,\n}\n","/**\n * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js\n * with some tweaks\n */\nconst DATE_TIME_REGEX =\n  /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g\n\n/**\n * Parse Date time skeleton into Intl.DateTimeFormatOptions\n * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * @public\n * @param skeleton skeleton string\n */\nexport function parseDateTimeSkeleton(\n  skeleton: string\n): Intl.DateTimeFormatOptions {\n  const result: Intl.DateTimeFormatOptions = {}\n  skeleton.replace(DATE_TIME_REGEX, match => {\n    const len = match.length\n    switch (match[0]) {\n      // Era\n      case 'G':\n        result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short'\n        break\n      // Year\n      case 'y':\n        result.year = len === 2 ? '2-digit' : 'numeric'\n        break\n      case 'Y':\n      case 'u':\n      case 'U':\n      case 'r':\n        throw new RangeError(\n          '`Y/u/U/r` (year) patterns are not supported, use `y` instead'\n        )\n      // Quarter\n      case 'q':\n      case 'Q':\n        throw new RangeError('`q/Q` (quarter) patterns are not supported')\n      // Month\n      case 'M':\n      case 'L':\n        result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][\n          len - 1\n        ] as 'numeric'\n        break\n      // Week\n      case 'w':\n      case 'W':\n        throw new RangeError('`w/W` (week) patterns are not supported')\n      case 'd':\n        result.day = ['numeric', '2-digit'][len - 1] as 'numeric'\n        break\n      case 'D':\n      case 'F':\n      case 'g':\n        throw new RangeError(\n          '`D/F/g` (day) patterns are not supported, use `d` instead'\n        )\n      // Weekday\n      case 'E':\n        result.weekday = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short'\n        break\n      case 'e':\n        if (len < 4) {\n          throw new RangeError('`e..eee` (weekday) patterns are not supported')\n        }\n        result.weekday = ['short', 'long', 'narrow', 'short'][\n          len - 4\n        ] as 'short'\n        break\n      case 'c':\n        if (len < 4) {\n          throw new RangeError('`c..ccc` (weekday) patterns are not supported')\n        }\n        result.weekday = ['short', 'long', 'narrow', 'short'][\n          len - 4\n        ] as 'short'\n        break\n\n      // Period\n      case 'a': // AM, PM\n        result.hour12 = true\n        break\n      case 'b': // am, pm, noon, midnight\n      case 'B': // flexible day periods\n        throw new RangeError(\n          '`b/B` (period) patterns are not supported, use `a` instead'\n        )\n      // Hour\n      case 'h':\n        result.hourCycle = 'h12'\n        result.hour = ['numeric', '2-digit'][len - 1] as 'numeric'\n        break\n      case 'H':\n        result.hourCycle = 'h23'\n        result.hour = ['numeric', '2-digit'][len - 1] as 'numeric'\n        break\n      case 'K':\n        result.hourCycle = 'h11'\n        result.hour = ['numeric', '2-digit'][len - 1] as 'numeric'\n        break\n      case 'k':\n        result.hourCycle = 'h24'\n        result.hour = ['numeric', '2-digit'][len - 1] as 'numeric'\n        break\n      case 'j':\n      case 'J':\n      case 'C':\n        throw new RangeError(\n          '`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead'\n        )\n      // Minute\n      case 'm':\n        result.minute = ['numeric', '2-digit'][len - 1] as 'numeric'\n        break\n      // Second\n      case 's':\n        result.second = ['numeric', '2-digit'][len - 1] as 'numeric'\n        break\n      case 'S':\n      case 'A':\n        throw new RangeError(\n          '`S/A` (second) patterns are not supported, use `s` instead'\n        )\n      // Zone\n      case 'z': // 1..3, 4: specific non-location format\n        result.timeZoneName = len < 4 ? 'short' : 'long'\n        break\n      case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n      case 'O': // 1, 4: milliseconds in day short, long\n      case 'v': // 1, 4: generic non-location format\n      case 'V': // 1, 2, 3, 4: time zone ID or city\n      case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n      case 'x': // 1, 2, 3, 4: The ISO8601 varios formats\n        throw new RangeError(\n          '`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead'\n        )\n    }\n    return ''\n  })\n  return result\n}\n","// @generated from regex-gen.ts\nexport const WHITE_SPACE_REGEX: RegExp = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/i\n","import type {NumberFormatOptions} from '#packages/ecma402-abstract/types/number.js'\nimport {WHITE_SPACE_REGEX} from '#packages/icu-skeleton-parser/regex.generated.js'\n\nexport interface ExtendedNumberFormatOptions extends NumberFormatOptions {\n  scale?: number\n}\nexport interface NumberSkeletonToken {\n  stem: string\n  options: string[]\n}\n\nexport function parseNumberSkeletonFromString(\n  skeleton: string\n): NumberSkeletonToken[] {\n  if (skeleton.length === 0) {\n    throw new Error('Number skeleton cannot be empty')\n  }\n  // Parse the skeleton\n  const stringTokens = skeleton\n    .split(WHITE_SPACE_REGEX)\n    .filter(x => x.length > 0)\n\n  const tokens: NumberSkeletonToken[] = []\n  for (const stringToken of stringTokens) {\n    let stemAndOptions = stringToken.split('/')\n    if (stemAndOptions.length === 0) {\n      throw new Error('Invalid number skeleton')\n    }\n\n    const [stem, ...options] = stemAndOptions\n    for (const option of options) {\n      if (option.length === 0) {\n        throw new Error('Invalid number skeleton')\n      }\n    }\n\n    tokens.push({stem, options})\n  }\n  return tokens\n}\n\nfunction icuUnitToEcma(unit: string): ExtendedNumberFormatOptions['unit'] {\n  return unit.replace(/^(.*?)-/, '') as ExtendedNumberFormatOptions['unit']\n}\n\nconst FRACTION_PRECISION_REGEX = /^\\.(?:(0+)(\\*)?|(#+)|(0+)(#+))$/g\nconst SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\\+|#+)?[rs]?$/g\nconst INTEGER_WIDTH_REGEX = /(\\*)(0+)|(#+)(0+)|(0+)/g\nconst CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/\n\nfunction parseSignificantPrecision(str: string): ExtendedNumberFormatOptions {\n  const result: ExtendedNumberFormatOptions = {}\n  if (str[str.length - 1] === 'r') {\n    result.roundingPriority = 'morePrecision'\n  } else if (str[str.length - 1] === 's') {\n    result.roundingPriority = 'lessPrecision'\n  }\n  str.replace(\n    SIGNIFICANT_PRECISION_REGEX,\n    function (_: string, g1: string, g2: string | number) {\n      // @@@ case\n      if (typeof g2 !== 'string') {\n        result.minimumSignificantDigits = g1.length\n        result.maximumSignificantDigits = g1.length\n      }\n      // @@@+ case\n      else if (g2 === '+') {\n        result.minimumSignificantDigits = g1.length\n      }\n      // .### case\n      else if (g1[0] === '#') {\n        result.maximumSignificantDigits = g1.length\n      }\n      // .@@## or .@@@ case\n      else {\n        result.minimumSignificantDigits = g1.length\n        result.maximumSignificantDigits =\n          g1.length + (typeof g2 === 'string' ? g2.length : 0)\n      }\n      return ''\n    }\n  )\n  return result\n}\n\nfunction parseSign(str: string): ExtendedNumberFormatOptions | undefined {\n  switch (str) {\n    case 'sign-auto':\n      return {\n        signDisplay: 'auto',\n      }\n    case 'sign-accounting':\n    case '()':\n      return {\n        currencySign: 'accounting',\n      }\n    case 'sign-always':\n    case '+!':\n      return {\n        signDisplay: 'always',\n      }\n    case 'sign-accounting-always':\n    case '()!':\n      return {\n        signDisplay: 'always',\n        currencySign: 'accounting',\n      }\n    case 'sign-except-zero':\n    case '+?':\n      return {\n        signDisplay: 'exceptZero',\n      }\n    case 'sign-accounting-except-zero':\n    case '()?':\n      return {\n        signDisplay: 'exceptZero',\n        currencySign: 'accounting',\n      }\n    case 'sign-never':\n    case '+_':\n      return {\n        signDisplay: 'never',\n      }\n  }\n}\n\nfunction parseConciseScientificAndEngineeringStem(\n  stem: string\n): ExtendedNumberFormatOptions | undefined {\n  // Engineering\n  let result: ExtendedNumberFormatOptions | undefined\n  if (stem[0] === 'E' && stem[1] === 'E') {\n    result = {\n      notation: 'engineering',\n    }\n    stem = stem.slice(2)\n  } else if (stem[0] === 'E') {\n    result = {\n      notation: 'scientific',\n    }\n    stem = stem.slice(1)\n  }\n  if (result) {\n    const signDisplay = stem.slice(0, 2)\n    if (signDisplay === '+!') {\n      result.signDisplay = 'always'\n      stem = stem.slice(2)\n    } else if (signDisplay === '+?') {\n      result.signDisplay = 'exceptZero'\n      stem = stem.slice(2)\n    }\n    if (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) {\n      throw new Error('Malformed concise eng/scientific notation')\n    }\n    result.minimumIntegerDigits = stem.length\n  }\n  return result\n}\n\nfunction parseNotationOptions(opt: string): ExtendedNumberFormatOptions {\n  const result: ExtendedNumberFormatOptions = {}\n  const signOpts = parseSign(opt)\n  if (signOpts) {\n    return signOpts\n  }\n  return result\n}\n\n/**\n * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options\n */\nexport function parseNumberSkeleton(\n  tokens: NumberSkeletonToken[]\n): ExtendedNumberFormatOptions {\n  let result: ExtendedNumberFormatOptions = {}\n  for (const token of tokens) {\n    switch (token.stem) {\n      case 'percent':\n      case '%':\n        result.style = 'percent'\n        continue\n      case '%x100':\n        result.style = 'percent'\n        result.scale = 100\n        continue\n      case 'currency':\n        result.style = 'currency'\n        result.currency = token.options[0]\n        continue\n      case 'group-off':\n      case ',_':\n        result.useGrouping = false\n        continue\n      case 'precision-integer':\n      case '.':\n        result.maximumFractionDigits = 0\n        continue\n      case 'measure-unit':\n      case 'unit':\n        result.style = 'unit'\n        result.unit = icuUnitToEcma(token.options[0])\n        continue\n      case 'compact-short':\n      case 'K':\n        result.notation = 'compact'\n        result.compactDisplay = 'short'\n        continue\n      case 'compact-long':\n      case 'KK':\n        result.notation = 'compact'\n        result.compactDisplay = 'long'\n        continue\n      case 'scientific':\n        result = {\n          ...result,\n          notation: 'scientific',\n          ...token.options.reduce(\n            (all, opt) => ({...all, ...parseNotationOptions(opt)}),\n            {}\n          ),\n        }\n        continue\n      case 'engineering':\n        result = {\n          ...result,\n          notation: 'engineering',\n          ...token.options.reduce(\n            (all, opt) => ({...all, ...parseNotationOptions(opt)}),\n            {}\n          ),\n        }\n        continue\n      case 'notation-simple':\n        result.notation = 'standard'\n        continue\n      // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h\n      case 'unit-width-narrow':\n        result.currencyDisplay = 'narrowSymbol'\n        result.unitDisplay = 'narrow'\n        continue\n      case 'unit-width-short':\n        result.currencyDisplay = 'code'\n        result.unitDisplay = 'short'\n        continue\n      case 'unit-width-full-name':\n        result.currencyDisplay = 'name'\n        result.unitDisplay = 'long'\n        continue\n      case 'unit-width-iso-code':\n        result.currencyDisplay = 'symbol'\n        continue\n      case 'scale':\n        result.scale = parseFloat(token.options[0])\n        continue\n      case 'rounding-mode-floor':\n        result.roundingMode = 'floor'\n        continue\n      case 'rounding-mode-ceiling':\n        result.roundingMode = 'ceil'\n        continue\n      case 'rounding-mode-down':\n        result.roundingMode = 'trunc'\n        continue\n      case 'rounding-mode-up':\n        result.roundingMode = 'expand'\n        continue\n      case 'rounding-mode-half-even':\n        result.roundingMode = 'halfEven'\n        continue\n      case 'rounding-mode-half-down':\n        result.roundingMode = 'halfTrunc'\n        continue\n      case 'rounding-mode-half-up':\n        result.roundingMode = 'halfExpand'\n        continue\n      // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n      case 'integer-width':\n        if (token.options.length > 1) {\n          throw new RangeError(\n            'integer-width stems only accept a single optional option'\n          )\n        }\n        token.options[0].replace(\n          INTEGER_WIDTH_REGEX,\n          function (\n            _: string,\n            g1: string,\n            g2: string,\n            g3: string,\n            g4: string,\n            g5: string\n          ) {\n            if (g1) {\n              result.minimumIntegerDigits = g2.length\n            } else if (g3 && g4) {\n              throw new Error(\n                'We currently do not support maximum integer digits'\n              )\n            } else if (g5) {\n              throw new Error(\n                'We currently do not support exact integer digits'\n              )\n            }\n            return ''\n          }\n        )\n        continue\n    }\n    // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n    if (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) {\n      result.minimumIntegerDigits = token.stem.length\n      continue\n    }\n    if (FRACTION_PRECISION_REGEX.test(token.stem)) {\n      // Precision\n      // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#fraction-precision\n      // precision-integer case\n      if (token.options.length > 1) {\n        throw new RangeError(\n          'Fraction-precision stems only accept a single optional option'\n        )\n      }\n      token.stem.replace(\n        FRACTION_PRECISION_REGEX,\n        function (\n          _: string,\n          g1: string,\n          g2: string | number,\n          g3: string,\n          g4: string,\n          g5: string\n        ) {\n          // .000* case (before ICU67 it was .000+)\n          if (g2 === '*') {\n            result.minimumFractionDigits = g1.length\n          }\n          // .### case\n          else if (g3 && g3[0] === '#') {\n            result.maximumFractionDigits = g3.length\n          }\n          // .00## case\n          else if (g4 && g5) {\n            result.minimumFractionDigits = g4.length\n            result.maximumFractionDigits = g4.length + g5.length\n          } else {\n            result.minimumFractionDigits = g1.length\n            result.maximumFractionDigits = g1.length\n          }\n          return ''\n        }\n      )\n\n      const opt = token.options[0]\n      // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#trailing-zero-display\n      if (opt === 'w') {\n        result = {...result, trailingZeroDisplay: 'stripIfInteger'}\n      } else if (opt) {\n        result = {...result, ...parseSignificantPrecision(opt)}\n      }\n      continue\n    }\n    // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#significant-digits-precision\n    if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {\n      result = {...result, ...parseSignificantPrecision(token.stem)}\n      continue\n    }\n    const signOpts = parseSign(token.stem)\n    if (signOpts) {\n      result = {...result, ...signOpts}\n    }\n    const conciseScientificAndEngineeringOpts =\n      parseConciseScientificAndEngineeringStem(token.stem)\n    if (conciseScientificAndEngineeringOpts) {\n      result = {...result, ...conciseScientificAndEngineeringOpts}\n    }\n  }\n  return result\n}\n","import {type Location} from '#packages/icu-messageformat-parser/types.js'\n\nexport interface ParserError {\n  kind: ErrorKind\n  message: string\n  location: Location\n}\n\nexport enum ErrorKind {\n  /** Argument is unclosed (e.g. `{0`) */\n  EXPECT_ARGUMENT_CLOSING_BRACE = 1,\n  /** Argument is empty (e.g. `{}`). */\n  EMPTY_ARGUMENT = 2,\n  /** Argument is malformed (e.g. `{foo!}``) */\n  MALFORMED_ARGUMENT = 3,\n  /** Expect an argument type (e.g. `{foo,}`) */\n  EXPECT_ARGUMENT_TYPE = 4,\n  /** Unsupported argument type (e.g. `{foo,foo}`) */\n  INVALID_ARGUMENT_TYPE = 5,\n  /** Expect an argument style (e.g. `{foo, number, }`) */\n  EXPECT_ARGUMENT_STYLE = 6,\n  /** The number skeleton is invalid. */\n  INVALID_NUMBER_SKELETON = 7,\n  /** The date time skeleton is invalid. */\n  INVALID_DATE_TIME_SKELETON = 8,\n  /** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */\n  EXPECT_NUMBER_SKELETON = 9,\n  /** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */\n  EXPECT_DATE_TIME_SKELETON = 10,\n  /** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */\n  UNCLOSED_QUOTE_IN_ARGUMENT_STYLE = 11,\n  /** Missing select argument options (e.g. `{foo, select}`) */\n  EXPECT_SELECT_ARGUMENT_OPTIONS = 12,\n\n  /** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */\n  EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE = 13,\n  /** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */\n  INVALID_PLURAL_ARGUMENT_OFFSET_VALUE = 14,\n\n  /** Expecting a selector in `select` argument (e.g `{foo, select}`) */\n  EXPECT_SELECT_ARGUMENT_SELECTOR = 15,\n  /** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */\n  EXPECT_PLURAL_ARGUMENT_SELECTOR = 16,\n\n  /** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */\n  EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT = 17,\n  /**\n   * Expecting a message fragment after the `plural` or `selectordinal` selector\n   * (e.g. `{foo, plural, one}`)\n   */\n  EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT = 18,\n\n  /** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */\n  INVALID_PLURAL_ARGUMENT_SELECTOR = 19,\n\n  /**\n   * Duplicate selectors in `plural` or `selectordinal` argument.\n   * (e.g. {foo, plural, one {#} one {#}})\n   */\n  DUPLICATE_PLURAL_ARGUMENT_SELECTOR = 20,\n  /** Duplicate selectors in `select` argument.\n   * (e.g. {foo, select, apple {apple} apple {apple}})\n   */\n  DUPLICATE_SELECT_ARGUMENT_SELECTOR = 21,\n\n  /** Plural or select argument option must have `other` clause. */\n  MISSING_OTHER_CLAUSE = 22,\n\n  /** The tag is malformed. (e.g. `<bold!>foo</bold!>) */\n  INVALID_TAG = 23,\n  /** The tag name is invalid. (e.g. `<123>foo</123>`) */\n  INVALID_TAG_NAME = 25,\n  /** The closing tag does not match the opening tag. (e.g. `<bold>foo</italic>`) */\n  UNMATCHED_CLOSING_TAG = 26,\n  /** The opening tag has unmatched closing tag. (e.g. `<bold>foo`) */\n  UNCLOSED_TAG = 27,\n}\n","import type {NumberFormatOptions} from '#packages/ecma402-abstract/types/number.js'\nimport {type NumberSkeletonToken} from '@formatjs/icu-skeleton-parser'\n\nexport interface ExtendedNumberFormatOptions extends NumberFormatOptions {\n  scale?: number\n}\n\nexport enum TYPE {\n  /**\n   * Raw text\n   */\n  literal,\n  /**\n   * Variable w/o any format, e.g `var` in `this is a {var}`\n   */\n  argument,\n  /**\n   * Variable w/ number format\n   */\n  number,\n  /**\n   * Variable w/ date format\n   */\n  date,\n  /**\n   * Variable w/ time format\n   */\n  time,\n  /**\n   * Variable w/ select format\n   */\n  select,\n  /**\n   * Variable w/ plural format\n   */\n  plural,\n  /**\n   * Only possible within plural argument.\n   * This is the `#` symbol that will be substituted with the count.\n   */\n  pound,\n  /**\n   * XML-like tag\n   */\n  tag,\n}\n\nexport enum SKELETON_TYPE {\n  number,\n  dateTime,\n}\n\nexport interface LocationDetails {\n  offset: number\n  line: number\n  column: number\n}\nexport interface Location {\n  start: LocationDetails\n  end: LocationDetails\n}\n\nexport interface BaseElement<T extends TYPE> {\n  type: T\n  value: string\n  location?: Location\n}\n\nexport type LiteralElement = BaseElement<TYPE.literal>\nexport type ArgumentElement = BaseElement<TYPE.argument>\nexport interface TagElement extends BaseElement<TYPE.tag> {\n  children: MessageFormatElement[]\n}\n\nexport interface SimpleFormatElement<\n  T extends TYPE,\n  S extends Skeleton,\n> extends BaseElement<T> {\n  style?: string | S | null\n}\n\nexport type NumberElement = SimpleFormatElement<TYPE.number, NumberSkeleton>\nexport type DateElement = SimpleFormatElement<TYPE.date, DateTimeSkeleton>\nexport type TimeElement = SimpleFormatElement<TYPE.time, DateTimeSkeleton>\n\nexport type ValidPluralRule =\n  | 'zero'\n  | 'one'\n  | 'two'\n  | 'few'\n  | 'many'\n  | 'other'\n  | string\n\nexport interface PluralOrSelectOption {\n  value: MessageFormatElement[]\n  location?: Location\n}\n\nexport interface SelectElement extends BaseElement<TYPE.select> {\n  options: Record<string, PluralOrSelectOption>\n}\n\nexport interface PluralElement extends BaseElement<TYPE.plural> {\n  options: Record<ValidPluralRule, PluralOrSelectOption>\n  offset: number\n  pluralType: Intl.PluralRulesOptions['type']\n}\n\nexport interface PoundElement {\n  type: TYPE.pound\n  location?: Location\n}\n\nexport type MessageFormatElement =\n  | ArgumentElement\n  | DateElement\n  | LiteralElement\n  | NumberElement\n  | PluralElement\n  | PoundElement\n  | SelectElement\n  | TagElement\n  | TimeElement\n\nexport interface NumberSkeleton {\n  type: SKELETON_TYPE.number\n  tokens: NumberSkeletonToken[]\n  location?: Location\n  parsedOptions: ExtendedNumberFormatOptions\n}\n\nexport interface DateTimeSkeleton {\n  type: SKELETON_TYPE.dateTime\n  pattern: string\n  location?: Location\n  parsedOptions: Intl.DateTimeFormatOptions\n}\n\nexport type Skeleton = NumberSkeleton | DateTimeSkeleton\n\n/**\n * Type Guards\n */\nexport function isLiteralElement(\n  el: MessageFormatElement\n): el is LiteralElement {\n  return el.type === TYPE.literal\n}\nexport function isArgumentElement(\n  el: MessageFormatElement\n): el is ArgumentElement {\n  return el.type === TYPE.argument\n}\nexport function isNumberElement(el: MessageFormatElement): el is NumberElement {\n  return el.type === TYPE.number\n}\nexport function isDateElement(el: MessageFormatElement): el is DateElement {\n  return el.type === TYPE.date\n}\nexport function isTimeElement(el: MessageFormatElement): el is TimeElement {\n  return el.type === TYPE.time\n}\nexport function isSelectElement(el: MessageFormatElement): el is SelectElement {\n  return el.type === TYPE.select\n}\nexport function isPluralElement(el: MessageFormatElement): el is PluralElement {\n  return el.type === TYPE.plural\n}\nexport function isPoundElement(el: MessageFormatElement): el is PoundElement {\n  return el.type === TYPE.pound\n}\nexport function isTagElement(el: MessageFormatElement): el is TagElement {\n  return el.type === TYPE.tag\n}\nexport function isNumberSkeleton(\n  el: NumberElement['style'] | Skeleton\n): el is NumberSkeleton {\n  return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.number)\n}\nexport function isDateTimeSkeleton(\n  el?: DateElement['style'] | TimeElement['style'] | Skeleton\n): el is DateTimeSkeleton {\n  return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.dateTime)\n}\n\nexport function createLiteralElement(value: string): LiteralElement {\n  return {\n    type: TYPE.literal,\n    value,\n  }\n}\n\nexport function createNumberElement(\n  value: string,\n  style?: string | null\n): NumberElement {\n  return {\n    type: TYPE.number,\n    value,\n    style,\n  }\n}\n","// @generated from time-data-gen.ts\n// prettier-ignore\nexport const timeData: Record<string, string[]> = {\n  \"001\": [\n    \"H\",\n    \"h\"\n  ],\n  \"419\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"AC\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"AD\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"AE\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"AF\": [\n    \"H\",\n    \"hb\",\n    \"hB\",\n    \"h\"\n  ],\n  \"AG\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"AI\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"AL\": [\n    \"h\",\n    \"H\",\n    \"hB\"\n  ],\n  \"AM\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"AO\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"AR\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"AS\": [\n    \"h\",\n    \"H\"\n  ],\n  \"AT\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"AU\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"AW\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"AX\": [\n    \"H\"\n  ],\n  \"AZ\": [\n    \"H\",\n    \"hB\",\n    \"h\"\n  ],\n  \"BA\": [\n    \"H\",\n    \"hB\",\n    \"h\"\n  ],\n  \"BB\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"BD\": [\n    \"h\",\n    \"hB\",\n    \"H\"\n  ],\n  \"BE\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"BF\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"BG\": [\n    \"H\",\n    \"hB\",\n    \"h\"\n  ],\n  \"BH\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"BI\": [\n    \"H\",\n    \"h\"\n  ],\n  \"BJ\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"BL\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"BM\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"BN\": [\n    \"hb\",\n    \"hB\",\n    \"h\",\n    \"H\"\n  ],\n  \"BO\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"BQ\": [\n    \"H\"\n  ],\n  \"BR\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"BS\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"BT\": [\n    \"h\",\n    \"H\"\n  ],\n  \"BW\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"BY\": [\n    \"H\",\n    \"h\"\n  ],\n  \"BZ\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"CA\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"CC\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"CD\": [\n    \"hB\",\n    \"H\"\n  ],\n  \"CF\": [\n    \"H\",\n    \"h\",\n    \"hB\"\n  ],\n  \"CG\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"CH\": [\n    \"H\",\n    \"hB\",\n    \"h\"\n  ],\n  \"CI\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"CK\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"CL\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"CM\": [\n    \"H\",\n    \"h\",\n    \"hB\"\n  ],\n  \"CN\": [\n    \"H\",\n    \"hB\",\n    \"hb\",\n    \"h\"\n  ],\n  \"CO\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"CP\": [\n    \"H\"\n  ],\n  \"CR\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"CU\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"CV\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"CW\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"CX\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"CY\": [\n    \"h\",\n    \"H\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"CZ\": [\n    \"H\"\n  ],\n  \"DE\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"DG\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"DJ\": [\n    \"h\",\n    \"H\"\n  ],\n  \"DK\": [\n    \"H\"\n  ],\n  \"DM\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"DO\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"DZ\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"EA\": [\n    \"H\",\n    \"h\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"EC\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"EE\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"EG\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"EH\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"ER\": [\n    \"h\",\n    \"H\"\n  ],\n  \"ES\": [\n    \"H\",\n    \"hB\",\n    \"h\",\n    \"hb\"\n  ],\n  \"ET\": [\n    \"hB\",\n    \"hb\",\n    \"h\",\n    \"H\"\n  ],\n  \"FI\": [\n    \"H\"\n  ],\n  \"FJ\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"FK\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"FM\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"FO\": [\n    \"H\",\n    \"h\"\n  ],\n  \"FR\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"GA\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"GB\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"GD\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"GE\": [\n    \"H\",\n    \"hB\",\n    \"h\"\n  ],\n  \"GF\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"GG\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"GH\": [\n    \"h\",\n    \"H\"\n  ],\n  \"GI\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"GL\": [\n    \"H\",\n    \"h\"\n  ],\n  \"GM\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"GN\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"GP\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"GQ\": [\n    \"H\",\n    \"hB\",\n    \"h\",\n    \"hb\"\n  ],\n  \"GR\": [\n    \"h\",\n    \"H\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"GS\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"GT\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"GU\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"GW\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"GY\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"HK\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"HN\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"HR\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"HU\": [\n    \"H\",\n    \"h\"\n  ],\n  \"IC\": [\n    \"H\",\n    \"h\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"ID\": [\n    \"H\"\n  ],\n  \"IE\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"IL\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"IM\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"IN\": [\n    \"h\",\n    \"H\"\n  ],\n  \"IO\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"IQ\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"IR\": [\n    \"hB\",\n    \"H\"\n  ],\n  \"IS\": [\n    \"H\"\n  ],\n  \"IT\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"JE\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"JM\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"JO\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"JP\": [\n    \"H\",\n    \"K\",\n    \"h\"\n  ],\n  \"KE\": [\n    \"hB\",\n    \"hb\",\n    \"H\",\n    \"h\"\n  ],\n  \"KG\": [\n    \"H\",\n    \"h\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"KH\": [\n    \"hB\",\n    \"h\",\n    \"H\",\n    \"hb\"\n  ],\n  \"KI\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"KM\": [\n    \"H\",\n    \"h\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"KN\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"KP\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"KR\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"KW\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"KY\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"KZ\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"LA\": [\n    \"H\",\n    \"hb\",\n    \"hB\",\n    \"h\"\n  ],\n  \"LB\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"LC\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"LI\": [\n    \"H\",\n    \"hB\",\n    \"h\"\n  ],\n  \"LK\": [\n    \"H\",\n    \"h\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"LR\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"LS\": [\n    \"h\",\n    \"H\"\n  ],\n  \"LT\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"LU\": [\n    \"H\",\n    \"h\",\n    \"hB\"\n  ],\n  \"LV\": [\n    \"H\",\n    \"hB\",\n    \"hb\",\n    \"h\"\n  ],\n  \"LY\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"MA\": [\n    \"H\",\n    \"h\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"MC\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"MD\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"ME\": [\n    \"H\",\n    \"hB\",\n    \"h\"\n  ],\n  \"MF\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"MG\": [\n    \"H\",\n    \"h\"\n  ],\n  \"MH\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"MK\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"ML\": [\n    \"H\"\n  ],\n  \"MM\": [\n    \"hB\",\n    \"hb\",\n    \"H\",\n    \"h\"\n  ],\n  \"MN\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"MO\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"MP\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"MQ\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"MR\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"MS\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"MT\": [\n    \"H\",\n    \"h\"\n  ],\n  \"MU\": [\n    \"H\",\n    \"h\"\n  ],\n  \"MV\": [\n    \"H\",\n    \"h\"\n  ],\n  \"MW\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"MX\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"MY\": [\n    \"hb\",\n    \"hB\",\n    \"h\",\n    \"H\"\n  ],\n  \"MZ\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"NA\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"NC\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"NE\": [\n    \"H\"\n  ],\n  \"NF\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"NG\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"NI\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"NL\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"NO\": [\n    \"H\",\n    \"h\"\n  ],\n  \"NP\": [\n    \"H\",\n    \"h\",\n    \"hB\"\n  ],\n  \"NR\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"NU\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"NZ\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"OM\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"PA\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"PE\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"PF\": [\n    \"H\",\n    \"h\",\n    \"hB\"\n  ],\n  \"PG\": [\n    \"h\",\n    \"H\"\n  ],\n  \"PH\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"PK\": [\n    \"h\",\n    \"hB\",\n    \"H\"\n  ],\n  \"PL\": [\n    \"H\",\n    \"h\"\n  ],\n  \"PM\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"PN\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"PR\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"PS\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"PT\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"PW\": [\n    \"h\",\n    \"H\"\n  ],\n  \"PY\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"QA\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"RE\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"RO\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"RS\": [\n    \"H\",\n    \"hB\",\n    \"h\"\n  ],\n  \"RU\": [\n    \"H\"\n  ],\n  \"RW\": [\n    \"H\",\n    \"h\"\n  ],\n  \"SA\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"SB\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"SC\": [\n    \"H\",\n    \"h\",\n    \"hB\"\n  ],\n  \"SD\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"SE\": [\n    \"H\"\n  ],\n  \"SG\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"SH\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"SI\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"SJ\": [\n    \"H\"\n  ],\n  \"SK\": [\n    \"H\"\n  ],\n  \"SL\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"SM\": [\n    \"H\",\n    \"h\",\n    \"hB\"\n  ],\n  \"SN\": [\n    \"H\",\n    \"h\",\n    \"hB\"\n  ],\n  \"SO\": [\n    \"h\",\n    \"H\"\n  ],\n  \"SR\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"SS\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"ST\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"SV\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"SX\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"SY\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"SZ\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"TA\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"TC\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"TD\": [\n    \"h\",\n    \"H\",\n    \"hB\"\n  ],\n  \"TF\": [\n    \"H\",\n    \"h\",\n    \"hB\"\n  ],\n  \"TG\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"TH\": [\n    \"H\",\n    \"h\"\n  ],\n  \"TJ\": [\n    \"H\",\n    \"h\"\n  ],\n  \"TL\": [\n    \"H\",\n    \"hB\",\n    \"hb\",\n    \"h\"\n  ],\n  \"TM\": [\n    \"H\",\n    \"h\"\n  ],\n  \"TN\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"TO\": [\n    \"h\",\n    \"H\"\n  ],\n  \"TR\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"TT\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"TW\": [\n    \"hB\",\n    \"hb\",\n    \"h\",\n    \"H\"\n  ],\n  \"TZ\": [\n    \"hB\",\n    \"hb\",\n    \"H\",\n    \"h\"\n  ],\n  \"UA\": [\n    \"H\",\n    \"hB\",\n    \"h\"\n  ],\n  \"UG\": [\n    \"hB\",\n    \"hb\",\n    \"H\",\n    \"h\"\n  ],\n  \"UM\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"US\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"UY\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"UZ\": [\n    \"H\",\n    \"hB\",\n    \"h\"\n  ],\n  \"VA\": [\n    \"H\",\n    \"h\",\n    \"hB\"\n  ],\n  \"VC\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"VE\": [\n    \"h\",\n    \"H\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"VG\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"VI\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"VN\": [\n    \"H\",\n    \"h\"\n  ],\n  \"VU\": [\n    \"h\",\n    \"H\"\n  ],\n  \"WF\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"WS\": [\n    \"h\",\n    \"H\"\n  ],\n  \"XK\": [\n    \"H\",\n    \"hB\",\n    \"h\"\n  ],\n  \"YE\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"YT\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"ZA\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"ZM\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"ZW\": [\n    \"H\",\n    \"h\"\n  ],\n  \"af-ZA\": [\n    \"H\",\n    \"h\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"ar-001\": [\n    \"h\",\n    \"hB\",\n    \"hb\",\n    \"H\"\n  ],\n  \"ca-ES\": [\n    \"H\",\n    \"h\",\n    \"hB\"\n  ],\n  \"en-001\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"en-HK\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"en-IL\": [\n    \"H\",\n    \"h\",\n    \"hb\",\n    \"hB\"\n  ],\n  \"en-MY\": [\n    \"h\",\n    \"hb\",\n    \"H\",\n    \"hB\"\n  ],\n  \"es-BR\": [\n    \"H\",\n    \"h\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"es-ES\": [\n    \"H\",\n    \"h\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"es-GQ\": [\n    \"H\",\n    \"h\",\n    \"hB\",\n    \"hb\"\n  ],\n  \"fr-CA\": [\n    \"H\",\n    \"h\",\n    \"hB\"\n  ],\n  \"gl-ES\": [\n    \"H\",\n    \"h\",\n    \"hB\"\n  ],\n  \"gu-IN\": [\n    \"hB\",\n    \"hb\",\n    \"h\",\n    \"H\"\n  ],\n  \"hi-IN\": [\n    \"hB\",\n    \"h\",\n    \"H\"\n  ],\n  \"it-CH\": [\n    \"H\",\n    \"h\",\n    \"hB\"\n  ],\n  \"it-IT\": [\n    \"H\",\n    \"h\",\n    \"hB\"\n  ],\n  \"kn-IN\": [\n    \"hB\",\n    \"h\",\n    \"H\"\n  ],\n  \"ku-SY\": [\n    \"H\",\n    \"hB\"\n  ],\n  \"ml-IN\": [\n    \"hB\",\n    \"h\",\n    \"H\"\n  ],\n  \"mr-IN\": [\n    \"hB\",\n    \"hb\",\n    \"h\",\n    \"H\"\n  ],\n  \"pa-IN\": [\n    \"hB\",\n    \"hb\",\n    \"h\",\n    \"H\"\n  ],\n  \"ta-IN\": [\n    \"hB\",\n    \"h\",\n    \"hb\",\n    \"H\"\n  ],\n  \"te-IN\": [\n    \"hB\",\n    \"h\",\n    \"H\"\n  ],\n  \"zu-ZA\": [\n    \"H\",\n    \"hB\",\n    \"hb\",\n    \"h\"\n  ]\n};\n","import {timeData} from '#packages/icu-messageformat-parser/time-data.generated.js'\n\n/**\n * Returns the best matching date time pattern if a date time skeleton\n * pattern is provided with a locale. Follows the Unicode specification:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#table-mapping-requested-time-skeletons-to-patterns\n * @param skeleton date time skeleton pattern that possibly includes j, J or C\n * @param locale\n */\nexport function getBestPattern(skeleton: string, locale: Intl.Locale): string {\n  let skeletonCopy = ''\n  for (let patternPos = 0; patternPos < skeleton.length; patternPos++) {\n    const patternChar = skeleton.charAt(patternPos)\n\n    if (patternChar === 'j') {\n      let extraLength = 0\n      while (\n        patternPos + 1 < skeleton.length &&\n        skeleton.charAt(patternPos + 1) === patternChar\n      ) {\n        extraLength++\n        patternPos++\n      }\n\n      let hourLen = 1 + (extraLength & 1)\n      let dayPeriodLen = extraLength < 2 ? 1 : 3 + (extraLength >> 1)\n      let dayPeriodChar = 'a'\n      let hourChar = getDefaultHourSymbolFromLocale(locale)\n\n      if (hourChar == 'H' || hourChar == 'k') {\n        dayPeriodLen = 0\n      }\n\n      while (dayPeriodLen-- > 0) {\n        skeletonCopy += dayPeriodChar\n      }\n      while (hourLen-- > 0) {\n        skeletonCopy = hourChar + skeletonCopy\n      }\n    } else if (patternChar === 'J') {\n      skeletonCopy += 'H'\n    } else {\n      skeletonCopy += patternChar\n    }\n  }\n\n  return skeletonCopy\n}\n\n/**\n * Maps the [hour cycle type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle)\n * of the given `locale` to the corresponding time pattern.\n * @param locale\n */\nfunction getDefaultHourSymbolFromLocale(locale: Intl.Locale): string {\n  let hourCycle = locale.hourCycle\n\n  if (\n    hourCycle === undefined &&\n    // @ts-ignore hourCycle(s) is not identified yet\n    locale.hourCycles &&\n    // @ts-ignore\n    locale.hourCycles.length\n  ) {\n    // @ts-ignore\n    hourCycle = locale.hourCycles[0]\n  }\n\n  if (hourCycle) {\n    switch (hourCycle) {\n      case 'h24':\n        return 'k'\n      case 'h23':\n        return 'H'\n      case 'h12':\n        return 'h'\n      case 'h11':\n        return 'K'\n      default:\n        throw new Error('Invalid hourCycle')\n    }\n  }\n\n  // TODO: Once hourCycle is fully supported remove the following with data generation\n  const languageTag = locale.language\n  let regionTag: string | undefined\n  if (languageTag !== 'root') {\n    regionTag = locale.maximize().region\n  }\n  const hourCycles =\n    timeData[regionTag || ''] ||\n    timeData[languageTag || ''] ||\n    timeData[`${languageTag}-001`] ||\n    timeData['001']\n  return hourCycles[0]\n}\n","import {\n  ErrorKind,\n  type ParserError,\n} from '#packages/icu-messageformat-parser/error.js'\nimport {\n  type DateTimeSkeleton,\n  type LiteralElement,\n  type Location,\n  type MessageFormatElement,\n  type NumberSkeleton,\n  type PluralOrSelectOption,\n  SKELETON_TYPE,\n  type TagElement,\n  TYPE,\n} from '#packages/icu-messageformat-parser/types.js'\nimport {SPACE_SEPARATOR_REGEX} from '#packages/icu-messageformat-parser/regex.generated.js'\nimport {\n  type NumberSkeletonToken,\n  parseNumberSkeleton,\n  parseNumberSkeletonFromString,\n  parseDateTimeSkeleton,\n} from '@formatjs/icu-skeleton-parser'\nimport {getBestPattern} from '#packages/icu-messageformat-parser/date-time-pattern-generator.js'\n\nconst SPACE_SEPARATOR_START_REGEX = new RegExp(\n  `^${SPACE_SEPARATOR_REGEX.source}*`\n)\nconst SPACE_SEPARATOR_END_REGEX = new RegExp(\n  `${SPACE_SEPARATOR_REGEX.source}*$`\n)\n\nexport interface Position {\n  /** Offset in terms of UTF-16 *code unit*. */\n  offset: number\n  line: number\n  /** Column offset in terms of unicode *code point*. */\n  column: number\n}\n\nexport interface ParserOptions {\n  /**\n   * Whether to treat HTML/XML tags as string literal\n   * instead of parsing them as tag token.\n   * When this is false we only allow simple tags without\n   * any attributes\n   */\n  ignoreTag?: boolean\n  /**\n   * Should `select`, `selectordinal`, and `plural` arguments always include\n   * the `other` case clause.\n   */\n  requiresOtherClause?: boolean\n  /**\n   * Whether to parse number/datetime skeleton\n   * into Intl.NumberFormatOptions and Intl.DateTimeFormatOptions, respectively.\n   */\n  shouldParseSkeletons?: boolean\n  /**\n   * Capture location info in AST\n   * Default is false\n   */\n  captureLocation?: boolean\n  /**\n   * Instance of Intl.Locale to resolve locale-dependent skeleton\n   */\n  locale?: Intl.Locale\n}\n\nexport type Result<T, E> = {val: T; err: null} | {val: null; err: E}\ntype ArgType =\n  | 'number'\n  | 'date'\n  | 'time'\n  | 'select'\n  | 'plural'\n  | 'selectordinal'\n  | ''\n\nfunction createLocation(start: Position, end: Position): Location {\n  return {start, end}\n}\n\n// #region Ponyfills\n// Consolidate these variables up top for easier toggling during debugging\nconst hasNativeFromEntries = !!(Object as any).fromEntries\nconst hasTrimStart = !!(String.prototype as any).trimStart\nconst hasTrimEnd = !!(String.prototype as any).trimEnd\n\nconst fromEntries: <T = any>(\n  entries: readonly (readonly [string, T])[]\n) => {[k: string]: T} =\n  // native\n  hasNativeFromEntries\n    ? (Object as any).fromEntries\n    : // Ponyfill\n      function fromEntries(entries) {\n        const obj: Record<string, any> = {}\n        for (const [k, v] of entries) {\n          obj[k] = v\n        }\n        return obj\n      }\n\nconst trimStart: (s: string) => string = hasTrimStart\n  ? // Native\n    function trimStart(s) {\n      return (s as any).trimStart()\n    }\n  : // Ponyfill\n    function trimStart(s) {\n      return s.replace(SPACE_SEPARATOR_START_REGEX, '')\n    }\n\nconst trimEnd: (s: string) => string = hasTrimEnd\n  ? // Native\n    function trimEnd(s) {\n      return (s as any).trimEnd()\n    }\n  : // Ponyfill\n    function trimEnd(s) {\n      return s.replace(SPACE_SEPARATOR_END_REGEX, '')\n    }\n\n// #endregion\n\nconst IDENTIFIER_PREFIX_RE = new RegExp(\n  '([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)',\n  'yu'\n)\n\nfunction matchIdentifierAtIndex(s: string, index: number): string {\n  IDENTIFIER_PREFIX_RE.lastIndex = index\n  const match = IDENTIFIER_PREFIX_RE.exec(s)!\n  return match[1] ?? ''\n}\n\nexport class Parser {\n  private message: string\n  private position: Position\n  private locale?: Intl.Locale\n\n  private ignoreTag: boolean\n  private requiresOtherClause: boolean\n  private shouldParseSkeletons?: boolean\n\n  constructor(message: string, options: ParserOptions = {}) {\n    this.message = message\n    this.position = {offset: 0, line: 1, column: 1}\n    this.ignoreTag = !!options.ignoreTag\n    this.locale = options.locale\n    this.requiresOtherClause = !!options.requiresOtherClause\n    this.shouldParseSkeletons = !!options.shouldParseSkeletons\n  }\n\n  parse(): Result<MessageFormatElement[], ParserError> {\n    if (this.offset() !== 0) {\n      throw Error('parser can only be used once')\n    }\n    return this.parseMessage(0, '', false)\n  }\n\n  private parseMessage(\n    nestingLevel: number,\n    parentArgType: ArgType,\n    expectingCloseTag: boolean\n  ): Result<MessageFormatElement[], ParserError> {\n    let elements: MessageFormatElement[] = []\n\n    while (!this.isEOF()) {\n      const char = this.char()\n      if (char === 123 /* `{` */) {\n        const result = this.parseArgument(nestingLevel, expectingCloseTag)\n        if (result.err) {\n          return result\n        }\n        elements.push(result.val)\n      } else if (char === 125 /* `}` */ && nestingLevel > 0) {\n        break\n      } else if (\n        char === 35 /* `#` */ &&\n        (parentArgType === 'plural' || parentArgType === 'selectordinal')\n      ) {\n        const position = this.clonePosition()\n        this.bump()\n        elements.push({\n          type: TYPE.pound,\n          location: createLocation(position, this.clonePosition()),\n        })\n      } else if (\n        char === 60 /* `<` */ &&\n        !this.ignoreTag &&\n        this.peek() === 47 // char code for '/'\n      ) {\n        if (expectingCloseTag) {\n          break\n        } else {\n          return this.error(\n            ErrorKind.UNMATCHED_CLOSING_TAG,\n            createLocation(this.clonePosition(), this.clonePosition())\n          )\n        }\n      } else if (\n        char === 60 /* `<` */ &&\n        !this.ignoreTag &&\n        _isAlpha(this.peek() || 0)\n      ) {\n        const result = this.parseTag(nestingLevel, parentArgType)\n        if (result.err) {\n          return result\n        }\n        elements.push(result.val)\n      } else {\n        const result = this.parseLiteral(nestingLevel, parentArgType)\n        if (result.err) {\n          return result\n        }\n        elements.push(result.val)\n      }\n    }\n\n    return {val: elements, err: null}\n  }\n  /**\n   * A tag name must start with an ASCII lower/upper case letter. The grammar is based on the\n   * [custom element name][] except that a dash is NOT always mandatory and uppercase letters\n   * are accepted:\n   *\n   * ```\n   * tag ::= \"<\" tagName (whitespace)* \"/>\" | \"<\" tagName (whitespace)* \">\" message \"</\" tagName (whitespace)* \">\"\n   * tagName ::= [a-z] (PENChar)*\n   * PENChar ::=\n   *     \"-\" | \".\" | [0-9] | \"_\" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] |\n   *     [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] |\n   *     [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n   * ```\n   *\n   * [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n   * NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do\n   * since other tag-based engines like React allow it\n   */\n  private parseTag(\n    nestingLevel: number,\n    parentArgType: ArgType\n  ): Result<TagElement | LiteralElement, ParserError> {\n    const startPosition = this.clonePosition()\n    this.bump() // `<`\n\n    const tagName = this.parseTagName()\n    this.bumpSpace()\n\n    if (this.bumpIf('/>')) {\n      // Self closing tag\n      return {\n        val: {\n          type: TYPE.literal,\n          value: `<${tagName}/>`,\n          location: createLocation(startPosition, this.clonePosition()),\n        } as LiteralElement,\n        err: null,\n      }\n    } else if (this.bumpIf('>')) {\n      const childrenResult = this.parseMessage(\n        nestingLevel + 1,\n        parentArgType,\n        true\n      )\n      if (childrenResult.err) {\n        return childrenResult\n      }\n      const children = childrenResult.val\n\n      // Expecting a close tag\n      const endTagStartPosition = this.clonePosition()\n\n      if (this.bumpIf('</')) {\n        if (this.isEOF() || !_isAlpha(this.char())) {\n          return this.error(\n            ErrorKind.INVALID_TAG,\n            createLocation(endTagStartPosition, this.clonePosition())\n          )\n        }\n\n        const closingTagNameStartPosition = this.clonePosition()\n        const closingTagName = this.parseTagName()\n        if (tagName !== closingTagName) {\n          return this.error(\n            ErrorKind.UNMATCHED_CLOSING_TAG,\n            createLocation(closingTagNameStartPosition, this.clonePosition())\n          )\n        }\n\n        this.bumpSpace()\n        if (!this.bumpIf('>')) {\n          return this.error(\n            ErrorKind.INVALID_TAG,\n            createLocation(endTagStartPosition, this.clonePosition())\n          )\n        }\n\n        return {\n          val: {\n            type: TYPE.tag,\n            value: tagName,\n            children,\n            location: createLocation(startPosition, this.clonePosition()),\n          },\n          err: null,\n        }\n      } else {\n        return this.error(\n          ErrorKind.UNCLOSED_TAG,\n          createLocation(startPosition, this.clonePosition())\n        )\n      }\n    } else {\n      return this.error(\n        ErrorKind.INVALID_TAG,\n        createLocation(startPosition, this.clonePosition())\n      )\n    }\n  }\n\n  /**\n   * This method assumes that the caller has peeked ahead for the first tag character.\n   */\n  private parseTagName(): string {\n    const startOffset = this.offset()\n\n    this.bump() // the first tag name character\n    while (!this.isEOF() && _isPotentialElementNameChar(this.char())) {\n      this.bump()\n    }\n    return this.message.slice(startOffset, this.offset())\n  }\n\n  private parseLiteral(\n    nestingLevel: number,\n    parentArgType: ArgType\n  ): Result<LiteralElement, ParserError> {\n    const start = this.clonePosition()\n\n    let value = ''\n    while (true) {\n      const parseQuoteResult = this.tryParseQuote(parentArgType)\n      if (parseQuoteResult) {\n        value += parseQuoteResult\n        continue\n      }\n\n      const parseUnquotedResult = this.tryParseUnquoted(\n        nestingLevel,\n        parentArgType\n      )\n      if (parseUnquotedResult) {\n        value += parseUnquotedResult\n        continue\n      }\n\n      const parseLeftAngleResult = this.tryParseLeftAngleBracket()\n      if (parseLeftAngleResult) {\n        value += parseLeftAngleResult\n        continue\n      }\n\n      break\n    }\n\n    const location = createLocation(start, this.clonePosition())\n    return {\n      val: {type: TYPE.literal, value, location},\n      err: null,\n    }\n  }\n\n  tryParseLeftAngleBracket(): string | null {\n    if (\n      !this.isEOF() &&\n      this.char() === 60 /* `<` */ &&\n      (this.ignoreTag ||\n        // If at the opening tag or closing tag position, bail.\n        !_isAlphaOrSlash(this.peek() || 0))\n    ) {\n      this.bump() // `<`\n      return '<'\n    }\n    return null\n  }\n\n  /**\n   * Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes\n   * a character that requires quoting (that is, \"only where needed\"), and works the same in\n   * nested messages as on the top level of the pattern. The new behavior is otherwise compatible.\n   */\n  private tryParseQuote(parentArgType: ArgType): string | null {\n    if (this.isEOF() || this.char() !== 39 /* `'` */) {\n      return null\n    }\n\n    // Parse escaped char following the apostrophe, or early return if there is no escaped char.\n    // Check if is valid escaped character\n    switch (this.peek()) {\n      case 39 /* `'` */:\n        // double quote, should return as a single quote.\n        this.bump()\n        this.bump()\n        return \"'\"\n      // '{', '<', '>', '}'\n      case 123:\n      case 60:\n      case 62:\n      case 125:\n        break\n      case 35: // '#'\n        if (parentArgType === 'plural' || parentArgType === 'selectordinal') {\n          break\n        }\n        return null\n      default:\n        return null\n    }\n\n    this.bump() // apostrophe\n    const codePoints = [this.char()] // escaped char\n    this.bump()\n\n    // read chars until the optional closing apostrophe is found\n    while (!this.isEOF()) {\n      const ch = this.char()\n      if (ch === 39 /* `'` */) {\n        if (this.peek() === 39 /* `'` */) {\n          codePoints.push(39)\n          // Bump one more time because we need to skip 2 characters.\n          this.bump()\n        } else {\n          // Optional closing apostrophe.\n          this.bump()\n          break\n        }\n      } else {\n        codePoints.push(ch)\n      }\n      this.bump()\n    }\n\n    return String.fromCodePoint(...codePoints)\n  }\n\n  private tryParseUnquoted(\n    nestingLevel: number,\n    parentArgType: ArgType\n  ): string | null {\n    if (this.isEOF()) {\n      return null\n    }\n    const ch = this.char()\n\n    if (\n      ch === 60 /* `<` */ ||\n      ch === 123 /* `{` */ ||\n      (ch === 35 /* `#` */ &&\n        (parentArgType === 'plural' || parentArgType === 'selectordinal')) ||\n      (ch === 125 /* `}` */ && nestingLevel > 0)\n    ) {\n      return null\n    } else {\n      this.bump()\n      return String.fromCodePoint(ch)\n    }\n  }\n\n  private parseArgument(\n    nestingLevel: number,\n    expectingCloseTag: boolean\n  ): Result<MessageFormatElement, ParserError> {\n    const openingBracePosition = this.clonePosition()\n    this.bump() // `{`\n\n    this.bumpSpace()\n\n    if (this.isEOF()) {\n      return this.error(\n        ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE,\n        createLocation(openingBracePosition, this.clonePosition())\n      )\n    }\n\n    if (this.char() === 125 /* `}` */) {\n      this.bump()\n      return this.error(\n        ErrorKind.EMPTY_ARGUMENT,\n        createLocation(openingBracePosition, this.clonePosition())\n      )\n    }\n\n    // argument name\n    let value = this.parseIdentifierIfPossible().value\n    if (!value) {\n      return this.error(\n        ErrorKind.MALFORMED_ARGUMENT,\n        createLocation(openingBracePosition, this.clonePosition())\n      )\n    }\n\n    this.bumpSpace()\n\n    if (this.isEOF()) {\n      return this.error(\n        ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE,\n        createLocation(openingBracePosition, this.clonePosition())\n      )\n    }\n\n    switch (this.char()) {\n      // Simple argument: `{name}`\n      case 125 /* `}` */: {\n        this.bump() // `}`\n        return {\n          val: {\n            type: TYPE.argument,\n            // value does not include the opening and closing braces.\n            value,\n            location: createLocation(\n              openingBracePosition,\n              this.clonePosition()\n            ),\n          },\n          err: null,\n        }\n      }\n      // Argument with options: `{name, format, ...}`\n      case 44 /* `,` */: {\n        this.bump() // `,`\n        this.bumpSpace()\n\n        if (this.isEOF()) {\n          return this.error(\n            ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE,\n            createLocation(openingBracePosition, this.clonePosition())\n          )\n        }\n\n        return this.parseArgumentOptions(\n          nestingLevel,\n          expectingCloseTag,\n          value,\n          openingBracePosition\n        )\n      }\n      default:\n        return this.error(\n          ErrorKind.MALFORMED_ARGUMENT,\n          createLocation(openingBracePosition, this.clonePosition())\n        )\n    }\n  }\n\n  /**\n   * Advance the parser until the end of the identifier, if it is currently on\n   * an identifier character. Return an empty string otherwise.\n   */\n  private parseIdentifierIfPossible(): {value: string; location: Location} {\n    const startingPosition = this.clonePosition()\n\n    const startOffset = this.offset()\n    const value = matchIdentifierAtIndex(this.message, startOffset)\n    const endOffset = startOffset + value.length\n\n    this.bumpTo(endOffset)\n\n    const endPosition = this.clonePosition()\n    const location = createLocation(startingPosition, endPosition)\n\n    return {value, location}\n  }\n\n  private parseArgumentOptions(\n    nestingLevel: number,\n    expectingCloseTag: boolean,\n    value: string,\n    openingBracePosition: Position\n  ): Result<MessageFormatElement, ParserError> {\n    // Parse this range:\n    // {name, type, style}\n    //        ^---^\n    let typeStartPosition = this.clonePosition()\n    let argType = this.parseIdentifierIfPossible().value\n    let typeEndPosition = this.clonePosition()\n\n    switch (argType) {\n      case '':\n        // Expecting a style string number, date, time, plural, selectordinal, or select.\n        return this.error(\n          ErrorKind.EXPECT_ARGUMENT_TYPE,\n          createLocation(typeStartPosition, typeEndPosition)\n        )\n      case 'number':\n      case 'date':\n      case 'time': {\n        // Parse this range:\n        // {name, number, style}\n        //              ^-------^\n        this.bumpSpace()\n        let styleAndLocation: {\n          style: string\n          styleLocation: Location\n        } | null = null\n\n        if (this.bumpIf(',')) {\n          this.bumpSpace()\n\n          const styleStartPosition = this.clonePosition()\n          const result = this.parseSimpleArgStyleIfPossible()\n          if (result.err) {\n            return result\n          }\n          const style = trimEnd(result.val)\n\n          if (style.length === 0) {\n            return this.error(\n              ErrorKind.EXPECT_ARGUMENT_STYLE,\n              createLocation(this.clonePosition(), this.clonePosition())\n            )\n          }\n\n          const styleLocation = createLocation(\n            styleStartPosition,\n            this.clonePosition()\n          )\n          styleAndLocation = {style, styleLocation}\n        }\n\n        const argCloseResult = this.tryParseArgumentClose(openingBracePosition)\n        if (argCloseResult.err) {\n          return argCloseResult\n        }\n\n        const location = createLocation(\n          openingBracePosition,\n          this.clonePosition()\n        )\n\n        // Extract style or skeleton\n        if (styleAndLocation && styleAndLocation.style.startsWith('::')) {\n          // Skeleton starts with `::`.\n          let skeleton = trimStart(styleAndLocation.style.slice(2))\n\n          if (argType === 'number') {\n            const result = this.parseNumberSkeletonFromString(\n              skeleton,\n              styleAndLocation.styleLocation\n            )\n            if (result.err) {\n              return result\n            }\n            return {\n              val: {type: TYPE.number, value, location, style: result.val},\n              err: null,\n            }\n          } else {\n            if (skeleton.length === 0) {\n              return this.error(ErrorKind.EXPECT_DATE_TIME_SKELETON, location)\n            }\n\n            let dateTimePattern = skeleton\n\n            // Get \"best match\" pattern only if locale is passed, if not, let it\n            // pass as-is where `parseDateTimeSkeleton()` will throw an error\n            // for unsupported patterns.\n            if (this.locale) {\n              dateTimePattern = getBestPattern(skeleton, this.locale)\n            }\n\n            const style: DateTimeSkeleton = {\n              type: SKELETON_TYPE.dateTime,\n              pattern: dateTimePattern,\n              location: styleAndLocation.styleLocation,\n              parsedOptions: this.shouldParseSkeletons\n                ? parseDateTimeSkeleton(dateTimePattern)\n                : {},\n            }\n\n            const type = argType === 'date' ? TYPE.date : TYPE.time\n            return {\n              val: {type, value, location, style},\n              err: null,\n            }\n          }\n        }\n\n        // Regular style or no style.\n        return {\n          val: {\n            type:\n              argType === 'number'\n                ? TYPE.number\n                : argType === 'date'\n                  ? TYPE.date\n                  : TYPE.time,\n            value,\n            location,\n            style: styleAndLocation?.style ?? null,\n          },\n          err: null,\n        }\n      }\n      case 'plural':\n      case 'selectordinal':\n      case 'select': {\n        // Parse this range:\n        // {name, plural, options}\n        //              ^---------^\n        const typeEndPosition = this.clonePosition()\n        this.bumpSpace()\n\n        if (!this.bumpIf(',')) {\n          return this.error(\n            ErrorKind.EXPECT_SELECT_ARGUMENT_OPTIONS,\n            createLocation(typeEndPosition, {...typeEndPosition})\n          )\n        }\n        this.bumpSpace()\n\n        // Parse offset:\n        // {name, plural, offset:1, options}\n        //                ^-----^\n        //\n        // or the first option:\n        //\n        // {name, plural, one {...} other {...}}\n        //                ^--^\n        let identifierAndLocation = this.parseIdentifierIfPossible()\n\n        let pluralOffset = 0\n        if (argType !== 'select' && identifierAndLocation.value === 'offset') {\n          if (!this.bumpIf(':')) {\n            return this.error(\n              ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE,\n              createLocation(this.clonePosition(), this.clonePosition())\n            )\n          }\n          this.bumpSpace()\n          const result = this.tryParseDecimalInteger(\n            ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE,\n            ErrorKind.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\n          )\n          if (result.err) {\n            return result\n          }\n\n          // Parse another identifier for option parsing\n          this.bumpSpace()\n          identifierAndLocation = this.parseIdentifierIfPossible()\n\n          pluralOffset = result.val\n        }\n\n        const optionsResult = this.tryParsePluralOrSelectOptions(\n          nestingLevel,\n          argType,\n          expectingCloseTag,\n          identifierAndLocation\n        )\n        if (optionsResult.err) {\n          return optionsResult\n        }\n\n        const argCloseResult = this.tryParseArgumentClose(openingBracePosition)\n        if (argCloseResult.err) {\n          return argCloseResult\n        }\n\n        const location = createLocation(\n          openingBracePosition,\n          this.clonePosition()\n        )\n\n        if (argType === 'select') {\n          return {\n            val: {\n              type: TYPE.select,\n              value,\n              options: fromEntries(optionsResult.val),\n              location,\n            },\n            err: null,\n          }\n        } else {\n          return {\n            val: {\n              type: TYPE.plural,\n              value,\n              options: fromEntries(optionsResult.val),\n              offset: pluralOffset,\n              pluralType: argType === 'plural' ? 'cardinal' : 'ordinal',\n              location,\n            },\n            err: null,\n          }\n        }\n      }\n      default:\n        return this.error(\n          ErrorKind.INVALID_ARGUMENT_TYPE,\n          createLocation(typeStartPosition, typeEndPosition)\n        )\n    }\n  }\n\n  private tryParseArgumentClose(\n    openingBracePosition: Position\n  ): Result<true, ParserError> {\n    // Parse: {value, number, ::currency/GBP }\n    //\n    if (this.isEOF() || this.char() !== 125 /* `}` */) {\n      return this.error(\n        ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE,\n        createLocation(openingBracePosition, this.clonePosition())\n      )\n    }\n    this.bump() // `}`\n    return {val: true, err: null}\n  }\n\n  /**\n   * See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659\n   */\n  private parseSimpleArgStyleIfPossible(): Result<string, ParserError> {\n    let nestedBraces = 0\n\n    const startPosition = this.clonePosition()\n    while (!this.isEOF()) {\n      const ch = this.char()\n      switch (ch) {\n        case 39 /* `'` */: {\n          // Treat apostrophe as quoting but include it in the style part.\n          // Find the end of the quoted literal text.\n          this.bump()\n          let apostrophePosition = this.clonePosition()\n\n          if (!this.bumpUntil(\"'\")) {\n            return this.error(\n              ErrorKind.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE,\n              createLocation(apostrophePosition, this.clonePosition())\n            )\n          }\n          this.bump()\n          break\n        }\n        case 123 /* `{` */: {\n          nestedBraces += 1\n          this.bump()\n          break\n        }\n        case 125 /* `}` */: {\n          if (nestedBraces > 0) {\n            nestedBraces -= 1\n          } else {\n            return {\n              val: this.message.slice(startPosition.offset, this.offset()),\n              err: null,\n            }\n          }\n          break\n        }\n        default:\n          this.bump()\n          break\n      }\n    }\n    return {\n      val: this.message.slice(startPosition.offset, this.offset()),\n      err: null,\n    }\n  }\n\n  private parseNumberSkeletonFromString(\n    skeleton: string,\n    location: Location\n  ): Result<NumberSkeleton, ParserError> {\n    let tokens: NumberSkeletonToken[] = []\n    try {\n      tokens = parseNumberSkeletonFromString(skeleton)\n    } catch {\n      return this.error(ErrorKind.INVALID_NUMBER_SKELETON, location)\n    }\n\n    return {\n      val: {\n        type: SKELETON_TYPE.number,\n        tokens,\n        location,\n        parsedOptions: this.shouldParseSkeletons\n          ? parseNumberSkeleton(tokens)\n          : {},\n      },\n      err: null,\n    }\n  }\n\n  /**\n   * @param nesting_level The current nesting level of messages.\n   *     This can be positive when parsing message fragment in select or plural argument options.\n   * @param parent_arg_type The parent argument's type.\n   * @param parsed_first_identifier If provided, this is the first identifier-like selector of\n   *     the argument. It is a by-product of a previous parsing attempt.\n   * @param expecting_close_tag If true, this message is directly or indirectly nested inside\n   *     between a pair of opening and closing tags. The nested message will not parse beyond\n   *     the closing tag boundary.\n   */\n  private tryParsePluralOrSelectOptions(\n    nestingLevel: number,\n    parentArgType: ArgType,\n    expectCloseTag: boolean,\n    parsedFirstIdentifier: {value: string; location: Location}\n  ): Result<[string, PluralOrSelectOption][], ParserError> {\n    let hasOtherClause = false\n    const options: [string, PluralOrSelectOption][] = []\n    const parsedSelectors = new Set<string>()\n    let {value: selector, location: selectorLocation} = parsedFirstIdentifier\n\n    // Parse:\n    // one {one apple}\n    // ^--^\n    while (true) {\n      if (selector.length === 0) {\n        const startPosition = this.clonePosition()\n        if (parentArgType !== 'select' && this.bumpIf('=')) {\n          // Try parse `={number}` selector\n          const result = this.tryParseDecimalInteger(\n            ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR,\n            ErrorKind.INVALID_PLURAL_ARGUMENT_SELECTOR\n          )\n          if (result.err) {\n            return result\n          }\n          selectorLocation = createLocation(startPosition, this.clonePosition())\n          selector = this.message.slice(startPosition.offset, this.offset())\n        } else {\n          break\n        }\n      }\n\n      // Duplicate selector clauses\n      if (parsedSelectors.has(selector)) {\n        return this.error(\n          parentArgType === 'select'\n            ? ErrorKind.DUPLICATE_SELECT_ARGUMENT_SELECTOR\n            : ErrorKind.DUPLICATE_PLURAL_ARGUMENT_SELECTOR,\n          selectorLocation\n        )\n      }\n\n      if (selector === 'other') {\n        hasOtherClause = true\n      }\n\n      // Parse:\n      // one {one apple}\n      //     ^----------^\n      this.bumpSpace()\n      const openingBracePosition = this.clonePosition()\n      if (!this.bumpIf('{')) {\n        return this.error(\n          parentArgType === 'select'\n            ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\n            : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT,\n          createLocation(this.clonePosition(), this.clonePosition())\n        )\n      }\n\n      const fragmentResult = this.parseMessage(\n        nestingLevel + 1,\n        parentArgType,\n        expectCloseTag\n      )\n      if (fragmentResult.err) {\n        return fragmentResult\n      }\n      const argCloseResult = this.tryParseArgumentClose(openingBracePosition)\n      if (argCloseResult.err) {\n        return argCloseResult\n      }\n\n      options.push([\n        selector,\n        {\n          value: fragmentResult.val,\n          location: createLocation(openingBracePosition, this.clonePosition()),\n        },\n      ])\n      // Keep track of the existing selectors\n      parsedSelectors.add(selector)\n\n      // Prep next selector clause.\n      this.bumpSpace()\n      ;({value: selector, location: selectorLocation} =\n        this.parseIdentifierIfPossible())\n    }\n\n    if (options.length === 0) {\n      return this.error(\n        parentArgType === 'select'\n          ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR\n          : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR,\n        createLocation(this.clonePosition(), this.clonePosition())\n      )\n    }\n\n    if (this.requiresOtherClause && !hasOtherClause) {\n      return this.error(\n        ErrorKind.MISSING_OTHER_CLAUSE,\n        createLocation(this.clonePosition(), this.clonePosition())\n      )\n    }\n\n    return {val: options, err: null}\n  }\n\n  private tryParseDecimalInteger(\n    expectNumberError: ErrorKind,\n    invalidNumberError: ErrorKind\n  ): Result<number, ParserError> {\n    let sign = 1\n    const startingPosition = this.clonePosition()\n\n    if (this.bumpIf('+')) {\n    } else if (this.bumpIf('-')) {\n      sign = -1\n    }\n\n    let hasDigits = false\n    let decimal = 0\n    while (!this.isEOF()) {\n      const ch = this.char()\n      if (ch >= 48 /* `0` */ && ch <= 57 /* `9` */) {\n        hasDigits = true\n        decimal = decimal * 10 + (ch - 48)\n        this.bump()\n      } else {\n        break\n      }\n    }\n\n    const location = createLocation(startingPosition, this.clonePosition())\n\n    if (!hasDigits) {\n      return this.error(expectNumberError, location)\n    }\n\n    decimal *= sign\n    if (!Number.isSafeInteger(decimal)) {\n      return this.error(invalidNumberError, location)\n    }\n\n    return {val: decimal, err: null}\n  }\n\n  private offset(): number {\n    return this.position.offset\n  }\n\n  private isEOF(): boolean {\n    return this.offset() === this.message.length\n  }\n\n  private clonePosition(): Position {\n    // This is much faster than `Object.assign` or spread.\n    return {\n      offset: this.position.offset,\n      line: this.position.line,\n      column: this.position.column,\n    }\n  }\n\n  /**\n   * Return the code point at the current position of the parser.\n   * Throws if the index is out of bound.\n   */\n  private char(): number {\n    const offset = this.position.offset\n    if (offset >= this.message.length) {\n      throw Error('out of bound')\n    }\n    const code = this.message.codePointAt(offset)\n    if (code === undefined) {\n      throw Error(`Offset ${offset} is at invalid UTF-16 code unit boundary`)\n    }\n    return code\n  }\n\n  private error(\n    kind: ErrorKind,\n    location: Location\n  ): Result<never, ParserError> {\n    return {\n      val: null,\n      err: {\n        kind,\n        message: this.message,\n        location,\n      },\n    }\n  }\n\n  /** Bump the parser to the next UTF-16 code unit. */\n  private bump(): void {\n    if (this.isEOF()) {\n      return\n    }\n    const code = this.char()\n    if (code === 10 /* '\\n' */) {\n      this.position.line += 1\n      this.position.column = 1\n      this.position.offset += 1\n    } else {\n      this.position.column += 1\n      // 0 ~ 0x10000 -> unicode BMP, otherwise skip the surrogate pair.\n      this.position.offset += code < 0x10000 ? 1 : 2\n    }\n  }\n\n  /**\n   * If the substring starting at the current position of the parser has\n   * the given prefix, then bump the parser to the character immediately\n   * following the prefix and return true. Otherwise, don't bump the parser\n   * and return false.\n   */\n  private bumpIf(prefix: string): boolean {\n    if (this.message.startsWith(prefix, this.offset())) {\n      for (let i = 0; i < prefix.length; i++) {\n        this.bump()\n      }\n      return true\n    }\n    return false\n  }\n\n  /**\n   * Bump the parser until the pattern character is found and return `true`.\n   * Otherwise bump to the end of the file and return `false`.\n   */\n  private bumpUntil(pattern: string): boolean {\n    const currentOffset = this.offset()\n    const index = this.message.indexOf(pattern, currentOffset)\n    if (index >= 0) {\n      this.bumpTo(index)\n      return true\n    } else {\n      this.bumpTo(this.message.length)\n      return false\n    }\n  }\n\n  /**\n   * Bump the parser to the target offset.\n   * If target offset is beyond the end of the input, bump the parser to the end of the input.\n   */\n  private bumpTo(targetOffset: number) {\n    if (this.offset() > targetOffset) {\n      throw Error(\n        `targetOffset ${targetOffset} must be greater than or equal to the current offset ${this.offset()}`\n      )\n    }\n\n    targetOffset = Math.min(targetOffset, this.message.length)\n    while (true) {\n      const offset = this.offset()\n      if (offset === targetOffset) {\n        break\n      }\n      if (offset > targetOffset) {\n        throw Error(\n          `targetOffset ${targetOffset} is at invalid UTF-16 code unit boundary`\n        )\n      }\n\n      this.bump()\n      if (this.isEOF()) {\n        break\n      }\n    }\n  }\n\n  /** advance the parser through all whitespace to the next non-whitespace code unit. */\n  private bumpSpace() {\n    while (!this.isEOF() && _isWhiteSpace(this.char())) {\n      this.bump()\n    }\n  }\n\n  /**\n   * Peek at the *next* Unicode codepoint in the input without advancing the parser.\n   * If the input has been exhausted, then this returns null.\n   */\n  private peek(): number | null {\n    if (this.isEOF()) {\n      return null\n    }\n    const code = this.char()\n    const offset = this.offset()\n    const nextCode = this.message.charCodeAt(offset + (code >= 0x10000 ? 2 : 1))\n    return nextCode ?? null\n  }\n}\n\n/**\n * This check if codepoint is alphabet (lower & uppercase)\n * @param codepoint\n * @returns\n */\nfunction _isAlpha(codepoint: number): boolean {\n  return (\n    (codepoint >= 97 && codepoint <= 122) ||\n    (codepoint >= 65 && codepoint <= 90)\n  )\n}\n\nfunction _isAlphaOrSlash(codepoint: number): boolean {\n  return _isAlpha(codepoint) || codepoint === 47 /* '/' */\n}\n\n/** See `parseTag` function docs. */\nfunction _isPotentialElementNameChar(c: number): boolean {\n  return (\n    c === 45 /* '-' */ ||\n    c === 46 /* '.' */ ||\n    (c >= 48 && c <= 57) /* 0..9 */ ||\n    c === 95 /* '_' */ ||\n    (c >= 97 && c <= 122) /** a..z */ ||\n    (c >= 65 && c <= 90) /* A..Z */ ||\n    c == 0xb7 ||\n    (c >= 0xc0 && c <= 0xd6) ||\n    (c >= 0xd8 && c <= 0xf6) ||\n    (c >= 0xf8 && c <= 0x37d) ||\n    (c >= 0x37f && c <= 0x1fff) ||\n    (c >= 0x200c && c <= 0x200d) ||\n    (c >= 0x203f && c <= 0x2040) ||\n    (c >= 0x2070 && c <= 0x218f) ||\n    (c >= 0x2c00 && c <= 0x2fef) ||\n    (c >= 0x3001 && c <= 0xd7ff) ||\n    (c >= 0xf900 && c <= 0xfdcf) ||\n    (c >= 0xfdf0 && c <= 0xfffd) ||\n    (c >= 0x10000 && c <= 0xeffff)\n  )\n}\n\n/**\n * Code point equivalent of regex `\\p{White_Space}`.\n * From: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isWhiteSpace(c: number) {\n  return (\n    (c >= 0x0009 && c <= 0x000d) ||\n    c === 0x0020 ||\n    c === 0x0085 ||\n    (c >= 0x200e && c <= 0x200f) ||\n    c === 0x2028 ||\n    c === 0x2029\n  )\n}\n","import {type NumberFormatOptions} from '#packages/ecma402-abstract/types/number.js'\nimport {\n  type ExtendedNumberFormatOptions,\n  isArgumentElement,\n  isDateElement,\n  isDateTimeSkeleton,\n  isLiteralElement,\n  isNumberElement,\n  isNumberSkeleton,\n  isPluralElement,\n  isPoundElement,\n  isSelectElement,\n  isTagElement,\n  isTimeElement,\n  type MessageFormatElement,\n} from '@formatjs/icu-messageformat-parser'\nimport {\n  ErrorCode,\n  FormatError,\n  InvalidValueError,\n  InvalidValueTypeError,\n  MissingValueError,\n} from '#packages/intl-messageformat/error.js'\n\ndeclare global {\n  namespace FormatjsIntl {\n    interface Message {}\n    interface IntlConfig {}\n    interface Formats {}\n  }\n}\n\ntype Format<Source = string> = Source extends keyof FormatjsIntl.Formats\n  ? FormatjsIntl.Formats[Source]\n  : string\n\nexport interface Formats {\n  number: Record<Format<'number'>, NumberFormatOptions>\n  date: Record<Format<'date'>, Intl.DateTimeFormatOptions>\n  time: Record<Format<'time'>, Intl.DateTimeFormatOptions>\n}\n\nexport interface FormatterCache {\n  number: Record<string, NumberFormatOptions>\n  dateTime: Record<string, Intl.DateTimeFormat>\n  pluralRules: Record<string, Intl.PluralRules>\n}\n\nexport interface Formatters {\n  getNumberFormat(\n    locals?: string | string[],\n    opts?: NumberFormatOptions\n  ): Intl.NumberFormat\n  getDateTimeFormat(\n    ...args: ConstructorParameters<typeof Intl.DateTimeFormat>\n  ): Intl.DateTimeFormat\n  getPluralRules(\n    ...args: ConstructorParameters<typeof Intl.PluralRules>\n  ): Intl.PluralRules\n}\n\nexport enum PART_TYPE {\n  literal,\n  object,\n}\n\nexport interface LiteralPart {\n  type: PART_TYPE.literal\n  value: string\n}\n\nexport interface ObjectPart<T = any> {\n  type: PART_TYPE.object\n  value: T\n}\n\nexport type MessageFormatPart<T> = LiteralPart | ObjectPart<T>\n\nexport type PrimitiveType =\n  | string\n  | number\n  | bigint\n  | boolean\n  | null\n  | undefined\n  | Date\n\nfunction mergeLiteral<T>(\n  parts: MessageFormatPart<T>[]\n): MessageFormatPart<T>[] {\n  if (parts.length < 2) {\n    return parts\n  }\n  return parts.reduce((all, part) => {\n    const lastPart = all[all.length - 1]\n    if (\n      !lastPart ||\n      lastPart.type !== PART_TYPE.literal ||\n      part.type !== PART_TYPE.literal\n    ) {\n      all.push(part)\n    } else {\n      lastPart.value += part.value\n    }\n    return all\n  }, [] as MessageFormatPart<T>[])\n}\n\nexport function isFormatXMLElementFn<T>(\n  el: PrimitiveType | T | FormatXMLElementFn<T>\n): el is FormatXMLElementFn<T> {\n  return typeof el === 'function'\n}\n\n// TODO(skeleton): add skeleton support\nexport function formatToParts<T>(\n  els: MessageFormatElement[],\n  locales: string | string[],\n  formatters: Formatters,\n  formats: Formats,\n  values?: Record<string, PrimitiveType | T | FormatXMLElementFn<T>>,\n  currentPluralValue?: number,\n  // For debugging\n  originalMessage?: string\n): MessageFormatPart<T>[] {\n  // Hot path for straight simple msg translations\n  if (els.length === 1 && isLiteralElement(els[0])) {\n    return [\n      {\n        type: PART_TYPE.literal,\n        value: els[0].value,\n      },\n    ]\n  }\n  const result: MessageFormatPart<T>[] = []\n  for (const el of els) {\n    // Exit early for string parts.\n    if (isLiteralElement(el)) {\n      result.push({\n        type: PART_TYPE.literal,\n        value: el.value,\n      })\n      continue\n    }\n    // TODO: should this part be literal type?\n    // Replace `#` in plural rules with the actual numeric value.\n    if (isPoundElement(el)) {\n      if (typeof currentPluralValue === 'number') {\n        result.push({\n          type: PART_TYPE.literal,\n          value: formatters.getNumberFormat(locales).format(currentPluralValue),\n        })\n      }\n      continue\n    }\n\n    const {value: varName} = el\n\n    // Enforce that all required values are provided by the caller.\n    if (!(values && varName in values)) {\n      throw new MissingValueError(varName, originalMessage)\n    }\n\n    let value = values[varName]\n    if (isArgumentElement(el)) {\n      if (\n        !value ||\n        typeof value === 'string' ||\n        typeof value === 'number' ||\n        typeof value === 'bigint'\n      ) {\n        value =\n          typeof value === 'string' ||\n          typeof value === 'number' ||\n          typeof value === 'bigint'\n            ? String(value)\n            : ''\n      }\n      result.push({\n        type: typeof value === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n        value,\n      } as ObjectPart<T>)\n      continue\n    }\n\n    // Recursively format plural and select parts' option — which can be a\n    // nested pattern structure. The choosing of the option to use is\n    // abstracted-by and delegated-to the part helper object.\n    if (isDateElement(el)) {\n      const style =\n        typeof el.style === 'string'\n          ? formats.date[el.style]\n          : isDateTimeSkeleton(el.style)\n            ? el.style.parsedOptions\n            : undefined\n      result.push({\n        type: PART_TYPE.literal,\n        value: formatters\n          .getDateTimeFormat(locales, style)\n          .format(value as number),\n      })\n      continue\n    }\n    if (isTimeElement(el)) {\n      const style =\n        typeof el.style === 'string'\n          ? formats.time[el.style]\n          : isDateTimeSkeleton(el.style)\n            ? el.style.parsedOptions\n            : formats.time.medium\n      result.push({\n        type: PART_TYPE.literal,\n        value: formatters\n          .getDateTimeFormat(locales, style)\n          .format(value as number),\n      })\n      continue\n    }\n    if (isNumberElement(el)) {\n      const style =\n        typeof el.style === 'string'\n          ? formats.number[el.style]\n          : isNumberSkeleton(el.style)\n            ? el.style.parsedOptions\n            : undefined\n\n      if (style && (style as ExtendedNumberFormatOptions).scale) {\n        const scale = (style as ExtendedNumberFormatOptions).scale || 1\n        // Handle bigint scale multiplication\n        // BigInt can only be multiplied by BigInt\n        if (typeof value === 'bigint') {\n          // Check if scale is a safe integer that can be converted to BigInt\n          if (!Number.isInteger(scale)) {\n            throw new TypeError(\n              `Cannot apply fractional scale ${scale} to bigint value. Scale must be an integer when formatting bigint.`\n            )\n          }\n          value = value * BigInt(scale)\n        } else {\n          value = (value as number) * scale\n        }\n      }\n      result.push({\n        type: PART_TYPE.literal,\n        value: formatters\n          .getNumberFormat(locales, style)\n          .format(value as number | bigint),\n      })\n      continue\n    }\n    if (isTagElement(el)) {\n      const {children, value} = el\n      const formatFn = values[value]\n      if (!isFormatXMLElementFn<T>(formatFn)) {\n        throw new InvalidValueTypeError(value, 'function', originalMessage)\n      }\n      const parts = formatToParts<T>(\n        children,\n        locales,\n        formatters,\n        formats,\n        values,\n        currentPluralValue\n      )\n      let chunks = formatFn(parts.map(p => p.value))\n      if (!Array.isArray(chunks)) {\n        chunks = [chunks]\n      }\n      result.push(\n        ...chunks.map((c): MessageFormatPart<T> => {\n          return {\n            type: typeof c === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n            value: c,\n          } as MessageFormatPart<T>\n        })\n      )\n    }\n    if (isSelectElement(el)) {\n      // GH #4490: Use hasOwnProperty to avoid prototype chain issues with keys like \"constructor\"\n      const key = value as string\n      const opt =\n        (Object.prototype.hasOwnProperty.call(el.options, key)\n          ? el.options[key]\n          : undefined) || el.options.other\n      if (!opt) {\n        throw new InvalidValueError(\n          el.value,\n          value,\n          Object.keys(el.options),\n          originalMessage\n        )\n      }\n      result.push(\n        ...formatToParts(opt.value, locales, formatters, formats, values)\n      )\n      continue\n    }\n    if (isPluralElement(el)) {\n      // GH #4490: Use hasOwnProperty to avoid prototype chain issues\n      const exactKey = `=${value}`\n      let opt = Object.prototype.hasOwnProperty.call(el.options, exactKey)\n        ? el.options[exactKey]\n        : undefined\n      if (!opt) {\n        if (!Intl.PluralRules) {\n          throw new FormatError(\n            `Intl.PluralRules is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-pluralrules\"\n`,\n            ErrorCode.MISSING_INTL_API,\n            originalMessage\n          )\n        }\n        // Convert bigint to number for PluralRules (which only accepts number)\n        const numericValue =\n          typeof value === 'bigint' ? Number(value) : (value as number)\n        const rule = formatters\n          .getPluralRules(locales, {type: el.pluralType})\n          .select(numericValue - (el.offset || 0))\n        opt =\n          (Object.prototype.hasOwnProperty.call(el.options, rule)\n            ? el.options[rule]\n            : undefined) || el.options.other\n      }\n      if (!opt) {\n        throw new InvalidValueError(\n          el.value,\n          value,\n          Object.keys(el.options),\n          originalMessage\n        )\n      }\n      // Convert bigint to number for currentPluralValue\n      const numericValue =\n        typeof value === 'bigint' ? Number(value) : (value as number)\n      result.push(\n        ...formatToParts(\n          opt.value,\n          locales,\n          formatters,\n          formats,\n          values,\n          numericValue - (el.offset || 0)\n        )\n      )\n      continue\n    }\n  }\n  return mergeLiteral(result)\n}\n\nexport type FormatXMLElementFn<T, R = string | T | (string | T)[]> = (\n  parts: Array<string | T>\n) => R\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\nimport {type Cache, memoize, strategies} from '@formatjs/fast-memoize'\nimport {\n  type MessageFormatElement,\n  parse,\n  type ParserOptions,\n} from '@formatjs/icu-messageformat-parser'\nimport {\n  type Formats,\n  type FormatterCache,\n  type Formatters,\n  formatToParts,\n  type FormatXMLElementFn,\n  type MessageFormatPart,\n  PART_TYPE,\n  type PrimitiveType,\n} from '#packages/intl-messageformat/formatters.js'\n\n// -- MessageFormat --------------------------------------------------------\n\nfunction mergeConfig(c1: Record<string, object>, c2?: Record<string, object>) {\n  if (!c2) {\n    return c1\n  }\n  return {\n    ...c1,\n    ...c2,\n    ...Object.keys(c1).reduce((all: Record<string, object>, k) => {\n      all[k] = {\n        ...c1[k],\n        ...c2[k],\n      }\n      return all\n    }, {}),\n  }\n}\n\nfunction mergeConfigs(\n  defaultConfig: Formats,\n  configs?: Partial<Formats>\n): Formats {\n  if (!configs) {\n    return defaultConfig\n  }\n\n  return (Object.keys(defaultConfig) as Array<keyof Formats>).reduce(\n    (all: Formats, k: keyof Formats) => {\n      all[k] = mergeConfig(defaultConfig[k], configs[k])\n      return all\n    },\n    {...defaultConfig}\n  )\n}\n\nexport interface Options extends Omit<ParserOptions, 'locale'> {\n  formatters?: Formatters\n}\n\nfunction createFastMemoizeCache<V>(\n  store: Record<string, V | undefined>\n): Cache<string, V> {\n  return {\n    create() {\n      return {\n        get(key) {\n          return store[key]\n        },\n        set(key, value) {\n          store[key] = value\n        },\n      }\n    },\n  }\n}\n\nfunction createDefaultFormatters(\n  cache: FormatterCache = {\n    number: {},\n    dateTime: {},\n    pluralRules: {},\n  }\n): Formatters {\n  return {\n    getNumberFormat: memoize((...args) => new Intl.NumberFormat(...args), {\n      cache: createFastMemoizeCache(cache.number),\n      strategy: strategies.variadic,\n    }),\n    getDateTimeFormat: memoize((...args) => new Intl.DateTimeFormat(...args), {\n      cache: createFastMemoizeCache(cache.dateTime),\n      strategy: strategies.variadic,\n    }),\n    getPluralRules: memoize((...args) => new Intl.PluralRules(...args), {\n      cache: createFastMemoizeCache(cache.pluralRules),\n      strategy: strategies.variadic,\n    }),\n  }\n}\n\nexport class IntlMessageFormat {\n  private readonly ast: MessageFormatElement[]\n  private readonly locales: string | string[]\n  private readonly resolvedLocale?: Intl.Locale\n  private readonly formatters: Formatters\n  private readonly formats: Formats\n  private readonly message: string | undefined\n  private readonly formatterCache: FormatterCache = {\n    number: {},\n    dateTime: {},\n    pluralRules: {},\n  }\n  constructor(\n    message: string | MessageFormatElement[],\n    locales: string | string[] = IntlMessageFormat.defaultLocale,\n    overrideFormats?: Partial<Formats>,\n    opts?: Options\n  ) {\n    // Defined first because it's used to build the format pattern.\n    this.locales = locales\n    this.resolvedLocale = IntlMessageFormat.resolveLocale(locales)\n\n    if (typeof message === 'string') {\n      this.message = message\n      if (!IntlMessageFormat.__parse) {\n        throw new TypeError(\n          'IntlMessageFormat.__parse must be set to process `message` of type `string`'\n        )\n      }\n      const {...parseOpts} = opts || {}\n      // Parse string messages into an AST.\n      this.ast = IntlMessageFormat.__parse(message, {\n        ...parseOpts,\n        locale: this.resolvedLocale,\n      })\n    } else {\n      this.ast = message\n    }\n\n    if (!Array.isArray(this.ast)) {\n      throw new TypeError('A message must be provided as a String or AST.')\n    }\n\n    // Creates a new object with the specified `formats` merged with the default\n    // formats.\n    this.formats = mergeConfigs(IntlMessageFormat.formats, overrideFormats)\n\n    this.formatters =\n      (opts && opts.formatters) || createDefaultFormatters(this.formatterCache)\n  }\n\n  format = <T = void>(\n    values?: Record<string, PrimitiveType | T | FormatXMLElementFn<T>>\n  ): string | T | (string | T)[] => {\n    const parts = this.formatToParts(values)\n    // Hot path for straight simple msg translations\n    if (parts.length === 1) {\n      return parts[0].value\n    }\n    const result = parts.reduce(\n      (all, part) => {\n        if (\n          !all.length ||\n          part.type !== PART_TYPE.literal ||\n          typeof all[all.length - 1] !== 'string'\n        ) {\n          all.push(part.value)\n        } else {\n          all[all.length - 1] += part.value\n        }\n        return all\n      },\n      [] as Array<string | T>\n    )\n\n    if (result.length <= 1) {\n      return result[0] || ''\n    }\n    return result\n  }\n  formatToParts = <T>(\n    values?: Record<string, PrimitiveType | T | FormatXMLElementFn<T>>\n  ): MessageFormatPart<T>[] =>\n    formatToParts(\n      this.ast,\n      this.locales,\n      this.formatters,\n      this.formats,\n      values,\n      undefined,\n      this.message\n    )\n  resolvedOptions = (): {\n    locale: string\n  } => ({\n    locale:\n      this.resolvedLocale?.toString() ||\n      Intl.NumberFormat.supportedLocalesOf(this.locales)[0],\n  })\n  getAst = (): MessageFormatElement[] => this.ast\n  private static memoizedDefaultLocale: string | null = null\n\n  static get defaultLocale(): string {\n    if (!IntlMessageFormat.memoizedDefaultLocale) {\n      IntlMessageFormat.memoizedDefaultLocale =\n        new Intl.NumberFormat().resolvedOptions().locale\n    }\n\n    return IntlMessageFormat.memoizedDefaultLocale\n  }\n  static resolveLocale = (\n    locales: string | string[]\n  ): Intl.Locale | undefined => {\n    if (typeof Intl.Locale === 'undefined') {\n      return\n    }\n    const supportedLocales = Intl.NumberFormat.supportedLocalesOf(locales)\n    if (supportedLocales.length > 0) {\n      return new Intl.Locale(supportedLocales[0])\n    }\n\n    return new Intl.Locale(typeof locales === 'string' ? locales : locales[0])\n  }\n  static __parse: typeof parse | undefined = parse\n  // Default format options used as the prototype of the `formats` provided to the\n  // constructor. These are used when constructing the internal Intl.NumberFormat\n  // and Intl.DateTimeFormat instances.\n  static formats: Formats = {\n    number: {\n      integer: {\n        maximumFractionDigits: 0,\n      },\n      currency: {\n        style: 'currency',\n      },\n\n      percent: {\n        style: 'percent',\n      },\n    },\n\n    date: {\n      short: {\n        month: 'numeric',\n        day: 'numeric',\n        year: '2-digit',\n      },\n\n      medium: {\n        month: 'short',\n        day: 'numeric',\n        year: 'numeric',\n      },\n\n      long: {\n        month: 'long',\n        day: 'numeric',\n        year: 'numeric',\n      },\n\n      full: {\n        weekday: 'long',\n        month: 'long',\n        day: 'numeric',\n        year: 'numeric',\n      },\n    },\n\n    time: {\n      short: {\n        hour: 'numeric',\n        minute: 'numeric',\n      },\n\n      medium: {\n        hour: 'numeric',\n        minute: 'numeric',\n        second: 'numeric',\n      },\n\n      long: {\n        hour: 'numeric',\n        minute: 'numeric',\n        second: 'numeric',\n        timeZoneName: 'short',\n      },\n\n      full: {\n        hour: 'numeric',\n        minute: 'numeric',\n        second: 'numeric',\n        timeZoneName: 'short',\n      },\n    },\n  }\n}\n","import {type NumberFormatOptions} from '#packages/ecma402-abstract/types/number.js'\nimport {type Cache, memoize, strategies} from '@formatjs/fast-memoize'\nimport {IntlMessageFormat} from 'intl-messageformat'\nimport {UnsupportedFormatterError} from '#packages/intl/error.js'\nimport {\n  type CustomFormats,\n  type Formatters,\n  type IntlCache,\n  type OnErrorFn,\n  type OnWarnFn,\n  type ResolvedIntlConfig,\n} from '#packages/intl/types.js'\n\nexport function invariant(\n  condition: boolean,\n  message: string,\n  Err: any = Error\n): asserts condition {\n  if (!condition) {\n    throw new Err(message)\n  }\n}\n\nexport function filterProps<T extends Record<string, any>, K extends string>(\n  props: T,\n  allowlist: Array<K>,\n  defaults: Partial<T> = {}\n): Pick<T, K> {\n  return allowlist.reduce(\n    (filtered, name) => {\n      if (name in props) {\n        filtered[name] = props[name]\n      } else if (name in defaults) {\n        filtered[name] = defaults[name]!\n      }\n\n      return filtered\n    },\n    {} as Pick<T, K>\n  )\n}\n\nconst defaultErrorHandler: OnErrorFn = error => {\n  // @ts-ignore just so we don't need to declare dep on @types/node\n  if (process.env.NODE_ENV !== 'production') {\n    console.error(error)\n  }\n}\n\nconst defaultWarnHandler: OnWarnFn = (warning: string) => {\n  // @ts-ignore just so we don't need to declare dep on @types/node\n  if (process.env.NODE_ENV !== 'production') {\n    console.warn(warning)\n  }\n}\n\nexport const DEFAULT_INTL_CONFIG: Pick<\n  ResolvedIntlConfig<any>,\n  | 'fallbackOnEmptyString'\n  | 'formats'\n  | 'messages'\n  | 'timeZone'\n  | 'defaultLocale'\n  | 'defaultFormats'\n  | 'onError'\n  | 'onWarn'\n> = {\n  formats: {},\n  messages: {},\n  timeZone: undefined,\n\n  defaultLocale: 'en',\n  defaultFormats: {},\n\n  fallbackOnEmptyString: true,\n\n  onError: defaultErrorHandler,\n  onWarn: defaultWarnHandler,\n}\n\nexport function createIntlCache(): IntlCache {\n  return {\n    dateTime: {},\n    number: {},\n    message: {},\n    relativeTime: {},\n    pluralRules: {},\n    list: {},\n    displayNames: {},\n  }\n}\n\nfunction createFastMemoizeCache<V>(\n  store: Record<string, V | undefined>\n): Cache<string, V> {\n  return {\n    create() {\n      return {\n        get(key) {\n          return store[key]\n        },\n        set(key, value) {\n          store[key] = value\n        },\n      }\n    },\n  }\n}\n\n/**\n * Create intl formatters and populate cache\n * @param cache explicit cache to prevent leaking memory\n */\nexport function createFormatters(\n  cache: IntlCache = createIntlCache()\n): Formatters {\n  const RelativeTimeFormat = (Intl as any).RelativeTimeFormat\n  const ListFormat = (Intl as any).ListFormat\n  const DisplayNames = (Intl as any).DisplayNames\n  const getDateTimeFormat = memoize(\n    (...args) => new Intl.DateTimeFormat(...args),\n    {\n      cache: createFastMemoizeCache(cache.dateTime),\n      strategy: strategies.variadic,\n    }\n  )\n  const getNumberFormat = memoize((...args) => new Intl.NumberFormat(...args), {\n    cache: createFastMemoizeCache(cache.number),\n    strategy: strategies.variadic,\n  })\n  const getPluralRules = memoize((...args) => new Intl.PluralRules(...args), {\n    cache: createFastMemoizeCache(cache.pluralRules),\n    strategy: strategies.variadic,\n  })\n  return {\n    getDateTimeFormat,\n    getNumberFormat,\n    getMessageFormat: memoize(\n      (message, locales, overrideFormats, opts) =>\n        new IntlMessageFormat(message, locales, overrideFormats, {\n          formatters: {\n            getNumberFormat,\n            getDateTimeFormat,\n            getPluralRules,\n          },\n          ...opts,\n        }),\n      {\n        cache: createFastMemoizeCache(cache.message),\n        strategy: strategies.variadic,\n      }\n    ),\n    getRelativeTimeFormat: memoize(\n      (...args) => new RelativeTimeFormat(...args),\n      {\n        cache: createFastMemoizeCache(cache.relativeTime),\n        strategy: strategies.variadic,\n      }\n    ),\n    getPluralRules,\n    getListFormat: memoize((...args) => new ListFormat(...args), {\n      cache: createFastMemoizeCache(cache.list),\n      strategy: strategies.variadic,\n    }),\n    getDisplayNames: memoize((...args) => new DisplayNames(...args), {\n      cache: createFastMemoizeCache(cache.displayNames),\n      strategy: strategies.variadic,\n    }),\n  }\n}\n\nexport function getNamedFormat<T extends keyof CustomFormats>(\n  formats: CustomFormats,\n  type: T,\n  name: string,\n  onError: OnErrorFn\n):\n  | NumberFormatOptions\n  | Intl.DateTimeFormatOptions\n  | Intl.RelativeTimeFormatOptions\n  | undefined {\n  const formatType = formats && formats[type]\n  let format\n  if (formatType) {\n    format = formatType[name]\n  }\n  if (format) {\n    return format\n  }\n\n  onError(new UnsupportedFormatterError(`No ${type} format named: ${name}`))\n}\n","import {\n  type CustomFormats,\n  type Formatters,\n  type MessageDescriptor,\n  type OnErrorFn,\n} from '#packages/intl/types.js'\n\nimport {\n  type MessageFormatElement,\n  TYPE,\n} from '@formatjs/icu-messageformat-parser'\nimport {\n  type FormatXMLElementFn,\n  IntlMessageFormat,\n  type Formatters as IntlMessageFormatFormatters,\n  type Options,\n  type PrimitiveType,\n} from 'intl-messageformat'\nimport {\n  MessageFormatError,\n  MissingTranslationError,\n} from '#packages/intl/error.js'\nimport {invariant} from '#packages/intl/utils.js'\n\nfunction setTimeZoneInOptions(\n  opts: Record<string, Intl.DateTimeFormatOptions>,\n  timeZone: string\n): Record<string, Intl.DateTimeFormatOptions> {\n  return Object.keys(opts).reduce(\n    (all: Record<string, Intl.DateTimeFormatOptions>, k) => {\n      all[k] = {\n        timeZone,\n        ...opts[k],\n      }\n      return all\n    },\n    {}\n  )\n}\n\nfunction deepMergeOptions(\n  opts1: Record<string, Intl.DateTimeFormatOptions>,\n  opts2: Record<string, Intl.DateTimeFormatOptions>\n): Record<string, Intl.DateTimeFormatOptions> {\n  const keys = Object.keys({...opts1, ...opts2})\n  return keys.reduce((all: Record<string, Intl.DateTimeFormatOptions>, k) => {\n    all[k] = {\n      ...opts1[k],\n      ...opts2[k],\n    }\n    return all\n  }, {})\n}\n\nfunction deepMergeFormatsAndSetTimeZone(\n  f1: CustomFormats,\n  timeZone?: string\n): CustomFormats {\n  if (!timeZone) {\n    return f1\n  }\n  const mfFormats = IntlMessageFormat.formats\n  return {\n    ...mfFormats,\n    ...f1,\n    date: deepMergeOptions(\n      setTimeZoneInOptions(mfFormats.date, timeZone),\n      setTimeZoneInOptions(f1.date || {}, timeZone)\n    ),\n    time: deepMergeOptions(\n      setTimeZoneInOptions(mfFormats.time, timeZone),\n      setTimeZoneInOptions(f1.time || {}, timeZone)\n    ),\n  }\n}\n\nexport type FormatMessageFn<T> = (\n  {\n    locale,\n    formats,\n    messages,\n    defaultLocale,\n    defaultFormats,\n    fallbackOnEmptyString,\n    onError,\n    timeZone,\n    defaultRichTextElements,\n  }: {\n    locale: string\n    timeZone?: string\n    formats: CustomFormats\n    messages: Record<string, string> | Record<string, MessageFormatElement[]>\n    defaultLocale: string\n    defaultFormats: CustomFormats\n    defaultRichTextElements?: Record<string, FormatXMLElementFn<T>>\n    fallbackOnEmptyString?: boolean\n    onError: OnErrorFn\n  },\n  state: IntlMessageFormatFormatters & Pick<Formatters, 'getMessageFormat'>,\n  messageDescriptor: MessageDescriptor,\n  values?: Record<string, PrimitiveType | T | FormatXMLElementFn<T>>,\n  opts?: Options\n) => T extends string ? string : Array<T | string> | string | T\n\nexport const formatMessage: FormatMessageFn<any> = (\n  {\n    locale,\n    formats,\n    messages,\n    defaultLocale,\n    defaultFormats,\n    fallbackOnEmptyString,\n    onError,\n    timeZone,\n    defaultRichTextElements,\n  },\n  state,\n  messageDescriptor = {id: ''},\n  values,\n  opts\n) => {\n  const {id: msgId, defaultMessage} = messageDescriptor\n\n  // `id` is a required field of a Message Descriptor.\n  invariant(\n    !!msgId,\n    `[@formatjs/intl] An \\`id\\` must be provided to format a message. You can either:\n1. Configure your build toolchain with [babel-plugin-formatjs](https://formatjs.github.io/docs/tooling/babel-plugin)\nor [@formatjs/ts-transformer](https://formatjs.github.io/docs/tooling/ts-transformer) OR\n2. Configure your \\`eslint\\` config to include [eslint-plugin-formatjs](https://formatjs.github.io/docs/tooling/linter#enforce-id)\nto autofix this issue`\n  )\n  const id = String(msgId)\n  const message =\n    // In case messages is Object.create(null)\n    // e.g import('foo.json') from webpack)\n    // See https://github.com/formatjs/formatjs/issues/1914\n    messages &&\n    Object.prototype.hasOwnProperty.call(messages, id) &&\n    messages[id]\n\n  // IMPORTANT: Hot path if `message` is AST with a single literal node\n  if (\n    Array.isArray(message) &&\n    message.length === 1 &&\n    message[0].type === TYPE.literal\n  ) {\n    return message[0].value\n  }\n\n  values = {\n    ...defaultRichTextElements,\n    ...values,\n  }\n  formats = deepMergeFormatsAndSetTimeZone(formats, timeZone)\n  defaultFormats = deepMergeFormatsAndSetTimeZone(defaultFormats, timeZone)\n\n  if (!message) {\n    if (fallbackOnEmptyString === false && message === '') {\n      return message\n    }\n\n    if (\n      !defaultMessage ||\n      (locale && locale.toLowerCase() !== defaultLocale.toLowerCase())\n    ) {\n      // This prevents warnings from littering the console in development\n      // when no `messages` are passed into the <IntlProvider> for the\n      // default locale.\n      onError(new MissingTranslationError(messageDescriptor, locale))\n    }\n    if (defaultMessage) {\n      try {\n        const formatter = state.getMessageFormat(\n          defaultMessage,\n          defaultLocale,\n          defaultFormats,\n          opts\n        )\n\n        return formatter.format(values)\n      } catch (e) {\n        onError(\n          new MessageFormatError(\n            `Error formatting default message for: \"${id}\", rendering default message verbatim`,\n            locale,\n            messageDescriptor,\n            e\n          )\n        )\n        return typeof defaultMessage === 'string' ? defaultMessage : id\n      }\n    }\n    return id\n  }\n\n  // We have the translated message\n  try {\n    const formatter = state.getMessageFormat(message, locale, formats, {\n      formatters: state,\n      ...opts,\n    })\n\n    return formatter.format<any>(values)\n  } catch (e) {\n    onError(\n      new MessageFormatError(\n        `Error formatting message: \"${id}\", using ${\n          defaultMessage ? 'default message' : 'id'\n        } as fallback.`,\n        locale,\n        messageDescriptor,\n        e\n      )\n    )\n  }\n\n  if (defaultMessage) {\n    try {\n      const formatter = state.getMessageFormat(\n        defaultMessage,\n        defaultLocale,\n        defaultFormats,\n        opts\n      )\n\n      return formatter.format(values)\n    } catch (e) {\n      onError(\n        new MessageFormatError(\n          `Error formatting the default message for: \"${id}\", rendering message verbatim`,\n          locale,\n          messageDescriptor,\n          e\n        )\n      )\n    }\n  }\n\n  if (typeof message === 'string') {\n    return message\n  }\n  if (typeof defaultMessage === 'string') {\n    return defaultMessage\n  }\n  return id\n}\n","import {\n  type CustomFormats,\n  type Formatters,\n  type IntlFormatters,\n  type OnErrorFn,\n} from '#packages/intl/types.js'\n\nimport {IntlFormatError} from '#packages/intl/error.js'\nimport {filterProps, getNamedFormat} from '#packages/intl/utils.js'\n\nconst DATE_TIME_FORMAT_OPTIONS: Array<keyof Intl.DateTimeFormatOptions> = [\n  'formatMatcher',\n\n  'timeZone',\n  'hour12',\n\n  'weekday',\n  'era',\n  'year',\n  'month',\n  'day',\n  'hour',\n  'minute',\n  'second',\n  'timeZoneName',\n  'hourCycle',\n  'dateStyle',\n  'timeStyle',\n  'calendar',\n  // 'dayPeriod',\n  'numberingSystem',\n  'fractionalSecondDigits',\n]\n\nexport function getFormatter(\n  {\n    locale,\n    formats,\n    onError,\n    timeZone,\n  }: {\n    locale: string\n    timeZone?: string\n    formats: CustomFormats\n    onError: OnErrorFn\n  },\n  type: 'date' | 'time' | 'dateTimeRange',\n  getDateTimeFormat: Formatters['getDateTimeFormat'],\n  options: Parameters<IntlFormatters['formatDate']>[1] = {}\n): Intl.DateTimeFormat {\n  const {format} = options\n  const defaults = {\n    ...(timeZone && {timeZone}),\n    ...(format && getNamedFormat(formats!, type, format, onError)),\n  }\n\n  let filteredOptions = filterProps(\n    options,\n    DATE_TIME_FORMAT_OPTIONS,\n    defaults\n  ) as Intl.DateTimeFormatOptions\n\n  if (\n    type === 'time' &&\n    !filteredOptions.hour &&\n    !filteredOptions.minute &&\n    !filteredOptions.second &&\n    !filteredOptions.timeStyle &&\n    !filteredOptions.dateStyle\n  ) {\n    // Add default formatting options if hour, minute, or second isn't defined.\n    filteredOptions = {...filteredOptions, hour: 'numeric', minute: 'numeric'}\n  }\n\n  return getDateTimeFormat(locale, filteredOptions)\n}\n\nexport function formatDate(\n  config: {\n    locale: string\n    timeZone?: string\n    formats: CustomFormats\n    onError: OnErrorFn\n  },\n  getDateTimeFormat: Formatters['getDateTimeFormat'],\n  value: Parameters<IntlFormatters['formatDate']>[0],\n  options: Parameters<IntlFormatters['formatDate']>[1] = {}\n): string {\n  const date = typeof value === 'string' ? new Date(value || 0) : value\n  try {\n    return getFormatter(config, 'date', getDateTimeFormat, options).format(date)\n  } catch (e) {\n    config.onError(\n      new IntlFormatError('Error formatting date.', config.locale, e)\n    )\n  }\n\n  return String(date)\n}\n\nexport function formatTime(\n  config: {\n    locale: string\n    timeZone?: string\n    formats: CustomFormats\n    onError: OnErrorFn\n  },\n  getDateTimeFormat: Formatters['getDateTimeFormat'],\n  value: Parameters<IntlFormatters['formatTime']>[0],\n  options: Parameters<IntlFormatters['formatTime']>[1] = {}\n): string {\n  const date = typeof value === 'string' ? new Date(value || 0) : value\n\n  try {\n    return getFormatter(config, 'time', getDateTimeFormat, options).format(date)\n  } catch (e) {\n    config.onError(\n      new IntlFormatError('Error formatting time.', config.locale, e)\n    )\n  }\n\n  return String(date)\n}\n\nexport function formatDateTimeRange(\n  config: {\n    locale: string\n    timeZone?: string\n    formats: CustomFormats\n    onError: OnErrorFn\n  },\n  getDateTimeFormat: Formatters['getDateTimeFormat'],\n  from: Parameters<IntlFormatters['formatDateTimeRange']>[0],\n  to: Parameters<IntlFormatters['formatDateTimeRange']>[1],\n  options: Parameters<IntlFormatters['formatDateTimeRange']>[2] = {}\n): string {\n  const fromDate = typeof from === 'string' ? new Date(from || 0) : from\n  const toDate = typeof to === 'string' ? new Date(to || 0) : to\n\n  try {\n    return getFormatter(\n      config,\n      'dateTimeRange',\n      getDateTimeFormat,\n      options\n    ).formatRange(fromDate, toDate)\n  } catch (e) {\n    config.onError(\n      new IntlFormatError('Error formatting date time range.', config.locale, e)\n    )\n  }\n\n  return String(fromDate)\n}\n\nexport function formatDateToParts(\n  config: {\n    locale: string\n    timeZone?: string\n    formats: CustomFormats\n    onError: OnErrorFn\n  },\n  getDateTimeFormat: Formatters['getDateTimeFormat'],\n  value: Parameters<IntlFormatters['formatDate']>[0],\n  options: Parameters<IntlFormatters['formatDate']>[1] = {}\n): Intl.DateTimeFormatPart[] {\n  const date = typeof value === 'string' ? new Date(value || 0) : value\n  try {\n    return getFormatter(\n      config,\n      'date',\n      getDateTimeFormat,\n      options\n    ).formatToParts(date) as Intl.DateTimeFormatPart[] // TODO: remove this when https://github.com/microsoft/TypeScript/pull/50402 is merged\n  } catch (e) {\n    config.onError(\n      new IntlFormatError('Error formatting date.', config.locale, e)\n    )\n  }\n\n  return []\n}\n\nexport function formatTimeToParts(\n  config: {\n    locale: string\n    timeZone?: string\n    formats: CustomFormats\n    onError: OnErrorFn\n  },\n  getDateTimeFormat: Formatters['getDateTimeFormat'],\n  value: Parameters<IntlFormatters['formatTimeToParts']>[0],\n  options: Parameters<IntlFormatters['formatTimeToParts']>[1] = {}\n): Intl.DateTimeFormatPart[] {\n  const date = typeof value === 'string' ? new Date(value || 0) : value\n\n  try {\n    return getFormatter(\n      config,\n      'time',\n      getDateTimeFormat,\n      options\n    ).formatToParts(date) as Intl.DateTimeFormatPart[] // TODO: remove this when https://github.com/microsoft/TypeScript/pull/50402 is merged\n  } catch (e) {\n    config.onError(\n      new IntlFormatError('Error formatting time.', config.locale, e)\n    )\n  }\n\n  return []\n}\n","import {\n  type Formatters,\n  type IntlFormatters,\n  type OnErrorFn,\n} from '#packages/intl/types.js'\nimport {filterProps} from '#packages/intl/utils.js'\n\nimport {ErrorCode, FormatError} from 'intl-messageformat'\nimport {IntlFormatError} from '#packages/intl/error.js'\n\nconst DISPLAY_NAMES_OPTONS: Array<keyof Intl.DisplayNamesOptions> = [\n  'style',\n  'type',\n  'fallback',\n  'languageDisplay',\n]\n\nexport function formatDisplayName(\n  {\n    locale,\n    onError,\n  }: {\n    locale: string\n    onError: OnErrorFn\n  },\n  getDisplayNames: Formatters['getDisplayNames'],\n  value: Parameters<IntlFormatters['formatDisplayName']>[0],\n  options: Parameters<IntlFormatters['formatDisplayName']>[1]\n): string | undefined {\n  const DisplayNames: typeof Intl.DisplayNames = (Intl as any).DisplayNames\n  if (!DisplayNames) {\n    onError(\n      new FormatError(\n        `Intl.DisplayNames is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-displaynames\"\n`,\n        ErrorCode.MISSING_INTL_API\n      )\n    )\n  }\n  const filteredOptions = filterProps(\n    options,\n    DISPLAY_NAMES_OPTONS\n  ) as Intl.DisplayNamesOptions\n  try {\n    return getDisplayNames(locale, filteredOptions).of(value)\n  } catch (e) {\n    onError(new IntlFormatError('Error formatting display name.', locale, e))\n  }\n}\n","import {ErrorCode, FormatError} from 'intl-messageformat'\nimport {IntlFormatError} from '#packages/intl/error.js'\nimport {\n  type Formatters,\n  type IntlFormatters,\n  type OnErrorFn,\n  type Part,\n} from '#packages/intl/types.js'\nimport {filterProps} from '#packages/intl/utils.js'\n\nconst LIST_FORMAT_OPTIONS: Array<keyof Intl.ListFormatOptions> = [\n  'type',\n  'style',\n]\n\nconst now = Date.now()\n\nfunction generateToken(i: number): string {\n  return `${now}_${i}_${now}`\n}\n\nexport function formatList(\n  opts: {\n    locale: string\n    onError: OnErrorFn\n  },\n  getListFormat: Formatters['getListFormat'],\n  values: Iterable<string>,\n  options: Parameters<IntlFormatters['formatList']>[1]\n): string\nexport function formatList<T>(\n  opts: {\n    locale: string\n    onError: OnErrorFn\n  },\n  getListFormat: Formatters['getListFormat'],\n  values: Iterable<string | T>,\n  options: Parameters<IntlFormatters['formatList']>[1] = {}\n): Array<T | string> | T | string {\n  const results = formatListToParts(\n    opts,\n    getListFormat,\n    values,\n    options\n  ).reduce((all: Array<string | T>, el) => {\n    const val = el.value\n    if (typeof val !== 'string') {\n      all.push(val)\n    } else if (typeof all[all.length - 1] === 'string') {\n      all[all.length - 1] += val\n    } else {\n      all.push(val)\n    }\n    return all\n  }, [])\n  return results.length === 1 ? results[0] : results.length === 0 ? '' : results\n}\n\nexport function formatListToParts<T>(\n  opts: {\n    locale: string\n    onError: OnErrorFn\n  },\n  getListFormat: Formatters['getListFormat'],\n  values: Iterable<string | T>,\n  options: Parameters<IntlFormatters['formatList']>[1]\n): Part[]\nexport function formatListToParts<T>(\n  {\n    locale,\n    onError,\n  }: {\n    locale: string\n    onError: OnErrorFn\n  },\n  getListFormat: Formatters['getListFormat'],\n  values: Parameters<IntlFormatters['formatList']>[0],\n  options: Parameters<IntlFormatters['formatList']>[1] = {}\n): Part<T>[] {\n  const ListFormat: typeof Intl.ListFormat = Intl.ListFormat\n  if (!ListFormat) {\n    onError(\n      new FormatError(\n        `Intl.ListFormat is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-listformat\"\n`,\n        ErrorCode.MISSING_INTL_API\n      )\n    )\n  }\n  const filteredOptions = filterProps(\n    options,\n    LIST_FORMAT_OPTIONS\n  ) as Intl.ListFormatOptions\n\n  try {\n    const richValues: Record<string, T> = {}\n    const serializedValues = Array.from(values).map((v, i) => {\n      if (typeof v === 'object' && v !== null) {\n        const id = generateToken(i)\n        richValues[id] = v as any\n        return id\n      }\n      return String(v)\n    })\n    return getListFormat(locale, filteredOptions)\n      .formatToParts(serializedValues)\n      .map(\n        part =>\n          (part.type === 'literal'\n            ? part\n            : {...part, value: richValues[part.value] || part.value}) as Part<T>\n      )\n  } catch (e) {\n    onError(new IntlFormatError('Error formatting list.', locale, e))\n  }\n\n  // @ts-ignore\n  return values\n}\n","import {ErrorCode, FormatError} from 'intl-messageformat'\nimport {IntlFormatError} from '#packages/intl/error.js'\nimport {\n  type Formatters,\n  type IntlFormatters,\n  type OnErrorFn,\n} from '#packages/intl/types.js'\nimport {filterProps} from '#packages/intl/utils.js'\n\nconst PLURAL_FORMAT_OPTIONS: Array<keyof Intl.PluralRulesOptions> = ['type']\n\nexport function formatPlural(\n  {\n    locale,\n    onError,\n  }: {\n    locale: string\n    onError: OnErrorFn\n  },\n  getPluralRules: Formatters['getPluralRules'],\n  value: Parameters<IntlFormatters['formatPlural']>[0],\n  options: Parameters<IntlFormatters['formatPlural']>[1] = {}\n): Intl.LDMLPluralRule {\n  if (!Intl.PluralRules) {\n    onError(\n      new FormatError(\n        `Intl.PluralRules is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-pluralrules\"\n`,\n        ErrorCode.MISSING_INTL_API\n      )\n    )\n  }\n  const filteredOptions = filterProps(\n    options,\n    PLURAL_FORMAT_OPTIONS\n  ) as Intl.PluralRulesOptions\n\n  try {\n    return getPluralRules(locale, filteredOptions).select(\n      value\n    ) as Intl.LDMLPluralRule\n  } catch (e) {\n    onError(new IntlFormatError('Error formatting plural.', locale, e))\n  }\n\n  return 'other'\n}\n","import {\n  type IntlFormatters,\n  type Formatters,\n  type CustomFormats,\n  type OnErrorFn,\n} from '#packages/intl/types.js'\n\nimport {getNamedFormat, filterProps} from '#packages/intl/utils.js'\nimport {FormatError, ErrorCode} from 'intl-messageformat'\nimport {IntlFormatError} from '#packages/intl/error.js'\n\nconst RELATIVE_TIME_FORMAT_OPTIONS: Array<\n  keyof Intl.RelativeTimeFormatOptions\n> = ['numeric', 'style']\n\nfunction getFormatter(\n  {\n    locale,\n    formats,\n    onError,\n  }: {\n    locale: string\n    formats: CustomFormats\n    onError: OnErrorFn\n  },\n  getRelativeTimeFormat: Formatters['getRelativeTimeFormat'],\n  options: Parameters<IntlFormatters['formatRelativeTime']>[2] = {}\n): Intl.RelativeTimeFormat {\n  const {format} = options\n\n  const defaults =\n    (!!format && getNamedFormat(formats, 'relative', format, onError)) || {}\n  const filteredOptions = filterProps(\n    options,\n    RELATIVE_TIME_FORMAT_OPTIONS,\n    defaults as Intl.RelativeTimeFormatOptions\n  ) as Intl.RelativeTimeFormatOptions\n\n  return getRelativeTimeFormat(locale, filteredOptions)\n}\n\nexport function formatRelativeTime(\n  config: {\n    locale: string\n    formats: CustomFormats\n    onError: OnErrorFn\n  },\n  getRelativeTimeFormat: Formatters['getRelativeTimeFormat'],\n  value: Parameters<IntlFormatters['formatRelativeTime']>[0],\n  unit?: Parameters<IntlFormatters['formatRelativeTime']>[1],\n  options: Parameters<IntlFormatters['formatRelativeTime']>[2] = {}\n): string {\n  if (!unit) {\n    unit = 'second'\n  }\n  const RelativeTimeFormat = Intl.RelativeTimeFormat\n  if (!RelativeTimeFormat) {\n    config.onError(\n      new FormatError(\n        `Intl.RelativeTimeFormat is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-relativetimeformat\"\n`,\n        ErrorCode.MISSING_INTL_API\n      )\n    )\n  }\n  try {\n    return getFormatter(config, getRelativeTimeFormat, options).format(\n      value,\n      unit\n    )\n  } catch (e) {\n    config.onError(\n      new IntlFormatError('Error formatting relative time.', config.locale, e)\n    )\n  }\n\n  return String(value)\n}\n","import type { IntlShape } from '@formatjs/intl';\n\nexport type FormatMessageParameters = Parameters<\n  IntlShape<string>['formatMessage']\n>;\n\nexport function formatMessage(\n  intlShape: IntlShape,\n  ...[descriptor, parameters]: FormatMessageParameters\n): string {\n  return intlShape.formatMessage(descriptor, parameters, {\n    ignoreTag: true,\n  }) as string;\n}\n","import { isHTMLSafe, type SafeString } from '@ember/template';\n\nconst escaped: Record<string, string> = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#x27;',\n  '`': '&#x60;',\n  '=': '&#x3D;',\n};\nconst needToEscape = /[&<>\"'`=]/;\nconst badCharacters = /[&<>\"'`=]/g;\n\n// https://github.com/emberjs/ember.js/blob/v5.12.0/packages/%40ember/-internals/glimmer/lib/utils/string.ts#L103-L118\nfunction escapeExpression(value: string): string {\n  if (!needToEscape.test(value)) {\n    return value;\n  }\n\n  return value.replace(badCharacters, (character: string) => {\n    return escaped[character]!;\n  });\n}\n\ntype EscapedOptions<T extends Record<string, unknown>> = {\n  [K in keyof T]: T[K] extends SafeString ? string : T[K];\n};\n\n/**\n * @private\n */\nexport function escapeFormatMessageOptions<T extends Record<string, unknown>>(\n  options: T,\n): EscapedOptions<T> {\n  const escapedOptions = {} as EscapedOptions<T>;\n\n  for (const [key, value] of Object.entries(options)) {\n    let newValue;\n\n    if (isHTMLSafe(value)) {\n      /*\n        Cast `value`, an instance of `SafeString`, to a string\n        using `.toHTML()`. Since `value` is assumed to be safe,\n        we don't need to call `escapeExpression()`.\n      */\n      newValue = value.toHTML();\n    } else if (typeof value === 'string') {\n      newValue = escapeExpression(value);\n    } else {\n      newValue = value;\n    }\n\n    // @ts-expect-error: Type not specific enough\n    escapedOptions[key] = newValue;\n  }\n\n  return escapedOptions;\n}\n","/**\n * @private\n */\nexport function convertToArray(locale: string | string[]): string[] {\n  if (Array.isArray(locale)) {\n    return locale;\n  }\n\n  return [locale];\n}\n\n/**\n * @private\n */\nexport function convertToString(locale: string | string[]): string {\n  if (Array.isArray(locale)) {\n    return locale[0]!;\n  }\n\n  return locale;\n}\n\ntype MaybeLocale = string[] | string | null | undefined;\n\n/**\n * @private\n */\nexport function hasLocaleChanged(\n  locale1: string[],\n  locale2: MaybeLocale,\n): boolean {\n  if (!Array.isArray(locale2)) {\n    return true;\n  }\n\n  return locale1.toString() !== locale2.toString();\n}\n\n/**\n * @private\n */\nexport function normalizeLocale(locale: string): string {\n  return locale.replace(/_/g, '-').toLowerCase();\n}\n","type TranslationKey = string;\n\ntype TranslationMessage = string;\n\nexport type TranslationJson = {\n  [key: TranslationKey]: TranslationJson | TranslationMessage;\n};\n\n/**\n * @private\n */\nexport function flattenKeys(object: TranslationJson): TranslationJson {\n  const result: TranslationJson = {};\n\n  for (const key in object) {\n    if (!Object.prototype.hasOwnProperty.call(object, key)) {\n      continue;\n    }\n\n    const value = object[key];\n\n    // If `value` is not `null`\n    if (value && typeof value === 'object') {\n      const hash = flattenKeys(value);\n\n      for (const suffix in hash) {\n        const translation = hash[suffix];\n\n        if (typeof translation !== 'undefined') {\n          result[`${key}.${suffix}`] = translation;\n        }\n      }\n    } else {\n      if (typeof value !== 'undefined') {\n        result[key] = value;\n      }\n    }\n  }\n\n  return result;\n}\n","import { cancel, next, type Timer as EmberRunTimer } from '@ember/runloop';\nimport Service from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport { tracked } from '@glimmer/tracking';\n\nimport type {\n  FormatDateParameters,\n  FormatDateRangeParameters,\n  FormatDisplayNameParameters,\n  FormatListParameters,\n  FormatMessageParameters,\n  FormatNumberParameters,\n  FormatRelativeTimeParameters,\n  Formats,\n  FormatTimeParameters,\n  IntlShape,\n  OnErrorFn,\n} from '../-private/formatjs/index.ts';\nimport {\n  convertToFormatjsFormats,\n  createIntl,\n  createIntlCache,\n  formatDate,\n  formatDateRange,\n  formatDisplayName,\n  formatList,\n  formatMessage,\n  formatNumber,\n  formatRelativeTime,\n  formatTime,\n} from '../-private/formatjs/index.ts';\nimport { escapeFormatMessageOptions } from '../-private/utils/escape-format-message-options.ts';\nimport { getHtmlElement } from '../-private/utils/get-html-element.ts';\nimport {\n  convertToArray,\n  convertToString,\n  hasLocaleChanged,\n  normalizeLocale,\n} from '../-private/utils/locale.ts';\nimport {\n  flattenKeys,\n  type TranslationJson,\n} from '../-private/utils/translations.ts';\n\nexport type { Formats };\n\ntype OnFormatjsError = (error: Parameters<OnErrorFn>[0]) => void;\n\ntype OnMissingTranslation = (\n  key: string,\n  locales: string[],\n  data?: Record<string, unknown>,\n) => string;\n\nexport default class IntlService extends Service {\n  @tracked private _intls: Record<string, IntlShape> = {};\n  @tracked private _locale?: string[];\n\n  private _cache = createIntlCache();\n  private _formats: Formats = {};\n  private _onFormatjsError: OnFormatjsError = (error) => {\n    switch (error.code) {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n      case 'MISSING_DATA': {\n        console.warn(error.message);\n        break;\n      }\n\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n      case 'MISSING_TRANSLATION': {\n        // Do nothing\n        break;\n      }\n\n      default: {\n        throw error;\n      }\n    }\n  };\n  private _onMissingTranslation: OnMissingTranslation = (key, locales) => {\n    const locale = locales.join(', ');\n\n    return `Missing translation \"${key}\" for locale \"${locale}\"`;\n  };\n  private _timer?: EmberRunTimer;\n\n  get locales(): string[] {\n    return Object.keys(this._intls);\n  }\n\n  get primaryLocale(): string | undefined {\n    if (!this._locale) {\n      return;\n    }\n\n    return this._locale[0];\n  }\n\n  addTranslations(locale: string, translations: TranslationJson): void {\n    const messages = flattenKeys(translations);\n\n    this.updateIntl(locale, messages);\n  }\n\n  private createIntl(\n    locale: string | string[],\n    messages: Record<string, unknown> = {},\n  ): IntlShape {\n    const resolvedLocale = convertToString(locale);\n    const formats = convertToFormatjsFormats(this._formats);\n\n    return createIntl(\n      {\n        defaultFormats: formats,\n        defaultLocale: resolvedLocale,\n        formats,\n        locale: resolvedLocale,\n        // @ts-expect-error: Type 'Record<string, unknown>' is not assignable\n        messages,\n        onError: this._onFormatjsError,\n      },\n      this._cache,\n    );\n  }\n\n  exists(key: string, locale?: string | string[]): boolean {\n    const locales = locale ? convertToArray(locale) : this._locale!;\n\n    return locales.some((locale) => {\n      return this.getTranslation(key, locale) !== undefined;\n    });\n  }\n\n  formatDate(\n    value: FormatDateParameters[0] | undefined | null,\n    options?: FormatDateParameters[1] & {\n      locale?: string;\n    },\n  ): string {\n    if (value === undefined || value === null) {\n      return '';\n    }\n\n    const intlShape = this.getIntlShape(options?.locale);\n\n    return formatDate(intlShape, value, options);\n  }\n\n  formatDateRange(\n    from: FormatDateRangeParameters[0] | undefined | null,\n    to: FormatDateRangeParameters[1] | undefined | null,\n    options?: FormatDateRangeParameters[2] & {\n      locale?: string;\n    },\n  ): string {\n    if (from === undefined || from === null) {\n      return '';\n    }\n\n    if (to === undefined || to === null) {\n      return '';\n    }\n\n    const intlShape = this.getIntlShape(options?.locale);\n\n    return formatDateRange(intlShape, from, to, options);\n  }\n\n  formatDisplayName(\n    value: FormatDisplayNameParameters[0] | undefined | null,\n    options: FormatDisplayNameParameters[1] & {\n      locale?: string;\n    },\n  ): string {\n    if (value === undefined || value === null) {\n      return '';\n    }\n\n    const intlShape = this.getIntlShape(options?.locale);\n\n    return formatDisplayName(intlShape, value, options);\n  }\n\n  formatList(\n    value: FormatListParameters[0] | undefined | null,\n    options?: FormatListParameters[1] & {\n      locale?: string;\n    },\n  ): string {\n    if (value === undefined || value === null) {\n      return '';\n    }\n\n    const intlShape = this.getIntlShape(options?.locale);\n\n    return formatList(intlShape, value, options);\n  }\n\n  formatMessage(\n    value: FormatMessageParameters[0] | string | undefined | null,\n    options?: FormatMessageParameters[1] & {\n      htmlSafe?: boolean;\n      locale?: string;\n    },\n  ): string {\n    if (value === undefined || value === null) {\n      return '';\n    }\n\n    const intlShape = this.getIntlShape(options?.locale);\n\n    const descriptor =\n      typeof value === 'object'\n        ? value\n        : {\n            defaultMessage: value,\n            description: undefined,\n            id: value,\n          };\n\n    if (options?.htmlSafe) {\n      const output = formatMessage(\n        intlShape,\n        descriptor,\n        escapeFormatMessageOptions(options),\n      );\n\n      return htmlSafe(output) as unknown as string;\n    }\n\n    return formatMessage(intlShape, descriptor, options);\n  }\n\n  formatNumber(\n    value: FormatNumberParameters[0] | undefined | null,\n    options?: FormatNumberParameters[1] & {\n      locale?: string;\n    },\n  ): string {\n    if (value === undefined || value === null) {\n      return '';\n    }\n\n    const intlShape = this.getIntlShape(options?.locale);\n\n    return formatNumber(intlShape, value, options);\n  }\n\n  formatRelativeTime(\n    value: FormatRelativeTimeParameters[0] | undefined | null,\n    options?: FormatRelativeTimeParameters[2] & {\n      locale?: string;\n      unit?: FormatRelativeTimeParameters[1];\n    },\n  ): string {\n    if (value === undefined || value === null) {\n      return '';\n    }\n\n    const intlShape = this.getIntlShape(options?.locale);\n\n    return formatRelativeTime(intlShape, value, options?.unit, options);\n  }\n\n  formatTime(\n    value: FormatTimeParameters[0] | undefined | null,\n    options?: FormatTimeParameters[1] & {\n      locale?: string;\n    },\n  ): string {\n    if (value === undefined || value === null) {\n      return '';\n    }\n\n    const intlShape = this.getIntlShape(options?.locale);\n\n    return formatTime(intlShape, value, options);\n  }\n\n  private getIntl(locale: string | string[]): IntlShape | undefined {\n    const resolvedLocale = normalizeLocale(convertToString(locale));\n\n    return this._intls[resolvedLocale];\n  }\n\n  private getIntlShape(locale?: string): IntlShape {\n    if (locale) {\n      return this.createIntl(locale);\n    }\n\n    return this.getIntl(this._locale!)!;\n  }\n\n  getTranslation(key: string, locale: string): string | undefined {\n    const messages = this.getIntl(locale)?.messages;\n\n    if (!messages) {\n      return;\n    }\n\n    return messages[key] as string | undefined;\n  }\n\n  setFormats(formats: Formats): void {\n    this._formats = formats;\n\n    // Call `updateIntl` to update `formats` for each locale\n    this.locales.forEach((locale) => {\n      this.updateIntl(locale, {});\n    });\n  }\n\n  setLocale(locale: string | string[]): void {\n    const proposedLocale = convertToArray(locale);\n\n    if (hasLocaleChanged(proposedLocale, this._locale)) {\n      this._locale = proposedLocale;\n\n      // eslint-disable-next-line ember/no-runloop\n      cancel(this._timer);\n\n      // eslint-disable-next-line ember/no-runloop\n      this._timer = next(() => {\n        this.updateDocumentLanguage();\n      });\n    }\n\n    this.updateIntl(proposedLocale);\n  }\n\n  setOnFormatjsError(onFormatjsError: OnFormatjsError): void {\n    this._onFormatjsError = onFormatjsError;\n\n    // Call `updateIntl` to update `onError` for each locale\n    this.locales.forEach((locale) => {\n      this.updateIntl(locale, {});\n    });\n  }\n\n  setOnMissingTranslation(onMissingTranslation: OnMissingTranslation): void {\n    this._onMissingTranslation = onMissingTranslation;\n  }\n\n  t(\n    key: string,\n    options?: FormatMessageParameters[1] & {\n      htmlSafe?: boolean;\n      locale?: string;\n    },\n  ): string {\n    const locales = options?.locale ? [options.locale] : this._locale!;\n    let translation: string | undefined;\n\n    for (const locale of locales) {\n      translation = this.getTranslation(key, locale);\n\n      if (translation !== undefined) {\n        break;\n      }\n    }\n\n    if (translation === undefined) {\n      return this._onMissingTranslation(key, locales, options);\n    }\n\n    // Bypass @formatjs/intl\n    if (translation === '') {\n      return '';\n    }\n\n    return this.formatMessage(\n      {\n        defaultMessage: translation,\n        id: key,\n      },\n      options,\n    );\n  }\n\n  private updateDocumentLanguage(): void {\n    const html = getHtmlElement(this);\n    const { primaryLocale } = this;\n\n    if (!html || !primaryLocale) {\n      return;\n    }\n\n    html.setAttribute('lang', primaryLocale);\n  }\n\n  private updateIntl(\n    locale: string | string[],\n    messages?: Record<string, unknown>,\n  ): void {\n    const resolvedLocale = normalizeLocale(convertToString(locale));\n    const intl = this._intls[resolvedLocale];\n\n    let newIntl;\n\n    if (!intl) {\n      newIntl = this.createIntl(resolvedLocale, messages);\n    } else if (messages) {\n      newIntl = this.createIntl(resolvedLocale, {\n        ...(intl.messages ?? {}),\n        ...messages,\n      });\n    }\n\n    if (!newIntl) {\n      return;\n    }\n\n    this._intls = {\n      ...this._intls,\n      [resolvedLocale]: newIntl,\n    };\n  }\n\n  willDestroy(): void {\n    super.willDestroy();\n\n    // eslint-disable-next-line ember/no-runloop\n    cancel(this._timer);\n  }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your services.\ndeclare module '@ember/service' {\n  interface Registry {\n    intl: IntlService;\n  }\n}\n","import type { CustomFormats as FormatjsFormats } from '@formatjs/intl';\n\nexport type Formats = Partial<{\n  formatDate: FormatjsFormats['date'];\n  formatDateRange: FormatjsFormats['dateTimeRange'];\n  formatNumber: FormatjsFormats['number'];\n  formatRelativeTime: FormatjsFormats['relative'];\n  formatTime: FormatjsFormats['time'];\n}>;\n\nexport function convertToFormatjsFormats(formats: Formats): FormatjsFormats {\n  const formatjsFormats: FormatjsFormats = {\n    dateTimeRange: formats.formatDateRange,\n    date: formats.formatDate,\n    number: formats.formatNumber,\n    relative: formats.formatRelativeTime,\n    time: formats.formatTime,\n  };\n\n  return formatjsFormats;\n}\n","import {type MessageFormatElement} from '@formatjs/icu-messageformat-parser'\nimport {\n  formatDate,\n  formatDateTimeRange,\n  formatDateToParts,\n  formatTime,\n  formatTimeToParts,\n} from '#packages/intl/dateTime.js'\nimport {formatDisplayName} from '#packages/intl/displayName.js'\nimport {InvalidConfigError, MissingDataError} from '#packages/intl/error.js'\nimport {formatList, formatListToParts} from '#packages/intl/list.js'\nimport {formatMessage} from '#packages/intl/message.js'\nimport {formatNumber, formatNumberToParts} from '#packages/intl/number.js'\nimport {formatPlural} from '#packages/intl/plural.js'\nimport {formatRelativeTime} from '#packages/intl/relativeTime.js'\nimport {\n  type IntlCache,\n  type IntlConfig,\n  type IntlShape,\n  type ResolvedIntlConfig,\n} from '#packages/intl/types.js'\nimport {createFormatters, DEFAULT_INTL_CONFIG} from '#packages/intl/utils.js'\n\nexport interface CreateIntlFn<\n  T = string,\n  C extends IntlConfig<T> = IntlConfig<T>,\n  S extends IntlShape<T> = IntlShape<T>,\n> {\n  (config: C, cache?: IntlCache): S\n}\n\nfunction messagesContainString(\n  messages: Record<string, string> | Record<string, MessageFormatElement[]>\n): messages is Record<string, MessageFormatElement[]> {\n  const firstMessage = messages ? messages[Object.keys(messages)[0]] : undefined\n\n  return typeof firstMessage === 'string'\n}\n\nfunction verifyConfigMessages<T = string>(config: IntlConfig<T>) {\n  if (\n    config.onWarn &&\n    config.defaultRichTextElements &&\n    messagesContainString(config.messages || {})\n  ) {\n    config.onWarn(`[@formatjs/intl] \"defaultRichTextElements\" was specified but \"message\" was not pre-compiled. \nPlease consider using \"@formatjs/cli\" to pre-compile your messages for performance.\nFor more details see https://formatjs.github.io/docs/getting-started/message-distribution`)\n  }\n}\n\n/**\n * Create intl object\n * @param config intl config\n * @param cache cache for formatter instances to prevent memory leak\n */\nexport function createIntl<T = string>(\n  config: IntlConfig<T>,\n  cache?: IntlCache\n): IntlShape<T> {\n  const formatters = createFormatters(cache)\n  const resolvedConfig: ResolvedIntlConfig<T> = {\n    ...DEFAULT_INTL_CONFIG,\n    ...config,\n  }\n\n  const {locale, defaultLocale, onError} = resolvedConfig\n  if (!locale) {\n    if (onError) {\n      onError(\n        new InvalidConfigError(\n          `\"locale\" was not configured, using \"${defaultLocale}\" as fallback. See https://formatjs.github.io/docs/react-intl/api#intlshape for more details`\n        )\n      )\n    }\n    // Since there's no registered locale data for `locale`, this will\n    // fallback to the `defaultLocale` to make sure things can render.\n    // The `messages` are overridden to the `defaultProps` empty object\n    // to maintain referential equality across re-renders. It's assumed\n    // each <FormattedMessage> contains a `defaultMessage` prop.\n    resolvedConfig.locale = resolvedConfig.defaultLocale || 'en'\n  } else if (!Intl.NumberFormat.supportedLocalesOf(locale).length && onError) {\n    onError(\n      new MissingDataError(\n        `Missing locale data for locale: \"${locale}\" in Intl.NumberFormat. Using default locale: \"${defaultLocale}\" as fallback. See https://formatjs.github.io/docs/react-intl#runtime-requirements for more details`\n      )\n    )\n  } else if (\n    !Intl.DateTimeFormat.supportedLocalesOf(locale).length &&\n    onError\n  ) {\n    onError(\n      new MissingDataError(\n        `Missing locale data for locale: \"${locale}\" in Intl.DateTimeFormat. Using default locale: \"${defaultLocale}\" as fallback. See https://formatjs.github.io/docs/react-intl#runtime-requirements for more details`\n      )\n    )\n  }\n\n  verifyConfigMessages(resolvedConfig)\n  return {\n    ...resolvedConfig,\n    formatters,\n    formatNumber: formatNumber.bind(\n      null,\n      resolvedConfig,\n      formatters.getNumberFormat\n    ),\n    formatNumberToParts: formatNumberToParts.bind(\n      null,\n      resolvedConfig,\n      formatters.getNumberFormat\n    ),\n    formatRelativeTime: formatRelativeTime.bind(\n      null,\n      resolvedConfig,\n      formatters.getRelativeTimeFormat\n    ),\n    formatDate: formatDate.bind(\n      null,\n      resolvedConfig,\n      formatters.getDateTimeFormat\n    ),\n    formatDateToParts: formatDateToParts.bind(\n      null,\n      resolvedConfig,\n      formatters.getDateTimeFormat\n    ),\n    formatTime: formatTime.bind(\n      null,\n      resolvedConfig,\n      formatters.getDateTimeFormat\n    ),\n    formatDateTimeRange: formatDateTimeRange.bind(\n      null,\n      resolvedConfig,\n      formatters.getDateTimeFormat\n    ),\n    formatTimeToParts: formatTimeToParts.bind(\n      null,\n      resolvedConfig,\n      formatters.getDateTimeFormat\n    ),\n    formatPlural: formatPlural.bind(\n      null,\n      resolvedConfig,\n      formatters.getPluralRules\n    ),\n    formatMessage: formatMessage.bind(null, resolvedConfig, formatters),\n    $t: formatMessage.bind(null, resolvedConfig, formatters),\n    formatList: formatList.bind(null, resolvedConfig, formatters.getListFormat),\n    formatListToParts: formatListToParts.bind(\n      null,\n      resolvedConfig,\n      formatters.getListFormat\n    ),\n    formatDisplayName: formatDisplayName.bind(\n      null,\n      resolvedConfig,\n      formatters.getDisplayNames\n    ),\n  }\n}\n","import type { IntlShape } from '@formatjs/intl';\n\nexport type FormatDateParameters = Parameters<IntlShape<string>['formatDate']>;\n\nexport function formatDate(\n  intlShape: IntlShape,\n  ...[value, formatOptions]: FormatDateParameters\n): string {\n  return intlShape.formatDate(value, formatOptions);\n}\n","import type { IntlShape } from '@formatjs/intl';\n\nexport type FormatDateRangeParameters = Parameters<\n  IntlShape<string>['formatDateTimeRange']\n>;\n\nexport function formatDateRange(\n  intlShape: IntlShape,\n  ...[from, to, formatOptions]: FormatDateRangeParameters\n): string {\n  return intlShape.formatDateTimeRange(from, to, formatOptions);\n}\n","import type { IntlShape } from '@formatjs/intl';\n\ntype FormatjsParameters = Parameters<IntlShape<string>['formatDisplayName']>;\n\nexport type FormatDisplayNameParameters = [\n  FormatjsParameters[0],\n  (\n    | {\n        fallback?: FormatjsParameters[1]['fallback'];\n        languageDisplay?: FormatjsParameters[1]['languageDisplay'];\n        locale?: string;\n        style?: FormatjsParameters[1]['style'];\n        type: 'language';\n      }\n    | {\n        fallback?: FormatjsParameters[1]['fallback'];\n        locale?: string;\n        style?: FormatjsParameters[1]['style'];\n        type: Exclude<FormatjsParameters[1]['type'], 'language'>;\n      }\n  ),\n];\n\nexport function formatDisplayName(\n  intlShape: IntlShape,\n  ...[value, formatOptions]: FormatDisplayNameParameters\n): string {\n  return intlShape.formatDisplayName(value, formatOptions) ?? '';\n}\n","import type { IntlShape } from '@formatjs/intl';\n\nexport type FormatListParameters = Parameters<IntlShape<string>['formatList']>;\n\nexport function formatList(\n  intlShape: IntlShape,\n  ...[value, formatOptions]: FormatListParameters\n): string {\n  return intlShape.formatList(value, formatOptions);\n}\n","import type { IntlShape } from '@formatjs/intl';\n\nexport type FormatNumberParameters = Parameters<\n  IntlShape<string>['formatNumber']\n>;\n\nexport function formatNumber(\n  intlShape: IntlShape,\n  ...[value, formatOptions]: FormatNumberParameters\n): string {\n  return intlShape.formatNumber(value, formatOptions);\n}\n","import type { IntlShape } from '@formatjs/intl';\n\nexport type FormatRelativeTimeParameters = Parameters<\n  IntlShape<string>['formatRelativeTime']\n>;\n\nexport function formatRelativeTime(\n  intlShape: IntlShape,\n  ...[value, unit, formatOptions]: FormatRelativeTimeParameters\n): string {\n  return intlShape.formatRelativeTime(value, unit, formatOptions);\n}\n","import type { IntlShape } from '@formatjs/intl';\n\nexport type FormatTimeParameters = Parameters<IntlShape<string>['formatTime']>;\n\nexport function formatTime(\n  intlShape: IntlShape,\n  ...[value, formatOptions]: FormatTimeParameters\n): string {\n  return intlShape.formatTime(value, formatOptions);\n}\n","import { getOwner } from '@ember/owner';\n\ntype SimpleDocument = {\n  documentElement: HTMLHtmlElement;\n};\n\n/**\n * @private\n */\nexport function getHtmlElement(context: object): HTMLHtmlElement | undefined {\n  const owner = getOwner(context);\n\n  if (owner === undefined) {\n    return undefined;\n  }\n\n  const documentService = owner.lookup('service:-document') as\n    | SimpleDocument\n    | undefined;\n\n  return documentService?.documentElement;\n}\n","function createCustomError(name) {\n  function CustomError(message, code) {\n    Error.captureStackTrace && Error.captureStackTrace(this, this.constructor);\n    this.message = message;\n    this.code = code;\n  }\n\n  CustomError.prototype = new Error();\n  CustomError.prototype.name = name;\n  CustomError.prototype.constructor = CustomError;\n\n  return CustomError;\n}\n\nconst LDUnexpectedResponseError = createCustomError('LaunchDarklyUnexpectedResponseError');\nconst LDInvalidEnvironmentIdError = createCustomError('LaunchDarklyInvalidEnvironmentIdError');\nconst LDInvalidUserError = createCustomError('LaunchDarklyInvalidUserError');\nconst LDInvalidEventKeyError = createCustomError('LaunchDarklyInvalidEventKeyError');\nconst LDInvalidArgumentError = createCustomError('LaunchDarklyInvalidArgumentError');\nconst LDFlagFetchError = createCustomError('LaunchDarklyFlagFetchError');\nconst LDInvalidDataError = createCustomError('LaunchDarklyInvalidDataError');\n\nfunction isHttpErrorRecoverable(status) {\n  if (status >= 400 && status < 500) {\n    return status === 400 || status === 408 || status === 429;\n  }\n  return true;\n}\n\nmodule.exports = {\n  LDUnexpectedResponseError,\n  LDInvalidEnvironmentIdError,\n  LDInvalidUserError,\n  LDInvalidEventKeyError,\n  LDInvalidArgumentError,\n  LDInvalidDataError,\n  LDFlagFetchError,\n  isHttpErrorRecoverable,\n};\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n","'use strict';\n\nvar isArray = Array.isArray;\nvar keyList = Object.keys;\nvar hasProp = Object.prototype.hasOwnProperty;\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    var arrA = isArray(a)\n      , arrB = isArray(b)\n      , i\n      , length\n      , key;\n\n    if (arrA && arrB) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n    if (arrA != arrB) return false;\n\n    var dateA = a instanceof Date\n      , dateB = b instanceof Date;\n    if (dateA != dateB) return false;\n    if (dateA && dateB) return a.getTime() == b.getTime();\n\n    var regexpA = a instanceof RegExp\n      , regexpB = b instanceof RegExp;\n    if (regexpA != regexpB) return false;\n    if (regexpA && regexpB) return a.toString() == b.toString();\n\n    var keys = keyList(a);\n    length = keys.length;\n\n    if (length !== keyList(b).length)\n      return false;\n\n    for (i = length; i-- !== 0;)\n      if (!hasProp.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      key = keys[i];\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  return a!==a && b!==b;\n};\n","const base64 = require('base64-js');\nconst fastDeepEqual = require('fast-deep-equal');\n\nconst userAttrsToStringify = ['key', 'ip', 'country', 'email', 'firstName', 'lastName', 'avatar', 'name'];\n\nfunction appendUrlPath(baseUrl, path) {\n  // Ensure that URL concatenation is done correctly regardless of whether the\n  // base URL has a trailing slash or not.\n  const trimBaseUrl = baseUrl.endsWith('/') ? baseUrl.substring(0, baseUrl.length - 1) : baseUrl;\n  return trimBaseUrl + (path.startsWith('/') ? '' : '/') + path;\n}\n\n// See http://ecmanaut.blogspot.com/2006/07/encoding-decoding-utf8-in-javascript.html\nfunction btoa(s) {\n  const escaped = unescape(encodeURIComponent(s));\n  return base64.fromByteArray(stringToBytes(escaped));\n}\n\nfunction stringToBytes(s) {\n  const b = [];\n  for (let i = 0; i < s.length; i++) {\n    b.push(s.charCodeAt(i));\n  }\n  return b;\n}\n\nfunction base64URLEncode(s) {\n  return (\n    btoa(s)\n      // eslint-disable-next-line\n      .replace(/=/g, '')\n      .replace(/\\+/g, '-')\n      .replace(/\\//g, '_')\n  );\n}\n\nfunction clone(obj) {\n  return JSON.parse(JSON.stringify(obj));\n}\n\nfunction deepEquals(a, b) {\n  return fastDeepEqual(a, b);\n}\n\n// Events emitted in LDClient's initialize method will happen before the consumer\n// can register a listener, so defer them to next tick.\nfunction onNextTick(cb) {\n  setTimeout(cb, 0);\n}\n\n/**\n * Wrap a promise to invoke an optional callback upon resolution or rejection.\n *\n * This function assumes the callback follows the Node.js callback type: (err, value) => void\n *\n * If a callback is provided:\n *   - if the promise is resolved, invoke the callback with (null, value)\n *   - if the promise is rejected, invoke the callback with (error, null)\n *\n * @param {Promise<any>} promise\n * @param {Function} callback\n * @returns Promise<any> | undefined\n */\nfunction wrapPromiseCallback(promise, callback) {\n  const ret = promise.then(\n    value => {\n      if (callback) {\n        setTimeout(() => {\n          callback(null, value);\n        }, 0);\n      }\n      return value;\n    },\n    error => {\n      if (callback) {\n        setTimeout(() => {\n          callback(error, null);\n        }, 0);\n      } else {\n        return Promise.reject(error);\n      }\n    }\n  );\n\n  return !callback ? ret : undefined;\n}\n\n/**\n * Takes a map of flag keys to values, and returns the more verbose structure used by the\n * client stream.\n */\nfunction transformValuesToVersionedValues(flags) {\n  const ret = {};\n  for (const key in flags) {\n    if (objectHasOwnProperty(flags, key)) {\n      ret[key] = { value: flags[key], version: 0 };\n    }\n  }\n  return ret;\n}\n\n/**\n * Converts the internal flag state map to a simple map of flag keys to values.\n */\nfunction transformVersionedValuesToValues(flagsState) {\n  const ret = {};\n  for (const key in flagsState) {\n    if (objectHasOwnProperty(flagsState, key)) {\n      ret[key] = flagsState[key].value;\n    }\n  }\n  return ret;\n}\n\n/**\n * Returns an array of event groups each of which can be safely URL-encoded\n * without hitting the safe maximum URL length of certain browsers.\n *\n * @param {number} maxLength maximum URL length targeted\n * @param {Array[Object}]} events queue of events to divide\n * @returns Array[Array[Object]]\n */\nfunction chunkEventsForUrl(maxLength, events) {\n  const allEvents = events.slice(0);\n  const allChunks = [];\n  let remainingSpace = maxLength;\n  let chunk;\n\n  while (allEvents.length > 0) {\n    chunk = [];\n\n    while (remainingSpace > 0) {\n      const event = allEvents.shift();\n      if (!event) {\n        break;\n      }\n      remainingSpace = remainingSpace - base64URLEncode(JSON.stringify(event)).length;\n      // If we are over the max size, put this one back on the queue\n      // to try in the next round, unless this event alone is larger\n      // than the limit, in which case, screw it, and try it anyway.\n      if (remainingSpace < 0 && chunk.length > 0) {\n        allEvents.unshift(event);\n      } else {\n        chunk.push(event);\n      }\n    }\n\n    remainingSpace = maxLength;\n    allChunks.push(chunk);\n  }\n\n  return allChunks;\n}\n\nfunction getLDUserAgentString(platform) {\n  const version = platform.version || '?';\n  return platform.userAgent + '/' + version;\n}\n\nfunction extend(...objects) {\n  return objects.reduce((acc, obj) => ({ ...acc, ...obj }), {});\n}\n\nfunction objectHasOwnProperty(object, name) {\n  return Object.prototype.hasOwnProperty.call(object, name);\n}\n\nfunction sanitizeContext(context) {\n  if (!context) {\n    return context;\n  }\n  let newContext;\n  // Only stringify user attributes for legacy users.\n  if (context.kind === null || context.kind === undefined) {\n    userAttrsToStringify.forEach(attr => {\n      const value = context[attr];\n      if (value !== undefined && typeof value !== 'string') {\n        newContext = newContext || { ...context };\n        newContext[attr] = String(value);\n      }\n    });\n  }\n\n  return newContext || context;\n}\n\nmodule.exports = {\n  appendUrlPath,\n  base64URLEncode,\n  btoa,\n  chunkEventsForUrl,\n  clone,\n  deepEquals,\n  extend,\n  getLDUserAgentString,\n  objectHasOwnProperty,\n  onNextTick,\n  sanitizeContext,\n  transformValuesToVersionedValues,\n  transformVersionedValuesToValues,\n  wrapPromiseCallback,\n};\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n  // lazy load so that environments that need to polyfill have a chance to do so\n  if (!getRandomValues) {\n    // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n    // find the complete implementation of crypto (msCrypto) on IE11.\n    getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n    if (!getRandomValues) {\n      throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n    }\n  }\n\n  return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n  return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n  var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n\n  if (!validate(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n\n  return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\n\nvar _clockseq; // Previous uuid creation time\n\n\nvar _lastMSecs = 0;\nvar _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n  var i = buf && offset || 0;\n  var b = buf || new Array(16);\n  options = options || {};\n  var node = options.node || _nodeId;\n  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n  // specified.  We do this lazily to minimize issues related to insufficient\n  // system entropy.  See #189\n\n  if (node == null || clockseq == null) {\n    var seedBytes = options.random || (options.rng || rng)();\n\n    if (node == null) {\n      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n      node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n    }\n\n    if (clockseq == null) {\n      // Per 4.2.2, randomize (14 bit) clockseq\n      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n    }\n  } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n  var msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n\n  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n  var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n\n\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n  if (nsecs >= 10000) {\n    throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n  }\n\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n  msecs += 12219292800000; // `time_low`\n\n  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n  b[i++] = tl >>> 24 & 0xff;\n  b[i++] = tl >>> 16 & 0xff;\n  b[i++] = tl >>> 8 & 0xff;\n  b[i++] = tl & 0xff; // `time_mid`\n\n  var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff; // `time_high_and_version`\n\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n  b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n  b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n  b[i++] = clockseq & 0xff; // `node`\n\n  for (var n = 0; n < 6; ++n) {\n    b[i + n] = node[n];\n  }\n\n  return buf || stringify(b);\n}\n\nexport default v1;","import validate from './validate.js';\n\nfunction parse(uuid) {\n  if (!validate(uuid)) {\n    throw TypeError('Invalid UUID');\n  }\n\n  var v;\n  var arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n  arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n  arr[1] = v >>> 16 & 0xff;\n  arr[2] = v >>> 8 & 0xff;\n  arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n  arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n  arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n  arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n  arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n  arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n  arr[9] = v & 0xff; // Parse ........-....-....-....-############\n  // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n  arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n  arr[11] = v / 0x100000000 & 0xff;\n  arr[12] = v >>> 24 & 0xff;\n  arr[13] = v >>> 16 & 0xff;\n  arr[14] = v >>> 8 & 0xff;\n  arr[15] = v & 0xff;\n  return arr;\n}\n\nexport default parse;","import stringify from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n  str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n  var bytes = [];\n\n  for (var i = 0; i < str.length; ++i) {\n    bytes.push(str.charCodeAt(i));\n  }\n\n  return bytes;\n}\n\nexport var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function (name, version, hashfunc) {\n  function generateUUID(value, namespace, buf, offset) {\n    if (typeof value === 'string') {\n      value = stringToBytes(value);\n    }\n\n    if (typeof namespace === 'string') {\n      namespace = parse(namespace);\n    }\n\n    if (namespace.length !== 16) {\n      throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n    } // Compute hash of namespace and value, Per 4.3\n    // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n    // hashfunc([...namespace, ... value])`\n\n\n    var bytes = new Uint8Array(16 + value.length);\n    bytes.set(namespace);\n    bytes.set(value, namespace.length);\n    bytes = hashfunc(bytes);\n    bytes[6] = bytes[6] & 0x0f | version;\n    bytes[8] = bytes[8] & 0x3f | 0x80;\n\n    if (buf) {\n      offset = offset || 0;\n\n      for (var i = 0; i < 16; ++i) {\n        buf[offset + i] = bytes[i];\n      }\n\n      return buf;\n    }\n\n    return stringify(bytes);\n  } // Function#name is not settable on some platforms (#270)\n\n\n  try {\n    generateUUID.name = name; // eslint-disable-next-line no-empty\n  } catch (err) {} // For CommonJS default export support\n\n\n  generateUUID.DNS = DNS;\n  generateUUID.URL = URL;\n  return generateUUID;\n}","/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n  if (typeof bytes === 'string') {\n    var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n    bytes = new Uint8Array(msg.length);\n\n    for (var i = 0; i < msg.length; ++i) {\n      bytes[i] = msg.charCodeAt(i);\n    }\n  }\n\n  return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n  var output = [];\n  var length32 = input.length * 32;\n  var hexTab = '0123456789abcdef';\n\n  for (var i = 0; i < length32; i += 8) {\n    var x = input[i >> 5] >>> i % 32 & 0xff;\n    var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n    output.push(hex);\n  }\n\n  return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n  return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n  /* append padding */\n  x[len >> 5] |= 0x80 << len % 32;\n  x[getOutputLength(len) - 1] = len;\n  var a = 1732584193;\n  var b = -271733879;\n  var c = -1732584194;\n  var d = 271733878;\n\n  for (var i = 0; i < x.length; i += 16) {\n    var olda = a;\n    var oldb = b;\n    var oldc = c;\n    var oldd = d;\n    a = md5ff(a, b, c, d, x[i], 7, -680876936);\n    d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n    c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n    b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n    a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n    d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n    c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n    b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n    a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n    d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n    c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n    b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n    a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n    d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n    c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n    b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n    a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n    d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n    c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n    b = md5gg(b, c, d, a, x[i], 20, -373897302);\n    a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n    d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n    c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n    b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n    a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n    d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n    c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n    b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n    a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n    d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n    c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n    b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n    a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n    d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n    c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n    b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n    a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n    d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n    c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n    b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n    a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n    d = md5hh(d, a, b, c, x[i], 11, -358537222);\n    c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n    b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n    a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n    d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n    c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n    b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n    a = md5ii(a, b, c, d, x[i], 6, -198630844);\n    d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n    c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n    b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n    a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n    d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n    c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n    b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n    a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n    d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n    c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n    b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n    a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n    d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n    c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n    b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n    a = safeAdd(a, olda);\n    b = safeAdd(b, oldb);\n    c = safeAdd(c, oldc);\n    d = safeAdd(d, oldd);\n  }\n\n  return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n  if (input.length === 0) {\n    return [];\n  }\n\n  var length8 = input.length * 8;\n  var output = new Uint32Array(getOutputLength(length8));\n\n  for (var i = 0; i < length8; i += 8) {\n    output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n  }\n\n  return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n  var lsw = (x & 0xffff) + (y & 0xffff);\n  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n  return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n  return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n  return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n  return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n  return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n  return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n  return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nexport default md5;","import v35 from './v35.js';\nimport md5 from './md5.js';\nvar v3 = v35('v3', 0x30, md5);\nexport default v3;","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n  switch (s) {\n    case 0:\n      return x & y ^ ~x & z;\n\n    case 1:\n      return x ^ y ^ z;\n\n    case 2:\n      return x & y ^ x & z ^ y & z;\n\n    case 3:\n      return x ^ y ^ z;\n  }\n}\n\nfunction ROTL(x, n) {\n  return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n  var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n  var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n  if (typeof bytes === 'string') {\n    var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n    bytes = [];\n\n    for (var i = 0; i < msg.length; ++i) {\n      bytes.push(msg.charCodeAt(i));\n    }\n  } else if (!Array.isArray(bytes)) {\n    // Convert Array-like to Array\n    bytes = Array.prototype.slice.call(bytes);\n  }\n\n  bytes.push(0x80);\n  var l = bytes.length / 4 + 2;\n  var N = Math.ceil(l / 16);\n  var M = new Array(N);\n\n  for (var _i = 0; _i < N; ++_i) {\n    var arr = new Uint32Array(16);\n\n    for (var j = 0; j < 16; ++j) {\n      arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];\n    }\n\n    M[_i] = arr;\n  }\n\n  M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n  M[N - 1][14] = Math.floor(M[N - 1][14]);\n  M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n  for (var _i2 = 0; _i2 < N; ++_i2) {\n    var W = new Uint32Array(80);\n\n    for (var t = 0; t < 16; ++t) {\n      W[t] = M[_i2][t];\n    }\n\n    for (var _t = 16; _t < 80; ++_t) {\n      W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);\n    }\n\n    var a = H[0];\n    var b = H[1];\n    var c = H[2];\n    var d = H[3];\n    var e = H[4];\n\n    for (var _t2 = 0; _t2 < 80; ++_t2) {\n      var s = Math.floor(_t2 / 20);\n      var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;\n      e = d;\n      d = c;\n      c = ROTL(b, 30) >>> 0;\n      b = a;\n      a = T;\n    }\n\n    H[0] = H[0] + a >>> 0;\n    H[1] = H[1] + b >>> 0;\n    H[2] = H[2] + c >>> 0;\n    H[3] = H[3] + d >>> 0;\n    H[4] = H[4] + e >>> 0;\n  }\n\n  return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nvar v5 = v35('v5', 0x50, sha1);\nexport default v5;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n  options = options || {};\n  var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n  rnds[6] = rnds[6] & 0x0f | 0x40;\n  rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n  if (buf) {\n    offset = offset || 0;\n\n    for (var i = 0; i < 16; ++i) {\n      buf[offset + i] = rnds[i];\n    }\n\n    return buf;\n  }\n\n  return stringify(rnds);\n}\n\nexport default v4;","export default '00000000-0000-0000-0000-000000000000';","import validate from './validate.js';\n\nfunction version(uuid) {\n  if (!validate(uuid)) {\n    throw TypeError('Invalid UUID');\n  }\n\n  return parseInt(uuid.substr(14, 1), 16);\n}\n\nexport default version;","const logLevels = ['debug', 'info', 'warn', 'error', 'none'];\n\n/**\n * A simple logger that writes to stderr.\n */\nfunction commonBasicLogger(options, formatFn) {\n  if (options && options.destination && typeof options.destination !== 'function') {\n    throw new Error('destination for basicLogger was set to a non-function');\n  }\n\n  function toConsole(methodName) {\n    // The global console variable is not guaranteed to be defined at all times in all browsers:\n    // https://www.beyondjava.net/console-log-surprises-with-internet-explorer-11-and-edge\n    return function(line) {\n      if (console && console[methodName]) {\n        console[methodName].call(console, line);\n      }\n    };\n  }\n  const destinations =\n    options && options.destination\n      ? [options.destination, options.destination, options.destination, options.destination]\n      : [toConsole('log'), toConsole('info'), toConsole('warn'), toConsole('error')];\n  const prependLevelToMessage = !!(options && options.destination); // if we're writing to console.warn, etc. we don't need the prefix\n  const prefix =\n    !options || options.prefix === undefined || options.prefix === null ? '[LaunchDarkly] ' : options.prefix;\n\n  let minLevel = 1; // default is 'info'\n  if (options && options.level) {\n    for (let i = 0; i < logLevels.length; i++) {\n      if (logLevels[i] === options.level) {\n        minLevel = i;\n      }\n    }\n  }\n\n  function write(levelIndex, levelName, args) {\n    if (args.length < 1) {\n      return;\n    }\n    let line;\n    const fullPrefix = prependLevelToMessage ? levelName + ': ' + prefix : prefix;\n    if (args.length === 1 || !formatFn) {\n      line = fullPrefix + args[0];\n    } else {\n      const tempArgs = [...args];\n      tempArgs[0] = fullPrefix + tempArgs[0];\n      line = formatFn(...tempArgs);\n    }\n    try {\n      destinations[levelIndex](line);\n    } catch (err) {\n      console &&\n        console.log &&\n        console.log(\"[LaunchDarkly] Configured logger's \" + levelName + ' method threw an exception: ' + err);\n    }\n  }\n\n  const logger = {};\n  for (let i = 0; i < logLevels.length; i++) {\n    const levelName = logLevels[i];\n    if (levelName !== 'none') {\n      if (i < minLevel) {\n        logger[levelName] = () => {};\n      } else {\n        const levelIndex = i;\n        logger[levelName] = function() {\n          // can't use arrow function with \"arguments\"\n          write(levelIndex, levelName, arguments);\n        };\n      }\n    }\n  }\n\n  return logger;\n}\n\nfunction validateLogger(logger) {\n  logLevels.forEach(level => {\n    if (level !== 'none' && (!logger[level] || typeof logger[level] !== 'function')) {\n      throw new Error('Provided logger instance must support logger.' + level + '(...) method');\n      // Note that the SDK normally does not throw exceptions to the application, but that rule\n      // does not apply to LDClient.init() which will throw an exception if the parameters are so\n      // invalid that we cannot proceed with creating the client. An invalid logger meets those\n      // criteria since the SDK calls the logger during nearly all of its operations.\n    }\n  });\n}\n\nmodule.exports = {\n  commonBasicLogger,\n  validateLogger,\n};\n","const errors = require('./errors');\n\nfunction errorString(err) {\n  if (err && err.message) {\n    return err.message;\n  }\n  if (typeof err === 'string' || err instanceof String) {\n    return err;\n  }\n  return JSON.stringify(err);\n}\n\nconst clientInitialized = function() {\n  return 'LaunchDarkly client initialized';\n};\n\nconst docLink =\n  ' Please see https://docs.launchdarkly.com/sdk/client-side/javascript#initializing-the-client for instructions on SDK initialization.';\n\nconst clientNotReady = function() {\n  return 'LaunchDarkly client is not ready';\n};\n\nconst eventCapacityExceeded = function() {\n  return 'Exceeded event queue capacity. Increase capacity to avoid dropping events.';\n};\n\nconst eventWithoutContext = function() {\n  return 'Be sure to call `identify` in the LaunchDarkly client: https://docs.launchdarkly.com/sdk/features/identify#javascript';\n};\n\nconst invalidContentType = function(contentType) {\n  return 'Expected application/json content type but got \"' + contentType + '\"';\n};\n\nconst invalidKey = function() {\n  return 'Event key must be a string';\n};\n\nconst localStorageUnavailable = function(err) {\n  return 'local storage is unavailable: ' + errorString(err);\n};\n\nconst networkError = e => 'network error' + (e ? ' (' + e + ')' : '');\n\n// We should remove unknownCustomEventKey in the future - see comments in track() in index.js\nconst unknownCustomEventKey = function(key) {\n  return 'Custom event \"' + key + '\" does not exist';\n};\n\nconst environmentNotFound = function() {\n  return 'Environment not found. Double check that you specified a valid environment/client-side ID.' + docLink;\n};\n\nconst environmentNotSpecified = function() {\n  return 'No environment/client-side ID was specified.' + docLink;\n};\n\nconst errorFetchingFlags = function(err) {\n  return 'Error fetching flag settings: ' + errorString(err);\n};\n\nconst contextNotSpecified = function() {\n  return 'No context specified.' + docLink;\n};\n\nconst invalidContext = function() {\n  return 'Invalid context specified.' + docLink;\n};\n\nconst invalidData = function() {\n  return 'Invalid data received from LaunchDarkly; connection may have been interrupted';\n};\n\nconst bootstrapOldFormat = function() {\n  return (\n    'LaunchDarkly client was initialized with bootstrap data that did not include flag metadata. ' +\n    'Events may not be sent correctly.' +\n    docLink\n  );\n};\n\nconst bootstrapInvalid = function() {\n  return 'LaunchDarkly bootstrap data is not available because the back end could not read the flags.';\n};\n\nconst deprecated = function(oldName, newName) {\n  if (newName) {\n    return '\"' + oldName + '\" is deprecated, please use \"' + newName + '\"';\n  }\n  return '\"' + oldName + '\" is deprecated';\n};\n\nconst httpErrorMessage = function(status, context, retryMessage) {\n  return (\n    'Received error ' +\n    status +\n    (status === 401 ? ' (invalid SDK key)' : '') +\n    ' for ' +\n    context +\n    ' - ' +\n    (errors.isHttpErrorRecoverable(status) ? retryMessage : 'giving up permanently')\n  );\n};\n\nconst httpUnavailable = function() {\n  return 'Cannot make HTTP requests in this environment.' + docLink;\n};\n\nconst identifyDisabled = function() {\n  return 'identify() has no effect here; it must be called on the main client instance';\n};\n\nconst streamClosing = function() {\n  return 'Closing stream connection';\n};\n\nconst streamConnecting = function(url) {\n  return 'Opening stream connection to ' + url;\n};\n\nconst streamError = function(err, streamReconnectDelay) {\n  return (\n    'Error on stream connection: ' +\n    errorString(err) +\n    ', will continue retrying after ' +\n    streamReconnectDelay +\n    ' milliseconds.'\n  );\n};\n\nconst unknownOption = name => 'Ignoring unknown config option \"' + name + '\"';\n\nconst unrecoverableStreamError = err => `Error on stream connection ${errorString(err)}, giving up permanently`;\n\nconst wrongOptionType = (name, expectedType, actualType) =>\n  'Config option \"' + name + '\" should be of type ' + expectedType + ', got ' + actualType + ', using default value';\n\nconst wrongOptionTypeBoolean = (name, actualType) =>\n  'Config option \"' + name + '\" should be a boolean, got ' + actualType + ', converting to boolean';\n\nconst optionBelowMinimum = (name, value, minimum) =>\n  'Config option \"' + name + '\" was set to ' + value + ', changing to minimum value of ' + minimum;\n\nconst debugPolling = function(url) {\n  return 'polling for feature flags at ' + url;\n};\n\nconst debugStreamPing = function() {\n  return 'received ping message from stream';\n};\n\nconst debugStreamPut = function() {\n  return 'received streaming update for all flags';\n};\n\nconst debugStreamPatch = function(key) {\n  return 'received streaming update for flag \"' + key + '\"';\n};\n\nconst debugStreamPatchIgnored = function(key) {\n  return 'received streaming update for flag \"' + key + '\" but ignored due to version check';\n};\n\nconst debugStreamDelete = function(key) {\n  return 'received streaming deletion for flag \"' + key + '\"';\n};\n\nconst debugStreamDeleteIgnored = function(key) {\n  return 'received streaming deletion for flag \"' + key + '\" but ignored due to version check';\n};\n\nconst debugEnqueueingEvent = function(kind) {\n  return 'enqueueing \"' + kind + '\" event';\n};\n\nconst debugPostingEvents = function(count) {\n  return 'sending ' + count + ' events';\n};\n\nconst debugPostingDiagnosticEvent = function(event) {\n  return 'sending diagnostic event (' + event.kind + ')';\n};\n\nconst invalidInspector = (type, name) => `an inspector: \"${name}\" of an invalid type (${type}) was configured`;\n\nconst inspectorMethodError = (type, name) => `an inspector: \"${name}\" of type: \"${type}\" generated an exception`;\n\nconst invalidTagValue = name => `Config option \"${name}\" must only contain letters, numbers, ., _ or -.`;\n\nconst tagValueTooLong = name => `Value of \"${name}\" was longer than 64 characters and was discarded.`;\n\nmodule.exports = {\n  bootstrapInvalid,\n  bootstrapOldFormat,\n  clientInitialized,\n  clientNotReady,\n  debugEnqueueingEvent,\n  debugPostingDiagnosticEvent,\n  debugPostingEvents,\n  debugStreamDelete,\n  debugStreamDeleteIgnored,\n  debugStreamPatch,\n  debugStreamPatchIgnored,\n  debugStreamPing,\n  debugPolling,\n  debugStreamPut,\n  deprecated,\n  environmentNotFound,\n  environmentNotSpecified,\n  errorFetchingFlags,\n  eventCapacityExceeded,\n  eventWithoutContext,\n  httpErrorMessage,\n  httpUnavailable,\n  identifyDisabled,\n  inspectorMethodError,\n  invalidContentType,\n  invalidData,\n  invalidInspector,\n  invalidKey,\n  invalidContext,\n  invalidTagValue,\n  localStorageUnavailable,\n  networkError,\n  optionBelowMinimum,\n  streamClosing,\n  streamConnecting,\n  streamError,\n  tagValueTooLong,\n  unknownCustomEventKey,\n  unknownOption,\n  contextNotSpecified,\n  unrecoverableStreamError,\n  wrongOptionType,\n  wrongOptionTypeBoolean,\n};\n","const errors = require('./errors');\nconst { validateLogger } = require('./loggers');\nconst messages = require('./messages');\nconst utils = require('./utils');\n\n// baseOptionDefs should contain an entry for each supported configuration option in the common package.\n// Each entry can have three properties:\n// - \"default\": the default value if any\n// - \"type\": a type constraint used if the type can't be inferred from the default value). The allowable\n//   values are \"boolean\", \"string\", \"number\", \"array\", \"object\", \"function\", or several of these OR'd\n//   together with \"|\" (\"function|object\").\n// - \"minimum\": minimum value if any for numeric properties\n//\n// The extraOptionDefs parameter to validate() uses the same format.\nconst baseOptionDefs = {\n  baseUrl: { default: 'https://app.launchdarkly.com' },\n  streamUrl: { default: 'https://clientstream.launchdarkly.com' },\n  eventsUrl: { default: 'https://events.launchdarkly.com' },\n  sendEvents: { default: true },\n  streaming: { type: 'boolean' }, // default for this is undefined, which is different from false\n  sendLDHeaders: { default: true },\n  requestHeaderTransform: { type: 'function' },\n  sendEventsOnlyForVariation: { default: false },\n  useReport: { default: false },\n  evaluationReasons: { default: false },\n  eventCapacity: { default: 100, minimum: 1 },\n  flushInterval: { default: 2000, minimum: 2000 },\n  samplingInterval: { default: 0, minimum: 0 },\n  streamReconnectDelay: { default: 1000, minimum: 0 },\n  allAttributesPrivate: { default: false },\n  privateAttributes: { default: [] },\n  bootstrap: { type: 'string|object' },\n  diagnosticRecordingInterval: { default: 900000, minimum: 2000 },\n  diagnosticOptOut: { default: false },\n  wrapperName: { type: 'string' },\n  wrapperVersion: { type: 'string' },\n  stateProvider: { type: 'object' }, // not a public option, used internally\n  application: { validator: applicationConfigValidator },\n  inspectors: { default: [] },\n};\n\n/**\n * Expression to validate characters that are allowed in tag keys and values.\n */\nconst allowedTagCharacters = /^(\\w|\\.|-)+$/;\n\nfunction canonicalizeUrl(url) {\n  return url && url.replace(/\\/+$/, '');\n}\n\n/**\n * Verify that a value meets the requirements for a tag value.\n * @param {string} tagValue\n * @param {Object} logger\n */\nfunction validateTagValue(name, tagValue, logger) {\n  if (typeof tagValue !== 'string' || !tagValue.match(allowedTagCharacters)) {\n    logger.warn(messages.invalidTagValue(name));\n    return undefined;\n  }\n  if (tagValue.length > 64) {\n    logger.warn(messages.tagValueTooLong(name));\n    return undefined;\n  }\n  return tagValue;\n}\n\nfunction applicationConfigValidator(name, value, logger) {\n  const validated = {};\n  if (value.id) {\n    validated.id = validateTagValue(`${name}.id`, value.id, logger);\n  }\n  if (value.version) {\n    validated.version = validateTagValue(`${name}.version`, value.version, logger);\n  }\n  return validated;\n}\n\nfunction validate(options, emitter, extraOptionDefs, logger) {\n  const optionDefs = utils.extend({ logger: { default: logger } }, baseOptionDefs, extraOptionDefs);\n\n  const deprecatedOptions = {\n    // As of the latest major version, there are no deprecated options. Next time we deprecate\n    // something, add an item here where the property name is the deprecated name, and the\n    // property value is the preferred name if any, or null/undefined if there is no replacement.\n  };\n\n  function checkDeprecatedOptions(config) {\n    const opts = config;\n    Object.keys(deprecatedOptions).forEach(oldName => {\n      if (opts[oldName] !== undefined) {\n        const newName = deprecatedOptions[oldName];\n        logger && logger.warn(messages.deprecated(oldName, newName));\n        if (newName) {\n          if (opts[newName] === undefined) {\n            opts[newName] = opts[oldName];\n          }\n          delete opts[oldName];\n        }\n      }\n    });\n  }\n\n  function applyDefaults(config) {\n    // This works differently from utils.extend() in that it *will not* override a default value\n    // if the provided value is explicitly set to null. This provides backward compatibility\n    // since in the past we only used the provided values if they were truthy.\n    const ret = utils.extend({}, config);\n    Object.keys(optionDefs).forEach(name => {\n      if (ret[name] === undefined || ret[name] === null) {\n        ret[name] = optionDefs[name] && optionDefs[name].default;\n      }\n    });\n    return ret;\n  }\n\n  function validateTypesAndNames(config) {\n    const ret = utils.extend({}, config);\n    const typeDescForValue = value => {\n      if (value === null) {\n        return 'any';\n      }\n      if (value === undefined) {\n        return undefined;\n      }\n      if (Array.isArray(value)) {\n        return 'array';\n      }\n      const t = typeof value;\n      if (t === 'boolean' || t === 'string' || t === 'number' || t === 'function') {\n        return t;\n      }\n      return 'object';\n    };\n    Object.keys(config).forEach(name => {\n      const value = config[name];\n      if (value !== null && value !== undefined) {\n        const optionDef = optionDefs[name];\n        if (optionDef === undefined) {\n          reportArgumentError(messages.unknownOption(name));\n        } else {\n          const expectedType = optionDef.type || typeDescForValue(optionDef.default);\n          const validator = optionDef.validator;\n          if (validator) {\n            const validated = validator(name, config[name], logger);\n            if (validated !== undefined) {\n              ret[name] = validated;\n            } else {\n              delete ret[name];\n            }\n          } else if (expectedType !== 'any') {\n            const allowedTypes = expectedType.split('|');\n            const actualType = typeDescForValue(value);\n            if (allowedTypes.indexOf(actualType) < 0) {\n              if (expectedType === 'boolean') {\n                ret[name] = !!value;\n                reportArgumentError(messages.wrongOptionTypeBoolean(name, actualType));\n              } else {\n                reportArgumentError(messages.wrongOptionType(name, expectedType, actualType));\n                ret[name] = optionDef.default;\n              }\n            } else {\n              if (actualType === 'number' && optionDef.minimum !== undefined && value < optionDef.minimum) {\n                reportArgumentError(messages.optionBelowMinimum(name, value, optionDef.minimum));\n                ret[name] = optionDef.minimum;\n              }\n            }\n          }\n        }\n      }\n    });\n\n    ret.baseUrl = canonicalizeUrl(ret.baseUrl);\n    ret.streamUrl = canonicalizeUrl(ret.streamUrl);\n    ret.eventsUrl = canonicalizeUrl(ret.eventsUrl);\n\n    return ret;\n  }\n\n  function reportArgumentError(message) {\n    utils.onNextTick(() => {\n      emitter && emitter.maybeReportError(new errors.LDInvalidArgumentError(message));\n    });\n  }\n\n  let config = utils.extend({}, options || {});\n\n  checkDeprecatedOptions(config);\n\n  config = applyDefaults(config);\n  config = validateTypesAndNames(config);\n  validateLogger(config.logger);\n\n  return config;\n}\n\n/**\n * Get tags for the specified configuration.\n *\n * If any additional tags are added to the configuration, then the tags from\n * this method should be extended with those.\n * @param {Object} config The already valiated configuration.\n * @returns {Object} The tag configuration.\n */\nfunction getTags(config) {\n  const tags = {};\n  if (config) {\n    if (config.application && config.application.id !== undefined && config.application.id !== null) {\n      tags['application-id'] = [config.application.id];\n    }\n    if (config.application && config.application.version !== undefined && config.application.id !== null) {\n      tags['application-version'] = [config.application.version];\n    }\n  }\n\n  return tags;\n}\n\nmodule.exports = {\n  baseOptionDefs,\n  validate,\n  getTags,\n};\n","const { getLDUserAgentString } = require('./utils');\nconst configuration = require('./configuration');\n\nfunction getLDHeaders(platform, options) {\n  if (options && !options.sendLDHeaders) {\n    return {};\n  }\n  const h = {};\n  h[platform.userAgentHeaderName || 'User-Agent'] = getLDUserAgentString(platform);\n  if (options && options.wrapperName) {\n    h['X-LaunchDarkly-Wrapper'] = options.wrapperVersion\n      ? options.wrapperName + '/' + options.wrapperVersion\n      : options.wrapperName;\n  }\n  const tags = configuration.getTags(options);\n  const tagKeys = Object.keys(tags);\n  if (tagKeys.length) {\n    h['x-launchdarkly-tags'] = tagKeys\n      .sort()\n      .map(\n        key => (Array.isArray(tags[key]) ? tags[key].sort().map(value => `${key}/${value}`) : [`${key}/${tags[key]}`])\n      )\n      .reduce((flattened, item) => flattened.concat(item), [])\n      .join(' ');\n  }\n  return h;\n}\n\nfunction transformHeaders(headers, options) {\n  if (!options || !options.requestHeaderTransform) {\n    return headers;\n  }\n  return options.requestHeaderTransform({ ...headers });\n}\n\nmodule.exports = {\n  getLDHeaders,\n  transformHeaders,\n};\n","const errors = require('./errors');\nconst utils = require('./utils');\nconst { v1: uuidv1 } = require('uuid');\nconst { getLDHeaders, transformHeaders } = require('./headers');\n\nconst MAX_URL_LENGTH = 2000;\n\nfunction EventSender(platform, environmentId, options) {\n  const imageUrlPath = '/a/' + environmentId + '.gif';\n  const baseHeaders = utils.extend({ 'Content-Type': 'application/json' }, getLDHeaders(platform, options));\n  const httpFallbackPing = platform.httpFallbackPing; // this will be set for us if we're in the browser SDK\n  const sender = {};\n\n  function getResponseInfo(result) {\n    const ret = { status: result.status };\n    const dateStr = result.header('date');\n    if (dateStr) {\n      const time = Date.parse(dateStr);\n      if (time) {\n        ret.serverTime = time;\n      }\n    }\n    return ret;\n  }\n\n  sender.sendChunk = (events, url, isDiagnostic, usePost) => {\n    const jsonBody = JSON.stringify(events);\n    const payloadId = isDiagnostic ? null : uuidv1();\n\n    function doPostRequest(canRetry) {\n      const headers = isDiagnostic\n        ? baseHeaders\n        : utils.extend({}, baseHeaders, {\n            'X-LaunchDarkly-Event-Schema': '4',\n            'X-LaunchDarkly-Payload-ID': payloadId,\n          });\n      return platform\n        .httpRequest('POST', url, transformHeaders(headers, options), jsonBody)\n        .promise.then(result => {\n          if (!result) {\n            // This was a response from a fire-and-forget request, so we won't have a status.\n            return;\n          }\n          if (result.status >= 400 && errors.isHttpErrorRecoverable(result.status) && canRetry) {\n            return doPostRequest(false);\n          } else {\n            return getResponseInfo(result);\n          }\n        })\n        .catch(() => {\n          if (canRetry) {\n            return doPostRequest(false);\n          }\n          return Promise.reject();\n        });\n    }\n\n    if (usePost) {\n      return doPostRequest(true).catch(() => {});\n    } else {\n      httpFallbackPing && httpFallbackPing(url + imageUrlPath + '?d=' + utils.base64URLEncode(jsonBody));\n      return Promise.resolve(); // we don't wait for this request to complete, it's just a one-way ping\n    }\n  };\n\n  sender.sendEvents = function(events, url, isDiagnostic) {\n    if (!platform.httpRequest) {\n      return Promise.resolve();\n    }\n    const canPost = platform.httpAllowsPost();\n    let chunks;\n    if (canPost) {\n      // no need to break up events into chunks if we can send a POST\n      chunks = [events];\n    } else {\n      chunks = utils.chunkEventsForUrl(MAX_URL_LENGTH - url.length, events);\n    }\n    const results = [];\n    for (let i = 0; i < chunks.length; i++) {\n      results.push(sender.sendChunk(chunks[i], url, isDiagnostic, canPost));\n    }\n    return Promise.all(results);\n  };\n\n  return sender;\n}\n\nmodule.exports = EventSender;\n","/**\n * Validate a context kind.\n * @param {string} kind\n * @returns true if the kind is valid.\n */\nconst { commonBasicLogger } = require('./loggers');\n\nfunction validKind(kind) {\n  return typeof kind === 'string' && kind !== 'kind' && kind.match(/^(\\w|\\.|-)+$/);\n}\n\n/**\n * Perform a check of basic context requirements.\n * @param {Object} context\n * @param {boolean} allowLegacyKey If true, then a legacy user can have an\n * empty or non-string key. A legacy user is a context without a kind.\n * @returns true if the context meets basic requirements.\n */\nfunction checkContext(context, allowLegacyKey) {\n  if (context) {\n    if (allowLegacyKey && (context.kind === undefined || context.kind === null)) {\n      return context.key !== undefined && context.key !== null;\n    }\n    const key = context.key;\n    const kind = context.kind === undefined ? 'user' : context.kind;\n    const kindValid = validKind(kind);\n    const keyValid = kind === 'multi' || (key !== undefined && key !== null && key !== '');\n    if (kind === 'multi') {\n      const kinds = Object.keys(context).filter(key => key !== 'kind');\n      return (\n        keyValid &&\n        kinds.every(key => validKind(key)) &&\n        kinds.every(key => {\n          const contextKey = context[key].key;\n          return contextKey !== undefined && contextKey !== null && contextKey !== '';\n        })\n      );\n    }\n    return keyValid && kindValid;\n  }\n  return false;\n}\n\n/**\n * For a given context get a list of context kinds.\n * @param {Object} context\n * @returns A list of kinds in the context.\n */\nfunction getContextKinds(context) {\n  if (context) {\n    if (context.kind === null || context.kind === undefined) {\n      return ['user'];\n    }\n    if (context.kind !== 'multi') {\n      return [context.kind];\n    }\n    return Object.keys(context).filter(kind => kind !== 'kind');\n  }\n  return [];\n}\n\n/**\n * The partial URL encoding is needed because : is a valid character in context keys.\n *\n * Partial encoding is the replacement of all colon (:) characters with the URL\n * encoded equivalent (%3A) and all percent (%) characters with the URL encoded\n * equivalent (%25).\n * @param {string} key The key to encode.\n * @returns {string} Partially URL encoded key.\n */\nfunction encodeKey(key) {\n  if (key.includes('%') || key.includes(':')) {\n    return key.replace(/%/g, '%25').replace(/:/g, '%3A');\n  }\n  return key;\n}\n\nfunction getCanonicalKey(context) {\n  if (context) {\n    if ((context.kind === undefined || context.kind === null || context.kind === 'user') && context.key) {\n      return context.key;\n    } else if (context.kind !== 'multi' && context.key) {\n      return `${context.kind}:${encodeKey(context.key)}`;\n    } else if (context.kind === 'multi') {\n      return Object.keys(context)\n        .sort()\n        .filter(key => key !== 'kind')\n        .map(key => `${key}:${encodeKey(context[key].key)}`)\n        .join(':');\n    }\n  }\n}\n\nfunction getContextKeys(context, logger = commonBasicLogger()) {\n  if (!context) {\n    return undefined;\n  }\n\n  const keys = {};\n  const { kind, key } = context;\n\n  switch (kind) {\n    case undefined:\n      keys.user = `${key}`;\n      break;\n    case 'multi':\n      Object.entries(context)\n        .filter(([key]) => key !== 'kind')\n        .forEach(([key, value]) => {\n          if (value && value.key) {\n            keys[key] = value.key;\n          }\n        });\n      break;\n    case null:\n      logger.warn(`null is not a valid context kind: ${context}`);\n      break;\n    case '':\n      logger.warn(`'' is not a valid context kind: ${context}`);\n      break;\n    default:\n      keys[kind] = `${key}`;\n      break;\n  }\n\n  return keys;\n}\n\nmodule.exports = {\n  checkContext,\n  getContextKeys,\n  getContextKinds,\n  getCanonicalKey,\n};\n","const { getContextKinds } = require('./context');\n\nfunction getKinds(event) {\n  if (event.context) {\n    return getContextKinds(event.context);\n  }\n  if (event.contextKeys) {\n    return Object.keys(event.contextKeys);\n  }\n  return [];\n}\n\nfunction EventSummarizer() {\n  const es = {};\n\n  let startDate = 0,\n    endDate = 0,\n    counters = {},\n    contextKinds = {};\n\n  es.summarizeEvent = event => {\n    if (event.kind === 'feature') {\n      const counterKey =\n        event.key +\n        ':' +\n        (event.variation !== null && event.variation !== undefined ? event.variation : '') +\n        ':' +\n        (event.version !== null && event.version !== undefined ? event.version : '');\n      const counterVal = counters[counterKey];\n      let kinds = contextKinds[event.key];\n      if (!kinds) {\n        kinds = new Set();\n        contextKinds[event.key] = kinds;\n      }\n      getKinds(event).forEach(kind => kinds.add(kind));\n\n      if (counterVal) {\n        counterVal.count = counterVal.count + 1;\n      } else {\n        counters[counterKey] = {\n          count: 1,\n          key: event.key,\n          version: event.version,\n          variation: event.variation,\n          value: event.value,\n          default: event.default,\n        };\n      }\n      if (startDate === 0 || event.creationDate < startDate) {\n        startDate = event.creationDate;\n      }\n      if (event.creationDate > endDate) {\n        endDate = event.creationDate;\n      }\n    }\n  };\n\n  es.getSummary = () => {\n    const flagsOut = {};\n    let empty = true;\n    for (const c of Object.values(counters)) {\n      let flag = flagsOut[c.key];\n      if (!flag) {\n        flag = {\n          default: c.default,\n          counters: [],\n          contextKinds: [...contextKinds[c.key]],\n        };\n        flagsOut[c.key] = flag;\n      }\n      const counterOut = {\n        value: c.value,\n        count: c.count,\n      };\n      if (c.variation !== undefined && c.variation !== null) {\n        counterOut.variation = c.variation;\n      }\n      if (c.version !== undefined && c.version !== null) {\n        counterOut.version = c.version;\n      } else {\n        counterOut.unknown = true;\n      }\n      flag.counters.push(counterOut);\n      empty = false;\n    }\n    return empty\n      ? null\n      : {\n          startDate,\n          endDate,\n          features: flagsOut,\n        };\n  };\n\n  es.clearSummary = () => {\n    startDate = 0;\n    endDate = 0;\n    counters = {};\n    contextKinds = {};\n  };\n\n  return es;\n}\n\nmodule.exports = EventSummarizer;\n","/**\n * Take a key string and escape the characters to allow it to be used as a reference.\n * @param {string} key\n * @returns {string} The processed key.\n */\nfunction processEscapeCharacters(key) {\n  return key.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n\n/**\n * @param {string} reference The reference to get the components of.\n * @returns {string[]} The components of the reference. Escape characters will be converted to their representative values.\n */\nfunction getComponents(reference) {\n  const referenceWithoutPrefix = reference.startsWith('/') ? reference.substring(1) : reference;\n  return referenceWithoutPrefix\n    .split('/')\n    .map(component => (component.indexOf('~') >= 0 ? component.replace(/~1/g, '/').replace(/~0/g, '~') : component));\n}\n\n/**\n * @param {string} reference The reference to check if it is a literal.\n * @returns true if the reference is a literal.\n */\nfunction isLiteral(reference) {\n  return !reference.startsWith('/');\n}\n\n/**\n * Compare two references and determine if they are equivalent.\n * @param {string} a\n * @param {string} b\n */\nfunction compare(a, b) {\n  const aIsLiteral = isLiteral(a);\n  const bIsLiteral = isLiteral(b);\n  if (aIsLiteral && bIsLiteral) {\n    return a === b;\n  }\n  if (aIsLiteral) {\n    const bComponents = getComponents(b);\n    if (bComponents.length !== 1) {\n      return false;\n    }\n    return a === bComponents[0];\n  }\n  if (bIsLiteral) {\n    const aComponents = getComponents(a);\n    if (aComponents.length !== 1) {\n      return false;\n    }\n    return b === aComponents[0];\n  }\n  return a === b;\n}\n\n/**\n * @param {string} a\n * @param {string} b\n * @returns The two strings joined by '/'.\n */\nfunction join(a, b) {\n  return `${a}/${b}`;\n}\n\n/**\n * There are cases where a field could have been named with a preceeding '/'.\n * If that attribute was private, then the literal would appear to be a reference.\n * This method can be used to convert a literal to a reference in such situations.\n * @param {string} literal The literal to convert to a reference.\n * @returns A literal which has been converted to a reference.\n */\nfunction literalToReference(literal) {\n  return `/${processEscapeCharacters(literal)}`;\n}\n\n/**\n * Clone an object excluding the values referenced by a list of references.\n * @param {Object} target The object to clone.\n * @param {string[]} references A list of references from the cloned object.\n * @returns {{cloned: Object, excluded: string[]}} The cloned object and a list of excluded values.\n */\nfunction cloneExcluding(target, references) {\n  const stack = [];\n  const cloned = {};\n  const excluded = [];\n\n  stack.push(\n    ...Object.keys(target).map(key => ({\n      key,\n      ptr: literalToReference(key),\n      source: target,\n      parent: cloned,\n      visited: [target],\n    }))\n  );\n\n  while (stack.length) {\n    const item = stack.pop();\n    if (!references.some(ptr => compare(ptr, item.ptr))) {\n      const value = item.source[item.key];\n\n      // Handle null because it overlaps with object, which we will want to handle later.\n      if (value === null) {\n        item.parent[item.key] = value;\n      } else if (Array.isArray(value)) {\n        item.parent[item.key] = [...value];\n      } else if (typeof value === 'object') {\n        //Arrays and null must already be handled.\n\n        //Prevent cycles by not visiting the same object\n        //with in the same branch. Parallel branches\n        //may contain the same object.\n        if (item.visited.includes(value)) {\n          continue;\n        }\n\n        item.parent[item.key] = {};\n\n        stack.push(\n          ...Object.keys(value).map(key => ({\n            key,\n            ptr: join(item.ptr, processEscapeCharacters(key)),\n            source: value,\n            parent: item.parent[item.key],\n            visited: [...item.visited, value],\n          }))\n        );\n      } else {\n        item.parent[item.key] = value;\n      }\n    } else {\n      excluded.push(item.ptr);\n    }\n  }\n  return { cloned, excluded: excluded.sort() };\n}\n\nmodule.exports = {\n  cloneExcluding,\n  compare,\n  literalToReference,\n};\n","const EventSender = require('./EventSender');\nconst EventSummarizer = require('./EventSummarizer');\nconst ContextFilter = require('./ContextFilter');\nconst errors = require('./errors');\nconst messages = require('./messages');\nconst utils = require('./utils');\nconst { getContextKeys } = require('./context');\n\nfunction EventProcessor(\n  platform,\n  options,\n  environmentId,\n  diagnosticsAccumulator = null,\n  emitter = null,\n  sender = null\n) {\n  const processor = {};\n  const eventSender = sender || EventSender(platform, environmentId, options);\n  const mainEventsUrl = utils.appendUrlPath(options.eventsUrl, '/events/bulk/' + environmentId);\n  const summarizer = EventSummarizer();\n  const contextFilter = ContextFilter(options);\n  const samplingInterval = options.samplingInterval;\n  const eventCapacity = options.eventCapacity;\n  const flushInterval = options.flushInterval;\n  const logger = options.logger;\n  let queue = [];\n  let lastKnownPastTime = 0;\n  let disabled = false;\n  let exceededCapacity = false;\n  let flushTimer;\n\n  function shouldSampleEvent() {\n    return samplingInterval === 0 || Math.floor(Math.random() * samplingInterval) === 0;\n  }\n\n  function shouldDebugEvent(e) {\n    if (e.debugEventsUntilDate) {\n      // The \"last known past time\" comes from the last HTTP response we got from the server.\n      // In case the client's time is set wrong, at least we know that any expiration date\n      // earlier than that point is definitely in the past.  If there's any discrepancy, we\n      // want to err on the side of cutting off event debugging sooner.\n      return e.debugEventsUntilDate > lastKnownPastTime && e.debugEventsUntilDate > new Date().getTime();\n    }\n    return false;\n  }\n\n  // Transform an event from its internal format to the format we use when sending a payload.\n  function makeOutputEvent(e) {\n    const ret = utils.extend({}, e);\n    if (e.kind === 'identify') {\n      // identify events always have an inline context\n      ret.context = contextFilter.filter(e.context);\n    } else {\n      ret.contextKeys = getContextKeysFromEvent(e);\n      delete ret['context'];\n    }\n    if (e.kind === 'feature') {\n      delete ret['trackEvents'];\n      delete ret['debugEventsUntilDate'];\n    }\n    return ret;\n  }\n\n  function getContextKeysFromEvent(event) {\n    return getContextKeys(event.context, logger);\n  }\n\n  function addToOutbox(event) {\n    if (queue.length < eventCapacity) {\n      queue.push(event);\n      exceededCapacity = false;\n    } else {\n      if (!exceededCapacity) {\n        exceededCapacity = true;\n        logger.warn(messages.eventCapacityExceeded());\n      }\n      if (diagnosticsAccumulator) {\n        // For diagnostic events, we track how many times we had to drop an event due to exceeding the capacity.\n        diagnosticsAccumulator.incrementDroppedEvents();\n      }\n    }\n  }\n\n  processor.enqueue = function(event) {\n    if (disabled) {\n      return;\n    }\n    let addFullEvent = false;\n    let addDebugEvent = false;\n\n    // Add event to the summary counters if appropriate\n    summarizer.summarizeEvent(event);\n\n    // Decide whether to add the event to the payload. Feature events may be added twice, once for\n    // the event (if tracked) and once for debugging.\n    if (event.kind === 'feature') {\n      if (shouldSampleEvent()) {\n        addFullEvent = !!event.trackEvents;\n        addDebugEvent = shouldDebugEvent(event);\n      }\n    } else {\n      addFullEvent = shouldSampleEvent();\n    }\n\n    if (addFullEvent) {\n      addToOutbox(makeOutputEvent(event));\n    }\n    if (addDebugEvent) {\n      const debugEvent = utils.extend({}, event, { kind: 'debug' });\n      debugEvent.context = contextFilter.filter(debugEvent.context);\n      delete debugEvent['trackEvents'];\n      delete debugEvent['debugEventsUntilDate'];\n      addToOutbox(debugEvent);\n    }\n  };\n\n  processor.flush = function() {\n    if (disabled) {\n      return Promise.resolve();\n    }\n    const eventsToSend = queue;\n    const summary = summarizer.getSummary();\n    summarizer.clearSummary();\n    if (summary) {\n      summary.kind = 'summary';\n      eventsToSend.push(summary);\n    }\n    if (diagnosticsAccumulator) {\n      // For diagnostic events, we record how many events were in the queue at the last flush (since \"how\n      // many events happened to be in the queue at the moment we decided to send a diagnostic event\" would\n      // not be a very useful statistic).\n      diagnosticsAccumulator.setEventsInLastBatch(eventsToSend.length);\n    }\n    if (eventsToSend.length === 0) {\n      return Promise.resolve();\n    }\n    queue = [];\n    logger.debug(messages.debugPostingEvents(eventsToSend.length));\n    return eventSender.sendEvents(eventsToSend, mainEventsUrl).then(responses => {\n      const responseInfo = responses && responses[0];\n      if (responseInfo) {\n        if (responseInfo.serverTime) {\n          lastKnownPastTime = responseInfo.serverTime;\n        }\n        if (!errors.isHttpErrorRecoverable(responseInfo.status)) {\n          disabled = true;\n        }\n        if (responseInfo.status >= 400) {\n          utils.onNextTick(() => {\n            emitter.maybeReportError(\n              new errors.LDUnexpectedResponseError(\n                messages.httpErrorMessage(responseInfo.status, 'event posting', 'some events were dropped')\n              )\n            );\n          });\n        }\n      }\n    });\n  };\n\n  processor.start = function() {\n    const flushTick = () => {\n      processor.flush();\n      flushTimer = setTimeout(flushTick, flushInterval);\n    };\n    flushTimer = setTimeout(flushTick, flushInterval);\n  };\n\n  processor.stop = function() {\n    clearTimeout(flushTimer);\n  };\n\n  return processor;\n}\n\nmodule.exports = EventProcessor;\n","// This file provides an abstraction of the client's startup state.\n//\n// Startup can either succeed or fail exactly once; calling signalSuccess() or signalFailure()\n// after that point has no effect.\n//\n// On success, we fire both an \"initialized\" event and a \"ready\" event. Both the waitForInitialization()\n// promise and the waitUntilReady() promise are resolved in this case.\n//\n// On failure, we fire both a \"failed\" event (with the error as a parameter) and a \"ready\" event.\n// The waitForInitialization() promise is rejected, but the waitUntilReady() promise is resolved.\n//\n// To complicate things, we must *not* create the waitForInitialization() promise unless it is\n// requested, because otherwise failures would cause an *unhandled* rejection which can be a\n// serious problem in some environments. So we use a somewhat roundabout system for tracking the\n// initialization state and lazily creating this promise.\n\nconst readyEvent = 'ready',\n  successEvent = 'initialized',\n  failureEvent = 'failed';\n\nfunction InitializationStateTracker(eventEmitter) {\n  let succeeded = false,\n    failed = false,\n    failureValue = null,\n    initializationPromise = null;\n\n  const readyPromise = new Promise(resolve => {\n    const onReady = () => {\n      eventEmitter.off(readyEvent, onReady); // we can't use \"once\" because it's not available on some JS platforms\n      resolve();\n    };\n    eventEmitter.on(readyEvent, onReady);\n  }).catch(() => {}); // this Promise should never be rejected, but the catch handler is a safety measure\n\n  return {\n    getInitializationPromise: () => {\n      if (initializationPromise) {\n        return initializationPromise;\n      }\n      if (succeeded) {\n        return Promise.resolve();\n      }\n      if (failed) {\n        return Promise.reject(failureValue);\n      }\n      initializationPromise = new Promise((resolve, reject) => {\n        const onSuccess = () => {\n          eventEmitter.off(successEvent, onSuccess);\n          resolve();\n        };\n        const onFailure = err => {\n          eventEmitter.off(failureEvent, onFailure);\n          reject(err);\n        };\n        eventEmitter.on(successEvent, onSuccess);\n        eventEmitter.on(failureEvent, onFailure);\n      });\n      return initializationPromise;\n    },\n\n    getReadyPromise: () => readyPromise,\n\n    signalSuccess: () => {\n      if (!succeeded && !failed) {\n        succeeded = true;\n        eventEmitter.emit(successEvent);\n        eventEmitter.emit(readyEvent);\n      }\n    },\n\n    signalFailure: err => {\n      if (!succeeded && !failed) {\n        failed = true;\n        failureValue = err;\n        eventEmitter.emit(failureEvent, err);\n        eventEmitter.emit(readyEvent);\n      }\n      eventEmitter.maybeReportError(err); // the \"error\" event can be emitted more than once, unlike the others\n    },\n  };\n}\n\nmodule.exports = InitializationStateTracker;\n","const messages = require('./messages');\nconst { appendUrlPath, base64URLEncode, objectHasOwnProperty } = require('./utils');\nconst { getLDHeaders, transformHeaders } = require('./headers');\nconst { isHttpErrorRecoverable } = require('./errors');\n\n// The underlying event source implementation is abstracted via the platform object, which should\n// have these three properties:\n// eventSourceFactory(): a function that takes a URL and optional config object and returns an object\n//   with the same methods as the regular HTML5 EventSource object. The properties in the config\n//   object are those supported by the launchdarkly-eventsource package; browser EventSource\n//   implementations don't have any config options.\n// eventSourceIsActive(): a function that takes an EventSource-compatible object and returns true if\n//   it is in an active state (connected or connecting).\n// eventSourceAllowsReport: true if REPORT is supported.\n\n// The read timeout for the stream is a fixed value that is set to be slightly longer than the expected\n// interval between heartbeats from the LaunchDarkly streaming server. If this amount of time elapses\n// with no new data, the connection will be cycled.\nconst streamReadTimeoutMillis = 5 * 60 * 1000; // 5 minutes\nconst maxRetryDelay = 30 * 1000; // Maximum retry delay 30 seconds.\nconst jitterRatio = 0.5; // Delay should be 50%-100% of calculated time.\n\nfunction Stream(platform, config, environment, diagnosticsAccumulator) {\n  const baseUrl = config.streamUrl;\n  const logger = config.logger;\n  const stream = {};\n  const evalUrlPrefix = appendUrlPath(baseUrl, '/eval/' + environment);\n  const useReport = config.useReport;\n  const withReasons = config.evaluationReasons;\n  const baseReconnectDelay = config.streamReconnectDelay;\n  const headers = getLDHeaders(platform, config);\n  let firstConnectionErrorLogged = false;\n  let es = null;\n  let reconnectTimeoutReference = null;\n  let connectionAttemptStartTime;\n  let context = null;\n  let hash = null;\n  let handlers = null;\n  let retryCount = 0;\n\n  function backoff() {\n    const delay = baseReconnectDelay * Math.pow(2, retryCount);\n    return delay > maxRetryDelay ? maxRetryDelay : delay;\n  }\n\n  function jitter(computedDelayMillis) {\n    return computedDelayMillis - Math.trunc(Math.random() * jitterRatio * computedDelayMillis);\n  }\n\n  function getNextRetryDelay() {\n    const delay = jitter(backoff());\n    retryCount += 1;\n    return delay;\n  }\n\n  stream.connect = function(newContext, newHash, newHandlers) {\n    context = newContext;\n    hash = newHash;\n    handlers = {};\n    for (const key in newHandlers || {}) {\n      handlers[key] = function(e) {\n        // Reset the state for logging the first connection error so that the first\n        // connection error following a successful connection will once again be logged.\n        // We will decorate *all* handlers to do this to keep this abstraction agnostic\n        // for different stream implementations.\n        firstConnectionErrorLogged = false;\n        logConnectionResult(true);\n        newHandlers[key] && newHandlers[key](e);\n      };\n    }\n    tryConnect();\n  };\n\n  stream.disconnect = function() {\n    clearTimeout(reconnectTimeoutReference);\n    reconnectTimeoutReference = null;\n    closeConnection();\n  };\n\n  stream.isConnected = function() {\n    return !!(es && platform.eventSourceIsActive && platform.eventSourceIsActive(es));\n  };\n\n  function handleError(err) {\n    // The event source may not produce a status. But the LaunchDarkly\n    // polyfill can. If we can get the status, then we should stop retrying\n    // on certain error codes.\n    if (err.status && typeof err.status === 'number' && !isHttpErrorRecoverable(err.status)) {\n      // If we encounter an unrecoverable condition, then we do not want to\n      // retry anymore.\n      closeConnection();\n      logger.error(messages.unrecoverableStreamError(err));\n      // Ensure any pending retry attempts are not done.\n      if (reconnectTimeoutReference) {\n        clearTimeout(reconnectTimeoutReference);\n        reconnectTimeoutReference = null;\n      }\n      return;\n    }\n\n    const delay = getNextRetryDelay();\n\n    if (!firstConnectionErrorLogged) {\n      logger.warn(messages.streamError(err, delay));\n      firstConnectionErrorLogged = true;\n    }\n    logConnectionResult(false);\n    closeConnection();\n    tryConnect(delay);\n  }\n\n  function tryConnect(delay) {\n    if (!reconnectTimeoutReference) {\n      if (delay) {\n        reconnectTimeoutReference = setTimeout(openConnection, delay);\n      } else {\n        openConnection();\n      }\n    }\n  }\n\n  function openConnection() {\n    reconnectTimeoutReference = null;\n    let url;\n    let query = '';\n    const options = { headers, readTimeoutMillis: streamReadTimeoutMillis };\n    if (platform.eventSourceFactory) {\n      if (hash !== null && hash !== undefined) {\n        query = 'h=' + hash;\n      }\n      if (useReport) {\n        if (platform.eventSourceAllowsReport) {\n          url = evalUrlPrefix;\n          options.method = 'REPORT';\n          options.headers['Content-Type'] = 'application/json';\n          options.body = JSON.stringify(context);\n        } else {\n          // if we can't do REPORT, fall back to the old ping-based stream\n          url = appendUrlPath(baseUrl, '/ping/' + environment);\n          query = '';\n        }\n      } else {\n        url = evalUrlPrefix + '/' + base64URLEncode(JSON.stringify(context));\n      }\n      options.headers = transformHeaders(options.headers, config);\n      if (withReasons) {\n        query = query + (query ? '&' : '') + 'withReasons=true';\n      }\n      url = url + (query ? '?' : '') + query;\n\n      closeConnection();\n      logger.info(messages.streamConnecting(url));\n      logConnectionStarted();\n\n      es = platform.eventSourceFactory(url, options);\n      for (const key in handlers) {\n        if (objectHasOwnProperty(handlers, key)) {\n          es.addEventListener(key, handlers[key]);\n        }\n      }\n\n      es.onerror = handleError;\n\n      es.onopen = () => {\n        // If the connection is a success, then reset the retryCount.\n        retryCount = 0;\n      };\n    }\n  }\n\n  function closeConnection() {\n    if (es) {\n      logger.info(messages.streamClosing());\n      es.close();\n      es = null;\n    }\n  }\n\n  function logConnectionStarted() {\n    connectionAttemptStartTime = new Date().getTime();\n  }\n\n  function logConnectionResult(success) {\n    if (connectionAttemptStartTime && diagnosticsAccumulator) {\n      diagnosticsAccumulator.recordStreamInit(\n        connectionAttemptStartTime,\n        !success,\n        new Date().getTime() - connectionAttemptStartTime\n      );\n    }\n    connectionAttemptStartTime = null;\n  }\n\n  return stream;\n}\n\nmodule.exports = Stream;\n","const utils = require('./utils');\nconst errors = require('./errors');\nconst messages = require('./messages');\nconst promiseCoalescer = require('./promiseCoalescer');\nconst { transformHeaders, getLDHeaders } = require('./headers');\n\nconst jsonContentType = 'application/json';\n\nfunction getResponseError(result) {\n  if (result.status === 404) {\n    return new errors.LDInvalidEnvironmentIdError(messages.environmentNotFound());\n  } else {\n    return new errors.LDFlagFetchError(messages.errorFetchingFlags(result.statusText || String(result.status)));\n  }\n}\n\nfunction Requestor(platform, options, environment) {\n  const baseUrl = options.baseUrl;\n  const useReport = options.useReport;\n  const withReasons = options.evaluationReasons;\n  const logger = options.logger;\n\n  const requestor = {};\n\n  const activeRequests = {}; // map of URLs to promiseCoalescers\n\n  function fetchJSON(endpoint, body) {\n    if (!platform.httpRequest) {\n      return new Promise((resolve, reject) => {\n        reject(new errors.LDFlagFetchError(messages.httpUnavailable()));\n      });\n    }\n\n    const method = body ? 'REPORT' : 'GET';\n    const headers = getLDHeaders(platform, options);\n    if (body) {\n      headers['Content-Type'] = jsonContentType;\n    }\n\n    let coalescer = activeRequests[endpoint];\n    if (!coalescer) {\n      coalescer = promiseCoalescer(() => {\n        // this will be called once there are no more active requests for the same endpoint\n        delete activeRequests[endpoint];\n      });\n      activeRequests[endpoint] = coalescer;\n    }\n\n    const req = platform.httpRequest(method, endpoint, transformHeaders(headers, options), body);\n    const p = req.promise.then(\n      result => {\n        if (result.status === 200) {\n          // We're using substring here because using startsWith would require a polyfill in IE.\n          if (\n            result.header('content-type') &&\n            result.header('content-type').substring(0, jsonContentType.length) === jsonContentType\n          ) {\n            return JSON.parse(result.body);\n          } else {\n            const message = messages.invalidContentType(result.header('content-type') || '');\n            return Promise.reject(new errors.LDFlagFetchError(message));\n          }\n        } else {\n          return Promise.reject(getResponseError(result));\n        }\n      },\n      e => Promise.reject(new errors.LDFlagFetchError(messages.networkError(e)))\n    );\n    coalescer.addPromise(p, () => {\n      // this will be called if another request for the same endpoint supersedes this one\n      req.cancel && req.cancel();\n    });\n    return coalescer.resultPromise;\n  }\n\n  // Performs a GET request to an arbitrary path under baseUrl. Returns a Promise which will resolve\n  // with the parsed JSON response, or will be rejected if the request failed.\n  requestor.fetchJSON = function(path) {\n    return fetchJSON(utils.appendUrlPath(baseUrl, path), null);\n  };\n\n  // Requests the current state of all flags for the given context from LaunchDarkly. Returns a Promise\n  // which will resolve with the parsed JSON response, or will be rejected if the request failed.\n  requestor.fetchFlagSettings = function(context, hash) {\n    let data;\n    let endpoint;\n    let query = '';\n    let body;\n\n    if (useReport) {\n      endpoint = [baseUrl, '/sdk/evalx/', environment, '/context'].join('');\n      body = JSON.stringify(context);\n    } else {\n      data = utils.base64URLEncode(JSON.stringify(context));\n      endpoint = [baseUrl, '/sdk/evalx/', environment, '/contexts/', data].join('');\n    }\n    if (hash) {\n      query = 'h=' + hash;\n    }\n    if (withReasons) {\n      query = query + (query ? '&' : '') + 'withReasons=true';\n    }\n    endpoint = endpoint + (query ? '?' : '') + query;\n    logger.debug(messages.debugPolling(endpoint));\n\n    return fetchJSON(endpoint, body);\n  };\n\n  return requestor;\n}\n\nmodule.exports = Requestor;\n","const { v1: uuidv1 } = require('uuid');\nconst { getContextKinds } = require('./context');\n\nconst errors = require('./errors');\nconst messages = require('./messages');\nconst utils = require('./utils');\n\nconst ldUserIdKey = 'ld:$anonUserId';\n\n/**\n * Create an object which can process a context and populate any required keys\n * for anonymous objects.\n *\n * @param {Object} persistentStorage The persistent storage from which to store\n * and access persisted anonymous context keys.\n * @returns An AnonymousContextProcessor.\n */\nfunction AnonymousContextProcessor(persistentStorage) {\n  function getContextKeyIdString(kind) {\n    if (kind === undefined || kind === null || kind === 'user') {\n      return ldUserIdKey;\n    }\n    return `ld:$contextKey:${kind}`;\n  }\n\n  function getCachedContextKey(kind) {\n    return persistentStorage.get(getContextKeyIdString(kind));\n  }\n\n  function setCachedContextKey(id, kind) {\n    return persistentStorage.set(getContextKeyIdString(kind), id);\n  }\n\n  /**\n   * Process a single kind context, or a single context within a multi-kind context.\n   * @param {string} kind The kind of the context. Independent because the kind is not prevent\n   * within a context in a multi-kind context.\n   * @param {Object} context\n   * @returns {Promise} a promise that resolves to a processed contexts, or rejects\n   * a context which cannot be processed.\n   */\n  function processSingleKindContext(kind, context) {\n    // We are working on a copy of an original context, so we want to re-assign\n    // versus duplicating it again.\n\n    /* eslint-disable no-param-reassign */\n    if (context.key !== null && context.key !== undefined) {\n      context.key = context.key.toString();\n      return Promise.resolve(context);\n    }\n\n    if (context.anonymous) {\n      // If the key doesn't exist, then the persistent storage will resolve\n      // with undefined.\n      return getCachedContextKey(kind).then(cachedId => {\n        if (cachedId) {\n          context.key = cachedId;\n          return context;\n        } else {\n          const id = uuidv1();\n          context.key = id;\n          return setCachedContextKey(id, kind).then(() => context);\n        }\n      });\n    } else {\n      return Promise.reject(new errors.LDInvalidUserError(messages.invalidContext()));\n    }\n    /* eslint-enable no-param-reassign */\n  }\n\n  /**\n   * Process the context, returning a Promise that resolves to the processed context, or rejects if there is an error.\n   * @param {Object} context\n   * @returns {Promise} A promise which resolves to a processed context, or a rejection if the context cannot be\n   * processed. The context should still be checked for overall validity after being processed.\n   */\n  this.processContext = context => {\n    if (!context) {\n      return Promise.reject(new errors.LDInvalidUserError(messages.contextNotSpecified()));\n    }\n\n    const processedContext = utils.clone(context);\n\n    if (context.kind === 'multi') {\n      const kinds = getContextKinds(processedContext);\n\n      return Promise.all(kinds.map(kind => processSingleKindContext(kind, processedContext[kind]))).then(\n        () => processedContext\n      );\n    }\n    return processSingleKindContext(context.kind, processedContext);\n  };\n}\n\nmodule.exports = AnonymousContextProcessor;\n","const { v1: uuidv1 } = require('uuid');\n// Note that in the diagnostic events spec, these IDs are to be generated with UUID v4. However,\n// in JS we were already using v1 for unique context keys, so to avoid bringing in two packages we\n// will use v1 here as well.\n\nconst { baseOptionDefs } = require('./configuration');\nconst messages = require('./messages');\nconst { appendUrlPath } = require('./utils');\n\nfunction DiagnosticId(sdkKey) {\n  const ret = {\n    diagnosticId: uuidv1(),\n  };\n  if (sdkKey) {\n    ret.sdkKeySuffix = sdkKey.length > 6 ? sdkKey.substring(sdkKey.length - 6) : sdkKey;\n  }\n  return ret;\n}\n\n// A stateful object holding statistics that will go into diagnostic events.\n\nfunction DiagnosticsAccumulator(startTime) {\n  let dataSinceDate, droppedEvents, eventsInLastBatch, streamInits;\n\n  function reset(time) {\n    dataSinceDate = time;\n    droppedEvents = 0;\n    eventsInLastBatch = 0;\n    streamInits = [];\n  }\n\n  reset(startTime);\n\n  return {\n    getProps: () => ({\n      dataSinceDate,\n      droppedEvents,\n      eventsInLastBatch,\n      streamInits,\n      // omit deduplicatedUsers for the JS SDKs because they don't deduplicate users\n    }),\n    setProps: props => {\n      dataSinceDate = props.dataSinceDate;\n      droppedEvents = props.droppedEvents || 0;\n      eventsInLastBatch = props.eventsInLastBatch || 0;\n      streamInits = props.streamInits || [];\n    },\n    incrementDroppedEvents: () => {\n      droppedEvents++;\n    },\n    setEventsInLastBatch: n => {\n      eventsInLastBatch = n;\n    },\n    recordStreamInit: (timestamp, failed, durationMillis) => {\n      const info = { timestamp, failed, durationMillis };\n      streamInits.push(info);\n    },\n    reset,\n  };\n}\n\n// An object that maintains information that will go into diagnostic events, and knows how to format\n// those events. It is instantiated by the SDK client, and shared with the event processor.\n//\n// The JS-based SDKs have two modes for diagnostic events. By default, the behavior is basically the\n// same as the server-side SDKs: a \"diagnostic-init\" event is sent on startup, and then \"diagnostic\"\n// events with operating statistics are sent periodically. However, in a browser environment this is\n// undesirable because the page may be reloaded frequently. In that case, setting the property\n// \"platform.diagnosticUseCombinedEvent\" to true enables an alternate mode in which a combination of\n// both kinds of event is sent at intervals, relative to the last time this was done (if any) which\n// is cached in local storage.\n\nfunction DiagnosticsManager(\n  platform,\n  persistentStorage,\n  accumulator,\n  eventSender,\n  environmentId,\n  config,\n  diagnosticId\n) {\n  const combinedMode = !!platform.diagnosticUseCombinedEvent;\n  const localStorageKey = 'ld:' + environmentId + ':$diagnostics';\n  const diagnosticEventsUrl = appendUrlPath(config.eventsUrl, '/events/diagnostic/' + environmentId);\n  const periodicInterval = config.diagnosticRecordingInterval;\n  const acc = accumulator;\n  const initialEventSamplingInterval = 4; // used only in combined mode - see start()\n  let streamingEnabled = !!config.streaming;\n  let eventSentTime;\n  let periodicTimer;\n  const manager = {};\n\n  function makeInitProperties() {\n    return {\n      sdk: makeSdkData(),\n      configuration: makeConfigData(),\n      platform: platform.diagnosticPlatformData,\n    };\n  }\n\n  // Send a diagnostic event and do not wait for completion.\n  function sendDiagnosticEvent(event) {\n    config.logger && config.logger.debug(messages.debugPostingDiagnosticEvent(event));\n    eventSender\n      .sendEvents(event, diagnosticEventsUrl, true)\n      .then(() => undefined)\n      .catch(() => undefined);\n  }\n\n  function loadProperties(callback) {\n    if (!persistentStorage.isEnabled()) {\n      return callback(false); // false indicates that local storage is not available\n    }\n    persistentStorage\n      .get(localStorageKey)\n      .then(data => {\n        if (data) {\n          try {\n            const props = JSON.parse(data);\n            acc.setProps(props);\n            eventSentTime = props.dataSinceDate;\n          } catch (e) {\n            // disregard malformed cached data\n          }\n        }\n        callback(true);\n      })\n      .catch(() => {\n        callback(false);\n      });\n  }\n\n  function saveProperties() {\n    if (persistentStorage.isEnabled()) {\n      const props = { ...acc.getProps() };\n      persistentStorage.set(localStorageKey, JSON.stringify(props));\n    }\n  }\n\n  // Creates the initial event that is sent by the event processor when the SDK starts up. This will not\n  // be repeated during the lifetime of the SDK client. In combined mode, we don't send this.\n  function createInitEvent() {\n    return {\n      kind: 'diagnostic-init',\n      id: diagnosticId,\n      creationDate: acc.getProps().dataSinceDate,\n      ...makeInitProperties(),\n    };\n  }\n\n  // Creates a periodic event containing time-dependent stats, and resets the state of the manager with\n  // regard to those stats. In combined mode (browser SDK) this also contains the configuration data.\n  function createPeriodicEventAndReset() {\n    const currentTime = new Date().getTime();\n    let ret = {\n      kind: combinedMode ? 'diagnostic-combined' : 'diagnostic',\n      id: diagnosticId,\n      creationDate: currentTime,\n      ...acc.getProps(),\n    };\n    if (combinedMode) {\n      ret = { ...ret, ...makeInitProperties() };\n    }\n    acc.reset(currentTime);\n    return ret;\n  }\n\n  function sendPeriodicEvent() {\n    sendDiagnosticEvent(createPeriodicEventAndReset());\n    periodicTimer = setTimeout(sendPeriodicEvent, periodicInterval);\n    eventSentTime = new Date().getTime();\n    if (combinedMode) {\n      saveProperties();\n    }\n  }\n\n  function makeSdkData() {\n    const sdkData = { ...platform.diagnosticSdkData };\n    if (config.wrapperName) {\n      sdkData.wrapperName = config.wrapperName;\n    }\n    if (config.wrapperVersion) {\n      sdkData.wrapperVersion = config.wrapperVersion;\n    }\n    return sdkData;\n  }\n\n  function makeConfigData() {\n    const configData = {\n      customBaseURI: config.baseUrl !== baseOptionDefs.baseUrl.default,\n      customStreamURI: config.streamUrl !== baseOptionDefs.streamUrl.default,\n      customEventsURI: config.eventsUrl !== baseOptionDefs.eventsUrl.default,\n      eventsCapacity: config.eventCapacity,\n      eventsFlushIntervalMillis: config.flushInterval,\n      reconnectTimeMillis: config.streamReconnectDelay,\n      streamingDisabled: !streamingEnabled,\n      allAttributesPrivate: !!config.allAttributesPrivate,\n      diagnosticRecordingIntervalMillis: config.diagnosticRecordingInterval,\n      // The following extra properties are only provided by client-side JS SDKs:\n      usingSecureMode: !!config.hash,\n      bootstrapMode: !!config.bootstrap,\n      fetchGoalsDisabled: !config.fetchGoals,\n      sendEventsOnlyForVariation: !!config.sendEventsOnlyForVariation,\n    };\n    // Client-side JS SDKs do not have the following properties which other SDKs have:\n    // connectTimeoutMillis\n    // pollingIntervalMillis\n    // samplingInterval\n    // socketTimeoutMillis\n    // startWaitMillis\n    // userKeysCapacity\n    // userKeysFlushIntervalMillis\n    // usingProxy\n    // usingProxyAuthenticator\n    // usingRelayDaemon\n\n    return configData;\n  }\n\n  // Called when the SDK is starting up. Either send an init event immediately, or, in the alternate\n  // mode, check for cached local storage properties and send an event only if we haven't done so\n  // recently.\n  manager.start = () => {\n    if (combinedMode) {\n      loadProperties(localStorageAvailable => {\n        if (localStorageAvailable) {\n          const nextEventTime = (eventSentTime || 0) + periodicInterval;\n          const timeNow = new Date().getTime();\n          if (timeNow >= nextEventTime) {\n            sendPeriodicEvent();\n          } else {\n            periodicTimer = setTimeout(sendPeriodicEvent, nextEventTime - timeNow);\n          }\n        } else {\n          // We don't have the ability to cache anything in local storage, so we don't know if we\n          // recently sent an event before this page load, but we would still prefer not to send one\n          // on *every* page load. So, as a rough heuristic, we'll decide semi-randomly.\n          if (Math.floor(Math.random() * initialEventSamplingInterval) === 0) {\n            sendPeriodicEvent();\n          } else {\n            periodicTimer = setTimeout(sendPeriodicEvent, periodicInterval);\n          }\n        }\n      });\n    } else {\n      sendDiagnosticEvent(createInitEvent());\n      periodicTimer = setTimeout(sendPeriodicEvent, periodicInterval);\n    }\n  };\n\n  manager.stop = () => {\n    periodicTimer && clearTimeout(periodicTimer);\n  };\n\n  // Called when streaming mode is turned on or off dynamically.\n  manager.setStreaming = enabled => {\n    streamingEnabled = enabled;\n  };\n\n  return manager;\n}\n\nmodule.exports = {\n  DiagnosticId,\n  DiagnosticsAccumulator,\n  DiagnosticsManager,\n};\n","const messages = require('./messages');\nconst SafeInspector = require('./SafeInspector');\nconst { onNextTick } = require('./utils');\n\n/**\n * The types of supported inspectors.\n */\nconst InspectorTypes = {\n  flagUsed: 'flag-used',\n  flagDetailsChanged: 'flag-details-changed',\n  flagDetailChanged: 'flag-detail-changed',\n  clientIdentityChanged: 'client-identity-changed',\n};\n\nObject.freeze(InspectorTypes);\n\n/**\n * Manages dispatching of inspection data to registered inspectors.\n */\nfunction InspectorManager(inspectors, logger) {\n  const manager = {};\n\n  /**\n   * Collection of inspectors keyed by type.\n   * @type {{[type: string]: object[]}}\n   */\n  const inspectorsByType = {\n    [InspectorTypes.flagUsed]: [],\n    [InspectorTypes.flagDetailsChanged]: [],\n    [InspectorTypes.flagDetailChanged]: [],\n    [InspectorTypes.clientIdentityChanged]: [],\n  };\n\n  const safeInspectors = inspectors && inspectors.map(inspector => SafeInspector(inspector, logger));\n\n  safeInspectors &&\n    safeInspectors.forEach(safeInspector => {\n      // Only add inspectors of supported types.\n      if (Object.prototype.hasOwnProperty.call(inspectorsByType, safeInspector.type)) {\n        inspectorsByType[safeInspector.type].push(safeInspector);\n      } else {\n        logger.warn(messages.invalidInspector(safeInspector.type, safeInspector.name));\n      }\n    });\n\n  /**\n   * Check if there is an inspector of a specific type registered.\n   *\n   * @param {string} type The type of the inspector to check.\n   * @returns True if there are any inspectors of that type registered.\n   */\n  manager.hasListeners = type => inspectorsByType[type] && inspectorsByType[type].length;\n\n  /**\n   * Notify registered inspectors of a flag being used.\n   *\n   * The notification itself will be dispatched asynchronously.\n   *\n   * @param {string} flagKey The key for the flag.\n   * @param {Object} detail The LDEvaluationDetail for the flag.\n   * @param {Object} context The LDContext for the flag.\n   */\n  manager.onFlagUsed = (flagKey, detail, context) => {\n    if (inspectorsByType[InspectorTypes.flagUsed].length) {\n      onNextTick(() => {\n        inspectorsByType[InspectorTypes.flagUsed].forEach(inspector => inspector.method(flagKey, detail, context));\n      });\n    }\n  };\n\n  /**\n   * Notify registered inspectors that the flags have been replaced.\n   *\n   * The notification itself will be dispatched asynchronously.\n   *\n   * @param {Record<string, Object>} flags The current flags as a Record<string, LDEvaluationDetail>.\n   */\n  manager.onFlags = flags => {\n    if (inspectorsByType[InspectorTypes.flagDetailsChanged].length) {\n      onNextTick(() => {\n        inspectorsByType[InspectorTypes.flagDetailsChanged].forEach(inspector => inspector.method(flags));\n      });\n    }\n  };\n\n  /**\n   * Notify registered inspectors that a flag value has changed.\n   *\n   * The notification itself will be dispatched asynchronously.\n   *\n   * @param {string} flagKey The key for the flag that changed.\n   * @param {Object} flag An `LDEvaluationDetail` for the flag.\n   */\n  manager.onFlagChanged = (flagKey, flag) => {\n    if (inspectorsByType[InspectorTypes.flagDetailChanged].length) {\n      onNextTick(() => {\n        inspectorsByType[InspectorTypes.flagDetailChanged].forEach(inspector => inspector.method(flagKey, flag));\n      });\n    }\n  };\n\n  /**\n   * Notify the registered inspectors that the context identity has changed.\n   *\n   * The notification itself will be dispatched asynchronously.\n   *\n   * @param {Object} context The `LDContext` which is now identified.\n   */\n  manager.onIdentityChanged = context => {\n    if (inspectorsByType[InspectorTypes.clientIdentityChanged].length) {\n      onNextTick(() => {\n        inspectorsByType[InspectorTypes.clientIdentityChanged].forEach(inspector => inspector.method(context));\n      });\n    }\n  };\n\n  return manager;\n}\n\nmodule.exports = { InspectorTypes, InspectorManager };\n","const messages = require('./messages');\n\n/**\n * Wrap an inspector ensuring that calling its methods are safe.\n * @param {object} inspector Inspector to wrap.\n */\nfunction SafeInspector(inspector, logger) {\n  let errorLogged = false;\n  const wrapper = {\n    type: inspector.type,\n    name: inspector.name,\n  };\n\n  wrapper.method = (...args) => {\n    try {\n      inspector.method(...args);\n    } catch {\n      // If something goes wrong in an inspector we want to log that something\n      // went wrong. We don't want to flood the logs, so we only log something\n      // the first time that something goes wrong.\n      // We do not include the exception in the log, because we do not know what\n      // kind of data it may contain.\n      if (!errorLogged) {\n        errorLogged = true;\n        logger.warn(messages.inspectorMethodError(wrapper.type, wrapper.name));\n      }\n      // Prevent errors.\n    }\n  };\n\n  return wrapper;\n}\n\nmodule.exports = SafeInspector;\n","const EventProcessor = require('./EventProcessor');\nconst EventEmitter = require('./EventEmitter');\nconst EventSender = require('./EventSender');\nconst InitializationStateTracker = require('./InitializationState');\nconst PersistentFlagStore = require('./PersistentFlagStore');\nconst PersistentStorage = require('./PersistentStorage');\nconst Stream = require('./Stream');\nconst Requestor = require('./Requestor');\nconst Identity = require('./Identity');\nconst AnonymousContextProcessor = require('./AnonymousContextProcessor');\nconst configuration = require('./configuration');\nconst diagnostics = require('./diagnosticEvents');\nconst { commonBasicLogger } = require('./loggers');\nconst utils = require('./utils');\nconst errors = require('./errors');\nconst messages = require('./messages');\nconst { checkContext, getContextKeys } = require('./context');\nconst { InspectorTypes, InspectorManager } = require('./InspectorManager');\n\nconst changeEvent = 'change';\nconst internalChangeEvent = 'internal-change';\n\n// This is called by the per-platform initialize functions to create the base client object that we\n// may also extend with additional behavior. It returns an object with these properties:\n//   client: the actual client object\n//   options: the configuration (after any appropriate defaults have been applied)\n// If we need to give the platform-specific clients access to any internals here, we should add those\n// as properties of the return object, not public properties of the client.\n//\n// For definitions of the API in the platform object, see stubPlatform.js in the test code.\n\nfunction initialize(env, context, specifiedOptions, platform, extraOptionDefs) {\n  const logger = createLogger();\n  const emitter = EventEmitter(logger);\n  const initializationStateTracker = InitializationStateTracker(emitter);\n  const options = configuration.validate(specifiedOptions, emitter, extraOptionDefs, logger);\n  const inspectorManager = InspectorManager(options.inspectors, logger);\n  const sendEvents = options.sendEvents;\n  let environment = env;\n  let hash = options.hash;\n\n  const persistentStorage = PersistentStorage(platform.localStorage, logger);\n\n  const eventSender = EventSender(platform, environment, options);\n\n  const diagnosticsEnabled = options.sendEvents && !options.diagnosticOptOut;\n  const diagnosticId = diagnosticsEnabled ? diagnostics.DiagnosticId(environment) : null;\n  const diagnosticsAccumulator = diagnosticsEnabled ? diagnostics.DiagnosticsAccumulator(new Date().getTime()) : null;\n  const diagnosticsManager = diagnosticsEnabled\n    ? diagnostics.DiagnosticsManager(\n        platform,\n        persistentStorage,\n        diagnosticsAccumulator,\n        eventSender,\n        environment,\n        options,\n        diagnosticId\n      )\n    : null;\n\n  const stream = Stream(platform, options, environment, diagnosticsAccumulator);\n\n  const events =\n    options.eventProcessor ||\n    EventProcessor(platform, options, environment, diagnosticsAccumulator, emitter, eventSender);\n\n  const requestor = Requestor(platform, options, environment);\n\n  let flags = {};\n  let useLocalStorage;\n  let streamActive;\n  let streamForcedState = options.streaming;\n  let subscribedToChangeEvents;\n  let inited = false;\n  let closed = false;\n  let firstEvent = true;\n\n  // The \"stateProvider\" object is used in the Electron SDK, to allow one client instance to take partial\n  // control of another. If present, it has the following contract:\n  // - getInitialState() returns the initial client state if it is already available. The state is an\n  //   object whose properties are \"environment\", \"context\", and \"flags\".\n  // - on(\"init\", listener) triggers an event when the initial client state becomes available, passing\n  //   the state object to the listener.\n  // - on(\"update\", listener) triggers an event when flag values change and/or the current context changes.\n  //   The parameter is an object that *may* contain \"context\" and/or \"flags\".\n  // - enqueueEvent(event) accepts an analytics event object and returns true if the stateProvider will\n  //   be responsible for delivering it, or false if we still should deliver it ourselves.\n  const stateProvider = options.stateProvider;\n\n  const ident = Identity(null, onIdentifyChange);\n  const anonymousContextProcessor = new AnonymousContextProcessor(persistentStorage);\n  const persistentFlagStore = persistentStorage.isEnabled()\n    ? PersistentFlagStore(persistentStorage, environment, hash, ident, logger)\n    : null;\n\n  function createLogger() {\n    if (specifiedOptions && specifiedOptions.logger) {\n      return specifiedOptions.logger;\n    }\n    return (extraOptionDefs && extraOptionDefs.logger && extraOptionDefs.logger.default) || commonBasicLogger('warn');\n  }\n\n  function readFlagsFromBootstrap(data) {\n    // If the bootstrap data came from an older server-side SDK, we'll have just a map of keys to values.\n    // Newer SDKs that have an allFlagsState method will provide an extra \"$flagsState\" key that contains\n    // the rest of the metadata we want. We do it this way for backward compatibility with older JS SDKs.\n    const keys = Object.keys(data);\n    const metadataKey = '$flagsState';\n    const validKey = '$valid';\n    const metadata = data[metadataKey];\n    if (!metadata && keys.length) {\n      logger.warn(messages.bootstrapOldFormat());\n    }\n    if (data[validKey] === false) {\n      logger.warn(messages.bootstrapInvalid());\n    }\n    const ret = {};\n    keys.forEach(key => {\n      if (key !== metadataKey && key !== validKey) {\n        let flag = { value: data[key] };\n        if (metadata && metadata[key]) {\n          flag = utils.extend(flag, metadata[key]);\n        } else {\n          flag.version = 0;\n        }\n        ret[key] = flag;\n      }\n    });\n    return ret;\n  }\n\n  function shouldEnqueueEvent() {\n    return sendEvents && !closed && !platform.isDoNotTrack();\n  }\n\n  function enqueueEvent(event) {\n    if (!environment) {\n      // We're in paired mode and haven't been initialized with an environment or context yet\n      return;\n    }\n    if (stateProvider && stateProvider.enqueueEvent && stateProvider.enqueueEvent(event)) {\n      return; // it'll be handled elsewhere\n    }\n\n    if (!event.context) {\n      if (firstEvent) {\n        logger.warn(messages.eventWithoutContext());\n        firstEvent = false;\n      }\n      return;\n    }\n    firstEvent = false;\n\n    if (shouldEnqueueEvent()) {\n      logger.debug(messages.debugEnqueueingEvent(event.kind));\n      events.enqueue(event);\n    }\n  }\n\n  function notifyInspectionFlagUsed(key, detail) {\n    if (inspectorManager.hasListeners(InspectorTypes.flagUsed)) {\n      inspectorManager.onFlagUsed(key, detail, ident.getContext());\n    }\n  }\n\n  function notifyInspectionIdentityChanged() {\n    if (inspectorManager.hasListeners(InspectorTypes.clientIdentityChanged)) {\n      inspectorManager.onIdentityChanged(ident.getContext());\n    }\n  }\n\n  function notifyInspectionFlagChanged(data, newFlag) {\n    if (inspectorManager.hasListeners(InspectorTypes.flagDetailChanged)) {\n      inspectorManager.onFlagChanged(data.key, getFlagDetail(newFlag));\n    }\n  }\n\n  function notifyInspectionFlagsChanged() {\n    if (inspectorManager.hasListeners(InspectorTypes.flagDetailsChanged)) {\n      inspectorManager.onFlags(\n        Object.entries(flags)\n          .map(([key, value]) => ({ key, detail: getFlagDetail(value) }))\n          .reduce((acc, cur) => {\n            // eslint-disable-next-line no-param-reassign\n            acc[cur.key] = cur.detail;\n            return acc;\n          }, {})\n      );\n    }\n  }\n\n  function onIdentifyChange(context) {\n    sendIdentifyEvent(context);\n    notifyInspectionIdentityChanged();\n  }\n\n  function sendIdentifyEvent(context) {\n    if (stateProvider) {\n      // In paired mode, the other client is responsible for sending identify events\n      return;\n    }\n    if (context) {\n      enqueueEvent({\n        kind: 'identify',\n        context,\n        creationDate: new Date().getTime(),\n      });\n    }\n  }\n\n  function sendFlagEvent(key, detail, defaultValue, includeReason) {\n    const context = ident.getContext();\n    const now = new Date();\n    const value = detail ? detail.value : null;\n\n    const event = {\n      kind: 'feature',\n      key: key,\n      context,\n      value: value,\n      variation: detail ? detail.variationIndex : null,\n      default: defaultValue,\n      creationDate: now.getTime(),\n    };\n    const flag = flags[key];\n    if (flag) {\n      event.version = flag.flagVersion ? flag.flagVersion : flag.version;\n      event.trackEvents = flag.trackEvents;\n      event.debugEventsUntilDate = flag.debugEventsUntilDate;\n    }\n    if ((includeReason || (flag && flag.trackReason)) && detail) {\n      event.reason = detail.reason;\n    }\n\n    enqueueEvent(event);\n  }\n\n  function verifyContext(context) {\n    // The context will already have been processed to have a string key, so we\n    // do not need to allow for legacy keys in the check.\n    if (checkContext(context, false)) {\n      return Promise.resolve(context);\n    } else {\n      return Promise.reject(new errors.LDInvalidUserError(messages.invalidContext()));\n    }\n  }\n\n  function identify(context, newHash, onDone) {\n    if (closed) {\n      return utils.wrapPromiseCallback(Promise.resolve({}), onDone);\n    }\n    if (stateProvider) {\n      // We're being controlled by another client instance, so only that instance is allowed to change the context\n      logger.warn(messages.identifyDisabled());\n      return utils.wrapPromiseCallback(Promise.resolve(utils.transformVersionedValuesToValues(flags)), onDone);\n    }\n    const clearFirst = useLocalStorage && persistentFlagStore ? persistentFlagStore.clearFlags() : Promise.resolve();\n    return utils.wrapPromiseCallback(\n      clearFirst\n        .then(() => anonymousContextProcessor.processContext(context))\n        .then(verifyContext)\n        .then(validatedContext =>\n          requestor\n            .fetchFlagSettings(validatedContext, newHash)\n            // the following then() is nested within this one so we can use realUser from the previous closure\n            .then(requestedFlags => {\n              const flagValueMap = utils.transformVersionedValuesToValues(requestedFlags);\n              ident.setContext(validatedContext);\n              hash = newHash;\n              if (requestedFlags) {\n                return replaceAllFlags(requestedFlags).then(() => flagValueMap);\n              } else {\n                return flagValueMap;\n              }\n            })\n        )\n        .then(flagValueMap => {\n          if (streamActive) {\n            connectStream();\n          }\n          return flagValueMap;\n        })\n        .catch(err => {\n          emitter.maybeReportError(err);\n          return Promise.reject(err);\n        }),\n      onDone\n    );\n  }\n\n  function getContext() {\n    return ident.getContext();\n  }\n\n  function flush(onDone) {\n    return utils.wrapPromiseCallback(sendEvents ? events.flush() : Promise.resolve(), onDone);\n  }\n\n  function variation(key, defaultValue) {\n    return variationDetailInternal(key, defaultValue, true, false, false).value;\n  }\n\n  function variationDetail(key, defaultValue) {\n    return variationDetailInternal(key, defaultValue, true, true, false);\n  }\n\n  function variationDetailInternal(key, defaultValue, sendEvent, includeReasonInEvent, isAllFlags) {\n    let detail;\n\n    if (flags && utils.objectHasOwnProperty(flags, key) && flags[key] && !flags[key].deleted) {\n      const flag = flags[key];\n      detail = getFlagDetail(flag);\n      if (flag.value === null || flag.value === undefined) {\n        detail.value = defaultValue;\n      }\n    } else {\n      detail = { value: defaultValue, variationIndex: null, reason: { kind: 'ERROR', errorKind: 'FLAG_NOT_FOUND' } };\n    }\n\n    if (sendEvent) {\n      sendFlagEvent(key, detail, defaultValue, includeReasonInEvent);\n    }\n\n    // For the all flags case `onFlags` will be called instead.\n    if (!isAllFlags) {\n      notifyInspectionFlagUsed(key, detail);\n    }\n\n    return detail;\n  }\n\n  function getFlagDetail(flag) {\n    return {\n      value: flag.value,\n      variationIndex: flag.variation === undefined ? null : flag.variation,\n      reason: flag.reason || null,\n    };\n    // Note, the logic above ensures that variationIndex and reason will always be null rather than\n    // undefined if we don't have values for them. That's just to avoid subtle errors that depend on\n    // whether an object was JSON-encoded with null properties omitted or not.\n  }\n\n  function allFlags() {\n    const results = {};\n\n    if (!flags) {\n      return results;\n    }\n\n    for (const key in flags) {\n      if (utils.objectHasOwnProperty(flags, key) && !flags[key].deleted) {\n        results[key] = variationDetailInternal(key, null, !options.sendEventsOnlyForVariation, false, true).value;\n      }\n    }\n\n    return results;\n  }\n\n  function userContextKind(user) {\n    return user.anonymous ? 'anonymousUser' : 'user';\n  }\n\n  function track(key, data, metricValue) {\n    if (typeof key !== 'string') {\n      emitter.maybeReportError(new errors.LDInvalidEventKeyError(messages.unknownCustomEventKey(key)));\n      return;\n    }\n\n    // The following logic was used only for the JS browser SDK (js-client-sdk) and\n    // is no longer needed as of version 2.9.13 of that SDK. The other client-side\n    // JS-based SDKs did not define customEventFilter, and now none of them do. We\n    // can remove this in the next major version of the common code, when it's OK to\n    // make breaking changes to our internal API contracts.\n    if (platform.customEventFilter && !platform.customEventFilter(key)) {\n      logger.warn(messages.unknownCustomEventKey(key));\n    }\n\n    const context = ident.getContext();\n    const e = {\n      kind: 'custom',\n      key: key,\n      context,\n      url: platform.getCurrentUrl(),\n      creationDate: new Date().getTime(),\n    };\n    if (context && context.anonymous) {\n      e.contextKind = userContextKind(context);\n    }\n    // Note, check specifically for null/undefined because it is legal to set these fields to a falsey value.\n    if (data !== null && data !== undefined) {\n      e.data = data;\n    }\n    if (metricValue !== null && metricValue !== undefined) {\n      e.metricValue = metricValue;\n    }\n    enqueueEvent(e);\n  }\n\n  function connectStream() {\n    streamActive = true;\n    if (!ident.getContext()) {\n      return;\n    }\n    const tryParseData = jsonData => {\n      try {\n        return JSON.parse(jsonData);\n      } catch (err) {\n        emitter.maybeReportError(new errors.LDInvalidDataError(messages.invalidData()));\n        return undefined;\n      }\n    };\n    stream.connect(ident.getContext(), hash, {\n      ping: function() {\n        logger.debug(messages.debugStreamPing());\n        const contextAtTimeOfPingEvent = ident.getContext();\n        requestor\n          .fetchFlagSettings(contextAtTimeOfPingEvent, hash)\n          .then(requestedFlags => {\n            // Check whether the current context is still the same - we don't want to overwrite the flags if\n            // the application has called identify() while this request was in progress\n            if (utils.deepEquals(contextAtTimeOfPingEvent, ident.getContext())) {\n              replaceAllFlags(requestedFlags || {});\n            }\n          })\n          .catch(err => {\n            emitter.maybeReportError(new errors.LDFlagFetchError(messages.errorFetchingFlags(err)));\n          });\n      },\n      put: function(e) {\n        const data = tryParseData(e.data);\n        if (!data) {\n          return;\n        }\n        logger.debug(messages.debugStreamPut());\n        replaceAllFlags(data);\n        // Don't wait for this Promise to be resolved; note that replaceAllFlags is guaranteed\n        // never to have an unhandled rejection\n      },\n      patch: function(e) {\n        const data = tryParseData(e.data);\n        if (!data) {\n          return;\n        }\n        // If both the flag and the patch have a version property, then the patch version must be\n        // greater than the flag version for us to accept the patch.  If either one has no version\n        // then the patch always succeeds.\n        const oldFlag = flags[data.key];\n        if (!oldFlag || !oldFlag.version || !data.version || oldFlag.version < data.version) {\n          logger.debug(messages.debugStreamPatch(data.key));\n          const mods = {};\n          const newFlag = utils.extend({}, data);\n          delete newFlag['key'];\n          flags[data.key] = newFlag;\n          const newDetail = getFlagDetail(newFlag);\n          if (oldFlag) {\n            mods[data.key] = { previous: oldFlag.value, current: newDetail };\n          } else {\n            mods[data.key] = { current: newDetail };\n          }\n          handleFlagChanges(mods); // don't wait for this Promise to be resolved\n          notifyInspectionFlagChanged(data, newFlag);\n        } else {\n          logger.debug(messages.debugStreamPatchIgnored(data.key));\n        }\n      },\n      delete: function(e) {\n        const data = tryParseData(e.data);\n        if (!data) {\n          return;\n        }\n        if (!flags[data.key] || flags[data.key].version < data.version) {\n          logger.debug(messages.debugStreamDelete(data.key));\n          const mods = {};\n          if (flags[data.key] && !flags[data.key].deleted) {\n            mods[data.key] = { previous: flags[data.key].value };\n          }\n          flags[data.key] = { version: data.version, deleted: true };\n          notifyInspectionFlagChanged(data, flags[data.key]);\n          handleFlagChanges(mods); // don't wait for this Promise to be resolved\n        } else {\n          logger.debug(messages.debugStreamDeleteIgnored(data.key));\n        }\n      },\n    });\n  }\n\n  function disconnectStream() {\n    if (streamActive) {\n      stream.disconnect();\n      streamActive = false;\n    }\n  }\n\n  // Returns a Promise which will be resolved when we have completely updated the internal flags state,\n  // dispatched all change events, and updated local storage if appropriate. This Promise is guaranteed\n  // never to have an unhandled rejection.\n  function replaceAllFlags(newFlags) {\n    const changes = {};\n\n    if (!newFlags) {\n      return Promise.resolve();\n    }\n\n    for (const key in flags) {\n      if (utils.objectHasOwnProperty(flags, key) && flags[key]) {\n        if (newFlags[key] && !utils.deepEquals(newFlags[key].value, flags[key].value)) {\n          changes[key] = { previous: flags[key].value, current: getFlagDetail(newFlags[key]) };\n        } else if (!newFlags[key] || newFlags[key].deleted) {\n          changes[key] = { previous: flags[key].value };\n        }\n      }\n    }\n    for (const key in newFlags) {\n      if (utils.objectHasOwnProperty(newFlags, key) && newFlags[key] && (!flags[key] || flags[key].deleted)) {\n        changes[key] = { current: getFlagDetail(newFlags[key]) };\n      }\n    }\n\n    flags = { ...newFlags };\n\n    notifyInspectionFlagsChanged();\n\n    return handleFlagChanges(changes).catch(() => {}); // swallow any exceptions from this Promise\n  }\n\n  // Returns a Promise which will be resolved when we have dispatched all change events and updated\n  // local storage if appropriate.\n  function handleFlagChanges(changes) {\n    const keys = Object.keys(changes);\n\n    if (keys.length > 0) {\n      const changeEventParams = {};\n      keys.forEach(key => {\n        const current = changes[key].current;\n        const value = current ? current.value : undefined;\n        const previous = changes[key].previous;\n        emitter.emit(changeEvent + ':' + key, value, previous);\n        changeEventParams[key] = current ? { current: value, previous: previous } : { previous: previous };\n      });\n\n      emitter.emit(changeEvent, changeEventParams);\n      emitter.emit(internalChangeEvent, flags);\n\n      // By default, we send feature evaluation events whenever we have received new flag values -\n      // the client has in effect evaluated these flags just by receiving them. This can be suppressed\n      // by setting \"sendEventsOnlyForVariation\". Also, if we have a stateProvider, we don't send these\n      // events because we assume they have already been sent by the other client that gave us the flags\n      // (when it received them in the first place).\n      if (!options.sendEventsOnlyForVariation && !stateProvider) {\n        keys.forEach(key => {\n          sendFlagEvent(key, changes[key].current);\n        });\n      }\n    }\n\n    if (useLocalStorage && persistentFlagStore) {\n      return persistentFlagStore.saveFlags(flags);\n    } else {\n      return Promise.resolve();\n    }\n  }\n\n  function on(event, handler, context) {\n    if (isChangeEventKey(event)) {\n      subscribedToChangeEvents = true;\n      if (inited) {\n        updateStreamingState();\n      }\n      emitter.on(event, handler, context);\n    } else {\n      emitter.on(...arguments);\n    }\n  }\n\n  function off(event) {\n    emitter.off(...arguments);\n    if (isChangeEventKey(event)) {\n      let haveListeners = false;\n      emitter.getEvents().forEach(key => {\n        if (isChangeEventKey(key) && emitter.getEventListenerCount(key) > 0) {\n          haveListeners = true;\n        }\n      });\n      if (!haveListeners) {\n        subscribedToChangeEvents = false;\n        if (streamActive && streamForcedState === undefined) {\n          disconnectStream();\n        }\n      }\n    }\n  }\n\n  function setStreaming(state) {\n    const newState = state === null ? undefined : state;\n    if (newState !== streamForcedState) {\n      streamForcedState = newState;\n      updateStreamingState();\n    }\n  }\n\n  function updateStreamingState() {\n    const shouldBeStreaming = streamForcedState || (subscribedToChangeEvents && streamForcedState === undefined);\n    if (shouldBeStreaming && !streamActive) {\n      connectStream();\n    } else if (!shouldBeStreaming && streamActive) {\n      disconnectStream();\n    }\n    if (diagnosticsManager) {\n      diagnosticsManager.setStreaming(shouldBeStreaming);\n    }\n  }\n\n  function isChangeEventKey(event) {\n    return event === changeEvent || event.substr(0, changeEvent.length + 1) === changeEvent + ':';\n  }\n\n  if (typeof options.bootstrap === 'string' && options.bootstrap.toUpperCase() === 'LOCALSTORAGE') {\n    if (persistentFlagStore) {\n      useLocalStorage = true;\n    } else {\n      logger.warn(messages.localStorageUnavailable());\n    }\n  }\n\n  if (typeof options.bootstrap === 'object') {\n    // Set the flags as soon as possible before we get into any async code, so application code can read\n    // them even if the ready event has not yet fired.\n    flags = readFlagsFromBootstrap(options.bootstrap);\n  }\n\n  if (stateProvider) {\n    // The stateProvider option is used in the Electron SDK, to allow a client instance in the main process\n    // to control another client instance (i.e. this one) in the renderer process. We can't predict which\n    // one will start up first, so the initial state may already be available for us or we may have to wait\n    // to receive it.\n    const state = stateProvider.getInitialState();\n    if (state) {\n      initFromStateProvider(state);\n    } else {\n      stateProvider.on('init', initFromStateProvider);\n    }\n    stateProvider.on('update', updateFromStateProvider);\n  } else {\n    finishInit().catch(signalFailedInit);\n  }\n\n  function finishInit() {\n    if (!env) {\n      return Promise.reject(new errors.LDInvalidEnvironmentIdError(messages.environmentNotSpecified()));\n    }\n    return anonymousContextProcessor\n      .processContext(context)\n      .then(verifyContext)\n      .then(validatedContext => {\n        ident.setContext(validatedContext);\n        if (typeof options.bootstrap === 'object') {\n          // flags have already been set earlier\n          return signalSuccessfulInit();\n        } else if (useLocalStorage) {\n          return finishInitWithLocalStorage();\n        } else {\n          return finishInitWithPolling();\n        }\n      });\n  }\n\n  function finishInitWithLocalStorage() {\n    return persistentFlagStore.loadFlags().then(storedFlags => {\n      if (storedFlags === null || storedFlags === undefined) {\n        flags = {};\n        return requestor\n          .fetchFlagSettings(ident.getContext(), hash)\n          .then(requestedFlags => replaceAllFlags(requestedFlags || {}))\n          .then(signalSuccessfulInit)\n          .catch(err => {\n            const initErr = new errors.LDFlagFetchError(messages.errorFetchingFlags(err));\n            signalFailedInit(initErr);\n          });\n      } else {\n        // We're reading the flags from local storage. Signal that we're ready,\n        // then update localStorage for the next page load. We won't signal changes or update\n        // the in-memory flags unless you subscribe for changes\n        flags = storedFlags;\n        utils.onNextTick(signalSuccessfulInit);\n\n        return requestor\n          .fetchFlagSettings(ident.getContext(), hash)\n          .then(requestedFlags => replaceAllFlags(requestedFlags))\n          .catch(err => emitter.maybeReportError(err));\n      }\n    });\n  }\n\n  function finishInitWithPolling() {\n    return requestor\n      .fetchFlagSettings(ident.getContext(), hash)\n      .then(requestedFlags => {\n        flags = requestedFlags || {};\n\n        notifyInspectionFlagsChanged();\n        // Note, we don't need to call updateSettings here because local storage and change events are not relevant\n        signalSuccessfulInit();\n      })\n      .catch(err => {\n        flags = {};\n        signalFailedInit(err);\n      });\n  }\n\n  function initFromStateProvider(state) {\n    environment = state.environment;\n    ident.setContext(state.context);\n    flags = { ...state.flags };\n    utils.onNextTick(signalSuccessfulInit);\n  }\n\n  function updateFromStateProvider(state) {\n    if (state.context) {\n      ident.setContext(state.context);\n    }\n    if (state.flags) {\n      replaceAllFlags(state.flags); // don't wait for this Promise to be resolved\n    }\n  }\n\n  function signalSuccessfulInit() {\n    logger.info(messages.clientInitialized());\n    inited = true;\n    updateStreamingState();\n    initializationStateTracker.signalSuccess();\n  }\n\n  function signalFailedInit(err) {\n    initializationStateTracker.signalFailure(err);\n  }\n\n  function start() {\n    if (sendEvents) {\n      if (diagnosticsManager) {\n        diagnosticsManager.start();\n      }\n      events.start();\n    }\n  }\n\n  function close(onDone) {\n    if (closed) {\n      return utils.wrapPromiseCallback(Promise.resolve(), onDone);\n    }\n    const finishClose = () => {\n      closed = true;\n      flags = {};\n    };\n    const p = Promise.resolve()\n      .then(() => {\n        disconnectStream();\n        if (diagnosticsManager) {\n          diagnosticsManager.stop();\n        }\n        if (sendEvents) {\n          events.stop();\n          return events.flush();\n        }\n      })\n      .then(finishClose)\n      .catch(finishClose);\n    return utils.wrapPromiseCallback(p, onDone);\n  }\n\n  function getFlagsInternal() {\n    // used by Electron integration\n    return flags;\n  }\n\n  const client = {\n    waitForInitialization: () => initializationStateTracker.getInitializationPromise(),\n    waitUntilReady: () => initializationStateTracker.getReadyPromise(),\n    identify: identify,\n    getContext: getContext,\n    variation: variation,\n    variationDetail: variationDetail,\n    track: track,\n    on: on,\n    off: off,\n    setStreaming: setStreaming,\n    flush: flush,\n    allFlags: allFlags,\n    close: close,\n  };\n\n  return {\n    client: client, // The client object containing all public methods.\n    options: options, // The validated configuration object, including all defaults.\n    emitter: emitter, // The event emitter which can be used to log errors or trigger events.\n    ident: ident, // The Identity object that manages the current context.\n    logger: logger, // The logging abstraction.\n    requestor: requestor, // The Requestor object.\n    start: start, // Starts the client once the environment is ready.\n    enqueueEvent: enqueueEvent, // Puts an analytics event in the queue, if event sending is enabled.\n    getFlagsInternal: getFlagsInternal, // Returns flag data structure with all details.\n    getEnvironmentId: () => environment, // Gets the environment ID (this may have changed since initialization, if we have a state provider)\n    internalChangeEventName: internalChangeEvent, // This event is triggered whenever we have new flag state.\n  };\n}\n\nmodule.exports = {\n  initialize,\n  commonBasicLogger,\n  errors,\n  messages,\n  utils,\n  getContextKeys,\n};\n","function EventEmitter(logger) {\n  const emitter = {};\n  const events = {};\n\n  const listeningTo = event => !!events[event];\n\n  emitter.on = function(event, handler, context) {\n    events[event] = events[event] || [];\n    events[event] = events[event].concat({\n      handler: handler,\n      context: context,\n    });\n  };\n\n  emitter.off = function(event, handler, context) {\n    if (!events[event]) {\n      return;\n    }\n    for (let i = 0; i < events[event].length; i++) {\n      if (events[event][i].handler === handler && events[event][i].context === context) {\n        events[event] = events[event].slice(0, i).concat(events[event].slice(i + 1));\n      }\n    }\n  };\n\n  emitter.emit = function(event) {\n    if (!events[event]) {\n      return;\n    }\n    // Copy the list of handlers before iterating, in case any handler adds or removes another handler.\n    // Any such changes should not affect what we do here-- we want to notify every handler that existed\n    // at the moment that the event was fired.\n    const copiedHandlers = events[event].slice(0);\n    for (let i = 0; i < copiedHandlers.length; i++) {\n      copiedHandlers[i].handler.apply(copiedHandlers[i].context, Array.prototype.slice.call(arguments, 1));\n    }\n  };\n\n  emitter.getEvents = function() {\n    return Object.keys(events);\n  };\n\n  emitter.getEventListenerCount = function(event) {\n    return events[event] ? events[event].length : 0;\n  };\n\n  emitter.maybeReportError = function(error) {\n    if (!error) {\n      return;\n    }\n    if (listeningTo('error')) {\n      this.emit('error', error);\n    } else {\n      (logger || console).error(error.message);\n    }\n  };\n  return emitter;\n}\n\nmodule.exports = EventEmitter;\n","const messages = require('./messages');\n\n// The localStorageProvider is provided by the platform object. It should have the following\n// methods, each of which should return a Promise:\n// - get(key): Gets the string value, if any, for the given key\n// - set(key, value): Stores a string value for the given key\n// - remove(key): Removes the given key\n//\n// Storage is just a light wrapper of the localStorageProvider, adding error handling and\n// ensuring that we don't call it if it's unavailable. The get method will simply resolve\n// with an undefined value if there is an error or if there is no localStorageProvider.\n// None of the promises returned by Storage will ever be rejected.\n//\n// It is always possible that the underlying platform storage mechanism might fail or be\n// disabled. If so, it's likely that it will keep failing, so we will only log one warning\n// instead of repetitive warnings.\nfunction PersistentStorage(localStorageProvider, logger) {\n  const storage = {};\n  let loggedError = false;\n\n  const logError = err => {\n    if (!loggedError) {\n      loggedError = true;\n      logger.warn(messages.localStorageUnavailable(err));\n    }\n  };\n\n  storage.isEnabled = () => !!localStorageProvider;\n\n  // Resolves with a value, or undefined if storage is unavailable. Never rejects.\n  storage.get = key =>\n    new Promise(resolve => {\n      if (!localStorageProvider) {\n        resolve(undefined);\n        return;\n      }\n      localStorageProvider\n        .get(key)\n        .then(resolve)\n        .catch(err => {\n          logError(err);\n          resolve(undefined);\n        });\n    });\n\n  // Resolves with true if successful, or false if storage is unavailable. Never rejects.\n  storage.set = (key, value) =>\n    new Promise(resolve => {\n      if (!localStorageProvider) {\n        resolve(false);\n        return;\n      }\n      localStorageProvider\n        .set(key, value)\n        .then(() => resolve(true))\n        .catch(err => {\n          logError(err);\n          resolve(false);\n        });\n    });\n\n  // Resolves with true if successful, or false if storage is unavailable. Never rejects.\n  storage.clear = key =>\n    new Promise(resolve => {\n      if (!localStorageProvider) {\n        resolve(false);\n        return;\n      }\n      localStorageProvider\n        .clear(key)\n        .then(() => resolve(true))\n        .catch(err => {\n          logError(err);\n          resolve(false);\n        });\n    });\n\n  return storage;\n}\n\nmodule.exports = PersistentStorage;\n","const AttributeReference = require('./attributeReference');\n\nfunction ContextFilter(config) {\n  const filter = {};\n\n  const allAttributesPrivate = config.allAttributesPrivate;\n  const privateAttributes = config.privateAttributes || [];\n\n  // These attributes cannot be removed via a private attribute.\n  const protectedAttributes = ['key', 'kind', '_meta', 'anonymous'];\n\n  const legacyTopLevelCopyAttributes = ['name', 'ip', 'firstName', 'lastName', 'email', 'avatar', 'country'];\n\n  /**\n   * For the given context and configuration get a list of attributes to filter.\n   * @param {Object} context\n   * @returns {string[]} A list of the attributes to filter.\n   */\n  const getAttributesToFilter = context =>\n    (allAttributesPrivate\n      ? Object.keys(context)\n      : [...privateAttributes, ...((context._meta && context._meta.privateAttributes) || [])]\n    ).filter(attr => !protectedAttributes.some(protectedAttr => AttributeReference.compare(attr, protectedAttr)));\n\n  /**\n   * @param {Object} context\n   * @returns {Object} A copy of the context with private attributes removed,\n   * and the redactedAttributes meta populated.\n   */\n  const filterSingleKind = context => {\n    if (typeof context !== 'object' || context === null || Array.isArray(context)) {\n      return undefined;\n    }\n\n    const { cloned, excluded } = AttributeReference.cloneExcluding(context, getAttributesToFilter(context));\n    cloned.key = String(cloned.key);\n    if (excluded.length) {\n      if (!cloned._meta) {\n        cloned._meta = {};\n      }\n      cloned._meta.redactedAttributes = excluded;\n    }\n    if (cloned._meta) {\n      delete cloned._meta['privateAttributes'];\n      if (Object.keys(cloned._meta).length === 0) {\n        delete cloned._meta;\n      }\n    }\n    // Make sure anonymous is boolean if present.\n    // Null counts as present, and would be falsy, which is the default.\n    if (cloned.anonymous !== undefined) {\n      cloned.anonymous = !!cloned.anonymous;\n    }\n\n    return cloned;\n  };\n\n  /**\n   * @param {Object} context\n   * @returns {Object} A copy of the context with the private attributes removed,\n   * and the redactedAttributes meta populated for each sub-context.\n   */\n  const filterMultiKind = context => {\n    const filtered = {\n      kind: context.kind,\n    };\n    const contextKeys = Object.keys(context);\n\n    for (const contextKey of contextKeys) {\n      if (contextKey !== 'kind') {\n        const filteredContext = filterSingleKind(context[contextKey]);\n        if (filteredContext) {\n          filtered[contextKey] = filteredContext;\n        }\n      }\n    }\n    return filtered;\n  };\n\n  /**\n   * Convert the LDUser object into an LDContext object.\n   * @param {Object} user The LDUser to produce an LDContext for.\n   * @returns {Object} A single kind context based on the provided user.\n   */\n  const legacyToSingleKind = user => {\n    const filtered = {\n      /* Destructure custom items into the top level.\n         Duplicate keys will be overridden by previously\n         top level items.\n      */\n      ...(user.custom || {}),\n\n      // Implicity a user kind.\n      kind: 'user',\n\n      key: user.key,\n    };\n\n    if (user.anonymous !== undefined) {\n      filtered.anonymous = !!user.anonymous;\n    }\n\n    // Copy top level keys and convert them to strings.\n    // Remove keys that may have been destructured from `custom`.\n    for (const key of legacyTopLevelCopyAttributes) {\n      delete filtered[key];\n      if (user[key] !== undefined && user[key] !== null) {\n        filtered[key] = String(user[key]);\n      }\n    }\n\n    if (user.privateAttributeNames !== undefined && user.privateAttributeNames !== null) {\n      filtered._meta = filtered._meta || {};\n      // If any private attributes started with '/' we need to convert them to references, otherwise the '/' will\n      // cause the literal to incorrectly be treated as a reference.\n      filtered._meta.privateAttributes = user.privateAttributeNames.map(\n        literal => (literal.startsWith('/') ? AttributeReference.literalToReference(literal) : literal)\n      );\n    }\n\n    return filtered;\n  };\n\n  filter.filter = context => {\n    if (context.kind === undefined || context.kind === null) {\n      return filterSingleKind(legacyToSingleKind(context));\n    } else if (context.kind === 'multi') {\n      return filterMultiKind(context);\n    } else {\n      return filterSingleKind(context);\n    }\n  };\n\n  return filter;\n}\n\nmodule.exports = ContextFilter;\n","// This function allows a series of Promises to be coalesced such that only the most recently\n// added one actually matters. For instance, if several HTTP requests are made to the same\n// endpoint and we want to ensure that whoever made each one always gets the latest data, each\n// can be passed to addPromise (on the same coalescer) and each caller can wait on the\n// coalescer.resultPromise; all three will then receive the result (or error) from the *last*\n// request, and the results of the first two will be discarded.\n//\n// The cancelFn callback, if present, will be called whenever an existing promise is being\n// discarded. This can be used for instance to abort an HTTP request that's now obsolete.\n//\n// The finallyFn callback, if present, is called on completion of the whole thing. This is\n// different from calling coalescer.resultPromise.finally() because it is executed before any\n// other handlers. Its purpose is to tell the caller that this coalescer should no longer be used.\n\nfunction promiseCoalescer(finallyFn) {\n  let currentPromise;\n  let currentCancelFn;\n  let finalResolve;\n  let finalReject;\n\n  const coalescer = {};\n\n  coalescer.addPromise = (p, cancelFn) => {\n    currentPromise = p;\n    currentCancelFn && currentCancelFn();\n    currentCancelFn = cancelFn;\n\n    p.then(\n      result => {\n        if (currentPromise === p) {\n          finalResolve(result);\n          finallyFn && finallyFn();\n        }\n      },\n      error => {\n        if (currentPromise === p) {\n          finalReject(error);\n          finallyFn && finallyFn();\n        }\n      }\n    );\n  };\n\n  coalescer.resultPromise = new Promise((resolve, reject) => {\n    finalResolve = resolve;\n    finalReject = reject;\n  });\n\n  return coalescer;\n}\n\nmodule.exports = promiseCoalescer;\n","const utils = require('./utils');\n\nfunction Identity(initialContext, onChange) {\n  const ident = {};\n  let context;\n\n  ident.setContext = function(c) {\n    context = utils.sanitizeContext(c);\n    if (context && onChange) {\n      onChange(utils.clone(context));\n    }\n  };\n\n  ident.getContext = function() {\n    return context ? utils.clone(context) : null;\n  };\n\n  if (initialContext) {\n    ident.setContext(initialContext);\n  }\n\n  return ident;\n}\n\nmodule.exports = Identity;\n","const utils = require('./utils');\n\nfunction PersistentFlagStore(storage, environment, hash, ident) {\n  const store = {};\n\n  function getFlagsKey() {\n    let key = '';\n    const context = ident.getContext();\n    if (context) {\n      key = hash || utils.btoa(JSON.stringify(context));\n    }\n    return 'ld:' + environment + ':' + key;\n  }\n\n  // Returns a Promise which will be resolved with a parsed JSON value if a stored value was available,\n  // or resolved with null if there was no value or if storage was not available.\n  store.loadFlags = () =>\n    storage.get(getFlagsKey()).then(dataStr => {\n      if (dataStr === null || dataStr === undefined) {\n        return null;\n      }\n      try {\n        let data = JSON.parse(dataStr);\n        if (data) {\n          const schema = data.$schema;\n          if (schema === undefined || schema < 1) {\n            data = utils.transformValuesToVersionedValues(data);\n          } else {\n            delete data['$schema'];\n          }\n        }\n        return data;\n      } catch (ex) {\n        return store.clearFlags().then(() => null);\n      }\n    });\n\n  // Resolves with true if successful, or false if storage is unavailable. Never rejects.\n  store.saveFlags = flags => {\n    const data = utils.extend({}, flags, { $schema: 1 });\n    return storage.set(getFlagsKey(), JSON.stringify(data));\n  };\n\n  // Resolves with true if successful, or false if storage is unavailable. Never rejects.\n  store.clearFlags = () => storage.clear(getFlagsKey());\n\n  return store;\n}\n\nmodule.exports = PersistentFlagStore;\n","const { commonBasicLogger } = require('launchdarkly-js-sdk-common');\n\nfunction basicLogger(options) {\n  return commonBasicLogger({ destination: console.log, ...options });\n}\n\nmodule.exports = {\n  basicLogger,\n};\n","function isSyncXhrSupported() {\n  // This is temporary logic to disable synchronous XHR in Chrome 73 and above. In all other browsers,\n  // we will assume it is supported. See https://github.com/launchdarkly/js-client-sdk/issues/147\n  const userAgent = window.navigator && window.navigator.userAgent;\n  if (userAgent) {\n    const chromeMatch = userAgent.match(/Chrom(e|ium)\\/([0-9]+)\\./);\n    if (chromeMatch) {\n      const version = parseInt(chromeMatch[2], 10);\n      return version < 73;\n    }\n  }\n  return true;\n}\n\nconst emptyResult = { promise: Promise.resolve({ status: 200, header: () => null, body: null }) };\n\nexport default function newHttpRequest(method, url, headers, body, pageIsClosing) {\n  if (pageIsClosing) {\n    // When the page is about to close, we have to use synchronous XHR (until we migrate to sendBeacon).\n    // But not all browsers support this.\n    if (!isSyncXhrSupported()) {\n      return emptyResult;\n      // Note that we return a fake success response, because we don't want the request to be retried in this case.\n    }\n  }\n\n  const xhr = new window.XMLHttpRequest();\n  xhr.open(method, url, !pageIsClosing);\n  for (const key in headers || {}) {\n    if (Object.prototype.hasOwnProperty.call(headers, key)) {\n      xhr.setRequestHeader(key, headers[key]);\n    }\n  }\n  if (pageIsClosing) {\n    try {\n      xhr.send(body); // We specified synchronous mode when we called xhr.open\n    } catch (e) {\n      // do nothing intentionally to suppress noise for now\n    }\n    return emptyResult; // Again, we never want a request to be retried in this case, so we must say it succeeded.\n  } else {\n    let cancelled;\n    const p = new Promise((resolve, reject) => {\n      xhr.addEventListener('load', () => {\n        if (cancelled) {\n          return;\n        }\n        resolve({\n          status: xhr.status,\n          header: (key) => xhr.getResponseHeader(key),\n          body: xhr.responseText,\n        });\n      });\n      xhr.addEventListener('error', () => {\n        if (cancelled) {\n          return;\n        }\n        reject(new Error());\n      });\n      xhr.send(body);\n    });\n    const cancel = () => {\n      cancelled = true;\n      xhr.abort();\n    };\n    return { promise: p, cancel: cancel };\n  }\n}\n","'use strict';\n\nmodule.exports = string => {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a \\unnnn escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n};\n","import escapeStringRegexp from 'escape-string-regexp';\n\nexport function doesUrlMatch(matcher, href, search, hash) {\n  const keepHash = (matcher.kind === 'substring' || matcher.kind === 'regex') && hash.includes('/');\n  const canonicalUrl = (keepHash ? href : href.replace(hash, '')).replace(search, '');\n\n  let regex;\n  let testUrl;\n\n  switch (matcher.kind) {\n    case 'exact':\n      testUrl = href;\n      regex = new RegExp('^' + escapeStringRegexp(matcher.url) + '/?$');\n      break;\n    case 'canonical':\n      testUrl = canonicalUrl;\n      regex = new RegExp('^' + escapeStringRegexp(matcher.url) + '/?$');\n      break;\n    case 'substring':\n      testUrl = canonicalUrl;\n      regex = new RegExp('.*' + escapeStringRegexp(matcher.substring) + '.*$');\n      break;\n    case 'regex':\n      testUrl = canonicalUrl;\n      regex = new RegExp(matcher.pattern);\n      break;\n    default:\n      return false;\n  }\n  return regex.test(testUrl);\n}\n\nfunction findGoalsForClick(event, clickGoals) {\n  const matches = [];\n\n  for (let i = 0; i < clickGoals.length; i++) {\n    let target = event.target;\n    const goal = clickGoals[i];\n    const selector = goal.selector;\n    const elements = document.querySelectorAll(selector);\n    while (target && elements.length > 0) {\n      for (let j = 0; j < elements.length; j++) {\n        if (target === elements[j]) {\n          matches.push(goal);\n        }\n      }\n      target = target.parentNode;\n    }\n  }\n\n  return matches;\n}\n\nexport default function GoalTracker(goals, onEvent) {\n  const tracker = {};\n  let listenerFn = null;\n\n  const clickGoals = [];\n\n  for (let i = 0; i < goals.length; i++) {\n    const goal = goals[i];\n    const urls = goal.urls || [];\n\n    for (let j = 0; j < urls.length; j++) {\n      if (doesUrlMatch(urls[j], window.location.href, window.location.search, window.location.hash)) {\n        if (goal.kind === 'pageview') {\n          onEvent('pageview', goal);\n        } else {\n          clickGoals.push(goal);\n          onEvent('click_pageview', goal);\n        }\n        break;\n      }\n    }\n  }\n\n  if (clickGoals.length > 0) {\n    listenerFn = function (event) {\n      const goals = findGoalsForClick(event, clickGoals);\n      for (let i = 0; i < goals.length; i++) {\n        onEvent('click', goals[i]);\n      }\n    };\n\n    document.addEventListener('click', listenerFn);\n  }\n\n  tracker.dispose = function () {\n    document.removeEventListener('click', listenerFn);\n  };\n\n  return tracker;\n}\n","import * as common from 'launchdarkly-js-sdk-common';\nimport GoalTracker from './GoalTracker';\n\nconst locationWatcherInterval = 300;\n\nexport default function GoalManager(clientVars, readyCallback) {\n  let goals;\n  let goalTracker;\n\n  const ret = {};\n\n  function getGoalsPath() {\n    return '/sdk/goals/' + clientVars.getEnvironmentId();\n  }\n\n  function refreshGoalTracker() {\n    if (goalTracker) {\n      goalTracker.dispose();\n    }\n    if (goals && goals.length) {\n      goalTracker = GoalTracker(goals, sendGoalEvent);\n    }\n  }\n\n  function sendGoalEvent(kind, goal) {\n    const context = clientVars.ident.getContext();\n    const event = {\n      kind: kind,\n      key: goal.key,\n      data: null,\n      url: window.location.href,\n      creationDate: new Date().getTime(),\n      context: context,\n    };\n\n    if (kind === 'click') {\n      event.selector = goal.selector;\n    }\n\n    return clientVars.enqueueEvent(event);\n  }\n\n  function watchLocation(interval, callback) {\n    let previousUrl = window.location.href;\n    let currentUrl;\n\n    function checkUrl() {\n      currentUrl = window.location.href;\n\n      if (currentUrl !== previousUrl) {\n        previousUrl = currentUrl;\n        callback();\n      }\n    }\n\n    function poll(fn, interval) {\n      fn();\n      setTimeout(() => {\n        poll(fn, interval);\n      }, interval);\n    }\n\n    poll(checkUrl, interval);\n\n    if (window.history && window.history.pushState) {\n      window.addEventListener('popstate', checkUrl);\n    } else {\n      window.addEventListener('hashchange', checkUrl);\n    }\n  }\n\n  clientVars.requestor\n    .fetchJSON(getGoalsPath())\n    .then((g) => {\n      if (g && g.length > 0) {\n        goals = g;\n        goalTracker = GoalTracker(goals, sendGoalEvent);\n        watchLocation(locationWatcherInterval, refreshGoalTracker);\n      }\n      readyCallback();\n    })\n    .catch((err) => {\n      clientVars.emitter.maybeReportError(\n        new common.errors.LDUnexpectedResponseError('Error fetching goals: ' + (err && err.message) ? err.message : err)\n      );\n      readyCallback();\n    });\n\n  return ret;\n}\n","import newHttpRequest from './httpRequest';\n\nexport default function makeBrowserPlatform(options) {\n  const ret = {\n    userAgentHeaderName: 'X-LaunchDarkly-User-Agent',\n  };\n\n  ret.synchronousFlush = false; // this will be set to true by index.js if the page is hidden\n\n  // XMLHttpRequest may not exist if we're running in a server-side rendering context\n  if (window.XMLHttpRequest) {\n    const disableSyncFlush = options && options.disableSyncEventPost;\n    ret.httpRequest = (method, url, headers, body) => {\n      const syncFlush = ret.synchronousFlush & !disableSyncFlush;\n      ret.synchronousFlush = false;\n      return newHttpRequest(method, url, headers, body, syncFlush);\n    };\n  }\n\n  let hasCors;\n  ret.httpAllowsPost = () => {\n    // We compute this lazily because calling XMLHttpRequest() at initialization time can disrupt tests\n    if (hasCors === undefined) {\n      hasCors = window.XMLHttpRequest ? 'withCredentials' in new window.XMLHttpRequest() : false;\n    }\n    return hasCors;\n  };\n\n  // Image-based mechanism for sending events if POST isn't available\n  ret.httpFallbackPing = (url) => {\n    const img = new window.Image();\n    img.src = url;\n  };\n\n  const eventUrlTransformer = options && options.eventUrlTransformer;\n  ret.getCurrentUrl = () => (eventUrlTransformer ? eventUrlTransformer(window.location.href) : window.location.href);\n\n  ret.isDoNotTrack = () => {\n    let flag;\n    if (window.navigator && window.navigator.doNotTrack !== undefined) {\n      flag = window.navigator.doNotTrack; // FF, Chrome\n    } else if (window.navigator && window.navigator.msDoNotTrack !== undefined) {\n      flag = window.navigator.msDoNotTrack; // IE 9/10\n    } else {\n      flag = window.doNotTrack; // IE 11+, Safari\n    }\n    return flag === 1 || flag === true || flag === '1' || flag === 'yes';\n  };\n\n  try {\n    if (window.localStorage) {\n      ret.localStorage = {\n        get: (key) =>\n          new Promise((resolve) => {\n            resolve(window.localStorage.getItem(key));\n          }),\n        set: (key, value) =>\n          new Promise((resolve) => {\n            window.localStorage.setItem(key, value);\n            resolve();\n          }),\n        clear: (key) =>\n          new Promise((resolve) => {\n            window.localStorage.removeItem(key);\n            resolve();\n          }),\n      };\n    }\n  } catch (e) {\n    // In some browsers (such as Chrome), even looking at window.localStorage at all will cause a\n    // security error if the feature is disabled.\n    ret.localStorage = null;\n  }\n\n  // The browser built-in EventSource implementations do not support setting the method used for\n  // the request. When useReport is true, we ensure sending the user in the body of a REPORT request\n  // rather than in the URL path. If a polyfill for EventSource that supports setting the request\n  // method is provided (currently, launchdarkly-eventsource is the only polyfill that both supports\n  // it and gives us a way to *know* that it supports it), we use the polyfill to connect to a flag\n  // stream that will provide evaluated flags for the specific user. Otherwise, when useReport is\n  // true, we fall back to a generic  'ping' stream that informs the SDK to make a separate REPORT\n  // request for the user's flag evaluations whenever the flag definitions have been updated.\n  let eventSourceConstructor;\n  const useReport = options && options.useReport;\n  if (\n    useReport &&\n    typeof window.EventSourcePolyfill === 'function' &&\n    window.EventSourcePolyfill.supportedOptions &&\n    window.EventSourcePolyfill.supportedOptions.method\n  ) {\n    ret.eventSourceAllowsReport = true;\n    eventSourceConstructor = window.EventSourcePolyfill;\n  } else {\n    ret.eventSourceAllowsReport = false;\n    eventSourceConstructor = window.EventSource;\n  }\n\n  // If EventSource does not exist, the absence of eventSourceFactory will make us not try to open streams\n  if (window.EventSource) {\n    const timeoutMillis = 300000; // this is only used by polyfills - see below\n\n    ret.eventSourceFactory = (url, options) => {\n      // The standard EventSource constructor doesn't take any options, just a URL. However, some\n      // EventSource polyfills allow us to specify a timeout interval, and in some cases they will\n      // default to a too-short timeout if we don't specify one. So, here, we are setting the\n      // timeout properties that are used by several popular polyfills.\n      // Also, the skipDefaultHeaders property (if supported) tells the polyfill not to add the\n      // Cache-Control header that can cause CORS problems in browsers.\n      // See: https://github.com/launchdarkly/js-eventsource\n      const defaultOptions = {\n        heartbeatTimeout: timeoutMillis,\n        silentTimeout: timeoutMillis,\n        skipDefaultHeaders: true,\n      };\n\n      const esOptions = { ...defaultOptions, ...options };\n\n      return new eventSourceConstructor(url, esOptions);\n    };\n\n    ret.eventSourceIsActive = (es) =>\n      es.readyState === window.EventSource.OPEN || es.readyState === window.EventSource.CONNECTING;\n  }\n\n  ret.userAgent = 'JSClient';\n  ret.version = VERSION;\n\n  ret.diagnosticSdkData = {\n    name: 'js-client-sdk',\n    version: VERSION,\n  };\n\n  ret.diagnosticPlatformData = {\n    name: 'JS',\n  };\n\n  ret.diagnosticUseCombinedEvent = true; // the browser SDK uses the \"diagnostic-combined\" event format\n\n  return ret;\n}\n","function resolveInitializer(modules, moduleName) {\n    let module = modules.load(moduleName);\n    if (!module) {\n        throw new Error(moduleName + ' must export an initializer.');\n    }\n    let initializer = module.default;\n    if (!initializer) {\n        throw new Error(moduleName + ' must have a default export');\n    }\n    if (!initializer.name) {\n        initializer.name = moduleName.slice(moduleName.lastIndexOf('/') + 1);\n    }\n    return initializer;\n}\nfunction registerInitializers(app, modules, moduleNames) {\n    for (let moduleName of moduleNames) {\n        app.initializer(resolveInitializer(modules, moduleName));\n    }\n}\nfunction registerInstanceInitializers(app, modules, moduleNames) {\n    for (let moduleName of moduleNames) {\n        app.instanceInitializer(resolveInitializer(modules, moduleName));\n    }\n}\n/**\n * Configure your application as it boots\n */\nexport default function loadInitializers(app, prefix, explicitModules) {\n    var initializerPrefix = prefix + '/initializers/';\n    var instanceInitializerPrefix = prefix + '/instance-initializers/';\n    var initializers = [];\n    var instanceInitializers = [];\n    let modules;\n    if (explicitModules) {\n        modules = {\n            names() {\n                return Object.keys(explicitModules);\n            },\n            load(name) {\n                return explicitModules[name];\n            }\n        };\n    }\n    else {\n        modules = {\n            names() {\n                let requirejs = globalThis.requirejs;\n                if (!requirejs || !requirejs._eak_seen) {\n                    throw new Error(\"No global AMD loader found. To use loadInitializers without a global AMD loader you must provide explicit modules\");\n                }\n                return Object.keys(requirejs._eak_seen);\n            },\n            load(name) {\n                return globalThis.require(name, null, null, true);\n            }\n        };\n    }\n    for (let moduleName of modules.names()) {\n        if (moduleName.startsWith(initializerPrefix) && !moduleName.endsWith('-test')) {\n            initializers.push(moduleName);\n        }\n        else if (moduleName.startsWith(instanceInitializerPrefix) && !moduleName.endsWith('-test')) {\n            instanceInitializers.push(moduleName);\n        }\n    }\n    registerInitializers(app, modules, initializers);\n    registerInstanceInitializers(app, modules, instanceInitializers);\n}\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(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}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(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\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n  ownKeys = Object.getOwnPropertyNames || function (o) {\n    var ar = [];\n    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n    return ar;\n  };\n  return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n  if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n      return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n          return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n      });\n  }\n  return path;\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __esDecorate,\n  __runInitializers,\n  __propKey,\n  __setFunctionName,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n  __rewriteRelativeImportExtension,\n};\n","import type { RuleSet } from \"./types\";\n\nexport const plurals: RuleSet[\"plurals\"] = [\n  [/$/, \"s\"],\n  [/s$/i, \"s\"],\n  [/^(ax|test)is$/i, \"$1es\"],\n  [/(octop|vir)us$/i, \"$1i\"],\n  [/(octop|vir)i$/i, \"$1i\"],\n  [/(alias|status|bonus)$/i, \"$1es\"],\n  [/(bu)s$/i, \"$1ses\"],\n  [/(buffal|tomat)o$/i, \"$1oes\"],\n  [/([ti])um$/i, \"$1a\"],\n  [/([ti])a$/i, \"$1a\"],\n  [/sis$/i, \"ses\"],\n  [/(?:([^f])fe|([lr])f)$/i, \"$1$2ves\"],\n  [/(hive)$/i, \"$1s\"],\n  [/([^aeiouy]|qu)y$/i, \"$1ies\"],\n  [/(x|ch|ss|sh)$/i, \"$1es\"],\n  [/(matr|vert|ind)(?:ix|ex)$/i, \"$1ices\"],\n  [/^(m|l)ouse$/i, \"$1ice\"],\n  [/^(m|l)ice$/i, \"$1ice\"],\n  [/^(ox)$/i, \"$1en\"],\n  [/^(oxen)$/i, \"$1\"],\n  [/(quiz)$/i, \"$1zes\"],\n];\n\nexport const singular: RuleSet[\"singular\"] = [\n  [/s$/i, \"\"],\n  [/(ss)$/i, \"$1\"],\n  [/(n)ews$/i, \"$1ews\"],\n  [/([ti])a$/i, \"$1um\"],\n  [\n    /((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(sis|ses)$/i,\n    \"$1sis\",\n  ],\n  [/(^analy)(sis|ses)$/i, \"$1sis\"],\n  [/([^f])ves$/i, \"$1fe\"],\n  [/(hive)s$/i, \"$1\"],\n  [/(tive)s$/i, \"$1\"],\n  [/([lr])ves$/i, \"$1f\"],\n  [/([^aeiouy]|qu)ies$/i, \"$1y\"],\n  [/(s)eries$/i, \"$1eries\"],\n  [/(m)ovies$/i, \"$1ovie\"],\n  [/(x|ch|ss|sh)es$/i, \"$1\"],\n  [/^(m|l)ice$/i, \"$1ouse\"],\n  [/(bus)(es)?$/i, \"$1\"],\n  [/(o)es$/i, \"$1\"],\n  [/(shoe)s$/i, \"$1\"],\n  [/(cris|test)(is|es)$/i, \"$1is\"],\n  [/^(a)x[ie]s$/i, \"$1xis\"],\n  [/(octop|vir)(us|i)$/i, \"$1us\"],\n  [/(alias|status|bonus)(es)?$/i, \"$1\"],\n  [/^(ox)en/i, \"$1\"],\n  [/(vert|ind)ices$/i, \"$1ex\"],\n  [/(matr)ices$/i, \"$1ix\"],\n  [/(quiz)zes$/i, \"$1\"],\n  [/(database)s$/i, \"$1\"],\n];\n\nexport const irregularPairs: RuleSet[\"irregularPairs\"] = [\n  [\"person\", \"people\"],\n  [\"man\", \"men\"],\n  [\"child\", \"children\"],\n  [\"sex\", \"sexes\"],\n  [\"move\", \"moves\"],\n  [\"cow\", \"kine\"],\n  [\"zombie\", \"zombies\"],\n];\n\nexport const uncountable: RuleSet[\"uncountable\"] = [\n  \"equipment\",\n  \"information\",\n  \"rice\",\n  \"money\",\n  \"species\",\n  \"series\",\n  \"fish\",\n  \"sheep\",\n  \"jeans\",\n  \"police\",\n];\n\nexport default { uncountable, irregularPairs, singular, plurals };\n","/* eslint-disable prefer-rest-params */\nimport { capitalCase as capitalize } from \"capital-case\";\n\nimport defaultRules from \"./inflections\";\n\nimport type { RuleSet } from \"./types\";\n\nconst BLANK_REGEX = /^\\s*$/;\nconst LAST_WORD_DASHED_REGEX = /([\\w/-]+[_/\\s-])([a-z\\d]+$)/;\nconst LAST_WORD_CAMELIZED_REGEX = /([\\w/\\s-]+)([A-Z][a-z\\d]*$)/;\nconst CAMELIZED_REGEX = /[A-Z][a-z\\d]*$/;\n\nfunction loadUncountable(rules: ResolvedRuleCache, uncountable: string[]) {\n  if (!uncountable) return;\n  if (!Array.isArray(uncountable)) return;\n\n  for (let word of uncountable) {\n    rules.uncountable[word.toLowerCase()] = true;\n  }\n}\n\ninterface ResolvedRuleCache\n  extends Omit<RuleSet, \"uncountable\" | \"irregularPairs\"> {\n  uncountable: { [word: string]: boolean };\n  irregular: { [singular: string]: string };\n  irregularInverse: { [plural: string]: string };\n}\n\nfunction loadIrregular(\n  rules: ResolvedRuleCache,\n  irregularPairs: RuleSet[\"irregularPairs\"],\n) {\n  if (!irregularPairs) return;\n  if (!Array.isArray(irregularPairs)) return;\n\n  for (let [singular, plural] of irregularPairs) {\n    //pluralizing\n    rules.irregular[singular.toLowerCase()] = plural;\n    rules.irregular[plural.toLowerCase()] = plural;\n\n    //singularizing\n    rules.irregularInverse[singular.toLowerCase()] = singular;\n    rules.irregularInverse[plural.toLowerCase()] = singular;\n  }\n}\n\n/**\n  Inflector.Ember provides a mechanism for supplying inflection rules for your\n  application. Ember includes a default set of inflection rules, and provides an\n  API for providing additional rules.\n\n  Examples:\n\n  Creating an inflector with no rules.\n\n  ```js\n  var inflector = new Ember.Inflector();\n  ```\n\n  Creating an inflector with the default ember ruleset.\n\n  ```js\n  var inflector = new Ember.Inflector(Ember.Inflector.defaultRules);\n\n  inflector.pluralize('cow'); //=> 'kine'\n  inflector.singularize('kine'); //=> 'cow'\n  ```\n\n  Creating an inflector and adding rules later.\n\n  ```javascript\n  var inflector = Ember.Inflector.inflector;\n\n  inflector.pluralize('advice'); // => 'advices'\n  inflector.uncountable('advice');\n  inflector.pluralize('advice'); // => 'advice'\n\n  inflector.pluralize('formula'); // => 'formulas'\n  inflector.irregular('formula', 'formulae');\n  inflector.pluralize('formula'); // => 'formulae'\n\n  // you would not need to add these as they are the default rules\n  inflector.plural(/$/, 's');\n  inflector.singular(/s$/i, '');\n  ```\n\n  Creating an inflector with a nondefault ruleset.\n\n  ```javascript\n  var rules = {\n    plurals:  [\n      [ /$/, 's' ]\n    ],\n    singular: [\n      [ /\\s$/, '' ]\n    ],\n    irregularPairs: [\n      [ 'cow', 'kine' ]\n    ],\n    uncountable: [ 'fish' ]\n  };\n\n  var inflector = new Ember.Inflector(rules);\n  ```\n*/\nexport class Inflector {\n  static defaultRules = defaultRules;\n  static inflector: Inflector;\n\n  static {\n    this.inflector = new Inflector(defaultRules);\n  }\n\n  rules: ResolvedRuleCache;\n\n  #cacheUsed = false;\n  #sCache: { [word: string]: string } | null = null;\n  #pCache: { [cacheKey: string]: string } | null = null;\n\n  constructor(ruleSet?: Partial<RuleSet>) {\n    let normalizedRuleSet: Partial<RuleSet> = ruleSet || {};\n\n    normalizedRuleSet.uncountable = normalizedRuleSet.uncountable || [];\n    normalizedRuleSet.irregularPairs = normalizedRuleSet.irregularPairs || [];\n\n    this.rules = {\n      plurals: normalizedRuleSet.plurals || [],\n      singular: normalizedRuleSet.singular || [],\n      irregular: makeDictionary(),\n      irregularInverse: makeDictionary(),\n      uncountable: makeDictionary(),\n    };\n\n    loadUncountable(this.rules, normalizedRuleSet.uncountable);\n    loadIrregular(this.rules, normalizedRuleSet.irregularPairs);\n\n    this.enableCache();\n  }\n  /**\n    @public\n\n    As inflections can be costly, and commonly the same subset of words are repeatedly\n    inflected an optional cache is provided.\n\n    @method enableCache\n  */\n  enableCache() {\n    this.purgeCache();\n  }\n\n  /**\n    @public\n\n    @method purgeCache\n  */\n  purgeCache() {\n    this.#cacheUsed = false;\n    this.#sCache = makeDictionary();\n    this.#pCache = makeDictionary();\n  }\n\n  /**\n    @public\n    disable caching\n\n    @method disableCache;\n  */\n  disableCache() {\n    this.#sCache = null;\n    this.#pCache = null;\n  }\n\n  /**\n   * adds to the list of plural rules, clearing the cache\n   */\n  plural(regex: RegExp, string: string) {\n    if (this.#cacheUsed) {\n      this.purgeCache();\n    }\n\n    this.rules.plurals.push([regex, string.toLowerCase()]);\n  }\n\n  /**\n   * adds to the list of singular rules, clearing the cache\n   */\n  singular(regex: RegExp, string: string) {\n    if (this.#cacheUsed) {\n      this.purgeCache();\n    }\n\n    this.rules.singular.push([regex, string.toLowerCase()]);\n  }\n\n  /**\n   * adds to the list of uncountable rules, clearing the cache\n   */\n  uncountable(string: string) {\n    if (this.#cacheUsed) {\n      this.purgeCache();\n    }\n\n    loadUncountable(this.rules, [string.toLowerCase()]);\n  }\n\n  /**\n   * adds to the list of irregular rules, clearing the cache\n   */\n  irregular(singular: string, plural: string) {\n    if (this.#cacheUsed) {\n      this.purgeCache();\n    }\n\n    loadIrregular(this.rules, [[singular, plural]]);\n  }\n\n  pluralize(word: string): string;\n  pluralize(\n    count: number,\n    word: string,\n    options?: { withoutCount?: boolean },\n  ): string;\n  pluralize(...args: unknown[]) {\n    let [wordOrCount, word, options] = args as\n      | [string]\n      | [count: number, word: string, options?: { withoutCount?: boolean }];\n\n    if (this.#pCache) {\n      this.#cacheUsed = true;\n\n      let cacheKey = [wordOrCount, word, options?.withoutCount].join(\"\");\n\n      return (\n        this.#pCache[cacheKey] ||\n        (this.#pCache[cacheKey] = this.#pluralize(wordOrCount, word, options))\n      );\n    }\n\n    // eslint-disable-next-line prefer-rest-params\n    return this.#pluralize(wordOrCount, word, options);\n  }\n\n  #pluralize(\n    wordOrCount: string | number,\n    word?: string,\n    options?: { withoutCount?: boolean },\n  ) {\n    if (word === undefined) {\n      return this.inflect(\n        wordOrCount,\n        this.rules.plurals,\n        this.rules.irregular,\n      );\n    }\n\n    let count =\n      typeof wordOrCount === \"number\" ? wordOrCount : parseFloat(wordOrCount);\n\n    if (count !== 1) {\n      word = this.inflect(word, this.rules.plurals, this.rules.irregular);\n    }\n\n    return options?.withoutCount ? word : `${wordOrCount} ${word}`;\n  }\n\n  singularize(word: string) {\n    if (this.#sCache) {\n      this.#cacheUsed = true;\n\n      return (\n        this.#sCache[word] || (this.#sCache[word] = this.#singularize(word))\n      );\n    }\n\n    return this.#singularize(word);\n  }\n\n  #singularize(word: string) {\n    return this.inflect(word, this.rules.singular, this.rules.irregularInverse);\n  }\n\n  inflect(\n    word: string | number,\n    typeRules: [string | RegExp, string][],\n    irregular: { [rule: string]: string },\n  ) {\n    let inflection,\n      substitution,\n      result,\n      lowercase,\n      wordSplit,\n      lastWord,\n      isBlank,\n      isCamelized,\n      rule,\n      isUncountable;\n\n    word = String(word);\n\n    isBlank = !word || BLANK_REGEX.test(word);\n    isCamelized = CAMELIZED_REGEX.test(word);\n\n    if (isBlank) {\n      return word;\n    }\n\n    lowercase = word.toLowerCase();\n    wordSplit =\n      LAST_WORD_DASHED_REGEX.exec(word) || LAST_WORD_CAMELIZED_REGEX.exec(word);\n\n    if (wordSplit) {\n      lastWord = wordSplit[2]?.toLowerCase();\n    }\n\n    isUncountable =\n      this.rules.uncountable[lowercase] ||\n      (lastWord && this.rules.uncountable[lastWord]);\n\n    if (isUncountable) {\n      return word;\n    }\n\n    for (rule in irregular) {\n      if (lowercase.match(rule + \"$\")) {\n        substitution = irregular[rule];\n\n        if (!substitution) continue;\n\n        if (isCamelized && lastWord && irregular[lastWord]) {\n          substitution = capitalize(substitution);\n          rule = capitalize(rule);\n        }\n\n        return word.replace(new RegExp(rule, \"i\"), substitution);\n      }\n    }\n\n    for (let i = typeRules.length, min = 0; i > min; i--) {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      inflection = typeRules[i - 1]!;\n      rule = inflection[0];\n\n      if (!(rule instanceof RegExp)) continue;\n\n      if (rule.test(word)) {\n        break;\n      }\n    }\n\n    inflection = inflection || [];\n\n    rule = inflection[0];\n    substitution = inflection[1];\n\n    result = word.replace(rule, substitution);\n\n    return result;\n  }\n}\n\nfunction makeDictionary(): {} {\n  let cache = Object.create(null);\n\n  cache[\"_dict\"] = null;\n  delete cache[\"_dict\"];\n\n  return cache;\n}\n","import { Inflector } from \"./inflector\";\n\nimport type { Pluralize, PluralizeWithCount } from \"./types\";\n\nexport function pluralize(word: string): string;\nexport function pluralize(\n  count: number,\n  word: string,\n  options?: { withoutCount?: boolean },\n): string;\n\nexport function pluralize(\n  ...args: Parameters<Pluralize> | Parameters<PluralizeWithCount>\n): string {\n  if (args.length === 1) {\n    return Inflector.inflector.pluralize(args[0]);\n  }\n\n  return Inflector.inflector.pluralize(...args);\n}\n\nexport function singularize(word: string): string {\n  return Inflector.inflector.singularize(word);\n}\n","var toString = Object.prototype.toString;\n\nfunction isFunc(obj) {\n  return toString.call(obj) === \"[object Function]\";\n}\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\nfunction icPart(str) {\n  return str.split(\"\").map(function (c) {\n    return \"(?:\" + c.toUpperCase() + \"|\" + c.toLowerCase() + \")\";\n  }).join(\"\");\n}\n\nfunction remove(arr, elem) {\n  for (var i = arr.length - 1; i >= 0; i--) {\n    if (arr[i] === elem) {\n      Array.prototype.splice.call(arr, i, 1);\n    }\n  }\n}\n\nfunction hasProp(obj, key) {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nvar instances = {};\n\nvar Inflector = function () {\n  createClass(Inflector, null, [{\n    key: \"getInstance\",\n    value: function getInstance(locale) {\n      instances[locale] = instances[locale] || new Inflector();\n      return instances[locale];\n    }\n  }]);\n\n  function Inflector() {\n    classCallCheck(this, Inflector);\n\n    this.plurals = [];\n    this.singulars = [];\n    this.uncountables = [];\n    this.humans = [];\n    this.acronyms = {};\n    this.acronymRegex = /(?=a)b/;\n  }\n\n  createClass(Inflector, [{\n    key: \"acronym\",\n    value: function acronym(word) {\n      this.acronyms[word.toLowerCase()] = word;\n\n      var values = [];\n\n      for (var key in this.acronyms) {\n        if (hasProp(this.acronyms, key)) {\n          values.push(this.acronyms[key]);\n        }\n      }\n\n      this.acronymRegex = new RegExp(values.join(\"|\"));\n    }\n  }, {\n    key: \"plural\",\n    value: function plural(rule, replacement) {\n      if (typeof rule === \"string\") {\n        remove(this.uncountables, rule);\n      }\n\n      remove(this.uncountables, replacement);\n      this.plurals.unshift([rule, replacement]);\n    }\n  }, {\n    key: \"singular\",\n    value: function singular(rule, replacement) {\n      if (typeof rule === \"string\") {\n        remove(this.uncountables, rule);\n      }\n\n      remove(this.uncountables, replacement);\n      this.singulars.unshift([rule, replacement]);\n    }\n  }, {\n    key: \"irregular\",\n    value: function irregular(singular, plural) {\n      remove(this.uncountables, singular);\n      remove(this.uncountables, plural);\n\n      var s0 = singular[0];\n      var sRest = singular.substr(1);\n\n      var p0 = plural[0];\n      var pRest = plural.substr(1);\n\n      if (s0.toUpperCase() === p0.toUpperCase()) {\n        this.plural(new RegExp(\"(\" + s0 + \")\" + sRest + \"$\", \"i\"), \"$1\" + pRest);\n        this.plural(new RegExp(\"(\" + p0 + \")\" + pRest + \"$\", \"i\"), \"$1\" + pRest);\n\n        this.singular(new RegExp(\"(\" + s0 + \")\" + sRest + \"$\", \"i\"), \"$1\" + sRest);\n        this.singular(new RegExp(\"(\" + p0 + \")\" + pRest + \"$\", \"i\"), \"$1\" + sRest);\n      } else {\n        var sRestIC = icPart(sRest);\n        var pRestIC = icPart(pRest);\n\n        this.plural(new RegExp(s0.toUpperCase() + sRestIC + \"$\"), p0.toUpperCase() + pRest);\n        this.plural(new RegExp(s0.toLowerCase() + sRestIC + \"$\"), p0.toLowerCase() + pRest);\n        this.plural(new RegExp(p0.toUpperCase() + pRestIC + \"$\"), p0.toUpperCase() + pRest);\n        this.plural(new RegExp(p0.toLowerCase() + pRestIC + \"$\"), p0.toLowerCase() + pRest);\n\n        this.singular(new RegExp(s0.toUpperCase() + sRestIC + \"$\"), s0.toUpperCase() + sRest);\n        this.singular(new RegExp(s0.toLowerCase() + sRestIC + \"$\"), s0.toLowerCase() + sRest);\n        this.singular(new RegExp(p0.toUpperCase() + pRestIC + \"$\"), s0.toUpperCase() + sRest);\n        this.singular(new RegExp(p0.toLowerCase() + pRestIC + \"$\"), s0.toLowerCase() + sRest);\n      }\n    }\n  }, {\n    key: \"uncountable\",\n    value: function uncountable() {\n      for (var _len = arguments.length, words = Array(_len), _key = 0; _key < _len; _key++) {\n        words[_key] = arguments[_key];\n      }\n\n      this.uncountables = this.uncountables.concat(words);\n    }\n  }, {\n    key: \"human\",\n    value: function human(rule, replacement) {\n      this.humans.unshift([rule, replacement]);\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      var scope = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"all\";\n\n      if (scope === \"all\") {\n        this.plurals = [];\n        this.singulars = [];\n        this.uncountables = [];\n        this.humans = [];\n      } else {\n        this[scope] = [];\n      }\n    }\n  }]);\n  return Inflector;\n}();\n\nfunction en(inflector) {\n  inflector.plural(/$/, \"s\");\n  inflector.plural(/s$/i, \"s\");\n  inflector.plural(/^(ax|test)is$/i, \"$1es\");\n  inflector.plural(/(octop|vir)us$/i, \"$1i\");\n  inflector.plural(/(octop|vir)i$/i, \"$1i\");\n  inflector.plural(/(alias|status)$/i, \"$1es\");\n  inflector.plural(/(bu)s$/i, \"$1ses\");\n  inflector.plural(/(buffal|tomat)o$/i, \"$1oes\");\n  inflector.plural(/([ti])um$/i, \"$1a\");\n  inflector.plural(/([ti])a$/i, \"$1a\");\n  inflector.plural(/sis$/i, \"ses\");\n  inflector.plural(/(?:([^f])fe|([lr])f)$/i, \"$1$2ves\");\n  inflector.plural(/(hive)$/i, \"$1s\");\n  inflector.plural(/([^aeiouy]|qu)y$/i, \"$1ies\");\n  inflector.plural(/(x|ch|ss|sh)$/i, \"$1es\");\n  inflector.plural(/(matr|vert|ind)(?:ix|ex)$/i, \"$1ices\");\n  inflector.plural(/^(m|l)ouse$/i, \"$1ice\");\n  inflector.plural(/^(m|l)ice$/i, \"$1ice\");\n  inflector.plural(/^(ox)$/i, \"$1en\");\n  inflector.plural(/^(oxen)$/i, \"$1\");\n  inflector.plural(/(quiz)$/i, \"$1zes\");\n\n  inflector.singular(/s$/i, \"\");\n  inflector.singular(/(ss)$/i, \"$1\");\n  inflector.singular(/(n)ews$/i, \"$1ews\");\n  inflector.singular(/([ti])a$/i, \"$1um\");\n  inflector.singular(/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(sis|ses)$/i, \"$1sis\");\n  inflector.singular(/(^analy)(sis|ses)$/i, \"$1sis\");\n  inflector.singular(/([^f])ves$/i, \"$1fe\");\n  inflector.singular(/(hive)s$/i, \"$1\");\n  inflector.singular(/(tive)s$/i, \"$1\");\n  inflector.singular(/([lr])ves$/i, \"$1f\");\n  inflector.singular(/([^aeiouy]|qu)ies$/i, \"$1y\");\n  inflector.singular(/(s)eries$/i, \"$1eries\");\n  inflector.singular(/(m)ovies$/i, \"$1ovie\");\n  inflector.singular(/(x|ch|ss|sh)es$/i, \"$1\");\n  inflector.singular(/^(m|l)ice$/i, \"$1ouse\");\n  inflector.singular(/(bus)(es)?$/i, \"$1\");\n  inflector.singular(/(o)es$/i, \"$1\");\n  inflector.singular(/(shoe)s$/i, \"$1\");\n  inflector.singular(/(cris|test)(is|es)$/i, \"$1is\");\n  inflector.singular(/^(a)x[ie]s$/i, \"$1xis\");\n  inflector.singular(/(octop|vir)(us|i)$/i, \"$1us\");\n  inflector.singular(/(alias|status)(es)?$/i, \"$1\");\n  inflector.singular(/^(ox)en/i, \"$1\");\n  inflector.singular(/(vert|ind)ices$/i, \"$1ex\");\n  inflector.singular(/(matr)ices$/i, \"$1ix\");\n  inflector.singular(/(quiz)zes$/i, \"$1\");\n  inflector.singular(/(database)s$/i, \"$1\");\n\n  inflector.irregular(\"person\", \"people\");\n  inflector.irregular(\"man\", \"men\");\n  inflector.irregular(\"child\", \"children\");\n  inflector.irregular(\"sex\", \"sexes\");\n  inflector.irregular(\"move\", \"moves\");\n  inflector.irregular(\"zombie\", \"zombies\");\n\n  inflector.uncountable(\"equipment\", \"information\", \"rice\", \"money\", \"species\", \"series\", \"fish\", \"sheep\", \"jeans\", \"police\");\n}\n\nvar defaults$1 = {\n  en: en\n};\n\nfunction inflections(locale, fn) {\n  if (isFunc(locale)) {\n    fn = locale;\n    locale = null;\n  }\n\n  locale = locale || \"en\";\n\n  if (fn) {\n    fn(Inflector.getInstance(locale));\n  } else {\n    return Inflector.getInstance(locale);\n  }\n}\n\nfor (var locale in defaults$1) {\n  inflections(locale, defaults$1[locale]);\n}\n\nfunction applyInflections(word, rules) {\n  var result = \"\" + word,\n      rule,\n      regex,\n      replacement;\n\n  if (result.length === 0) {\n    return result;\n  } else {\n    var match = result.toLowerCase().match(/\\b\\w+$/);\n\n    if (match && inflections().uncountables.indexOf(match[0]) > -1) {\n      return result;\n    } else {\n      for (var i = 0, ii = rules.length; i < ii; i++) {\n        rule = rules[i];\n\n        regex = rule[0];\n        replacement = rule[1];\n\n        if (result.match(regex)) {\n          result = result.replace(regex, replacement);\n          break;\n        }\n      }\n\n      return result;\n    }\n  }\n}\n\nfunction pluralize(word) {\n  var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"en\";\n\n  return applyInflections(word, inflections(locale).plurals);\n}\n\nfunction singularize(word) {\n  var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"en\";\n\n  return applyInflections(word, inflections(locale).singulars);\n}\n\nfunction capitalize(str) {\n  var result = str === null || str === undefined ? \"\" : String(str);\n  return result.charAt(0).toUpperCase() + result.slice(1);\n}\n\nfunction camelize(term, uppercaseFirstLetter) {\n  if (uppercaseFirstLetter === null || uppercaseFirstLetter === undefined) {\n    uppercaseFirstLetter = true;\n  }\n\n  var result = \"\" + term;\n\n  if (uppercaseFirstLetter) {\n    result = result.replace(/^[a-z\\d]*/, function (a) {\n      return inflections().acronyms[a] || capitalize(a);\n    });\n  } else {\n    result = result.replace(new RegExp(\"^(?:\" + inflections().acronymRegex.source + \"(?=\\\\b|[A-Z_])|\\\\w)\"), function (a) {\n      return a.toLowerCase();\n    });\n  }\n\n  result = result.replace(/(?:_|(\\/))([a-z\\d]*)/gi, function (match, a, b, idx, string) {\n    a || (a = \"\");\n    return \"\" + a + (inflections().acronyms[b] || capitalize(b));\n  });\n\n  return result;\n}\n\nfunction underscore(camelCasedWord) {\n  var result = \"\" + camelCasedWord;\n\n  result = result.replace(new RegExp(\"(?:([A-Za-z\\\\d])|^)(\" + inflections().acronymRegex.source + \")(?=\\\\b|[^a-z])\", \"g\"), function (match, $1, $2) {\n    return \"\" + ($1 || \"\") + ($1 ? \"_\" : \"\") + $2.toLowerCase();\n  });\n\n  result = result.replace(/([A-Z\\d]+)([A-Z][a-z])/g, \"$1_$2\");\n  result = result.replace(/([a-z\\d])([A-Z])/g, \"$1_$2\");\n  result = result.replace(/-/g, \"_\");\n\n  return result.toLowerCase();\n}\n\nfunction humanize(lowerCaseAndUnderscoredWord, options) {\n  var result = \"\" + lowerCaseAndUnderscoredWord;\n  var humans = inflections().humans;\n  var human = void 0,\n      rule = void 0,\n      replacement = void 0;\n\n  options = options || {};\n\n  if (options.capitalize === null || options.capitalize === undefined) {\n    options.capitalize = true;\n  }\n\n  for (var i = 0, ii = humans.length; i < ii; i++) {\n    human = humans[i];\n    rule = human[0];\n    replacement = human[1];\n\n    if (rule.test && rule.test(result) || result.indexOf(rule) > -1) {\n      result = result.replace(rule, replacement);\n      break;\n    }\n  }\n\n  result = result.replace(/_id$/, \"\");\n  result = result.replace(/_/g, \" \");\n\n  result = result.replace(/([a-z\\d]*)/gi, function (match) {\n    return inflections().acronyms[match] || match.toLowerCase();\n  });\n\n  if (options.capitalize) {\n    result = result.replace(/^\\w/, function (match) {\n      return match.toUpperCase();\n    });\n  }\n\n  return result;\n}\n\nfunction titleize(word) {\n  return humanize(underscore(word)).replace(/(^|[\\s¿/]+)([a-z])/g, function (match, boundary, letter, idx, string) {\n    return match.replace(letter, letter.toUpperCase());\n  });\n}\n\nfunction tableize(className) {\n  return pluralize(underscore(className));\n}\n\nfunction classify(tableName) {\n  return camelize(singularize(tableName.replace(/.*\\./g, \"\")));\n}\n\nfunction dasherize(underscoredWord) {\n  return underscoredWord.replace(/_/g, \"-\");\n}\n\nfunction foreignKey(className) {\n  var separateWithUnderscore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n  return \"\" + underscore(className) + (separateWithUnderscore ? \"_id\" : \"id\");\n}\n\nfunction ordinal(number) {\n  var absNumber = Math.abs(Number(number));\n  var mod100 = absNumber % 100;\n\n  if (mod100 === 11 || mod100 === 12 || mod100 === 13) {\n    return \"th\";\n  } else {\n    switch (absNumber % 10) {\n      case 1:\n        return \"st\";\n      case 2:\n        return \"nd\";\n      case 3:\n        return \"rd\";\n      default:\n        return \"th\";\n    }\n  }\n}\n\nfunction ordinalize(number) {\n  return \"\" + number + ordinal(number);\n}\n\n// prettier-ignore\nvar DEFAULT_APPROXIMATIONS = {\n  'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE',\n  'Ç': 'C', 'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I',\n  'Î': 'I', 'Ï': 'I', 'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O',\n  'Õ': 'O', 'Ö': 'O', '×': 'x', 'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U',\n  'Ü': 'U', 'Ý': 'Y', 'Þ': 'Th', 'ß': 'ss', 'à': 'a', 'á': 'a', 'â': 'a',\n  'ã': 'a', 'ä': 'a', 'å': 'a', 'æ': 'ae', 'ç': 'c', 'è': 'e', 'é': 'e',\n  'ê': 'e', 'ë': 'e', 'ì': 'i', 'í': 'i', 'î': 'i', 'ï': 'i', 'ð': 'd',\n  'ñ': 'n', 'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', 'ö': 'o', 'ø': 'o',\n  'ù': 'u', 'ú': 'u', 'û': 'u', 'ü': 'u', 'ý': 'y', 'þ': 'th', 'ÿ': 'y',\n  'Ā': 'A', 'ā': 'a', 'Ă': 'A', 'ă': 'a', 'Ą': 'A', 'ą': 'a', 'Ć': 'C',\n  'ć': 'c', 'Ĉ': 'C', 'ĉ': 'c', 'Ċ': 'C', 'ċ': 'c', 'Č': 'C', 'č': 'c',\n  'Ď': 'D', 'ď': 'd', 'Đ': 'D', 'đ': 'd', 'Ē': 'E', 'ē': 'e', 'Ĕ': 'E',\n  'ĕ': 'e', 'Ė': 'E', 'ė': 'e', 'Ę': 'E', 'ę': 'e', 'Ě': 'E', 'ě': 'e',\n  'Ĝ': 'G', 'ĝ': 'g', 'Ğ': 'G', 'ğ': 'g', 'Ġ': 'G', 'ġ': 'g', 'Ģ': 'G',\n  'ģ': 'g', 'Ĥ': 'H', 'ĥ': 'h', 'Ħ': 'H', 'ħ': 'h', 'Ĩ': 'I', 'ĩ': 'i',\n  'Ī': 'I', 'ī': 'i', 'Ĭ': 'I', 'ĭ': 'i', 'Į': 'I', 'į': 'i', 'İ': 'I',\n  'ı': 'i', 'Ĳ': 'IJ', 'ĳ': 'ij', 'Ĵ': 'J', 'ĵ': 'j', 'Ķ': 'K', 'ķ': 'k',\n  'ĸ': 'k', 'Ĺ': 'L', 'ĺ': 'l', 'Ļ': 'L', 'ļ': 'l', 'Ľ': 'L', 'ľ': 'l',\n  'Ŀ': 'L', 'ŀ': 'l', 'Ł': 'L', 'ł': 'l', 'Ń': 'N', 'ń': 'n', 'Ņ': 'N',\n  'ņ': 'n', 'Ň': 'N', 'ň': 'n', 'ŉ': '\\'n', 'Ŋ': 'NG', 'ŋ': 'ng',\n  'Ō': 'O', 'ō': 'o', 'Ŏ': 'O', 'ŏ': 'o', 'Ő': 'O', 'ő': 'o', 'Œ': 'OE',\n  'œ': 'oe', 'Ŕ': 'R', 'ŕ': 'r', 'Ŗ': 'R', 'ŗ': 'r', 'Ř': 'R', 'ř': 'r',\n  'Ś': 'S', 'ś': 's', 'Ŝ': 'S', 'ŝ': 's', 'Ş': 'S', 'ş': 's', 'Š': 'S',\n  'š': 's', 'Ţ': 'T', 'ţ': 't', 'Ť': 'T', 'ť': 't', 'Ŧ': 'T', 'ŧ': 't',\n  'Ũ': 'U', 'ũ': 'u', 'Ū': 'U', 'ū': 'u', 'Ŭ': 'U', 'ŭ': 'u', 'Ů': 'U',\n  'ů': 'u', 'Ű': 'U', 'ű': 'u', 'Ų': 'U', 'ų': 'u', 'Ŵ': 'W', 'ŵ': 'w',\n  'Ŷ': 'Y', 'ŷ': 'y', 'Ÿ': 'Y', 'Ź': 'Z', 'ź': 'z', 'Ż': 'Z', 'ż': 'z',\n  'Ž': 'Z', 'ž': 'z',\n  'А': 'A', 'Б': 'B', 'В': 'V', 'Г': 'G', 'Д': 'D', 'Е': 'E', 'Ё': 'E',\n  'Ж': 'ZH', 'З': 'Z', 'И': 'I', 'Й': 'J', 'К': 'K', 'Л': 'L', 'М': 'M',\n  'Н': 'N', 'О': 'O', 'П': 'P', 'Р': 'R', 'С': 'S', 'Т': 'T', 'У': 'U',\n  'Ф': 'F', 'Х': 'KH', 'Ц': 'C', 'Ч': 'CH', 'Ш': 'SH', 'Щ': 'SHCH',\n  'Ъ': '', 'Ы': 'Y', 'Ь': '', 'Э': 'E', 'Ю': 'YU', 'Я': 'YA',\n  'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'e',\n  'ж': 'zh', 'з': 'z', 'и': 'i', 'й': 'j', 'к': 'k', 'л': 'l', 'м': 'm',\n  'н': 'n', 'о': 'o', 'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u',\n  'ф': 'f', 'х': 'kh', 'ц': 'c', 'ч': 'ch', 'ш': 'sh', 'щ': 'shch',\n  'ъ': '', 'ы': 'y', 'ь': '', 'э': 'e', 'ю': 'yu', 'я': 'ya'\n};\n\nvar DEFAULT_REPLACEMENT_CHAR = \"?\";\n\nvar instances$1 = {};\n\nvar Transliterator = function () {\n  createClass(Transliterator, null, [{\n    key: 'getInstance',\n    value: function getInstance(locale) {\n      instances$1[locale] = instances$1[locale] || new Transliterator();\n      return instances$1[locale];\n    }\n  }]);\n\n  function Transliterator() {\n    classCallCheck(this, Transliterator);\n\n    this.approximations = {};\n\n    for (var char in DEFAULT_APPROXIMATIONS) {\n      this.approximate(char, DEFAULT_APPROXIMATIONS[char]);\n    }\n  }\n\n  createClass(Transliterator, [{\n    key: 'approximate',\n    value: function approximate(char, replacement) {\n      this.approximations[char] = replacement;\n    }\n  }, {\n    key: 'transliterate',\n    value: function transliterate(string, replacement) {\n      var _this = this;\n\n      return string.replace(/[^\\u0000-\\u007f]/g, function (c) {\n        return _this.approximations[c] || replacement || DEFAULT_REPLACEMENT_CHAR;\n      });\n    }\n  }]);\n  return Transliterator;\n}();\n\nfunction transliterations(locale, fn) {\n  if (isFunc(locale)) {\n    fn = locale;\n    locale = null;\n  }\n\n  locale = locale || \"en\";\n\n  if (fn) {\n    fn(Transliterator.getInstance(locale));\n  } else {\n    return Transliterator.getInstance(locale);\n  }\n}\n\nfunction transliterate(string) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  var locale = options.locale || \"en\";\n  var replacement = options.replacement || \"?\";\n\n  return transliterations(locale).transliterate(string, replacement);\n}\n\nfunction parameterize(string) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (options.separator === undefined) {\n    options.separator = \"-\";\n  }\n\n  if (options.separator === null) {\n    options.separator = \"\";\n  }\n\n  // replace accented chars with their ascii equivalents\n  var result = transliterate(string, options);\n\n  result = result.replace(/[^a-z0-9\\-_]+/ig, options.separator);\n\n  if (options.separator.length) {\n    var separatorRegex = new RegExp(options.separator);\n\n    // no more than one of the separator in a row\n    result = result.replace(new RegExp(separatorRegex.source + \"{2,}\"), options.separator);\n\n    // remove leading/trailing separator\n    result = result.replace(new RegExp(\"^\" + separatorRegex.source + \"|\" + separatorRegex.source + \"$\", \"i\"), \"\");\n  }\n\n  if (options.preserveCase) {\n    return result;\n  }\n\n  return result.toLowerCase();\n}\n\nfunction constantify(word) {\n  return underscore(word).toUpperCase().replace(/\\s+/g, \"_\");\n}\n\nexport { pluralize, singularize, camelize, underscore, humanize, titleize, tableize, classify, dasherize, foreignKey, ordinal, ordinalize, transliterate, parameterize, capitalize, inflections, transliterations, constantify };\n","const createObject = Object.create;\nexport function createMap<T>() {\n  const map: { [key: string]: T | undefined } = createObject(null);\n  map[\"__\"] = undefined;\n  delete map[\"__\"];\n  return map;\n}\n","import { createMap } from \"./util\";\n\nexport interface Delegate {\n  contextEntered?(context: string, route: MatchDSL): void;\n  willAddRoute?(context: string | undefined, route: string): string;\n}\n\nexport type Opaque = {} | void | null | undefined;\n\nexport interface Route {\n  path: string;\n  handler: Opaque;\n  queryParams?: string[];\n}\n\nexport interface RouteRecognizer {\n  delegate: Delegate | undefined;\n  add(routes: Route[]): void;\n}\n\nexport interface MatchCallback {\n  (match: MatchDSL): void;\n}\n\nexport interface MatchDSL {\n  (path: string): ToDSL;\n  (path: string, callback: MatchCallback): void;\n}\n\nexport interface ToDSL {\n  to(name: string, callback?: MatchCallback): void;\n}\n\nclass Target implements ToDSL {\n  path: string;\n  matcher: Matcher;\n  delegate: Delegate | undefined;\n\n  constructor(path: string, matcher: Matcher, delegate: Delegate | undefined) {\n    this.path = path;\n    this.matcher = matcher;\n    this.delegate = delegate;\n  }\n\n  to(target: string, callback: MatchCallback) {\n    let delegate = this.delegate;\n\n    if (delegate && delegate.willAddRoute) {\n      target = delegate.willAddRoute(this.matcher.target, target);\n    }\n\n    this.matcher.add(this.path, target);\n\n    if (callback) {\n      if (callback.length === 0) { throw new Error(\"You must have an argument in the function passed to `to`\"); }\n      this.matcher.addChild(this.path, target, callback, this.delegate);\n    }\n  }\n}\n\nexport class Matcher {\n  routes: {\n    [path: string]: string | undefined;\n  };\n  children: {\n    [path: string]: Matcher | undefined;\n  };\n  target: string | undefined;\n\n  constructor(target?: string) {\n    this.routes = createMap<string>();\n    this.children = createMap<Matcher>();\n    this.target = target;\n  }\n\n  add(path: string, target: string) {\n    this.routes[path] = target;\n  }\n\n  addChild(path: string, target: string, callback: MatchCallback, delegate: Delegate | undefined) {\n    let matcher = new Matcher(target);\n    this.children[path] = matcher;\n\n    let match = generateMatch(path, matcher, delegate);\n\n    if (delegate && delegate.contextEntered) {\n      delegate.contextEntered(target, match);\n    }\n\n    callback(match);\n  }\n}\n\nfunction generateMatch(startingPath: string, matcher: Matcher, delegate: Delegate | undefined): MatchDSL {\n  function match(path: string): ToDSL;\n  function match(path: string, callback: MatchCallback): void;\n  function match(path: string, callback?: MatchCallback): ToDSL | void {\n    let fullPath = startingPath + path;\n    if (callback) {\n      callback(generateMatch(fullPath, matcher, delegate));\n    } else {\n      return new Target(fullPath, matcher, delegate);\n    }\n  };\n  return match;\n}\n\nfunction addRoute(routeArray: Route[], path: string, handler: any) {\n  let len = 0;\n  for (let i = 0; i < routeArray.length; i++) {\n    len += routeArray[i].path.length;\n  }\n\n  path = path.substr(len);\n  let route = { path: path, handler: handler };\n  routeArray.push(route);\n}\n\nfunction eachRoute<T>(baseRoute: Route[], matcher: Matcher, callback: (this: T, routes: Route[]) => void, binding: T) {\n  let routes = matcher.routes;\n  let paths = Object.keys(routes);\n  for (let i = 0; i < paths.length; i++) {\n    let path = paths[i];\n    let routeArray = baseRoute.slice();\n    addRoute(routeArray, path, routes[path]);\n    let nested = matcher.children[path];\n    if (nested) {\n      eachRoute(routeArray, nested, callback, binding);\n    } else {\n      callback.call(binding, routeArray);\n    }\n  }\n}\n\nexport default function <T extends RouteRecognizer>(this: T, callback: MatchCallback, addRouteCallback?: (routeRecognizer: T, routes: Route[]) => void) {\n  let matcher = new Matcher();\n\n  callback(generateMatch(\"\", matcher, this.delegate));\n\n  eachRoute([], matcher, function(routes: Route[]) {\n    if (addRouteCallback) { addRouteCallback(this, routes); }\n    else { this.add(routes); }\n  }, this);\n}\n","// Normalizes percent-encoded values in `path` to upper-case and decodes percent-encoded\n// values that are not reserved (i.e., unicode characters, emoji, etc). The reserved\n// chars are \"/\" and \"%\".\n// Safe to call multiple times on the same path.\nexport function normalizePath(path: string): string {\n  return path.split(\"/\")\n             .map(normalizeSegment)\n             .join(\"/\");\n}\n\n// We want to ensure the characters \"%\" and \"/\" remain in percent-encoded\n// form when normalizing paths, so replace them with their encoded form after\n// decoding the rest of the path\nconst SEGMENT_RESERVED_CHARS = /%|\\//g;\nexport function normalizeSegment(segment: string) {\n  if (segment.length < 3 || segment.indexOf(\"%\") === -1) return segment;\n  return decodeURIComponent(segment).replace(SEGMENT_RESERVED_CHARS, encodeURIComponent);\n}\n\n// We do not want to encode these characters when generating dynamic path segments\n// See https://tools.ietf.org/html/rfc3986#section-3.3\n// sub-delims: \"!\", \"$\", \"&\", \"'\", \"(\", \")\", \"*\", \"+\", \",\", \";\", \"=\"\n// others allowed by RFC 3986: \":\", \"@\"\n//\n// First encode the entire path segment, then decode any of the encoded special chars.\n//\n// The chars \"!\", \"'\", \"(\", \")\", \"*\" do not get changed by `encodeURIComponent`,\n// so the possible encoded chars are:\n// ['%24', '%26', '%2B', '%2C', '%3B', '%3D', '%3A', '%40'].\nconst PATH_SEGMENT_ENCODINGS = /%(?:2(?:4|6|B|C)|3(?:B|D|A)|40)/g;\n\nexport function encodePathSegment(str: string) {\n  return encodeURIComponent(str).replace(PATH_SEGMENT_ENCODINGS, decodeURIComponent);\n}\n","import { createMap } from \"./route-recognizer/util\";\nimport map, { Delegate, Route, Opaque, MatchCallback } from \"./route-recognizer/dsl\";\nimport { normalizePath, normalizeSegment, encodePathSegment } from \"./route-recognizer/normalizer\";\nexport { Delegate, MatchCallback } from './route-recognizer/dsl';\n\nconst enum CHARS {\n  ANY = -1,\n  STAR = 42,\n  SLASH = 47,\n  COLON = 58\n}\n\nconst escapeRegex = /(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\)/g;\n\nconst isArray = Array.isArray;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction getParam(params: Params | null | undefined, key: string): string {\n  if (typeof params !== \"object\" || params === null) {\n    throw new Error(\"You must pass an object as the second argument to `generate`.\");\n  }\n\n  if (!hasOwnProperty.call(params, key)) {\n    throw new Error(\"You must provide param `\" + key + \"` to `generate`.\");\n  }\n\n  let value = params[key];\n  let str = typeof value === \"string\" ? value : \"\" + value;\n  if (str.length === 0) {\n    throw new Error(\"You must provide a param `\" + key + \"`.\");\n  }\n  return str;\n}\n\nconst enum SegmentType {\n  Static  = 0,\n  Dynamic = 1,\n  Star    = 2,\n  Epsilon = 4\n}\n\nconst enum SegmentFlags {\n  Static  = 2 << SegmentType.Static,\n  Dynamic = 2 << SegmentType.Dynamic,\n  Star    = 2 << SegmentType.Star,\n  Epsilon = 2 << SegmentType.Epsilon,\n  Named = Dynamic | Star,\n  Decoded = Dynamic,\n  Counted = Static | Dynamic | Star\n}\n\nconst eachChar: ((segment: Segment, currentState: State) => State)[] = [];\neachChar[SegmentType.Static] = function (segment: Segment, currentState: State) {\n  let state = currentState;\n  let value = segment.value;\n  for (let i = 0; i < value.length; i++) {\n    let ch = value.charCodeAt(i);\n    state = state.put(ch, false, false);\n  }\n  return state;\n};\neachChar[SegmentType.Dynamic] = function (_: Segment, currentState: State) {\n  return currentState.put(CHARS.SLASH, true, true);\n};\neachChar[SegmentType.Star] = function (_: Segment, currentState: State) {\n  return currentState.put(CHARS.ANY, false, true);\n};\neachChar[SegmentType.Epsilon] = function (_: Segment, currentState: State) {\n  return currentState;\n};\n\nconst regex: ((segment: Segment) => string)[] = [];\nregex[SegmentType.Static] = function (segment: Segment) {\n  return segment.value.replace(escapeRegex, \"\\\\$1\");\n};\nregex[SegmentType.Dynamic] = function () {\n  return \"([^/]+)\";\n};\nregex[SegmentType.Star] = function () {\n  return \"(.+)\";\n};\nregex[SegmentType.Epsilon] = function () {\n  return \"\";\n};\n\nconst generate: ((segment: Segment, params?: Params | null) => string)[] = [];\ngenerate[SegmentType.Static] = function (segment: Segment) {\n  return segment.value;\n};\ngenerate[SegmentType.Dynamic] = function (segment: Segment, params?: Params) {\n  let value = getParam(params, segment.value);\n  if (RouteRecognizer.ENCODE_AND_DECODE_PATH_SEGMENTS) {\n    return encodePathSegment(value);\n  } else {\n    return value;\n  }\n};\ngenerate[SegmentType.Star] = function (segment: Segment, params?: Params) {\n  return getParam(params, segment.value);\n};\ngenerate[SegmentType.Epsilon] = function () {\n  return \"\";\n};\n\n// A Segment represents a segment in the original route description.\n// Each Segment type provides an `eachChar` and `regex` method.\n//\n// The `eachChar` method invokes the callback with one or more character\n// specifications. A character specification consumes one or more input\n// characters.\n//\n// The `regex` method returns a regex fragment for the segment. If the\n// segment is a dynamic of star segment, the regex fragment also includes\n// a capture.\n//\n// A character specification contains:\n//\n// * `validChars`: a String with a list of all valid characters, or\n// * `invalidChars`: a String with a list of all invalid characters\n// * `repeat`: true if the character specification can repeat\ninterface Segment {\n  type: SegmentType;\n  value: string;\n}\n\nexport interface Params {\n  [key: string]: Opaque;\n  [key: number]: Opaque;\n  queryParams?: QueryParams | null;\n}\n\ninterface PopulatedParsedHandlers {\n  names: string[];\n  shouldDecodes: any[];\n}\n\nconst EmptyObject = Object.freeze({});\ntype EmptyObject = Readonly<{}>\n\nconst EmptyArray = Object.freeze([]) as ReadonlyArray<any>;\ntype EmptyArray = ReadonlyArray<any>;\n\ninterface EmptyParsedHandlers {\n  names: EmptyArray;\n  shouldDecodes: EmptyArray;\n}\n\ntype ParsedHandler = PopulatedParsedHandlers | EmptyParsedHandlers;\n\n// The `names` will be populated with the paramter name for each dynamic/star\n// segment. `shouldDecodes` will be populated with a boolean for each dyanamic/star\n// segment, indicating whether it should be decoded during recognition.\nfunction parse(segments: Segment[], route: string, types: [number, number, number]) {\n  // normalize route as not starting with a \"/\". Recognition will\n  // also normalize.\n  if (route.length > 0 && route.charCodeAt(0) === CHARS.SLASH) { route = route.substr(1); }\n\n  let parts = route.split(\"/\");\n  let names: void | string[] = undefined;\n  let shouldDecodes: void | any[] = undefined;\n\n  for (let i = 0; i < parts.length; i++) {\n    let part = parts[i];\n    let flags: SegmentFlags = 0;\n    let type: SegmentType = 0;\n\n    if (part === \"\") {\n      type = SegmentType.Epsilon;\n    } else if (part.charCodeAt(0) === CHARS.COLON) {\n      type = SegmentType.Dynamic;\n    } else if (part.charCodeAt(0) === CHARS.STAR) {\n      type = SegmentType.Star;\n    }  else {\n      type = SegmentType.Static;\n    }\n\n    flags = 2 << type;\n\n    if (flags & SegmentFlags.Named) {\n      part = part.slice(1);\n      names = names || [];\n      names.push(part);\n\n      shouldDecodes = shouldDecodes || [];\n      shouldDecodes.push((flags & SegmentFlags.Decoded) !== 0);\n    }\n\n    if (flags & SegmentFlags.Counted) {\n      types[type]++;\n    }\n\n    segments.push({\n      type,\n      value: normalizeSegment(part)\n    });\n  }\n\n  return {\n    names: names || EmptyArray,\n    shouldDecodes: shouldDecodes || EmptyArray,\n  } as ParsedHandler;\n}\n\nfunction isEqualCharSpec(spec: CharSpec, char: number, negate: boolean) {\n  return spec.char === char && spec.negate === negate;\n}\n\ninterface EmptyHandler {\n  handler: Opaque;\n  names: EmptyArray;\n  shouldDecodes: EmptyArray;\n}\n\ninterface PopulatedHandler {\n  handler: Opaque;\n  names: string [];\n  shouldDecodes: boolean[];\n}\n\ntype Handler = EmptyHandler | PopulatedHandler;\n\n// A State has a character specification and (`charSpec`) and a list of possible\n// subsequent states (`nextStates`).\n//\n// If a State is an accepting state, it will also have several additional\n// properties:\n//\n// * `regex`: A regular expression that is used to extract parameters from paths\n//   that reached this accepting state.\n// * `handlers`: Information on how to convert the list of captures into calls\n//   to registered handlers with the specified parameters\n// * `types`: How many static, dynamic or star segments in this route. Used to\n//   decide which route to use if multiple registered routes match a path.\n//\n// Currently, State is implemented naively by looping over `nextStates` and\n// comparing a character specification against a character. A more efficient\n// implementation would use a hash of keys pointing at one or more next states.\nclass State implements CharSpec {\n  states: State[];\n  id: number;\n  negate: boolean;\n  char: number;\n  nextStates: number[] | number | null;\n  pattern: string;\n  _regex: RegExp | undefined;\n  handlers: Handler[] | undefined;\n  types: [number, number, number] | undefined;\n\n  constructor(states: State[], id: number, char: number, negate: boolean, repeat: boolean) {\n    this.states = states;\n    this.id = id;\n    this.char = char;\n    this.negate = negate;\n    this.nextStates = repeat ? id : null;\n    this.pattern = \"\";\n    this._regex = undefined;\n    this.handlers = undefined;\n    this.types = undefined;\n  }\n\n  regex(): RegExp {\n    if (!this._regex) {\n      this._regex = new RegExp(this.pattern);\n    }\n    return this._regex;\n  }\n\n  get(char: number, negate: boolean): State | void {\n    let nextStates = this.nextStates;\n    if (nextStates === null) return;\n    if (isArray(nextStates)) {\n      for (let i = 0; i < nextStates.length; i++) {\n        let child = this.states[nextStates[i]];\n        if (isEqualCharSpec(child, char, negate)) {\n          return child;\n        }\n      }\n    } else {\n      let child = this.states[nextStates];\n      if (isEqualCharSpec(child, char, negate)) {\n        return child;\n      }\n    }\n  }\n\n  put(char: number, negate: boolean, repeat: boolean) {\n    let state: State | void;\n\n    // If the character specification already exists in a child of the current\n    // state, just return that state.\n    if (state = this.get(char, negate)) { return state; }\n\n    // Make a new state for the character spec\n    let states = this.states;\n    state = new State(states, states.length, char, negate, repeat);\n    states[states.length] = state;\n\n    // Insert the new state as a child of the current state\n    if (this.nextStates == null) {\n      this.nextStates = state.id;\n    } else if (isArray(this.nextStates)) {\n      this.nextStates.push(state.id);\n    } else {\n      this.nextStates = [this.nextStates, state.id];\n    }\n\n    // Return the new state\n    return state;\n  }\n\n  // Find a list of child states matching the next character\n  match(ch: number): State[] {\n    let nextStates = this.nextStates;\n    if (!nextStates) return [];\n\n    let returned: State[] = [];\n    if (isArray(nextStates)) {\n      for (let i = 0; i < nextStates.length; i++) {\n        let child = this.states[nextStates[i]];\n\n        if (isMatch(child, ch)) {\n          returned.push(child);\n        }\n      }\n    } else {\n      let child = this.states[nextStates];\n      if (isMatch(child, ch)) {\n        returned.push(child);\n      }\n    }\n    return returned;\n  }\n}\n\nfunction isMatch(spec: CharSpec, char: number) {\n  return spec.negate ? spec.char !== char && spec.char !== CHARS.ANY : spec.char === char || spec.char === CHARS.ANY;\n}\n\n// This is a somewhat naive strategy, but should work in a lot of cases\n// A better strategy would properly resolve /posts/:id/new and /posts/edit/:id.\n//\n// This strategy generally prefers more static and less dynamic matching.\n// Specifically, it\n//\n//  * prefers fewer stars to more, then\n//  * prefers using stars for less of the match to more, then\n//  * prefers fewer dynamic segments to more, then\n//  * prefers more static segments to more\nfunction sortSolutions(states: State[]) {\n  return states.sort(function(a, b) {\n    let [ astatics, adynamics, astars ] = a.types || [0, 0, 0];\n    let [ bstatics, bdynamics, bstars ] = b.types || [0, 0, 0];\n    if (astars !== bstars) { return astars - bstars; }\n\n    if (astars) {\n      if (astatics !== bstatics) { return bstatics - astatics; }\n      if (adynamics !== bdynamics) { return bdynamics - adynamics; }\n    }\n\n    if (adynamics !== bdynamics) { return adynamics - bdynamics; }\n    if (astatics !== bstatics) { return bstatics - astatics; }\n\n    return 0;\n  });\n}\n\nfunction recognizeChar(states: State[], ch: number) {\n  let nextStates: State[] = [];\n\n  for (let i = 0, l = states.length; i < l; i++) {\n    let state = states[i];\n\n    nextStates = nextStates.concat(state.match(ch));\n  }\n\n  return nextStates;\n}\n\n\nexport interface QueryParams {\n  [param: string]: any[] | any | null | undefined;\n}\n\nexport interface Result {\n  handler: Opaque;\n  params: Params;\n  isDynamic: boolean;\n}\n\nexport interface Results extends ArrayLike<Result | undefined> {\n  queryParams: QueryParams;\n  slice(start?: number, end?: number): Result[];\n  splice(start: number, deleteCount: number, ...items: Result[]): Result[];\n  push(...results: Result[]): number;\n}\n\nclass RecognizeResults implements Results {\n  queryParams: QueryParams;\n  length = 0;\n  [index: number]: Result | undefined;\n  splice: (start: number, deleteCount: number, ...items: Result[]) => Result[];\n  slice: (start?: number, end?: number) => Result[];\n  push: (...results: Result[]) => number;\n\n  constructor(queryParams?: QueryParams) {\n    this.queryParams = queryParams || {};\n  }\n};\n\nRecognizeResults.prototype.splice = Array.prototype.splice;\nRecognizeResults.prototype.slice =  Array.prototype.slice;\nRecognizeResults.prototype.push = Array.prototype.push;\n\nfunction findHandler(state: State, originalPath: string, queryParams: QueryParams): Results {\n  let handlers = state.handlers;\n  let regex: RegExp = state.regex();\n  if (!regex || !handlers) throw new Error(\"state not initialized\");\n  let captures: RegExpMatchArray | null = originalPath.match(regex);\n  let currentCapture = 1;\n  let result = new RecognizeResults(queryParams);\n\n  result.length = handlers.length;\n\n  for (let i = 0; i < handlers.length; i++) {\n    let handler = handlers[i];\n    let names = handler.names;\n    let shouldDecodes = handler.shouldDecodes;\n    let params: EmptyObject | Params = EmptyObject;\n\n    let isDynamic = false;\n\n    if (names !== EmptyArray && shouldDecodes !== EmptyArray) {\n      for (let j = 0; j < names.length; j++) {\n        isDynamic = true;\n        let name = names[j];\n        let capture = captures && captures[currentCapture++];\n\n        if (params === EmptyObject) {\n          params = {};\n        }\n\n        if (RouteRecognizer.ENCODE_AND_DECODE_PATH_SEGMENTS && shouldDecodes[j]) {\n          (<Params>params)[name] = capture && decodeURIComponent(capture);\n        } else {\n          (<Params>params)[name] = capture;\n        }\n      }\n    }\n\n    result[i] = {\n      handler: handler.handler,\n      params,\n      isDynamic\n    };\n  }\n\n  return result;\n}\n\nfunction decodeQueryParamPart(part: string): string {\n  // http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1\n  part = part.replace(/\\+/gm, \"%20\");\n  let result;\n  try {\n    result = decodeURIComponent(part);\n  } catch (error) {result = \"\"; }\n  return result;\n}\n\ninterface NamedRoute {\n  segments: Segment[];\n  handlers: Handler[];\n}\n\nclass RouteRecognizer {\n  private states: State[];\n  private rootState: State;\n  private names: {\n    [name: string]: NamedRoute | undefined;\n  } = createMap<NamedRoute>();\n  map: (context: MatchCallback, addCallback?: (router: this, routes: Route[]) => void) => void;\n  delegate: Delegate | undefined;\n\n  constructor() {\n    let states: State[] = [];\n    let state = new State(states, 0, CHARS.ANY, true, false);\n    states[0] = state;\n    this.states = states;\n    this.rootState = state;\n  }\n\n  static VERSION = \"0.3.4\";\n  // Set to false to opt-out of encoding and decoding path segments.\n  // See https://github.com/tildeio/route-recognizer/pull/55\n  static ENCODE_AND_DECODE_PATH_SEGMENTS = true;\n  static Normalizer = {\n    normalizeSegment, normalizePath, encodePathSegment\n  };\n\n  add(routes: Route[], options?: { as: string }) {\n    let currentState = this.rootState;\n    let pattern = \"^\";\n    let types: [number, number, number] = [0, 0, 0];\n    let handlers: Handler[] = new Array(routes.length);\n    let allSegments: Segment[] = [];\n\n    let isEmpty = true;\n    let j = 0;\n    for (let i = 0; i < routes.length; i++) {\n      let route = routes[i];\n      let { names, shouldDecodes } = parse(allSegments, route.path, types);\n\n      // preserve j so it points to the start of newly added segments\n      for (; j < allSegments.length; j++) {\n        let segment = allSegments[j];\n\n        if (segment.type === SegmentType.Epsilon) { continue; }\n\n        isEmpty = false;\n\n        // Add a \"/\" for the new segment\n        currentState = currentState.put(CHARS.SLASH, false, false);\n        pattern += \"/\";\n\n        // Add a representation of the segment to the NFA and regex\n        currentState = eachChar[segment.type](segment, currentState);\n        pattern += regex[segment.type](segment);\n      }\n      handlers[i] = {\n        handler: route.handler,\n        names,\n        shouldDecodes\n      };\n    }\n\n    if (isEmpty) {\n        currentState = currentState.put(CHARS.SLASH, false, false);\n      pattern += \"/\";\n    }\n\n    currentState.handlers = handlers;\n    currentState.pattern = pattern + \"$\";\n    currentState.types = types;\n\n    let name: string | undefined;\n    if (typeof options === \"object\" && options !== null && options.as) {\n      name = options.as;\n    }\n\n    if (name) {\n      // if (this.names[name]) {\n      //   throw new Error(\"You may not add a duplicate route named `\" + name + \"`.\");\n      // }\n\n      this.names[name] = {\n        segments: allSegments,\n        handlers\n      };\n    }\n  }\n\n  handlersFor(name: string) {\n    let route = this.names[name];\n\n    if (!route) { throw new Error(\"There is no route named \" + name); }\n\n    let result = new Array(route.handlers.length);\n\n    for (let i = 0; i < route.handlers.length; i++) {\n      let handler = route.handlers[i];\n      result[i] = handler;\n    }\n\n    return result;\n  }\n\n  hasRoute(name: string) {\n    return !!this.names[name];\n  }\n\n  generate(name: string, params?: Params | null) {\n    let route = this.names[name];\n    let output = \"\";\n    if (!route) { throw new Error(\"There is no route named \" + name); }\n\n    let segments: Segment[] = route.segments;\n\n    for (let i = 0; i < segments.length; i++) {\n      let segment: Segment = segments[i];\n\n      if (segment.type === SegmentType.Epsilon) {\n        continue;\n      }\n\n      output += \"/\";\n      output += generate[segment.type](segment, params);\n    }\n\n    if (output.charAt(0) !== \"/\") { output = \"/\" + output; }\n\n    if (params && params.queryParams) {\n      output += this.generateQueryString(params.queryParams);\n    }\n\n    return output;\n  }\n\n  generateQueryString(params: QueryParams) {\n    let pairs: string[] = [];\n    let keys: string[] = Object.keys(params);\n    keys.sort();\n    for (let i = 0; i < keys.length; i++) {\n      let key = keys[i];\n      let value = params[key];\n      if (value == null) {\n        continue;\n      }\n      let pair = encodeURIComponent(key);\n      if (isArray(value)) {\n        for (let j = 0; j < value.length; j++) {\n          let arrayPair = key + \"[]\" + \"=\" + encodeURIComponent(value[j]);\n          pairs.push(arrayPair);\n        }\n      } else {\n        pair += \"=\" + encodeURIComponent(value);\n        pairs.push(pair);\n      }\n    }\n\n    if (pairs.length === 0) { return \"\"; }\n\n    return \"?\" + pairs.join(\"&\");\n  }\n\n  parseQueryString(queryString: string): QueryParams {\n    let pairs = queryString.split(\"&\");\n    let queryParams: QueryParams = {};\n    for (let i = 0; i < pairs.length; i++) {\n      let pair      = pairs[i].split(\"=\"),\n          key       = decodeQueryParamPart(pair[0]),\n          keyLength = key.length,\n          isArray = false,\n          value;\n      if (pair.length === 1) {\n        value = \"true\";\n      } else {\n        // Handle arrays\n        if (keyLength > 2 && key.slice(keyLength - 2) === \"[]\") {\n          isArray = true;\n          key = key.slice(0, keyLength - 2);\n          if (!queryParams[key]) {\n            queryParams[key] = [];\n          }\n        }\n        value = pair[1] ? decodeQueryParamPart(pair[1]) : \"\";\n      }\n      if (isArray) {\n        (<string[]>queryParams[key]).push(value);\n      } else {\n        queryParams[key] = value;\n      }\n    }\n    return queryParams;\n  }\n\n  recognize(path: string): Results | undefined {\n    let results: Results | undefined;\n    let states: State[] = [ this.rootState ];\n    let queryParams = {};\n    let isSlashDropped = false;\n    let hashStart = path.indexOf(\"#\");\n    if (hashStart !== -1) {\n      path = path.substr(0, hashStart);\n    }\n\n    let queryStart = path.indexOf(\"?\");\n    if (queryStart !== -1) {\n      let queryString = path.substr(queryStart + 1, path.length);\n      path = path.substr(0, queryStart);\n      queryParams = this.parseQueryString(queryString);\n    }\n\n    if (path.charAt(0) !== \"/\") { path = \"/\" + path; }\n    let originalPath = path;\n\n    if (RouteRecognizer.ENCODE_AND_DECODE_PATH_SEGMENTS) {\n      path = normalizePath(path);\n    } else {\n      path = decodeURI(path);\n      originalPath = decodeURI(originalPath);\n    }\n\n    let pathLen = path.length;\n    if (pathLen > 1 && path.charAt(pathLen - 1) === \"/\") {\n      path = path.substr(0, pathLen - 1);\n      originalPath = originalPath.substr(0, originalPath.length - 1);\n      isSlashDropped = true;\n    }\n\n    for (let i = 0; i < path.length; i++) {\n      states = recognizeChar(states, path.charCodeAt(i));\n      if (!states.length) { break; }\n    }\n\n    let solutions: State[] = [];\n    for (let i = 0; i < states.length; i++) {\n      if (states[i].handlers) { solutions.push(states[i]); }\n    }\n\n    states = sortSolutions(solutions);\n\n    let state = solutions[0];\n\n    if (state && state.handlers) {\n      // if a trailing slash was dropped and a star segment is the last segment\n      // specified, put the trailing slash back\n      if (isSlashDropped && state.pattern && state.pattern.slice(-5) === \"(.+)$\") {\n        originalPath = originalPath + \"/\";\n      }\n      results = findHandler(state, originalPath, queryParams);\n    }\n\n    return results;\n  }\n}\n\nRouteRecognizer.prototype.map = map;\n\nexport default RouteRecognizer;\n\ninterface CharSpec {\n  negate: boolean;\n  char: number;\n}\n","/**\n * Minimal Event interface implementation\n *\n * Original implementation by Sven Fuchs: https://gist.github.com/995028\n * Modifications and tests by Christian Johansen.\n *\n * @author Sven Fuchs (svenfuchs@artweb-design.de)\n * @author Christian Johansen (christian@cjohansen.no)\n * @license BSD\n *\n * Copyright (c) 2011 Sven Fuchs, Christian Johansen\n */\n\nvar _Event = function Event(type, bubbles, cancelable, target) {\n  this.type = type;\n  this.bubbles = bubbles;\n  this.cancelable = cancelable;\n  this.target = target;\n};\n\n_Event.prototype = {\n  stopPropagation: function () {},\n  preventDefault: function () {\n    this.defaultPrevented = true;\n  }\n};\n\n/*\n  Used to set the statusText property of an xhr object\n*/\nvar httpStatusCodes = {\n  100: \"Continue\",\n  101: \"Switching Protocols\",\n  200: \"OK\",\n  201: \"Created\",\n  202: \"Accepted\",\n  203: \"Non-Authoritative Information\",\n  204: \"No Content\",\n  205: \"Reset Content\",\n  206: \"Partial Content\",\n  300: \"Multiple Choice\",\n  301: \"Moved Permanently\",\n  302: \"Found\",\n  303: \"See Other\",\n  304: \"Not Modified\",\n  305: \"Use Proxy\",\n  307: \"Temporary Redirect\",\n  400: \"Bad Request\",\n  401: \"Unauthorized\",\n  402: \"Payment Required\",\n  403: \"Forbidden\",\n  404: \"Not Found\",\n  405: \"Method Not Allowed\",\n  406: \"Not Acceptable\",\n  407: \"Proxy Authentication Required\",\n  408: \"Request Timeout\",\n  409: \"Conflict\",\n  410: \"Gone\",\n  411: \"Length Required\",\n  412: \"Precondition Failed\",\n  413: \"Request Entity Too Large\",\n  414: \"Request-URI Too Long\",\n  415: \"Unsupported Media Type\",\n  416: \"Requested Range Not Satisfiable\",\n  417: \"Expectation Failed\",\n  422: \"Unprocessable Entity\",\n  500: \"Internal Server Error\",\n  501: \"Not Implemented\",\n  502: \"Bad Gateway\",\n  503: \"Service Unavailable\",\n  504: \"Gateway Timeout\",\n  505: \"HTTP Version Not Supported\"\n};\n\n\n/*\n  Cross-browser XML parsing. Used to turn\n  XML responses into Document objects\n  Borrowed from JSpec\n*/\nfunction parseXML(text) {\n  var xmlDoc;\n\n  if (typeof DOMParser != \"undefined\") {\n    var parser = new DOMParser();\n    xmlDoc = parser.parseFromString(text, \"text/xml\");\n  } else {\n    xmlDoc = new ActiveXObject(\"Microsoft.XMLDOM\");\n    xmlDoc.async = \"false\";\n    xmlDoc.loadXML(text);\n  }\n\n  return xmlDoc;\n}\n\n/*\n  Without mocking, the native XMLHttpRequest object will throw\n  an error when attempting to set these headers. We match this behavior.\n*/\nvar unsafeHeaders = {\n  \"Accept-Charset\": true,\n  \"Accept-Encoding\": true,\n  \"Connection\": true,\n  \"Content-Length\": true,\n  \"Cookie\": true,\n  \"Cookie2\": true,\n  \"Content-Transfer-Encoding\": true,\n  \"Date\": true,\n  \"Expect\": true,\n  \"Host\": true,\n  \"Keep-Alive\": true,\n  \"Referer\": true,\n  \"TE\": true,\n  \"Trailer\": true,\n  \"Transfer-Encoding\": true,\n  \"Upgrade\": true,\n  \"User-Agent\": true,\n  \"Via\": true\n};\n\n/*\n  Adds an \"event\" onto the fake xhr object\n  that just calls the same-named method. This is\n  in case a library adds callbacks for these events.\n*/\nfunction _addEventListener(eventName, xhr){\n  xhr.addEventListener(eventName, function (event) {\n    var listener = xhr[\"on\" + eventName];\n\n    if (listener && typeof listener == \"function\") {\n      listener.call(event.target, event);\n    }\n  });\n}\n\nfunction EventedObject() {\n  this._eventListeners = {};\n  var events = [\"loadstart\", \"progress\", \"load\", \"abort\", \"loadend\"];\n  for (var i = events.length - 1; i >= 0; i--) {\n    _addEventListener(events[i], this);\n  }\n};\n\nEventedObject.prototype = {\n  /*\n    Duplicates the behavior of native XMLHttpRequest's addEventListener function\n  */\n  addEventListener: function addEventListener(event, listener) {\n    this._eventListeners[event] = this._eventListeners[event] || [];\n    this._eventListeners[event].push(listener);\n  },\n\n  /*\n    Duplicates the behavior of native XMLHttpRequest's removeEventListener function\n  */\n  removeEventListener: function removeEventListener(event, listener) {\n    var listeners = this._eventListeners[event] || [];\n\n    for (var i = 0, l = listeners.length; i < l; ++i) {\n      if (listeners[i] == listener) {\n        return listeners.splice(i, 1);\n      }\n    }\n  },\n\n  /*\n    Duplicates the behavior of native XMLHttpRequest's dispatchEvent function\n  */\n  dispatchEvent: function dispatchEvent(event) {\n    var type = event.type;\n    var listeners = this._eventListeners[type] || [];\n\n    for (var i = 0; i < listeners.length; i++) {\n      if (typeof listeners[i] == \"function\") {\n        listeners[i].call(this, event);\n      } else {\n        listeners[i].handleEvent(event);\n      }\n    }\n\n    return !!event.defaultPrevented;\n  },\n\n  /*\n    Triggers an `onprogress` event with the given parameters.\n  */\n  _progress: function _progress(lengthComputable, loaded, total) {\n    var event = new _Event('progress');\n    event.target = this;\n    event.lengthComputable = lengthComputable;\n    event.loaded = loaded;\n    event.total = total;\n    this.dispatchEvent(event);\n  }\n}\n\n/*\n  Constructor for a fake window.XMLHttpRequest\n*/\nfunction FakeXMLHttpRequest() {\n  EventedObject.call(this);\n  this.readyState = FakeXMLHttpRequest.UNSENT;\n  this.requestHeaders = {};\n  this.requestBody = null;\n  this.status = 0;\n  this.statusText = \"\";\n  this.upload = new EventedObject();\n  this.onabort= null;\n  this.onerror= null;\n  this.onload= null;\n  this.onloadend= null;\n  this.onloadstart= null;\n  this.onprogress= null;\n  this.onreadystatechange= null;\n  this.ontimeout= null;\n}\n\nFakeXMLHttpRequest.prototype = new EventedObject();\n\n// These status codes are available on the native XMLHttpRequest\n// object, so we match that here in case a library is relying on them.\nFakeXMLHttpRequest.UNSENT = 0;\nFakeXMLHttpRequest.OPENED = 1;\nFakeXMLHttpRequest.HEADERS_RECEIVED = 2;\nFakeXMLHttpRequest.LOADING = 3;\nFakeXMLHttpRequest.DONE = 4;\n\nvar FakeXMLHttpRequestProto = {\n  UNSENT: 0,\n  OPENED: 1,\n  HEADERS_RECEIVED: 2,\n  LOADING: 3,\n  DONE: 4,\n  async: true,\n  withCredentials: false,\n\n  /*\n    Duplicates the behavior of native XMLHttpRequest's open function\n  */\n  open: function open(method, url, async, username, password) {\n    this.method = method;\n    this.url = url;\n    this.async = typeof async == \"boolean\" ? async : true;\n    this.username = username;\n    this.password = password;\n    this.responseText = null;\n    this.response = this.responseText;\n    this.responseXML = null;\n    this.responseURL = url;\n    this.requestHeaders = {};\n    this.sendFlag = false;\n    this._readyStateChange(FakeXMLHttpRequest.OPENED);\n  },\n\n  /*\n    Duplicates the behavior of native XMLHttpRequest's setRequestHeader function\n  */\n  setRequestHeader: function setRequestHeader(header, value) {\n    verifyState(this);\n\n    if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) {\n      throw new Error(\"Refused to set unsafe header \\\"\" + header + \"\\\"\");\n    }\n\n    if (this.requestHeaders[header]) {\n      this.requestHeaders[header] += \",\" + value;\n    } else {\n      this.requestHeaders[header] = value;\n    }\n  },\n\n  /*\n    Duplicates the behavior of native XMLHttpRequest's send function\n  */\n  send: function send(data) {\n    verifyState(this);\n\n    if (!/^(get|head)$/i.test(this.method)) {\n      var hasContentTypeHeader = false\n\n      Object.keys(this.requestHeaders).forEach(function (key) {\n        if (key.toLowerCase() === 'content-type') {\n          hasContentTypeHeader = true;\n        }\n      });\n\n      if (!hasContentTypeHeader && !(data || '').toString().match('FormData')) {\n        this.requestHeaders[\"Content-Type\"] = \"text/plain;charset=UTF-8\";\n      }\n\n      this.requestBody = data;\n    }\n\n    this.errorFlag = false;\n    this.sendFlag = this.async;\n    this._readyStateChange(FakeXMLHttpRequest.OPENED);\n\n    if (typeof this.onSend == \"function\") {\n      this.onSend(this);\n    }\n\n    this.dispatchEvent(new _Event(\"loadstart\", false, false, this));\n  },\n\n  /*\n    Duplicates the behavior of native XMLHttpRequest's abort function\n  */\n  abort: function abort() {\n    this.aborted = true;\n    this.responseText = null;\n    this.response = this.responseText;\n    this.errorFlag = true;\n    this.requestHeaders = {};\n\n    this.dispatchEvent(new _Event(\"abort\", false, false, this));\n\n    if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) {\n      this._readyStateChange(FakeXMLHttpRequest.UNSENT);\n      this.sendFlag = false;\n    }\n\n    if (typeof this.onerror === \"function\") {\n      this.onerror();\n    }\n  },\n\n  /*\n    Duplicates the behavior of native XMLHttpRequest's getResponseHeader function\n  */\n  getResponseHeader: function getResponseHeader(header) {\n    if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {\n      return null;\n    }\n\n    if (/^Set-Cookie2?$/i.test(header)) {\n      return null;\n    }\n\n    header = header.toLowerCase();\n\n    for (var h in this.responseHeaders) {\n      if (h.toLowerCase() == header) {\n        return this.responseHeaders[h];\n      }\n    }\n\n    return null;\n  },\n\n  /*\n    Duplicates the behavior of native XMLHttpRequest's getAllResponseHeaders function\n  */\n  getAllResponseHeaders: function getAllResponseHeaders() {\n    if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {\n      return \"\";\n    }\n\n    var headers = \"\";\n\n    for (var header in this.responseHeaders) {\n      if (this.responseHeaders.hasOwnProperty(header) && !/^Set-Cookie2?$/i.test(header)) {\n        headers += header + \": \" + this.responseHeaders[header] + \"\\r\\n\";\n      }\n    }\n\n    return headers;\n  },\n\n  /*\n   Duplicates the behavior of native XMLHttpRequest's overrideMimeType function\n   */\n  overrideMimeType: function overrideMimeType(mimeType) {\n    if (typeof mimeType === \"string\") {\n      this.forceMimeType = mimeType.toLowerCase();\n    }\n  },\n\n\n  /*\n    Places a FakeXMLHttpRequest object into the passed\n    state.\n  */\n  _readyStateChange: function _readyStateChange(state) {\n    this.readyState = state;\n\n    if (typeof this.onreadystatechange == \"function\") {\n      this.onreadystatechange(new _Event(\"readystatechange\"));\n    }\n\n    this.dispatchEvent(new _Event(\"readystatechange\"));\n\n    if (this.readyState == FakeXMLHttpRequest.DONE) {\n      this.dispatchEvent(new _Event(\"load\", false, false, this));\n    }\n    if (this.readyState == FakeXMLHttpRequest.UNSENT || this.readyState == FakeXMLHttpRequest.DONE) {\n      this.dispatchEvent(new _Event(\"loadend\", false, false, this));\n    }\n  },\n\n\n  /*\n    Sets the FakeXMLHttpRequest object's response headers and\n    places the object into readyState 2\n  */\n  _setResponseHeaders: function _setResponseHeaders(headers) {\n    this.responseHeaders = {};\n\n    for (var header in headers) {\n      if (headers.hasOwnProperty(header)) {\n          this.responseHeaders[header] = headers[header];\n      }\n    }\n\n    if (this.forceMimeType) {\n      this.responseHeaders['Content-Type'] = this.forceMimeType;\n    }\n\n    if (this.async) {\n      this._readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED);\n    } else {\n      this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED;\n    }\n  },\n\n  /*\n    Sets the FakeXMLHttpRequest object's response body and\n    if body text is XML, sets responseXML to parsed document\n    object\n  */\n  _setResponseBody: function _setResponseBody(body) {\n    verifyRequestSent(this);\n    verifyHeadersReceived(this);\n    verifyResponseBodyType(body);\n\n    var chunkSize = this.chunkSize || 10;\n    var index = 0;\n    this.responseText = \"\";\n    this.response = this.responseText;\n\n    do {\n      if (this.async) {\n        this._readyStateChange(FakeXMLHttpRequest.LOADING);\n      }\n\n      this.responseText += body.substring(index, index + chunkSize);\n      this.response = this.responseText;\n      index += chunkSize;\n    } while (index < body.length);\n\n    var type = this.getResponseHeader(\"Content-Type\");\n\n    if (this.responseText && (!type || /(text\\/xml)|(application\\/xml)|(\\+xml)/.test(type))) {\n      try {\n        this.responseXML = parseXML(this.responseText);\n      } catch (e) {\n        // Unable to parse XML - no biggie\n      }\n    }\n\n    if (this.async) {\n      this._readyStateChange(FakeXMLHttpRequest.DONE);\n    } else {\n      this.readyState = FakeXMLHttpRequest.DONE;\n    }\n  },\n\n  /*\n    Forces a response on to the FakeXMLHttpRequest object.\n\n    This is the public API for faking responses. This function\n    takes a number status, headers object, and string body:\n\n    ```\n    xhr.respond(404, {Content-Type: 'text/plain'}, \"Sorry. This object was not found.\")\n\n    ```\n  */\n  respond: function respond(status, headers, body) {\n    this._setResponseHeaders(headers || {});\n    this.status = typeof status == \"number\" ? status : 200;\n    this.statusText = httpStatusCodes[this.status];\n    this._setResponseBody(body || \"\");\n  }\n};\n\nfor (var property in FakeXMLHttpRequestProto) {\n  FakeXMLHttpRequest.prototype[property] = FakeXMLHttpRequestProto[property];\n}\n\nfunction verifyState(xhr) {\n  if (xhr.readyState !== FakeXMLHttpRequest.OPENED) {\n    throw new Error(\"INVALID_STATE_ERR\");\n  }\n\n  if (xhr.sendFlag) {\n    throw new Error(\"INVALID_STATE_ERR\");\n  }\n}\n\n\nfunction verifyRequestSent(xhr) {\n    if (xhr.readyState == FakeXMLHttpRequest.DONE) {\n        throw new Error(\"Request done\");\n    }\n}\n\nfunction verifyHeadersReceived(xhr) {\n    if (xhr.async && xhr.readyState != FakeXMLHttpRequest.HEADERS_RECEIVED) {\n        throw new Error(\"No headers received\");\n    }\n}\n\nfunction verifyResponseBodyType(body) {\n    if (typeof body != \"string\") {\n        var error = new Error(\"Attempted to respond to fake XMLHttpRequest with \" +\n                             body + \", which is not a string.\");\n        error.name = \"InvalidBodyException\";\n        throw error;\n    }\n}\nexport default FakeXMLHttpRequest;\n","import RouteRecognizer from 'route-recognizer';\nimport FakeXMLHttpRequest from 'fake-xml-http-request';\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nvar requiresPort = function required(port, protocol) {\n  protocol = protocol.split(':')[0];\n  port = +port;\n\n  if (!port) return false;\n\n  switch (protocol) {\n    case 'http':\n    case 'ws':\n    return port !== 80;\n\n    case 'https':\n    case 'wss':\n    return port !== 443;\n\n    case 'ftp':\n    return port !== 21;\n\n    case 'gopher':\n    return port !== 70;\n\n    case 'file':\n    return false;\n  }\n\n  return port !== 0;\n};\n\nvar has = Object.prototype.hasOwnProperty\n  , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n  try {\n    return decodeURIComponent(input.replace(/\\+/g, ' '));\n  } catch (e) {\n    return null;\n  }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n  var parser = /([^=?&]+)=?([^&]*)/g\n    , result = {}\n    , part;\n\n  while (part = parser.exec(query)) {\n    var key = decode(part[1])\n      , value = decode(part[2]);\n\n    //\n    // Prevent overriding of existing properties. This ensures that build-in\n    // methods like `toString` or __proto__ are not overriden by malicious\n    // querystrings.\n    //\n    // In the case if failed decoding, we want to omit the key/value pairs\n    // from the result.\n    //\n    if (key === null || value === null || key in result) continue;\n    result[key] = value;\n  }\n\n  return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n  prefix = prefix || '';\n\n  var pairs = []\n    , value\n    , key;\n\n  //\n  // Optionally prefix with a '?' if needed\n  //\n  if ('string' !== typeof prefix) prefix = '?';\n\n  for (key in obj) {\n    if (has.call(obj, key)) {\n      value = obj[key];\n\n      //\n      // Edge cases where we actually want to encode the value to an empty\n      // string instead of the stringified value.\n      //\n      if (!value && (value === null || value === undef || isNaN(value))) {\n        value = '';\n      }\n\n      key = encodeURIComponent(key);\n      value = encodeURIComponent(value);\n\n      //\n      // If we failed to encode the strings, we should bail out as we don't\n      // want to add invalid strings to the query.\n      //\n      if (key === null || value === null) continue;\n      pairs.push(key +'='+ value);\n    }\n  }\n\n  return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nvar stringify = querystringify;\nvar parse = querystring;\n\nvar querystringify_1 = {\n\tstringify: stringify,\n\tparse: parse\n};\n\nvar slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n  , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\\\/]+)?([\\S\\s]*)/i\n  , windowsDriveLetter = /^[a-zA-Z]:/\n  , whitespace = '[\\\\x09\\\\x0A\\\\x0B\\\\x0C\\\\x0D\\\\x20\\\\xA0\\\\u1680\\\\u180E\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200A\\\\u202F\\\\u205F\\\\u3000\\\\u2028\\\\u2029\\\\uFEFF]'\n  , left = new RegExp('^'+ whitespace +'+');\n\n/**\n * Trim a given string.\n *\n * @param {String} str String to trim.\n * @public\n */\nfunction trimLeft(str) {\n  return (str ? str : '').toString().replace(left, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n *    indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n *    the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n  ['#', 'hash'],                        // Extract from the back.\n  ['?', 'query'],                       // Extract from the back.\n  function sanitize(address, url) {     // Sanitize what is left of the address\n    return isSpecial(url.protocol) ? address.replace(/\\\\/g, '/') : address;\n  },\n  ['/', 'pathname'],                    // Extract from the back.\n  ['@', 'auth', 1],                     // Extract from the front.\n  [NaN, 'host', undefined, 1, 1],       // Set left over value.\n  [/:(\\d+)$/, 'port', undefined, 1],    // RegExp the back.\n  [NaN, 'hostname', undefined, 1, 1]    // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n  var globalVar;\n\n  if (typeof window !== 'undefined') globalVar = window;\n  else if (typeof commonjsGlobal !== 'undefined') globalVar = commonjsGlobal;\n  else if (typeof self !== 'undefined') globalVar = self;\n  else globalVar = {};\n\n  var location = globalVar.location || {};\n  loc = loc || location;\n\n  var finaldestination = {}\n    , type = typeof loc\n    , key;\n\n  if ('blob:' === loc.protocol) {\n    finaldestination = new Url(unescape(loc.pathname), {});\n  } else if ('string' === type) {\n    finaldestination = new Url(loc, {});\n    for (key in ignore) delete finaldestination[key];\n  } else if ('object' === type) {\n    for (key in loc) {\n      if (key in ignore) continue;\n      finaldestination[key] = loc[key];\n    }\n\n    if (finaldestination.slashes === undefined) {\n      finaldestination.slashes = slashes.test(loc.href);\n    }\n  }\n\n  return finaldestination;\n}\n\n/**\n * Check whether a protocol scheme is special.\n *\n * @param {String} The protocol scheme of the URL\n * @return {Boolean} `true` if the protocol scheme is special, else `false`\n * @private\n */\nfunction isSpecial(scheme) {\n  return (\n    scheme === 'file:' ||\n    scheme === 'ftp:' ||\n    scheme === 'http:' ||\n    scheme === 'https:' ||\n    scheme === 'ws:' ||\n    scheme === 'wss:'\n  );\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @param {Object} location\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address, location) {\n  address = trimLeft(address);\n  location = location || {};\n\n  var match = protocolre.exec(address);\n  var protocol = match[1] ? match[1].toLowerCase() : '';\n  var forwardSlashes = !!match[2];\n  var otherSlashes = !!match[3];\n  var slashesCount = 0;\n  var rest;\n\n  if (forwardSlashes) {\n    if (otherSlashes) {\n      rest = match[2] + match[3] + match[4];\n      slashesCount = match[2].length + match[3].length;\n    } else {\n      rest = match[2] + match[4];\n      slashesCount = match[2].length;\n    }\n  } else {\n    if (otherSlashes) {\n      rest = match[3] + match[4];\n      slashesCount = match[3].length;\n    } else {\n      rest = match[4];\n    }\n  }\n\n  if (protocol === 'file:') {\n    if (slashesCount >= 2) {\n      rest = rest.slice(2);\n    }\n  } else if (isSpecial(protocol)) {\n    rest = match[4];\n  } else if (protocol) {\n    if (forwardSlashes) {\n      rest = rest.slice(2);\n    }\n  } else if (slashesCount >= 2 && isSpecial(location.protocol)) {\n    rest = match[4];\n  }\n\n  return {\n    protocol: protocol,\n    slashes: forwardSlashes || isSpecial(protocol),\n    slashesCount: slashesCount,\n    rest: rest\n  };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n  if (relative === '') return base;\n\n  var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n    , i = path.length\n    , last = path[i - 1]\n    , unshift = false\n    , up = 0;\n\n  while (i--) {\n    if (path[i] === '.') {\n      path.splice(i, 1);\n    } else if (path[i] === '..') {\n      path.splice(i, 1);\n      up++;\n    } else if (up) {\n      if (i === 0) unshift = true;\n      path.splice(i, 1);\n      up--;\n    }\n  }\n\n  if (unshift) path.unshift('');\n  if (last === '.' || last === '..') path.push('');\n\n  return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n  address = trimLeft(address);\n\n  if (!(this instanceof Url)) {\n    return new Url(address, location, parser);\n  }\n\n  var relative, extracted, parse, instruction, index, key\n    , instructions = rules.slice()\n    , type = typeof location\n    , url = this\n    , i = 0;\n\n  //\n  // The following if statements allows this module two have compatibility with\n  // 2 different API:\n  //\n  // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n  //    where the boolean indicates that the query string should also be parsed.\n  //\n  // 2. The `URL` interface of the browser which accepts a URL, object as\n  //    arguments. The supplied object will be used as default values / fall-back\n  //    for relative paths.\n  //\n  if ('object' !== type && 'string' !== type) {\n    parser = location;\n    location = null;\n  }\n\n  if (parser && 'function' !== typeof parser) parser = querystringify_1.parse;\n\n  location = lolcation(location);\n\n  //\n  // Extract protocol information before running the instructions.\n  //\n  extracted = extractProtocol(address || '', location);\n  relative = !extracted.protocol && !extracted.slashes;\n  url.slashes = extracted.slashes || relative && location.slashes;\n  url.protocol = extracted.protocol || location.protocol || '';\n  address = extracted.rest;\n\n  //\n  // When the authority component is absent the URL starts with a path\n  // component.\n  //\n  if (\n    extracted.protocol === 'file:' && (\n      extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||\n    (!extracted.slashes &&\n      (extracted.protocol ||\n        extracted.slashesCount < 2 ||\n        !isSpecial(url.protocol)))\n  ) {\n    instructions[3] = [/(.*)/, 'pathname'];\n  }\n\n  for (; i < instructions.length; i++) {\n    instruction = instructions[i];\n\n    if (typeof instruction === 'function') {\n      address = instruction(address, url);\n      continue;\n    }\n\n    parse = instruction[0];\n    key = instruction[1];\n\n    if (parse !== parse) {\n      url[key] = address;\n    } else if ('string' === typeof parse) {\n      if (~(index = address.indexOf(parse))) {\n        if ('number' === typeof instruction[2]) {\n          url[key] = address.slice(0, index);\n          address = address.slice(index + instruction[2]);\n        } else {\n          url[key] = address.slice(index);\n          address = address.slice(0, index);\n        }\n      }\n    } else if ((index = parse.exec(address))) {\n      url[key] = index[1];\n      address = address.slice(0, index.index);\n    }\n\n    url[key] = url[key] || (\n      relative && instruction[3] ? location[key] || '' : ''\n    );\n\n    //\n    // Hostname, host and protocol should be lowercased so they can be used to\n    // create a proper `origin`.\n    //\n    if (instruction[4]) url[key] = url[key].toLowerCase();\n  }\n\n  //\n  // Also parse the supplied query string in to an object. If we're supplied\n  // with a custom parser as function use that instead of the default build-in\n  // parser.\n  //\n  if (parser) url.query = parser(url.query);\n\n  //\n  // If the URL is relative, resolve the pathname against the base URL.\n  //\n  if (\n      relative\n    && location.slashes\n    && url.pathname.charAt(0) !== '/'\n    && (url.pathname !== '' || location.pathname !== '')\n  ) {\n    url.pathname = resolve(url.pathname, location.pathname);\n  }\n\n  //\n  // Default to a / for pathname if none exists. This normalizes the URL\n  // to always have a /\n  //\n  if (url.pathname.charAt(0) !== '/' && isSpecial(url.protocol)) {\n    url.pathname = '/' + url.pathname;\n  }\n\n  //\n  // We should not add port numbers if they are already the default port number\n  // for a given protocol. As the host also contains the port number we're going\n  // override it with the hostname which contains no port number.\n  //\n  if (!requiresPort(url.port, url.protocol)) {\n    url.host = url.hostname;\n    url.port = '';\n  }\n\n  //\n  // Parse down the `auth` for the username and password.\n  //\n  url.username = url.password = '';\n  if (url.auth) {\n    instruction = url.auth.split(':');\n    url.username = instruction[0] || '';\n    url.password = instruction[1] || '';\n  }\n\n  url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  //\n  // The href is just the compiled result.\n  //\n  url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part          Property we need to adjust.\n * @param {Mixed} value          The newly assigned value.\n * @param {Boolean|Function} fn  When setting the query, it will be the function\n *                               used to parse the query.\n *                               When setting the protocol, double slash will be\n *                               removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n  var url = this;\n\n  switch (part) {\n    case 'query':\n      if ('string' === typeof value && value.length) {\n        value = (fn || querystringify_1.parse)(value);\n      }\n\n      url[part] = value;\n      break;\n\n    case 'port':\n      url[part] = value;\n\n      if (!requiresPort(value, url.protocol)) {\n        url.host = url.hostname;\n        url[part] = '';\n      } else if (value) {\n        url.host = url.hostname +':'+ value;\n      }\n\n      break;\n\n    case 'hostname':\n      url[part] = value;\n\n      if (url.port) value += ':'+ url.port;\n      url.host = value;\n      break;\n\n    case 'host':\n      url[part] = value;\n\n      if (/:\\d+$/.test(value)) {\n        value = value.split(':');\n        url.port = value.pop();\n        url.hostname = value.join(':');\n      } else {\n        url.hostname = value;\n        url.port = '';\n      }\n\n      break;\n\n    case 'protocol':\n      url.protocol = value.toLowerCase();\n      url.slashes = !fn;\n      break;\n\n    case 'pathname':\n    case 'hash':\n      if (value) {\n        var char = part === 'pathname' ? '/' : '#';\n        url[part] = value.charAt(0) !== char ? char + value : value;\n      } else {\n        url[part] = value;\n      }\n      break;\n\n    default:\n      url[part] = value;\n  }\n\n  for (var i = 0; i < rules.length; i++) {\n    var ins = rules[i];\n\n    if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n  }\n\n  url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  url.href = url.toString();\n\n  return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n  if (!stringify || 'function' !== typeof stringify) stringify = querystringify_1.stringify;\n\n  var query\n    , url = this\n    , protocol = url.protocol;\n\n  if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n  var result = protocol + (url.slashes || isSpecial(url.protocol) ? '//' : '');\n\n  if (url.username) {\n    result += url.username;\n    if (url.password) result += ':'+ url.password;\n    result += '@';\n  }\n\n  result += url.host + url.pathname;\n\n  query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n  if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n  if (url.hash) result += url.hash;\n\n  return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = querystringify_1;\n\nvar urlParse = Url;\n\n/**\n * parseURL - decompose a URL into its parts\n * @param  {String} url a URL\n * @return {Object} parts of the URL, including the following\n *\n * 'https://www.yahoo.com:1234/mypage?test=yes#abc'\n *\n * {\n *   host: 'www.yahoo.com:1234',\n *   protocol: 'https:',\n *   search: '?test=yes',\n *   hash: '#abc',\n *   href: 'https://www.yahoo.com:1234/mypage?test=yes#abc',\n *   pathname: '/mypage',\n *   fullpath: '/mypage?test=yes'\n * }\n */\nfunction parseURL(url) {\n    var parsedUrl = new urlParse(url);\n    if (!parsedUrl.host) {\n        // eslint-disable-next-line no-self-assign\n        parsedUrl.href = parsedUrl.href; // IE: load the host and protocol\n    }\n    var pathname = parsedUrl.pathname;\n    if (pathname.charAt(0) !== '/') {\n        pathname = '/' + pathname; // IE: prepend leading slash\n    }\n    var host = parsedUrl.host;\n    if (parsedUrl.port === '80' || parsedUrl.port === '443') {\n        host = parsedUrl.hostname; // IE: remove default port\n    }\n    return {\n        host: host,\n        protocol: parsedUrl.protocol,\n        search: parsedUrl.query,\n        hash: parsedUrl.hash,\n        href: parsedUrl.href,\n        pathname: pathname,\n        fullpath: pathname + (parsedUrl.query || '') + (parsedUrl.hash || '')\n    };\n}\n\n/**\n * Registry\n *\n * A registry is a map of HTTP verbs to route recognizers.\n */\nvar Registry = /** @class */ (function () {\n    function Registry( /* host */) {\n        // Herein we keep track of RouteRecognizer instances\n        // keyed by HTTP method. Feel free to add more as needed.\n        this.verbs = {\n            GET: new RouteRecognizer(),\n            PUT: new RouteRecognizer(),\n            POST: new RouteRecognizer(),\n            DELETE: new RouteRecognizer(),\n            PATCH: new RouteRecognizer(),\n            HEAD: new RouteRecognizer(),\n            OPTIONS: new RouteRecognizer()\n        };\n    }\n    return Registry;\n}());\n\n/**\n * Hosts\n *\n * a map of hosts to Registries, ultimately allowing\n * a per-host-and-port, per HTTP verb lookup of RouteRecognizers\n */\nvar Hosts = /** @class */ (function () {\n    function Hosts() {\n        this.registries = {};\n    }\n    /**\n     * Hosts#forURL - retrieve a map of HTTP verbs to RouteRecognizers\n     *                for a given URL\n     *\n     * @param  {String} url a URL\n     * @return {Registry}   a map of HTTP verbs to RouteRecognizers\n     *                      corresponding to the provided URL's\n     *                      hostname and port\n     */\n    Hosts.prototype.forURL = function (url) {\n        var host = parseURL(url).host;\n        var registry = this.registries[host];\n        if (registry === undefined) {\n            registry = (this.registries[host] = new Registry( /*host*/));\n        }\n        return registry.verbs;\n    };\n    return Hosts;\n}());\n\nvar global$1 =\n  (typeof globalThis !== 'undefined' && globalThis) ||\n  (typeof self !== 'undefined' && self) ||\n  (typeof global$1 !== 'undefined' && global$1);\n\nvar support = {\n  searchParams: 'URLSearchParams' in global$1,\n  iterable: 'Symbol' in global$1 && 'iterator' in Symbol,\n  blob:\n    'FileReader' in global$1 &&\n    'Blob' in global$1 &&\n    (function() {\n      try {\n        new Blob();\n        return true\n      } catch (e) {\n        return false\n      }\n    })(),\n  formData: 'FormData' in global$1,\n  arrayBuffer: 'ArrayBuffer' in global$1\n};\n\nfunction isDataView(obj) {\n  return obj && DataView.prototype.isPrototypeOf(obj)\n}\n\nif (support.arrayBuffer) {\n  var viewClasses = [\n    '[object Int8Array]',\n    '[object Uint8Array]',\n    '[object Uint8ClampedArray]',\n    '[object Int16Array]',\n    '[object Uint16Array]',\n    '[object Int32Array]',\n    '[object Uint32Array]',\n    '[object Float32Array]',\n    '[object Float64Array]'\n  ];\n\n  var isArrayBufferView =\n    ArrayBuffer.isView ||\n    function(obj) {\n      return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n    };\n}\n\nfunction normalizeName(name) {\n  if (typeof name !== 'string') {\n    name = String(name);\n  }\n  if (/[^a-z0-9\\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {\n    throw new TypeError('Invalid character in header field name: \"' + name + '\"')\n  }\n  return name.toLowerCase()\n}\n\nfunction normalizeValue(value) {\n  if (typeof value !== 'string') {\n    value = String(value);\n  }\n  return value\n}\n\n// Build a destructive iterator for the value list\nfunction iteratorFor(items) {\n  var iterator = {\n    next: function() {\n      var value = items.shift();\n      return {done: value === undefined, value: value}\n    }\n  };\n\n  if (support.iterable) {\n    iterator[Symbol.iterator] = function() {\n      return iterator\n    };\n  }\n\n  return iterator\n}\n\nfunction Headers(headers) {\n  this.map = {};\n\n  if (headers instanceof Headers) {\n    headers.forEach(function(value, name) {\n      this.append(name, value);\n    }, this);\n  } else if (Array.isArray(headers)) {\n    headers.forEach(function(header) {\n      this.append(header[0], header[1]);\n    }, this);\n  } else if (headers) {\n    Object.getOwnPropertyNames(headers).forEach(function(name) {\n      this.append(name, headers[name]);\n    }, this);\n  }\n}\n\nHeaders.prototype.append = function(name, value) {\n  name = normalizeName(name);\n  value = normalizeValue(value);\n  var oldValue = this.map[name];\n  this.map[name] = oldValue ? oldValue + ', ' + value : value;\n};\n\nHeaders.prototype['delete'] = function(name) {\n  delete this.map[normalizeName(name)];\n};\n\nHeaders.prototype.get = function(name) {\n  name = normalizeName(name);\n  return this.has(name) ? this.map[name] : null\n};\n\nHeaders.prototype.has = function(name) {\n  return this.map.hasOwnProperty(normalizeName(name))\n};\n\nHeaders.prototype.set = function(name, value) {\n  this.map[normalizeName(name)] = normalizeValue(value);\n};\n\nHeaders.prototype.forEach = function(callback, thisArg) {\n  for (var name in this.map) {\n    if (this.map.hasOwnProperty(name)) {\n      callback.call(thisArg, this.map[name], name, this);\n    }\n  }\n};\n\nHeaders.prototype.keys = function() {\n  var items = [];\n  this.forEach(function(value, name) {\n    items.push(name);\n  });\n  return iteratorFor(items)\n};\n\nHeaders.prototype.values = function() {\n  var items = [];\n  this.forEach(function(value) {\n    items.push(value);\n  });\n  return iteratorFor(items)\n};\n\nHeaders.prototype.entries = function() {\n  var items = [];\n  this.forEach(function(value, name) {\n    items.push([name, value]);\n  });\n  return iteratorFor(items)\n};\n\nif (support.iterable) {\n  Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n}\n\nfunction consumed(body) {\n  if (body.bodyUsed) {\n    return Promise.reject(new TypeError('Already read'))\n  }\n  body.bodyUsed = true;\n}\n\nfunction fileReaderReady(reader) {\n  return new Promise(function(resolve, reject) {\n    reader.onload = function() {\n      resolve(reader.result);\n    };\n    reader.onerror = function() {\n      reject(reader.error);\n    };\n  })\n}\n\nfunction readBlobAsArrayBuffer(blob) {\n  var reader = new FileReader();\n  var promise = fileReaderReady(reader);\n  reader.readAsArrayBuffer(blob);\n  return promise\n}\n\nfunction readBlobAsText(blob) {\n  var reader = new FileReader();\n  var promise = fileReaderReady(reader);\n  reader.readAsText(blob);\n  return promise\n}\n\nfunction readArrayBufferAsText(buf) {\n  var view = new Uint8Array(buf);\n  var chars = new Array(view.length);\n\n  for (var i = 0; i < view.length; i++) {\n    chars[i] = String.fromCharCode(view[i]);\n  }\n  return chars.join('')\n}\n\nfunction bufferClone(buf) {\n  if (buf.slice) {\n    return buf.slice(0)\n  } else {\n    var view = new Uint8Array(buf.byteLength);\n    view.set(new Uint8Array(buf));\n    return view.buffer\n  }\n}\n\nfunction Body() {\n  this.bodyUsed = false;\n\n  this._initBody = function(body) {\n    /*\n      fetch-mock wraps the Response object in an ES6 Proxy to\n      provide useful test harness features such as flush. However, on\n      ES5 browsers without fetch or Proxy support pollyfills must be used;\n      the proxy-pollyfill is unable to proxy an attribute unless it exists\n      on the object before the Proxy is created. This change ensures\n      Response.bodyUsed exists on the instance, while maintaining the\n      semantic of setting Request.bodyUsed in the constructor before\n      _initBody is called.\n    */\n    this.bodyUsed = this.bodyUsed;\n    this._bodyInit = body;\n    if (!body) {\n      this._bodyText = '';\n    } else if (typeof body === 'string') {\n      this._bodyText = body;\n    } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n      this._bodyBlob = body;\n    } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n      this._bodyFormData = body;\n    } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n      this._bodyText = body.toString();\n    } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n      this._bodyArrayBuffer = bufferClone(body.buffer);\n      // IE 10-11 can't handle a DataView body.\n      this._bodyInit = new Blob([this._bodyArrayBuffer]);\n    } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n      this._bodyArrayBuffer = bufferClone(body);\n    } else {\n      this._bodyText = body = Object.prototype.toString.call(body);\n    }\n\n    if (!this.headers.get('content-type')) {\n      if (typeof body === 'string') {\n        this.headers.set('content-type', 'text/plain;charset=UTF-8');\n      } else if (this._bodyBlob && this._bodyBlob.type) {\n        this.headers.set('content-type', this._bodyBlob.type);\n      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n        this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n      }\n    }\n  };\n\n  if (support.blob) {\n    this.blob = function() {\n      var rejected = consumed(this);\n      if (rejected) {\n        return rejected\n      }\n\n      if (this._bodyBlob) {\n        return Promise.resolve(this._bodyBlob)\n      } else if (this._bodyArrayBuffer) {\n        return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n      } else if (this._bodyFormData) {\n        throw new Error('could not read FormData body as blob')\n      } else {\n        return Promise.resolve(new Blob([this._bodyText]))\n      }\n    };\n\n    this.arrayBuffer = function() {\n      if (this._bodyArrayBuffer) {\n        var isConsumed = consumed(this);\n        if (isConsumed) {\n          return isConsumed\n        }\n        if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n          return Promise.resolve(\n            this._bodyArrayBuffer.buffer.slice(\n              this._bodyArrayBuffer.byteOffset,\n              this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength\n            )\n          )\n        } else {\n          return Promise.resolve(this._bodyArrayBuffer)\n        }\n      } else {\n        return this.blob().then(readBlobAsArrayBuffer)\n      }\n    };\n  }\n\n  this.text = function() {\n    var rejected = consumed(this);\n    if (rejected) {\n      return rejected\n    }\n\n    if (this._bodyBlob) {\n      return readBlobAsText(this._bodyBlob)\n    } else if (this._bodyArrayBuffer) {\n      return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n    } else if (this._bodyFormData) {\n      throw new Error('could not read FormData body as text')\n    } else {\n      return Promise.resolve(this._bodyText)\n    }\n  };\n\n  if (support.formData) {\n    this.formData = function() {\n      return this.text().then(decode$1)\n    };\n  }\n\n  this.json = function() {\n    return this.text().then(JSON.parse)\n  };\n\n  return this\n}\n\n// HTTP methods whose capitalization should be normalized\nvar methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\nfunction normalizeMethod(method) {\n  var upcased = method.toUpperCase();\n  return methods.indexOf(upcased) > -1 ? upcased : method\n}\n\nfunction Request(input, options) {\n  if (!(this instanceof Request)) {\n    throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n  }\n\n  options = options || {};\n  var body = options.body;\n\n  if (input instanceof Request) {\n    if (input.bodyUsed) {\n      throw new TypeError('Already read')\n    }\n    this.url = input.url;\n    this.credentials = input.credentials;\n    if (!options.headers) {\n      this.headers = new Headers(input.headers);\n    }\n    this.method = input.method;\n    this.mode = input.mode;\n    this.signal = input.signal;\n    if (!body && input._bodyInit != null) {\n      body = input._bodyInit;\n      input.bodyUsed = true;\n    }\n  } else {\n    this.url = String(input);\n  }\n\n  this.credentials = options.credentials || this.credentials || 'same-origin';\n  if (options.headers || !this.headers) {\n    this.headers = new Headers(options.headers);\n  }\n  this.method = normalizeMethod(options.method || this.method || 'GET');\n  this.mode = options.mode || this.mode || null;\n  this.signal = options.signal || this.signal;\n  this.referrer = null;\n\n  if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n    throw new TypeError('Body not allowed for GET or HEAD requests')\n  }\n  this._initBody(body);\n\n  if (this.method === 'GET' || this.method === 'HEAD') {\n    if (options.cache === 'no-store' || options.cache === 'no-cache') {\n      // Search for a '_' parameter in the query string\n      var reParamSearch = /([?&])_=[^&]*/;\n      if (reParamSearch.test(this.url)) {\n        // If it already exists then set the value with the current time\n        this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime());\n      } else {\n        // Otherwise add a new '_' parameter to the end with the current time\n        var reQueryString = /\\?/;\n        this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime();\n      }\n    }\n  }\n}\n\nRequest.prototype.clone = function() {\n  return new Request(this, {body: this._bodyInit})\n};\n\nfunction decode$1(body) {\n  var form = new FormData();\n  body\n    .trim()\n    .split('&')\n    .forEach(function(bytes) {\n      if (bytes) {\n        var split = bytes.split('=');\n        var name = split.shift().replace(/\\+/g, ' ');\n        var value = split.join('=').replace(/\\+/g, ' ');\n        form.append(decodeURIComponent(name), decodeURIComponent(value));\n      }\n    });\n  return form\n}\n\nfunction parseHeaders(rawHeaders) {\n  var headers = new Headers();\n  // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n  // https://tools.ietf.org/html/rfc7230#section-3.2\n  var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n  // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n  // https://github.com/github/fetch/issues/748\n  // https://github.com/zloirock/core-js/issues/751\n  preProcessedHeaders\n    .split('\\r')\n    .map(function(header) {\n      return header.indexOf('\\n') === 0 ? header.substr(1, header.length) : header\n    })\n    .forEach(function(line) {\n      var parts = line.split(':');\n      var key = parts.shift().trim();\n      if (key) {\n        var value = parts.join(':').trim();\n        headers.append(key, value);\n      }\n    });\n  return headers\n}\n\nBody.call(Request.prototype);\n\nfunction Response(bodyInit, options) {\n  if (!(this instanceof Response)) {\n    throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n  }\n  if (!options) {\n    options = {};\n  }\n\n  this.type = 'default';\n  this.status = options.status === undefined ? 200 : options.status;\n  this.ok = this.status >= 200 && this.status < 300;\n  this.statusText = options.statusText === undefined ? '' : '' + options.statusText;\n  this.headers = new Headers(options.headers);\n  this.url = options.url || '';\n  this._initBody(bodyInit);\n}\n\nBody.call(Response.prototype);\n\nResponse.prototype.clone = function() {\n  return new Response(this._bodyInit, {\n    status: this.status,\n    statusText: this.statusText,\n    headers: new Headers(this.headers),\n    url: this.url\n  })\n};\n\nResponse.error = function() {\n  var response = new Response(null, {status: 0, statusText: ''});\n  response.type = 'error';\n  return response\n};\n\nvar redirectStatuses = [301, 302, 303, 307, 308];\n\nResponse.redirect = function(url, status) {\n  if (redirectStatuses.indexOf(status) === -1) {\n    throw new RangeError('Invalid status code')\n  }\n\n  return new Response(null, {status: status, headers: {location: url}})\n};\n\nvar DOMException = global$1.DOMException;\ntry {\n  new DOMException();\n} catch (err) {\n  DOMException = function(message, name) {\n    this.message = message;\n    this.name = name;\n    var error = Error(message);\n    this.stack = error.stack;\n  };\n  DOMException.prototype = Object.create(Error.prototype);\n  DOMException.prototype.constructor = DOMException;\n}\n\nfunction fetch(input, init) {\n  return new Promise(function(resolve, reject) {\n    var request = new Request(input, init);\n\n    if (request.signal && request.signal.aborted) {\n      return reject(new DOMException('Aborted', 'AbortError'))\n    }\n\n    var xhr = new XMLHttpRequest();\n\n    function abortXhr() {\n      xhr.abort();\n    }\n\n    xhr.onload = function() {\n      var options = {\n        status: xhr.status,\n        statusText: xhr.statusText,\n        headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n      };\n      options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n      var body = 'response' in xhr ? xhr.response : xhr.responseText;\n      setTimeout(function() {\n        resolve(new Response(body, options));\n      }, 0);\n    };\n\n    xhr.onerror = function() {\n      setTimeout(function() {\n        reject(new TypeError('Network request failed'));\n      }, 0);\n    };\n\n    xhr.ontimeout = function() {\n      setTimeout(function() {\n        reject(new TypeError('Network request failed'));\n      }, 0);\n    };\n\n    xhr.onabort = function() {\n      setTimeout(function() {\n        reject(new DOMException('Aborted', 'AbortError'));\n      }, 0);\n    };\n\n    function fixUrl(url) {\n      try {\n        return url === '' && global$1.location.href ? global$1.location.href : url\n      } catch (e) {\n        return url\n      }\n    }\n\n    xhr.open(request.method, fixUrl(request.url), true);\n\n    if (request.credentials === 'include') {\n      xhr.withCredentials = true;\n    } else if (request.credentials === 'omit') {\n      xhr.withCredentials = false;\n    }\n\n    if ('responseType' in xhr) {\n      if (support.blob) {\n        xhr.responseType = 'blob';\n      } else if (\n        support.arrayBuffer &&\n        request.headers.get('Content-Type') &&\n        request.headers.get('Content-Type').indexOf('application/octet-stream') !== -1\n      ) {\n        xhr.responseType = 'arraybuffer';\n      }\n    }\n\n    if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers)) {\n      Object.getOwnPropertyNames(init.headers).forEach(function(name) {\n        xhr.setRequestHeader(name, normalizeValue(init.headers[name]));\n      });\n    } else {\n      request.headers.forEach(function(value, name) {\n        xhr.setRequestHeader(name, value);\n      });\n    }\n\n    if (request.signal) {\n      request.signal.addEventListener('abort', abortXhr);\n\n      xhr.onreadystatechange = function() {\n        // DONE (success or failure)\n        if (xhr.readyState === 4) {\n          request.signal.removeEventListener('abort', abortXhr);\n        }\n      };\n    }\n\n    xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n  })\n}\n\nfetch.polyfill = true;\n\nif (!global$1.fetch) {\n  global$1.fetch = fetch;\n  global$1.Headers = Headers;\n  global$1.Request = Request;\n  global$1.Response = Response;\n}\n\nvar FakeFetch = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tHeaders: Headers,\n\tRequest: Request,\n\tResponse: Response,\n\tget DOMException () { return DOMException; },\n\tfetch: fetch\n});\n\nfunction createPassthrough(fakeXHR, nativeXMLHttpRequest) {\n    // event types to handle on the xhr\n    var evts = ['error', 'timeout', 'abort', 'readystatechange'];\n    // event types to handle on the xhr.upload\n    var uploadEvents = [];\n    // properties to copy from the native xhr to fake xhr\n    var lifecycleProps = [\n        'readyState',\n        'responseText',\n        'response',\n        'responseXML',\n        'responseURL',\n        'status',\n        'statusText',\n    ];\n    var xhr = (fakeXHR._passthroughRequest = new nativeXMLHttpRequest());\n    xhr.open(fakeXHR.method, fakeXHR.url, fakeXHR.async, fakeXHR.username, fakeXHR.password);\n    if (fakeXHR.responseType === 'arraybuffer') {\n        lifecycleProps = ['readyState', 'response', 'status', 'statusText'];\n        xhr.responseType = fakeXHR.responseType;\n    }\n    // use onload if the browser supports it\n    if ('onload' in xhr) {\n        evts.push('load');\n    }\n    // add progress event for async calls\n    // avoid using progress events for sync calls, they will hang https://bugs.webkit.org/show_bug.cgi?id=40996.\n    if (fakeXHR.async && fakeXHR.responseType !== 'arraybuffer') {\n        evts.push('progress');\n        uploadEvents.push('progress');\n    }\n    // update `propertyNames` properties from `fromXHR` to `toXHR`\n    function copyLifecycleProperties(propertyNames, fromXHR, toXHR) {\n        for (var i = 0; i < propertyNames.length; i++) {\n            var prop = propertyNames[i];\n            if (prop in fromXHR) {\n                toXHR[prop] = fromXHR[prop];\n            }\n        }\n    }\n    // fire fake event on `eventable`\n    function dispatchEvent(eventable, eventType, event) {\n        eventable.dispatchEvent(event);\n        if (eventable['on' + eventType]) {\n            eventable['on' + eventType](event);\n        }\n    }\n    // set the on- handler on the native xhr for the given eventType\n    function createHandler(eventType) {\n        xhr['on' + eventType] = function (event) {\n            copyLifecycleProperties(lifecycleProps, xhr, fakeXHR);\n            dispatchEvent(fakeXHR, eventType, event);\n        };\n    }\n    // set the on- handler on the native xhr's `upload` property for\n    // the given eventType\n    function createUploadHandler(eventType) {\n        if (xhr.upload && fakeXHR.upload && fakeXHR.upload['on' + eventType]) {\n            xhr.upload['on' + eventType] = function (event) {\n                dispatchEvent(fakeXHR.upload, eventType, event);\n            };\n        }\n    }\n    var i;\n    for (i = 0; i < evts.length; i++) {\n        createHandler(evts[i]);\n    }\n    for (i = 0; i < uploadEvents.length; i++) {\n        createUploadHandler(uploadEvents[i]);\n    }\n    if (fakeXHR.async) {\n        xhr.timeout = fakeXHR.timeout;\n        xhr.withCredentials = fakeXHR.withCredentials;\n    }\n    // XMLHttpRequest.timeout default initializes to 0, and is not allowed to be used for\n    // synchronous XMLHttpRequests requests in a document environment. However, when a XHR\n    // polyfill does not sets the timeout value, it will throw in React Native environment.\n    // TODO:\n    // synchronous XHR is deprecated, make async the default as XMLHttpRequest.open(),\n    // and throw error if sync XHR has timeout not 0\n    if (!xhr.timeout && xhr.timeout !== 0) {\n        xhr.timeout = 0; // default XMLHttpRequest timeout\n    }\n    for (var h in fakeXHR.requestHeaders) {\n        xhr.setRequestHeader(h, fakeXHR.requestHeaders[h]);\n    }\n    return xhr;\n}\n\nfunction interceptor(ctx) {\n    function FakeRequest() {\n        // super()\n        FakeXMLHttpRequest.call(this);\n    }\n    FakeRequest.prototype = Object.create(FakeXMLHttpRequest.prototype);\n    FakeRequest.prototype.constructor = FakeRequest;\n    // extend\n    FakeRequest.prototype.send = function send() {\n        this.sendArguments = arguments;\n        if (!ctx.pretender.running) {\n            throw new Error('You shut down a Pretender instance while there was a pending request. ' +\n                'That request just tried to complete. Check to see if you accidentally shut down ' +\n                'a pretender earlier than you intended to');\n        }\n        FakeXMLHttpRequest.prototype.send.apply(this, arguments);\n        if (ctx.pretender.checkPassthrough(this)) {\n            this.passthrough();\n        }\n        else {\n            ctx.pretender.handleRequest(this);\n        }\n    };\n    FakeRequest.prototype.passthrough = function passthrough() {\n        if (!this.sendArguments) {\n            throw new Error('You attempted to passthrough a FakeRequest that was never sent. ' +\n                'Call `.send()` on the original request first');\n        }\n        var xhr = createPassthrough(this, ctx.pretender._nativeXMLHttpRequest);\n        xhr.send.apply(xhr, this.sendArguments);\n        return xhr;\n    };\n    FakeRequest.prototype._passthroughCheck = function (method, args) {\n        if (this._passthroughRequest) {\n            return this._passthroughRequest[method].apply(this._passthroughRequest, args);\n        }\n        return FakeXMLHttpRequest.prototype[method].apply(this, args);\n    };\n    FakeRequest.prototype.abort = function abort() {\n        return this._passthroughCheck('abort', arguments);\n    };\n    FakeRequest.prototype.getResponseHeader = function getResponseHeader() {\n        return this._passthroughCheck('getResponseHeader', arguments);\n    };\n    FakeRequest.prototype.getAllResponseHeaders = function getAllResponseHeaders() {\n        return this._passthroughCheck('getAllResponseHeaders', arguments);\n    };\n    if (ctx.pretender._nativeXMLHttpRequest.prototype._passthroughCheck) {\n        // eslint-disable-next-line no-console\n        console.warn('You created a second Pretender instance while there was already one running. ' +\n            'Running two Pretender servers at once will lead to unexpected results and will ' +\n            'be removed entirely in a future major version.' +\n            'Please call .shutdown() on your instances when you no longer need them to respond.');\n    }\n    return FakeRequest;\n}\n\nvar NoopArray = /** @class */ (function () {\n    function NoopArray() {\n        this.length = 0;\n    }\n    NoopArray.prototype.push = function () {\n        var _items = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            _items[_i] = arguments[_i];\n        }\n        return 0;\n    };\n    return NoopArray;\n}());\nfunction scheduleProgressEvent(request, startTime, totalTime) {\n    var totalSize = 0;\n    var body = request.requestBody;\n    if (body) {\n        if (body instanceof FormData) {\n            body.forEach(function (value) {\n                if (value instanceof File) {\n                    totalSize += value.size;\n                }\n                else {\n                    totalSize += value.length;\n                }\n            });\n        }\n        else {\n            // Support Blob, BufferSource, USVString, ArrayBufferView\n            totalSize = body.byteLength || body.size || body.length || 0;\n        }\n    }\n    setTimeout(function () {\n        if (!request.aborted && !request.status) {\n            var elapsedTime = new Date().getTime() - startTime.getTime();\n            var progressTransmitted = totalTime <= 0 ? 0 : (elapsedTime / totalTime) * totalSize;\n            // ProgressEvent expects loaded, total\n            // https://xhr.spec.whatwg.org/#interface-progressevent\n            request.upload._progress(true, progressTransmitted, totalSize);\n            request._progress(true, progressTransmitted, totalSize);\n            scheduleProgressEvent(request, startTime, totalTime);\n        }\n        else if (request.status) {\n            // we're done, send a final progress event with loaded === total\n            request.upload._progress(true, totalSize, totalSize);\n            request._progress(true, totalSize, totalSize);\n        }\n    }, 50);\n}\nfunction isArray(array) {\n    return Object.prototype.toString.call(array) === '[object Array]';\n}\nvar PASSTHROUGH = {};\nfunction verbify(verb) {\n    return function (path, handler, async) {\n        return this.register(verb, path, handler, async);\n    };\n}\nvar Pretender = /** @class */ (function () {\n    function Pretender() {\n        var _this = this;\n        this.hosts = new Hosts();\n        this.handlers = [];\n        this.get = verbify('GET');\n        this.post = verbify('POST');\n        this.put = verbify('PUT');\n        this.delete = verbify('DELETE');\n        this.patch = verbify('PATCH');\n        this.head = verbify('HEAD');\n        this.options = verbify('OPTIONS');\n        this.passthrough = PASSTHROUGH;\n        var lastArg = arguments[arguments.length - 1];\n        var options = typeof lastArg === 'object' ? lastArg : null;\n        var shouldNotTrack = options && options.trackRequests === false;\n        this.handledRequests = shouldNotTrack ? new NoopArray() : [];\n        this.passthroughRequests = shouldNotTrack ? new NoopArray() : [];\n        this.unhandledRequests = shouldNotTrack ? new NoopArray() : [];\n        this.requestReferences = [];\n        this.forcePassthrough = options && options.forcePassthrough === true;\n        this.disableUnhandled = options && options.disableUnhandled === true;\n        // reference the native XMLHttpRequest object so\n        // it can be restored later\n        this._nativeXMLHttpRequest = self.XMLHttpRequest;\n        this.running = false;\n        var ctx = { pretender: this };\n        this.ctx = ctx;\n        // capture xhr requests, channeling them into\n        // the route map.\n        self.XMLHttpRequest = interceptor(ctx);\n        // polyfill fetch when xhr is ready\n        this._fetchProps = FakeFetch\n            ? ['fetch', 'Headers', 'Request', 'Response']\n            : [];\n        this._fetchProps.forEach(function (name) {\n            _this['_native' + name] = self[name];\n            self[name] = FakeFetch[name];\n        }, this);\n        // 'start' the server\n        this.running = true;\n        // trigger the route map DSL.\n        var argLength = options ? arguments.length - 1 : arguments.length;\n        for (var i = 0; i < argLength; i++) {\n            this.map(arguments[i]);\n        }\n    }\n    Pretender.prototype.map = function (maps) {\n        maps.call(this);\n    };\n    Pretender.prototype.register = function (verb, url, handler, async) {\n        if (!handler) {\n            throw new Error('The function you tried passing to Pretender to handle ' +\n                verb +\n                ' ' +\n                url +\n                ' is undefined or missing.');\n        }\n        var handlerInstance = handler;\n        handlerInstance.numberOfCalls = 0;\n        handlerInstance.async = async;\n        this.handlers.push(handlerInstance);\n        var registry = this.hosts.forURL(url)[verb];\n        registry.add([\n            {\n                path: parseURL(url).fullpath,\n                handler: handlerInstance,\n            },\n        ]);\n        return handlerInstance;\n    };\n    Pretender.prototype.checkPassthrough = function (request) {\n        var verb = request.method.toUpperCase();\n        var path = parseURL(request.url).fullpath;\n        var recognized = this.hosts.forURL(request.url)[verb].recognize(path);\n        var match = recognized && recognized[0];\n        if ((match && match.handler === PASSTHROUGH) || this.forcePassthrough) {\n            this.passthroughRequests.push(request);\n            this.passthroughRequest(verb, path, request);\n            return true;\n        }\n        return false;\n    };\n    Pretender.prototype.handleRequest = function (request) {\n        var verb = request.method.toUpperCase();\n        var path = request.url;\n        var handler = this._handlerFor(verb, path, request);\n        if (handler) {\n            handler.handler.numberOfCalls++;\n            var async_1 = handler.handler.async;\n            this.handledRequests.push(request);\n            var pretender_1 = this;\n            var _handleRequest_1 = function (statusHeadersAndBody) {\n                if (!isArray(statusHeadersAndBody)) {\n                    var note = 'Remember to `return [status, headers, body];` in your route handler.';\n                    throw new Error('Nothing returned by handler for ' + path + '. ' + note);\n                }\n                var status = statusHeadersAndBody[0];\n                var headers = pretender_1.prepareHeaders(statusHeadersAndBody[1]);\n                var body = pretender_1.prepareBody(statusHeadersAndBody[2], headers);\n                pretender_1.handleResponse(request, async_1, function () {\n                    request.respond(status, headers, body);\n                    pretender_1.handledRequest(verb, path, request);\n                });\n            };\n            try {\n                var result = handler.handler(request);\n                if (result && typeof result.then === 'function') {\n                    // `result` is a promise, resolve it\n                    result.then(function (resolvedResult) {\n                        _handleRequest_1(resolvedResult);\n                    });\n                }\n                else {\n                    _handleRequest_1(result);\n                }\n            }\n            catch (error) {\n                this.erroredRequest(verb, path, request, error);\n                this.resolve(request);\n            }\n        }\n        else {\n            if (!this.disableUnhandled) {\n                this.unhandledRequests.push(request);\n                this.unhandledRequest(verb, path, request);\n            }\n        }\n    };\n    Pretender.prototype.handleResponse = function (request, strategy, callback) {\n        var delay = typeof strategy === 'function' ? strategy() : strategy;\n        delay = typeof delay === 'boolean' || typeof delay === 'number' ? delay : 0;\n        if (delay === false) {\n            callback();\n        }\n        else {\n            var pretender_2 = this;\n            pretender_2.requestReferences.push({\n                request: request,\n                callback: callback,\n            });\n            if (delay !== true) {\n                scheduleProgressEvent(request, new Date(), delay);\n                setTimeout(function () {\n                    pretender_2.resolve(request);\n                }, delay);\n            }\n        }\n    };\n    Pretender.prototype.resolve = function (request) {\n        for (var i = 0, len = this.requestReferences.length; i < len; i++) {\n            var res = this.requestReferences[i];\n            if (res.request === request) {\n                res.callback();\n                this.requestReferences.splice(i, 1);\n                break;\n            }\n        }\n    };\n    Pretender.prototype.requiresManualResolution = function (verb, path) {\n        var handler = this._handlerFor(verb.toUpperCase(), path, {});\n        if (!handler) {\n            return false;\n        }\n        var async = handler.handler.async;\n        return typeof async === 'function' ? async() === true : async === true;\n    };\n    Pretender.prototype.prepareBody = function (body, _headers) {\n        return body;\n    };\n    Pretender.prototype.prepareHeaders = function (headers) {\n        return headers;\n    };\n    Pretender.prototype.handledRequest = function (_verb, _path, _request) {\n        /* no-op */\n    };\n    Pretender.prototype.passthroughRequest = function (_verb, _path, _request) {\n        /* no-op */\n    };\n    Pretender.prototype.unhandledRequest = function (verb, path, _request) {\n        throw new Error('Pretender intercepted ' +\n            verb +\n            ' ' +\n            path +\n            ' but no handler was defined for this type of request');\n    };\n    Pretender.prototype.erroredRequest = function (verb, path, _request, error) {\n        error.message =\n            'Pretender intercepted ' +\n                verb +\n                ' ' +\n                path +\n                ' but encountered an error: ' +\n                error.message;\n        throw error;\n    };\n    Pretender.prototype.shutdown = function () {\n        var _this = this;\n        self.XMLHttpRequest = this._nativeXMLHttpRequest;\n        this._fetchProps.forEach(function (name) {\n            self[name] = _this['_native' + name];\n        }, this);\n        this.ctx.pretender = undefined;\n        // 'stop' the server\n        this.running = false;\n    };\n    Pretender.prototype._handlerFor = function (verb, url, request) {\n        var registry = this.hosts.forURL(url)[verb];\n        var matches = registry.recognize(parseURL(url).fullpath);\n        var match = matches ? matches[0] : null;\n        if (match) {\n            request.params = match.params;\n            request.queryParams = matches.queryParams;\n        }\n        return match;\n    };\n    Pretender.parseURL = parseURL;\n    Pretender.Hosts = Hosts;\n    Pretender.Registry = Registry;\n    return Pretender;\n}());\n\nPretender.parseURL = parseURL;\nPretender.Hosts = Hosts;\nPretender.Registry = Registry;\n\nexport default Pretender;\n","import isPlainObject from \"lodash/isPlainObject\";\nimport isFunction from \"lodash/isFunction\";\nimport mapValues from \"lodash/mapValues\";\nimport referenceSort from \"./utils/reference-sort\";\n\nlet Factory = function () {\n  this.build = function (sequence) {\n    let object = {};\n    let topLevelAttrs = Object.assign({}, this.attrs);\n    delete topLevelAttrs.afterCreate;\n    Object.keys(topLevelAttrs).forEach((attr) => {\n      if (Factory.isTrait.call(this, attr)) {\n        delete topLevelAttrs[attr];\n      }\n    });\n    let keys = sortAttrs(topLevelAttrs, sequence);\n\n    keys.forEach(function (key) {\n      let buildAttrs, buildSingleValue;\n\n      buildAttrs = function (attrs) {\n        return mapValues(attrs, buildSingleValue);\n      };\n\n      buildSingleValue = (value) => {\n        if (Array.isArray(value)) {\n          return value.map(buildSingleValue);\n        } else if (isPlainObject(value)) {\n          return buildAttrs(value);\n        } else if (isFunction(value)) {\n          return value.call(topLevelAttrs, sequence);\n        } else {\n          return value;\n        }\n      };\n\n      let value = topLevelAttrs[key];\n      if (isFunction(value)) {\n        object[key] = value.call(object, sequence);\n      } else {\n        object[key] = buildSingleValue(value);\n      }\n    });\n\n    return object;\n  };\n};\n\nFactory.extend = function (attrs) {\n  // Merge the new attributes with existing ones. If conflict, new ones win.\n  let newAttrs = Object.assign({}, this.attrs, attrs);\n\n  let Subclass = function () {\n    this.attrs = newAttrs;\n    Factory.call(this);\n  };\n\n  // Copy extend\n  Subclass.extend = Factory.extend;\n  Subclass.extractAfterCreateCallbacks = Factory.extractAfterCreateCallbacks;\n  Subclass.isTrait = Factory.isTrait;\n\n  // Store a reference on the class for future subclasses\n  Subclass.attrs = newAttrs;\n\n  return Subclass;\n};\n\nFactory.extractAfterCreateCallbacks = function ({ traits } = {}) {\n  let afterCreateCallbacks = [];\n  let attrs = this.attrs || {};\n  let traitCandidates;\n\n  if (attrs.afterCreate) {\n    afterCreateCallbacks.push(attrs.afterCreate);\n  }\n\n  if (Array.isArray(traits)) {\n    traitCandidates = traits;\n  } else {\n    traitCandidates = Object.keys(attrs);\n  }\n\n  traitCandidates\n    .filter((attr) => {\n      return this.isTrait(attr) && attrs[attr].extension.afterCreate;\n    })\n    .forEach((attr) => {\n      afterCreateCallbacks.push(attrs[attr].extension.afterCreate);\n    });\n\n  return afterCreateCallbacks;\n};\n\nFactory.isTrait = function (attrName) {\n  let { attrs } = this;\n  return isPlainObject(attrs[attrName]) && attrs[attrName].__isTrait__ === true;\n};\n\nfunction sortAttrs(attrs, sequence) {\n  let Temp = function () {};\n  let obj = new Temp();\n  let refs = [];\n  let property;\n\n  Object.keys(attrs).forEach(function (key) {\n    let value;\n    Object.defineProperty(obj.constructor.prototype, key, {\n      get() {\n        refs.push([property, key]);\n        return value;\n      },\n      set(newValue) {\n        value = newValue;\n      },\n      enumerable: false,\n      configurable: true,\n    });\n  });\n\n  Object.keys(attrs).forEach(function (key) {\n    let value = attrs[key];\n    if (typeof value !== \"function\") {\n      obj[key] = value;\n    }\n  });\n\n  Object.keys(attrs).forEach(function (key) {\n    let value = attrs[key];\n    property = key;\n\n    if (typeof value === \"function\") {\n      obj[key] = value.call(obj, sequence);\n    }\n\n    refs.push([key]);\n  });\n\n  return referenceSort(refs);\n}\n\n/**\n * @hide\n */\nexport default Factory;\n","// jscs:disable disallowVar, requireArrayDestructuring\nimport uniq from \"lodash/uniq\";\nimport flatten from \"lodash/flatten\";\n/**\n  @hide\n*/\nexport default function (edges) {\n  let nodes = uniq(flatten(edges));\n  let cursor = nodes.length;\n  let sorted = new Array(cursor);\n  let visited = {};\n  let i = cursor;\n\n  let visit = function (node, i, predecessors) {\n    if (predecessors.indexOf(node) >= 0) {\n      throw new Error(\n        `Cyclic dependency in properties ${JSON.stringify(predecessors)}`\n      );\n    }\n\n    if (visited[i]) {\n      return;\n    } else {\n      visited[i] = true;\n    }\n\n    let outgoing = edges.filter(function (edge) {\n      return edge && edge[0] === node;\n    });\n    i = outgoing.length;\n    if (i) {\n      let preds = predecessors.concat(node);\n      do {\n        let pair = outgoing[--i];\n        let child = pair[1];\n        if (child) {\n          visit(child, nodes.indexOf(child), preds);\n        }\n      } while (i);\n    }\n\n    sorted[--cursor] = node;\n  };\n\n  while (i--) {\n    if (!visited[i]) {\n      visit(nodes[i], i, []);\n    }\n  }\n\n  return sorted.reverse();\n}\n","function isNumber(n) {\n  return (+n).toString() === n.toString();\n}\n\n/**\n  By default Mirage uses autoincrementing numbers starting with `1` as IDs for records. This can be customized by implementing one or more IdentityManagers for your application.\n\n  An IdentityManager is a class that's responsible for generating unique identifiers. You can define a custom identity manager for your entire application, as well as on a per-model basis.\n\n  A custom IdentityManager must implement these methods:\n\n  - `fetch`, which must return an identifier not yet used\n  - `set`, which is called with an `id` of a record being insert into Mirage's database\n  - `reset`, which should reset database to initial state\n\n  Check out the advanced guide on Mocking UUIDs to see a complete example of a custom IdentityManager.\n\n  @class IdentityManager\n  @constructor\n  @public\n*/\nclass IdentityManager {\n  constructor() {\n    this._nextId = 1;\n    this._ids = {};\n  }\n\n  /**\n    @method get\n    @hide\n    @private\n  */\n  get() {\n    return this._nextId;\n  }\n\n  /**\n    Registers `uniqueIdentifier` as used.\n\n    This method should throw is `uniqueIdentifier` has already been taken.\n\n    @method set\n    @param {String|Number} uniqueIdentifier\n    @public\n  */\n  set(uniqueIdentifier) {\n    if (this._ids[uniqueIdentifier]) {\n      throw new Error(\n        `Attempting to use the ID ${uniqueIdentifier}, but it's already been used`\n      );\n    }\n\n    if (isNumber(uniqueIdentifier) && +uniqueIdentifier >= this._nextId) {\n      this._nextId = +uniqueIdentifier + 1;\n    }\n\n    this._ids[uniqueIdentifier] = true;\n  }\n\n  /**\n    @method inc\n    @hide\n    @private\n  */\n  inc() {\n    let nextValue = this.get() + 1;\n\n    this._nextId = nextValue;\n\n    return nextValue;\n  }\n\n  /**\n    Returns the next unique identifier.\n\n    @method fetch\n    @return {String} Unique identifier\n    @public\n  */\n  fetch() {\n    let id = this.get();\n\n    this._ids[id] = true;\n\n    this.inc();\n\n    return id.toString();\n  }\n\n  /**\n    Resets the identity manager, marking all unique identifiers as available.\n\n    @method reset\n    @public\n  */\n  reset() {\n    this._nextId = 1;\n    this._ids = {};\n  }\n}\n\nexport default IdentityManager;\n","const warn = console.warn; // eslint-disable-line no-console\n\n/**\n  You can use this class when you want more control over your route handlers response.\n\n  Pass the `code`, `headers` and `data` into the constructor and return an instance from any route handler.\n\n  ```js\n  import { Response } from 'miragejs';\n\n  this.get('/users', () => {\n    return new Response(400, { some: 'header' }, { errors: [ 'name cannot be blank'] });\n  });\n  ```\n*/\nexport default class Response {\n  constructor(code, headers = {}, data) {\n    this.code = code;\n    this.headers = headers;\n\n    // Default data for \"undefined 204\" responses to empty string (no content)\n    if (code === 204) {\n      if (data !== undefined && data !== \"\") {\n        warn(\n          `Mirage: One of your route handlers is returning a custom\n          204 Response that has data, but this is a violation of the HTTP spec\n          and could lead to unexpected behavior. 204 responses should have no\n          content (an empty string) as their body.`\n        );\n      } else {\n        this.data = \"\";\n      }\n\n      // Default data for \"empty untyped\" responses to empty JSON object\n    } else if (\n      (data === undefined || data === \"\") &&\n      !Object.prototype.hasOwnProperty.call(this.headers, \"Content-Type\")\n    ) {\n      this.data = {};\n    } else {\n      this.data = data;\n    }\n\n    // Default \"untyped\" responses to application/json\n    if (\n      code !== 204 &&\n      !Object.prototype.hasOwnProperty.call(this.headers, \"Content-Type\")\n    ) {\n      this.headers[\"Content-Type\"] = \"application/json\";\n    }\n  }\n\n  toRackResponse() {\n    return [this.code, this.headers, this.data];\n  }\n}\n","import {\n  underscore as _underscore,\n  capitalize as _capitalize,\n  camelize as _camelize,\n  dasherize as _dasherize,\n} from \"inflected\";\nimport lowerFirst from \"lodash/lowerFirst\";\n\nconst camelizeCache = {};\nconst dasherizeCache = {};\nconst underscoreCache = {};\nconst capitalizeCache = {};\n\n/**\n * @param {String} word\n * @hide\n */\nexport function camelize(word) {\n  if (typeof camelizeCache[word] !== \"string\") {\n    let camelizedWord = _camelize(underscore(word), false);\n\n    /*\n     The `ember-inflector` package's version of camelize lower-cases the first\n     word after a slash, e.g.\n\n         camelize('my-things/nice-watch'); // 'myThings/niceWatch'\n\n     The `inflected` package doesn't, so we make that change here to not break\n     existing functionality. (This affects the name of the schema collections.)\n    */\n    const camelized = camelizedWord.split(\"/\").map(lowerFirst).join(\"/\");\n\n    camelizeCache[word] = camelized;\n  }\n\n  return camelizeCache[word];\n}\n\n/**\n * @param {String} word\n * @hide\n */\nexport function dasherize(word) {\n  if (typeof dasherizeCache[word] !== \"string\") {\n    const dasherized = _dasherize(underscore(word));\n\n    dasherizeCache[word] = dasherized;\n  }\n\n  return dasherizeCache[word];\n}\n\nexport function underscore(word) {\n  if (typeof underscoreCache[word] !== \"string\") {\n    const underscored = _underscore(word);\n\n    underscoreCache[word] = underscored;\n  }\n\n  return underscoreCache[word];\n}\n\nexport function capitalize(word) {\n  if (typeof capitalizeCache[word] !== \"string\") {\n    const capitalized = _capitalize(word);\n\n    capitalizeCache[word] = capitalized;\n  }\n\n  return capitalizeCache[word];\n}\n","/* eslint no-console: 0 */\nlet errorProps = [\n  \"description\",\n  \"fileName\",\n  \"lineNumber\",\n  \"message\",\n  \"name\",\n  \"number\",\n  \"stack\",\n];\n/**\n  @hide\n*/\nexport default function assert(bool, text) {\n  if (typeof bool === \"string\" && !text) {\n    // console.error(`Mirage: ${bool}`);\n    throw new MirageError(bool);\n  }\n\n  if (!bool) {\n    // console.error(`Mirage: ${text}`);\n    throw new MirageError(text.replace(/^ +/gm, \"\") || \"Assertion failed\");\n  }\n}\n\n/**\n  @public\n  @hide\n  Copied from ember-metal/error\n*/\nexport function MirageError(message, stack) {\n  let tmp = Error(message);\n\n  if (stack) {\n    tmp.stack = stack;\n  }\n\n  for (let idx = 0; idx < errorProps.length; idx++) {\n    let prop = errorProps[idx];\n\n    if ([\"description\", \"message\", \"stack\"].indexOf(prop) > -1) {\n      this[prop] = `Mirage: ${tmp[prop]}`;\n    } else {\n      this[prop] = tmp[prop];\n    }\n  }\n}\n\nMirageError.prototype = Object.create(Error.prototype);\n","import { dasherize } from \"../../utils/inflector\";\n\n/**\n  Associations represent relationships between your Models.\n\n  The `hasMany` and `belongsTo` helpers are how you actually define relationships:\n  \n  ```js\n  import { createServer, Model, hasMany, belongsTo }\n\n  createServer({\n    models: {\n      user: Model.extend({\n        comments: hasMany()\n      }),\n      comments: Model.extend({\n        user: belongsTo()\n      })\n    }\n  })\n  ```\n\n  View [the Relationships](https://miragejs.com/docs/main-concepts/relationships/) guide to learn more about setting up relationships.\n\n  Each usage of the helper registers an Association (either a `HasMany` association or `BelongsTo` association) with your server's `Schema`. You can access these associations using either the `schema.associationsFor()` method, or the `associations` property on individual model instances.\n\n  You can then introspect the associations to do things like dynamically build up your JSON response in your serializers.\n\n  @class Association\n  @constructor\n  @public\n*/\nexport default class Association {\n  constructor(modelName, opts) {\n    /**\n      The modelName of the associated model.\n\n      For example, given this configuration\n      \n      ```js\n      createServer({\n        models: {\n          user: Model,\n          comment: Model.extend({\n            user: belongsTo()\n          })\n        }\n      })\n      ```\n\n      the association's `modelName` would be `user`.\n\n      Note that an association's `modelName` and the `name` can be different. This is because Mirage supports multiple relationships of the same type:\n\n      ```js\n      createServer({\n        models: {\n          user: Model,\n          comment: Model.extend({\n            author: belongsTo('user'),\n            reviewer: belongsTo('user')\n          })\n        }\n      })\n      ```\n\n      For both these relationships, the `modelName` is `user`, but the first association has a `name` of `author` while the second has a `name` of `reviewer`.\n\n      @property\n      @type {String}\n      @public\n    */\n    this.modelName = undefined; // hack to add ESDOC info. Any better way?\n\n    if (typeof modelName === \"object\") {\n      // Received opts only\n      this.modelName = undefined;\n      this.opts = modelName;\n    } else {\n      // The modelName of the association. (Might not be passed in - set later\n      // by schema).\n      this.modelName = modelName ? dasherize(modelName) : \"\";\n      this.opts = opts || {};\n    }\n\n    /**\n      The name of the association, which comes from the property name that was used to define it.\n\n      For example, given this server definition\n      \n      ```js\n      createServer({\n        models: {\n          user: Model,\n          comment: Model.extend({\n            author: belongsTo('user')\n          })\n        }\n      })\n      ```\n\n      the association's `name` would be `author`.\n      \n      The name is used by Mirage to define foreign keys on the model (`comment.authorId` in this case), among other things.\n\n      @property\n      @type {String}\n      @public\n    */\n    this.name = \"\";\n\n    // The modelName that owns this association\n    this.ownerModelName = \"\";\n  }\n\n  /**\n     A setter for schema, since we don't have a reference at constuction time.\n\n     @method setSchema\n     @public\n     @hide\n  */\n  setSchema(schema) {\n    this.schema = schema;\n  }\n\n  /**\n     Returns a Boolean that's true if the association is self-referential, i.e. if a model has an association with itself.\n\n     For example, given\n\n     ```js\n     createServer({\n       models: {\n         user: Model.extend({\n           friends: hasMany('user')\n         })\n       }\n     })\n     ```\n\n     then\n\n     ```js\n     server.schema.associationsFor('user').friends.isReflexive // true\n     ```\n\n     @method isReflexive\n     @return {Boolean}\n     @public\n  */\n  isReflexive() {\n    let isExplicitReflexive = !!(\n      this.modelName === this.ownerModelName && this.opts.inverse\n    );\n    let isImplicitReflexive = !!(\n      this.opts.inverse === undefined && this.ownerModelName === this.modelName\n    );\n\n    return isExplicitReflexive || isImplicitReflexive;\n  }\n\n  /**\n     Returns a Boolean that's true if the association is polymorphic:\n\n     For example, given\n\n     ```js\n     createServer({\n       models: {\n         comment: Model.extend({\n           commentable: belongsTo({ polymorphic: true })\n         })\n       }\n     })\n     ```\n\n     then\n\n     ```js\n     server.schema.associationsFor('comment').commentable.isPolymorphic // true\n     ```\n\n     Check out [the guides on polymorphic associations](https://miragejs.com/docs/main-concepts/relationships/#polymorphic) to learn more.\n\n     @accessor isPolymorphic\n     @type {Boolean}\n     @public\n  */\n  get isPolymorphic() {\n    return this.opts.polymorphic;\n  }\n\n  /**\n    Returns either the string `\"hasMany\"` or `\"belongsTo\"`, based on the association type.\n  \n    @accessor\n    @type {String}\n    @public\n   */\n  get type() {\n    throw new Error(\n      \"Subclasses of Association must implement a getter for type\"\n    );\n  }\n\n  /**\n    Returns the name used for the association's foreign key.\n\n    ```js\n    let server = createServer({\n      models: {\n        user: Model,\n        post: Model.extend({\n          fineAuthor: belongsTo(\"user\"),\n          comments: hasMany()\n        }),\n        comment: Model\n      }\n    });\n\n    let associations = server.associationsFor('post')\n\n    associations.fineAuthor.foreignKey // fineAuthorId\n    associations.comments.foreignKey // commentIds\n    ```\n  \n    @accessor\n    @type {String}\n    @public\n   */\n  get foreignKey() {\n    return this.getForeignKey();\n  }\n\n  /**\n    @hide\n  */\n  get identifier() {\n    throw new Error(\n      \"Subclasses of Association must implement a getter for identifier\"\n    );\n  }\n}\n","import Association from \"./association\";\nimport { capitalize, camelize } from \"../../utils/inflector\";\nimport assert from \"../../assert\";\n\nconst identifierCache = {};\n\n/**\n * The belongsTo association adds a fk to the owner of the association\n *\n * @class BelongsTo\n * @extends Association\n * @constructor\n * @public\n * @hide\n */\nexport default class BelongsTo extends Association {\n  get identifier() {\n    if (typeof identifierCache[this.name] !== \"string\") {\n      const identifier = `${camelize(this.name)}Id`;\n\n      identifierCache[this.name] = identifier;\n    }\n\n    return identifierCache[this.name];\n  }\n\n  get type() {\n    return \"belongsTo\";\n  }\n\n  /**\n   * @method getForeignKeyArray\n   * @return {Array} Array of camelized name of the model owning the association\n   * and foreign key for the association\n   * @public\n   */\n  getForeignKeyArray() {\n    return [camelize(this.ownerModelName), this.getForeignKey()];\n  }\n\n  /**\n   * @method getForeignKey\n   * @return {String} Foreign key for the association\n   * @public\n   */\n  getForeignKey() {\n    // we reuse identifierCache because it's the same logic as get identifier\n    if (typeof identifierCache[this.name] !== \"string\") {\n      const foreignKey = `${camelize(this.name)}Id`;\n\n      identifierCache[this.name] = foreignKey;\n    }\n\n    return identifierCache[this.name];\n  }\n\n  /**\n   * Registers belongs-to association defined by given key on given model,\n   * defines getters / setters for associated parent and associated parent's id,\n   * adds methods for creating unsaved parent record and creating a saved one\n   *\n   * @method addMethodsToModelClass\n   * @param {Function} ModelClass\n   * @param {String} key the named key for the association\n   * @public\n   */\n  addMethodsToModelClass(ModelClass, key) {\n    let modelPrototype = ModelClass.prototype;\n    let association = this;\n    let foreignKey = this.getForeignKey();\n    let associationHash = { [key]: this };\n\n    modelPrototype.belongsToAssociations = Object.assign(\n      modelPrototype.belongsToAssociations,\n      associationHash\n    );\n\n    // update belongsToAssociationFks\n    Object.keys(modelPrototype.belongsToAssociations).forEach((key) => {\n      const value = modelPrototype.belongsToAssociations[key];\n      modelPrototype.belongsToAssociationFks[value.getForeignKey()] = value;\n    });\n\n    // Add to target's dependent associations array\n    this.schema.addDependentAssociation(this, this.modelName);\n\n    // TODO: look how this is used. Are these necessary, seems like they could be gotten from the above?\n    // Or we could use a single data structure to store this information?\n    modelPrototype.associationKeys.add(key);\n    modelPrototype.associationIdKeys.add(foreignKey);\n\n    Object.defineProperty(modelPrototype, foreignKey, {\n      /*\n        object.parentId\n          - returns the associated parent's id\n      */\n      get() {\n        this._tempAssociations = this._tempAssociations || {};\n        let tempParent = this._tempAssociations[key];\n        let id;\n\n        if (tempParent === null) {\n          id = null;\n        } else {\n          if (association.isPolymorphic) {\n            if (tempParent) {\n              id = { id: tempParent.id, type: tempParent.modelName };\n            } else {\n              id = this.attrs[foreignKey];\n            }\n          } else {\n            if (tempParent) {\n              id = tempParent.id;\n            } else {\n              id = this.attrs[foreignKey];\n            }\n          }\n        }\n\n        return id;\n      },\n\n      /*\n        object.parentId = (parentId)\n          - sets the associated parent via id\n      */\n      set(id) {\n        let tempParent;\n\n        if (id === null) {\n          tempParent = null;\n        } else if (id !== undefined) {\n          if (association.isPolymorphic) {\n            assert(\n              typeof id === \"object\",\n              `You're setting an ID on the polymorphic association '${association.name}' but you didn't pass in an object. Polymorphic IDs need to be in the form { type, id }.`\n            );\n            tempParent = association.schema[\n              association.schema.toCollectionName(id.type)\n            ].find(id.id);\n          } else {\n            tempParent =\n              association.schema[\n                association.schema.toCollectionName(association.modelName)\n              ].find(id);\n            assert(\n              tempParent,\n              `Couldn't find ${association.modelName} with id = ${id}`\n            );\n          }\n        }\n\n        this[key] = tempParent;\n      },\n    });\n\n    Object.defineProperty(modelPrototype, key, {\n      /*\n        object.parent\n          - returns the associated parent\n      */\n      get() {\n        this._tempAssociations = this._tempAssociations || {};\n\n        let tempParent = this._tempAssociations[key];\n        let foreignKeyId = this[foreignKey];\n        let model = null;\n\n        if (tempParent) {\n          model = tempParent;\n        } else if (foreignKeyId !== null) {\n          if (association.isPolymorphic) {\n            model = association.schema[\n              association.schema.toCollectionName(foreignKeyId.type)\n            ].find(foreignKeyId.id);\n          } else {\n            model =\n              association.schema[\n                association.schema.toCollectionName(association.modelName)\n              ].find(foreignKeyId);\n          }\n        }\n\n        return model;\n      },\n\n      /*\n        object.parent = (parentModel)\n          - sets the associated parent via model\n\n        I want to jot some notes about hasInverseFor. There used to be an\n        association.inverse() check, but adding polymorphic associations\n        complicated this. `comment.commentable`, you can't easily check for an\n        inverse since `comments: hasMany()` could be on any model.\n\n        Instead of making it very complex and looking for an inverse on the\n        association in isoaltion, it was much simpler to ask the model being\n        passed in if it had an inverse for the setting model and with its\n        association.\n      */\n      set(model) {\n        this._tempAssociations = this._tempAssociations || {};\n        this._tempAssociations[key] = model;\n\n        if (model && model.hasInverseFor(association)) {\n          let inverse = model.inverseFor(association);\n\n          model.associate(this, inverse);\n        }\n      },\n    });\n\n    /*\n      object.newParent\n        - creates a new unsaved associated parent\n\n      TODO: document polymorphic\n    */\n    modelPrototype[`new${capitalize(key)}`] = function (...args) {\n      let modelName, attrs;\n\n      if (association.isPolymorphic) {\n        modelName = args[0];\n        attrs = args[1];\n      } else {\n        modelName = association.modelName;\n        attrs = args[0];\n      }\n\n      let parent =\n        association.schema[association.schema.toCollectionName(modelName)].new(\n          attrs\n        );\n\n      this[key] = parent;\n\n      return parent;\n    };\n\n    /*\n      object.createParent\n        - creates a new saved associated parent, and immediately persists both models\n\n      TODO: document polymorphic\n    */\n    modelPrototype[`create${capitalize(key)}`] = function (...args) {\n      let modelName, attrs;\n      if (association.isPolymorphic) {\n        modelName = args[0];\n        attrs = args[1];\n      } else {\n        modelName = association.modelName;\n        attrs = args[0];\n      }\n\n      let parent =\n        association.schema[\n          association.schema.toCollectionName(modelName)\n        ].create(attrs);\n\n      this[key] = parent;\n      this.save();\n\n      return parent.reload();\n    };\n  }\n\n  /**\n   *\n   *\n   * @public\n   */\n  disassociateAllDependentsFromTarget(model) {\n    let owner = this.ownerModelName;\n    let fk;\n\n    if (this.isPolymorphic) {\n      fk = { type: model.modelName, id: model.id };\n    } else {\n      fk = model.id;\n    }\n\n    let dependents = this.schema[this.schema.toCollectionName(owner)].where(\n      (potentialOwner) => {\n        let id = potentialOwner[this.getForeignKey()];\n\n        if (!id) {\n          return false;\n        }\n\n        if (typeof id === \"object\") {\n          return id.type === fk.type && id.id === fk.id;\n        } else {\n          return id === fk;\n        }\n      }\n    );\n\n    dependents.models.forEach((dependent) => {\n      dependent.disassociate(model, this);\n      dependent.save();\n    });\n  }\n}\n","import isEqual from \"lodash/isEqual\";\nimport map from \"lodash/map\";\n\nfunction duplicate(data) {\n  if (Array.isArray(data)) {\n    return data.map(duplicate);\n  } else {\n    return Object.assign({}, data);\n  }\n}\n\n/**\n  Mirage's `Db` has many `DbCollections`, which are equivalent to tables from traditional databases. They store specific types of data, for example `users` and `posts`.\n\n  `DbCollections` have names, like `users`, which you use to access the collection from the `Db` object.\n\n  Suppose you had a `user` model defined, and the following data had been inserted into your database (either through factories or fixtures):\n\n  ```js\n  export default [\n    { id: 1, name: 'Zelda' },\n    { id: 2, name: 'Link' }\n  ];\n  ```\n\n  Then `db.contacts` would return this array.\n\n  @class DbCollection\n  @constructor\n  @public\n */\nclass DbCollection {\n  constructor(name, initialData, IdentityManager) {\n    this.name = name;\n    this._records = [];\n    this.identityManager = new IdentityManager();\n\n    if (initialData) {\n      this.insert(initialData);\n    }\n  }\n\n  /**\n   * Returns a copy of the data, to prevent inadvertent data manipulation.\n   * @method all\n   * @public\n   * @hide\n   */\n  all() {\n    return duplicate(this._records);\n  }\n\n  /**\n    Inserts `data` into the collection. `data` can be a single object\n    or an array of objects. Returns the inserted record.\n\n    ```js\n    // Insert a single record\n    let link = db.users.insert({ name: 'Link', age: 173 });\n\n    link;  // { id: 1, name: 'Link', age: 173 }\n\n    // Insert an array\n    let users = db.users.insert([\n      { name: 'Zelda', age: 142 },\n      { name: 'Epona', age: 58 },\n    ]);\n\n    users;  // [ { id: 2, name: 'Zelda', age: 142 }, { id: 3, name: 'Epona', age: 58 } ]\n    ```\n\n    @method insert\n    @param data\n    @public\n   */\n  insert(data) {\n    if (!Array.isArray(data)) {\n      return this._insertRecord(data);\n    } else {\n      return map(data, (attrs) => this._insertRecord(attrs));\n    }\n  }\n\n  /**\n    Returns a single record from the `collection` if `ids` is a single\n    id, or an array of records if `ids` is an array of ids. Note\n    each id can be an int or a string, but integer ids as strings\n    (e.g. the string “1”) will be treated as integers.\n\n    ```js\n    // Given users = [{id: 1, name: 'Link'}, {id: 2, name: 'Zelda'}]\n\n    db.users.find(1);      // {id: 1, name: 'Link'}\n    db.users.find([1, 2]); // [{id: 1, name: 'Link'}, {id: 2, name: 'Zelda'}]\n    ```\n\n    @method find\n    @param ids\n    @public\n   */\n  find(ids) {\n    if (Array.isArray(ids)) {\n      let records = this._findRecords(ids).filter(Boolean).map(duplicate); // Return a copy\n\n      return records;\n    } else {\n      let record = this._findRecord(ids);\n      if (!record) {\n        return null;\n      }\n\n      // Return a copy\n      return duplicate(record);\n    }\n  }\n\n  /**\n    Returns the first model from `collection` that matches the\n    key-value pairs in the `query` object. Note that a string\n    comparison is used. `query` is a POJO.\n\n    ```js\n    // Given users = [ { id: 1, name: 'Link' }, { id: 2, name: 'Zelda' } ]\n    db.users.findBy({ name: 'Link' }); // { id: 1, name: 'Link' }\n    ```\n\n    @method find\n    @param query\n    @public\n   */\n  findBy(query) {\n    let record = this._findRecordBy(query);\n    if (!record) {\n      return null;\n    }\n\n    // Return a copy\n    return duplicate(record);\n  }\n\n  /**\n    Returns an array of models from `collection` that match the\n    key-value pairs in the `query` object. Note that a string\n    comparison is used. `query` is a POJO.\n\n    ```js\n    // Given users = [ { id: 1, name: 'Link' }, { id: 2, name: 'Zelda' } ]\n\n    db.users.where({ name: 'Zelda' }); // [ { id: 2, name: 'Zelda' } ]\n    ```\n\n    @method where\n    @param query\n    @public\n   */\n  where(query) {\n    return this._findRecordsWhere(query).map(duplicate);\n  }\n\n  /**\n    Finds the first record matching the provided _query_ in\n    `collection`, or creates a new record using a merge of the\n    `query` and optional `attributesForCreate`.\n\n    Often times you may have a pattern like the following in your API stub:\n\n    ```js\n    // Given users = [\n    //   { id: 1, name: 'Link' },\n    //   { id: 2, name: 'Zelda' }\n    // ]\n\n    // Create Link if he doesn't yet exist\n    let records = db.users.where({ name: 'Link' });\n    let record;\n\n    if (records.length > 0) {\n      record = records[0];\n    } else {\n      record = db.users.insert({ name: 'Link' });\n    }\n    ```\n\n    You can now replace this with the following:\n\n    ```js\n    let record = db.users.firstOrCreate({ name: 'Link' });\n    ```\n\n    An extended example using *attributesForCreate*:\n\n    ```js\n    let record = db.users.firstOrCreate({ name: 'Link' }, { evil: false });\n    ```\n\n    @method firstOrCreate\n    @param query\n    @param attributesForCreate\n    @public\n   */\n  firstOrCreate(query, attributesForCreate = {}) {\n    let queryResult = this.where(query);\n    let [record] = queryResult;\n\n    if (record) {\n      return record;\n    } else {\n      let mergedAttributes = Object.assign(attributesForCreate, query);\n      let createdRecord = this.insert(mergedAttributes);\n\n      return createdRecord;\n    }\n  }\n\n  /**\n    Updates one or more records in the collection.\n\n    If *attrs* is the only arg present, updates all records in the collection according to the key-value pairs in *attrs*.\n\n    If *target* is present, restricts updates to those that match *target*. If *target* is a number or string, finds a single record whose id is *target* to update. If *target* is a POJO, queries *collection* for records that match the key-value pairs in *target*, and updates their *attrs*.\n\n    Returns the updated record or records.\n\n    ```js\n    // Given users = [\n    //   {id: 1, name: 'Link'},\n    //   {id: 2, name: 'Zelda'}\n    // ]\n\n    db.users.update({name: 'Ganon'}); // db.users = [{id: 1, name: 'Ganon'}, {id: 2, name: 'Ganon'}]\n    db.users.update(1, {name: 'Young Link'}); // db.users = [{id: 1, name: 'Young Link'}, {id: 2, name: 'Zelda'}]\n    db.users.update({name: 'Link'}, {name: 'Epona'}); // db.users = [{id: 1, name: 'Epona'}, {id: 2, name: 'Zelda'}]\n    ```\n\n    @method update\n    @param target\n    @param attrs\n    @public\n   */\n  update(target, attrs) {\n    let records;\n\n    if (typeof attrs === \"undefined\") {\n      attrs = target;\n      let changedRecords = [];\n\n      this._records.forEach((record) => {\n        let oldRecord = Object.assign({}, record);\n\n        this._updateRecord(record, attrs);\n\n        if (!isEqual(oldRecord, record)) {\n          changedRecords.push(record);\n        }\n      });\n\n      return changedRecords;\n    } else if (typeof target === \"number\" || typeof target === \"string\") {\n      let id = target;\n      let record = this._findRecord(id);\n\n      this._updateRecord(record, attrs);\n\n      return record;\n    } else if (Array.isArray(target)) {\n      let ids = target;\n      records = this._findRecords(ids);\n\n      records.forEach((record) => {\n        this._updateRecord(record, attrs);\n      });\n\n      return records;\n    } else if (typeof target === \"object\") {\n      let query = target;\n      records = this._findRecordsWhere(query);\n\n      records.forEach((record) => {\n        this._updateRecord(record, attrs);\n      });\n\n      return records;\n    }\n  }\n\n  /**\n    Removes one or more records in *collection*.\n\n    If *target* is undefined, removes all records. If *target* is a number or string, removes a single record using *target* as id. If *target* is a POJO, queries *collection* for records that match the key-value pairs in *target*, and removes them from the collection.\n\n    ```js\n    // Given users = [\n    //   {id: 1, name: 'Link'},\n    //   {id: 2, name: 'Zelda'}\n    // ]\n\n    db.users.remove(); // db.users = []\n    db.users.remove(1); // db.users = [{id: 2, name: 'Zelda'}]\n    db.users.remove({name: 'Zelda'}); // db.users = [{id: 1, name: 'Link'}]\n    ```\n\n    @method remove\n    @param target\n    @public\n   */\n  remove(target) {\n    let records;\n\n    if (typeof target === \"undefined\") {\n      this._records = [];\n      this.identityManager.reset();\n    } else if (typeof target === \"number\" || typeof target === \"string\") {\n      let record = this._findRecord(target);\n      let index = this._records.indexOf(record);\n      this._records.splice(index, 1);\n    } else if (Array.isArray(target)) {\n      records = this._findRecords(target);\n      records.forEach((record) => {\n        let index = this._records.indexOf(record);\n        this._records.splice(index, 1);\n      });\n    } else if (typeof target === \"object\") {\n      records = this._findRecordsWhere(target);\n      records.forEach((record) => {\n        let index = this._records.indexOf(record);\n        this._records.splice(index, 1);\n      });\n    }\n  }\n\n  /*\n    Private methods.\n\n    These return the actual db objects, whereas the public\n    API query methods return copies.\n  */\n\n  /**\n    @method _findRecord\n    @param id\n    @private\n    @hide\n   */\n  _findRecord(id) {\n    id = id.toString();\n\n    return this._records.find((obj) => obj.id === id);\n  }\n\n  /**\n    @method _findRecordBy\n    @param query\n    @private\n    @hide\n   */\n  _findRecordBy(query) {\n    return this._findRecordsWhere(query)[0];\n  }\n\n  /**\n    @method _findRecords\n    @param ids\n    @private\n    @hide\n   */\n  _findRecords(ids) {\n    return ids.map(this._findRecord, this);\n  }\n\n  /**\n    @method _findRecordsWhere\n    @param query\n    @private\n    @hide\n   */\n  _findRecordsWhere(query) {\n    let records = this._records;\n\n    function defaultQueryFunction(record) {\n      let keys = Object.keys(query);\n\n      return keys.every(function (key) {\n        return String(record[key]) === String(query[key]);\n      });\n    }\n\n    let queryFunction =\n      typeof query === \"object\" ? defaultQueryFunction : query;\n\n    return records.filter(queryFunction);\n  }\n\n  /**\n    @method _insertRecord\n    @param data\n    @private\n    @hide\n   */\n  _insertRecord(data) {\n    let attrs = duplicate(data);\n\n    if (attrs && (attrs.id === undefined || attrs.id === null)) {\n      attrs.id = this.identityManager.fetch(attrs);\n    } else {\n      attrs.id = attrs.id.toString();\n\n      this.identityManager.set(attrs.id);\n    }\n\n    this._records.push(attrs);\n\n    return duplicate(attrs);\n  }\n\n  /**\n    @method _updateRecord\n    @param record\n    @param attrs\n    @private\n    @hide\n   */\n  _updateRecord(record, attrs) {\n    let targetId =\n      attrs && Object.prototype.hasOwnProperty.call(attrs, \"id\")\n        ? attrs.id.toString()\n        : null;\n    let currentId = record.id;\n\n    if (targetId && currentId !== targetId) {\n      throw new Error(\"Updating the ID of a record is not permitted\");\n    }\n\n    for (let attr in attrs) {\n      if (attr === \"id\") {\n        continue;\n      }\n\n      record[attr] = attrs[attr];\n    }\n  }\n}\n\nexport default DbCollection;\n","import DbCollection from \"./db-collection\";\nimport IdentityManager from \"./identity-manager\";\nimport cloneDeep from \"lodash/cloneDeep\";\n\n/**\n  Your Mirage server has a database which you can interact with in your route handlers. You’ll typically use models to interact with your database data, but you can always reach into the db directly in the event you want more control.\n\n  Access the db from your route handlers via `schema.db`.\n\n  You can access individual DbCollections by using `schema.db.name`:\n\n  ```js\n  schema.db.users  // would return, e.g., [ { id: 1, name: 'Yehuda' }, { id: 2, name: 'Tom '} ]\n  ```\n\n  @class Db\n  @constructor\n  @public\n */\nclass Db {\n  constructor(initialData, identityManagers) {\n    this._collections = [];\n\n    this.registerIdentityManagers(identityManagers);\n\n    if (initialData) {\n      this.loadData(initialData);\n    }\n  }\n\n  /**\n    Loads an object of data into Mirage's database.\n\n    The keys of the object correspond to the DbCollections, and the values are arrays of records.\n\n    ```js\n    server.db.loadData({\n      users: [\n        { name: 'Yehuda' },\n        { name: 'Tom' }\n      ]\n    });\n    ```\n\n    As with `db.collection.insert`, IDs will automatically be created for records that don't have them.\n\n    @method loadData\n    @param {Object} data - Data to load\n    @public\n   */\n  loadData(data) {\n    for (let key in data) {\n      this.createCollection(key, cloneDeep(data[key]));\n    }\n  }\n\n  /**\n   Logs out the contents of the Db.\n\n   ```js\n   server.db.dump() // { users: [ name: 'Yehuda', ...\n   ```\n\n   @method dump\n   @public\n   */\n  dump() {\n    return this._collections.reduce((data, collection) => {\n      data[collection.name] = collection.all();\n\n      return data;\n    }, {});\n  }\n\n  /**\n    Add an empty collection named _name_ to your database. Typically you won’t need to do this yourself, since collections are automatically created for any models you have defined.\n\n    @method createCollection\n    @param name\n    @param initialData (optional)\n    @public\n   */\n  createCollection(name, initialData) {\n    if (!this[name]) {\n      let IdentityManager = this.identityManagerFor(name);\n      let newCollection = new DbCollection(name, initialData, IdentityManager);\n\n      // Public API has a convenient array interface. It comes at the cost of\n      // returning a copy of all records to avoid accidental mutations.\n      Object.defineProperty(this, name, {\n        get() {\n          let recordsCopy = newCollection.all();\n\n          [\n            \"insert\",\n            \"find\",\n            \"findBy\",\n            \"where\",\n            \"update\",\n            \"remove\",\n            \"firstOrCreate\",\n          ].forEach(function (method) {\n            recordsCopy[method] = function () {\n              return newCollection[method](...arguments);\n            };\n          });\n\n          return recordsCopy;\n        },\n      });\n\n      // Private API does not have the array interface. This means internally, only\n      // db-collection methods can be used. This is so records aren't copied redundantly\n      // internally, which leads to accidental O(n^2) operations (e.g., createList).\n      Object.defineProperty(this, `_${name}`, {\n        get() {\n          let recordsCopy = [];\n\n          [\n            \"insert\",\n            \"find\",\n            \"findBy\",\n            \"where\",\n            \"update\",\n            \"remove\",\n            \"firstOrCreate\",\n          ].forEach(function (method) {\n            recordsCopy[method] = function () {\n              return newCollection[method](...arguments);\n            };\n          });\n\n          return recordsCopy;\n        },\n      });\n\n      this._collections.push(newCollection);\n    } else if (initialData) {\n      this[name].insert(initialData);\n    }\n\n    return this;\n  }\n\n  /**\n    @method createCollections\n    @param ...collections\n    @public\n    @hide\n   */\n  createCollections(...collections) {\n    collections.forEach((c) => this.createCollection(c));\n  }\n\n  /**\n    Removes all data from Mirage's database.\n\n    @method emptyData\n    @public\n   */\n  emptyData() {\n    this._collections.forEach((c) => c.remove());\n  }\n\n  /**\n    @method identityManagerFor\n    @param name\n    @public\n    @hide\n   */\n  identityManagerFor(name) {\n    return (\n      this._identityManagers[this._container.inflector.singularize(name)] ||\n      this._identityManagers.application ||\n      IdentityManager\n    );\n  }\n\n  /**\n    @method registerIdentityManagers\n    @public\n    @hide\n   */\n  registerIdentityManagers(identityManagers) {\n    this._identityManagers = identityManagers || {};\n  }\n}\n\nexport default Db;\n","import assert from \"../assert\";\nimport invokeMap from \"lodash/invokeMap\";\n\n/**\n  Collections represent arrays of models. They are returned by a hasMany association, or by one of the ModelClass query methods:\n\n  ```js\n  let posts = user.blogPosts;\n  let posts = schema.blogPosts.all();\n  let posts = schema.blogPosts.find([1, 2, 4]);\n  let posts = schema.blogPosts.where({ published: true });\n  ```\n\n  Note that there is also a `PolymorphicCollection` class that is identical to `Collection`, except it can contain a heterogeneous array of models. Thus, it has no `modelName` property. This lets serializers and other parts of the system interact with it differently.\n\n  @class Collection\n  @constructor\n  @public\n*/\nexport default class Collection {\n  constructor(modelName, models = []) {\n    assert(\n      modelName && typeof modelName === \"string\",\n      \"You must pass a `modelName` into a Collection\"\n    );\n\n    /**\n      The dasherized model name this Collection represents.\n\n      ```js\n      let posts = user.blogPosts;\n\n      posts.modelName; // \"blog-post\"\n      ```\n\n      The model name is separate from the actual models, since Collections can be empty.\n\n      @property modelName\n      @type {String}\n      @public\n    */\n    this.modelName = modelName;\n\n    /**\n      The underlying plain JavaScript array of Models in this Collection.\n\n      ```js\n      posts.models // [ post:1, post:2, ... ]\n      ```\n\n      While Collections have many array-ish methods like `filter` and `sort`, it\n      can be useful to work with the plain array if you want to work with methods\n      like `map`, or use the `[]` accessor.\n\n      For example, in testing you might want to assert against a model from the\n      collection:\n\n      ```js\n      let newPost = user.posts.models[0].title;\n\n      assert.equal(newPost, \"My first post\");\n      ```\n\n      @property models\n      @type {Array}\n      @public\n    */\n    this.models = models;\n  }\n\n  /**\n    The number of models in the collection.\n\n    ```js\n    user.posts.length; // 2\n    ```\n\n    @property length\n    @type {Integer}\n    @public\n  */\n  get length() {\n    return this.models.length;\n  }\n\n  /**\n     Updates each model in the collection, and immediately persists all changes to the db.\n\n     ```js\n     let posts = user.blogPosts;\n\n     posts.update('published', true); // the db was updated for all posts\n     ```\n\n     @method update\n     @param key\n     @param val\n     @return this\n     @public\n   */\n  update(...args) {\n    invokeMap(this.models, \"update\", ...args);\n\n    return this;\n  }\n\n  /**\n     Saves all models in the collection.\n\n     ```js\n     let posts = user.blogPosts;\n\n     posts.models[0].published = true;\n\n     posts.save(); // all posts saved to db\n     ```\n\n     @method save\n     @return this\n     @public\n   */\n  save() {\n    invokeMap(this.models, \"save\");\n\n    return this;\n  }\n\n  /**\n    Reloads each model in the collection.\n\n    ```js\n    let posts = author.blogPosts;\n\n    // ...\n\n    posts.reload(); // reloads data for each post from the db\n    ```\n\n    @method reload\n    @return this\n    @public\n  */\n  reload() {\n    invokeMap(this.models, \"reload\");\n\n    return this;\n  }\n\n  /**\n    Destroys the db record for all models in the collection.\n\n    ```js\n    let posts = user.blogPosts;\n\n    posts.destroy(); // all posts removed from db\n    ```\n\n    @method destroy\n    @return this\n    @public\n  */\n  destroy() {\n    invokeMap(this.models, \"destroy\");\n\n    return this;\n  }\n\n  /**\n    Adds a model to this collection.\n\n    ```js\n    posts.length; // 1\n\n    posts.add(newPost);\n\n    posts.length; // 2\n    ```\n\n    @method add\n    @param {Model} model\n    @return this\n    @public\n  */\n  add(model) {\n    this.models.push(model);\n\n    return this;\n  }\n\n  /**\n    Removes a model from this collection.\n\n    ```js\n    posts.length; // 5\n\n    let firstPost = posts.models[0];\n    posts.remove(firstPost);\n    posts.save();\n\n    posts.length; // 4\n    ```\n\n    @method remove\n    @param {Model} model\n    @return this\n    @public\n  */\n  remove(model) {\n    let match = this.models.find((m) => m.toString() === model.toString());\n    if (match) {\n      let i = this.models.indexOf(match);\n      this.models.splice(i, 1);\n    }\n\n    return this;\n  }\n\n  /**\n    Checks if the Collection includes the given model.\n\n    ```js\n    posts.includes(newPost);\n    ```\n\n    Works by checking if the given model name and id exists in the Collection,\n    making it a bit more flexible than strict object equality.\n\n    ```js\n    let post = server.create('post');\n    let programming = server.create('tag', { text: 'Programming' });\n\n    visit(`/posts/${post.id}`);\n    click('.tag-selector');\n    click('.tag:contains(Programming)');\n\n    post.reload();\n    assert.ok(post.tags.includes(programming));\n    ```\n\n    @method includes\n    @return {Boolean}\n    @public\n  */\n  includes(model) {\n    return this.models.some((m) => m.toString() === model.toString());\n  }\n\n  /**\n    Returns a new Collection with its models filtered according to the provided [callback function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter).\n\n    ```js\n    let publishedPosts = user.posts.filter(post => post.isPublished);\n    ```\n    @method filter\n    @param {Function} f\n    @return {Collection}\n    @public\n  */\n  filter(f) {\n    let filteredModels = this.models.filter(f);\n\n    return new Collection(this.modelName, filteredModels);\n  }\n\n  /**\n     Returns a new Collection with its models sorted according to the provided [compare function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Parameters).\n\n     ```js\n     let postsByTitleAsc = user.posts.sort((a, b) => a.title > b.title ? 1 : -1 );\n     ```\n\n     @method sort\n     @param {Function} f\n     @return {Collection}\n     @public\n   */\n  sort(f) {\n    let sortedModels = this.models.concat().sort(f);\n\n    return new Collection(this.modelName, sortedModels);\n  }\n\n  /**\n    Returns a new Collection with a subset of its models selected from `begin` to `end`.\n\n    ```js\n    let firstThreePosts = user.posts.slice(0, 3);\n    ```\n\n    @method slice\n    @param {Integer} begin\n    @param {Integer} end\n    @return {Collection}\n    @public\n  */\n  slice(...args) {\n    let slicedModels = this.models.slice(...args);\n\n    return new Collection(this.modelName, slicedModels);\n  }\n\n  /**\n    Modifies the Collection by merging the models from another collection.\n\n    ```js\n    user.posts.mergeCollection(newPosts);\n    user.posts.save();\n    ```\n\n    @method mergeCollection\n    @param {Collection} collection\n    @return this\n    @public\n   */\n  mergeCollection(collection) {\n    this.models = this.models.concat(collection.models);\n\n    return this;\n  }\n\n  /**\n     Simple string representation of the collection and id.\n\n     ```js\n     user.posts.toString(); // collection:post(post:1,post:4)\n     ```\n\n     @method toString\n     @return {String}\n     @public\n   */\n  toString() {\n    return `collection:${this.modelName}(${this.models\n      .map((m) => m.id)\n      .join(\",\")})`;\n  }\n}\n","import invokeMap from \"lodash/invokeMap\";\nimport isEqual from \"lodash/isEqual\";\n\n/**\n * An array of models, returned from one of the schema query\n * methods (all, find, where). Knows how to update and destroy its models.\n *\n * Identical to Collection except it can contain a heterogeneous array of\n * models. Thus, it has no `modelName` property. This lets serializers and\n * other parts of the system interact with it differently.\n *\n * @class PolymorphicCollection\n * @constructor\n * @public\n * @hide\n */\nexport default class PolymorphicCollection {\n  constructor(models = []) {\n    this.models = models;\n  }\n\n  /**\n   * Number of models in the collection.\n   *\n   * @property length\n   * @type Number\n   * @public\n   */\n  get length() {\n    return this.models.length;\n  }\n\n  /**\n   * Updates each model in the collection (persisting immediately to the db).\n   * @method update\n   * @param key\n   * @param val\n   * @return this\n   * @public\n   */\n  update(...args) {\n    invokeMap(this.models, \"update\", ...args);\n\n    return this;\n  }\n\n  /**\n   * Destroys the db record for all models in the collection.\n   * @method destroy\n   * @return this\n   * @public\n   */\n  destroy() {\n    invokeMap(this.models, \"destroy\");\n\n    return this;\n  }\n\n  /**\n   * Saves all models in the collection.\n   * @method save\n   * @return this\n   * @public\n   */\n  save() {\n    invokeMap(this.models, \"save\");\n\n    return this;\n  }\n\n  /**\n   * Reloads each model in the collection.\n   * @method reload\n   * @return this\n   * @public\n   */\n  reload() {\n    invokeMap(this.models, \"reload\");\n\n    return this;\n  }\n\n  /**\n   * Adds a model to this collection\n   *\n   * @method add\n   * @return this\n   * @public\n   */\n  add(model) {\n    this.models.push(model);\n\n    return this;\n  }\n\n  /**\n   * Removes a model to this collection\n   *\n   * @method remove\n   * @return this\n   * @public\n   */\n  remove(model) {\n    let match = this.models.find((m) => isEqual(m.attrs, model.attrs));\n    if (match) {\n      let i = this.models.indexOf(match);\n      this.models.splice(i, 1);\n    }\n\n    return this;\n  }\n\n  /**\n   * Checks if the collection includes the model\n   *\n   * @method includes\n   * @return boolean\n   * @public\n   */\n  includes(model) {\n    return this.models.some((m) => isEqual(m.attrs, model.attrs));\n  }\n\n  /**\n   * @method filter\n   * @param f\n   * @return {Collection}\n   * @public\n   */\n  filter(f) {\n    let filteredModels = this.models.filter(f);\n\n    return new PolymorphicCollection(filteredModels);\n  }\n\n  /**\n   * @method sort\n   * @param f\n   * @return {Collection}\n   * @public\n   */\n  sort(f) {\n    let sortedModels = this.models.concat().sort(f);\n\n    return new PolymorphicCollection(sortedModels);\n  }\n\n  /**\n   * @method slice\n   * @param {Integer} begin\n   * @param {Integer} end\n   * @return {Collection}\n   * @public\n   */\n  slice(...args) {\n    let slicedModels = this.models.slice(...args);\n\n    return new PolymorphicCollection(slicedModels);\n  }\n\n  /**\n   * @method mergeCollection\n   * @param collection\n   * @return this\n   * @public\n   */\n  mergeCollection(collection) {\n    this.models = this.models.concat(collection.models);\n\n    return this;\n  }\n\n  /**\n   * Simple string representation of the collection and id.\n   * @method toString\n   * @return {String}\n   * @public\n   */\n  toString() {\n    return `collection:${this.modelName}(${this.models\n      .map((m) => m.id)\n      .join(\",\")})`;\n  }\n}\n","import Association from \"./association\";\nimport Collection from \"../collection\";\nimport PolymorphicCollection from \"../polymorphic-collection\";\nimport compact from \"lodash/compact\";\nimport { capitalize, camelize } from \"../../utils/inflector\";\nimport assert from \"@lib/assert\";\n\nconst identifierCache = {};\n\n/**\n * @class HasMany\n * @extends Association\n * @constructor\n * @public\n * @hide\n */\nexport default class HasMany extends Association {\n  get identifier() {\n    if (typeof identifierCache[this.name] !== \"string\") {\n      const identifier = `${camelize(\n        this._container.inflector.singularize(this.name)\n      )}Ids`;\n\n      identifierCache[this.name] = identifier;\n    }\n\n    return identifierCache[this.name];\n  }\n\n  get type() {\n    return \"hasMany\";\n  }\n\n  /**\n   * @method getForeignKeyArray\n   * @return {Array} Array of camelized model name of associated objects\n   * and foreign key for the object owning the association\n   * @public\n   */\n  getForeignKeyArray() {\n    return [camelize(this.ownerModelName), this.getForeignKey()];\n  }\n\n  /**\n   * @method getForeignKey\n   * @return {String} Foreign key for the object owning the association\n   * @public\n   */\n  getForeignKey() {\n    // we reuse identifierCache because it's the same logic as get identifier\n    if (typeof identifierCache[this.name] !== \"string\") {\n      const foreignKey = `${this._container.inflector.singularize(\n        camelize(this.name)\n      )}Ids`;\n\n      identifierCache[this.name] = foreignKey;\n    }\n\n    return identifierCache[this.name];\n  }\n\n  /**\n   * Registers has-many association defined by given key on given model,\n   * defines getters / setters for associated records and associated records' ids,\n   * adds methods for creating unsaved child records and creating saved ones\n   *\n   * @method addMethodsToModelClass\n   * @param {Function} ModelClass\n   * @param {String} key\n   * @public\n   */\n  addMethodsToModelClass(ModelClass, key) {\n    let modelPrototype = ModelClass.prototype;\n    let association = this;\n    let foreignKey = this.getForeignKey();\n    let associationHash = { [key]: this };\n\n    modelPrototype.hasManyAssociations = Object.assign(\n      modelPrototype.hasManyAssociations,\n      associationHash\n    );\n\n    // update hasManyAssociationFks\n    Object.keys(modelPrototype.hasManyAssociations).forEach((key) => {\n      const value = modelPrototype.hasManyAssociations[key];\n      modelPrototype.hasManyAssociationFks[value.getForeignKey()] = value;\n    });\n\n    // Add to target's dependent associations array\n    this.schema.addDependentAssociation(this, this.modelName);\n\n    // TODO: look how this is used. Are these necessary, seems like they could be gotten from the above?\n    // Or we could use a single data structure to store this information?\n    modelPrototype.associationKeys.add(key);\n    modelPrototype.associationIdKeys.add(foreignKey);\n\n    Object.defineProperty(modelPrototype, foreignKey, {\n      /*\n        object.childrenIds\n          - returns an array of the associated children's ids\n      */\n      get() {\n        this._tempAssociations = this._tempAssociations || {};\n        let tempChildren = this._tempAssociations[key];\n        let ids = [];\n\n        if (tempChildren) {\n          if (association.isPolymorphic) {\n            ids = tempChildren.models.map((model) => ({\n              type: model.modelName,\n              id: model.id,\n            }));\n          } else {\n            ids = tempChildren.models.map((model) => model.id);\n          }\n        } else {\n          ids = this.attrs[foreignKey] || [];\n        }\n\n        return ids;\n      },\n\n      /*\n        object.childrenIds = ([childrenIds...])\n          - sets the associated children (via id)\n      */\n      set(ids) {\n        let tempChildren;\n\n        if (ids === null) {\n          tempChildren = [];\n        } else if (ids !== undefined) {\n          assert(\n            Array.isArray(ids),\n            `You must pass an array in when setting ${foreignKey} on ${this}`\n          );\n\n          if (association.isPolymorphic) {\n            assert(\n              ids.every((el) => {\n                return (\n                  typeof el === \"object\" &&\n                  typeof el.type !== undefined &&\n                  typeof el.id !== undefined\n                );\n              }),\n              `You must pass in an array of polymorphic identifiers (objects of shape { type, id }) when setting ${foreignKey} on ${this}`\n            );\n\n            let models = ids.map(({ type, id }) => {\n              return association.schema[\n                association.schema.toCollectionName(type)\n              ].find(id);\n            });\n            tempChildren = new PolymorphicCollection(models);\n          } else {\n            tempChildren =\n              association.schema[\n                association.schema.toCollectionName(association.modelName)\n              ].find(ids);\n          }\n        }\n\n        this[key] = tempChildren;\n      },\n    });\n\n    Object.defineProperty(modelPrototype, key, {\n      /*\n        object.children\n          - returns an array of associated children\n      */\n      get() {\n        this._tempAssociations = this._tempAssociations || {};\n        let collection = null;\n\n        if (this._tempAssociations[key]) {\n          collection = this._tempAssociations[key];\n        } else {\n          if (association.isPolymorphic) {\n            if (this[foreignKey]) {\n              let polymorphicIds = this[foreignKey];\n              let models = polymorphicIds.map(({ type, id }) => {\n                return association.schema[\n                  association.schema.toCollectionName(type)\n                ].find(id);\n              });\n\n              collection = new PolymorphicCollection(models);\n            } else {\n              collection = new PolymorphicCollection(association.modelName);\n            }\n          } else {\n            if (this[foreignKey]) {\n              collection = association.schema[\n                association.schema.toCollectionName(association.modelName)\n              ].find(this[foreignKey]);\n            } else {\n              collection = new Collection(association.modelName);\n            }\n          }\n\n          this._tempAssociations[key] = collection;\n        }\n\n        return collection;\n      },\n\n      /*\n        object.children = [model1, model2, ...]\n          - sets the associated children (via array of models or Collection)\n      */\n      set(models) {\n        if (\n          models instanceof Collection ||\n          models instanceof PolymorphicCollection\n        ) {\n          models = models.models;\n        }\n\n        models = models ? compact(models) : [];\n        this._tempAssociations = this._tempAssociations || {};\n\n        let collection;\n        if (association.isPolymorphic) {\n          collection = new PolymorphicCollection(models);\n        } else {\n          collection = new Collection(association.modelName, models);\n        }\n        this._tempAssociations[key] = collection;\n\n        models.forEach((model) => {\n          if (model.hasInverseFor(association)) {\n            let inverse = model.inverseFor(association);\n\n            model.associate(this, inverse);\n          }\n        });\n      },\n    });\n\n    /*\n      object.newChild\n        - creates a new unsaved associated child\n    */\n    modelPrototype[\n      `new${capitalize(\n        camelize(this._container.inflector.singularize(association.name))\n      )}`\n    ] = function (...args) {\n      let modelName, attrs;\n      if (association.isPolymorphic) {\n        modelName = args[0];\n        attrs = args[1];\n      } else {\n        modelName = association.modelName;\n        attrs = args[0];\n      }\n\n      let child =\n        association.schema[association.schema.toCollectionName(modelName)].new(\n          attrs\n        );\n      let children = this[key].models;\n\n      children.push(child);\n      this[key] = children;\n\n      return child;\n    };\n\n    /*\n      object.createChild\n        - creates a new saved associated child, and immediately persists both models\n\n      TODO: forgot why this[key].add(child) doesn't work, most likely\n      because these external APIs trigger saving cascades. Should probably\n      have an internal method like this[key]._add.\n    */\n    modelPrototype[\n      `create${capitalize(\n        camelize(this._container.inflector.singularize(association.name))\n      )}`\n    ] = function (...args) {\n      let modelName, attrs;\n      if (association.isPolymorphic) {\n        modelName = args[0];\n        attrs = args[1];\n      } else {\n        modelName = association.modelName;\n        attrs = args[0];\n      }\n\n      let child =\n        association.schema[\n          association.schema.toCollectionName(modelName)\n        ].create(attrs);\n      let children = this[key].models;\n\n      children.push(child);\n      this[key] = children;\n\n      this.save();\n\n      return child.reload();\n    };\n  }\n\n  /**\n   *\n   *\n   * @public\n   */\n  disassociateAllDependentsFromTarget(model) {\n    let owner = this.ownerModelName;\n    let fk;\n\n    if (this.isPolymorphic) {\n      fk = { type: model.modelName, id: model.id };\n    } else {\n      fk = model.id;\n    }\n\n    let dependents = this.schema[this.schema.toCollectionName(owner)].where(\n      (potentialOwner) => {\n        let currentIds = potentialOwner[this.getForeignKey()];\n\n        // Need this check because currentIds could be null\n        return (\n          currentIds &&\n          currentIds.find((id) => {\n            if (typeof id === \"object\") {\n              return id.type === fk.type && id.id === fk.id;\n            } else {\n              return id === fk;\n            }\n          })\n        );\n      }\n    );\n\n    dependents.models.forEach((dependent) => {\n      dependent.disassociate(model, this);\n      dependent.save();\n    });\n  }\n}\n","import assert from \"../assert\";\nimport { camelize, dasherize } from \"../utils/inflector\";\nimport HasMany from \"../orm/associations/has-many\";\n\nconst pathModelClassCache = {};\n\n/**\n  @hide\n*/\nexport default class BaseRouteHandler {\n  getModelClassFromPath(fullPath) {\n    if (!fullPath) {\n      return;\n    }\n\n    if (typeof pathModelClassCache[fullPath] !== \"string\") {\n      let path = fullPath.split(\"/\");\n      let lastPath;\n\n      for (let i = path.length - 1; i >= 0; i--) {\n        const segment = path[i];\n        if (segment.length && segment[0] !== \":\") {\n          lastPath = segment;\n          break;\n        }\n      }\n\n      pathModelClassCache[fullPath] = dasherize(\n        camelize(this._container.inflector.singularize(lastPath))\n      );\n    }\n\n    return pathModelClassCache[fullPath];\n  }\n\n  _getIdForRequest(request, jsonApiDoc) {\n    let id;\n    if (request && request.params && request.params.id) {\n      id = request.params.id;\n    } else if (jsonApiDoc && jsonApiDoc.data && jsonApiDoc.data.id) {\n      id = jsonApiDoc.data.id;\n    }\n    return id;\n  }\n\n  _getJsonApiDocForRequest(request, modelName) {\n    let body;\n    if (request && request.requestBody) {\n      body = JSON.parse(request.requestBody);\n    }\n    return this.serializerOrRegistry.normalize(body, modelName);\n  }\n\n  _getAttrsForRequest(request, modelName) {\n    let json = this._getJsonApiDocForRequest(request, modelName);\n    let id = this._getIdForRequest(request, json);\n    let attrs = {};\n\n    assert(\n      json.data &&\n        (json.data.attributes || json.data.type || json.data.relationships),\n      `You're using a shorthand or #normalizedRequestAttrs, but your serializer's normalize function did not return a valid JSON:API document. Consult the docs for the normalize hook on the Serializer class.`\n    );\n\n    if (json.data.attributes) {\n      attrs = Object.keys(json.data.attributes).reduce((sum, key) => {\n        sum[camelize(key)] = json.data.attributes[key];\n        return sum;\n      }, {});\n    }\n\n    if (json.data.relationships) {\n      Object.keys(json.data.relationships).forEach((relationshipName) => {\n        let relationship = json.data.relationships[relationshipName];\n        let modelClass = this.schema.modelClassFor(modelName);\n        let association = modelClass.associationFor(camelize(relationshipName));\n        let valueForRelationship;\n\n        assert(\n          association,\n          `You're passing the relationship '${relationshipName}' to the '${modelName}' model via a ${request.method} to '${request.url}', but you did not define the '${relationshipName}' association on the '${modelName}' model.`\n        );\n\n        if (association.isPolymorphic) {\n          valueForRelationship = relationship.data;\n        } else if (association instanceof HasMany) {\n          valueForRelationship =\n            relationship.data && relationship.data.map((rel) => rel.id);\n        } else {\n          valueForRelationship = relationship.data && relationship.data.id;\n        }\n\n        attrs[association.identifier] = valueForRelationship;\n      }, {});\n    }\n\n    if (id) {\n      attrs.id = id;\n    }\n\n    return attrs;\n  }\n\n  _getAttrsForFormRequest({ requestBody }) {\n    let attrs;\n    let urlEncodedParts = [];\n\n    assert(\n      requestBody && typeof requestBody === \"string\",\n      `You're using the helper method #normalizedFormData, but the request body is empty or not a valid url encoded string.`\n    );\n\n    urlEncodedParts = requestBody.split(\"&\");\n\n    attrs = urlEncodedParts.reduce((a, urlEncodedPart) => {\n      let [key, value] = urlEncodedPart.split(\"=\");\n      a[key] = decodeURIComponent(value.replace(/\\+/g, \" \"));\n      return a;\n    }, {});\n\n    return attrs;\n  }\n}\n","import BaseRouteHandler from \"./base\";\nimport assert from \"../assert\";\nimport { dasherize } from \"../utils/inflector\";\n\n/**\n * @hide\n */\nexport default class FunctionRouteHandler extends BaseRouteHandler {\n  constructor(schema, serializerOrRegistry, userFunction, path, server) {\n    super(server);\n    this.schema = schema;\n    this.serializerOrRegistry = serializerOrRegistry;\n    this.userFunction = userFunction;\n    this.path = path;\n  }\n\n  handle(request) {\n    return this.userFunction(this.schema, request);\n  }\n\n  setRequest(request) {\n    this.request = request;\n  }\n\n  serialize(response, serializerType) {\n    let serializer;\n\n    if (serializerType) {\n      serializer = this.serializerOrRegistry.serializerFor(serializerType, {\n        explicit: true,\n      });\n    } else {\n      serializer = this.serializerOrRegistry;\n    }\n\n    return serializer.serialize(response, this.request);\n  }\n\n  normalizedRequestAttrs(modelName = null) {\n    let {\n      path,\n      request,\n      request: { requestHeaders },\n    } = this;\n    let attrs;\n\n    let lowerCaseHeaders = {};\n    for (let header in requestHeaders) {\n      lowerCaseHeaders[header.toLowerCase()] = requestHeaders[header];\n    }\n    if (/x-www-form-urlencoded/.test(lowerCaseHeaders[\"content-type\"])) {\n      attrs = this._getAttrsForFormRequest(request);\n    } else {\n      if (modelName) {\n        assert(\n          dasherize(modelName) === modelName,\n          `You called normalizedRequestAttrs('${modelName}'), but normalizedRequestAttrs was intended to be used with the dasherized version of the model type. Please change this to normalizedRequestAttrs('${dasherize(\n            modelName\n          )}').`\n        );\n      } else {\n        modelName = this.getModelClassFromPath(path);\n      }\n\n      assert(\n        this.schema.hasModelForModelName(modelName),\n        `You're using a shorthand or the #normalizedRequestAttrs helper but the detected model of '${modelName}' does not exist. You might need to pass in the correct modelName as the first argument to #normalizedRequestAttrs.`\n      );\n\n      attrs = this._getAttrsForRequest(request, modelName);\n    }\n\n    return attrs;\n  }\n}\n","/**\n * @hide\n */\nexport default class ObjectRouteHandler {\n  constructor(schema, serializerOrRegistry, object) {\n    this.schema = schema;\n    this.serializerOrRegistry = serializerOrRegistry;\n    this.object = object;\n  }\n\n  handle(/* request */) {\n    return this.object;\n  }\n}\n","import BaseRouteHandler from \"../base\";\n\n/**\n  @hide\n*/\nexport default class BaseShorthandRouteHandler extends BaseRouteHandler {\n  constructor(schema, serializerOrRegistry, shorthand, path, options = {}) {\n    super();\n    shorthand = shorthand || this.getModelClassFromPath(path);\n    this.schema = schema;\n    this.serializerOrRegistry = serializerOrRegistry;\n    this.shorthand = shorthand;\n    this.options = options;\n\n    let type = Array.isArray(shorthand) ? \"array\" : typeof shorthand;\n    if (type === \"string\") {\n      let modelClass = this.schema[this.schema.toCollectionName(shorthand)];\n      this.handle = (request) => {\n        return this.handleStringShorthand(request, modelClass);\n      };\n    } else if (type === \"array\") {\n      let modelClasses = shorthand.map(\n        (modelName) => this.schema[this.schema.toCollectionName(modelName)]\n      );\n      this.handle = (request) => {\n        return this.handleArrayShorthand(request, modelClasses);\n      };\n    }\n  }\n\n  // handleStringShorthand() {\n  //\n  // }\n  //\n  // handleArrayShorthand() {\n  //\n  // }\n}\n","import assert from \"../../assert\";\nimport BaseShorthandRouteHandler from \"./base\";\nimport Response from \"../../response\";\nimport { camelize } from \"../../utils/inflector\";\n\n/**\n * @hide\n */\nexport default class GetShorthandRouteHandler extends BaseShorthandRouteHandler {\n  /*\n    Retrieve a model/collection from the db.\n\n    Examples:\n      this.get('/contacts', 'contact');\n      this.get('/contacts/:id', 'contact');\n  */\n  handleStringShorthand(request, modelClass) {\n    let modelName = this.shorthand;\n    let camelizedModelName = camelize(modelName);\n\n    assert(\n      modelClass,\n      `The route handler for ${request.url} is trying to access the ${camelizedModelName} model, but that model doesn't exist.`\n    );\n\n    let id = this._getIdForRequest(request);\n    if (id) {\n      let model = modelClass.find(id);\n      if (!model) {\n        return new Response(404);\n      } else {\n        return model;\n      }\n    } else if (this.options.coalesce) {\n      let ids = this.serializerOrRegistry.getCoalescedIds(\n        request,\n        camelizedModelName\n      );\n      if (ids) {\n        return modelClass.find(ids);\n      }\n    }\n    return modelClass.all();\n  }\n\n  /*\n    Retrieve an array of collections from the db.\n\n    Ex: this.get('/home', ['contacts', 'pictures']);\n  */\n  handleArrayShorthand(request, modelClasses) {\n    let keys = this.shorthand;\n    let id = this._getIdForRequest(request);\n\n    /*\n    If the first key is singular and we have an id param in\n    the request, we're dealing with the version of the shorthand\n    that has a parent model and several has-many relationships.\n    We throw an error, because the serializer is the appropriate\n    place for this now.\n    */\n    assert(\n      !id || this._container.inflector.singularize(keys[0]) !== keys[0],\n      `It looks like you're using the \"Single record with\n      related records\" version of the array shorthand, in addition to opting\n      in to the model layer. This shorthand was made when there was no\n      serializer layer. Now that you're using models, please ensure your\n      relationships are defined, and create a serializer for the parent\n      model, adding the relationships there.`\n    );\n\n    return modelClasses.map((modelClass) => modelClass.all());\n  }\n}\n","import assert from \"../../assert\";\nimport BaseShorthandRouteHandler from \"./base\";\nimport { camelize } from \"../../utils/inflector\";\n\n/**\n * @hide\n */\nexport default class PostShorthandRouteHandler extends BaseShorthandRouteHandler {\n  /*\n    Push a new model of type *camelizedModelName* to the db.\n\n    For example, this will push a 'user':\n      this.post('/contacts', 'user');\n  */\n\n  handleStringShorthand(request, modelClass) {\n    let modelName = this.shorthand;\n    let camelizedModelName = camelize(modelName);\n    assert(\n      modelClass,\n      `The route handler for ${request.url} is trying to access the ${camelizedModelName} model, but that model doesn't exist.`\n    );\n\n    let attrs = this._getAttrsForRequest(\n      request,\n      modelClass.camelizedModelName\n    );\n    return modelClass.create(attrs);\n  }\n}\n","import assert from \"../../assert\";\nimport BaseShorthandRouteHandler from \"./base\";\nimport { camelize } from \"../../utils/inflector\";\nimport Response from \"../../response\";\n\n/**\n * @hide\n */\nexport default class PutShorthandRouteHandler extends BaseShorthandRouteHandler {\n  /*\n    Update an object from the db, specifying the type.\n\n      this.put('/contacts/:id', 'user');\n  */\n  handleStringShorthand(request, modelClass) {\n    let modelName = this.shorthand;\n    let camelizedModelName = camelize(modelName);\n\n    assert(\n      modelClass,\n      `The route handler for ${request.url} is trying to access the ${camelizedModelName} model, but that model doesn't exist.`\n    );\n\n    let id = this._getIdForRequest(request);\n\n    let model = modelClass.find(id);\n    if (!model) {\n      return new Response(404);\n    }\n\n    let attrs = this._getAttrsForRequest(\n      request,\n      modelClass.camelizedModelName\n    );\n\n    return model.update(attrs);\n  }\n}\n","import assert from \"../../assert\";\nimport BaseShorthandRouteHandler from \"./base\";\nimport { camelize } from \"../../utils/inflector\";\nimport Response from \"../../response\";\n\n/**\n * @hide\n */\nexport default class DeleteShorthandRouteHandler extends BaseShorthandRouteHandler {\n  /*\n    Remove the model from the db of type *camelizedModelName*.\n\n    This would remove the user with id :id:\n      Ex: this.del('/contacts/:id', 'user');\n  */\n  handleStringShorthand(request, modelClass) {\n    let modelName = this.shorthand;\n    let camelizedModelName = camelize(modelName);\n    assert(\n      modelClass,\n      `The route handler for ${request.url} is trying to access the ${camelizedModelName} model, but that model doesn't exist.`\n    );\n\n    let id = this._getIdForRequest(request);\n    let model = modelClass.find(id);\n    if (!model) {\n      return new Response(404);\n    }\n\n    model.destroy();\n  }\n\n  /*\n    Remove the model and child related models from the db.\n\n    This would remove the contact with id `:id`, as well\n    as this contact's addresses and phone numbers.\n      Ex: this.del('/contacts/:id', ['contact', 'addresses', 'numbers');\n  */\n  handleArrayShorthand(request, modelClasses) {\n    let id = this._getIdForRequest(request);\n\n    let parent = modelClasses[0].find(id);\n    let childTypes = modelClasses\n      .slice(1)\n      .map((modelClass) =>\n        this._container.inflector.pluralize(modelClass.camelizedModelName)\n      );\n\n    // Delete related children\n    childTypes.forEach((type) => parent[type].destroy());\n    parent.destroy();\n  }\n}\n","import assert from \"../../assert\";\nimport BaseShorthandRouteHandler from \"./base\";\nimport Response from \"../../response\";\nimport { camelize } from \"../../utils/inflector\";\n\n/**\n * @hide\n */\nexport default class HeadShorthandRouteHandler extends BaseShorthandRouteHandler {\n  /*\n    Retrieve a model/collection from the db.\n\n    Examples:\n      this.head('/contacts', 'contact');\n      this.head('/contacts/:id', 'contact');\n  */\n  handleStringShorthand(request, modelClass) {\n    let modelName = this.shorthand;\n    let camelizedModelName = camelize(modelName);\n\n    assert(\n      modelClass,\n      `The route handler for ${request.url} is trying to access the ${camelizedModelName} model, but that model doesn't exist.`\n    );\n\n    let id = this._getIdForRequest(request);\n    if (id) {\n      let model = modelClass.find(id);\n      if (!model) {\n        return new Response(404);\n      } else {\n        return new Response(204);\n      }\n    } else if (\n      this.options.coalesce &&\n      request.queryParams &&\n      request.queryParams.ids\n    ) {\n      let model = modelClass.find(request.queryParams.ids);\n\n      if (!model) {\n        return new Response(404);\n      } else {\n        return new Response(204);\n      }\n    } else {\n      return new Response(204);\n    }\n  }\n}\n","import { MirageError } from \"./assert\";\nimport Response from \"./response\";\nimport FunctionHandler from \"./route-handlers/function\";\nimport ObjectHandler from \"./route-handlers/object\";\nimport GetShorthandHandler from \"./route-handlers/shorthands/get\";\nimport PostShorthandHandler from \"./route-handlers/shorthands/post\";\nimport PutShorthandHandler from \"./route-handlers/shorthands/put\";\nimport DeleteShorthandHandler from \"./route-handlers/shorthands/delete\";\nimport HeadShorthandHandler from \"./route-handlers/shorthands/head\";\n\nconst DEFAULT_CODES = { get: 200, put: 204, post: 201, delete: 204 };\n\nfunction createHandler({\n  verb,\n  schema,\n  serializerOrRegistry,\n  path,\n  rawHandler,\n  options,\n  middleware,\n}) {\n  let handler;\n  let args = [\n    schema,\n    serializerOrRegistry,\n    rawHandler,\n    path,\n    options,\n    middleware,\n  ];\n  let type = typeof rawHandler;\n\n  if (type === \"function\") {\n    handler = new FunctionHandler(...args);\n  } else if (type === \"object\" && rawHandler) {\n    handler = new ObjectHandler(...args);\n  } else if (verb === \"get\") {\n    handler = new GetShorthandHandler(...args);\n  } else if (verb === \"post\") {\n    handler = new PostShorthandHandler(...args);\n  } else if (verb === \"put\" || verb === \"patch\") {\n    handler = new PutShorthandHandler(...args);\n  } else if (verb === \"delete\") {\n    handler = new DeleteShorthandHandler(...args);\n  } else if (verb === \"head\") {\n    handler = new HeadShorthandHandler(...args);\n  }\n  return handler;\n}\n\n/**\n * @hide\n */\nexport default class RouteHandler {\n  constructor({\n    schema,\n    verb,\n    rawHandler,\n    customizedCode,\n    options,\n    path,\n    serializerOrRegistry,\n    middleware,\n  }) {\n    this.verb = verb;\n    this.customizedCode = customizedCode;\n    this.serializerOrRegistry = serializerOrRegistry;\n    this.middleware = middleware || [];\n    this.handler = createHandler({\n      verb,\n      schema,\n      path,\n      serializerOrRegistry,\n      rawHandler,\n      options,\n    });\n  }\n\n  handle(request) {\n    return this._getMirageResponseForRequest(request, this.middleware)\n      .then((mirageResponse) => this.serialize(mirageResponse, request))\n      .then((serializedMirageResponse) => {\n        return serializedMirageResponse.toRackResponse();\n      });\n  }\n\n  _getMirageResponseForRequest(request, middleware = []) {\n    let result;\n    try {\n      /*\n       We need to do this for the #serialize convenience method. Probably is\n       a better way.\n     */\n      if (this.handler instanceof FunctionHandler) {\n        this.handler.setRequest(request);\n      }\n\n      result = this.handleWithMiddleware(request, [\n        ...middleware,\n        (_, req) => this.handler.handle(req),\n      ]);\n    } catch (e) {\n      if (e instanceof MirageError) {\n        result = new Response(500, {}, e);\n      } else {\n        let message = e.message || e;\n\n        result = new Response(\n          500,\n          {},\n          {\n            message,\n            stack: `Mirage: Your ${request.method} handler for the url ${\n              request.url\n            } threw an error:\\n\\n${e.stack || e}`,\n          }\n        );\n      }\n    }\n\n    return this._toMirageResponse(result);\n  }\n\n  handleWithMiddleware(request, middleware) {\n    const [current, ...remaining] = middleware;\n    return current(this.schema, request, (req = request) => {\n      return this.handleWithMiddleware(req, remaining);\n    });\n  }\n\n  _toMirageResponse(result) {\n    let mirageResponse;\n\n    return new Promise((resolve, reject) => {\n      Promise.resolve(result)\n        .then((response) => {\n          if (response instanceof Response) {\n            mirageResponse = result;\n          } else {\n            let code = this._getCodeForResponse(response);\n            mirageResponse = new Response(code, {}, response);\n          }\n          resolve(mirageResponse);\n        })\n        .catch(reject);\n    });\n  }\n\n  _getCodeForResponse(response) {\n    let code;\n    if (this.customizedCode) {\n      code = this.customizedCode;\n    } else {\n      code = DEFAULT_CODES[this.verb];\n      // Returning any data for a 204 is invalid\n      if (code === 204 && response !== undefined && response !== \"\") {\n        code = 200;\n      }\n    }\n    return code;\n  }\n\n  serialize(mirageResponse, request) {\n    mirageResponse.data = this.serializerOrRegistry.serialize(\n      mirageResponse.data,\n      request\n    );\n\n    return mirageResponse;\n  }\n}\n","import has from \"lodash/has\";\n\n/**\n  @hide\n*/\nexport default function extend(protoProps, staticProps) {\n  class Child extends this {\n    constructor(...args) {\n      super(...args);\n      // The constructor function for the new subclass is optionally defined by you\n      // in your `extend` definition\n      if (protoProps && has(protoProps, \"constructor\")) {\n        protoProps.constructor.call(this, ...args);\n      }\n    }\n  }\n\n  // Add static properties to the constructor function, if supplied.\n\n  Object.assign(Child, this, staticProps);\n\n  // Add prototype properties (instance properties) to the subclass,\n  // if supplied.\n  if (protoProps) {\n    Object.assign(Child.prototype, protoProps);\n  }\n\n  return Child;\n}\n","import BelongsTo from \"./associations/belongs-to\";\nimport HasMany from \"./associations/has-many\";\nimport extend from \"../utils/extend\";\nimport assert from \"../assert\";\nimport Collection from \"./collection\";\nimport PolymorphicCollection from \"./polymorphic-collection\";\nimport values from \"lodash/values\";\nimport compact from \"lodash/compact\";\n\n/**\n  Models wrap your database, and allow you to define relationships.\n\n  **Class vs. instance methods**\n\n  The methods documented below apply to _instances_ of models, but you'll typically use the `Schema` to access the model _class_, which can be used to find or create instances.\n\n  You can find the Class methods documented under the `Schema` API docs.\n\n  **Accessing properties and relationships**\n\n  You can access properites (fields) and relationships directly off of models.\n\n  ```js\n  user.name;    // 'Sam'\n  user.team;    // Team model\n  user.teamId;  // Team id (foreign key)\n  ```\n\n  Mirage Models are schemaless in their attributes, but their relationship schema is known.\n\n  For example,\n\n  ```js\n  let user = schema.users.create();\n  user.attrs  // { }\n  user.name   // undefined\n\n  let user = schema.users.create({ name: 'Sam' });\n  user.attrs  // { name: 'Sam' }\n  user.name   // 'Sam'\n  ```\n\n  However, if a `user` has a `posts` relationships defined,\n\n  ```js\n  let user = schema.users.create();\n  user.posts  // returns an empty Posts Collection\n  ```\n\n  @class Model\n  @constructor\n  @public\n */\nclass Model {\n  // TODO: schema and modelName now set statically at registration, need to remove\n  /*\n    Notes:\n\n  - We need to pass in modelName, because models are created with\n    .extend and anonymous functions, so you cannot use\n    reflection to find the name of the constructor.\n  */\n  constructor(schema, modelName, attrs, fks) {\n    assert(schema, \"A model requires a schema\");\n    assert(modelName, \"A model requires a modelName\");\n\n    this._schema = schema;\n    this.modelName = modelName;\n    this.fks = fks || [];\n\n    /**\n      Returns the attributes of your model.\n\n      ```js\n      let post = schema.blogPosts.find(1);\n      post.attrs; // {id: 1, title: 'Lorem Ipsum', publishedAt: '2012-01-01 10:00:00'}\n      ```\n\n      Note that you can also access individual attributes directly off a model, e.g. `post.title`.\n\n      @property attrs\n      @public\n    */\n    this.attrs = {};\n\n    attrs = attrs || {};\n\n    // Ensure fks are there\n    this.fks.forEach((fk) => {\n      this.attrs[fk] = attrs[fk] !== undefined ? attrs[fk] : null;\n    });\n\n    Object.keys(attrs).forEach((name) => {\n      const value = attrs[name];\n\n      this._validateAttr(name, value);\n      this._setupAttr(name, value);\n      this._setupRelationship(name, value);\n    });\n\n    return this;\n  }\n\n  /**\n    Create or saves the model.\n\n    ```js\n    let post = blogPosts.new({ title: 'Lorem ipsum' });\n    post.id; // null\n\n    post.save();\n    post.id; // 1\n\n    post.title = 'Hipster ipsum'; // db has not been updated\n    post.save();                  // ...now the db is updated\n    ```\n\n    @method save\n    @return this\n    @public\n   */\n  save() {\n    let collection = this._schema.toInternalCollectionName(this.modelName);\n\n    if (this.isNew()) {\n      // Update the attrs with the db response\n      this.attrs = this._schema.db[collection].insert(this.attrs);\n\n      // Ensure the id getter/setter is set\n      this._definePlainAttribute(\"id\");\n    } else {\n      this._schema.isSaving[this.toString()] = true;\n      this._schema.db[collection].update(this.attrs.id, this.attrs);\n    }\n\n    this._saveAssociations();\n\n    this._schema.isSaving[this.toString()] = false;\n    return this;\n  }\n\n  /**\n    Updates the record in the db.\n\n    ```js\n    let author = authors.find(1);\n    let followers = users.find([1, 2]);\n    let post = blogPosts.find(1);\n    post.update('title', 'Hipster ipsum'); // the db was updated\n    post.update({\n      title: 'Lorem ipsum',\n      created_at: 'before it was cool'\n    });\n    post.update({ author });\n    post.update({ followers });\n    ```\n\n    @method update\n    @param {String} key\n    @param {any} val\n    @return this\n    @public\n   */\n  update(key, val) {\n    let attrs;\n    if (key == null) {\n      return this;\n    }\n\n    if (typeof key === \"object\") {\n      attrs = key;\n    } else {\n      (attrs = {})[key] = val;\n    }\n\n    Object.keys(attrs).forEach(function (attr) {\n      if (\n        !this.associationKeys.has(attr) &&\n        !this.associationIdKeys.has(attr)\n      ) {\n        this._definePlainAttribute(attr);\n      }\n      this[attr] = attrs[attr];\n    }, this);\n\n    this.save();\n\n    return this;\n  }\n\n  /**\n    Destroys the db record.\n\n    ```js\n    let post = blogPosts.find(1);\n    post.destroy(); // removed from the db\n    ```\n\n    @method destroy\n    @public\n   */\n  destroy() {\n    if (this.isSaved()) {\n      this._disassociateFromDependents();\n\n      let collection = this._schema.toInternalCollectionName(this.modelName);\n      this._schema.db[collection].remove(this.attrs.id);\n    }\n  }\n\n  /**\n    Boolean, true if the model has not been persisted yet to the db.\n\n    ```js\n    let post = blogPosts.new({title: 'Lorem ipsum'});\n    post.isNew(); // true\n    post.id;      // null\n\n    post.save();  // true\n    post.isNew(); // false\n    post.id;      // 1\n    ```\n\n    @method isNew\n    @return {Boolean}\n    @public\n   */\n  isNew() {\n    let hasDbRecord = false;\n    let hasId = this.attrs.id !== undefined && this.attrs.id !== null;\n\n    if (hasId) {\n      let collectionName = this._schema.toInternalCollectionName(\n        this.modelName\n      );\n      let record = this._schema.db[collectionName].find(this.attrs.id);\n\n      if (record) {\n        hasDbRecord = true;\n      }\n    }\n\n    return !hasDbRecord;\n  }\n\n  /**\n    Boolean, opposite of `isNew`\n\n    @method isSaved\n    @return {Boolean}\n    @public\n   */\n  isSaved() {\n    return !this.isNew();\n  }\n\n  /**\n    Reload a model's data from the database.\n\n    ```js\n    let post = blogPosts.find(1);\n    post.attrs;     // {id: 1, title: 'Lorem ipsum'}\n\n    post.title = 'Hipster ipsum';\n    post.title;     // 'Hipster ipsum';\n\n    post.reload();  // true\n    post.title;     // 'Lorem ipsum'\n    ```\n\n    @method reload\n    @return this\n    @public\n   */\n  reload() {\n    if (this.id) {\n      let collection = this._schema.toInternalCollectionName(this.modelName);\n      let attrs = this._schema.db[collection].find(this.id);\n\n      Object.keys(attrs)\n        .filter(function (attr) {\n          return attr !== \"id\";\n        })\n        .forEach(function (attr) {\n          this.attrs[attr] = attrs[attr];\n        }, this);\n    }\n\n    // Clear temp associations\n    this._tempAssociations = {};\n\n    return this;\n  }\n\n  toJSON() {\n    return { ...this.attrs };\n  }\n\n  /**\n    Returns a hash of this model's associations.\n\n    ```js\n    let server = createServer({\n      models: {\n        user: Model,\n        post: Model.extend({\n          user: belongsTo(),\n          comments: hasMany()\n        }),\n        comment: Model\n      },\n\n      seeds(server) {\n        let peter = server.create(\"user\", { name: \"Peter\" });\n        server.create(\"post\", { user: peter });\n      }\n    });\n\n    let post = server.schema.posts.find(1)\n    post.associations\n\n    // {\n    //   user: BelongsToAssociation,\n    //   comments: HasManyAssociation\n    // }\n    ```\n\n    Check out the docs on the Association class to see what fields are available for each association.\n\n    @method associations\n    @type {Object}\n    @public\n   */\n  get associations() {\n    return this._schema.associationsFor(this.modelName);\n  }\n\n  /**\n    Returns the association for the given key\n\n    @method associationFor\n    @param key\n    @public\n    @hide\n   */\n  associationFor(key) {\n    return this.associations[key];\n  }\n\n  /**\n    Returns this model's inverse association for the given\n    model-type-association pair, if it exists.\n\n    Example:\n\n         post: Model.extend({\n           comments: hasMany()\n         }),\n         comments: Model.extend({\n           post: belongsTo()\n         })\n\n     post.inversefor(commentsPostAssociation) would return the\n     `post.comments` association object.\n\n     Originally we had association.inverse() but that became impossible with\n     the addition of polymorphic models. Consider the following:\n\n         post: Model.extend({\n           comments: hasMany()\n         }),\n         picture: Model.extend({\n           comments: hasMany()\n         }),\n         comments: Model.extend({\n           commentable: belongsTo({ polymorphic: true })\n         })\n\n     `commentable.inverse()` is ambiguous - does it return\n     `post.comments` or `picture.comments`? Instead we need to ask each model\n     if it has an inverse for a given association. post.inverseFor(commentable)\n     is no longer ambiguous.\n\n    @method hasInverseFor\n    @param {String} modelName The model name of the class we're scanning\n    @param {ORM/Association} association\n    @return {ORM/Association}\n    @public\n    @hide\n   */\n  inverseFor(association) {\n    return (\n      this._explicitInverseFor(association) ||\n      this._implicitInverseFor(association)\n    );\n  }\n\n  /**\n    Finds the inverse for an association that explicity defines it's inverse\n\n    @private\n    @hide\n  */\n  _explicitInverseFor(association) {\n    this._checkForMultipleExplicitInverses(association);\n\n    let associations = this._schema.associationsFor(this.modelName);\n    let inverse = association.opts.inverse;\n    let candidate = inverse ? associations[inverse] : null;\n    let matchingPolymorphic = candidate && candidate.isPolymorphic;\n    let matchingInverse =\n      candidate && candidate.modelName === association.ownerModelName;\n    let candidateInverse = candidate && candidate.opts.inverse;\n\n    if (candidateInverse && candidate.opts.inverse !== association.name) {\n      assert(\n        false,\n        `You specified an inverse of ${inverse} for ${association.name}, but it does not match ${candidate.modelName} ${candidate.name}'s inverse`\n      );\n    }\n\n    return matchingPolymorphic || matchingInverse ? candidate : null;\n  }\n\n  /**\n    Ensures multiple explicit inverses don't exist on the current model\n    for the given association.\n\n    TODO: move this to compile-time check\n\n    @private\n    @hide\n  */\n  _checkForMultipleExplicitInverses(association) {\n    let associations = this._schema.associationsFor(this.modelName);\n    let matchingExplicitInverses = Object.keys(associations).filter((key) => {\n      let candidate = associations[key];\n      let modelMatches = association.ownerModelName === candidate.modelName;\n      let inverseKeyMatches = association.name === candidate.opts.inverse;\n\n      return modelMatches && inverseKeyMatches;\n    });\n    assert(\n      matchingExplicitInverses.length <= 1,\n      `The ${this.modelName} model has defined multiple explicit inverse associations for the ${association.ownerModelName}.${association.name} association.`\n    );\n  }\n\n  /**\n    Finds if there is an inverse for an association that does not\n    explicitly define one.\n\n    @private\n    @hide\n  */\n  _implicitInverseFor(association) {\n    let associations = this._schema.associationsFor(this.modelName);\n    let modelName = association.ownerModelName;\n\n    return values(associations)\n      .filter((candidate) => candidate.modelName === modelName)\n      .reduce((inverse, candidate) => {\n        let candidateInverse = candidate.opts.inverse;\n        let candidateIsImplicitInverse = candidateInverse === undefined;\n        let candidateIsExplicitInverse = candidateInverse === association.name;\n\n        let candidateMatches =\n          candidateIsImplicitInverse || candidateIsExplicitInverse;\n\n        if (candidateMatches) {\n          // Need to move this check to compile-time init\n          assert(\n            !inverse,\n            `The ${this.modelName} model has multiple possible inverse associations for the ${association.ownerModelName}.${association.name} association.`\n          );\n          inverse = candidate;\n        }\n\n        return inverse;\n      }, null);\n  }\n\n  /**\n    Returns whether this model has an inverse association for the given\n    model-type-association pair.\n\n    @method hasInverseFor\n    @param {String} modelName\n    @param {ORM/Association} association\n    @return {Boolean}\n    @public\n    @hide\n   */\n  hasInverseFor(association) {\n    return !!this.inverseFor(association);\n  }\n\n  /**\n    Used to check if models match each other. If models are saved, we check model type\n    and id, since they could have other non-persisted properties that are different.\n\n    @public\n    @hide\n  */\n  alreadyAssociatedWith(model, association) {\n    let associatedModelOrCollection = this[association.name];\n\n    if (associatedModelOrCollection && model) {\n      if (associatedModelOrCollection instanceof Model) {\n        if (associatedModelOrCollection.isSaved() && model.isSaved()) {\n          return associatedModelOrCollection.toString() === model.toString();\n        } else {\n          return associatedModelOrCollection === model;\n        }\n      } else {\n        return associatedModelOrCollection.includes(model);\n      }\n    }\n  }\n\n  associate(model, association) {\n    if (this.alreadyAssociatedWith(model, association)) {\n      return;\n    }\n\n    let { name } = association;\n\n    if (association instanceof HasMany) {\n      if (!this[name].includes(model)) {\n        this[name].add(model);\n      }\n    } else {\n      this[name] = model;\n    }\n  }\n\n  disassociate(model, association) {\n    let fk = association.getForeignKey();\n\n    if (association instanceof HasMany) {\n      let i;\n      if (association.isPolymorphic) {\n        let found = this[fk].find(\n          ({ type, id }) => type === model.modelName && id === model.id\n        );\n        i = found && this[fk].indexOf(found);\n      } else {\n        i = this[fk].map((key) => key.toString()).indexOf(model.id.toString());\n      }\n\n      if (i > -1) {\n        this.attrs[fk].splice(i, 1);\n      }\n    } else {\n      this.attrs[fk] = null;\n    }\n  }\n\n  /**\n    @hide\n  */\n  get isSaving() {\n    return this._schema.isSaving[this.toString()];\n  }\n\n  // Private\n  /**\n    model.attrs represents the persistable attributes, i.e. your db\n    table fields.\n    @method _setupAttr\n    @param attr\n    @param value\n    @private\n    @hide\n   */\n  _setupAttr(attr, value) {\n    const isAssociation =\n      this.associationKeys.has(attr) || this.associationIdKeys.has(attr);\n\n    if (!isAssociation) {\n      this.attrs[attr] = value;\n      // define plain getter/setters for non-association keys\n      this._definePlainAttribute(attr);\n    }\n  }\n\n  /**\n    Define getter/setter for a plain attribute\n    @method _definePlainAttribute\n    @param attr\n    @private\n    @hide\n   */\n  _definePlainAttribute(attr) {\n    // Ensure the property hasn't already been defined\n    let existingProperty = Object.getOwnPropertyDescriptor(this, attr);\n    if (existingProperty && existingProperty.get) {\n      return;\n    }\n\n    // Ensure the attribute is on the attrs hash\n    if (!Object.prototype.hasOwnProperty.call(this.attrs, attr)) {\n      this.attrs[attr] = null;\n    }\n\n    // Define the getter/setter\n    Object.defineProperty(this, attr, {\n      get() {\n        return this.attrs[attr];\n      },\n      set(val) {\n        this.attrs[attr] = val;\n      },\n    });\n  }\n\n  /**\n    Foreign keys get set on attrs directly (to avoid potential recursion), but\n    model references use the setter.\n   *\n    We validate foreign keys during instantiation.\n   *\n    @method _setupRelationship\n    @param attr\n    @param value\n    @private\n    @hide\n   */\n  _setupRelationship(attr, value) {\n    const isFk = this.associationIdKeys.has(attr) || this.fks.includes(attr);\n    const isAssociation = this.associationKeys.has(attr);\n\n    if (isFk) {\n      if (value !== undefined && value !== null) {\n        this._validateForeignKeyExistsInDatabase(attr, value);\n      }\n      this.attrs[attr] = value;\n    }\n    if (isAssociation) {\n      this[attr] = value;\n    }\n  }\n\n  /**\n    @method _validateAttr\n    @private\n    @hide\n   */\n  _validateAttr(key, value) {\n    // Verify attr passed in for associations is actually an association\n    {\n      if (this.associationKeys.has(key)) {\n        let association = this.associationFor(key);\n        let isNull = value === null;\n\n        if (association instanceof HasMany) {\n          let isCollection =\n            value instanceof Collection ||\n            value instanceof PolymorphicCollection;\n          let isArrayOfModels =\n            Array.isArray(value) &&\n            value.every((item) => item instanceof Model);\n\n          assert(\n            isCollection || isArrayOfModels || isNull,\n            `You're trying to create a ${this.modelName} model and you passed in \"${value}\" under the ${key} key, but that key is a HasMany relationship. You must pass in a Collection, PolymorphicCollection, array of Models, or null.`\n          );\n        } else if (association instanceof BelongsTo) {\n          assert(\n            value instanceof Model || isNull,\n            `You're trying to create a ${this.modelName} model and you passed in \"${value}\" under the ${key} key, but that key is a BelongsTo relationship. You must pass in a Model or null.`\n          );\n        }\n      }\n    }\n\n    // Verify attrs passed in for association foreign keys are actually fks\n    {\n      if (this.associationIdKeys.has(key)) {\n        if (key.endsWith(\"Ids\")) {\n          let isArray = Array.isArray(value);\n          let isNull = value === null;\n          assert(\n            isArray || isNull,\n            `You're trying to create a ${this.modelName} model and you passed in \"${value}\" under the ${key} key, but that key is a foreign key for a HasMany relationship. You must pass in an array of ids or null.`\n          );\n        }\n      }\n    }\n\n    // Verify no undefined associations are passed in\n    {\n      let isModelOrCollection =\n        value instanceof Model ||\n        value instanceof Collection ||\n        value instanceof PolymorphicCollection;\n      let isArrayOfModels =\n        Array.isArray(value) &&\n        value.length &&\n        value.every((item) => item instanceof Model);\n\n      if (isModelOrCollection || isArrayOfModels) {\n        let modelOrCollection = value;\n\n        assert(\n          this.associationKeys.has(key),\n          `You're trying to create a ${\n            this.modelName\n          } model and you passed in a ${modelOrCollection.toString()} under the ${key} key, but you haven't defined that key as an association on your model.`\n        );\n      }\n    }\n  }\n\n  /**\n    Originally we validated this via association.setId method, but it triggered\n    recursion. That method is designed for updating an existing model's ID so\n    this method is needed during instantiation.\n   *\n    @method _validateForeignKeyExistsInDatabase\n    @private\n    @hide\n   */\n  _validateForeignKeyExistsInDatabase(foreignKeyName, foreignKeys) {\n    if (Array.isArray(foreignKeys)) {\n      let association = this.hasManyAssociationFks[foreignKeyName];\n\n      let found;\n      if (association.isPolymorphic) {\n        found = foreignKeys.map(({ type, id }) => {\n          return this._schema.db[\n            this._schema.toInternalCollectionName(type)\n          ].find(id);\n        });\n        found = compact(found);\n      } else {\n        found =\n          this._schema.db[\n            this._schema.toInternalCollectionName(association.modelName)\n          ].find(foreignKeys);\n      }\n\n      let foreignKeyLabel = association.isPolymorphic\n        ? foreignKeys.map((fk) => `${fk.type}:${fk.id}`).join(\",\")\n        : foreignKeys;\n      assert(\n        found.length === foreignKeys.length,\n        `You're instantiating a ${this.modelName} that has a ${foreignKeyName} of ${foreignKeyLabel}, but some of those records don't exist in the database.`\n      );\n    } else {\n      let association = this.belongsToAssociationFks[foreignKeyName];\n\n      let found;\n      if (association.isPolymorphic) {\n        found = this._schema.db[\n          this._schema.toInternalCollectionName(foreignKeys.type)\n        ].find(foreignKeys.id);\n      } else {\n        found =\n          this._schema.db[\n            this._schema.toInternalCollectionName(association.modelName)\n          ].find(foreignKeys);\n      }\n\n      let foreignKeyLabel = association.isPolymorphic\n        ? `${foreignKeys.type}:${foreignKeys.id}`\n        : foreignKeys;\n      assert(\n        found,\n        `You're instantiating a ${this.modelName} that has a ${foreignKeyName} of ${foreignKeyLabel}, but that record doesn't exist in the database.`\n      );\n    }\n  }\n\n  /**\n    Update associated children when saving a collection\n   *\n    @method _saveAssociations\n    @private\n    @hide\n   */\n  _saveAssociations() {\n    this._saveBelongsToAssociations();\n    this._saveHasManyAssociations();\n  }\n\n  _saveBelongsToAssociations() {\n    values(this.belongsToAssociations).forEach((association) => {\n      this._disassociateFromOldInverses(association);\n      this._saveNewAssociates(association);\n      this._associateWithNewInverses(association);\n    });\n  }\n\n  _saveHasManyAssociations() {\n    values(this.hasManyAssociations).forEach((association) => {\n      this._disassociateFromOldInverses(association);\n      this._saveNewAssociates(association);\n      this._associateWithNewInverses(association);\n    });\n  }\n\n  _disassociateFromOldInverses(association) {\n    if (association instanceof HasMany) {\n      this._disassociateFromHasManyInverses(association);\n    } else if (association instanceof BelongsTo) {\n      this._disassociateFromBelongsToInverse(association);\n    }\n  }\n\n  // Disassociate currently persisted models that are no longer associated\n  _disassociateFromHasManyInverses(association) {\n    let fk = association.getForeignKey();\n    let tempAssociation =\n      this._tempAssociations && this._tempAssociations[association.name];\n    let associateIds = this.attrs[fk];\n\n    if (tempAssociation && associateIds) {\n      let models;\n      if (association.isPolymorphic) {\n        models = associateIds.map(({ type, id }) => {\n          return this._schema[this._schema.toCollectionName(type)].find(id);\n        });\n      } else {\n        // TODO: prob should initialize hasMany fks with []\n        models = this._schema[\n          this._schema.toCollectionName(association.modelName)\n        ].find(associateIds || []).models;\n      }\n\n      models\n        .filter(\n          (associate) =>\n            // filter out models that are already being saved\n            !associate.isSaving &&\n            // filter out models that will still be associated\n            !tempAssociation.includes(associate) &&\n            associate.hasInverseFor(association)\n        )\n        .forEach((associate) => {\n          let inverse = associate.inverseFor(association);\n\n          associate.disassociate(this, inverse);\n          associate.save();\n        });\n    }\n  }\n\n  /*\n    Disassociate currently persisted models that are no longer associated.\n\n    Example:\n\n      post: Model.extend({\n        comments: hasMany()\n      }),\n\n      comment: Model.extend({\n        post: belongsTo()\n      })\n\n    Assume `this` is comment:1. When saving, if comment:1 is no longer\n    associated with post:1, we need to remove comment:1 from post:1.comments.\n    In this example `association` would be `comment.post`.\n  */\n  _disassociateFromBelongsToInverse(association) {\n    let fk = association.getForeignKey();\n    let tempAssociation =\n      this._tempAssociations && this._tempAssociations[association.name];\n    let associateId = this.attrs[fk];\n\n    if (tempAssociation !== undefined && associateId) {\n      let associate;\n      if (association.isPolymorphic) {\n        associate = this._schema[\n          this._schema.toCollectionName(associateId.type)\n        ].find(associateId.id);\n      } else {\n        associate =\n          this._schema[\n            this._schema.toCollectionName(association.modelName)\n          ].find(associateId);\n      }\n\n      if (associate.hasInverseFor(association)) {\n        let inverse = associate.inverseFor(association);\n\n        associate.disassociate(this, inverse);\n        associate._updateInDb(associate.attrs);\n      }\n    }\n  }\n\n  // Find all other models that depend on me and update their foreign keys\n  _disassociateFromDependents() {\n    this._schema\n      .dependentAssociationsFor(this.modelName)\n      .forEach((association) => {\n        association.disassociateAllDependentsFromTarget(this);\n      });\n  }\n\n  _saveNewAssociates(association) {\n    let fk = association.getForeignKey();\n    let tempAssociate =\n      this._tempAssociations && this._tempAssociations[association.name];\n\n    if (tempAssociate !== undefined) {\n      this.__isSavingNewChildren = true;\n      delete this._tempAssociations[association.name];\n\n      if (tempAssociate instanceof Collection) {\n        tempAssociate.models\n          .filter((model) => !model.isSaving)\n          .forEach((child) => {\n            child.save();\n          });\n\n        this._updateInDb({\n          [fk]: tempAssociate.models.map((child) => child.id),\n        });\n      } else if (tempAssociate instanceof PolymorphicCollection) {\n        tempAssociate.models\n          .filter((model) => !model.isSaving)\n          .forEach((child) => {\n            child.save();\n          });\n\n        this._updateInDb({\n          [fk]: tempAssociate.models.map((child) => {\n            return { type: child.modelName, id: child.id };\n          }),\n        });\n      } else {\n        // Clearing the association\n        if (tempAssociate === null) {\n          this._updateInDb({ [fk]: null });\n\n          // Self-referential\n        } else if (this.equals(tempAssociate)) {\n          this._updateInDb({ [fk]: this.id });\n\n          // Non-self-referential\n        } else if (!tempAssociate.isSaving) {\n          // Save the tempAssociate and update the local reference\n          tempAssociate.save();\n          this._syncTempAssociations(tempAssociate);\n\n          let fkValue;\n          if (association.isPolymorphic) {\n            fkValue = { id: tempAssociate.id, type: tempAssociate.modelName };\n          } else {\n            fkValue = tempAssociate.id;\n          }\n\n          this._updateInDb({ [fk]: fkValue });\n        }\n      }\n\n      this.__isSavingNewChildren = false;\n    }\n  }\n\n  /*\n    Step 3 in saving associations.\n\n    Example:\n\n      // initial state\n      post.author = steinbeck;\n\n      // new state\n      post.author = twain;\n\n       1. Disassociate from old inverse (remove post from steinbeck.posts)\n       2. Save new associates (if twain.isNew, save twain)\n    -> 3. Associate with new inverse (add post to twain.posts)\n  */\n  _associateWithNewInverses(association) {\n    if (!this.__isSavingNewChildren) {\n      let modelOrCollection = this[association.name];\n\n      if (modelOrCollection instanceof Model) {\n        this._associateModelWithInverse(modelOrCollection, association);\n      } else if (\n        modelOrCollection instanceof Collection ||\n        modelOrCollection instanceof PolymorphicCollection\n      ) {\n        modelOrCollection.models.forEach((model) => {\n          this._associateModelWithInverse(model, association);\n        });\n      }\n\n      delete this._tempAssociations[association.name];\n    }\n  }\n\n  _associateModelWithInverse(model, association) {\n    if (model.hasInverseFor(association)) {\n      let inverse = model.inverseFor(association);\n      let inverseFk = inverse.getForeignKey();\n\n      let ownerId = this.id;\n      if (inverse instanceof BelongsTo) {\n        let newId;\n        if (inverse.isPolymorphic) {\n          newId = { type: this.modelName, id: ownerId };\n        } else {\n          newId = ownerId;\n        }\n        this._schema.db[\n          this._schema.toInternalCollectionName(model.modelName)\n        ].update(model.id, { [inverseFk]: newId });\n      } else {\n        let inverseCollection =\n          this._schema.db[\n            this._schema.toInternalCollectionName(model.modelName)\n          ];\n        let currentIdsForInverse =\n          inverseCollection.find(model.id)[inverse.getForeignKey()] || [];\n        let newIdsForInverse = Object.assign([], currentIdsForInverse);\n        let newId, alreadyAssociatedWith;\n\n        if (inverse.isPolymorphic) {\n          newId = { type: this.modelName, id: ownerId };\n          alreadyAssociatedWith = newIdsForInverse.some(\n            (key) => key.type == this.modelName && key.id == ownerId\n          );\n        } else {\n          newId = ownerId;\n          alreadyAssociatedWith = newIdsForInverse.includes(ownerId);\n        }\n\n        if (!alreadyAssociatedWith) {\n          newIdsForInverse.push(newId);\n        }\n\n        inverseCollection.update(model.id, { [inverseFk]: newIdsForInverse });\n      }\n    }\n  }\n\n  // Used to update data directly, since #save and #update can retrigger saves,\n  // which can cause cycles with associations.\n  _updateInDb(attrs) {\n    this.attrs = this._schema.db[\n      this._schema.toInternalCollectionName(this.modelName)\n    ].update(this.attrs.id, attrs);\n  }\n\n  /*\n  Super gnarly: after we save this tempAssociate, we we need to through\n  all other tempAssociates for a reference to this same model, and\n  update it. Otherwise those other references are stale, which could\n  cause a bug when they are subsequently saved.\n\n  This only works for belongsTo right now, should add hasMany logic to it.\n\n  See issue #1613: https://github.com/samselikoff/ember-cli-mirage/pull/1613\n  */\n  _syncTempAssociations(tempAssociate) {\n    Object.keys(this._tempAssociations).forEach((key) => {\n      if (\n        this._tempAssociations[key] &&\n        this._tempAssociations[key].toString() === tempAssociate.toString()\n      ) {\n        this._tempAssociations[key] = tempAssociate;\n      }\n    });\n  }\n\n  /**\n    Simple string representation of the model and id.\n\n    ```js\n    let post = blogPosts.find(1);\n    post.toString(); // \"model:blogPost:1\"\n    ```\n\n    @method toString\n    @return {String}\n    @public\n  */\n  toString() {\n    let idLabel = this.id ? `(${this.id})` : \"\";\n\n    return `model:${this.modelName}${idLabel}`;\n  }\n\n  /**\n    Checks the equality of this model and the passed-in model\n   *\n    @method equals\n    @return boolean\n    @public\n    @hide\n   */\n  equals(model) {\n    return this.toString() === model.toString();\n  }\n}\n\nModel.extend = extend;\nModel.findBelongsToAssociation = function (associationType) {\n  return this.prototype.belongsToAssociations[associationType];\n};\n\nexport default Model;\n","import Model from \"./orm/model\";\nimport Collection from \"./orm/collection\";\nimport PolymorphicCollection from \"./orm/polymorphic-collection\";\nimport extend from \"./utils/extend\";\nimport { camelize } from \"./utils/inflector\";\nimport assert from \"./assert\";\nimport isFunction from \"lodash/isFunction\";\nimport isEmpty from \"lodash/isEmpty\";\nimport get from \"lodash/get\";\nimport flatten from \"lodash/flatten\";\nimport compact from \"lodash/compact\";\nimport uniqBy from \"lodash/uniqBy\";\n\n/**\n  Serializers are responsible for formatting your route handler's response.\n\n  The application serializer will apply to every response. To make specific customizations, define per-model serializers.\n\n  ```js\n  import { createServer, RestSerializer } from 'miragejs';\n\n  createServer({\n    serializers: {\n      application: RestSerializer,\n      user: RestSerializer.extend({\n        // user-specific customizations\n      })\n    }\n  })\n  ```\n\n  Any Model or Collection returned from a route handler will pass through the serializer layer. Highest priority will be given to a model-specific serializer, then the application serializer, then the default serializer.\n\n  Mirage ships with three named serializers:\n\n  - **JSONAPISerializer**, to simulate JSON:API compliant API servers:\n\n    ```js\n    import { createServer, JSONAPISerializer } from 'miragejs';\n\n    createServer({\n      serializers: {\n        application: JSONAPISerializer\n      }\n    })\n    ```\n\n  - **ActiveModelSerializer**, to mock Rails APIs that use AMS-style responses:\n\n    ```js\n    import { createServer, ActiveModelSerializer } from 'miragejs';\n\n    createServer({\n      serializers: {\n        application: ActiveModelSerializer\n      }\n    })\n    ```\n\n  - **RestSerializer**, a good starting point for many generic REST APIs:\n\n    ```js\n    import { createServer, RestSerializer } from 'miragejs';\n\n    createServer({\n      serializers: {\n        application: RestSerializer\n      }\n    })\n    ```\n\n  Additionally, Mirage has a basic Serializer class which you can customize using the hooks documented below:\n\n  ```js\n  import { createServer, Serializer } from 'miragejs';\n\n  createServer({\n    serializers: {\n      application: Serializer\n    }\n  })\n  ```\n\n  When writing model-specific serializers, remember to extend from your application serializer so shared logic is used by your model-specific classes:\n\n  ```js\n  import { createServer, Serializer } from 'miragejs';\n\n  const ApplicationSerializer = Serializer.extend()\n\n  createServer({\n    serializers: {\n      application: ApplicationSerializer,\n      blogPost: ApplicationSerializer.extend({\n        include: ['comments']\n      })\n    }\n  })\n  ```\n\n  @class Serializer\n  @constructor\n  @public\n*/\nclass Serializer {\n  constructor(registry, type, request = {}) {\n    this.registry = registry;\n    this.type = type;\n    this.request = request;\n\n    /**\n      Use this property on a model serializer to whitelist attributes that will be used in your JSON payload.\n\n      For example, if you had a `blog-post` model in your database that looked like\n\n      ```\n      {\n        id: 1,\n        title: 'Lorem ipsum',\n        createdAt: '2014-01-01 10:00:00',\n        updatedAt: '2014-01-03 11:42:12'\n      }\n      ```\n\n      and you just wanted `id` and `title`, you could write\n\n      ```js\n      Serializer.extend({\n        attrs: ['id', 'title']\n      });\n      ```\n\n      and the payload would look like\n\n      ```\n      {\n        id: 1,\n        title: 'Lorem ipsum'\n      }\n      ```\n\n      @property attrs\n      @public\n    */\n    this.attrs = this.attrs || undefined; // this is just here so I can add the doc comment. Better way?\n\n    /**\n      Use this property on a model serializer to specify related models you'd like to include in your JSON payload. (These can be considered default server-side includes.)\n\n      For example, if you had an `author` with many `blog-post`s and you wanted to sideload these, specify so in the `include` key:\n\n      ```js\n      createServer({\n        models: {\n          author: Model.extend({\n            blogPosts: hasMany()\n          })\n        },\n        serializers: {\n          author: Serializer.extend({\n            include: ['blogPosts']\n          });\n        }\n      })\n      ```\n\n      Now a response to a request for an author would look like this:\n\n      ```\n      GET /authors/1\n\n      {\n        author: {\n          id: 1,\n          name: 'Link',\n          blogPostIds: [1, 2]\n        },\n        blogPosts: [\n          {id: 1, authorId: 1, title: 'Lorem'},\n          {id: 2, authorId: 1, title: 'Ipsum'}\n        ]\n      }\n      ```\n\n      You can also define `include` as a function so it can be determined dynamically.\n      \n      For example, you could conditionally include a relationship based on an `include` query parameter:\n\n      ```js\n      // Include blog posts for a GET to /authors/1?include=blogPosts\n      \n      Serializer.extend({\n        include: function(request) {\n          if (request.queryParams.include === \"blogPosts\") {\n            return ['blogPosts'];\n          } else {\n            return [];\n          }\n        }\n      });\n      ```\n\n      **Query param includes for JSONAPISerializer**\n\n      The JSONAPISerializer supports the use of `include` query parameter to return compound documents out of the box.\n\n      For example, if your app makes the following request\n\n      ```\n      GET /api/authors?include=blogPosts\n      ```\n\n      the `JSONAPISerializer` will inspect the query params of the request, see that the blogPosts relationship is present, and then proceed as if this relationship was specified directly in the include: [] array on the serializer itself.\n\n      Note that, in accordance with the spec, Mirage gives precedence to an ?include query param over a default include: [] array that you might have specified directly on the serializer. Default includes will still be in effect, however, if a request does not have an ?include query param.\n\n      Also note that default includes specified with the `include: []` array can only take a single model; they cannot take dot-separated paths to nested relationships.\n\n      If you'd like to set a default dot-separated (nested) include path for a resource, you have to do it at the route level by setting a default value for `request.queryParams`:\n\n      ```js\n      this.get('/users', function(schema, request) => {\n        request.queryParams = request.queryParams || {};\n        if (!request.queryParams.include) {\n          request.queryParams.include = 'blog-posts.comments';\n        }\n\n        // rest of route handler logic\n      });\n      ```\n\n      @property include\n      @public\n    */\n    this.include = this.include || []; // this is just here so I can add the doc comment. Better way?\n\n    /**\n      Set whether your JSON response should have a root key in it.\n\n      *Doesn't apply to JSONAPISerializer.*\n\n      Defaults to true, so a request for an author looks like:\n\n      ```\n      GET /authors/1\n\n      {\n        author: {\n          id: 1,\n          name: 'Link'\n        }\n      }\n      ```\n\n      Setting `root` to false disables this:\n\n      ```js\n      Serializer.extend({\n        root: false\n      });\n      ```\n\n      Now the response looks like:\n\n      ```\n      GET /authors/1\n\n      {\n        id: 1,\n        name: 'Link'\n      }\n      ```\n\n      @property root\n      @public\n    */\n    this.root = this.root || undefined; // this is just here so I can add the doc comment. Better way?\n\n    /**\n      Set whether related models should be embedded or sideloaded.\n\n      *Doesn't apply to JSONAPISerializer.*\n\n      By default this false, so relationships are sideloaded:\n\n      ```\n      GET /authors/1\n\n      {\n        author: {\n          id: 1,\n          name: 'Link',\n          blogPostIds: [1, 2]\n        },\n        blogPosts: [\n          { id: 1, authorId: 1, title: 'Lorem' },\n          { id: 2, authorId: 1, title: 'Ipsum' }\n        ]\n      }\n      ```\n\n      Setting `embed` to true will embed all related records:\n\n      ```js\n      Serializer.extend({\n        embed: true\n      });\n      ```\n\n      Now the response looks like:\n\n      ```\n      GET /authors/1\n\n      {\n        author: {\n          id: 1,\n          name: 'Link',\n          blogPosts: [\n            { id: 1, authorId: 1, title: 'Lorem' },\n            { id: 2, authorId: 1, title: 'Ipsum' }\n          ]\n        }\n      }\n      ```\n\n      You can also define `embed` as a function so it can be determined dynamically.\n    */\n    this.embed = this.embed || undefined; // this is just here so I can add the doc comment. Better way?\n    this._embedFn = isFunction(this.embed) ? this.embed : () => !!this.embed;\n\n    /**\n      Use this to define how your serializer handles serializing relationship keys. It can take one of three values:\n\n      - `included`, which is the default, will serialize the ids of a relationship if that relationship is included (sideloaded) along with the model or collection in the response\n      - `always` will always serialize the ids of all relationships for the model or collection in the response\n      - `never` will never serialize the ids of relationships for the model or collection in the response\n\n      @property serializeIds\n      @public\n    */\n    this.serializeIds = this.serializeIds || undefined; // this is just here so I can add the doc comment. Better way?\n\n    /**\n      Primary Key name of the model\n\n      Defaults to 'id', so a request for an author looks like:\n\n      ```\n      GET /authors/1\n\n      {\n        author: {\n          id: 1,\n          name: 'Link'\n        }\n      }\n      ```\n\n      Setting `primaryKey` to 'authorId changes this:\n\n      ```js\n      Serializer.extend({\n        primaryKey: 'authorId'\n      });\n      ```\n\n      Now the response looks like:\n\n      ```\n      GET /authors/1\n\n      {\n        author: {\n          authorId: 1,\n          name: 'Link'\n        }\n      }\n      ```\n\n      @property primaryKey\n      @public\n    */\n    this.primaryKey = this.primaryKey || undefined; // this is just here so I can add the doc comment. Better way?\n  }\n\n  /**\n    Override this method to implement your own custom serialize function. *response* is whatever was returned from your route handler, and *request* is the Pretender request object.\n\n    Returns a plain JavaScript object or array, which Mirage uses as the response data to your app's XHR request.\n\n    You can also override this method, call super, and manipulate the data before Mirage responds with it. This is a great place to add metadata, or for one-off operations that don't fit neatly into any of Mirage's other abstractions:\n\n    ```js\n    serialize(object, request) {\n      // This is how to call super, as Mirage borrows [Backbone's implementation of extend](http://backbonejs.org/#Model-extend)\n      let json = Serializer.prototype.serialize.apply(this, arguments);\n\n      // Add metadata, sort parts of the response, etc.\n\n      return json;\n    }\n    ```\n\n    @param primaryResource\n    @param request\n    @return { Object } the json response\n   */\n  serialize(primaryResource /* , request */) {\n    this.primaryResource = primaryResource;\n\n    return this.buildPayload(primaryResource);\n  }\n\n  /**\n    This method is used by the POST and PUT shorthands. These shorthands expect a valid JSON:API document as part of the request, so that they know how to create or update the appropriate resouce. The *normalize* method allows you to transform your request body into a JSON:API document, which lets you take advantage of the shorthands when you otherwise may not be able to.\n\n    Note that this method is a noop if you're using JSON:API already, since request payloads sent along with POST and PUT requests will already be in the correct format.\n\n    Take a look at the included `ActiveModelSerializer`'s normalize method for an example.\n\n    @method normalize\n    @param json\n    @public\n   */\n  normalize(json) {\n    return json;\n  }\n\n  buildPayload(primaryResource, toInclude, didSerialize, json) {\n    if (!primaryResource && isEmpty(toInclude)) {\n      return json;\n    } else if (primaryResource) {\n      let [resourceHash, newIncludes] =\n        this.getHashForPrimaryResource(primaryResource);\n      let newDidSerialize = this.isCollection(primaryResource)\n        ? primaryResource.models\n        : [primaryResource];\n\n      return this.buildPayload(\n        undefined,\n        newIncludes,\n        newDidSerialize,\n        resourceHash\n      );\n    } else {\n      let nextIncludedResource = toInclude.shift();\n      let [resourceHash, newIncludes] =\n        this.getHashForIncludedResource(nextIncludedResource);\n\n      let newToInclude = newIncludes\n        .filter((resource) => {\n          return !didSerialize\n            .map((m) => m.toString())\n            .includes(resource.toString());\n        })\n        .concat(toInclude);\n      let newDidSerialize = (\n        this.isCollection(nextIncludedResource)\n          ? nextIncludedResource.models\n          : [nextIncludedResource]\n      ).concat(didSerialize);\n      let newJson = this.mergePayloads(json, resourceHash);\n\n      return this.buildPayload(\n        undefined,\n        newToInclude,\n        newDidSerialize,\n        newJson\n      );\n    }\n  }\n\n  getHashForPrimaryResource(resource) {\n    let [hash, addToIncludes] = this.getHashForResource(resource);\n    let hashWithRoot;\n\n    if (this.root) {\n      assert(\n        !(resource instanceof PolymorphicCollection),\n        `The base Serializer class cannot serialize a top-level PolymorphicCollection when root is true, since PolymorphicCollections have no type.`\n      );\n\n      let serializer = this.serializerFor(resource.modelName);\n      let rootKey = serializer.keyForResource(resource);\n      hashWithRoot = { [rootKey]: hash };\n    } else {\n      hashWithRoot = hash;\n    }\n\n    return [hashWithRoot, addToIncludes];\n  }\n\n  getHashForIncludedResource(resource) {\n    let hashWithRoot, addToIncludes;\n\n    if (resource instanceof PolymorphicCollection) {\n      hashWithRoot = {};\n      addToIncludes = resource.models;\n    } else {\n      let serializer = this.serializerFor(resource.modelName);\n      let [hash, newModels] = serializer.getHashForResource(resource);\n\n      // Included resources always have a root, and are always pushed to an array.\n      let rootKey = serializer.keyForRelationship(resource.modelName);\n      hashWithRoot = Array.isArray(hash)\n        ? { [rootKey]: hash }\n        : { [rootKey]: [hash] };\n      addToIncludes = newModels;\n    }\n\n    return [hashWithRoot, addToIncludes];\n  }\n\n  getHashForResource(\n    resource,\n    removeForeignKeys = false,\n    didSerialize = {},\n    lookupSerializer = false\n  ) {\n    let serializer = this;\n    let hash;\n\n    // PolymorphicCollection lacks a modelName, but is dealt with in the map\n    // by looking up the serializer on a per-model basis\n    if (lookupSerializer && resource.modelName) {\n      serializer = this.serializerFor(resource.modelName);\n    }\n\n    if (this.isModel(resource)) {\n      hash = serializer._hashForModel(\n        resource,\n        removeForeignKeys,\n        didSerialize\n      );\n    } else {\n      hash = resource.models.map((m) => {\n        let modelSerializer = serializer;\n\n        if (!modelSerializer) {\n          // Can't get here if lookupSerializer is false, so look it up\n          modelSerializer = this.serializerFor(m.modelName);\n        }\n\n        return modelSerializer._hashForModel(\n          m,\n          removeForeignKeys,\n          didSerialize\n        );\n      });\n    }\n\n    let addToIncludes = uniqBy(\n      compact(\n        flatten(\n          serializer.getKeysForIncluded().map((key) => {\n            if (this.isCollection(resource)) {\n              return resource.models.map((m) => m[key]);\n            } else {\n              return resource[key];\n            }\n          })\n        )\n      ),\n      (m) => m.toString()\n    );\n\n    return [hash, addToIncludes];\n  }\n\n  /*\n    Merges new resource hash into json. If json already has root key,\n    pushes value of resourceHash onto that key.\n\n    For example,\n\n        json = {\n          post: { id: 1, title: 'Lorem Ipsum', comment_ids: [1, 3] },\n          comments: [\n            { id: 1, text: 'foo' }\n          ]\n        };\n\n        resourceHash = {\n          comments: [\n            { id: 2, text: 'bar' }\n          ]\n        };\n\n    would yield\n\n        {\n          post: { id: 1, title: 'Lorem Ipsum', comment_ids: [1, 3] },\n          comments: [\n            { id: 1, text: 'foo' },\n            { id: 2, text: 'bar' }\n          ]\n        };\n\n  */\n  mergePayloads(json, resourceHash) {\n    let newJson;\n    let [resourceHashKey] = Object.keys(resourceHash);\n\n    if (json[resourceHashKey]) {\n      newJson = json;\n      newJson[resourceHashKey] = json[resourceHashKey].concat(\n        resourceHash[resourceHashKey]\n      );\n    } else {\n      newJson = Object.assign(json, resourceHash);\n    }\n\n    return newJson;\n  }\n\n  keyForResource(resource) {\n    let { modelName } = resource;\n    return this.isModel(resource)\n      ? this.keyForModel(modelName)\n      : this.keyForCollection(modelName);\n  }\n\n  /**\n    Used to define a custom key when serializing a primary model of modelName *modelName*. For example, the default Serializer will return something like the following:\n\n    ```\n    GET /blogPosts/1\n\n    {\n      blogPost: {\n        id: 1,\n        title: 'Lorem ipsum'\n      }\n    }\n    ```\n\n    If your API uses hyphenated keys, you could overwrite `keyForModel`:\n\n    ```js\n    // serializers/application.js\n    export default Serializer.extend({\n      keyForModel(modelName) {\n        return hyphenate(modelName);\n      }\n    });\n    ```\n\n    Now the response will look like\n\n    ```\n    {\n      'blog-post': {\n        id: 1,\n        title: 'Lorem ipsum'\n      }\n    }\n    ```\n\n    @method keyForModel\n    @param modelName\n    @public\n   */\n  keyForModel(modelName) {\n    return camelize(modelName);\n  }\n\n  /**\n    Used to customize the key when serializing a primary collection. By default this pluralizes the return value of `keyForModel`.\n\n    For example, by default the following request may look like:\n\n    ```\n    GET /blogPosts\n\n    {\n      blogPosts: [\n        {\n          id: 1,\n          title: 'Lorem ipsum'\n        },\n        ...\n      ]\n    }\n    ```\n\n    If your API hyphenates keys, you could overwrite `keyForCollection`:\n\n    ```js\n    // serializers/application.js\n    export default Serializer.extend({\n      keyForCollection(modelName) {\n        return this._container.inflector.pluralize(dasherize(modelName));\n      }\n    });\n    ```\n\n    Now the response would look like:\n\n    ```\n    {\n      'blog-posts': [\n        {\n          id: 1,\n          title: 'Lorem ipsum'\n        },\n        ...\n      ]\n    }\n    ```\n\n    @method keyForCollection\n    @param modelName\n    @public\n   */\n  keyForCollection(modelName) {\n    return this._container.inflector.pluralize(this.keyForModel(modelName));\n  }\n\n  _hashForModel(model, removeForeignKeys, didSerialize = {}) {\n    let attrs = this._attrsForModel(model);\n\n    if (removeForeignKeys) {\n      model.fks.forEach((fk) => {\n        delete attrs[fk];\n      });\n    }\n\n    if (this.embed) {\n      let newDidSerialize = Object.assign({}, didSerialize);\n      newDidSerialize[model.modelName] = newDidSerialize[model.modelName] || {};\n      newDidSerialize[model.modelName][model.id] = true;\n\n      this.getKeysForEmbedded().forEach((key) => {\n        let associatedResource = model[key];\n        if (\n          associatedResource &&\n          !get(\n            newDidSerialize,\n            `${associatedResource.modelName}.${associatedResource.id}`\n          )\n        ) {\n          let [associatedResourceHash] = this.getHashForResource(\n            associatedResource,\n            true,\n            newDidSerialize,\n            true\n          );\n          let formattedKey = this.keyForEmbeddedRelationship(key);\n          attrs[formattedKey] = associatedResourceHash;\n\n          if (this.isModel(associatedResource)) {\n            let fk = `${camelize(key)}Id`;\n            delete attrs[fk];\n          }\n        }\n      });\n    }\n\n    return this._maybeAddAssociationIds(model, attrs);\n  }\n\n  /**\n    @method _attrsForModel\n    @param model\n    @private\n    @hide\n   */\n  _attrsForModel(model) {\n    let attrs = {};\n\n    if (this.attrs) {\n      attrs = this.attrs.reduce((memo, attr) => {\n        memo[attr] = model[attr];\n        return memo;\n      }, {});\n    } else {\n      attrs = Object.assign(attrs, model.attrs);\n    }\n\n    // Remove fks\n    model.fks.forEach((key) => delete attrs[key]);\n\n    return this._formatAttributeKeys(attrs);\n  }\n\n  /**\n    @method _maybeAddAssociationIds\n    @param model\n    @param attrs\n    @private\n    @hide\n   */\n  _maybeAddAssociationIds(model, attrs) {\n    let newHash = Object.assign({}, attrs);\n\n    if (this.serializeIds === \"always\") {\n      [...model.associationKeys]\n        .filter((key) => !this._embedFn(key))\n        .forEach((key) => {\n          let resource = model[key];\n          let association = model.associationFor(key);\n\n          if (this.isCollection(resource)) {\n            let formattedKey = this.keyForRelationshipIds(key);\n            newHash[formattedKey] =\n              model[`${this._container.inflector.singularize(key)}Ids`];\n          } else if (this.isModel(resource) && association.isPolymorphic) {\n            let formattedTypeKey = this.keyForPolymorphicForeignKeyType(key);\n            let formattedIdKey = this.keyForPolymorphicForeignKeyId(key);\n\n            newHash[formattedTypeKey] = model[`${key}Id`].type;\n            newHash[formattedIdKey] = model[`${key}Id`].id;\n          } else if (resource) {\n            let formattedKey = this.keyForForeignKey(key);\n            newHash[formattedKey] = model[`${key}Id`];\n          }\n        });\n    } else if (this.serializeIds === \"included\") {\n      this.getKeysForIncluded().forEach((key) => {\n        let resource = model[key];\n        let association = model.associationFor(key);\n\n        if (this.isCollection(resource)) {\n          let formattedKey = this.keyForRelationshipIds(key);\n\n          newHash[formattedKey] =\n            model[`${this._container.inflector.singularize(key)}Ids`];\n        } else if (this.isModel(resource) && association.isPolymorphic) {\n          let formattedTypeKey = this.keyForPolymorphicForeignKeyType(key);\n          let formattedIdKey = this.keyForPolymorphicForeignKeyId(key);\n\n          newHash[formattedTypeKey] = model[`${key}Id`].type;\n          newHash[formattedIdKey] = model[`${key}Id`].id;\n        } else if (this.isModel(resource)) {\n          let formattedKey = this.keyForForeignKey(key);\n\n          newHash[formattedKey] = model[`${key}Id`];\n        }\n      });\n    }\n\n    return newHash;\n  }\n\n  /**\n    Used to customize how a model's attribute is formatted in your JSON payload.\n\n    By default, model attributes are camelCase:\n\n    ```\n    GET /authors/1\n\n    {\n      author: {\n        firstName: 'Link',\n        lastName: 'The WoodElf'\n      }\n    }\n    ```\n\n    If your API expects snake case, you could write the following:\n\n    ```js\n    // serializers/application.js\n    export default Serializer.extend({\n      keyForAttribute(attr) {\n        return underscore(attr);\n      }\n    });\n    ```\n\n    Now the response would look like:\n\n    ```\n    {\n      author: {\n        first_name: 'Link',\n        last_name: 'The WoodElf'\n      }\n    }\n    ```\n\n    @method keyForAttribute\n    @param attr\n    @public\n   */\n  keyForAttribute(attr) {\n    if (attr === \"id\") {\n      return this.keyForId();\n    }\n\n    return attr;\n  }\n\n  /**\n    Use this hook to format the key for collections related to this model. *modelName* is the named parameter for the relationship.\n\n    For example, if you're serializing an `author` that\n    sideloads many `blogPosts`, the default response will look like:\n\n    ```\n    {\n      author: {...},\n      blogPosts: [...]\n    }\n    ```\n\n    Overwrite `keyForRelationship` to format this key:\n\n    ```js\n    // serializers/application.js\n    export default Serializer.extend({\n      keyForRelationship(modelName) {\n        return underscore(modelName);\n      }\n    });\n    ```\n\n    Now the response will look like this:\n\n    ```\n    {\n      author: {...},\n      blog_posts: [...]\n    }\n    ```\n\n    @method keyForRelationship\n    @param modelName\n    @public\n   */\n  keyForRelationship(modelName) {\n    return camelize(this._container.inflector.pluralize(modelName));\n  }\n\n  /**\n    Like `keyForRelationship`, but for embedded relationships.\n\n    @method keyForEmbeddedRelationship\n    @param attributeName\n    @public\n   */\n  keyForEmbeddedRelationship(attributeName) {\n    return camelize(attributeName);\n  }\n\n  /**\n    Use this hook to format the key for the IDS of a `hasMany` relationship\n    in this model's JSON representation.\n\n    For example, if you're serializing an `author` that\n    sideloads many `blogPosts`, by default your `author` JSON would include a `blogPostIds` key:\n\n    ```\n    {\n      author: {\n        id: 1,\n        blogPostIds: [1, 2, 3]\n      },\n      blogPosts: [...]\n    }\n    ```\n\n    Overwrite `keyForRelationshipIds` to format this key:\n\n    ```js\n    // serializers/application.js\n    export default Serializer.extend({\n      keyForRelationshipIds(relationship) {\n        return underscore(relationship) + '_ids';\n      }\n    });\n    ```\n\n    Now the response will look like:\n\n    ```\n    {\n      author: {\n        id: 1,\n        blog_post_ids: [1, 2, 3]\n      },\n      blogPosts: [...]\n    }\n    ```\n\n    @method keyForRelationshipIds\n    @param modelName\n    @public\n   */\n  keyForRelationshipIds(relationshipName) {\n    return `${this._container.inflector.singularize(\n      camelize(relationshipName)\n    )}Ids`;\n  }\n\n  /**\n    Like `keyForRelationshipIds`, but for `belongsTo` relationships.\n\n    For example, if you're serializing a `blogPost` that sideloads one `author`,\n    your `blogPost` JSON would include a `authorId` key:\n\n    ```\n    {\n      blogPost: {\n        id: 1,\n        authorId: 1\n      },\n      author: ...\n    }\n    ```\n\n    Overwrite `keyForForeignKey` to format this key:\n\n    ```js\n    // serializers/application.js\n    export default Serializer.extend({\n      keyForForeignKey(relationshipName) {\n        return underscore(relationshipName) + '_id';\n      }\n    });\n    ```\n\n    Now the response will look like:\n\n    ```js\n    {\n      blogPost: {\n        id: 1,\n        author_id: 1\n      },\n      author: ...\n    }\n    ```\n\n    @method keyForForeignKey\n    @param relationshipName\n    @public\n   */\n  keyForForeignKey(relationshipName) {\n    return `${camelize(relationshipName)}Id`;\n  }\n\n  /**\n    Polymorphic relationships are represented with type-id pairs.\n\n    Given the following model\n\n    ```js\n    Model.extend({\n      commentable: belongsTo({ polymorphic: true })\n    });\n    ```\n\n    the default Serializer would produce\n\n    ```js\n    {\n      comment: {\n        id: 1,\n        commentableType: 'post',\n        commentableId: '1'\n      }\n    }\n    ```\n\n    This hook controls how the `id` field (`commentableId` in the above example)\n    is serialized. By default it camelizes the relationship and adds `Id` as a suffix.\n\n    @method keyForPolymorphicForeignKeyId\n    @param {String} relationshipName\n    @return {String}\n    @public\n  */\n  keyForPolymorphicForeignKeyId(relationshipName) {\n    return `${camelize(relationshipName)}Id`;\n  }\n\n  /**\n    Polymorphic relationships are represented with type-id pairs.\n\n    Given the following model\n\n    ```js\n    Model.extend({\n      commentable: belongsTo({ polymorphic: true })\n    });\n    ```\n\n    the default Serializer would produce\n\n    ```js\n    {\n      comment: {\n        id: 1,\n        commentableType: 'post',\n        commentableId: '1'\n      }\n    }\n    ```\n\n    This hook controls how the `type` field (`commentableType` in the above example)\n    is serialized. By default it camelizes the relationship and adds `Type` as a suffix.\n\n    @method keyForPolymorphicForeignKeyType\n    @param {String} relationshipName\n    @return {String}\n    @public\n  */\n  keyForPolymorphicForeignKeyType(relationshipName) {\n    return `${camelize(relationshipName)}Type`;\n  }\n\n  /**\n    @method isModel\n    @param object\n    @return {Boolean}\n    @public\n    @hide\n   */\n  isModel(object) {\n    return object instanceof Model;\n  }\n\n  /**\n    @method isCollection\n    @param object\n    @return {Boolean}\n    @public\n    @hide\n   */\n  isCollection(object) {\n    return (\n      object instanceof Collection || object instanceof PolymorphicCollection\n    );\n  }\n\n  /**\n    @method isModelOrCollection\n    @param object\n    @return {Boolean}\n    @public\n    @hide\n   */\n  isModelOrCollection(object) {\n    return this.isModel(object) || this.isCollection(object);\n  }\n\n  /**\n    @method serializerFor\n    @param type\n    @public\n    @hide\n   */\n  serializerFor(type) {\n    return this.registry.serializerFor(type);\n  }\n\n  getAssociationKeys() {\n    return isFunction(this.include)\n      ? this.include(this.request, this.primaryResource)\n      : this.include;\n  }\n\n  getKeysForEmbedded() {\n    return this.getAssociationKeys().filter((k) => this._embedFn(k));\n  }\n\n  getKeysForIncluded() {\n    return this.getAssociationKeys().filter((k) => !this._embedFn(k));\n  }\n\n  /**\n    A reference to the schema instance.\n\n    Useful to reference registered schema information, for example in a Serializer's include hook to include all a resource's associations:\n\n    ```js\n    Serializer.extend({\n      include(request, resource) {\n        return Object.keys(this.schema.associationsFor(resource.modelName));\n      }\n    })\n    ```\n\n    @property\n    @type {Object}\n    @public\n  */\n  get schema() {\n    return this.registry.schema;\n  }\n\n  /**\n    Used to customize how a model's primary key is formatted in your JSON payload.\n\n    By default, this is 'id'\n\n    ```\n    GET /authors/1\n\n    {\n      author: {\n        id: '1',\n        firstName: 'Link',\n        lastName: 'The WoodElf'\n      }\n    }\n    ```\n\n    If your API expects a different primary key, you could write the following:\n\n    ```js\n    // serializers/application.js\n    export default Serializer.extend({\n      keyForId() {\n        return 'authorId';\n      }\n    });\n    ```\n\n    Now the response would look like:\n\n    ```\n    {\n      author: {\n        authorId: '1',\n        firstName: 'Link',\n        lastName: 'The WoodElf'\n      }\n    }\n    ```\n\n    See the property `primaryKey` for a shorthand way of doing this on a model serializer\n\n    @method keyForId\n    @public\n   */\n  keyForId() {\n    return this.primaryKey;\n  }\n\n  /**\n    Used to customize how a model's primary key value is formatted in your JSON payload.\n\n    By default, the primary key is a string\n\n    ```\n    GET /authors/1\n\n    {\n      author: {\n        id: '1',\n        firstName: 'Link',\n        lastName: 'The WoodElf'\n      }\n    }\n    ```\n\n    If your API expects a integers, you could write the following:\n\n    ```js\n    // serializers/application.js\n    export default Serializer.extend({\n      valueForId(value) {\n        return parseInt(value);\n      }\n    });\n    ```\n\n    Now the response would look like:\n\n    ```\n    {\n      author: {\n        authorId: 1,\n        firstName: 'Link',\n        lastName: 'The WoodElf'\n      }\n    }\n    ```\n\n    @method valueForId\n    @param value\n    @public\n   */\n  valueForId(value) {\n    return value;\n  }\n\n  /**\n    @method _formatAttributeKeys\n    @param attrs\n    @private\n    @hide\n   */\n  _formatAttributeKeys(attrs) {\n    let formattedAttrs = {};\n\n    for (let key in attrs) {\n      let formattedValue = attrs[key];\n      if (key === \"id\") {\n        formattedValue = this.valueForId(formattedValue);\n      }\n\n      let formattedKey = this.keyForAttribute(key);\n      formattedAttrs[formattedKey] = formattedValue;\n    }\n\n    return formattedAttrs;\n  }\n\n  getCoalescedIds(/* request */) {}\n}\n\n// Defaults\nSerializer.prototype.include = [];\nSerializer.prototype.root = true;\nSerializer.prototype.embed = false;\nSerializer.prototype.primaryKey = \"id\";\nSerializer.prototype.serializeIds = \"included\"; // can be 'included', 'always', or 'never'\n\nSerializer.extend = extend;\n\nexport default Serializer;\n","import Serializer from \"../serializer\";\nimport { dasherize, camelize } from \"../utils/inflector\";\nimport assert from \"../assert\";\nimport get from \"lodash/get\";\nimport flatten from \"lodash/flatten\";\nimport compact from \"lodash/compact\";\nimport uniqBy from \"lodash/uniqBy\";\nimport isEmpty from \"lodash/isEmpty\";\n/**\n  The JSONAPISerializer. Subclass of Serializer.\n\n  @class JSONAPISerializer\n  @constructor\n  @public\n */\nclass JSONAPISerializer extends Serializer {\n  constructor() {\n    super(...arguments);\n\n    /**\n      By default, JSON:API's linkage data is only added for relationships that are being included in the current request.\n\n      That means given an `author` model with a `posts` relationship, a GET request to /authors/1 would return a JSON:API document with an empty `relationships` hash:\n\n      ```js\n      {\n        data: {\n          type: 'authors',\n          id: '1',\n          attributes: { ... }\n        }\n      }\n      ```\n\n      but a request to GET /authors/1?include=posts would have linkage data added (in addition to the included resources):\n\n      ```js\n      {\n        data: {\n          type: 'authors',\n          id: '1',\n          attributes: { ... },\n          relationships: {\n            data: [\n              { type: 'posts', id: '1' },\n              { type: 'posts', id: '2' },\n              { type: 'posts', id: '3' }\n            ]\n          }\n        },\n        included: [ ... ]\n      }\n      ```\n\n      To add the linkage data for all relationships, you could set `alwaysIncludeLinkageData` to `true`:\n\n      ```js\n      JSONAPISerializer.extend({\n        alwaysIncludeLinkageData: true\n      });\n      ```\n\n      Then, a GET to /authors/1 would respond with\n\n      ```js\n      {\n        data: {\n          type: 'authors',\n          id: '1',\n          attributes: { ... },\n          relationships: {\n            posts: {\n              data: [\n                { type: 'posts', id: '1' },\n                { type: 'posts', id: '2' },\n                { type: 'posts', id: '3' }\n              ]\n            }\n          }\n        }\n      }\n      ```\n\n      even though the related `posts` are not included in the same document.\n\n      You can also use the `links` method (on the Serializer base class) to add relationship links (which will always be added regardless of the relationship is being included document), or you could use `shouldIncludeLinkageData` for more granular control.\n\n      For more background on the behavior of this API, see [this blog post](http://www.ember-cli-mirage.com/blog/changing-mirages-default-linkage-data-behavior-1475).\n\n      @property alwaysIncludeLinkageData\n      @type {Boolean}\n      @public\n    */\n    this.alwaysIncludeLinkageData = this.alwaysIncludeLinkageData || undefined; // this is just here so I can add the doc comment. Better way?\n  }\n\n  // Don't think this is used?\n  keyForModel(modelName) {\n    return dasherize(modelName);\n  }\n\n  // Don't think this is used?\n  keyForCollection(modelName) {\n    return dasherize(modelName);\n  }\n\n  /**\n    Used to customize the key for an attribute. By default, compound attribute names are dasherized.\n\n    For example, the JSON:API document for a `post` model with a `commentCount` attribute would be:\n\n    ```js\n    {\n      data: {\n        id: 1,\n        type: 'posts',\n        attributes: {\n          'comment-count': 28\n        }\n      }\n    }\n    ```\n\n    @method keyForAttribute\n    @param {String} attr\n    @return {String}\n    @public\n  */\n  keyForAttribute(attr) {\n    return dasherize(attr);\n  }\n\n  /**\n    Used to customize the key for a relationships. By default, compound relationship names are dasherized.\n\n    For example, the JSON:API document for an `author` model with a `blogPosts` relationship would be:\n\n    ```js\n    {\n      data: {\n        id: 1,\n        type: 'author',\n        attributes: {\n          ...\n        },\n        relationships: {\n          'blog-posts': {\n            ...\n          }\n        }\n      }\n    }\n    ```\n\n    @method keyForRelationship\n    @param {String} key\n    @return {String}\n    @public\n  */\n  keyForRelationship(key) {\n    return dasherize(key);\n  }\n\n  /**\n    Use this hook to add top-level `links` data to JSON:API resource objects. The argument is the model being serialized.\n\n    ```js\n    // serializers/author.js\n    import { JSONAPISerializer } from 'miragejs';\n\n    export default JSONAPISerializer.extend({\n\n      links(author) {\n        return {\n          'posts': {\n            related: `/api/authors/${author.id}/posts`\n          }\n        };\n      }\n\n    });\n    ```\n\n    @method links\n    @param model\n  */\n  links() {}\n\n  getHashForPrimaryResource(resource) {\n    this._createRequestedIncludesGraph(resource);\n\n    let resourceHash = this.getHashForResource(resource);\n    let hashWithRoot = { data: resourceHash };\n    let addToIncludes = this.getAddToIncludesForResource(resource);\n\n    return [hashWithRoot, addToIncludes];\n  }\n\n  getHashForIncludedResource(resource) {\n    let serializer = this.serializerFor(resource.modelName);\n    let hash = serializer.getHashForResource(resource);\n    let hashWithRoot = { included: this.isModel(resource) ? [hash] : hash };\n    let addToIncludes = [];\n\n    if (!this.hasQueryParamIncludes()) {\n      addToIncludes = this.getAddToIncludesForResource(resource);\n    }\n\n    return [hashWithRoot, addToIncludes];\n  }\n\n  getHashForResource(resource) {\n    let hash;\n\n    if (this.isModel(resource)) {\n      hash = this.getResourceObjectForModel(resource);\n    } else {\n      hash = resource.models.map((m) => this.getResourceObjectForModel(m));\n    }\n\n    return hash;\n  }\n\n  /*\n    Returns a flat unique list of resources that need to be added to includes\n  */\n  getAddToIncludesForResource(resource) {\n    let relationshipPaths;\n\n    if (this.hasQueryParamIncludes()) {\n      relationshipPaths = this.getQueryParamIncludes();\n    } else {\n      let serializer = this.serializerFor(resource.modelName);\n      relationshipPaths = serializer.getKeysForIncluded();\n    }\n\n    return this.getAddToIncludesForResourceAndPaths(\n      resource,\n      relationshipPaths\n    );\n  }\n\n  getAddToIncludesForResourceAndPaths(resource, relationshipPaths) {\n    let includes = [];\n\n    relationshipPaths.forEach((path) => {\n      let relationshipNames = path.split(\".\");\n\n      let newIncludes = this.getIncludesForResourceAndPath(\n        resource,\n        ...relationshipNames\n      );\n      includes.push(newIncludes);\n    });\n\n    return uniqBy(compact(flatten(includes)), (m) => m.toString());\n  }\n\n  getIncludesForResourceAndPath(resource, ...names) {\n    let nameForCurrentResource = camelize(names.shift());\n    let includes = [];\n    let modelsToAdd = [];\n\n    if (this.isModel(resource)) {\n      let relationship = resource[nameForCurrentResource];\n\n      if (this.isModel(relationship)) {\n        modelsToAdd = [relationship];\n      } else if (this.isCollection(relationship)) {\n        modelsToAdd = relationship.models;\n      }\n    } else {\n      resource.models.forEach((model) => {\n        let relationship = model[nameForCurrentResource];\n\n        if (this.isModel(relationship)) {\n          modelsToAdd.push(relationship);\n        } else if (this.isCollection(relationship)) {\n          modelsToAdd = modelsToAdd.concat(relationship.models);\n        }\n      });\n    }\n\n    includes = includes.concat(modelsToAdd);\n\n    if (names.length) {\n      modelsToAdd.forEach((model) => {\n        includes = includes.concat(\n          this.getIncludesForResourceAndPath(model, ...names)\n        );\n      });\n    }\n\n    return includes;\n  }\n\n  getResourceObjectForModel(model) {\n    let attrs = this._attrsForModel(model, true);\n    delete attrs.id;\n\n    let hash = {\n      type: this.typeKeyForModel(model),\n      id: model.id,\n      attributes: attrs,\n    };\n\n    return this._maybeAddRelationshipsToResourceObjectForModel(hash, model);\n  }\n\n  _maybeAddRelationshipsToResourceObjectForModel(hash, model) {\n    const relationships = {};\n\n    model.associationKeys.forEach((key) => {\n      let relationship = model[key];\n      let relationshipKey = this.keyForRelationship(key);\n      let relationshipHash = {};\n\n      if (this.hasLinksForRelationship(model, key)) {\n        let serializer = this.serializerFor(model.modelName);\n        let links = serializer.links(model);\n        relationshipHash.links = links[key];\n      }\n\n      if (\n        this.alwaysIncludeLinkageData ||\n        this.shouldIncludeLinkageData(key, model) ||\n        this._relationshipIsIncludedForModel(key, model)\n      ) {\n        let data = null;\n        if (this.isModel(relationship)) {\n          data = {\n            type: this.typeKeyForModel(relationship),\n            id: relationship.id,\n          };\n        } else if (this.isCollection(relationship)) {\n          data = relationship.models.map((model) => {\n            return {\n              type: this.typeKeyForModel(model),\n              id: model.id,\n            };\n          });\n        }\n        relationshipHash.data = data;\n      }\n\n      if (!isEmpty(relationshipHash)) {\n        relationships[relationshipKey] = relationshipHash;\n      }\n    });\n\n    if (!isEmpty(relationships)) {\n      hash.relationships = relationships;\n    }\n\n    return hash;\n  }\n\n  hasLinksForRelationship(model, relationshipKey) {\n    let serializer = this.serializerFor(model.modelName);\n    let links = serializer.links && serializer.links(model);\n\n    return links && links[relationshipKey] != null;\n  }\n\n  /*\n    This code (and a lot of this serializer) need to be re-worked according to\n    the graph logic...\n  */\n  _relationshipIsIncludedForModel(relationshipKey, model) {\n    if (this.hasQueryParamIncludes()) {\n      let graph = this.request._includesGraph;\n      let graphKey = this._graphKeyForModel(model);\n\n      // Find the resource in the graph\n      let graphResource;\n\n      // Check primary data\n      if (graph.data[graphKey]) {\n        graphResource = graph.data[graphKey];\n\n        // Check includes\n      } else if (\n        graph.included[this._container.inflector.pluralize(model.modelName)]\n      ) {\n        graphResource =\n          graph.included[this._container.inflector.pluralize(model.modelName)][\n            graphKey\n          ];\n      }\n\n      // If the model's in the graph, check if relationshipKey should be included\n      return (\n        graphResource &&\n        graphResource.relationships &&\n        Object.prototype.hasOwnProperty.call(\n          graphResource.relationships,\n          dasherize(relationshipKey)\n        )\n      );\n    } else {\n      let relationshipPaths = this.getKeysForIncluded();\n\n      return relationshipPaths.includes(relationshipKey);\n    }\n  }\n\n  /*\n    This is needed for _relationshipIsIncludedForModel - see the note there for\n    more background.\n\n    If/when we can refactor this serializer, the logic in this method would\n    probably be the basis for the new overall json/graph creation.\n  */\n  _createRequestedIncludesGraph(primaryResource, secondaryResource = null) {\n    let graph = {\n      data: {},\n    };\n\n    if (this.isModel(primaryResource)) {\n      let primaryResourceKey = this._graphKeyForModel(primaryResource);\n      graph.data[primaryResourceKey] = {};\n\n      this._addPrimaryModelToRequestedIncludesGraph(graph, primaryResource);\n    } else if (this.isCollection(primaryResource)) {\n      primaryResource.models.forEach((model) => {\n        let primaryResourceKey = this._graphKeyForModel(model);\n        graph.data[primaryResourceKey] = {};\n\n        this._addPrimaryModelToRequestedIncludesGraph(graph, model);\n      });\n    }\n\n    // Hack :/ Need to think of a better palce to put this if\n    // refactoring json:api serializer.\n    this.request._includesGraph = graph;\n  }\n\n  _addPrimaryModelToRequestedIncludesGraph(graph, model) {\n    if (this.hasQueryParamIncludes()) {\n      let graphKey = this._graphKeyForModel(model);\n\n      this.getQueryParamIncludes()\n        .filter((item) => !!item.trim())\n        .forEach((includesPath) => {\n          // includesPath is post.comments, for example\n          graph.data[graphKey].relationships =\n            graph.data[graphKey].relationships || {};\n\n          let relationshipKeys = includesPath.split(\".\").map(dasherize);\n          let relationshipKey = relationshipKeys[0];\n          let graphRelationshipKey = relationshipKey;\n          let normalizedRelationshipKey = camelize(relationshipKey);\n          let hasAssociation = model.associationKeys.has(\n            normalizedRelationshipKey\n          );\n\n          assert(\n            hasAssociation,\n            `You tried to include \"${relationshipKey}\" with ${model} but no association named \"${normalizedRelationshipKey}\" is defined on the model.`\n          );\n\n          let relationship = model[normalizedRelationshipKey];\n          let relationshipData;\n\n          if (this.isModel(relationship)) {\n            relationshipData = this._graphKeyForModel(relationship);\n          } else if (this.isCollection(relationship)) {\n            relationshipData = relationship.models.map(this._graphKeyForModel);\n          } else {\n            relationshipData = null;\n          }\n\n          graph.data[graphKey].relationships[graphRelationshipKey] =\n            relationshipData;\n\n          if (relationship) {\n            this._addResourceToRequestedIncludesGraph(\n              graph,\n              relationship,\n              relationshipKeys.slice(1)\n            );\n          }\n        });\n    }\n  }\n\n  _addResourceToRequestedIncludesGraph(graph, resource, relationshipNames) {\n    graph.included = graph.included || {};\n\n    let models = this.isCollection(resource) ? resource.models : [resource];\n\n    models.forEach((model) => {\n      let collectionName = this._container.inflector.pluralize(model.modelName);\n      graph.included[collectionName] = graph.included[collectionName] || {};\n\n      this._addModelToRequestedIncludesGraph(graph, model, relationshipNames);\n    });\n  }\n\n  _addModelToRequestedIncludesGraph(graph, model, relationshipNames) {\n    let collectionName = this._container.inflector.pluralize(model.modelName);\n    let resourceKey = this._graphKeyForModel(model);\n    graph.included[collectionName][resourceKey] =\n      graph.included[collectionName][resourceKey] || {};\n\n    if (relationshipNames.length) {\n      this._addResourceRelationshipsToRequestedIncludesGraph(\n        graph,\n        collectionName,\n        resourceKey,\n        model,\n        relationshipNames\n      );\n    }\n  }\n\n  /*\n    Lot of the same logic here from _addPrimaryModelToRequestedIncludesGraph, could refactor & share\n  */\n  _addResourceRelationshipsToRequestedIncludesGraph(\n    graph,\n    collectionName,\n    resourceKey,\n    model,\n    relationshipNames\n  ) {\n    graph.included[collectionName][resourceKey].relationships =\n      graph.included[collectionName][resourceKey].relationships || {};\n\n    let relationshipName = relationshipNames[0];\n    let relationship = model[camelize(relationshipName)];\n    let relationshipData;\n\n    if (this.isModel(relationship)) {\n      relationshipData = this._graphKeyForModel(relationship);\n    } else if (this.isCollection(relationship)) {\n      relationshipData = relationship.models.map(this._graphKeyForModel);\n    }\n    graph.included[collectionName][resourceKey].relationships[\n      relationshipName\n    ] = relationshipData;\n\n    if (relationship) {\n      this._addResourceToRequestedIncludesGraph(\n        graph,\n        relationship,\n        relationshipNames.slice(1)\n      );\n    }\n  }\n\n  _graphKeyForModel(model) {\n    return `${model.modelName}:${model.id}`;\n  }\n\n  getQueryParamIncludes() {\n    let includes = get(this, \"request.queryParams.include\");\n\n    if (includes && !Array.isArray(includes)) {\n      includes = includes.split(\",\");\n    }\n\n    return includes;\n  }\n\n  hasQueryParamIncludes() {\n    return !!this.getQueryParamIncludes();\n  }\n\n  /**\n    Used to customize the `type` field of the document. By default, pluralizes and dasherizes the model's `modelName`.\n\n    For example, the JSON:API document for a `blogPost` model would be:\n\n    ```js\n    {\n      data: {\n        id: 1,\n        type: 'blog-posts'\n      }\n    }\n    ```\n\n    @method typeKeyForModel\n    @param {Model} model\n    @return {String}\n    @public\n  */\n  typeKeyForModel(model) {\n    return dasherize(this._container.inflector.pluralize(model.modelName));\n  }\n\n  getCoalescedIds(request) {\n    let ids = request.queryParams && request.queryParams[\"filter[id]\"];\n    if (typeof ids === \"string\") {\n      return ids.split(\",\");\n    }\n    return ids;\n  }\n\n  /**\n    Allows for per-relationship inclusion of linkage data. Use this when `alwaysIncludeLinkageData` is not granular enough.\n\n    ```js\n    export default JSONAPISerializer.extend({\n      shouldIncludeLinkageData(relationshipKey, model) {\n        if (relationshipKey === 'author' || relationshipKey === 'ghostWriter') {\n          return true;\n        }\n        return false;\n      }\n    });\n    ```\n\n    @method shouldIncludeLinkageData\n    @param {String} relationshipKey\n    @param {Model} model\n    @return {Boolean}\n    @public\n  */\n  shouldIncludeLinkageData(relationshipKey, model) {\n    return false;\n  }\n}\n\nJSONAPISerializer.prototype.alwaysIncludeLinkageData = false;\n\nexport default JSONAPISerializer;\n","import Model from \"./orm/model\";\nimport Collection from \"./orm/collection\";\nimport PolymorphicCollection from \"./orm/polymorphic-collection\";\nimport Serializer from \"./serializer\";\nimport JsonApiSerializer from \"./serializers/json-api-serializer\";\nimport { camelize } from \"./utils/inflector\";\nimport assert from \"./assert\";\n\n/**\n * @hide\n */\nexport default class SerializerRegistry {\n  constructor(schema, serializerMap = {}, server) {\n    this.schema = schema;\n    this._serializerMap = serializerMap;\n  }\n\n  normalize(payload, modelName) {\n    return this.serializerFor(modelName).normalize(payload);\n  }\n\n  serialize(response, request) {\n    this.request = request;\n\n    if (this._isModelOrCollection(response)) {\n      let serializer = this.serializerFor(response.modelName);\n\n      return serializer.serialize(response, request);\n    } else if (Array.isArray(response) && response.some(this._isCollection)) {\n      return response.reduce((json, collection) => {\n        let serializer = this.serializerFor(collection.modelName);\n\n        if (serializer.embed) {\n          json[this._container.inflector.pluralize(collection.modelName)] =\n            serializer.serialize(collection, request);\n        } else {\n          json = Object.assign(json, serializer.serialize(collection, request));\n        }\n\n        return json;\n      }, {});\n    } else {\n      return response;\n    }\n  }\n\n  serializerFor(type, { explicit = false } = {}) {\n    let SerializerForResponse =\n      type && this._serializerMap && this._serializerMap[camelize(type)];\n\n    if (explicit) {\n      assert(\n        !!SerializerForResponse,\n        `You passed in ${type} as an explicit serializer type but that serializer doesn't exist.`\n      );\n    } else {\n      SerializerForResponse =\n        SerializerForResponse || this._serializerMap.application || Serializer;\n\n      assert(\n        !SerializerForResponse ||\n          SerializerForResponse.prototype.embed ||\n          SerializerForResponse.prototype.root ||\n          new SerializerForResponse() instanceof JsonApiSerializer,\n        \"You cannot have a serializer that sideloads (embed: false) and disables the root (root: false).\"\n      );\n    }\n\n    return new SerializerForResponse(this, type, this.request);\n  }\n\n  _isModel(object) {\n    return object instanceof Model;\n  }\n\n  _isCollection(object) {\n    return (\n      object instanceof Collection || object instanceof PolymorphicCollection\n    );\n  }\n\n  _isModelOrCollection(object) {\n    return this._isModel(object) || this._isCollection(object);\n  }\n\n  registerSerializers(newSerializerMaps) {\n    let currentSerializerMap = this._serializerMap || {};\n    this._serializerMap = Object.assign(\n      currentSerializerMap,\n      newSerializerMaps\n    );\n  }\n\n  getCoalescedIds(request, modelName) {\n    return this.serializerFor(modelName).getCoalescedIds(request);\n  }\n}\n","import { camelize, dasherize } from \"../utils/inflector\";\nimport Association from \"./associations/association\";\nimport Collection from \"./collection\";\nimport assert from \"../assert\";\nimport forIn from \"lodash/forIn\";\n\nconst collectionNameCache = {};\nconst internalCollectionNameCache = {};\nconst modelNameCache = {};\n\n/**\n  The primary use of the `Schema` class is to use it to find Models and Collections via the `Model` class methods.\n\n  The `Schema` is most often accessed via the first parameter to a route handler:\n\n  ```js\n  this.get('posts', schema => {\n    return schema.posts.where({ isAdmin: false });\n  });\n  ```\n\n  It is also available from the `.schema` property of a `server` instance:\n\n  ```js\n  server.schema.users.create({ name: 'Yehuda' });\n  ```\n\n  To work with the Model or Collection returned from one of the methods below, refer to the instance methods in the API docs for the `Model` and `Collection` classes.\n\n  @class Schema\n  @constructor\n  @public\n */\nexport default class Schema {\n  constructor(db, modelsMap = {}) {\n    assert(db, \"A schema requires a db\");\n\n    /**\n      Returns Mirage's database. See the `Db` docs for the db's API.\n\n      @property db\n      @type {Object}\n      @public\n    */\n    this.db = db;\n    this._registry = {};\n    this._dependentAssociations = { polymorphic: [] };\n    this.registerModels(modelsMap);\n    this.isSaving = {}; // a hash of models that are being saved, used to avoid cycles\n  }\n\n  /**\n    @method registerModels\n    @param hash\n    @public\n    @hide\n   */\n  registerModels(hash = {}) {\n    forIn(hash, (model, key) => {\n      this.registerModel(key, hash[key]);\n    });\n  }\n\n  /**\n    @method registerModel\n    @param type\n    @param ModelClass\n    @public\n    @hide\n   */\n  registerModel(type, ModelClass) {\n    let camelizedModelName = camelize(type);\n    let modelName = dasherize(camelizedModelName);\n\n    // Avoid mutating original class, because we may want to reuse it across many tests\n    ModelClass = ModelClass.extend();\n\n    // Store model & fks in registry\n    // TODO: don't think this is needed anymore\n    this._registry[camelizedModelName] = this._registry[camelizedModelName] || {\n      class: null,\n      foreignKeys: [],\n    }; // we may have created this key before, if another model added fks to it\n    this._registry[camelizedModelName].class = ModelClass;\n\n    // TODO: set here, remove from model#constructor\n    ModelClass.prototype._schema = this;\n    ModelClass.prototype.modelName = modelName;\n    // Set up associations\n    ModelClass.prototype.hasManyAssociations = {}; // a registry of the model's hasMany associations. Key is key from model definition, value is association instance itself\n    ModelClass.prototype.hasManyAssociationFks = {}; // a lookup table to get the hasMany association by foreignKey\n    ModelClass.prototype.belongsToAssociations = {}; // a registry of the model's belongsTo associations. Key is key from model definition, value is association instance itself\n    ModelClass.prototype.belongsToAssociationFks = {}; // a lookup table to get the belongsTo association by foreignKey\n    ModelClass.prototype.associationKeys = new Set(); // ex: address.user, user.addresses\n    ModelClass.prototype.associationIdKeys = new Set(); // ex: address.user_id, user.address_ids\n    ModelClass.prototype.dependentAssociations = []; // a registry of associations that depend on this model, needed for deletion cleanup.\n\n    let fksAddedFromThisModel = {};\n    for (let associationProperty in ModelClass.prototype) {\n      if (ModelClass.prototype[associationProperty] instanceof Association) {\n        let association = ModelClass.prototype[associationProperty];\n        association.name = associationProperty;\n        association.modelName =\n          association.modelName || this.toModelName(associationProperty);\n        association.ownerModelName = modelName;\n        association.setSchema(this);\n\n        // Update the registry with this association's foreign keys. This is\n        // essentially our \"db migration\", since we must know about the fks.\n        let [fkHolder, fk] = association.getForeignKeyArray();\n\n        fksAddedFromThisModel[fkHolder] = fksAddedFromThisModel[fkHolder] || [];\n        assert(\n          !fksAddedFromThisModel[fkHolder].includes(fk),\n          `Your '${type}' model definition has multiple possible inverse relationships of type '${fkHolder}'. Please use explicit inverses.`\n        );\n        fksAddedFromThisModel[fkHolder].push(fk);\n\n        this._addForeignKeyToRegistry(fkHolder, fk);\n\n        // Augment the Model's class with any methods added by this association\n        association.addMethodsToModelClass(ModelClass, associationProperty);\n      }\n    }\n\n    // Create a db collection for this model, if doesn't exist\n    let collection = this.toCollectionName(modelName);\n    if (!this.db[collection]) {\n      this.db.createCollection(collection);\n    }\n\n    // Create the entity methods\n    this[collection] = {\n      camelizedModelName,\n      new: (attrs) => this.new(camelizedModelName, attrs),\n      create: (attrs) => this.create(camelizedModelName, attrs),\n      all: (attrs) => this.all(camelizedModelName, attrs),\n      find: (attrs) => this.find(camelizedModelName, attrs),\n      findBy: (attrs) => this.findBy(camelizedModelName, attrs),\n      findOrCreateBy: (attrs) => this.findOrCreateBy(camelizedModelName, attrs),\n      where: (attrs) => this.where(camelizedModelName, attrs),\n      none: (attrs) => this.none(camelizedModelName, attrs),\n      first: (attrs) => this.first(camelizedModelName, attrs),\n    };\n\n    return this;\n  }\n\n  /**\n    @method modelFor\n    @param type\n    @public\n    @hide\n   */\n  modelFor(type) {\n    return this._registry[type];\n  }\n\n  /**\n    Create a new unsaved model instance with attributes *attrs*.\n\n    ```js\n    let post = blogPosts.new({ title: 'Lorem ipsum' });\n    post.title;   // Lorem ipsum\n    post.id;      // null\n    post.isNew(); // true\n    ```\n\n    @method new\n    @param type\n    @param attrs\n    @public\n   */\n  new(type, attrs) {\n    return this._instantiateModel(dasherize(type), attrs);\n  }\n\n  /**\n    Create a new model instance with attributes *attrs*, and insert it into the database.\n\n    ```js\n    let post = blogPosts.create({title: 'Lorem ipsum'});\n    post.title;   // Lorem ipsum\n    post.id;      // 1\n    post.isNew(); // false\n    ```\n\n    @method create\n    @param type\n    @param attrs\n    @public\n   */\n  create(type, attrs) {\n    return this.new(type, attrs).save();\n  }\n\n  /**\n    Return all models in the database.\n\n    ```js\n    let posts = blogPosts.all();\n    // [post:1, post:2, ...]\n    ```\n\n    @method all\n    @param type\n    @public\n   */\n  all(type) {\n    let collection = this.collectionForType(type);\n\n    return this._hydrate(collection, dasherize(type));\n  }\n\n  /**\n    Return an empty collection of type `type`.\n\n    @method none\n    @param type\n    @public\n   */\n  none(type) {\n    return this._hydrate([], dasherize(type));\n  }\n\n  /**\n    Return one or many models in the database by id.\n\n    ```js\n    let post = blogPosts.find(1);\n    let posts = blogPosts.find([1, 3, 4]);\n    ```\n\n    @method find\n    @param type\n    @param ids\n    @public\n   */\n  find(type, ids) {\n    let collection = this.collectionForType(type);\n    let records = collection.find(ids);\n\n    if (Array.isArray(ids)) {\n      assert(\n        records.length === ids.length,\n        `Couldn't find all ${this._container.inflector.pluralize(\n          type\n        )} with ids: (${ids.join(\",\")}) (found ${\n          records.length\n        } results, but was looking for ${ids.length})`\n      );\n    }\n\n    return this._hydrate(records, dasherize(type));\n  }\n\n  /**\n    Returns the first model in the database that matches the key-value pairs in `attrs`. Note that a string comparison is used.\n\n    ```js\n    let post = blogPosts.findBy({ published: true });\n    let post = blogPosts.findBy({ authorId: 1, published: false });\n    let post = blogPosts.findBy({ author: janeSmith, featured: true });\n    ```\n\n    This will return `null` if the schema doesn't have any matching record.\n\n    A predicate function can also be used to find a match.\n\n    ```js\n    let longPost = blogPosts.findBy((post) => post.body.length > 1000);\n    ```\n\n    @method findBy\n    @param type\n    @param attributesOrPredicate\n    @public\n   */\n  findBy(type, query) {\n    let collection = this.collectionForType(type);\n    let record = collection.findBy(query);\n\n    return this._hydrate(record, dasherize(type));\n  }\n\n  /**\n    Returns the first model in the database that matches the key-value pairs in `attrs`, or creates a record with the attributes if one is not found.\n\n    ```js\n    // Find the first published blog post, or create a new one.\n    let post = blogPosts.findOrCreateBy({ published: true });\n    ```\n\n    @method findOrCreateBy\n    @param type\n    @param attributeName\n    @public\n   */\n  findOrCreateBy(type, attrs) {\n    let collection = this.collectionForType(type);\n    let record = collection.findBy(attrs);\n    let model;\n\n    if (!record) {\n      model = this.create(type, attrs);\n    } else {\n      model = this._hydrate(record, dasherize(type));\n    }\n\n    return model;\n  }\n\n  /**\n    Return an ORM/Collection, which represents an array of models from the database matching `query`.\n\n    If `query` is an object, its key-value pairs will be compared against records using string comparison.\n\n    `query` can also be a compare function.\n\n    ```js\n    let posts = blogPosts.where({ published: true });\n    let posts = blogPosts.where(post => post.published === true);\n    ```\n\n    @method where\n    @param type\n    @param query\n    @public\n   */\n  where(type, query) {\n    let collection = this.collectionForType(type);\n    let records = collection.where(query);\n\n    return this._hydrate(records, dasherize(type));\n  }\n\n  /**\n    Returns the first model in the database.\n\n    ```js\n    let post = blogPosts.first();\n    ```\n\n    N.B. This will return `null` if the schema doesn't contain any records.\n\n    @method first\n    @param type\n    @public\n   */\n  first(type) {\n    let collection = this.collectionForType(type);\n    let record = collection[0];\n\n    return this._hydrate(record, dasherize(type));\n  }\n\n  /**\n    @method modelClassFor\n    @param modelName\n    @public\n    @hide\n   */\n  modelClassFor(modelName) {\n    let model = this._registry[camelize(modelName)];\n\n    assert(model, `Model not registered: ${modelName}`);\n\n    return model.class.prototype;\n  }\n\n  /*\n    This method updates the dependentAssociations registry, which is used to\n    keep track of which models depend on a given association. It's used when\n    deleting models - their dependents need to be looked up and foreign keys\n    updated.\n\n    For example,\n\n        schema = {\n          post: Model.extend(),\n          comment: Model.extend({\n            post: belongsTo()\n          })\n        };\n\n        comment1.post = post1;\n        ...\n        post1.destroy()\n\n    Deleting this post should clear out comment1's foreign key.\n\n    Polymorphic associations can have _any_ other model as a dependent, so we\n    handle them separately.\n  */\n  addDependentAssociation(association, modelName) {\n    if (association.isPolymorphic) {\n      this._dependentAssociations.polymorphic.push(association);\n    } else {\n      this._dependentAssociations[modelName] =\n        this._dependentAssociations[modelName] || [];\n      this._dependentAssociations[modelName].push(association);\n    }\n  }\n\n  dependentAssociationsFor(modelName) {\n    let directDependents = this._dependentAssociations[modelName] || [];\n    let polymorphicAssociations = this._dependentAssociations.polymorphic || [];\n\n    return directDependents.concat(polymorphicAssociations);\n  }\n\n  /**\n    Returns an object containing the associations registered for the model of the given _modelName_.\n\n    For example, given this configuration\n    \n    ```js\n    import { createServer, Model, hasMany, belongsTo } from 'miragejs'\n\n    let server = createServer({\n      models: {\n        user: Model,\n        article: Model.extend({\n          fineAuthor: belongsTo(\"user\"),\n          comments: hasMany()\n        }),\n        comment: Model\n      }\n    })\n    ```\n\n    each of the following would return empty objects\n\n    ```js\n    server.schema.associationsFor('user')\n    // {}\n    server.schema.associationsFor('comment')\n    // {}\n    ```\n\n    but the associations for the `article` would return\n\n    ```js\n    server.schema.associationsFor('article')\n\n    // {\n    //   fineAuthor: BelongsToAssociation,\n    //   comments: HasManyAssociation\n    // }\n    ```\n\n    Check out the docs on the Association class to see what fields are available for each association.\n\n    @method associationsFor\n    @param {String} modelName\n    @return {Object}\n    @public\n  */\n  associationsFor(modelName) {\n    let modelClass = this.modelClassFor(modelName);\n\n    return Object.assign(\n      {},\n      modelClass.belongsToAssociations,\n      modelClass.hasManyAssociations\n    );\n  }\n\n  hasModelForModelName(modelName) {\n    return this.modelFor(camelize(modelName));\n  }\n\n  /*\n    Private methods\n  */\n\n  /**\n    @method collectionForType\n    @param type\n    @private\n    @hide\n   */\n  collectionForType(type) {\n    let collection = this.toCollectionName(type);\n    assert(\n      this.db[collection],\n      `You're trying to find model(s) of type ${type} but this collection doesn't exist in the database.`\n    );\n\n    return this.db[collection];\n  }\n\n  toCollectionName(type) {\n    if (typeof collectionNameCache[type] !== \"string\") {\n      let modelName = dasherize(type);\n\n      const collectionName = camelize(\n        this._container.inflector.pluralize(modelName)\n      );\n\n      collectionNameCache[type] = collectionName;\n    }\n\n    return collectionNameCache[type];\n  }\n\n  // This is to get at the underlying Db collection. Poorly named... need to\n  // refactor to DbTable or something.\n  toInternalCollectionName(type) {\n    if (typeof internalCollectionNameCache[type] !== \"string\") {\n      const internalCollectionName = `_${this.toCollectionName(type)}`;\n\n      internalCollectionNameCache[type] = internalCollectionName;\n    }\n\n    return internalCollectionNameCache[type];\n  }\n\n  toModelName(type) {\n    if (typeof modelNameCache[type] !== \"string\") {\n      let dasherized = dasherize(type);\n\n      const modelName = this._container.inflector.singularize(dasherized);\n\n      modelNameCache[type] = modelName;\n    }\n\n    return modelNameCache[type];\n  }\n\n  /**\n    @method _addForeignKeyToRegistry\n    @param type\n    @param fk\n    @private\n    @hide\n   */\n  _addForeignKeyToRegistry(type, fk) {\n    this._registry[type] = this._registry[type] || {\n      class: null,\n      foreignKeys: [],\n    };\n\n    let fks = this._registry[type].foreignKeys;\n    if (!fks.includes(fk)) {\n      fks.push(fk);\n    }\n  }\n\n  /**\n    @method _instantiateModel\n    @param modelName\n    @param attrs\n    @private\n    @hide\n   */\n  _instantiateModel(modelName, attrs) {\n    let ModelClass = this._modelFor(modelName);\n    let fks = this._foreignKeysFor(modelName);\n\n    return new ModelClass(this, modelName, attrs, fks);\n  }\n\n  /**\n    @method _modelFor\n    @param modelName\n    @private\n    @hide\n   */\n  _modelFor(modelName) {\n    return this._registry[camelize(modelName)].class;\n  }\n\n  /**\n    @method _foreignKeysFor\n    @param modelName\n    @private\n    @hide\n   */\n  _foreignKeysFor(modelName) {\n    return this._registry[camelize(modelName)].foreignKeys;\n  }\n\n  /**\n    Takes a record and returns a model, or an array of records\n    and returns a collection.\n   *\n    @method _hydrate\n    @param records\n    @param modelName\n    @private\n    @hide\n   */\n  _hydrate(records, modelName) {\n    if (Array.isArray(records)) {\n      let models = records.map(function (record) {\n        return this._instantiateModel(modelName, record);\n      }, this);\n      return new Collection(modelName, models);\n    } else if (records) {\n      return this._instantiateModel(modelName, records);\n    } else {\n      return null;\n    }\n  }\n}\n","import { singularize, pluralize } from \"inflected\";\nimport Db from \"./db\";\nimport Association from \"./orm/associations/association\";\nimport RouteHandler from \"./route-handler\";\nimport BaseRouteHandler from \"./route-handlers/base\";\nimport Serializer from \"./serializer\";\nimport SerializerRegistry from \"./serializer-registry\";\nimport Schema from \"./orm/schema\";\n\nconst classes = {\n  Db,\n  Association,\n  RouteHandler,\n  BaseRouteHandler,\n  Serializer,\n  SerializerRegistry,\n  Schema,\n};\n\nlet defaultInflector = { singularize, pluralize };\n\n/**\n  Lightweight DI container for customizable objects that are needed by\n  deeply nested classes.\n\n  @class Container\n  @hide\n */\nclass Container {\n  constructor() {\n    this.inflector = defaultInflector;\n  }\n\n  register(key, value) {\n    this[key] = value;\n  }\n\n  create(className, ...args) {\n    let Class = classes[className];\n    Class.prototype._container = this;\n\n    return new Class(...args);\n  }\n}\n\n/**\n  These are side effects. We give each class a default container so it can be\n  easily unit tested.\n\n  We should remove these once we have test coverage and can refactor to a proper\n  DI system.\n*/\nlet defaultContainer = new Container();\n\nDb.prototype._container = defaultContainer;\nAssociation.prototype._container = defaultContainer;\nBaseRouteHandler.prototype._container = defaultContainer;\nRouteHandler.prototype._container = defaultContainer;\nSerializer.prototype._container = defaultContainer;\nSerializerRegistry.prototype._container = defaultContainer;\nSchema.prototype._container = defaultContainer;\n\nexport default Container;\n","import Serializer from \"../serializer\";\nimport { underscore, dasherize, camelize } from \"../utils/inflector\";\n\nexport default Serializer.extend({\n  serializeIds: \"always\",\n  normalizeIds: true,\n\n  keyForModel(type) {\n    return underscore(type);\n  },\n\n  keyForAttribute(attr) {\n    attr = Serializer.prototype.keyForAttribute.apply(this, arguments);\n    return underscore(attr);\n  },\n\n  keyForRelationship(type) {\n    return this._container.inflector.pluralize(underscore(type));\n  },\n\n  keyForEmbeddedRelationship(attributeName) {\n    return underscore(attributeName);\n  },\n\n  keyForRelationshipIds(type) {\n    return `${underscore(this._container.inflector.singularize(type))}_ids`;\n  },\n\n  keyForForeignKey(relationshipName) {\n    return `${underscore(relationshipName)}_id`;\n  },\n\n  keyForPolymorphicForeignKeyId(relationshipName) {\n    return `${underscore(relationshipName)}_id`;\n  },\n\n  keyForPolymorphicForeignKeyType(relationshipName) {\n    return `${underscore(relationshipName)}_type`;\n  },\n\n  normalize(payload) {\n    let type = Object.keys(payload)[0];\n    let attrs = payload[type];\n    let modelName = camelize(type);\n    let modelClass = this.schema.modelClassFor(modelName);\n    let { belongsToAssociations, hasManyAssociations } = modelClass;\n    let belongsToKeys = Object.keys(belongsToAssociations);\n    let hasManyKeys = Object.keys(hasManyAssociations);\n\n    if (this.primaryKey !== \"id\") {\n      attrs.id = attrs[this.primaryKey];\n      delete attrs[this.primaryKey];\n    }\n\n    let jsonApiPayload = {\n      data: {\n        type: this._container.inflector.pluralize(type),\n        attributes: {},\n      },\n    };\n    if (attrs.id) {\n      jsonApiPayload.data.id = attrs.id;\n    }\n\n    let relationships = {};\n\n    Object.keys(attrs).forEach((key) => {\n      if (key !== \"id\") {\n        if (this.normalizeIds) {\n          if (belongsToKeys.includes(key)) {\n            let association = belongsToAssociations[key];\n            let associationModel = association.modelName;\n            relationships[dasherize(key)] = {\n              data: {\n                type: associationModel,\n                id: attrs[key],\n              },\n            };\n          } else if (hasManyKeys.includes(key)) {\n            let association = hasManyAssociations[key];\n            let associationModel = association.modelName;\n            let data = attrs[key].map((id) => {\n              return {\n                type: associationModel,\n                id,\n              };\n            });\n            relationships[dasherize(key)] = { data };\n          } else {\n            jsonApiPayload.data.attributes[dasherize(key)] = attrs[key];\n          }\n        } else {\n          jsonApiPayload.data.attributes[dasherize(key)] = attrs[key];\n        }\n      }\n    });\n    if (Object.keys(relationships).length) {\n      jsonApiPayload.data.relationships = relationships;\n    }\n\n    return jsonApiPayload;\n  },\n\n  getCoalescedIds(request) {\n    return request.queryParams && request.queryParams.ids;\n  },\n});\n","import { pluralize, singularize } from 'active-inflector';\n\nimport assert from './assert';\n\nexport default function startMirage(\n  makeServer,\n  { owner, env, ...otherOptions } = {},\n) {\n  assert('There is no makeServer function passed to startMirage', makeServer);\n\n  assert(\n    'Mirage config default exported function must at least one parameter',\n    makeServer.length > 0,\n  );\n\n  if (!env) {\n    assert(\n      'You must pass `owner` to startMirage() to lookup environment',\n      owner,\n    );\n    env = owner.resolveRegistration('config:environment');\n  }\n\n  let environment = env.environment;\n\n  let options = {\n    env,\n    environment,\n    inflector: { singularize, pluralize },\n    ...otherOptions,\n  };\n\n  let server = makeServer(options);\n\n  // Check to see if mirageLogging is on the URL. If so, enable logging on the server\n  if (\n    typeof location !== 'undefined' &&\n    location.search.indexOf('mirageLogging') !== -1\n  ) {\n    server.logging = true;\n  }\n\n  return server;\n}\n","import ActiveModelSerializer from \"./active-model-serializer\";\nimport { camelize } from \"../utils/inflector\";\n\nexport default ActiveModelSerializer.extend({\n  serializeIds: \"always\",\n\n  keyForModel(type) {\n    return camelize(type);\n  },\n\n  keyForAttribute(attr) {\n    attr = ActiveModelSerializer.prototype.keyForAttribute.apply(\n      this,\n      arguments\n    );\n    return camelize(attr);\n  },\n\n  keyForRelationship(type) {\n    return camelize(this._container.inflector.pluralize(type));\n  },\n\n  keyForEmbeddedRelationship(attributeName) {\n    return camelize(attributeName);\n  },\n\n  keyForRelationshipIds(type) {\n    return camelize(this._container.inflector.pluralize(type));\n  },\n\n  keyForForeignKey(relationshipName) {\n    return camelize(this._container.inflector.singularize(relationshipName));\n  },\n\n  getCoalescedIds(request) {\n    return request.queryParams && request.queryParams.ids;\n  },\n});\n","if (typeof global !== \"undefined\" && typeof global.self === 'undefined') {\n  global.self = {};\n  global.__pretenderNodePolyfill = true;\n}\n","if (typeof global !== \"undefined\" && global.__pretenderNodePolyfill) {\n  delete global.self\n  delete global.__pretenderNodePolyfill\n}\n","import { scheduleOnce } from '@ember/runloop';\nimport Service, { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { assert } from '@ember/debug';\nimport type ApplicationInstance from '@ember/application/instance';\nimport type RouterService from '@ember/routing/router-service';\nimport type Owner from '@ember/owner';\n\nimport type {\n  FastBootDocument,\n  PageTitleToken,\n  PageTitleConfig,\n} from '../private-types.ts';\n\nconst isFastBoot = typeof FastBoot !== 'undefined';\n\nconst RouterEvent = {\n  ROUTE_DID_CHANGE: 'routeDidChange',\n} as const;\n\nfunction hasResolveRegistration(owner: Owner): owner is ApplicationInstance {\n  return `resolveRegistration` in owner;\n}\n\nfunction hasPageTitleConfig(\n  fromEnv: unknown,\n): fromEnv is { pageTitle: PageTitleConfig } {\n  if (typeof fromEnv !== 'object') return false;\n  if (fromEnv === null) return false;\n\n  // all properties on the pageTitle config are optional,\n  // so we can't check for more\n  return 'pageTitle' in fromEnv;\n}\n\nconst configKeys = ['separator', 'prepend', 'replace'] as const;\n\n/**\n  @class page-title\n  @extends Ember.Service\n */\nexport default class PageTitleService extends Service {\n  @service('router') declare router: RouterService;\n\n  // in fastboot context \"document\" is instance of\n  // ember-fastboot/simple-dom document\n  @service('-document') private declare document: FastBootDocument;\n\n  tokens: PageTitleToken[] = [];\n\n  _defaultConfig: PageTitleConfig = {\n    // The default separator to use between tokens.\n    separator: ' | ',\n\n    // The default prepend value to use.\n    prepend: true,\n\n    // The default replace value to use.\n    replace: null,\n  };\n\n  constructor(owner: Owner) {\n    super(owner);\n    this._validateExistingTitleElement();\n\n    if (hasResolveRegistration(owner)) {\n      const config = owner.resolveRegistration('config:environment');\n\n      if (hasPageTitleConfig(config)) {\n        configKeys.forEach((key) => {\n          if (!isEmpty(config.pageTitle[key])) {\n            const configValue = config.pageTitle[key];\n\n            // SAFETY: how is one supposed to iterate over keys for an object and have it\n            //         known to the compiler that both objects, having the same shape,\n            //         will have the same type per-value?\n            //         as-is, the `configValue` is a union of all value-types from the object.\n            (this._defaultConfig[key] as PageTitleConfig[typeof key]) =\n              configValue;\n          }\n        });\n      }\n    }\n    this.router.on(RouterEvent.ROUTE_DID_CHANGE, this.scheduleTitleUpdate);\n  }\n\n  applyTokenDefaults(token: PageTitleToken) {\n    const defaultSeparator = this._defaultConfig.separator;\n    const defaultPrepend = this._defaultConfig.prepend;\n    const defaultReplace = this._defaultConfig.replace;\n\n    token.previous ??= null;\n    token.next ??= null;\n\n    if (token.separator == null) {\n      token.separator = defaultSeparator;\n    }\n\n    if (token.prepend == null && defaultPrepend != null) {\n      token.prepend = defaultPrepend;\n    }\n\n    if (token.replace == null && defaultReplace != null) {\n      token.replace = defaultReplace;\n    }\n  }\n\n  inheritFromPrevious(token: PageTitleToken) {\n    const previous = token.previous;\n    if (previous) {\n      if (token.separator == null) {\n        token.separator = previous.separator;\n      }\n\n      if (token.prepend == null) {\n        token.prepend = previous.prepend;\n      }\n    }\n  }\n\n  push(token: PageTitleToken) {\n    const tokenForId = this._findTokenById(token.id);\n    if (tokenForId) {\n      const index = this.tokens.indexOf(tokenForId);\n      const tokens = [...this.tokens];\n      const previous = tokenForId.previous;\n      token.previous = previous;\n      token.next = tokenForId.next;\n      this.inheritFromPrevious(token);\n      this.applyTokenDefaults(token);\n\n      tokens.splice(index, 1, token);\n      this.tokens = tokens;\n      return;\n    }\n\n    const previous = this.tokens.slice(-1)[0];\n    if (previous) {\n      token.previous = previous ?? null;\n      previous.next = token;\n      this.inheritFromPrevious(token);\n    }\n\n    this.applyTokenDefaults(token);\n    this.tokens = [...this.tokens, token];\n  }\n\n  remove(id: PageTitleToken['id']) {\n    const token = this._findTokenById(id);\n\n    if (!token) return;\n\n    const { next, previous } = token;\n    if (next) {\n      next.previous = previous;\n    }\n\n    if (previous) {\n      previous.next = next;\n    }\n\n    token.previous = token.next = null;\n\n    const tokens = [...this.tokens];\n    tokens.splice(tokens.indexOf(token), 1);\n    this.tokens = tokens;\n  }\n\n  get visibleTokens(): PageTitleToken[] {\n    const tokens = this.tokens;\n    let i = tokens ? tokens.length : 0;\n    const visible = [];\n    while (i--) {\n      const token = tokens[i];\n\n      if (!token) continue;\n\n      if (token.replace) {\n        visible.unshift(token);\n        break;\n      } else {\n        visible.unshift(token);\n      }\n    }\n    return visible;\n  }\n\n  get sortedTokens(): PageTitleToken[] {\n    const visible = this.visibleTokens;\n    if (!visible) return [];\n\n    let appending = true;\n    let group: PageTitleToken[] = [];\n    const groups = [group];\n    const frontGroups: PageTitleToken[] = [];\n\n    visible.forEach((token) => {\n      if (token.front) {\n        frontGroups.unshift(token);\n      } else if (token.prepend) {\n        if (appending) {\n          appending = false;\n          group = [];\n          groups.push(group);\n        }\n        group.unshift(token);\n      } else {\n        if (!appending) {\n          appending = true;\n          group = [];\n          groups.push(group);\n        }\n        group.push(token);\n      }\n    });\n\n    return frontGroups.concat(groups.reduce((E, group) => E.concat(group), []));\n  }\n\n  scheduleTitleUpdate = () => {\n    // eslint-disable-next-line ember/no-runloop\n    scheduleOnce('afterRender', this, this._updateTitle);\n  };\n\n  toString(): string {\n    const tokens = this.sortedTokens;\n    const title = [];\n\n    for (let i = 0, len = tokens.length; i < len; i++) {\n      const token = tokens[i];\n      if (!token) continue;\n\n      if (token.title) {\n        title.push(token.title);\n        if (i + 1 < len) {\n          title.push(token.separator);\n        }\n      }\n    }\n\n    return title.join('');\n  }\n\n  willDestroy() {\n    super.willDestroy();\n    this.router.off(RouterEvent.ROUTE_DID_CHANGE, this.scheduleTitleUpdate);\n  }\n\n  private _updateTitle() {\n    const toBeTitle = this.toString();\n\n    if (isFastBoot) {\n      this.updateFastbootTitle(toBeTitle);\n    } else {\n      /**\n       * When rendering app with \"?fastboot=false\" (http://ember-fastboot.com/docs/user-guide#disabling-fastboot)\n       * We will not have <title> element present in DOM.\n       *\n       * But this is fine as by HTML spec,\n       * one is created upon assigning \"document.title\" value;\n       *\n       * https://html.spec.whatwg.org/multipage/dom.html#dom-tree-accessors\n       */\n      this.document.title = toBeTitle;\n    }\n\n    this.titleDidUpdate(toBeTitle);\n  }\n\n  /**\n   * Validate if there's more than one title element present.\n   *\n   * Example: ember-cli-head can cause conflicting updates.\n   * @private\n   */\n  private _validateExistingTitleElement() {\n    if (isFastBoot) {\n      return;\n    }\n    assert(\n      '[ember-page-title]: Multiple title elements found. Check for other addons like ember-cli-head updating <title> as well.',\n      document.head.querySelectorAll('title').length <= 1,\n    );\n  }\n\n  /**\n   * Find token by id\n   *\n   * @param {String} id\n   * @private\n   */\n  private _findTokenById(id: PageTitleToken['id']) {\n    return this.tokens.find((token) => token.id === id);\n  }\n\n  updateFastbootTitle(toBeTitle: string) {\n    if (!isFastBoot) {\n      return;\n    }\n    const headElement = this.document.head;\n    const headChildNodes = headElement.childNodes;\n\n    // Remove existing title elements from previous render cycle\n    for (let i = 0; i < headChildNodes.length; i++) {\n      const node = headChildNodes[i];\n      if (!node) continue;\n\n      if (node.nodeName.toLowerCase() === 'title') {\n        headElement.removeChild(node);\n      }\n    }\n\n    // Add title element with latest value\n    const titleEl = this.document.createElement('title');\n    const titleContents = this.document.createTextNode(toBeTitle);\n    titleEl.appendChild(titleContents);\n    headElement.appendChild(titleEl);\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  titleDidUpdate(_title: string) {\n    // default is empty, meant to be overriden by user if desired\n  }\n}\n","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { isEqual } from '@ember/utils';\nimport type {\n  PowerSelectArgs,\n  PowerSelectSignature,\n  Select,\n} from './power-select';\nimport { deprecate } from '@ember/debug';\nimport type Owner from '@ember/owner';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\ninterface PowerSelectMultipleSignature extends PowerSelectSignature {\n  // any extra property for multiple selects?\n}\n\nexport default class PowerSelectMultipleComponent extends Component<PowerSelectMultipleSignature> {\n  constructor(owner: Owner, args: PowerSelectArgs) {\n    super(owner, args);\n    deprecate(\n      'You are using the `<PowerSelectMultiple>` component. Replace all usages with `<PowerSelect>` and pass `@multiple={{true}}` as a parameter to achieve the same behavior. If you have used the ID `#ember-power-select-trigger-multiple-input-{uniqueId}` to access the search field, update your `querySelector` to use `#ember-power-select-trigger-input-{uniqueId}` instead. If you have a custom multiple trigger or input component, you also need to move them to `<PowerSelect::Trigger>` / `<PowerSelect::Input>`.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.deprecate-power-select-multiple',\n        since: {\n          enabled: '8.11',\n          available: '8.11',\n        },\n        until: '9.0.0',\n      },\n    );\n  }\n\n  get computedTabIndex() {\n    if (this.args.triggerComponent === undefined && this.args.searchEnabled) {\n      return '-1';\n    } else {\n      return this.args.tabindex || '0';\n    }\n  }\n\n  // Actions\n  @action\n  handleOpen(select: Select, e: Event): false | void {\n    if (this.args.onOpen && this.args.onOpen(select, e) === false) {\n      return false;\n    }\n    this.focusInput(select);\n  }\n\n  @action\n  handleFocus(select: Select, e: FocusEvent): void {\n    if (this.args.onFocus) {\n      this.args.onFocus(select, e);\n    }\n    this.focusInput(select);\n  }\n\n  @action\n  handleKeydown(select: Select, e: KeyboardEvent): false | void {\n    if (this.args.onKeydown && this.args.onKeydown(select, e) === false) {\n      e.stopPropagation();\n      return false;\n    }\n    if (e.keyCode === 13 && select.isOpen) {\n      e.stopPropagation();\n      if (select.highlighted !== undefined) {\n        if (\n          !select.selected ||\n          select.selected.indexOf(select.highlighted) === -1\n        ) {\n          select.actions.choose(select.highlighted, e);\n          return false;\n        } else {\n          select.actions.close(e);\n          return false;\n        }\n      } else {\n        select.actions.close(e);\n        return false;\n      }\n    }\n  }\n\n  defaultBuildSelection(option: any, select: Select) {\n    const newSelection = Array.isArray(select.selected)\n      ? select.selected.slice(0)\n      : [];\n    let idx = -1;\n    for (let i = 0; i < newSelection.length; i++) {\n      if (isEqual(newSelection[i], option)) {\n        idx = i;\n        break;\n      }\n    }\n    if (idx > -1) {\n      newSelection.splice(idx, 1);\n    } else {\n      newSelection.push(option);\n    }\n    return newSelection;\n  }\n\n  focusInput(select: Select) {\n    if (select) {\n      const triggerElement = select.actions.getTriggerElement();\n      let root: Document | HTMLElement;\n\n      if (\n        triggerElement &&\n        triggerElement.getRootNode() instanceof ShadowRoot\n      ) {\n        root = triggerElement.getRootNode() as HTMLElement;\n      } else {\n        root = document;\n      }\n\n      const input = root.querySelector(\n        `#ember-power-select-trigger-multiple-input-${select.uniqueId}`,\n      ) as HTMLElement;\n\n      if (input) {\n        input.focus();\n      }\n    }\n  }\n}\n","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { get } from '@ember/object';\nimport { assert, deprecate } from '@ember/debug';\nimport { isBlank } from '@ember/utils';\nimport type { Select } from '../power-select';\nimport type Owner from '@ember/owner';\n\ninterface PowerSelectMultipleInputSignature {\n  Element: HTMLElement;\n  Args: {\n    select: Select;\n    placeholder?: string;\n    searchField: string;\n    tabindex?: string;\n    listboxId?: string;\n    ariaLabel?: string;\n    ariaActiveDescendant?: string;\n    ariaLabelledBy?: string;\n    ariaDescribedBy?: string;\n    role?: string;\n    placeholderComponent?: string;\n    isDefaultPlaceholder?: boolean;\n    onInput?: (e: InputEvent) => boolean;\n    onKeydown?: (e: KeyboardEvent) => boolean;\n    onFocus: (e: FocusEvent) => void;\n    onBlur: (e: FocusEvent) => void;\n    buildSelection: (lastSelection: any, select: Select) => any[];\n  };\n}\n\nexport default class PowerSelectMultipleInputComponent extends Component<PowerSelectMultipleInputSignature> {\n  constructor(owner: Owner, args: PowerSelectMultipleInputSignature['Args']) {\n    super(owner, args);\n    deprecate(\n      'You are using the `<PowerSelectMultiple::Input>` component. Replace all usages with the `<PowerSelect::Input>` component.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.deprecate-power-select-multiple-input',\n        since: {\n          enabled: '8.11',\n          available: '8.11',\n        },\n        until: '9.0.0',\n      },\n    );\n  }\n\n  get maybePlaceholder() {\n    if (!this.args.isDefaultPlaceholder) {\n      return undefined;\n    }\n    return !this.args.select.selected || this.args.select.selected.length === 0\n      ? this.args.placeholder || ''\n      : '';\n  }\n\n  @action\n  handleInput(event: Event): void {\n    const e = event as InputEvent;\n    if (this.args.onInput && this.args.onInput(e) === false) {\n      return;\n    }\n    this.args.select.actions.open(e);\n  }\n\n  @action\n  handleKeydown(event: Event): false | void {\n    const e = event as KeyboardEvent;\n    if (e.target === null) return;\n    if (this.args.onKeydown && this.args.onKeydown(e) === false) {\n      e.stopPropagation();\n      return false;\n    }\n    if (e.keyCode === 8) {\n      e.stopPropagation();\n      if (isBlank((e.target as HTMLInputElement).value)) {\n        const lastSelection =\n          this.args.select.selected &&\n          this.args.select.selected[this.args.select.selected.length - 1];\n        if (lastSelection) {\n          this.args.select.actions.select(\n            this.args.buildSelection(lastSelection, this.args.select),\n            e,\n          );\n          if (typeof lastSelection === 'string') {\n            this.args.select.actions.search(lastSelection);\n          } else {\n            assert(\n              '`<PowerSelectMultiple>` requires a `@searchField` when the options are not strings to remove options using backspace',\n              this.args.searchField,\n            );\n            this.args.select.actions.search(\n              get(lastSelection, this.args.searchField) || '',\n            );\n          }\n          this.args.select.actions.open(e);\n        }\n      }\n    } else if ((e.keyCode >= 48 && e.keyCode <= 90) || e.keyCode === 32) {\n      // Keys 0-9, a-z or SPACE\n      e.stopPropagation();\n    }\n  }\n}\n","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { get } from '@ember/object';\nimport type { Select, TSearchFieldPosition } from '../power-select';\nimport type { ComponentLike } from '@glint/template';\nimport { modifier } from 'ember-modifier';\nimport { deprecate } from '@ember/debug';\nimport type Owner from '@ember/owner';\n\ninterface PowerSelectMultipleTriggerSignature {\n  Element: HTMLElement;\n  Args: {\n    select: Select;\n    searchEnabled: boolean;\n    placeholder?: string;\n    searchField: string;\n    searchFieldPosition?: TSearchFieldPosition;\n    listboxId?: string;\n    tabindex?: string;\n    ariaLabel?: string;\n    ariaLabelledBy?: string;\n    ariaDescribedBy?: string;\n    role?: string;\n    ariaActiveDescendant: string;\n    extra?: any;\n    placeholderComponent?: string | ComponentLike<any>;\n    selectedItemComponent?: string | ComponentLike<any>;\n    onInput?: (e: InputEvent) => boolean;\n    onKeydown?: (e: KeyboardEvent) => boolean;\n    onFocus?: (e: FocusEvent) => void;\n    onBlur?: (e: FocusEvent) => void;\n    buildSelection: (lastSelection: any, select: Select) => any[];\n  };\n  Blocks: {\n    default: [opt: any, select: Select];\n  };\n}\n\ninterface IndexAccesible<T> {\n  objectAt(index: number): T;\n}\nconst isIndexAccesible = <T>(target: any): target is IndexAccesible<T> => {\n  return typeof target.objectAt === 'function';\n};\n\nexport default class TriggerComponent extends Component<PowerSelectMultipleTriggerSignature> {\n  private _lastIsOpen: boolean = this.args.select.isOpen;\n\n  constructor(owner: Owner, args: PowerSelectMultipleTriggerSignature['Args']) {\n    super(owner, args);\n    deprecate(\n      'You are using the `<PowerSelectMultiple::Trigger>` component. Replace all usages with the `<PowerSelect::Trigger>` component.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.deprecate-power-select-multiple-trigger',\n        since: {\n          enabled: '8.11',\n          available: '8.11',\n        },\n        until: '9.0.0',\n      },\n    );\n  }\n\n  // Actions\n  @action\n  openChanged(element: Element, [isOpen]: [boolean]) {\n    deprecate(\n      'You are using a power-select-multiple trigger with ember/render-modifier. Replace {{did-update this.openChanged @select.isOpen}} with {{this.openChange @select.isOpen}}.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.no-at-ember-render-modifiers',\n        since: {\n          enabled: '8.1',\n          available: '8.1',\n        },\n        until: '9.0.0',\n      },\n    );\n\n    this._openChanged(element, [isOpen]);\n  }\n\n  @action\n  chooseOption(e: Event) {\n    if (e.target === null) return;\n    const selectedIndex = (e.target as Element).getAttribute(\n      'data-selected-index',\n    );\n    if (selectedIndex) {\n      const numericIndex = parseInt(selectedIndex, 10);\n      e.stopPropagation();\n      e.preventDefault();\n      const object = this.selectedObject(\n        this.args.select.selected,\n        numericIndex,\n      );\n      this.args.select.actions.choose(object);\n    }\n  }\n\n  openChange = modifier((element: Element, [isOpen]: [boolean]) => {\n    this._openChanged(element, [isOpen]);\n  });\n\n  private _openChanged(_el: Element, [isOpen]: [boolean]) {\n    if (isOpen === false && this._lastIsOpen === true) {\n      Promise.resolve().then(() => {\n        this.args.select.actions?.search('');\n      });\n    }\n    this._lastIsOpen = isOpen;\n  }\n\n  selectedObject<T>(list: IndexAccesible<T> | T[], index: number): T {\n    if (isIndexAccesible(list)) {\n      return list.objectAt(index);\n    } else {\n      return get(list, index) as T;\n    }\n  }\n}\n","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { modifier } from 'ember-modifier';\nimport type { Select, TSearchFieldPosition } from '../power-select';\nimport { deprecate } from '@ember/debug';\nimport { task, timeout } from 'ember-concurrency';\n\ninterface PowerSelectBeforeOptionsSignature {\n  Element: HTMLElement;\n  Args: {\n    select: Select;\n    searchEnabled: boolean;\n    ariaLabel?: string;\n    ariaLabelledBy?: string;\n    ariaDescribedBy?: string;\n    role?: string;\n    searchPlaceholder?: string;\n    searchFieldPosition?: TSearchFieldPosition;\n    ariaActiveDescendant?: string;\n    listboxId?: string;\n    onKeydown: (e: KeyboardEvent) => false | void;\n    onBlur: (e: FocusEvent) => void;\n    onFocus: (e: FocusEvent) => void;\n    onInput: (e: InputEvent) => boolean;\n    autofocus?: boolean;\n  };\n}\n\nexport default class PowerSelectBeforeOptionsComponent extends Component<PowerSelectBeforeOptionsSignature> {\n  didSetup: boolean = false;\n\n  @action\n  clearSearch(): void {\n    deprecate(\n      'You are using power-select before-option component with ember/render-modifier. Replace {{will-destroy this.clearSearch}} with {{this.setupInput}}.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.no-at-ember-render-modifiers',\n        since: {\n          enabled: '8.1',\n          available: '8.1',\n        },\n        until: '9.0.0',\n      },\n    );\n\n    this.args.select.actions?.search('');\n  }\n\n  @action\n  handleKeydown(e: KeyboardEvent): false | void {\n    if (this.args.onKeydown(e) === false) {\n      return false;\n    }\n    if (e.keyCode === 13) {\n      this.args.select.actions.close(e);\n    }\n  }\n\n  @action\n  handleInput(event: Event): false | void {\n    const e = event as InputEvent;\n    if (this.args.onInput(e) === false) {\n      return false;\n    }\n  }\n\n  @action\n  focusInput(el: HTMLElement) {\n    deprecate(\n      'You are using power-select before-option component with ember/render-modifier. Replace {{did-insert this.focusInput}} with {{this.setupInput}}.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.no-at-ember-render-modifiers',\n        since: {\n          enabled: '8.1',\n          available: '8.1',\n        },\n        until: '9.0.0',\n      },\n    );\n\n    this._focusInput(el);\n  }\n\n  setupInput = modifier(\n    (el: HTMLElement) => {\n      if (this.didSetup) {\n        return;\n      }\n\n      this.didSetup = true;\n\n      this._focusInput(el);\n\n      return () => {\n        this.args.select.actions?.search('');\n      };\n    },\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    { eager: false },\n  );\n\n  private _focusInput(el: HTMLElement) {\n    this.focusLaterTask.perform(el);\n  }\n\n  private focusLaterTask = task(async (el: HTMLElement) => {\n    await timeout(0);\n    if (this.args.autofocus !== false) {\n      el.focus();\n    }\n  });\n}\n","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { modifier } from 'ember-modifier';\nimport { assert, deprecate } from '@ember/debug';\nimport { isBlank } from '@ember/utils';\nimport { get } from '@ember/object';\nimport type { Select, TSearchFieldPosition } from '../power-select';\nimport { task, timeout } from 'ember-concurrency';\nimport type { ComponentLike } from '@glint/template';\n\nexport interface PowerSelectInputSignature {\n  Element: HTMLElement;\n  Args: {\n    select: Select;\n    ariaLabel?: string;\n    ariaLabelledBy?: string;\n    ariaDescribedBy?: string;\n    role?: string;\n    searchField?: string;\n    searchPlaceholder?: string;\n    placeholder?: string;\n    searchFieldPosition?: TSearchFieldPosition;\n    ariaActiveDescendant?: string;\n    isDefaultPlaceholder?: boolean;\n    listboxId?: string;\n    autofocus?: boolean;\n    tabindex?: number | string;\n    placeholderComponent?: string | ComponentLike<any>;\n    onKeydown?: (e: KeyboardEvent) => boolean | void;\n    onBlur?: (e: FocusEvent) => void;\n    onFocus?: (e: FocusEvent) => void;\n    onInput?: (e: InputEvent) => void | boolean;\n    buildSelection: (lastSelection: any, select: Select) => any[];\n  };\n}\n\nexport default class PowerSelectInput extends Component<PowerSelectInputSignature> {\n  didSetup: boolean = false;\n\n  private _lastIsOpen: boolean = this.args.select.isOpen;\n\n  get placeholder() {\n    if (this.args.placeholder !== undefined) {\n      deprecate(\n        'You are using `power-select/input-field` with parameter @placeholder. Replace @placeholder with @searchPlaceholder',\n        false,\n        {\n          for: 'ember-power-select',\n          id: 'ember-power-select.deprecate-input-field-placeholder-argument',\n          since: {\n            enabled: '8.11',\n            available: '8.11',\n          },\n          until: '9.0.0',\n        },\n      );\n    }\n\n    if (!this.args.isDefaultPlaceholder) {\n      return undefined;\n    }\n\n    if (this.args.select.multiple) {\n      return !this.args.select.selected ||\n        (Array.isArray(this.args.select.selected) &&\n          this.args.select.selected.length === 0)\n        ? this.args.placeholder || this.args.searchPlaceholder || ''\n        : '';\n    }\n\n    return this.args.placeholder || this.args.searchPlaceholder;\n  }\n\n  @action\n  handleKeydown(e: KeyboardEvent): false | void {\n    if (e.target === null) return;\n    if (this.args.onKeydown && this.args.onKeydown(e) === false) {\n      e.stopPropagation();\n      return false;\n    }\n    if (this.args.select.multiple) {\n      if (e.keyCode === 8) {\n        e.stopPropagation();\n        if (\n          isBlank((e.target as HTMLInputElement).value) &&\n          this.args.buildSelection\n        ) {\n          const lastSelection =\n            Array.isArray(this.args.select.selected) &&\n            this.args.select.selected[this.args.select.selected.length - 1];\n          if (lastSelection) {\n            this.args.select.actions.select(\n              this.args.buildSelection(lastSelection, this.args.select),\n              e,\n            );\n            if (typeof lastSelection === 'string') {\n              this.args.select.actions.search(lastSelection);\n            } else {\n              assert(\n                '`<PowerSelect>` requires a `@searchField` when the options are not strings to remove options using backspace',\n                this.args.searchField,\n              );\n              this.args.select.actions.search(\n                (get(lastSelection, this.args.searchField) || '') as string,\n              );\n            }\n            this.args.select.actions.open(e);\n          }\n        }\n      } else if ((e.keyCode >= 48 && e.keyCode <= 90) || e.keyCode === 32) {\n        // Keys 0-9, a-z or SPACE\n        e.stopPropagation();\n      }\n    } else if (e.keyCode === 13) {\n      this.args.select.actions.close(e);\n    }\n  }\n\n  @action\n  handleInput(event: Event): false | void {\n    const e = event as InputEvent;\n    if (this.args.onInput && this.args.onInput(e) === false) {\n      return false;\n    }\n\n    this.args.select.actions.open(e);\n  }\n\n  @action\n  handleBlur(event: Event) {\n    if (!this._lastIsOpen && this.args.searchFieldPosition === 'trigger') {\n      this.args.select.actions?.search('');\n    }\n\n    if (this.args.onBlur) {\n      this.args.onBlur(event as FocusEvent);\n    }\n  }\n\n  @action\n  handleFocus(event: Event) {\n    if (this.args.onFocus) {\n      this.args.onFocus(event as FocusEvent);\n    }\n  }\n\n  setupInput = modifier(\n    (el: HTMLElement) => {\n      if (this.didSetup) {\n        return;\n      }\n\n      this.didSetup = true;\n\n      if (\n        this.args.searchFieldPosition === undefined ||\n        this.args.searchFieldPosition === 'before-options'\n      ) {\n        this._focusInput(el);\n      }\n\n      return () => {\n        // We don't need to reset search value, when searchFieldPosition is trigger, because complete power select will be destroyed\n        if (this.args.searchFieldPosition === 'trigger') {\n          return;\n        }\n\n        this.args.select.actions?.search('');\n      };\n    },\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    { eager: false },\n  );\n\n  openChange = modifier((element: HTMLElement, [isOpen]: [boolean]) => {\n    this._openChanged(element, [isOpen]);\n  });\n\n  private _openChanged(element: HTMLElement, [isOpen]: [boolean]) {\n    if (\n      isOpen === false &&\n      this._lastIsOpen === true &&\n      document.activeElement !== element\n    ) {\n      Promise.resolve().then(() => {\n        this.args.select.actions?.search('');\n      });\n    }\n    this._lastIsOpen = isOpen;\n  }\n\n  private _focusInput(el: HTMLElement) {\n    this.focusLaterTask.perform(el);\n  }\n\n  private focusLaterTask = task(async (el: HTMLElement) => {\n    await timeout(0);\n    if (this.args.autofocus !== false) {\n      el.focus();\n    }\n  });\n}\n","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport type { Select } from '../power-select';\n\nexport interface PowerSelectLabelSignature {\n  Element: HTMLElement;\n  Args: {\n    select: Select;\n    labelText?: string;\n    labelId: string;\n    triggerId: string;\n    labelTag?: keyof HTMLElementTagNameMap;\n    extra: any;\n  };\n}\n\nexport default class PowerSelectLabelComponent extends Component<PowerSelectLabelSignature> {\n  @action\n  onLabelClick(e: MouseEvent): void {\n    if (!this.args.select) {\n      return;\n    }\n\n    this.args.select.actions.labelClick(e);\n  }\n}\n","import templateOnly from '@ember/component/template-only';\n\ninterface PowerSelectNoMatchesMessageSignature {\n  Element: HTMLElement;\n  Args: {\n    noMatchesMessage: any;\n  };\n}\n\nexport default templateOnly<PowerSelectNoMatchesMessageSignature>();\n","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { modifier } from 'ember-modifier';\nimport type { Select } from '../power-select';\nimport type { ComponentLike } from '@glint/template';\nimport { deprecate } from '@ember/debug';\ndeclare const FastBoot: any;\n\ninterface PowerSelectOptionsSignature {\n  Element: HTMLElement;\n  Args: PowerSelectOptionsArgs;\n  Blocks: {\n    default: [opt: PowerSelectOptionsArgs, select: Select];\n  };\n}\n\ninterface PowerSelectOptionsArgs {\n  select: Select;\n  highlightOnHover?: boolean;\n  listboxId: string;\n  groupIndex: string;\n  loadingMessage: string;\n  options: any[];\n  extra: any;\n  groupComponent?: string | ComponentLike<any>;\n  optionsComponent?: string | ComponentLike<any>;\n}\n\nconst isTouchDevice = !!window && 'ontouchstart' in window;\nif (typeof FastBoot === 'undefined') {\n  (function (ElementProto) {\n    if (typeof ElementProto.matches !== 'function') {\n      ElementProto.matches =\n        (ElementProto as any).msMatchesSelector ||\n        (ElementProto as any).mozMatchesSelector ||\n        ElementProto.webkitMatchesSelector;\n    }\n\n    if (typeof ElementProto.closest !== 'function') {\n      ElementProto.closest = function closest(selector: string) {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        let element: Element | null = this;\n        while (element !== null && element.nodeType === 1) {\n          if (element.matches(selector)) {\n            return element;\n          }\n          element = element.parentNode as Element;\n        }\n        return null;\n      };\n    }\n  })(window.Element.prototype);\n}\n\nexport default class PowerSelectOptionsComponent extends Component<PowerSelectOptionsSignature> {\n  private isTouchDevice = this.args.extra?._isTouchDevice || isTouchDevice;\n  private touchMoveEvent?: TouchEvent;\n  private mouseOverHandler: EventListener = ((\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _: MouseEvent,\n  ): void => {}) as EventListener;\n  private mouseUpHandler: EventListener = ((\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _: MouseEvent,\n  ): void => {}) as EventListener;\n  private touchEndHandler: EventListener = ((\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _: TouchEvent,\n  ): void => {}) as EventListener;\n  private touchMoveHandler: EventListener = ((\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _: TouchEvent,\n  ): void => {}) as EventListener;\n  private touchStartHandler: EventListener = ((\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _: TouchEvent,\n  ): void => {}) as EventListener;\n\n  private _listElement: Element | null = null;\n  private _didHandlerSetup: boolean = false;\n\n  willDestroy(): void {\n    super.willDestroy();\n    if (this._listElement) {\n      this._removeHandlers(this._listElement);\n    }\n  }\n\n  @action\n  addHandlers(element: Element) {\n    deprecate(\n      'You are using power-select options component with ember/render-modifier. Replace {{did-insert this.addHandlers}} with {{this.setupHandlers}}.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.no-at-ember-render-modifiers',\n        since: {\n          enabled: '8.1',\n          available: '8.1',\n        },\n        until: '9.0.0',\n      },\n    );\n\n    this._addHandlers(element);\n  }\n\n  @action\n  removeHandlers(element: Element) {\n    deprecate(\n      'You are using power-select options component with ember/render-modifier. Replace {{will-destroy this.removeHandlers}} with {{this.setupHandlers}}.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.no-at-ember-render-modifiers',\n        since: {\n          enabled: '8.1',\n          available: '8.1',\n        },\n        until: '9.0.0',\n      },\n    );\n\n    this._removeHandlers(element);\n  }\n\n  setupHandlers = modifier((element: Element) => {\n    if (this._didHandlerSetup) {\n      return;\n    }\n    this._didHandlerSetup = true;\n    this._listElement = element;\n    this._addHandlers(element);\n  });\n\n  _optionFromIndex(index: string) {\n    const parts = index.split('.');\n    let option = this.args.options[parseInt(parts[0] ?? '', 10)];\n    for (let i = 1; i < parts.length; i++) {\n      option = option.options[parseInt(parts[i] ?? '', 10)];\n    }\n    return option;\n  }\n\n  _hasMoved(endEvent: TouchEvent): boolean {\n    const moveEvent = this.touchMoveEvent;\n    if (!moveEvent) {\n      return false;\n    }\n\n    if (!moveEvent.changedTouches) {\n      return false;\n    }\n\n    if (\n      !endEvent.changedTouches?.[0] ||\n      (moveEvent.changedTouches[0] as any).touchType !== 'stylus'\n    ) {\n      return true;\n    }\n\n    const changedTouch = moveEvent.changedTouches[0];\n\n    // Distinguish stylus scroll and tap: if touch \"distance\" < 5px, we consider it a tap\n    const horizontalDistance = Math.abs(\n      (changedTouch?.pageX ?? 0) - endEvent.changedTouches[0].pageX,\n    );\n    const verticalDistance = Math.abs(\n      (changedTouch?.pageY ?? 0) - endEvent.changedTouches[0].pageY,\n    );\n    return horizontalDistance >= 5 || verticalDistance >= 5;\n  }\n\n  private _addHandlers(element: Element) {\n    const isGroup = element.getAttribute('data-optgroup') === 'true';\n    if (isGroup) {\n      return;\n    }\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n    const findOptionAndPerform = (action: Function, e: MouseEvent): void => {\n      if (e.target === null) return;\n      const optionItem = (e.target as Element).closest('[data-option-index]');\n      if (!optionItem) {\n        return;\n      }\n      if (optionItem.closest('[aria-disabled=true]')) {\n        return; // Abort if the item or an ancestor is disabled\n      }\n      const optionIndex = optionItem.getAttribute('data-option-index');\n      if (optionIndex === null) return;\n      action(this._optionFromIndex(optionIndex), e);\n    };\n    this.mouseUpHandler = ((e: MouseEvent): void =>\n      findOptionAndPerform(\n        this.args.select.actions.choose,\n        e,\n      )) as EventListener;\n    element.addEventListener('mouseup', this.mouseUpHandler);\n    if (this.args.highlightOnHover) {\n      this.mouseOverHandler = ((e: MouseEvent): void =>\n        findOptionAndPerform(\n          this.args.select.actions.highlight,\n          e,\n        )) as EventListener;\n      element.addEventListener('mouseover', this.mouseOverHandler);\n    }\n    if (this.isTouchDevice) {\n      this.touchMoveHandler = ((e: TouchEvent): void => {\n        this.touchMoveEvent = e;\n        if (element) {\n          element.removeEventListener('touchmove', this.touchMoveHandler);\n        }\n      }) as EventListener;\n      // Add touch event handlers to detect taps\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      this.touchStartHandler = ((_: TouchEvent): void => {\n        element.addEventListener('touchmove', this.touchMoveHandler);\n      }) as EventListener;\n      this.touchEndHandler = ((e: TouchEvent): void => {\n        if (e.target === null) return;\n        const optionItem = (e.target as Element).closest('[data-option-index]');\n        if (optionItem === null) return;\n        e.preventDefault();\n        if (this._hasMoved(e)) {\n          this.touchMoveEvent = undefined;\n          return;\n        }\n\n        if (optionItem.closest('[aria-disabled=true]')) {\n          return; // Abort if the item or an ancestor is disabled\n        }\n\n        const optionIndex = optionItem.getAttribute('data-option-index');\n        if (optionIndex === null) return;\n        this.args.select.actions.choose(this._optionFromIndex(optionIndex), e);\n      }) as EventListener;\n      element.addEventListener('touchstart', this.touchStartHandler);\n      element.addEventListener('touchend', this.touchEndHandler);\n    }\n\n    this.args.select.actions.scrollTo(this.args.select.highlighted);\n  }\n\n  private _removeHandlers(element: Element) {\n    element.removeEventListener('mouseup', this.mouseUpHandler);\n    element.removeEventListener('mouseover', this.mouseOverHandler);\n    element.removeEventListener('touchstart', this.touchStartHandler);\n    element.removeEventListener('touchmove', this.touchMoveHandler);\n    element.removeEventListener('touchend', this.touchEndHandler);\n  }\n}\n","import templateOnly from '@ember/component/template-only';\n\ninterface PowerSelectPlaceholderSignature {\n  Element: HTMLElement;\n  Args: {\n    isMultipleWithSearch: boolean;\n    placeholder: any;\n    inputComponent?: any;\n  };\n}\n\nexport default templateOnly<PowerSelectPlaceholderSignature>();\n","import Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\n\ninterface PowerSelectPowerSelectGroupSignature {\n  Element: HTMLElement;\n  Args: {\n    group: any;\n  };\n  Blocks: {\n    default: [];\n  };\n}\n\nexport default class PowerSelectGroupComponent extends Component<PowerSelectPowerSelectGroupSignature> {\n  uniqueId = guidFor(this);\n}\n","import templateOnly from '@ember/component/template-only';\n\ninterface PowerSelectSearchMessageSignature {\n  Element: HTMLElement;\n  Args: {\n    searchMessage: string;\n  };\n}\n\nexport default templateOnly<PowerSelectSearchMessageSignature>();\n","import Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { get } from '@ember/object';\nimport { modifier } from 'ember-modifier';\nimport { deprecate } from '@ember/debug';\nimport type { Select, TSearchFieldPosition } from '../power-select';\nimport type { ComponentLike } from '@glint/template';\n\ninterface IndexAccesible<T> {\n  objectAt(index: number): T;\n}\n\nconst isIndexAccesible = <T>(target: any): target is IndexAccesible<T> => {\n  return typeof target.objectAt === 'function';\n};\n\ninterface PowerSelectTriggerSignature {\n  Element: HTMLElement;\n  Args: {\n    select: Select;\n    allowClear: boolean;\n    searchEnabled: boolean;\n    placeholder?: string;\n    searchPlaceholder?: string;\n    searchField: string;\n    searchFieldPosition?: TSearchFieldPosition;\n    listboxId?: string;\n    tabindex?: string;\n    ariaLabel?: string;\n    ariaLabelledBy?: string;\n    ariaDescribedBy?: string;\n    role?: string;\n    ariaActiveDescendant: string;\n    extra?: any;\n    placeholderComponent?: string | ComponentLike<any>;\n    selectedItemComponent?: string | ComponentLike<any>;\n    onInput?: (e: InputEvent) => boolean;\n    onKeydown?: (e: KeyboardEvent) => boolean;\n    onFocus?: (e: FocusEvent) => void;\n    onBlur?: (e: FocusEvent) => void;\n    buildSelection: (lastSelection: any, select: Select) => any[];\n  };\n  Blocks: {\n    default: [selected: any, select: Select];\n  };\n}\n\nexport default class PowerSelectTriggerComponent extends Component<PowerSelectTriggerSignature> {\n  private _lastIsOpen: boolean = this.args.select.isOpen;\n\n  @action\n  clear(e: Event): false | void {\n    e.stopPropagation();\n    this.args.select.actions.select(null);\n    if (e.type === 'touchstart') {\n      return false;\n    }\n  }\n\n  // Actions\n  @action\n  openChanged(element: Element, [isOpen]: [boolean]) {\n    deprecate(\n      'You are using a power-select-multiple trigger with ember/render-modifier. Replace {{did-update this.openChanged @select.isOpen}} with {{this.openChange @select.isOpen}}.',\n      false,\n      {\n        for: 'ember-power-select',\n        id: 'ember-power-select.no-at-ember-render-modifiers',\n        since: {\n          enabled: '8.1',\n          available: '8.1',\n        },\n        until: '9.0.0',\n      },\n    );\n\n    this._openChanged(element, [isOpen]);\n  }\n\n  @action\n  chooseOption(e: Event) {\n    if (e.target === null) return;\n    const selectedIndex = (e.target as Element).getAttribute(\n      'data-selected-index',\n    );\n    if (selectedIndex) {\n      const numericIndex = parseInt(selectedIndex, 10);\n      e.stopPropagation();\n      e.preventDefault();\n      const object = this.selectedObject(\n        this.args.select.selected,\n        numericIndex,\n      );\n      this.args.select.actions.choose(object);\n    }\n  }\n\n  openChange = modifier((element: Element, [isOpen]: [boolean]) => {\n    this._openChanged(element, [isOpen]);\n  });\n\n  private _openChanged(_el: Element, [isOpen]: [boolean]) {\n    if (isOpen === false && this._lastIsOpen === true) {\n      Promise.resolve().then(() => {\n        this.args.select.actions?.search('');\n      });\n    }\n    this._lastIsOpen = isOpen;\n  }\n\n  selectedObject<T>(list: IndexAccesible<T> | T[], index: number): T {\n    if (isIndexAccesible(list)) {\n      return list.objectAt(index);\n    } else {\n      return get(list, index) as T;\n    }\n  }\n}\n","import { helper } from '@ember/component/helper';\nimport { isArray as isEmberArray } from '@ember/array';\nimport { isEqual } from '@ember/utils';\n\nexport function emberPowerSelectIsEqual(\n  [option, selected]: [any, any] /* , hash*/,\n): boolean {\n  if (selected === undefined || selected === null) {\n    return false;\n  }\n  if (isEmberArray(selected)) {\n    for (let i = 0; i < selected.length; i++) {\n      // @ts-expect-error Element implicitly has an 'any' type because expression of type 'number' can't be used to index type 'ArrayLike<unknown> | EmberArray<unknown>'.\n      if (isEqual(selected[i], option)) {\n        return true;\n      }\n    }\n    return false;\n  } else {\n    return isEqual(option, selected);\n  }\n}\n\nexport default helper(emberPowerSelectIsEqual);\n","import { helper } from '@ember/component/helper';\nimport { isGroup } from '../utils/group-utils.ts';\n\nexport function emberPowerSelectIsGroup([maybeGroup]: [any]): boolean {\n  return isGroup(maybeGroup);\n}\n\nexport default helper(emberPowerSelectIsGroup);\n","import { helper } from '@ember/component/helper';\nimport { isNone } from '@ember/utils';\n\nexport function emberPowerSelectIsSelectedPresent([value]: [any]): boolean {\n  return !isNone(value);\n}\n\nexport default helper(emberPowerSelectIsSelectedPresent);\n","export default class Cache {\n  constructor(limit, func, store) {\n    this.limit = limit;\n    this.func = func;\n    this.store = store;\n    this.size = 0;\n    this.misses = 0;\n    this.hits = 0;\n    this.store = store || new Map();\n  }\n  get(key) {\n    let value = this.store.get(key);\n    if (this.store.has(key)) {\n      this.hits++;\n      return this.store.get(key);\n    } else {\n      this.misses++;\n      value = this.set(key, this.func(key));\n    }\n    return value;\n  }\n  set(key, value) {\n    if (this.limit > this.size) {\n      this.size++;\n      this.store.set(key, value);\n    }\n    return value;\n  }\n  purge() {\n    this.store.clear();\n    this.size = 0;\n    this.hits = 0;\n    this.misses = 0;\n  }\n}\n","/* eslint-disable no-useless-escape */\nimport Cache from './cache';\nlet STRINGS = {};\nexport function setStrings(strings) {\n  STRINGS = strings;\n}\nexport function getStrings() {\n  return STRINGS;\n}\nexport function getString(name) {\n  return STRINGS[name];\n}\nconst STRING_DASHERIZE_REGEXP = /[ _]/g;\nconst STRING_DASHERIZE_CACHE = new Cache(1000, (key) =>\n  decamelize(key).replace(STRING_DASHERIZE_REGEXP, '-')\n);\nconst STRING_CLASSIFY_REGEXP_1 = /^(\\-|_)+(.)?/;\nconst STRING_CLASSIFY_REGEXP_2 = /(.)(\\-|\\_|\\.|\\s)+(.)?/g;\nconst STRING_CLASSIFY_REGEXP_3 = /(^|\\/|\\.)([a-z])/g;\nconst CLASSIFY_CACHE = new Cache(1000, (str) => {\n  const replace1 = (_match, _separator, chr) =>\n    chr ? `_${chr.toUpperCase()}` : '';\n  const replace2 = (_match, initialChar, _separator, chr) =>\n    initialChar + (chr ? chr.toUpperCase() : '');\n  const parts = str.split('/');\n  for (let i = 0; i < parts.length; i++) {\n    parts[i] = parts[i]\n      .replace(STRING_CLASSIFY_REGEXP_1, replace1)\n      .replace(STRING_CLASSIFY_REGEXP_2, replace2);\n  }\n  return parts\n    .join('/')\n    .replace(STRING_CLASSIFY_REGEXP_3, (match /*, separator, chr */) =>\n      match.toUpperCase()\n    );\n});\nconst STRING_UNDERSCORE_REGEXP_1 = /([a-z\\d])([A-Z]+)/g;\nconst STRING_UNDERSCORE_REGEXP_2 = /\\-|\\s+/g;\nconst UNDERSCORE_CACHE = new Cache(1000, (str) =>\n  str\n    .replace(STRING_UNDERSCORE_REGEXP_1, '$1_$2')\n    .replace(STRING_UNDERSCORE_REGEXP_2, '_')\n    .toLowerCase()\n);\nconst STRING_DECAMELIZE_REGEXP = /([a-z\\d])([A-Z])/g;\nconst DECAMELIZE_CACHE = new Cache(1000, (str) =>\n  str.replace(STRING_DECAMELIZE_REGEXP, '$1_$2').toLowerCase()\n);\n/**\n  Converts a camelized string into all lower case separated by underscores.\n\n  ```javascript\n  import { decamelize } from '@ember/string';\n\n  decamelize('innerHTML');          // 'inner_html'\n  decamelize('action_name');        // 'action_name'\n  decamelize('css-class-name');     // 'css-class-name'\n  decamelize('my favorite items');  // 'my favorite items'\n  ```\n\n  @method decamelize\n  @param {String} str The string to decamelize.\n  @return {String} the decamelized string.\n  @public\n*/\nexport function decamelize(str) {\n  return DECAMELIZE_CACHE.get(str);\n}\n/**\n  Replaces underscores, spaces, or camelCase with dashes.\n\n  ```javascript\n  import { dasherize } from '@ember/string';\n\n  dasherize('innerHTML');                // 'inner-html'\n  dasherize('action_name');              // 'action-name'\n  dasherize('css-class-name');           // 'css-class-name'\n  dasherize('my favorite items');        // 'my-favorite-items'\n  dasherize('privateDocs/ownerInvoice';  // 'private-docs/owner-invoice'\n  ```\n\n  @method dasherize\n  @param {String} str The string to dasherize.\n  @return {String} the dasherized string.\n  @public\n*/\nexport function dasherize(str) {\n  return STRING_DASHERIZE_CACHE.get(str);\n}\n/**\n  Returns the UpperCamelCase form of a string.\n\n  ```javascript\n  import { classify } from '@ember/string';\n\n  classify('innerHTML');                   // 'InnerHTML'\n  classify('action_name');                 // 'ActionName'\n  classify('css-class-name');              // 'CssClassName'\n  classify('my favorite items');           // 'MyFavoriteItems'\n  classify('private-docs/owner-invoice');  // 'PrivateDocs/OwnerInvoice'\n  ```\n\n  @method classify\n  @param {String} str the string to classify\n  @return {String} the classified string\n  @public\n*/\nexport function classify(str) {\n  return CLASSIFY_CACHE.get(str);\n}\n/**\n  More general than decamelize. Returns the lower\\_case\\_and\\_underscored\n  form of a string.\n\n  ```javascript\n  import { underscore } from '@ember/string';\n\n  underscore('innerHTML');                 // 'inner_html'\n  underscore('action_name');               // 'action_name'\n  underscore('css-class-name');            // 'css_class_name'\n  underscore('my favorite items');         // 'my_favorite_items'\n  underscore('privateDocs/ownerInvoice');  // 'private_docs/owner_invoice'\n  ```\n\n  @method underscore\n  @param {String} str The string to underscore.\n  @return {String} the underscored string.\n  @public\n*/\nexport function underscore(str) {\n  return UNDERSCORE_CACHE.get(str);\n}\n","import { dasherize, classify, underscore } from './string';\nimport classFactory from './utils/class-factory';\n\nexport class ModuleRegistry {\n  constructor(entries) {\n    this._entries = entries || globalThis.requirejs.entries;\n  }\n  moduleNames() {\n    return Object.keys(this._entries);\n  }\n  has(moduleName) {\n    return moduleName in this._entries;\n  }\n  get(...args) {\n    return globalThis.require(...args);\n  }\n}\n\n/**\n * This module defines a subclass of Ember.DefaultResolver that adds two\n * important features:\n *\n *  1) The resolver makes the container aware of es6 modules via the AMD\n *     output. The loader's _moduleEntries is consulted so that classes can be\n *     resolved directly via the module loader, without needing a manual\n *     `import`.\n *  2) is able to provide injections to classes that implement `extend`\n *     (as is typical with Ember).\n */\nexport default class Resolver {\n  static moduleBasedResolver = true;\n  moduleBasedResolver = true;\n\n  _deprecatedPodModulePrefix = false;\n  _normalizeCache = Object.create(null);\n\n  static create(props) {\n    return new this(props);\n  }\n\n  /**\n   A listing of functions to test for moduleName's based on the provided\n   `parsedName`. This allows easy customization of additional module based\n   lookup patterns.\n\n   @property moduleNameLookupPatterns\n   @returns {Ember.Array}\n   */\n  moduleNameLookupPatterns = [\n    this.podBasedModuleName,\n    this.podBasedComponentsInSubdir,\n    this.mainModuleName,\n    this.defaultModuleName,\n    this.nestedColocationComponentModuleName,\n  ];\n\n  static withModules(explicitModules) {\n    return class extends this {\n      static explicitModules = explicitModules;\n    };\n  }\n\n  constructor(props) {\n    Object.assign(this, props);\n    if (!this._moduleRegistry) {\n      let explicitModules = this.constructor.explicitModules;\n      if (explicitModules) {\n        this._moduleRegistry = {\n          moduleNames() {\n            return Object.keys(explicitModules);\n          },\n          has(name) {\n            return Boolean(explicitModules[name]);\n          },\n          get(name) {\n            return explicitModules[name];\n          },\n          addModules(modules) {\n            explicitModules = Object.assign({}, explicitModules, modules);\n          },\n        };\n      } else {\n        if (typeof globalThis.requirejs.entries === 'undefined') {\n          globalThis.requirejs.entries = globalThis.requirejs._eak_seen;\n        }\n        this._moduleRegistry = new ModuleRegistry();\n      }\n    }\n\n    this.pluralizedTypes = this.pluralizedTypes || Object.create(null);\n\n    if (!this.pluralizedTypes.config) {\n      this.pluralizedTypes.config = 'config';\n    }\n  }\n\n  makeToString(factory, fullName) {\n    return '' + this.namespace.modulePrefix + '@' + fullName + ':';\n  }\n\n  shouldWrapInClassFactory(/* module, parsedName */) {\n    return false;\n  }\n\n  parseName(fullName) {\n    if (fullName.parsedName === true) {\n      return fullName;\n    }\n\n    let prefix, type, name;\n    let fullNameParts = fullName.split('@');\n\n    if (fullNameParts.length === 3) {\n      if (fullNameParts[0].length === 0) {\n        // leading scoped namespace: `@scope/pkg@type:name`\n        prefix = `@${fullNameParts[1]}`;\n        let prefixParts = fullNameParts[2].split(':');\n        type = prefixParts[0];\n        name = prefixParts[1];\n      } else {\n        // interweaved scoped namespace: `type:@scope/pkg@name`\n        prefix = `@${fullNameParts[1]}`;\n        type = fullNameParts[0].slice(0, -1);\n        name = fullNameParts[2];\n      }\n\n      if (type === 'template:components') {\n        name = `components/${name}`;\n        type = 'template';\n      }\n    } else if (fullNameParts.length === 2) {\n      let prefixParts = fullNameParts[0].split(':');\n\n      if (prefixParts.length === 2) {\n        if (prefixParts[1].length === 0) {\n          type = prefixParts[0];\n          name = `@${fullNameParts[1]}`;\n        } else {\n          prefix = prefixParts[1];\n          type = prefixParts[0];\n          name = fullNameParts[1];\n        }\n      } else {\n        let nameParts = fullNameParts[1].split(':');\n\n        prefix = fullNameParts[0];\n        type = nameParts[0];\n        name = nameParts[1];\n      }\n\n      if (type === 'template' && prefix.lastIndexOf('components/', 0) === 0) {\n        name = `components/${name}`;\n        prefix = prefix.slice(11);\n      }\n    } else {\n      fullNameParts = fullName.split(':');\n      type = fullNameParts[0];\n      name = fullNameParts[1];\n    }\n\n    let fullNameWithoutType = name;\n    let namespace = this.namespace;\n    let root = namespace;\n\n    return {\n      parsedName: true,\n      fullName: fullName,\n      prefix: prefix || this.prefix({ type: type }),\n      type: type,\n      fullNameWithoutType: fullNameWithoutType,\n      name: name,\n      root: root,\n      resolveMethodName: 'resolve' + classify(type),\n    };\n  }\n\n  resolveOther(parsedName) {\n    assert('`modulePrefix` must be defined', this.namespace.modulePrefix);\n\n    let normalizedModuleName = this.findModuleName(parsedName);\n\n    if (normalizedModuleName) {\n      let defaultExport = this._extractDefaultExport(\n        normalizedModuleName,\n        parsedName\n      );\n\n      if (defaultExport === undefined) {\n        throw new Error(\n          ` Expected to find: '${parsedName.fullName}' within '${normalizedModuleName}' but got 'undefined'. Did you forget to 'export default' within '${normalizedModuleName}'?`\n        );\n      }\n\n      if (this.shouldWrapInClassFactory(defaultExport, parsedName)) {\n        defaultExport = classFactory(defaultExport);\n      }\n\n      return defaultExport;\n    }\n  }\n\n  normalize(fullName) {\n    return (\n      this._normalizeCache[fullName] ||\n      (this._normalizeCache[fullName] = this._normalize(fullName))\n    );\n  }\n\n  resolve(fullName) {\n    if (fullName === 'resolver:current') {\n      return { create: () => this };\n    }\n    let parsedName = this.parseName(fullName);\n    let resolveMethodName = parsedName.resolveMethodName;\n    let resolved;\n\n    if (typeof this[resolveMethodName] === 'function') {\n      resolved = this[resolveMethodName](parsedName);\n    }\n\n    if (resolved == null) {\n      resolved = this.resolveOther(parsedName);\n    }\n\n    return resolved;\n  }\n\n  addModules(modules) {\n    if (!this._moduleRegistry.addModules) {\n      throw new Error(\n        `addModules is only supported when your Resolver has been configured to use static modules via Resolver.withModules()`\n      );\n    }\n    this._moduleRegistry.addModules(modules);\n  }\n\n  _normalize(fullName) {\n    // A) Convert underscores to dashes\n    // B) Convert camelCase to dash-case, except for components (their\n    //    templates) and helpers where we want to avoid shadowing camelCase\n    //    expressions\n    // C) replace `.` with `/` in order to make nested controllers work in the following cases\n    //      1. `needs: ['posts/post']`\n    //      2. `{{render \"posts/post\"}}`\n    //      3. `this.render('posts/post')` from Route\n\n    let split = fullName.split(':');\n    if (split.length > 1) {\n      let type = split[0];\n\n      if (\n        type === 'component' ||\n        type === 'helper' ||\n        type === 'modifier' ||\n        (type === 'template' && split[1].indexOf('components/') === 0)\n      ) {\n        return type + ':' + split[1].replace(/_/g, '-');\n      } else {\n        return type + ':' + dasherize(split[1].replace(/\\./g, '/'));\n      }\n    } else {\n      return fullName;\n    }\n  }\n\n  pluralize(type) {\n    return (\n      this.pluralizedTypes[type] || (this.pluralizedTypes[type] = type + 's')\n    );\n  }\n\n  podBasedLookupWithPrefix(podPrefix, parsedName) {\n    let fullNameWithoutType = parsedName.fullNameWithoutType;\n\n    if (parsedName.type === 'template') {\n      fullNameWithoutType = fullNameWithoutType.replace(/^components\\//, '');\n    }\n\n    return podPrefix + '/' + fullNameWithoutType + '/' + parsedName.type;\n  }\n\n  podBasedModuleName(parsedName) {\n    let podPrefix =\n      this.namespace.podModulePrefix || this.namespace.modulePrefix;\n\n    return this.podBasedLookupWithPrefix(podPrefix, parsedName);\n  }\n\n  podBasedComponentsInSubdir(parsedName) {\n    let podPrefix =\n      this.namespace.podModulePrefix || this.namespace.modulePrefix;\n    podPrefix = podPrefix + '/components';\n\n    if (\n      parsedName.type === 'component' ||\n      /^components/.test(parsedName.fullNameWithoutType)\n    ) {\n      return this.podBasedLookupWithPrefix(podPrefix, parsedName);\n    }\n  }\n\n  resolveEngine(parsedName) {\n    let engineName = parsedName.fullNameWithoutType;\n    let engineModule = engineName + '/engine';\n\n    if (this._moduleRegistry.has(engineModule)) {\n      return this._extractDefaultExport(engineModule);\n    }\n  }\n\n  resolveRouteMap(parsedName) {\n    let engineName = parsedName.fullNameWithoutType;\n    let engineRoutesModule = engineName + '/routes';\n\n    if (this._moduleRegistry.has(engineRoutesModule)) {\n      let routeMap = this._extractDefaultExport(engineRoutesModule);\n\n      assert(\n        `The route map for ${engineName} should be wrapped by 'buildRoutes' before exporting.`,\n        routeMap.isRouteMap\n      );\n\n      return routeMap;\n    }\n  }\n\n  resolveTemplate(parsedName) {\n    return this.resolveOther(parsedName);\n  }\n\n  mainModuleName(parsedName) {\n    if (parsedName.fullNameWithoutType === 'main') {\n      // if router:main or adapter:main look for a module with just the type first\n      return parsedName.prefix + '/' + parsedName.type;\n    }\n  }\n\n  defaultModuleName(parsedName) {\n    return (\n      parsedName.prefix +\n      '/' +\n      this.pluralize(parsedName.type) +\n      '/' +\n      parsedName.fullNameWithoutType\n    );\n  }\n\n  nestedColocationComponentModuleName(parsedName) {\n    if (parsedName.type === 'component') {\n      return (\n        parsedName.prefix +\n        '/' +\n        this.pluralize(parsedName.type) +\n        '/' +\n        parsedName.fullNameWithoutType +\n        '/index'\n      );\n    }\n  }\n\n  prefix(parsedName) {\n    let tmpPrefix = this.namespace.modulePrefix;\n\n    if (this.namespace[parsedName.type + 'Prefix']) {\n      tmpPrefix = this.namespace[parsedName.type + 'Prefix'];\n    }\n\n    return tmpPrefix;\n  }\n\n  findModuleName(parsedName) {\n    let moduleNameLookupPatterns = this.moduleNameLookupPatterns;\n    let moduleName;\n\n    for (\n      let index = 0, length = moduleNameLookupPatterns.length;\n      index < length;\n      index++\n    ) {\n      let item = moduleNameLookupPatterns[index];\n\n      let tmpModuleName = item.call(this, parsedName);\n\n      // allow treat all dashed and all underscored as the same thing\n      // supports components with dashes and other stuff with underscores.\n      if (tmpModuleName) {\n        tmpModuleName = this.chooseModuleName(tmpModuleName);\n      }\n\n      if (tmpModuleName && this._moduleRegistry.has(tmpModuleName)) {\n        moduleName = tmpModuleName;\n      }\n\n      if (moduleName) {\n        return moduleName;\n      }\n    }\n  }\n\n  chooseModuleName(moduleName) {\n    let underscoredModuleName = underscore(moduleName);\n\n    if (\n      moduleName !== underscoredModuleName &&\n      this._moduleRegistry.has(moduleName) &&\n      this._moduleRegistry.has(underscoredModuleName)\n    ) {\n      throw new TypeError(\n        `Ambiguous module names: '${moduleName}' and '${underscoredModuleName}'`\n      );\n    }\n\n    if (this._moduleRegistry.has(moduleName)) {\n      return moduleName;\n    } else if (this._moduleRegistry.has(underscoredModuleName)) {\n      return underscoredModuleName;\n    }\n  }\n\n  knownForType(type) {\n    let moduleKeys = this._moduleRegistry.moduleNames();\n\n    let items = Object.create(null);\n    for (let index = 0, length = moduleKeys.length; index < length; index++) {\n      let moduleName = moduleKeys[index];\n      let fullname = this.translateToContainerFullname(type, moduleName);\n\n      if (fullname) {\n        items[fullname] = true;\n      }\n    }\n\n    return items;\n  }\n\n  translateToContainerFullname(type, moduleName) {\n    let prefix = this.prefix({ type });\n\n    // Note: using string manipulation here rather than regexes for better performance.\n    // pod modules\n    // '^' + prefix + '/(.+)/' + type + '$'\n    let podPrefix = prefix + '/';\n    let podSuffix = '/' + type;\n    let start = moduleName.indexOf(podPrefix);\n    let end = moduleName.indexOf(podSuffix);\n\n    if (\n      start === 0 &&\n      end === moduleName.length - podSuffix.length &&\n      moduleName.length > podPrefix.length + podSuffix.length\n    ) {\n      return type + ':' + moduleName.slice(start + podPrefix.length, end);\n    }\n\n    // non-pod modules\n    // '^' + prefix + '/' + pluralizedType + '/(.+)$'\n    let pluralizedType = this.pluralize(type);\n    let nonPodPrefix = prefix + '/' + pluralizedType + '/';\n\n    if (\n      moduleName.indexOf(nonPodPrefix) === 0 &&\n      moduleName.length > nonPodPrefix.length\n    ) {\n      return type + ':' + moduleName.slice(nonPodPrefix.length);\n    }\n  }\n\n  _extractDefaultExport(normalizedModuleName) {\n    let module = this._moduleRegistry.get(\n      normalizedModuleName,\n      null,\n      null,\n      true /* force sync */\n    );\n\n    if (module && module['default']) {\n      module = module['default'];\n    }\n\n    return module;\n  }\n}\n\nfunction assert(message, check) {\n  if (!check) {\n    throw new Error(message);\n  }\n}\n","export default function classFactory(klass) {\n  return {\n    create(injections) {\n      if (typeof klass.extend === 'function') {\n        return klass.extend(injections);\n      } else {\n        return klass;\n      }\n    },\n  };\n}\n","import { set as emberSet } from '@ember/object';\nimport { assert } from '@ember/debug';\n\nexport default function set<T extends object, K extends keyof T & string>(\n  target: T,\n  path: K,\n  maybeValue?: T[K],\n) {\n  assert(\n    'you must pass a path to {{set}}. You can pass a path statically, as in `{{set this \"foo\"}}`, or with the path dynamically, as in `{{set this this.greetingPath \"Hello\"}}`',\n    (typeof path === 'string' && path.length > 0) ||\n      typeof path === 'symbol' ||\n      typeof path === 'number',\n  );\n  return arguments.length === 3\n    ? () => emberSet(target, path, maybeValue as T[K])\n    : (value?: unknown) => emberSet(target, path, value as T[K]);\n}\n","import Service from '@ember/service';\nimport { assert } from '@ember/debug';\nimport { next } from '@ember/runloop';\nimport { TrackedMap } from 'tracked-built-ins';\n\ninterface TargetTrackerOptions {\n  multiple?: boolean;\n  onChange?: (count: number) => void;\n}\n\nexport interface Target {\n  name: string;\n  element: Element;\n  multiple: boolean;\n}\n\nclass TargetTracker implements Target {\n  name: string;\n  element: Element;\n  multiple: boolean;\n  onChange?: (count: number) => void;\n\n  constructor(name: string, element: Element, options: TargetTrackerOptions) {\n    this.name = name;\n    this.element = element;\n    this.multiple = options.multiple ?? false;\n    this.onChange = options.onChange;\n  }\n}\n\nexport default class PortalService extends Service {\n  #targets = new TrackedMap<string, TargetTracker>();\n  #portalCount = new TrackedMap<string, number>();\n\n  getTarget(name: string): Target | undefined {\n    return this.#targets.get(name);\n  }\n\n  getPortalCount(name: string): number {\n    return this.#portalCount.get(name) ?? 0;\n  }\n\n  registerTarget(\n    name: string,\n    element: Element,\n    options: TargetTrackerOptions,\n  ): void {\n    next(this, () => {\n      assert(\n        `Portal target with name ${name} already exists`,\n        !this.#targets.has(name),\n      );\n      this.#targets.set(name, new TargetTracker(name, element, options));\n    });\n  }\n\n  unregisterTarget(name: string): void {\n    this.#targets.delete(name);\n    this.#portalCount.delete(name);\n  }\n\n  registerPortal(name: string): void {\n    next(this, () => {\n      const count = (this.#portalCount.get(name) ?? 0) + 1;\n      this.#portalCount.set(name, count);\n      const target = this.#targets.get(name);\n      if (target && target.onChange) {\n        target.onChange(count);\n      }\n    });\n  }\n\n  unregisterPortal(name: string): void {\n    let count = this.#portalCount.get(name);\n    if (count === undefined) {\n      return;\n    }\n\n    count--;\n    this.#portalCount.set(name, count);\n    const target = this.#targets.get(name);\n    if (target && target.onChange) {\n      target.onChange(count);\n    }\n  }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your services.\ndeclare module '@ember/service' {\n  interface Registry {\n    '-portal': PortalService;\n  }\n}\n","export function classNames(mapping, classes) {\n    if (!classes)\n        return '';\n    return classes\n        .trim()\n        .split(/\\s+/)\n        .map((className) => mapping[className])\n        .filter(Boolean)\n        .join(' ');\n}\nexport function join(...parts) {\n    return parts.join('');\n}\n","exports.remove = removeDiacritics;\n\nvar replacementList = [\n  {\n    base: ' ',\n    chars: \"\\u00A0\",\n  }, {\n    base: '0',\n    chars: \"\\u07C0\",\n  }, {\n    base: 'A',\n    chars: \"\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F\",\n  }, {\n    base: 'AA',\n    chars: \"\\uA732\",\n  }, {\n    base: 'AE',\n    chars: \"\\u00C6\\u01FC\\u01E2\",\n  }, {\n    base: 'AO',\n    chars: \"\\uA734\",\n  }, {\n    base: 'AU',\n    chars: \"\\uA736\",\n  }, {\n    base: 'AV',\n    chars: \"\\uA738\\uA73A\",\n  }, {\n    base: 'AY',\n    chars: \"\\uA73C\",\n  }, {\n    base: 'B',\n    chars: \"\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0181\",\n  }, {\n    base: 'C',\n    chars: \"\\u24b8\\uff23\\uA73E\\u1E08\\u0106\\u0043\\u0108\\u010A\\u010C\\u00C7\\u0187\\u023B\",\n  }, {\n    base: 'D',\n    chars: \"\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018A\\u0189\\u1D05\\uA779\",\n  }, {\n    base: 'Dh',\n    chars: \"\\u00D0\",\n  }, {\n    base: 'DZ',\n    chars: \"\\u01F1\\u01C4\",\n  }, {\n    base: 'Dz',\n    chars: \"\\u01F2\\u01C5\",\n  }, {\n    base: 'E',\n    chars: \"\\u025B\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E\\u1D07\",\n  }, {\n    base: 'F',\n    chars: \"\\uA77C\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B\",\n  }, {\n    base: 'G',\n    chars: \"\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E\\u0262\",\n  }, {\n    base: 'H',\n    chars: \"\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D\",\n  }, {\n    base: 'I',\n    chars: \"\\u24BE\\uFF29\\xCC\\xCD\\xCE\\u0128\\u012A\\u012C\\u0130\\xCF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197\",\n  }, {\n    base: 'J',\n    chars: \"\\u24BF\\uFF2A\\u0134\\u0248\\u0237\",\n  }, {\n    base: 'K',\n    chars: \"\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2\",\n  }, {\n    base: 'L',\n    chars: \"\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780\",\n  }, {\n    base: 'LJ',\n    chars: \"\\u01C7\",\n  }, {\n    base: 'Lj',\n    chars: \"\\u01C8\",\n  }, {\n    base: 'M',\n    chars: \"\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C\\u03FB\",\n  }, {\n    base: 'N',\n    chars: \"\\uA7A4\\u0220\\u24C3\\uFF2E\\u01F8\\u0143\\xD1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u019D\\uA790\\u1D0E\",\n  }, {\n    base: 'NJ',\n    chars: \"\\u01CA\",\n  }, {\n    base: 'Nj',\n    chars: \"\\u01CB\",\n  }, {\n    base: 'O',\n    chars: \"\\u24C4\\uFF2F\\xD2\\xD3\\xD4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\xD5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\xD6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\xD8\\u01FE\\u0186\\u019F\\uA74A\\uA74C\",\n  }, {\n    base: 'OE',\n    chars: \"\\u0152\",\n  }, {\n    base: 'OI',\n    chars: \"\\u01A2\",\n  }, {\n    base: 'OO',\n    chars: \"\\uA74E\",\n  }, {\n    base: 'OU',\n    chars: \"\\u0222\",\n  }, {\n    base: 'P',\n    chars: \"\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754\",\n  }, {\n    base: 'Q',\n    chars: \"\\u24C6\\uFF31\\uA756\\uA758\\u024A\",\n  }, {\n    base: 'R',\n    chars: \"\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782\",\n  }, {\n    base: 'S',\n    chars: \"\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784\",\n  }, {\n    base: 'T',\n    chars: \"\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786\",\n  }, {\n    base: 'Th',\n    chars: \"\\u00DE\",\n  }, {\n    base: 'TZ',\n    chars: \"\\uA728\",\n  }, {\n    base: 'U',\n    chars: \"\\u24CA\\uFF35\\xD9\\xDA\\xDB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\xDC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244\",\n  }, {\n    base: 'V',\n    chars: \"\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245\",\n  }, {\n    base: 'VY',\n    chars: \"\\uA760\",\n  }, {\n    base: 'W',\n    chars: \"\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72\",\n  }, {\n    base: 'X',\n    chars: \"\\u24CD\\uFF38\\u1E8A\\u1E8C\",\n  }, {\n    base: 'Y',\n    chars: \"\\u24CE\\uFF39\\u1EF2\\xDD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE\",\n  }, {\n    base: 'Z',\n    chars: \"\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762\",\n  }, {\n    base: 'a',\n    chars: \"\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250\\u0251\",\n  }, {\n    base: 'aa',\n    chars: \"\\uA733\",\n  }, {\n    base: 'ae',\n    chars: \"\\u00E6\\u01FD\\u01E3\",\n  }, {\n    base: 'ao',\n    chars: \"\\uA735\",\n  }, {\n    base: 'au',\n    chars: \"\\uA737\",\n  }, {\n    base: 'av',\n    chars: \"\\uA739\\uA73B\",\n  }, {\n    base: 'ay',\n    chars: \"\\uA73D\",\n  }, {\n    base: 'b',\n    chars: \"\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253\\u0182\",\n  }, {\n    base: 'c',\n    chars: \"\\uFF43\\u24D2\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184\",\n  }, {\n    base: 'd',\n    chars: \"\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\u018B\\u13E7\\u0501\\uA7AA\",\n  }, {\n    base: 'dh',\n    chars: \"\\u00F0\",\n  }, {\n    base: 'dz',\n    chars: \"\\u01F3\\u01C6\",\n  }, {\n    base: 'e',\n    chars: \"\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u01DD\",\n  }, {\n    base: 'f',\n    chars: \"\\u24D5\\uFF46\\u1E1F\\u0192\",\n  }, {\n    base: 'ff',\n    chars: \"\\uFB00\",\n  }, {\n    base: 'fi',\n    chars: \"\\uFB01\",\n  }, {\n    base: 'fl',\n    chars: \"\\uFB02\",\n  }, {\n    base: 'ffi',\n    chars: \"\\uFB03\",\n  }, {\n    base: 'ffl',\n    chars: \"\\uFB04\",\n  }, {\n    base: 'g',\n    chars: \"\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\uA77F\\u1D79\",\n  }, {\n    base: 'h',\n    chars: \"\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265\",\n  }, {\n    base: 'hv',\n    chars: \"\\u0195\",\n  }, {\n    base: 'i',\n    chars: \"\\u24D8\\uFF49\\xEC\\xED\\xEE\\u0129\\u012B\\u012D\\xEF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131\",\n  }, {\n    base: 'j',\n    chars: \"\\u24D9\\uFF4A\\u0135\\u01F0\\u0249\",\n  }, {\n    base: 'k',\n    chars: \"\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3\",\n  }, {\n    base: 'l',\n    chars: \"\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747\\u026D\",\n  }, {\n    base: 'lj',\n    chars: \"\\u01C9\",\n  }, {\n    base: 'm',\n    chars: \"\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F\",\n  }, {\n    base: 'n',\n    chars: \"\\u24DD\\uFF4E\\u01F9\\u0144\\xF1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5\\u043B\\u0509\",\n  }, {\n    base: 'nj',\n    chars: \"\\u01CC\",\n  }, {\n    base: 'o',\n    chars: \"\\u24DE\\uFF4F\\xF2\\xF3\\xF4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\xF5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\xF6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\xF8\\u01FF\\uA74B\\uA74D\\u0275\\u0254\\u1D11\",\n  }, {\n    base: 'oe',\n    chars: \"\\u0153\",\n  }, {\n    base: 'oi',\n    chars: \"\\u01A3\",\n  }, {\n    base: 'oo',\n    chars: \"\\uA74F\",\n  }, {\n    base: 'ou',\n    chars: \"\\u0223\",\n  }, {\n    base: 'p',\n    chars: \"\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755\\u03C1\",\n  }, {\n    base: 'q',\n    chars: \"\\u24E0\\uFF51\\u024B\\uA757\\uA759\",\n  }, {\n    base: 'r',\n    chars: \"\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783\",\n  }, {\n    base: 's',\n    chars: \"\\u24E2\\uFF53\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B\\u0282\",\n  }, {\n    base: 'ss',\n    chars: \"\\xDF\",\n  }, {\n    base: 't',\n    chars: \"\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787\",\n  }, {\n    base: 'th',\n    chars: \"\\u00FE\",\n  }, {\n    base: 'tz',\n    chars: \"\\uA729\",\n  }, {\n    base: 'u',\n    chars: \"\\u24E4\\uFF55\\xF9\\xFA\\xFB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\xFC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289\",\n  }, {\n    base: 'v',\n    chars: \"\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C\",\n  }, {\n    base: 'vy',\n    chars: \"\\uA761\",\n  }, {\n    base: 'w',\n    chars: \"\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73\",\n  }, {\n    base: 'x',\n    chars: \"\\u24E7\\uFF58\\u1E8B\\u1E8D\",\n  }, {\n    base: 'y',\n    chars: \"\\u24E8\\uFF59\\u1EF3\\xFD\\u0177\\u1EF9\\u0233\\u1E8F\\xFF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF\",\n  }, {\n    base: 'z',\n    chars: \"\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763\",\n  }\n];\n\nvar diacriticsMap = {};\nfor (var i = 0; i < replacementList.length; i += 1) {\n  var chars = replacementList[i].chars;\n  for (var j = 0; j < chars.length; j += 1) {\n    diacriticsMap[chars[j]] = replacementList[i].base;\n  }\n}\n\nfunction removeDiacritics(str) {\n  return str.replace(/[^\\u0000-\\u007e]/g, function(c) {\n    return diacriticsMap[c] || c;\n  });\n}\n\nexports.replacementList = replacementList;\nexports.diacriticsMap = diacriticsMap;\n","// fix by importing IOptions\nexport interface IOptions {\n  [key: string]: any;\n}\n\nexport default class Registry {\n  public registry: WeakMap<HTMLElement | Window, IOptions>;\n\n  constructor() {\n    this.registry = new WeakMap();\n  }\n\n  public elementExists(elem: HTMLElement | Window): boolean | null {\n    return this.registry.has(elem);\n  }\n\n  public getElement(elem: HTMLElement | Window): any {\n    return this.registry.get(elem);\n  }\n\n  /**\n   * administrator for lookup in the future\n   *\n   * @method add\n   * @param {HTMLElement | Window} element - the item to add to root element registry\n   * @param {IOption} options\n   * @param {IOption.root} [root] - contains optional root e.g. window, container div, etc\n   * @param {IOption.watcher} [observer] - optional\n   * @public\n   */\n  public addElement(element: HTMLElement | Window, options?: IOptions): void {\n    if (!element) {\n      return;\n    }\n\n    this.registry.set(element, options || {});\n  }\n\n  /**\n   * @method remove\n   * @param {HTMLElement|Window} target\n   * @public\n   */\n  public removeElement(target: HTMLElement | Window): void {\n    this.registry.delete(target);\n  }\n\n  /**\n   * reset weak map\n   *\n   * @method destroy\n   * @public\n   */\n  public destroyRegistry(): void {\n    this.registry = new WeakMap();\n  }\n}\n","import Registry from './registry';\n\nconst noop = () => {};\n\nexport enum CallbackType {\n  enter = 'enter',\n  exit = 'exit'\n}\n\nexport default abstract class Notifications {\n  private registry: Registry;\n\n  constructor() {\n    this.registry = new Registry();\n  }\n\n  /**\n   * Adds an EventListener as a callback for an event key.\n   * @param type 'enter' or 'exit'\n   * @param key The key of the event\n   * @param callback The callback function to invoke when the event occurs\n   */\n  public addCallback(\n    type: CallbackType,\n    element: HTMLElement | Window,\n    callback: (data?: any) => void\n  ): void {\n    let entry;\n    if (type === CallbackType.enter) {\n      entry = { [CallbackType.enter]: callback };\n    } else {\n      entry = { [CallbackType.exit]: callback };\n    }\n\n    this.registry.addElement(\n      element,\n      Object.assign({}, this.registry.getElement(element), entry)\n    );\n  }\n\n  /**\n   * @hidden\n   * Executes registered callbacks for key.\n   * @param type\n   * @param element\n   * @param data\n   */\n  public dispatchCallback(\n    type: CallbackType,\n    element: HTMLElement | Window,\n    data?: any\n  ): void {\n    if (type === CallbackType.enter) {\n      const { enter = noop } = this.registry.getElement(element);\n      enter(data);\n    } else {\n      // no element in WeakMap possible because element may be removed from DOM by the time we get here\n      const found = this.registry.getElement(element);\n      if (found && found.exit) {\n        found.exit(data);\n      }\n    }\n  }\n}\n","// use as 2nd parameter for JSON.parse to revive Date instances\nexport default function dateReviver(_key, value) {\n    var _a, _b, _c, _d, _e, _f;\n    if (typeof value !== \"string\") {\n        return value;\n    }\n    const parts = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d*))?(Z|([+-])(\\d{2}):(\\d{2}))$/.exec(value);\n    if (!parts) {\n        return value;\n    }\n    return new Date(Date.UTC(Number.parseInt((_a = parts[1]) !== null && _a !== void 0 ? _a : \"0\", 10), Number.parseInt((_b = parts[2]) !== null && _b !== void 0 ? _b : \"0\", 10) - 1, Number.parseInt((_c = parts[3]) !== null && _c !== void 0 ? _c : \"0\", 10), Number.parseInt((_d = parts[4]) !== null && _d !== void 0 ? _d : \"0\", 10), Number.parseInt((_e = parts[5]) !== null && _e !== void 0 ? _e : \"0\", 10), Number.parseInt((_f = parts[6]) !== null && _f !== void 0 ? _f : \"0\", 10), (parts[7] ? Number.parseInt(parts[7]) : 0) || 0));\n}\n","function cloneRegExp(re) {\n    var _a;\n    const regexMatch = /^\\/(.*)\\/([gimyu]*)$/.exec(re.toString());\n    if (!regexMatch) {\n        throw new Error(\"Invalid RegExp\");\n    }\n    return new RegExp((_a = regexMatch[1]) !== null && _a !== void 0 ? _a : \"\", regexMatch[2]);\n}\nexport default function clone(arg) {\n    if (typeof arg !== \"object\") {\n        return arg;\n    }\n    if (arg === null) {\n        return null;\n    }\n    if (Array.isArray(arg)) {\n        return arg.map(clone);\n    }\n    if (arg instanceof Date) {\n        return new Date(arg.getTime());\n    }\n    if (arg instanceof RegExp) {\n        return cloneRegExp(arg);\n    }\n    const cloned = {};\n    for (const name in arg) {\n        if (Object.prototype.hasOwnProperty.call(arg, name)) {\n            cloned[name] = clone(arg[name]);\n        }\n    }\n    return cloned;\n}\n","import { assertNonEmptyArray, lastNonEmpty } from \"../assertions/arrays.js\";\nexport default class Context {\n    setResult(result) {\n        this.result = result;\n        this.hasResult = true;\n        return this;\n    }\n    exit() {\n        this.exiting = true;\n        return this;\n    }\n    push(child, name) {\n        child.parent = this;\n        if (typeof name !== \"undefined\") {\n            child.childName = name;\n        }\n        child.root = this.root || this;\n        child.options = child.options || this.options;\n        if (!this.children) {\n            this.children = [child];\n            this.nextAfterChildren = this.next || null;\n            this.next = child;\n        }\n        else {\n            assertNonEmptyArray(this.children);\n            lastNonEmpty(this.children).next = child;\n            this.children.push(child);\n        }\n        child.next = this;\n        return this;\n    }\n}\n","import defaultClone from \"../clone.js\";\nimport Context from \"./context.js\";\nclass DiffContext extends Context {\n    constructor(left, right) {\n        super();\n        this.left = left;\n        this.right = right;\n        this.pipe = \"diff\";\n    }\n    prepareDeltaResult(result) {\n        var _a, _b, _c, _d;\n        if (typeof result === \"object\") {\n            if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.omitRemovedValues) &&\n                Array.isArray(result) &&\n                result.length > 1 &&\n                (result.length === 2 || // modified\n                    result[2] === 0 || // deleted\n                    result[2] === 3) // moved\n            ) {\n                // omit the left/old value (this delta will be more compact but irreversible)\n                result[0] = 0;\n            }\n            if ((_b = this.options) === null || _b === void 0 ? void 0 : _b.cloneDiffValues) {\n                const clone = typeof ((_c = this.options) === null || _c === void 0 ? void 0 : _c.cloneDiffValues) === \"function\"\n                    ? (_d = this.options) === null || _d === void 0 ? void 0 : _d.cloneDiffValues\n                    : defaultClone;\n                if (typeof result[0] === \"object\") {\n                    result[0] = clone(result[0]);\n                }\n                if (typeof result[1] === \"object\") {\n                    result[1] = clone(result[1]);\n                }\n            }\n        }\n        return result;\n    }\n    setResult(result) {\n        this.prepareDeltaResult(result);\n        return super.setResult(result);\n    }\n}\nexport default DiffContext;\n","import Context from \"./context.js\";\nclass PatchContext extends Context {\n    constructor(left, delta) {\n        super();\n        this.left = left;\n        this.delta = delta;\n        this.pipe = \"patch\";\n    }\n}\nexport default PatchContext;\n","import Context from \"./context.js\";\nclass ReverseContext extends Context {\n    constructor(delta) {\n        super();\n        this.delta = delta;\n        this.pipe = \"reverse\";\n    }\n}\nexport default ReverseContext;\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nclass Pipe {\n    constructor(name) {\n        this.name = name;\n        this.filters = [];\n    }\n    process(input) {\n        if (!this.processor) {\n            throw new Error(\"add this pipe to a processor before using it\");\n        }\n        const debug = this.debug;\n        const length = this.filters.length;\n        const context = input;\n        for (let index = 0; index < length; index++) {\n            const filter = this.filters[index];\n            if (!filter)\n                continue;\n            if (debug) {\n                this.log(`filter: ${filter.filterName}`);\n            }\n            filter(context);\n            if (typeof context === \"object\" && context.exiting) {\n                context.exiting = false;\n                break;\n            }\n        }\n        if (!context.next && this.resultCheck) {\n            this.resultCheck(context);\n        }\n    }\n    log(msg) {\n        console.log(`[jsondiffpatch] ${this.name} pipe, ${msg}`);\n    }\n    append(...args) {\n        this.filters.push(...args);\n        return this;\n    }\n    prepend(...args) {\n        this.filters.unshift(...args);\n        return this;\n    }\n    indexOf(filterName) {\n        if (!filterName) {\n            throw new Error(\"a filter name is required\");\n        }\n        for (let index = 0; index < this.filters.length; index++) {\n            const filter = this.filters[index];\n            if ((filter === null || filter === void 0 ? void 0 : filter.filterName) === filterName) {\n                return index;\n            }\n        }\n        throw new Error(`filter not found: ${filterName}`);\n    }\n    list() {\n        return this.filters.map((f) => f.filterName);\n    }\n    after(filterName, ...params) {\n        const index = this.indexOf(filterName);\n        this.filters.splice(index + 1, 0, ...params);\n        return this;\n    }\n    before(filterName, ...params) {\n        const index = this.indexOf(filterName);\n        this.filters.splice(index, 0, ...params);\n        return this;\n    }\n    replace(filterName, ...params) {\n        const index = this.indexOf(filterName);\n        this.filters.splice(index, 1, ...params);\n        return this;\n    }\n    remove(filterName) {\n        const index = this.indexOf(filterName);\n        this.filters.splice(index, 1);\n        return this;\n    }\n    clear() {\n        this.filters.length = 0;\n        return this;\n    }\n    shouldHaveResult(should) {\n        if (should === false) {\n            this.resultCheck = null;\n            return this;\n        }\n        if (this.resultCheck) {\n            return this;\n        }\n        this.resultCheck = (context) => {\n            if (!context.hasResult) {\n                console.log(context);\n                const error = new Error(`${this.name} failed`);\n                error.noResult = true;\n                throw error;\n            }\n        };\n        return this;\n    }\n}\nexport default Pipe;\n","class Processor {\n    constructor(options) {\n        this.selfOptions = options || {};\n        this.pipes = {};\n    }\n    options(options) {\n        if (options) {\n            this.selfOptions = options;\n        }\n        return this.selfOptions;\n    }\n    pipe(name, pipeArg) {\n        let pipe = pipeArg;\n        if (typeof name === \"string\") {\n            if (typeof pipe === \"undefined\") {\n                return this.pipes[name];\n            }\n            this.pipes[name] = pipe;\n        }\n        if (name && name.name) {\n            pipe = name;\n            if (pipe.processor === this) {\n                return pipe;\n            }\n            this.pipes[pipe.name] = pipe;\n        }\n        if (!pipe) {\n            throw new Error(`pipe is not defined: ${name}`);\n        }\n        pipe.processor = this;\n        return pipe;\n    }\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    process(input, pipe) {\n        let context = input;\n        context.options = this.options();\n        let nextPipe = pipe || input.pipe || \"default\";\n        let lastPipe = undefined;\n        while (nextPipe) {\n            if (typeof context.nextAfterChildren !== \"undefined\") {\n                // children processed and coming back to parent\n                context.next = context.nextAfterChildren;\n                context.nextAfterChildren = null;\n            }\n            if (typeof nextPipe === \"string\") {\n                nextPipe = this.pipe(nextPipe);\n            }\n            nextPipe.process(context);\n            lastPipe = nextPipe;\n            nextPipe = null;\n            if (context) {\n                if (context.next) {\n                    context = context.next;\n                    nextPipe = context.pipe || lastPipe;\n                }\n            }\n        }\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n        return context.hasResult ? context.result : undefined;\n    }\n}\nexport default Processor;\n","/*\n\nLCS implementation that supports arrays or strings\n\nreference: http://en.wikipedia.org/wiki/Longest_common_subsequence_problem\n\n*/\nconst defaultMatch = (array1, array2, index1, index2) => array1[index1] === array2[index2];\nconst lengthMatrix = (array1, array2, match, context) => {\n    var _a, _b, _c;\n    const len1 = array1.length;\n    const len2 = array2.length;\n    let x;\n    let y;\n    // initialize empty matrix of len1+1 x len2+1\n    const matrix = new Array(len1 + 1);\n    for (x = 0; x < len1 + 1; x++) {\n        const matrixNewRow = new Array(len2 + 1);\n        for (y = 0; y < len2 + 1; y++) {\n            matrixNewRow[y] = 0;\n        }\n        matrix[x] = matrixNewRow;\n    }\n    matrix.match = match;\n    // save sequence lengths for each coordinate\n    for (x = 1; x < len1 + 1; x++) {\n        const matrixRowX = matrix[x];\n        if (matrixRowX === undefined) {\n            throw new Error(\"LCS matrix row is undefined\");\n        }\n        const matrixRowBeforeX = matrix[x - 1];\n        if (matrixRowBeforeX === undefined) {\n            throw new Error(\"LCS matrix row is undefined\");\n        }\n        for (y = 1; y < len2 + 1; y++) {\n            if (match(array1, array2, x - 1, y - 1, context)) {\n                matrixRowX[y] = ((_a = matrixRowBeforeX[y - 1]) !== null && _a !== void 0 ? _a : 0) + 1;\n            }\n            else {\n                matrixRowX[y] = Math.max((_b = matrixRowBeforeX[y]) !== null && _b !== void 0 ? _b : 0, (_c = matrixRowX[y - 1]) !== null && _c !== void 0 ? _c : 0);\n            }\n        }\n    }\n    return matrix;\n};\nconst backtrack = (matrix, array1, array2, context) => {\n    let index1 = array1.length;\n    let index2 = array2.length;\n    const subsequence = {\n        sequence: [],\n        indices1: [],\n        indices2: [],\n    };\n    while (index1 !== 0 && index2 !== 0) {\n        if (matrix.match === undefined) {\n            throw new Error(\"LCS matrix match function is undefined\");\n        }\n        const sameLetter = matrix.match(array1, array2, index1 - 1, index2 - 1, context);\n        if (sameLetter) {\n            subsequence.sequence.unshift(array1[index1 - 1]);\n            subsequence.indices1.unshift(index1 - 1);\n            subsequence.indices2.unshift(index2 - 1);\n            --index1;\n            --index2;\n        }\n        else {\n            const matrixRowIndex1 = matrix[index1];\n            if (matrixRowIndex1 === undefined) {\n                throw new Error(\"LCS matrix row is undefined\");\n            }\n            const valueAtMatrixAbove = matrixRowIndex1[index2 - 1];\n            if (valueAtMatrixAbove === undefined) {\n                throw new Error(\"LCS matrix value is undefined\");\n            }\n            const matrixRowBeforeIndex1 = matrix[index1 - 1];\n            if (matrixRowBeforeIndex1 === undefined) {\n                throw new Error(\"LCS matrix row is undefined\");\n            }\n            const valueAtMatrixLeft = matrixRowBeforeIndex1[index2];\n            if (valueAtMatrixLeft === undefined) {\n                throw new Error(\"LCS matrix value is undefined\");\n            }\n            if (valueAtMatrixAbove > valueAtMatrixLeft) {\n                --index2;\n            }\n            else {\n                --index1;\n            }\n        }\n    }\n    return subsequence;\n};\nconst get = (array1, array2, match, context) => {\n    const innerContext = context || {};\n    const matrix = lengthMatrix(array1, array2, match || defaultMatch, innerContext);\n    return backtrack(matrix, array1, array2, innerContext);\n};\nexport default {\n    get,\n};\n","import DiffContext from \"../contexts/diff.js\";\nimport PatchContext from \"../contexts/patch.js\";\nimport ReverseContext from \"../contexts/reverse.js\";\nimport lcs from \"./lcs.js\";\nconst ARRAY_MOVE = 3;\nfunction arraysHaveMatchByRef(array1, array2, len1, len2) {\n    for (let index1 = 0; index1 < len1; index1++) {\n        const val1 = array1[index1];\n        for (let index2 = 0; index2 < len2; index2++) {\n            const val2 = array2[index2];\n            if (index1 !== index2 && val1 === val2) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nfunction matchItems(array1, array2, index1, index2, context) {\n    const value1 = array1[index1];\n    const value2 = array2[index2];\n    if (value1 === value2) {\n        return true;\n    }\n    if (typeof value1 !== \"object\" || typeof value2 !== \"object\") {\n        return false;\n    }\n    const objectHash = context.objectHash;\n    if (!objectHash) {\n        // no way to match objects was provided, try match by position\n        return context.matchByPosition && index1 === index2;\n    }\n    context.hashCache1 = context.hashCache1 || [];\n    let hash1 = context.hashCache1[index1];\n    if (typeof hash1 === \"undefined\") {\n        context.hashCache1[index1] = hash1 = objectHash(value1, index1);\n    }\n    if (typeof hash1 === \"undefined\") {\n        return false;\n    }\n    context.hashCache2 = context.hashCache2 || [];\n    let hash2 = context.hashCache2[index2];\n    if (typeof hash2 === \"undefined\") {\n        context.hashCache2[index2] = hash2 = objectHash(value2, index2);\n    }\n    if (typeof hash2 === \"undefined\") {\n        return false;\n    }\n    return hash1 === hash2;\n}\nexport const diffFilter = function arraysDiffFilter(context) {\n    var _a, _b, _c, _d, _e;\n    if (!context.leftIsArray) {\n        return;\n    }\n    const matchContext = {\n        objectHash: (_a = context.options) === null || _a === void 0 ? void 0 : _a.objectHash,\n        matchByPosition: (_b = context.options) === null || _b === void 0 ? void 0 : _b.matchByPosition,\n    };\n    let commonHead = 0;\n    let commonTail = 0;\n    let index;\n    let index1;\n    let index2;\n    const array1 = context.left;\n    const array2 = context.right;\n    const len1 = array1.length;\n    const len2 = array2.length;\n    let child;\n    if (len1 > 0 &&\n        len2 > 0 &&\n        !matchContext.objectHash &&\n        typeof matchContext.matchByPosition !== \"boolean\") {\n        matchContext.matchByPosition = !arraysHaveMatchByRef(array1, array2, len1, len2);\n    }\n    // separate common head\n    while (commonHead < len1 &&\n        commonHead < len2 &&\n        matchItems(array1, array2, commonHead, commonHead, matchContext)) {\n        index = commonHead;\n        child = new DiffContext(array1[index], array2[index]);\n        context.push(child, index);\n        commonHead++;\n    }\n    // separate common tail\n    while (commonTail + commonHead < len1 &&\n        commonTail + commonHead < len2 &&\n        matchItems(array1, array2, len1 - 1 - commonTail, len2 - 1 - commonTail, matchContext)) {\n        index1 = len1 - 1 - commonTail;\n        index2 = len2 - 1 - commonTail;\n        child = new DiffContext(array1[index1], array2[index2]);\n        context.push(child, index2);\n        commonTail++;\n    }\n    let result;\n    if (commonHead + commonTail === len1) {\n        if (len1 === len2) {\n            // arrays are identical\n            context.setResult(undefined).exit();\n            return;\n        }\n        // trivial case, a block (1 or more consecutive items) was added\n        result = result || {\n            _t: \"a\",\n        };\n        for (index = commonHead; index < len2 - commonTail; index++) {\n            result[index] = [array2[index]];\n            context.prepareDeltaResult(result[index]);\n        }\n        context.setResult(result).exit();\n        return;\n    }\n    if (commonHead + commonTail === len2) {\n        // trivial case, a block (1 or more consecutive items) was removed\n        result = result || {\n            _t: \"a\",\n        };\n        for (index = commonHead; index < len1 - commonTail; index++) {\n            const key = `_${index}`;\n            result[key] = [array1[index], 0, 0];\n            context.prepareDeltaResult(result[key]);\n        }\n        context.setResult(result).exit();\n        return;\n    }\n    // reset hash cache\n    matchContext.hashCache1 = undefined;\n    matchContext.hashCache2 = undefined;\n    // diff is not trivial, find the LCS (Longest Common Subsequence)\n    const trimmed1 = array1.slice(commonHead, len1 - commonTail);\n    const trimmed2 = array2.slice(commonHead, len2 - commonTail);\n    const seq = lcs.get(trimmed1, trimmed2, matchItems, matchContext);\n    const removedItems = [];\n    result = result || {\n        _t: \"a\",\n    };\n    for (index = commonHead; index < len1 - commonTail; index++) {\n        if (seq.indices1.indexOf(index - commonHead) < 0) {\n            // removed\n            const key = `_${index}`;\n            result[key] = [array1[index], 0, 0];\n            context.prepareDeltaResult(result[key]);\n            removedItems.push(index);\n        }\n    }\n    let detectMove = true;\n    if (((_c = context.options) === null || _c === void 0 ? void 0 : _c.arrays) && context.options.arrays.detectMove === false) {\n        detectMove = false;\n    }\n    let includeValueOnMove = false;\n    if ((_e = (_d = context.options) === null || _d === void 0 ? void 0 : _d.arrays) === null || _e === void 0 ? void 0 : _e.includeValueOnMove) {\n        includeValueOnMove = true;\n    }\n    const removedItemsLength = removedItems.length;\n    for (index = commonHead; index < len2 - commonTail; index++) {\n        const indexOnArray2 = seq.indices2.indexOf(index - commonHead);\n        if (indexOnArray2 < 0) {\n            // added, try to match with a removed item and register as position move\n            let isMove = false;\n            if (detectMove && removedItemsLength > 0) {\n                for (let removeItemIndex1 = 0; removeItemIndex1 < removedItemsLength; removeItemIndex1++) {\n                    index1 = removedItems[removeItemIndex1];\n                    const resultItem = index1 === undefined ? undefined : result[`_${index1}`];\n                    if (index1 !== undefined &&\n                        resultItem &&\n                        matchItems(trimmed1, trimmed2, index1 - commonHead, index - commonHead, matchContext)) {\n                        // store position move as: [originalValue, newPosition, ARRAY_MOVE]\n                        resultItem.splice(1, 2, index, ARRAY_MOVE);\n                        resultItem.splice(1, 2, index, ARRAY_MOVE);\n                        if (!includeValueOnMove) {\n                            // don't include moved value on diff, to save bytes\n                            resultItem[0] = \"\";\n                        }\n                        index2 = index;\n                        child = new DiffContext(array1[index1], array2[index2]);\n                        context.push(child, index2);\n                        removedItems.splice(removeItemIndex1, 1);\n                        isMove = true;\n                        break;\n                    }\n                }\n            }\n            if (!isMove) {\n                // added\n                result[index] = [array2[index]];\n                context.prepareDeltaResult(result[index]);\n            }\n        }\n        else {\n            // match, do inner diff\n            if (seq.indices1[indexOnArray2] === undefined) {\n                throw new Error(`Invalid indexOnArray2: ${indexOnArray2}, seq.indices1: ${seq.indices1}`);\n            }\n            index1 = seq.indices1[indexOnArray2] + commonHead;\n            if (seq.indices2[indexOnArray2] === undefined) {\n                throw new Error(`Invalid indexOnArray2: ${indexOnArray2}, seq.indices2: ${seq.indices2}`);\n            }\n            index2 = seq.indices2[indexOnArray2] + commonHead;\n            child = new DiffContext(array1[index1], array2[index2]);\n            context.push(child, index2);\n        }\n    }\n    context.setResult(result).exit();\n};\ndiffFilter.filterName = \"arrays\";\nconst compare = {\n    numerically(a, b) {\n        return a - b;\n    },\n    numericallyBy(name) {\n        return (a, b) => a[name] - b[name];\n    },\n};\nexport const patchFilter = function nestedPatchFilter(context) {\n    var _a;\n    if (!context.nested) {\n        return;\n    }\n    const nestedDelta = context.delta;\n    if (nestedDelta._t !== \"a\") {\n        return;\n    }\n    let index;\n    let index1;\n    const delta = nestedDelta;\n    const array = context.left;\n    // first, separate removals, insertions and modifications\n    let toRemove = [];\n    let toInsert = [];\n    const toModify = [];\n    for (index in delta) {\n        if (index !== \"_t\") {\n            if (index[0] === \"_\") {\n                const removedOrMovedIndex = index;\n                // removed item from original array\n                if (delta[removedOrMovedIndex] !== undefined &&\n                    (delta[removedOrMovedIndex][2] === 0 ||\n                        delta[removedOrMovedIndex][2] === ARRAY_MOVE)) {\n                    toRemove.push(Number.parseInt(index.slice(1), 10));\n                }\n                else {\n                    throw new Error(`only removal or move can be applied at original array indices, invalid diff type: ${(_a = delta[removedOrMovedIndex]) === null || _a === void 0 ? void 0 : _a[2]}`);\n                }\n            }\n            else {\n                const numberIndex = index;\n                if (delta[numberIndex].length === 1) {\n                    // added item at new array\n                    toInsert.push({\n                        index: Number.parseInt(numberIndex, 10),\n                        value: delta[numberIndex][0],\n                    });\n                }\n                else {\n                    // modified item at new array\n                    toModify.push({\n                        index: Number.parseInt(numberIndex, 10),\n                        delta: delta[numberIndex],\n                    });\n                }\n            }\n        }\n    }\n    // remove items, in reverse order to avoid sawing our own floor\n    toRemove = toRemove.sort(compare.numerically);\n    for (index = toRemove.length - 1; index >= 0; index--) {\n        index1 = toRemove[index];\n        if (index1 === undefined)\n            continue;\n        const indexDiff = delta[`_${index1}`];\n        const removedValue = array.splice(index1, 1)[0];\n        if ((indexDiff === null || indexDiff === void 0 ? void 0 : indexDiff[2]) === ARRAY_MOVE) {\n            // reinsert later\n            toInsert.push({\n                index: indexDiff[1],\n                value: removedValue,\n            });\n        }\n    }\n    // insert items, in reverse order to avoid moving our own floor\n    toInsert = toInsert.sort(compare.numericallyBy(\"index\"));\n    const toInsertLength = toInsert.length;\n    for (index = 0; index < toInsertLength; index++) {\n        const insertion = toInsert[index];\n        if (insertion === undefined)\n            continue;\n        array.splice(insertion.index, 0, insertion.value);\n    }\n    // apply modifications\n    const toModifyLength = toModify.length;\n    if (toModifyLength > 0) {\n        for (index = 0; index < toModifyLength; index++) {\n            const modification = toModify[index];\n            if (modification === undefined)\n                continue;\n            const child = new PatchContext(array[modification.index], modification.delta);\n            context.push(child, modification.index);\n        }\n    }\n    if (!context.children) {\n        context.setResult(array).exit();\n        return;\n    }\n    context.exit();\n};\npatchFilter.filterName = \"arrays\";\nexport const collectChildrenPatchFilter = function collectChildrenPatchFilter(context) {\n    if (!context || !context.children) {\n        return;\n    }\n    const deltaWithChildren = context.delta;\n    if (deltaWithChildren._t !== \"a\") {\n        return;\n    }\n    const array = context.left;\n    const length = context.children.length;\n    for (let index = 0; index < length; index++) {\n        const child = context.children[index];\n        if (child === undefined)\n            continue;\n        const arrayIndex = child.childName;\n        array[arrayIndex] = child.result;\n    }\n    context.setResult(array).exit();\n};\ncollectChildrenPatchFilter.filterName = \"arraysCollectChildren\";\nexport const reverseFilter = function arraysReverseFilter(context) {\n    if (!context.nested) {\n        const nonNestedDelta = context.delta;\n        if (nonNestedDelta[2] === ARRAY_MOVE) {\n            const arrayMoveDelta = nonNestedDelta;\n            context.newName = `_${arrayMoveDelta[1]}`;\n            context\n                .setResult([\n                arrayMoveDelta[0],\n                Number.parseInt(context.childName.substring(1), 10),\n                ARRAY_MOVE,\n            ])\n                .exit();\n        }\n        return;\n    }\n    const nestedDelta = context.delta;\n    if (nestedDelta._t !== \"a\") {\n        return;\n    }\n    const arrayDelta = nestedDelta;\n    for (const name in arrayDelta) {\n        if (name === \"_t\") {\n            continue;\n        }\n        const child = new ReverseContext(arrayDelta[name]);\n        context.push(child, name);\n    }\n    context.exit();\n};\nreverseFilter.filterName = \"arrays\";\nconst reverseArrayDeltaIndex = (delta, index, itemDelta) => {\n    if (typeof index === \"string\" && index[0] === \"_\") {\n        return Number.parseInt(index.substring(1), 10);\n    }\n    if (Array.isArray(itemDelta) && itemDelta[2] === 0) {\n        return `_${index}`;\n    }\n    let reverseIndex = +index;\n    for (const deltaIndex in delta) {\n        const deltaItem = delta[deltaIndex];\n        if (Array.isArray(deltaItem)) {\n            if (deltaItem[2] === ARRAY_MOVE) {\n                const moveFromIndex = Number.parseInt(deltaIndex.substring(1), 10);\n                const moveToIndex = deltaItem[1];\n                if (moveToIndex === +index) {\n                    return moveFromIndex;\n                }\n                if (moveFromIndex <= reverseIndex && moveToIndex > reverseIndex) {\n                    reverseIndex++;\n                }\n                else if (moveFromIndex >= reverseIndex &&\n                    moveToIndex < reverseIndex) {\n                    reverseIndex--;\n                }\n            }\n            else if (deltaItem[2] === 0) {\n                const deleteIndex = Number.parseInt(deltaIndex.substring(1), 10);\n                if (deleteIndex <= reverseIndex) {\n                    reverseIndex++;\n                }\n            }\n            else if (deltaItem.length === 1 &&\n                Number.parseInt(deltaIndex, 10) <= reverseIndex) {\n                reverseIndex--;\n            }\n        }\n    }\n    return reverseIndex;\n};\nexport const collectChildrenReverseFilter = (context) => {\n    if (!context || !context.children) {\n        return;\n    }\n    const deltaWithChildren = context.delta;\n    if (deltaWithChildren._t !== \"a\") {\n        return;\n    }\n    const arrayDelta = deltaWithChildren;\n    const length = context.children.length;\n    const delta = {\n        _t: \"a\",\n    };\n    for (let index = 0; index < length; index++) {\n        const child = context.children[index];\n        if (child === undefined)\n            continue;\n        let name = child.newName;\n        if (typeof name === \"undefined\") {\n            if (child.childName === undefined) {\n                throw new Error(\"child.childName is undefined\");\n            }\n            name = reverseArrayDeltaIndex(arrayDelta, child.childName, child.result);\n        }\n        if (delta[name] !== child.result) {\n            // There's no way to type this well.\n            delta[name] = child.result;\n        }\n    }\n    context.setResult(delta).exit();\n};\ncollectChildrenReverseFilter.filterName = \"arraysCollectChildren\";\n","export const diffFilter = function datesDiffFilter(context) {\n    if (context.left instanceof Date) {\n        if (context.right instanceof Date) {\n            if (context.left.getTime() !== context.right.getTime()) {\n                context.setResult([context.left, context.right]);\n            }\n            else {\n                context.setResult(undefined);\n            }\n        }\n        else {\n            context.setResult([context.left, context.right]);\n        }\n        context.exit();\n    }\n    else if (context.right instanceof Date) {\n        context.setResult([context.left, context.right]).exit();\n    }\n};\ndiffFilter.filterName = \"dates\";\n","import DiffContext from \"../contexts/diff.js\";\nimport PatchContext from \"../contexts/patch.js\";\nimport ReverseContext from \"../contexts/reverse.js\";\n// '__proto__' must never be used as a property key — it bypasses normal\n// property assignment and directly modifies the object's prototype chain.\n// 'constructor' and 'prototype' are handled by the hasOwnProperty guard below\n// (we only traverse own properties of left, so inherited 'constructor' is\n// never followed into Object.prototype).\nconst UNSAFE_KEYS = new Set([\"__proto__\"]);\nexport const collectChildrenDiffFilter = (context) => {\n    if (!context || !context.children) {\n        return;\n    }\n    const length = context.children.length;\n    let result = context.result;\n    for (let index = 0; index < length; index++) {\n        const child = context.children[index];\n        if (child === undefined)\n            continue;\n        if (typeof child.result === \"undefined\") {\n            continue;\n        }\n        result = result || {};\n        if (child.childName === undefined) {\n            throw new Error(\"diff child.childName is undefined\");\n        }\n        result[child.childName] = child.result;\n    }\n    if (result && context.leftIsArray) {\n        result._t = \"a\";\n    }\n    context.setResult(result).exit();\n};\ncollectChildrenDiffFilter.filterName = \"collectChildren\";\nexport const objectsDiffFilter = (context) => {\n    var _a;\n    if (context.leftIsArray || context.leftType !== \"object\") {\n        return;\n    }\n    const left = context.left;\n    const right = context.right;\n    const propertyFilter = (_a = context.options) === null || _a === void 0 ? void 0 : _a.propertyFilter;\n    for (const name in left) {\n        if (!Object.prototype.hasOwnProperty.call(left, name)) {\n            continue;\n        }\n        if (propertyFilter && !propertyFilter(name, context)) {\n            continue;\n        }\n        const child = new DiffContext(left[name], right[name]);\n        context.push(child, name);\n    }\n    for (const name in right) {\n        if (!Object.prototype.hasOwnProperty.call(right, name)) {\n            continue;\n        }\n        if (propertyFilter && !propertyFilter(name, context)) {\n            continue;\n        }\n        if (typeof left[name] === \"undefined\") {\n            const child = new DiffContext(undefined, right[name]);\n            context.push(child, name);\n        }\n    }\n    if (!context.children || context.children.length === 0) {\n        context.setResult(undefined).exit();\n        return;\n    }\n    context.exit();\n};\nobjectsDiffFilter.filterName = \"objects\";\nexport const patchFilter = function nestedPatchFilter(context) {\n    if (!context.nested) {\n        return;\n    }\n    const nestedDelta = context.delta;\n    if (nestedDelta._t) {\n        return;\n    }\n    const objectDelta = nestedDelta;\n    let childrenPushed = false;\n    for (const name in objectDelta) {\n        if (UNSAFE_KEYS.has(name))\n            continue;\n        if (!Object.prototype.hasOwnProperty.call(objectDelta, name))\n            continue;\n        const left = context.left;\n        // Only read own properties from left to avoid traversing inherited\n        // properties (e.g. constructor.prototype → Object.prototype)\n        const leftValue = left !== null &&\n            typeof left === \"object\" &&\n            Object.prototype.hasOwnProperty.call(left, name)\n            ? left[name]\n            : undefined;\n        const child = new PatchContext(leftValue, objectDelta[name]);\n        context.push(child, name);\n        childrenPushed = true;\n    }\n    if (!childrenPushed) {\n        // All delta keys were unsafe or filtered out — return left unchanged.\n        context.setResult(context.left).exit();\n        return;\n    }\n    context.exit();\n};\npatchFilter.filterName = \"objects\";\nexport const collectChildrenPatchFilter = function collectChildrenPatchFilter(context) {\n    if (!context || !context.children) {\n        return;\n    }\n    const deltaWithChildren = context.delta;\n    if (deltaWithChildren._t) {\n        return;\n    }\n    // If left is not a real object we cannot patch it — return left as-is.\n    if (context.left === null || typeof context.left !== \"object\") {\n        context.setResult(context.left).exit();\n        return;\n    }\n    const object = context.left;\n    const length = context.children.length;\n    for (let index = 0; index < length; index++) {\n        const child = context.children[index];\n        if (child === undefined)\n            continue;\n        const property = child.childName;\n        if (UNSAFE_KEYS.has(property))\n            continue;\n        if (Object.prototype.hasOwnProperty.call(context.left, property) &&\n            child.result === undefined) {\n            delete object[property];\n        }\n        else if (object[property] !== child.result) {\n            object[property] = child.result;\n        }\n    }\n    context.setResult(object).exit();\n};\ncollectChildrenPatchFilter.filterName = \"collectChildren\";\nexport const reverseFilter = function nestedReverseFilter(context) {\n    if (!context.nested) {\n        return;\n    }\n    const nestedDelta = context.delta;\n    if (nestedDelta._t) {\n        return;\n    }\n    const objectDelta = context.delta;\n    let childrenPushed = false;\n    for (const name in objectDelta) {\n        if (UNSAFE_KEYS.has(name))\n            continue;\n        if (!Object.prototype.hasOwnProperty.call(objectDelta, name))\n            continue;\n        const child = new ReverseContext(objectDelta[name]);\n        context.push(child, name);\n        childrenPushed = true;\n    }\n    if (!childrenPushed) {\n        // All delta keys were unsafe — return an empty reversed delta.\n        context.setResult({}).exit();\n        return;\n    }\n    context.exit();\n};\nreverseFilter.filterName = \"objects\";\nexport const collectChildrenReverseFilter = (context) => {\n    if (!context || !context.children) {\n        return;\n    }\n    const deltaWithChildren = context.delta;\n    if (deltaWithChildren._t) {\n        return;\n    }\n    const length = context.children.length;\n    const delta = {};\n    for (let index = 0; index < length; index++) {\n        const child = context.children[index];\n        if (child === undefined)\n            continue;\n        const property = child.childName;\n        if (UNSAFE_KEYS.has(property))\n            continue;\n        if (delta[property] !== child.result) {\n            delta[property] = child.result;\n        }\n    }\n    context.setResult(delta).exit();\n};\ncollectChildrenReverseFilter.filterName = \"collectChildren\";\n","const TEXT_DIFF = 2;\nconst DEFAULT_MIN_LENGTH = 60;\nlet cachedDiffPatch = null;\nfunction getDiffMatchPatch(options, required) {\n    var _a;\n    if (!cachedDiffPatch) {\n        let instance;\n        if ((_a = options === null || options === void 0 ? void 0 : options.textDiff) === null || _a === void 0 ? void 0 : _a.diffMatchPatch) {\n            instance = new options.textDiff.diffMatchPatch();\n        }\n        else {\n            if (!required) {\n                return null;\n            }\n            const error = new Error(\"The diff-match-patch library was not provided. Pass the library in through the options or use the `jsondiffpatch/with-text-diffs` entry-point.\");\n            // eslint-disable-next-line camelcase\n            error.diff_match_patch_not_found = true;\n            throw error;\n        }\n        cachedDiffPatch = {\n            diff: (txt1, txt2) => instance.patch_toText(instance.patch_make(txt1, txt2)),\n            patch: (txt1, patch) => {\n                const results = instance.patch_apply(instance.patch_fromText(patch), txt1);\n                for (const resultOk of results[1]) {\n                    if (!resultOk) {\n                        const error = new Error(\"text patch failed\");\n                        error.textPatchFailed = true;\n                        throw error;\n                    }\n                }\n                return results[0];\n            },\n        };\n    }\n    return cachedDiffPatch;\n}\nexport const diffFilter = function textsDiffFilter(context) {\n    var _a, _b;\n    if (context.leftType !== \"string\") {\n        return;\n    }\n    const left = context.left;\n    const right = context.right;\n    const minLength = ((_b = (_a = context.options) === null || _a === void 0 ? void 0 : _a.textDiff) === null || _b === void 0 ? void 0 : _b.minLength) || DEFAULT_MIN_LENGTH;\n    if (left.length < minLength || right.length < minLength) {\n        context.setResult([left, right]).exit();\n        return;\n    }\n    // large text, try to use a text-diff algorithm\n    const diffMatchPatch = getDiffMatchPatch(context.options);\n    if (!diffMatchPatch) {\n        // diff-match-patch library not available,\n        // fallback to regular string replace\n        context.setResult([left, right]).exit();\n        return;\n    }\n    const diff = diffMatchPatch.diff;\n    context.setResult([diff(left, right), 0, TEXT_DIFF]).exit();\n};\ndiffFilter.filterName = \"texts\";\nexport const patchFilter = function textsPatchFilter(context) {\n    if (context.nested) {\n        return;\n    }\n    const nonNestedDelta = context.delta;\n    if (nonNestedDelta[2] !== TEXT_DIFF) {\n        return;\n    }\n    const textDiffDelta = nonNestedDelta;\n    // text-diff, use a text-patch algorithm\n    const patch = getDiffMatchPatch(context.options, true).patch;\n    context.setResult(patch(context.left, textDiffDelta[0])).exit();\n};\npatchFilter.filterName = \"texts\";\nconst textDeltaReverse = (delta) => {\n    var _a, _b, _c;\n    const headerRegex = /^@@ +-(\\d+),(\\d+) +\\+(\\d+),(\\d+) +@@$/;\n    const lines = delta.split(\"\\n\");\n    for (let i = 0; i < lines.length; i++) {\n        const line = lines[i];\n        if (line === undefined)\n            continue;\n        const lineStart = line.slice(0, 1);\n        if (lineStart === \"@\") {\n            const header = headerRegex.exec(line);\n            if (header !== null) {\n                const lineHeader = i;\n                // fix header\n                lines[lineHeader] =\n                    `@@ -${header[3]},${header[4]} +${header[1]},${header[2]} @@`;\n            }\n        }\n        else if (lineStart === \"+\") {\n            lines[i] = `-${(_a = lines[i]) === null || _a === void 0 ? void 0 : _a.slice(1)}`;\n            if (((_b = lines[i - 1]) === null || _b === void 0 ? void 0 : _b.slice(0, 1)) === \"+\") {\n                // swap lines to keep default order (-+)\n                const lineTmp = lines[i];\n                lines[i] = lines[i - 1];\n                lines[i - 1] = lineTmp;\n            }\n        }\n        else if (lineStart === \"-\") {\n            lines[i] = `+${(_c = lines[i]) === null || _c === void 0 ? void 0 : _c.slice(1)}`;\n        }\n    }\n    return lines.join(\"\\n\");\n};\nexport const reverseFilter = function textsReverseFilter(context) {\n    if (context.nested) {\n        return;\n    }\n    const nonNestedDelta = context.delta;\n    if (nonNestedDelta[2] !== TEXT_DIFF) {\n        return;\n    }\n    const textDiffDelta = nonNestedDelta;\n    // text-diff, use a text-diff algorithm\n    context\n        .setResult([textDeltaReverse(textDiffDelta[0]), 0, TEXT_DIFF])\n        .exit();\n};\nreverseFilter.filterName = \"texts\";\n","export const diffFilter = function trivialMatchesDiffFilter(context) {\n    if (context.left === context.right) {\n        context.setResult(undefined).exit();\n        return;\n    }\n    if (typeof context.left === \"undefined\") {\n        if (typeof context.right === \"function\") {\n            throw new Error(\"functions are not supported\");\n        }\n        context.setResult([context.right]).exit();\n        return;\n    }\n    if (typeof context.right === \"undefined\") {\n        context.setResult([context.left, 0, 0]).exit();\n        return;\n    }\n    if (typeof context.left === \"function\" ||\n        typeof context.right === \"function\") {\n        throw new Error(\"functions are not supported\");\n    }\n    context.leftType = context.left === null ? \"null\" : typeof context.left;\n    context.rightType = context.right === null ? \"null\" : typeof context.right;\n    if (context.leftType !== context.rightType) {\n        context.setResult([context.left, context.right]).exit();\n        return;\n    }\n    if (context.leftType === \"boolean\" || context.leftType === \"number\") {\n        context.setResult([context.left, context.right]).exit();\n        return;\n    }\n    if (context.leftType === \"object\") {\n        context.leftIsArray = Array.isArray(context.left);\n    }\n    if (context.rightType === \"object\") {\n        context.rightIsArray = Array.isArray(context.right);\n    }\n    if (context.leftIsArray !== context.rightIsArray) {\n        context.setResult([context.left, context.right]).exit();\n        return;\n    }\n    if (context.left instanceof RegExp) {\n        if (context.right instanceof RegExp) {\n            context\n                .setResult([context.left.toString(), context.right.toString()])\n                .exit();\n        }\n        else {\n            context.setResult([context.left, context.right]).exit();\n        }\n    }\n};\ndiffFilter.filterName = \"trivial\";\nexport const patchFilter = function trivialMatchesPatchFilter(context) {\n    if (typeof context.delta === \"undefined\") {\n        context.setResult(context.left).exit();\n        return;\n    }\n    context.nested = !Array.isArray(context.delta);\n    if (context.nested) {\n        return;\n    }\n    const nonNestedDelta = context.delta;\n    if (nonNestedDelta.length === 1) {\n        context.setResult(nonNestedDelta[0]).exit();\n        return;\n    }\n    if (nonNestedDelta.length === 2) {\n        if (context.left instanceof RegExp) {\n            const regexArgs = /^\\/(.*)\\/([gimyu]+)$/.exec(nonNestedDelta[1]);\n            if (regexArgs === null || regexArgs === void 0 ? void 0 : regexArgs[1]) {\n                context.setResult(new RegExp(regexArgs[1], regexArgs[2])).exit();\n                return;\n            }\n        }\n        context.setResult(nonNestedDelta[1]).exit();\n        return;\n    }\n    if (nonNestedDelta.length === 3 && nonNestedDelta[2] === 0) {\n        context.setResult(undefined).exit();\n    }\n};\npatchFilter.filterName = \"trivial\";\nexport const reverseFilter = function trivialReferseFilter(context) {\n    if (typeof context.delta === \"undefined\") {\n        context.setResult(context.delta).exit();\n        return;\n    }\n    context.nested = !Array.isArray(context.delta);\n    if (context.nested) {\n        return;\n    }\n    const nonNestedDelta = context.delta;\n    if (nonNestedDelta.length === 1) {\n        context.setResult([nonNestedDelta[0], 0, 0]).exit();\n        return;\n    }\n    if (nonNestedDelta.length === 2) {\n        context.setResult([nonNestedDelta[1], nonNestedDelta[0]]).exit();\n        return;\n    }\n    if (nonNestedDelta.length === 3 && nonNestedDelta[2] === 0) {\n        context.setResult([nonNestedDelta[0]]).exit();\n    }\n};\nreverseFilter.filterName = \"trivial\";\n","import clone from \"./clone.js\";\nimport DiffContext from \"./contexts/diff.js\";\nimport PatchContext from \"./contexts/patch.js\";\nimport ReverseContext from \"./contexts/reverse.js\";\nimport Pipe from \"./pipe.js\";\nimport Processor from \"./processor.js\";\nimport * as arrays from \"./filters/arrays.js\";\nimport * as dates from \"./filters/dates.js\";\nimport * as nested from \"./filters/nested.js\";\nimport * as texts from \"./filters/texts.js\";\nimport * as trivial from \"./filters/trivial.js\";\nclass DiffPatcher {\n    constructor(options) {\n        this.processor = new Processor(options);\n        this.processor.pipe(new Pipe(\"diff\")\n            .append(nested.collectChildrenDiffFilter, trivial.diffFilter, dates.diffFilter, texts.diffFilter, nested.objectsDiffFilter, arrays.diffFilter)\n            .shouldHaveResult());\n        this.processor.pipe(new Pipe(\"patch\")\n            .append(nested.collectChildrenPatchFilter, arrays.collectChildrenPatchFilter, trivial.patchFilter, texts.patchFilter, nested.patchFilter, arrays.patchFilter)\n            .shouldHaveResult());\n        this.processor.pipe(new Pipe(\"reverse\")\n            .append(nested.collectChildrenReverseFilter, arrays.collectChildrenReverseFilter, trivial.reverseFilter, texts.reverseFilter, nested.reverseFilter, arrays.reverseFilter)\n            .shouldHaveResult());\n    }\n    options(options) {\n        return this.processor.options(options);\n    }\n    diff(left, right) {\n        return this.processor.process(new DiffContext(left, right));\n    }\n    patch(left, delta) {\n        return this.processor.process(new PatchContext(left, delta));\n    }\n    reverse(delta) {\n        return this.processor.process(new ReverseContext(delta));\n    }\n    unpatch(right, delta) {\n        return this.patch(right, this.reverse(delta));\n    }\n    clone(value) {\n        return clone(value);\n    }\n}\nexport default DiffPatcher;\n","import dateReviver from \"./date-reviver.js\";\nimport DiffPatcher from \"./diffpatcher.js\";\nexport { DiffPatcher, dateReviver };\nexport function create(options) {\n    return new DiffPatcher(options);\n}\nlet defaultInstance;\nexport function diff(left, right) {\n    if (!defaultInstance) {\n        defaultInstance = new DiffPatcher();\n    }\n    return defaultInstance.diff(left, right);\n}\nexport function patch(left, delta) {\n    if (!defaultInstance) {\n        defaultInstance = new DiffPatcher();\n    }\n    return defaultInstance.patch(left, delta);\n}\nexport function unpatch(right, delta) {\n    if (!defaultInstance) {\n        defaultInstance = new DiffPatcher();\n    }\n    return defaultInstance.unpatch(right, delta);\n}\nexport function reverse(delta) {\n    if (!defaultInstance) {\n        defaultInstance = new DiffPatcher();\n    }\n    return defaultInstance.reverse(delta);\n}\nexport function clone(value) {\n    if (!defaultInstance) {\n        defaultInstance = new DiffPatcher();\n    }\n    return defaultInstance.clone(value);\n}\n","import { assertArrayHasAtLeast2 } from \"../assertions/arrays.js\";\nclass BaseFormatter {\n    format(delta, left) {\n        const context = {};\n        this.prepareContext(context);\n        const preparedContext = context;\n        this.recurse(preparedContext, delta, left);\n        return this.finalize(preparedContext);\n    }\n    prepareContext(context) {\n        context.buffer = [];\n        context.out = function (...args) {\n            if (!this.buffer) {\n                throw new Error(\"context buffer is not initialized\");\n            }\n            this.buffer.push(...args);\n        };\n    }\n    typeFormattterNotFound(_context, deltaType) {\n        throw new Error(`cannot format delta type: ${deltaType}`);\n    }\n    /* eslint-disable @typescript-eslint/no-unused-vars */\n    typeFormattterErrorFormatter(_context, _err, _delta, _leftValue, _key, _leftKey, _movedFrom) {\n        // do nothing by default\n    }\n    /* eslint-enable @typescript-eslint/no-unused-vars */\n    finalize({ buffer }) {\n        if (Array.isArray(buffer)) {\n            return buffer.join(\"\");\n        }\n        return \"\";\n    }\n    recurse(context, delta, left, key, leftKey, movedFrom, isLast) {\n        const useMoveOriginHere = delta && movedFrom;\n        const leftValue = useMoveOriginHere ? movedFrom.value : left;\n        if (typeof delta === \"undefined\" && typeof key === \"undefined\") {\n            return undefined;\n        }\n        const type = this.getDeltaType(delta, movedFrom);\n        const nodeType = type === \"node\"\n            ? delta._t === \"a\"\n                ? \"array\"\n                : \"object\"\n            : \"\";\n        if (typeof key !== \"undefined\") {\n            this.nodeBegin(context, key, leftKey, type, nodeType, isLast !== null && isLast !== void 0 ? isLast : false);\n        }\n        else {\n            this.rootBegin(context, type, nodeType);\n        }\n        let typeFormattter;\n        try {\n            typeFormattter =\n                type !== \"unknown\"\n                    ? this[`format_${type}`]\n                    : this.typeFormattterNotFound(context, type);\n            typeFormattter.call(this, context, delta, leftValue, key, leftKey, movedFrom);\n        }\n        catch (err) {\n            this.typeFormattterErrorFormatter(context, err, delta, leftValue, key, leftKey, movedFrom);\n            if (typeof console !== \"undefined\" && console.error) {\n                console.error(err.stack);\n            }\n        }\n        if (typeof key !== \"undefined\") {\n            this.nodeEnd(context, key, leftKey, type, nodeType, isLast !== null && isLast !== void 0 ? isLast : false);\n        }\n        else {\n            this.rootEnd(context, type, nodeType);\n        }\n    }\n    formatDeltaChildren(context, delta, left) {\n        this.forEachDeltaKey(delta, left, (key, leftKey, movedFrom, isLast) => {\n            this.recurse(context, delta[key], left ? left[leftKey] : undefined, key, leftKey, movedFrom, isLast);\n        });\n    }\n    forEachDeltaKey(delta, left, fn) {\n        const keys = [];\n        const arrayKeys = delta._t === \"a\";\n        if (!arrayKeys) {\n            // it's an object delta\n            const deltaKeys = Object.keys(delta);\n            // if left is provided, push all keys from it first, in the original order\n            if (typeof left === \"object\" && left !== null) {\n                keys.push(...Object.keys(left));\n            }\n            // then add new keys from delta, to the bottom\n            for (const key of deltaKeys) {\n                if (keys.indexOf(key) >= 0)\n                    continue;\n                keys.push(key);\n            }\n            for (let index = 0; index < keys.length; index++) {\n                const key = keys[index];\n                if (key === undefined)\n                    continue;\n                const isLast = index === keys.length - 1;\n                fn(\n                // for object diff, the delta key and left key are the same\n                key, key, \n                // there's no \"move\" in object diff\n                undefined, isLast);\n            }\n            return;\n        }\n        // it's an array delta, this is a bit trickier because of position changes\n        const movedFrom = {};\n        for (const key in delta) {\n            if (Object.prototype.hasOwnProperty.call(delta, key)) {\n                const value = delta[key];\n                if (Array.isArray(value) && value[2] === 3) {\n                    const movedDelta = value;\n                    movedFrom[movedDelta[1]] = Number.parseInt(key.substring(1));\n                }\n            }\n        }\n        // go thru the array positions, finding delta keys on the way\n        const arrayDelta = delta;\n        let leftIndex = 0;\n        let rightIndex = 0;\n        const leftArray = Array.isArray(left) ? left : undefined;\n        const leftLength = leftArray\n            ? leftArray.length\n            : // if we don't have the original array,\n                // use a length that ensures we'll go thru all delta keys\n                Object.keys(arrayDelta).reduce((max, key) => {\n                    if (key === \"_t\")\n                        return max;\n                    const isLeftKey = key.substring(0, 1) === \"_\";\n                    if (isLeftKey) {\n                        const itemDelta = arrayDelta[key];\n                        const leftIndex = Number.parseInt(key.substring(1));\n                        const rightIndex = Array.isArray(itemDelta) &&\n                            itemDelta.length >= 3 &&\n                            itemDelta[2] === 3\n                            ? itemDelta[1]\n                            : undefined;\n                        const maxIndex = Math.max(leftIndex, rightIndex !== null && rightIndex !== void 0 ? rightIndex : 0);\n                        return maxIndex > max ? maxIndex : max;\n                    }\n                    const rightIndex = Number.parseInt(key);\n                    const leftIndex = movedFrom[rightIndex];\n                    const maxIndex = Math.max(leftIndex !== null && leftIndex !== void 0 ? leftIndex : 0, rightIndex !== null && rightIndex !== void 0 ? rightIndex : 0);\n                    return maxIndex > max ? maxIndex : max;\n                }, 0) + 1;\n        let rightLength = leftLength;\n        // call fn with previous args, to catch last call and set isLast=true\n        let previousFnArgs;\n        const addKey = (...args) => {\n            if (previousFnArgs) {\n                fn(...previousFnArgs);\n            }\n            previousFnArgs = args;\n        };\n        const flushLastKey = () => {\n            if (!previousFnArgs) {\n                return;\n            }\n            fn(previousFnArgs[0], previousFnArgs[1], previousFnArgs[2], true);\n        };\n        while (leftIndex < leftLength ||\n            rightIndex < rightLength ||\n            `${rightIndex}` in arrayDelta) {\n            let hasDelta = false;\n            const leftIndexKey = `_${leftIndex}`;\n            const rightIndexKey = `${rightIndex}`;\n            const movedFromIndex = rightIndex in movedFrom ? movedFrom[rightIndex] : undefined;\n            if (leftIndexKey in arrayDelta) {\n                // something happened to the left item at this position\n                hasDelta = true;\n                const itemDelta = arrayDelta[leftIndexKey];\n                addKey(leftIndexKey, movedFromIndex !== null && movedFromIndex !== void 0 ? movedFromIndex : leftIndex, movedFromIndex\n                    ? {\n                        key: `_${movedFromIndex}`,\n                        value: leftArray ? leftArray[movedFromIndex] : undefined,\n                    }\n                    : undefined, false);\n                if (Array.isArray(itemDelta)) {\n                    if (itemDelta[2] === 0) {\n                        // deleted\n                        rightLength--;\n                        leftIndex++;\n                    }\n                    else if (itemDelta[2] === 3) {\n                        // left item moved somewhere else\n                        leftIndex++;\n                    }\n                    else {\n                        // unrecognized change to left item\n                        leftIndex++;\n                    }\n                }\n                else {\n                    // unrecognized change to left item\n                    leftIndex++;\n                }\n            }\n            if (rightIndexKey in arrayDelta) {\n                // something happened to the right item at this position\n                hasDelta = true;\n                const itemDelta = arrayDelta[rightIndexKey];\n                const isItemAdded = Array.isArray(itemDelta) && itemDelta.length === 1;\n                addKey(rightIndexKey, movedFromIndex !== null && movedFromIndex !== void 0 ? movedFromIndex : leftIndex, movedFromIndex\n                    ? {\n                        key: `_${movedFromIndex}`,\n                        value: leftArray ? leftArray[movedFromIndex] : undefined,\n                    }\n                    : undefined, false);\n                if (isItemAdded) {\n                    // added\n                    rightLength++;\n                    rightIndex++;\n                }\n                else if (movedFromIndex === undefined) {\n                    // modified (replace/object/array/textdiff)\n                    leftIndex++;\n                    rightIndex++;\n                }\n                else {\n                    // move\n                    rightIndex++;\n                }\n            }\n            if (!hasDelta) {\n                // left and right items are the same (unchanged)\n                if ((leftArray && movedFromIndex === undefined) ||\n                    this.includeMoveDestinations !== false) {\n                    // show unchanged items only if we have the left array\n                    addKey(rightIndexKey, movedFromIndex !== null && movedFromIndex !== void 0 ? movedFromIndex : leftIndex, movedFromIndex\n                        ? {\n                            key: `_${movedFromIndex}`,\n                            value: leftArray ? leftArray[movedFromIndex] : undefined,\n                        }\n                        : undefined, false);\n                }\n                if (movedFromIndex !== undefined) {\n                    // item at the right came from another position\n                    rightIndex++;\n                    // don't skip left item yet\n                }\n                else {\n                    leftIndex++;\n                    rightIndex++;\n                }\n            }\n        }\n        flushLastKey();\n    }\n    getDeltaType(delta, movedFrom) {\n        if (typeof delta === \"undefined\") {\n            if (typeof movedFrom !== \"undefined\") {\n                return \"movedestination\";\n            }\n            return \"unchanged\";\n        }\n        if (Array.isArray(delta)) {\n            if (delta.length === 1) {\n                return \"added\";\n            }\n            if (delta.length === 2) {\n                return \"modified\";\n            }\n            if (delta.length === 3 && delta[2] === 0) {\n                return \"deleted\";\n            }\n            if (delta.length === 3 && delta[2] === 2) {\n                return \"textdiff\";\n            }\n            if (delta.length === 3 && delta[2] === 3) {\n                return \"moved\";\n            }\n        }\n        else if (typeof delta === \"object\") {\n            return \"node\";\n        }\n        return \"unknown\";\n    }\n    parseTextDiff(value) {\n        var _a;\n        const output = [];\n        const lines = value.split(\"\\n@@ \");\n        for (const line of lines) {\n            const lineOutput = {\n                pieces: [],\n            };\n            const location = (_a = /^(?:@@ )?[-+]?(\\d+),(\\d+)/.exec(line)) === null || _a === void 0 ? void 0 : _a.slice(1);\n            if (!location) {\n                throw new Error(\"invalid text diff format\");\n            }\n            assertArrayHasAtLeast2(location);\n            lineOutput.location = {\n                line: location[0],\n                chr: location[1],\n            };\n            const pieces = line.split(\"\\n\").slice(1);\n            for (let pieceIndex = 0, piecesLength = pieces.length; pieceIndex < piecesLength; pieceIndex++) {\n                const piece = pieces[pieceIndex];\n                if (piece === undefined || !piece.length) {\n                    continue;\n                }\n                const pieceOutput = {\n                    type: \"context\",\n                };\n                if (piece.substring(0, 1) === \"+\") {\n                    pieceOutput.type = \"added\";\n                }\n                else if (piece.substring(0, 1) === \"-\") {\n                    pieceOutput.type = \"deleted\";\n                }\n                pieceOutput.text = piece.slice(1);\n                lineOutput.pieces.push(pieceOutput);\n            }\n            output.push(lineOutput);\n        }\n        return output;\n    }\n}\nexport default BaseFormatter;\n","import BaseFormatter from \"./base.js\";\nclass HtmlFormatter extends BaseFormatter {\n    typeFormattterErrorFormatter(context, err) {\n        const message = typeof err === \"object\" &&\n            err !== null &&\n            \"message\" in err &&\n            typeof err.message === \"string\"\n            ? err.message\n            : String(err);\n        context.out(`<pre class=\"jsondiffpatch-error\">${htmlEscape(message)}</pre>`);\n    }\n    formatValue(context, value) {\n        const valueAsHtml = typeof value === \"undefined\"\n            ? \"undefined\"\n            : htmlEscape(JSON.stringify(value, null, 2));\n        context.out(`<pre>${valueAsHtml}</pre>`);\n    }\n    formatTextDiffString(context, value) {\n        const lines = this.parseTextDiff(value);\n        context.out('<ul class=\"jsondiffpatch-textdiff\">');\n        for (let i = 0, l = lines.length; i < l; i++) {\n            const line = lines[i];\n            if (line === undefined)\n                return;\n            context.out(`<li><div class=\"jsondiffpatch-textdiff-location\"><span class=\"jsondiffpatch-textdiff-line-number\">${line.location.line}</span><span class=\"jsondiffpatch-textdiff-char\">${line.location.chr}</span></div><div class=\"jsondiffpatch-textdiff-line\">`);\n            const pieces = line.pieces;\n            for (let pieceIndex = 0, piecesLength = pieces.length; pieceIndex < piecesLength; pieceIndex++) {\n                const piece = pieces[pieceIndex];\n                if (piece === undefined)\n                    return;\n                context.out(`<span class=\"jsondiffpatch-textdiff-${piece.type}\">${htmlEscape(decodeURI(piece.text))}</span>`);\n            }\n            context.out(\"</div></li>\");\n        }\n        context.out(\"</ul>\");\n    }\n    rootBegin(context, type, nodeType) {\n        const nodeClass = `jsondiffpatch-${type}${nodeType ? ` jsondiffpatch-child-node-type-${nodeType}` : \"\"}`;\n        context.out(`<div class=\"jsondiffpatch-delta ${nodeClass}\">`);\n    }\n    rootEnd(context) {\n        context.out(`</div>${context.hasArrows\n            ? `<script type=\"text/javascript\">setTimeout(${adjustArrows.toString()},10);</script>`\n            : \"\"}`);\n    }\n    nodeBegin(context, key, leftKey, type, nodeType) {\n        const nodeClass = `jsondiffpatch-${type}${nodeType ? ` jsondiffpatch-child-node-type-${nodeType}` : \"\"}`;\n        const label = typeof leftKey === \"number\" && key.substring(0, 1) === \"_\"\n            ? key.substring(1)\n            : key;\n        context.out(`<li class=\"${nodeClass}\" data-key=\"${htmlEscape(key)}\">` +\n            `<div class=\"jsondiffpatch-property-name\">${htmlEscape(label)}</div>`);\n    }\n    nodeEnd(context) {\n        context.out(\"</li>\");\n    }\n    format_unchanged(context, _delta, left) {\n        if (typeof left === \"undefined\") {\n            return;\n        }\n        context.out('<div class=\"jsondiffpatch-value\">');\n        this.formatValue(context, left);\n        context.out(\"</div>\");\n    }\n    format_movedestination(context, _delta, left) {\n        if (typeof left === \"undefined\") {\n            return;\n        }\n        context.out('<div class=\"jsondiffpatch-value\">');\n        this.formatValue(context, left);\n        context.out(\"</div>\");\n    }\n    format_node(context, delta, left) {\n        // recurse\n        const nodeType = delta._t === \"a\" ? \"array\" : \"object\";\n        context.out(`<ul class=\"jsondiffpatch-node jsondiffpatch-node-type-${nodeType}\">`);\n        this.formatDeltaChildren(context, delta, left);\n        context.out(\"</ul>\");\n    }\n    format_added(context, delta) {\n        context.out('<div class=\"jsondiffpatch-value\">');\n        this.formatValue(context, delta[0]);\n        context.out(\"</div>\");\n    }\n    format_modified(context, delta) {\n        context.out('<div class=\"jsondiffpatch-value jsondiffpatch-left-value\">');\n        this.formatValue(context, delta[0]);\n        context.out(\"</div>\" + '<div class=\"jsondiffpatch-value jsondiffpatch-right-value\">');\n        this.formatValue(context, delta[1]);\n        context.out(\"</div>\");\n    }\n    format_deleted(context, delta) {\n        context.out('<div class=\"jsondiffpatch-value\">');\n        this.formatValue(context, delta[0]);\n        context.out(\"</div>\");\n    }\n    format_moved(context, delta) {\n        context.out('<div class=\"jsondiffpatch-value\">');\n        this.formatValue(context, delta[0]);\n        context.out(`</div><div class=\"jsondiffpatch-moved-destination\">${delta[1]}</div>`);\n        // draw an SVG arrow from here to move destination\n        context.out(\n        /* jshint multistr: true */\n        '<div class=\"jsondiffpatch-arrow\" ' +\n            `style=\"position: relative; left: -34px;\">\n          <svg width=\"30\" height=\"60\" ` +\n            `style=\"position: absolute; display: none;\">\n          <defs>\n              <marker id=\"markerArrow\" markerWidth=\"8\" markerHeight=\"8\"\n                 refx=\"2\" refy=\"4\" stroke=\"#88f\"\n                     orient=\"auto\" markerUnits=\"userSpaceOnUse\">\n                  <path d=\"M1,1 L1,7 L7,4 L1,1\" style=\"fill: #339;\" />\n              </marker>\n          </defs>\n          <path d=\"M30,0 Q-10,25 26,50\"\n            style=\"stroke: #88f; stroke-width: 2px; fill: none; ` +\n            `stroke-opacity: 0.5; marker-end: url(#markerArrow);\"\n          ></path>\n          </svg>\n      </div>`);\n        context.hasArrows = true;\n    }\n    format_textdiff(context, delta) {\n        context.out('<div class=\"jsondiffpatch-value\">');\n        this.formatTextDiffString(context, delta[0]);\n        context.out(\"</div>\");\n    }\n}\nfunction htmlEscape(value) {\n    if (typeof value === \"number\")\n        return value;\n    let html = String(value);\n    const replacements = [\n        [/&/g, \"&amp;\"],\n        [/</g, \"&lt;\"],\n        [/>/g, \"&gt;\"],\n        [/'/g, \"&apos;\"],\n        [/\"/g, \"&quot;\"],\n    ];\n    for (const replacement of replacements) {\n        html = html.replace(replacement[0], replacement[1]);\n    }\n    return html;\n}\nconst adjustArrows = function jsondiffpatchHtmlFormatterAdjustArrows(nodeArg) {\n    const node = nodeArg || document;\n    const getElementText = ({ textContent, innerText }) => textContent || innerText;\n    const eachByQuery = (el, query, fn) => {\n        const elems = el.querySelectorAll(query);\n        for (let i = 0, l = elems.length; i < l; i++) {\n            fn(elems[i]);\n        }\n    };\n    const eachChildren = ({ children }, fn) => {\n        for (let i = 0, l = children.length; i < l; i++) {\n            const element = children[i];\n            if (!element)\n                continue;\n            fn(element, i);\n        }\n    };\n    eachByQuery(node, \".jsondiffpatch-arrow\", ({ parentNode, children, style }) => {\n        const arrowParent = parentNode;\n        const svg = children[0];\n        const path = svg.children[1];\n        svg.style.display = \"none\";\n        const moveDestinationElem = arrowParent.querySelector(\".jsondiffpatch-moved-destination\");\n        if (!(moveDestinationElem instanceof HTMLElement))\n            return;\n        const destination = getElementText(moveDestinationElem);\n        const container = arrowParent.parentNode;\n        if (!container)\n            return;\n        let destinationElem;\n        eachChildren(container, (child) => {\n            if (child.getAttribute(\"data-key\") === destination) {\n                destinationElem = child;\n            }\n        });\n        if (!destinationElem) {\n            return;\n        }\n        try {\n            const distance = destinationElem.offsetTop - arrowParent.offsetTop;\n            svg.setAttribute(\"height\", `${Math.abs(distance) + 6}`);\n            style.top = `${-8 + (distance > 0 ? 0 : distance)}px`;\n            const curve = distance > 0\n                ? `M30,0 Q-10,${Math.round(distance / 2)} 26,${distance - 4}`\n                : `M30,${-distance} Q-10,${Math.round(-distance / 2)} 26,4`;\n            path.setAttribute(\"d\", curve);\n            svg.style.display = \"\";\n        }\n        catch (err) {\n            // continue regardless of error\n            console.debug(`[jsondiffpatch] error adjusting arrows: ${err}`);\n        }\n    });\n};\nexport const showUnchanged = (show, node, delay) => {\n    const el = node || document.body;\n    const prefix = \"jsondiffpatch-unchanged-\";\n    const classes = {\n        showing: `${prefix}showing`,\n        hiding: `${prefix}hiding`,\n        visible: `${prefix}visible`,\n        hidden: `${prefix}hidden`,\n    };\n    const list = el.classList;\n    if (!list) {\n        return;\n    }\n    if (!delay) {\n        list.remove(classes.showing);\n        list.remove(classes.hiding);\n        list.remove(classes.visible);\n        list.remove(classes.hidden);\n        if (show === false) {\n            list.add(classes.hidden);\n        }\n        return;\n    }\n    if (show === false) {\n        list.remove(classes.showing);\n        list.add(classes.visible);\n        setTimeout(() => {\n            list.add(classes.hiding);\n        }, 10);\n    }\n    else {\n        list.remove(classes.hiding);\n        list.add(classes.showing);\n        list.remove(classes.hidden);\n    }\n    const intervalId = setInterval(() => {\n        adjustArrows(el);\n    }, 100);\n    setTimeout(() => {\n        list.remove(classes.showing);\n        list.remove(classes.hiding);\n        if (show === false) {\n            list.add(classes.hidden);\n            list.remove(classes.visible);\n        }\n        else {\n            list.add(classes.visible);\n            list.remove(classes.hidden);\n        }\n        setTimeout(() => {\n            list.remove(classes.visible);\n            clearInterval(intervalId);\n        }, delay + 400);\n    }, delay);\n};\nexport const hideUnchanged = (node, delay) => showUnchanged(false, node, delay);\nexport default HtmlFormatter;\nlet defaultInstance;\nexport function format(delta, left) {\n    if (!defaultInstance) {\n        defaultInstance = new HtmlFormatter();\n    }\n    return defaultInstance.format(delta, left);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * ```typescript\n * import macro from 'macro-decorators';\n * ```\n *\n * The `@macro` decorator can be used to define custom macro decorators for\n * getters and setters, which can DRY up code that is repetitive and boilerplate\n * heavy.\n *\n * ```ts\n * function fullNameMacro(firstNameKey, lastNameKey) {\n *   return macro(function() {\n *     return `${this[firstNameKey]} ${this[lastNameKey]}`;\n *   });\n * }\n *\n * class Person {\n *   firstName = 'Carol';\n *   lastName = 'Danvers';\n *\n *   @fullNameMacro('firstName', 'lastName')\n *   fullName;\n *\n *   @fullNameMacro('firstName', 'lastName')\n *   properName;\n * }\n *\n * let captainMarvel = new Person();\n * console.log(captainMarvel.fullName); // Carol Danvers\n * ```\n *\n * `macro` receives either [a getter function](#macrogetter), or a\n * [descriptor object](#macrodescriptor) that contains a getter and/or setter:\n *\n * ```ts\n * function fullNameMacro(firstNameKey, lastNameKey) {\n *   return macro({\n *     get() {\n *       return `${this[firstNameKey]} ${this[lastNameKey]}`;\n *     },\n *\n *     set(obj, key, value) {\n *        let [firstName, lastName] = value.split(' ');\n *\n *        this[firstNameKey] = firstName;\n *        this[lastNameKey] = lastName;\n *     }\n *   });\n * }\n *\n * class Person {\n *   firstName = 'Carol';\n *   lastName = 'Danvers';\n *\n *   @fullNameMacro('firstName', 'lastName')\n *   fullName;\n * }\n *\n *\n * let captainMarvel = new Person();\n *\n * console.log(captainMarvel.fullName); // Carol Danvers\n * captainMarvel.fullName = 'Monica Rambeau';\n *\n * console.log(captainMarvel.firstName); // Monica\n * console.log(captainMarvel.lastName); // Rambeau\n * ```\n *\n * The getter and setter functions both receive the class instance as the first\n * argument and the key being accessed as the second. The setter recieves tha\n * value to be set as the third argument. See the definitions for\n * [MacroGetter](#macrogetter) and [MacroSetter](#macrosetter) for more details.\n * Both functions are called with the class instance bound as the `this`\n * context, if possible.\n *\n * @param definition The definition of the macro to apply to the field\n */\nfunction macro(definition) {\n    let getter;\n    let setter;\n    if (typeof definition === 'function') {\n        getter = definition;\n    }\n    else {\n        getter = definition.get;\n        setter = definition.set;\n    }\n    return function (_target, key) {\n        let desc = {};\n        if (getter !== undefined) {\n            desc.get = function () {\n                return getter.call(this, this, key);\n            };\n        }\n        if (setter !== undefined) {\n            desc.set = function (value) {\n                return setter.call(this, this, key, value);\n            };\n        }\n        return desc;\n    };\n}\nexports.default = macro;\nfunction getPath(obj, path) {\n    let segments = path.split('.');\n    let current = obj;\n    for (let segment of segments) {\n        if (current === undefined || current === null) {\n            break;\n        }\n        current = typeof current.get === 'function' ? current.get(segment) : current[segment];\n    }\n    return current;\n}\nfunction getPaths(obj, paths) {\n    return paths.map(p => getPath(obj, p));\n}\nfunction setPath(obj, path, value) {\n    let objPath = path.substr(0, path.lastIndexOf('.'));\n    let key = path.substr(path.lastIndexOf('.') + 1);\n    let resolvedObj = objPath ? getPath(obj, objPath) : obj;\n    if (typeof resolvedObj.set === 'function') {\n        resolvedObj.set(key, value);\n    }\n    else {\n        resolvedObj[key] = value;\n    }\n}\n// **** Aliasing ****\n/**\n * ```typescript\n * import { alias } from 'macro-decorators';\n * ```\n *\n * A macro that aliases another property.\n *\n * ```typescript\n * class Person {\n *   fullName = 'Tony Stark';\n *\n *   @alias('fullName') properName;\n * }\n *\n * let ironMan = new Person();\n * console.log(ironMan.properName); // Tony Stark\n * ```\n *\n * The alias is both ways, so updating the aliased property will also update the\n * original property.\n *\n * ```typescript\n * class Person {\n *   fullName = 'Tony Stark';\n *\n *   @alias('fullName') properName;\n * }\n *\n * let ironMan = new Person();\n * ironMan.properName = 'Anthony Stark';\n * console.log(ironMan.fullName); // Anthony Stark\n * ```\n *\n * @param path The property path to alias\n */\nfunction alias(path) {\n    return macro({\n        get(obj) {\n            return getPath(obj, path);\n        },\n        set(obj, _key, value) {\n            setPath(obj, path, value);\n        },\n    });\n}\nexports.alias = alias;\n/**\n * ```typescript\n * import { deprecatingAlias } from 'macro-decorators';\n * ```\n *\n * A macro that aliases another property, but warns the user if they access it.\n * This is useful for renaming properties or warning users of pending\n * deprecations.\n *\n * ```typescript\n * class Person {\n *   fullName = 'Tony Stark';\n *\n *   @deprecatingAlias('fullName', 'No longer necessary since the press conference')\n *   secretIdentity;\n * }\n *\n * let ironMan = new Person();\n * console.log(ironMan.secretIdentity); // Tony Stark\n * ```\n *\n * @param path The property path to alias\n * @param message The warning to log when the property is accessed\n */\nfunction deprecatingAlias(path, message) {\n    return macro({\n        get(obj, key) {\n            console.warn(`You got ${obj}#${String(key)}, but that value has been deprecated: ${message}`);\n            return getPath(obj, path);\n        },\n        set(obj, key, value) {\n            console.warn(`You set ${obj}#${String(key)}, but that value has been deprecated: ${message}`);\n            setPath(obj, path, value);\n        },\n    });\n}\nexports.deprecatingAlias = deprecatingAlias;\n/**\n * ```typescript\n * import { reads } from 'macro-decorators';\n * ```\n *\n * A macro that provides a read-only alias to another property.\n *\n * ```typescript\n * class Person {\n *   fullName = 'Tony Stark';\n *\n *   @reads('fullName') properName;\n * }\n *\n * let ironMan = new Person();\n * console.log(ironMan.properName); // Tony Stark\n *\n * ironMan.properName = 'Anthony Stark'; // Throws an error\n * ```\n *\n * A default value can be provided as the second parameter to the decorator. If\n * the value that is aliased is nullish, then the default value will be returned\n * instead:\n *\n * ```typescript\n * class Hero {\n *   ownedBy;\n *\n *   @reads('ownedBy', 'Marvel') universe;\n * }\n *\n * let batman = new Hero();\n * console.log(batman.universe); // Marvel\n *\n * batman.ownedBy = 'DC';\n * console.log(batman.universe); // DC\n * ```\n *\n * If the default value is a function, then the function will be called and its\n * return value will be used instead. This should be used for values like arrays\n * or objects, so they are unique per-instance of the class.\n *\n * ```typescript\n * class Person {\n *   @reads('contacts', () => []) friends;\n * }\n * ```\n *\n * @param path The property path to alias\n * @param defaultValue The default value to set the property to if the aliased\n *   property is nullish. If a function, the function will be called.\n */\nfunction reads(path, defaultValue) {\n    return macro(obj => {\n        let value = getPath(obj, path);\n        if (value === null || value === undefined) {\n            value = typeof defaultValue === 'function' ? defaultValue() : defaultValue;\n        }\n        return value;\n    });\n}\nexports.reads = reads;\n/**\n * ```typescript\n * import { overridableReads } from 'macro-decorators';\n * ```\n *\n * A macro that provides an overridable read-only alias to another property.\n * When set, the alias will be overwritten and disconnected from the value that\n * was aliased, disconnecting the two for good.\n *\n * ```typescript\n * class Hero {\n *   ownedBy = 'Disney';\n *\n *   @overridableReads('ownedBy') universe;\n * }\n *\n * let wolverine = new Hero();\n * console.log(wolverine.universe); // Disney\n *\n * wolverine.universe = 'X-men';\n * console.log(wolverine.ownedBy); // Disney\n * console.log(wolverine.universe); // X-men\n * ```\n *\n * @param path The property path to alias\n */\nfunction overridableReads(path) {\n    return macro({\n        get(obj) {\n            return getPath(obj, path);\n        },\n        set(obj, key, value) {\n            Object.defineProperty(obj, key, {\n                writable: true,\n                configurable: true,\n                value,\n            });\n        },\n    });\n}\nexports.overridableReads = overridableReads;\n// **** Logical Operations ****\nfunction isEmpty(value) {\n    if (!Boolean(value)) {\n        return true;\n    }\n    else if (Array.isArray(value) && value.length === 0) {\n        return true;\n    }\n    return false;\n}\n/**\n * ```typescript\n * import { and } from 'macro-decorators';\n * ```\n *\n * A macro that gets the values of the paths that are passed to it, performs a\n * logical and on them, and returns the result.\n *\n * ```typescript\n * class Person {\n *   hasSuit = true;\n *   hasPowers = false;\n *   hasCoolName = true;\n *\n *   @and('hasSuit', 'hasPowers', 'hasCoolName')\n *   isHero;\n * }\n *\n * let person = new Person();\n * console.log(person.isHero); // false\n *\n * person.hasPowers = true;\n * console.log(person.isHero); // true\n * ```\n *\n * @param paths The paths of the properties to perform the `and` operation on\n */\nfunction and(...paths) {\n    return macro(obj => getPaths(obj, paths).reduce((a, b) => a && b, true));\n}\nexports.and = and;\n/**\n * ```typescript\n * import { bool } from 'macro-decorators';\n * ```\n *\n * A macro that gets the value of the path that is passed to it, and returns\n * its coerced boolean value.\n *\n * ```typescript\n * class Person {\n *   name;\n *\n *   @bool('name') hasName;\n * }\n *\n * let wonderWoman = new Person();\n * console.log(wonderWoman.hasName); // false\n *\n * person.name = 'Diana Prince';\n * console.log(wonderWoman.hasName); // true\n * ```\n *\n * @param path The path of the property to return the boolean value of\n */\nfunction bool(path) {\n    return macro(obj => Boolean(getPath(obj, path)));\n}\nexports.bool = bool;\n/**\n * ```typescript\n * import { empty } from 'macro-decorators';\n * ```\n *\n * Returns whether or not a field is empty. The field will be considered empty\n * if it is falsy OR if it is an empty array.\n *\n * ```typescript\n * class TodoList {\n *   todos = [];\n *\n *   @empty('todos') done;\n * }\n *\n * let list = new TodoList();\n * console.log(list.done); // true\n *\n * list.todos.push('Stop Thanos');\n * console.log(list.done); // false\n * ```\n *\n * @param path The path of the property to check for emptiness\n */\nfunction empty(path) {\n    return macro(obj => isEmpty(getPath(obj, path)));\n}\nexports.empty = empty;\n/**\n * ```typescript\n * import { equal } from 'macro-decorators';\n * ```\n *\n * A macro that gets the provided path and checks to see if it is equal to the\n * given value.\n *\n * ```typescript\n * class Person {\n *   name;\n *\n *   @equal('name', 'Tony Stark') isIronMan;\n * }\n *\n * let tony = new Person();\n * console.log(tony.isIronMan); // false\n *\n * tony.name = 'Tony Stark';\n * console.log(tony.isIronMan); // true\n * ```\n *\n * @param path The path of the value to compare\n * @param value The value to compare against\n */\nfunction equal(path, value) {\n    return macro(obj => getPath(obj, path) === value);\n}\nexports.equal = equal;\n/**\n * ```typescript\n * import { gt } from 'macro-decorators';\n * ```\n *\n * A macro that gets the provided path and compares it to see if it is greater\n * than the given value.\n *\n * ```typescript\n * class Person {\n *   age = 64;\n *\n *   @gt('age', 64) isSeniorCitizen;\n * }\n *\n * let cap = new Person();\n * console.log(cap.isSeniorCitizen); // false;\n *\n * cap.age++;\n * console.log(cap.isSeniorCitizen); // true;\n * ```\n *\n * @param path The path of the value to compare\n * @param value The value to compare against\n */\nfunction gt(path, value) {\n    return macro(obj => getPath(obj, path) > value);\n}\nexports.gt = gt;\n/**\n * ```typescript\n * import { gte } from 'macro-decorators';\n * ```\n * A macro that gets the provided path and compares it to see if it is greater\n * than or equal to the given value.\n *\n * ```typescript\n * class Person {\n *   age = 64;\n *\n *   @gte('age', 65) isSeniorCitizen;\n * }\n *\n * let cap = new Person();\n * console.log(cap.isSeniorCitizen); // false;\n *\n * cap.age++;\n * console.log(cap.isSeniorCitizen); // true;\n * ```\n *\n * @param path The path of the value to compare\n * @param value The value to compare against\n */\nfunction gte(path, value) {\n    return macro(obj => getPath(obj, path) >= value);\n}\nexports.gte = gte;\n/**\n * ```typescript\n * import { not } from 'macro-decorators';\n * ```\n *\n * A macro that returns the logical not of the provided path.\n *\n * ```typescript\n * class Car {\n *   speed = 0;\n *\n *   @not('speed') isParked;\n * }\n *\n * let batmobile = new Car();\n * console.log(batmobile.isParked); // true\n *\n * batmobile.speed = 100;\n * console.log(batmobile.isParked); // false\n * ```\n *\n * @param path The path of the property to perform the logical not on\n */\nfunction not(path) {\n    return macro(obj => !getPath(obj, path));\n}\nexports.not = not;\n/**\n * ```typescript\n * import { notEmpty } from 'macro-decorators';\n * ```\n *\n * Returns whether or not a field is NOT empty. The field will be considered\n * non-empty if it is truthy OR if it is a non-empty array.\n *\n * ```typescript\n * class Person {\n *   frends = [];\n *\n *   @notEmpty('friends') hasFriends;\n * }\n *\n * let hulk = new Person();\n * console.log(hulk.hasFriends); // false\n *\n * hulk.friends.push('Thor');\n * console.log(hulk.hasFriends); // true\n * ```\n *\n * @param path The path of the property to check for non-emptiness\n */\nfunction notEmpty(path) {\n    return macro(obj => !isEmpty(getPath(obj, path)));\n}\nexports.notEmpty = notEmpty;\n/**\n * ```typescript\n * import { match } from 'macro-decorators';\n * ```\n *\n * A macro that returns whether or not the provided path matches a regular\n * expression.\n *\n * ```typescript\n * class Person {\n *   age = 29;\n *\n *   @match('age', /\\d+/) ageIsValid;\n * }\n *\n * let person = new Person();\n * console.log(person.ageIsValid); // true\n *\n * person.age = 'twenty-nine';\n * console.log(person.ageIsValid); // false\n * ```\n *\n * @param path The path of the value to match against\n * @param value The regex to match\n */\nfunction match(path, regex) {\n    return macro(obj => regex.test(getPath(obj, path)));\n}\nexports.match = match;\n/**\n * ```typescript\n * import { nullish } from 'macro-decorators';\n * ```\n *\n * A macro that returns whether or not the provided path is nullish.\n *\n * @param path The path of the property to check for nullish-ness of\n */\nfunction nullish(path) {\n    return macro(obj => {\n        let value = getPath(obj, path);\n        return value === null || value === undefined;\n    });\n}\nexports.nullish = nullish;\n/**\n * ```typescript\n * import { or } from 'macro-decorators';\n * ```\n *\n * A macro that gets the values of the paths that are passed to it, performs a\n * logical or on them, and returns the result.\n *\n * ```typescript\n * class Person {\n *   hasSuit = false;\n *   hasPowers = false;\n *   hasCoolName = false;\n *   savesLives = false\n *\n *   @or('hasSuit', 'hasPowers', 'hasCoolName', 'savesLives')\n *   isHero;\n * }\n *\n * let person = new Person();\n * console.log(person.isHero); // false\n *\n * person.savesLives = true;\n * console.log(person.isHero); // true\n * ```\n *\n * @param path The paths of the properties to perform the `or` operation on\n */\nfunction or(...paths) {\n    return macro(obj => getPaths(obj, paths).reduce((a, b) => a || b, false));\n}\nexports.or = or;\n/**\n * ```typescript\n * import { lt } from 'macro-decorators';\n * ```\n *\n * A macro that gets the provided path and compares it to see if it is less than\n * to the given value.\n *\n * ```typescript\n * class Person {\n *   age = 16;\n *\n *   @lt('age', 18) isAKid;\n * }\n *\n * let spidey = new Person();\n * console.log(spidey.isAKid); // true;\n *\n * spidey.age = 18;\n * console.log(spidey.isAKid); // false;\n * ```\n *\n *\n * @param path The path of the value to compare\n * @param value The value to compare against\n */\nfunction lt(path, value) {\n    return macro(obj => getPath(obj, path) < value);\n}\nexports.lt = lt;\n/**\n * ```typescript\n * import { lte } from 'macro-decorators';\n * ```\n *\n * A macro that gets the provided path and compares it to see if it is less than\n * or equal to the given value.\n *\n * ```typescript\n * class Person {\n *   age = 16;\n *\n *   @lte('age', 17) isAKid;\n * }\n *\n * let spidey = new Person();\n * console.log(spidey.isAKid); // true;\n *\n * spidey.age = 18;\n * console.log(spidey.isAKid); // false;\n * ```\n *\n *\n * @param path The path of the value to compare\n * @param value The value to compare against\n */\nfunction lte(path, value) {\n    return macro(obj => getPath(obj, path) <= value);\n}\nexports.lte = lte;\n// **** Arrays ****\nfunction setFrom(arr) {\n    let set = new Set();\n    arr.forEach(v => set.add(v));\n    return set;\n}\nfunction getValues(set) {\n    if (set.values) {\n        return Array.from(set);\n    }\n    let values = [];\n    set.forEach(v => values.push(v));\n    return values;\n}\n/**\n * ```typescript\n * import { collect } from 'macro-decorators';\n * ```\n *\n * A macro that collects the values of one or more property paths and returns\n * them in an array.\n *\n * ```js\n * class Person {\n *   suit;\n *   cape;\n *   helmet;\n *\n *   @collect('suit', 'cape', 'helmet') costumeParts;\n * }\n *\n * let ironMan = new Person();\n * console.log(ironMan.costumeParts); // [undefined, undefined, undefined];\n *\n * ironMan.suit = 'Iron Suit';\n * ironMan.helmet = 'Iron Helmet';\n * console.log(ironMan.costumeParts); // ['Iron Suit', undefined, 'Iron Helmet'];\n * ```\n *\n * @param paths The paths of the properties to collect into the array\n */\nfunction collect(...paths) {\n    return macro(obj => getPaths(obj, paths));\n}\nexports.collect = collect;\n/**\n * ```typescript\n * import { diff } from 'macro-decorators';\n * ```\n *\n * A macro that returns a new array with all the items from the first array\n * that are not in any of the other arrays passed to it.\n *\n * ```typescript\n * class Hamster {\n *   likes = [\n *     'banana',\n *     'grape',\n *     'kale'\n *   ];\n *\n *   fruits = [\n *     'grape',\n *     'kale',\n *   ]\n *\n *   @diff('likes', 'fruits') wants;\n * }\n *\n * hamster.wants; // ['banana']\n * ```\n *\n * @param paths The paths of the arrays to diff\n */\nfunction diff(...paths) {\n    return macro(obj => {\n        let arrays = getPaths(obj, paths);\n        let intersect = arrays.shift();\n        for (let arr of arrays) {\n            let values = setFrom(arr);\n            intersect = intersect.filter((v) => !values.has(v));\n        }\n        return intersect;\n    });\n}\nexports.diff = diff;\n/**\n * ```typescript\n * import { filter } from 'macro-decorators';\n * ```\n *\n * A macro that returns an array filtered by a filter function.\n *\n * ```typescript\n * class Earth {\n *   people = [\n *     {\n *       name: 'Carol Danvers',\n *       isHero: true,\n *     },\n *     {\n *       name: 'Tony Stark',\n *       isHero: true,\n *     },\n *     {\n *       name: 'Otto Octavius',\n *       isVillain: true,\n *     },\n *   ];\n *\n *   @filter('people', p => p.isHero) heroes;\n * }\n *\n * let earth = new Earth();\n * console.log(earth.heroes); // [{ name: 'Carol Danvers', ... }, { name: 'Tony Stark', ... }]\n * ```\n *\n * @param path The path of the array to filter\n * @param fn The callback function to filter the array with\n */\nfunction filter(path, fn) {\n    return macro(obj => getPath(obj, path).filter(fn));\n}\nexports.filter = filter;\n/**\n * ```typescript\n * import { filterBy } from 'macro-decorators';\n * ```\n *\n * A macro that returns an array of objects filtered by a property on the\n * objects.\n *\n * ```typescript\n * class Earth {\n *   people = [\n *     {\n *       name: 'Carol Danvers',\n *       isHero: true,\n *     },\n *     {\n *       name: 'Tony Stark',\n *       isHero: true,\n *     },\n *     {\n *       name: 'Otto Octavius',\n *       isHero: false,\n *     },\n *   ];\n *\n *   @filter('people', 'isHero') heroes;\n * }\n *\n * let earth = new Earth();\n * console.log(earth.heroes); // [{ name: 'Carol Danvers', ... }, { name: 'Tony Stark', ... }]\n * ```\n *\n * A value can also be passed to compare the property to.\n *\n * ```typescript\n * class Earth {\n *   people = [\n *     {\n *       name: 'Carol Danvers',\n *       isHero: true,\n *     },\n *     {\n *       name: 'Tony Stark',\n *       isHero: true,\n *     },\n *     {\n *       name: 'Otto Octavius',\n *       isHero: false,\n *     },\n *   ];\n *\n *   @filter('people', 'isHero', false) villains;\n * }\n *\n * let earth = new Earth();\n * console.log(earth.heroes); // [{ name: 'Otto Octavius', ... }]\n * ```\n *\n * @param path The path of the array of objects to filter\n * @param key The key to filter the objects by\n * @param value A value to compare against when filtering\n */\nfunction filterBy(path, key, value) {\n    if (value !== undefined) {\n        return filter(path, (v) => v[key] === value);\n    }\n    else {\n        return filter(path, (v) => Boolean(v[key]));\n    }\n}\nexports.filterBy = filterBy;\n/**\n * ```typescript\n * import { intersect } from 'macro-decorators';\n * ```\n *\n * A macro that returns the intersection of one or more arrays that are passed\n * to it:\n *\n * ```typescript\n * class NumbersBelowTen {\n *   prime = [1, 2, 3, 5, 7];\n *   fib = [1, 1, 2, 3, 5, 8];\n *   odd = [1, 3, 5, 7, 9];\n *\n *   @intersect('prime', 'fib', 'odd') superSpecialNums;\n * }\n *\n * let belowTen = new NumbersBelowTen();\n * console.log(belowTen.superSpecialNums); // [1,3,5]\n * ```\n *\n * @param paths The paths of the arrays to get the intersection of\n */\nfunction intersect(...paths) {\n    return macro(obj => {\n        let arrays = getPaths(obj, paths);\n        let intersect = arrays.shift();\n        for (let arr of arrays) {\n            let values = setFrom(arr);\n            intersect = intersect.filter((v) => values.has(v));\n        }\n        return intersect;\n    });\n}\nexports.intersect = intersect;\n/**\n * ```typescript\n * import { map } from 'macro-decorators';\n * ```\n *\n * A macro that returns an array mapped by a function.\n *\n * ```typescript\n * class Earth {\n *   people = [\n *     {\n *       name: 'Carol Danvers',\n *     },\n *     {\n *       name: 'Tony Stark',\n *     },\n *     {\n *       name: 'Otto Octavius',\n *     },\n *   ];\n *\n *   @map('people', p => p.name) names;\n * }\n *\n * let earth = new Earth();\n * console.log(earth.names); // ['Carol Danvers', 'Tony Stark', 'Otto Octavius']\n * ```\n *\n * @param path The path of the array to map over\n * @param fn The function to map over the array with\n */\nfunction map(path, fn) {\n    return macro(obj => getPath(obj, path).map(fn));\n}\nexports.map = map;\n/**\n * ```typescript\n * import { mapBy } from 'macro-decorators';\n * ```\n *\n * A macro that returns an array of objects mapped by the specified key.\n *\n * ```typescript\n * class Earth {\n *   people = [\n *     {\n *       name: 'Carol Danvers',\n *     },\n *     {\n *       name: 'Tony Stark',\n *     },\n *     {\n *       name: 'Otto Octavius',\n *     },\n *   ];\n *\n *   @map('people', 'name') names;\n * }\n *\n * let earth = new Earth();\n * console.log(earth.names); // ['Carol Danvers', 'Tony Stark', 'Otto Octavius']\n * ```\n *\n * @param path The path of the array of objects to map over\n * @param key The key of the objects to pluck into the new array\n */\nfunction mapBy(path, key) {\n    return map(path, v => v[key]);\n}\nexports.mapBy = mapBy;\n/**\n * ```typescript\n * import { max } from 'macro-decorators';\n * ```\n *\n * A macro that returns the maximum value from the specified array.\n *\n * ```typescript\n * class NumbersBelowTen {\n *   prime = [1, 2, 3, 5, 7];\n *   fib = [1, 1, 2, 3, 5, 8];\n *   odd = [1, 3, 5, 7, 9];\n *\n *   @max('prime') biggestPrime;\n * }\n *\n * let belowTen = new NumbersBelowTen();\n * console.log(belowTen.biggestPrime); // 7\n * ```\n *\n * @param path The path to the array to find the max value of\n */\nfunction max(path) {\n    return macro(obj => Math.max(...getPath(obj, path)));\n}\nexports.max = max;\n/**\n * ```typescript\n * import { min } from 'macro-decorators';\n * ```\n *\n * A macro that returns the minimum value from the specified array.\n *\n * ```typescript\n * class NumbersBelowTen {\n *   prime = [1, 2, 3, 5, 7];\n *   fib = [1, 1, 2, 3, 5, 8];\n *   odd = [1, 3, 5, 7, 9];\n *\n *   @max('prime') smallestPrime;\n * }\n *\n * let belowTen = new NumbersBelowTen();\n * console.log(belowTen.smallestPrime); // 1\n * ```\n *\n * @param path The path to the array to find the min value of\n */\nfunction min(path) {\n    return macro(obj => Math.min(...getPath(obj, path)));\n}\nexports.min = min;\n/**\n * ```typescript\n * import { sort } from 'macro-decorators';\n * ```\n *\n * A macro that returns the specified array sorted by a sort function. The array\n * is duplicated, so the original is not modified in any way.\n *\n * ```typescript\n * class Earth {\n *   people = [\n *     {\n *       name: 'Carol Danvers',\n *     },\n *     {\n *       name: 'Tony Stark',\n *     },\n *     {\n *       name: 'Otto Octavius',\n *     },\n *   ];\n *\n *   @sort('people', (person1, person2) => {\n *     return person1.name > person2.name ? 1 : -1\n *   }) sortedPeople;\n * }\n *\n * let earth = new Earth();\n * console.log(earth.sortedPeople); // [{ name: 'Carol Danvers', ... }, { name: 'Otto Octavius', ... }, { name: 'Tony Stark', ... }]\n * ```\n *\n * @param path The path of the array to sort\n * @param fn The function to sort the array with\n */\nfunction sort(path, fn) {\n    return macro(obj => getPath(obj, path)\n        .slice()\n        .sort(fn));\n}\nexports.sort = sort;\n/**\n * ```typescript\n * import { sortBy } from 'macro-decorators';\n * ```\n *\n * A macro that returns the specified array of objects sorted by the specified\n * key. Uses standard JavaScript comparisons (`>` and `<` operators) for\n * sorting. Can also specify a direction (ascending or descending).\n *\n * ```typescript\n * class Earth {\n *   people = [\n *     {\n *       name: 'Carol Danvers',\n *     },\n *     {\n *       name: 'Tony Stark',\n *     },\n *     {\n *       name: 'Otto Octavius',\n *     },\n *   ];\n *\n *   @sort('people', 'name') sortedPeople;\n * }\n *\n * let earth = new Earth();\n * console.log(earth.sortedPeople); // [{ name: 'Carol Danvers', ... }, { name: 'Otto Octavius', ... }, { name: 'Tony Stark', ... }]\n * ```\n *\n * @param path The path of the array of objects to sort\n * @param key The key of the value to sort the objects by\n * @param asc Whether the sort should be ascending or descinding\n */\nfunction sortBy(path, key, asc = true) {\n    return sort(path, (a, b) => {\n        if (a[key] < b[key]) {\n            return asc ? -1 : 1;\n        }\n        else if (a[key] > b[key]) {\n            return asc ? 1 : -1;\n        }\n        return 0;\n    });\n}\nexports.sortBy = sortBy;\n/**\n * ```typescript\n * import { sum } from 'macro-decorators';\n * ```\n *\n * A macro that returns the sum of the values in the specified array.\n *\n * ```typescript\n * class NumbersBelowTen {\n *   prime = [1, 2, 3, 5, 7];\n *   fib = [1, 1, 2, 3, 5, 8];\n *   odd = [1, 3, 5, 7, 9];\n *\n *   @sum('prime') sumOfThePrimes;\n * }\n *\n * let belowTen = new NumbersBelowTen();\n * console.log(belowTen.sumOfThePrimes); // 18\n * ```\n *\n * @param path The path of the array to sum\n */\nfunction sum(path) {\n    return macro(obj => getPath(obj, path).reduce((s, v) => s + v, 0));\n}\nexports.sum = sum;\n/**\n * ```typescript\n * import { union } from 'macro-decorators';\n * ```\n *\n * A macro that returns the intersection of one or more arrays that are passed\n * to it:\n *\n * ```typescript\n * class NumbersBelowTen {\n *   prime = [1, 2, 3, 5, 7];\n *   fib = [1, 1, 2, 3, 5, 8];\n *   odd = [1, 3, 5, 7, 9];\n *\n *   @union('prime', 'fib', 'odd') otherSuperSpecialNums;\n * }\n *\n * let belowTen = new NumbersBelowTen();\n * console.log(belowTen.otherSuperSpecialNums); // [1,2,3,5,7,8,9]\n * ```\n *\n * @param paths The paths of the arrays to get the union of\n */\nfunction union(...paths) {\n    return macro(obj => {\n        let arrays = getPaths(obj, paths);\n        let union = new Set();\n        for (let arr of arrays) {\n            arr.forEach((v) => union.add(v));\n        }\n        return getValues(union);\n    });\n}\nexports.union = union;\n/**\n * ```typescript\n * import { unique } from 'macro-decorators';\n * ```\n *\n * A macro that returns the unique values in an array.\n *\n * ```typescript\n * class NumbersBelowTen {\n *   prime = [1, 2, 3, 5, 7];\n *   fib = [1, 1, 2, 3, 5, 8];\n *   odd = [1, 3, 5, 7, 9];\n *\n *   @unique('fib') uniqueFib;\n * }\n *\n * let belowTen = new NumbersBelowTen();\n * console.log(belowTen.uniqueFib); // [1,2,3,5,8]\n * ```\n *\n * @param path The path of the array to get all unique values of\n */\nfunction unique(path) {\n    return union(path);\n}\nexports.unique = unique;\n/**\n * ```typescript\n * import { unique } from 'macro-decorators';\n * ```\n * A macro that returns the values in an array of objects that are unique by the\n * specified key.\n *\n * ```typescript\n * class Person {\n *   contacts = [\n *     { name: 'Jessica', phone: '555-1234' }\n *     { name: 'Jake', phone: '555-4321' }\n *     { name: 'Jess', phone: '555-1234' }\n *   ]\n *\n *   @uniqueBy('contacts', 'phone') friends;\n * }\n *\n * let person = new Person();\n * console.log(person.friends); // [{ name: 'Jessica', ... }, { name: 'Jake', ... }]\n * ```\n *\n * @param path The path of the array of objects\n * @param key The key of the value to check for uniqueness\n */\nfunction uniqueBy(path, key) {\n    return macro(obj => {\n        let arr = getPath(obj, path);\n        let union = new Set();\n        let values = [];\n        arr.forEach((v) => {\n            let keyValue = v[key];\n            if (!union.has(keyValue)) {\n                union.add(keyValue);\n                values.push(v);\n            }\n        });\n        return values;\n    });\n}\nexports.uniqueBy = uniqueBy;\n","import type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Gets the original marked default options.\n */\nexport function _getDefaults<ParserOutput = string, RendererOutput = string>(): MarkedOptions<ParserOutput, RendererOutput> {\n  return {\n    async: false,\n    breaks: false,\n    extensions: null,\n    gfm: true,\n    hooks: null,\n    pedantic: false,\n    renderer: null,\n    silent: false,\n    tokenizer: null,\n    walkTokens: null,\n  };\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport let _defaults: MarkedOptions<any, any> = _getDefaults();\n\nexport function changeDefaults<ParserOutput = string, RendererOutput = string>(newDefaults: MarkedOptions<ParserOutput, RendererOutput>) {\n  _defaults = newDefaults;\n}\n","const noopTest = { exec: () => null } as unknown as RegExp;\n\nfunction cachedIndentRegex(createRegex: (indent: number) => RegExp) {\n  const cache: RegExp[] = [];\n  return (indent: number) => {\n    const cacheIndex = Math.max(0, Math.min(3, indent - 1));\n    let regex = cache[cacheIndex];\n    if (!regex) {\n      regex = createRegex(cacheIndex);\n      cache[cacheIndex] = regex;\n    }\n    return regex;\n  };\n}\n\nfunction edit(regex: string | RegExp, opt = '') {\n  let source = typeof regex === 'string' ? regex : regex.source;\n  const obj = {\n    replace: (name: string | RegExp, val: string | RegExp) => {\n      let valSource = typeof val === 'string' ? val : val.source;\n      valSource = valSource.replace(other.caret, '$1');\n      source = source.replace(name, valSource);\n      return obj;\n    },\n    getRegex: () => {\n      return new RegExp(source, opt);\n    },\n  };\n  return obj;\n}\n\n// use a default variable to ensure the regex is evaluated on client an not removed by minifiers\nconst supportsLookbehind = ((a = '') => {\ntry {\n  return !!new RegExp('(?<=1)(?<!1)' + a);\n} catch {\n  // See browser support here:\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Lookbehind_assertion\n  return false;\n}\n})();\n\nexport const other = {\n  codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n  outputLinkReplace: /\\\\([\\[\\]])/g,\n  indentCodeCompensation: /^(\\s+)(?:```)/,\n  beginningSpace: /^\\s+/,\n  endingHash: /#$/,\n  startingSpaceChar: /^ /,\n  endingSpaceChar: / $/,\n  nonSpaceChar: /[^ ]/,\n  newLineCharGlobal: /\\n/g,\n  tabCharGlobal: /\\t/g,\n  multipleSpaceGlobal: /\\s+/g,\n  blankLine: /^[ \\t]*$/,\n  doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n  blockquoteStart: /^ {0,3}>/,\n  blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n  blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n  listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n  listIsTask: /^\\[[ xX]\\] +\\S/,\n  listReplaceTask: /^\\[[ xX]\\] +/,\n  listTaskCheckbox: /\\[[ xX]\\]/,\n  anyLine: /\\n.*\\n/,\n  hrefBrackets: /^<(.*)>$/,\n  tableDelimiter: /[:|]/,\n  tableAlignChars: /^\\||\\| *$/g,\n  tableRowBlankLine: /\\n[ \\t]*$/,\n  tableAlignRight: /^ *-+: *$/,\n  tableAlignCenter: /^ *:-+: *$/,\n  tableAlignLeft: /^ *:-+ *$/,\n  startATag: /^<a /i,\n  endATag: /^<\\/a>/i,\n  startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n  endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n  startAngleBracket: /^</,\n  endAngleBracket: />$/,\n  pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n  unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n  escapeTest: /[&<>\"']/,\n  escapeReplace: /[&<>\"']/g,\n  escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n  escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n  caret: /(^|[^\\[])\\^/g,\n  percentDecode: /%25/g,\n  findPipe: /\\|/g,\n  splitPipe: / \\|/,\n  slashPipe: /\\\\\\|/g,\n  carriageReturn: /\\r\\n|\\r/g,\n  spaceLine: /^ +$/gm,\n  notSpaceStart: /^\\S*/,\n  endingNewline: /\\n$/,\n  listItemRegex: (bull: string) => new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`),\n  nextBulletRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`)),\n  hrRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`)),\n  fencesBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}(?:\\`\\`\\`|~~~)`)),\n  headingBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}#`)),\n  htmlBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}<(?:[a-z].*>|!--)`, 'i')),\n  blockquoteBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}>`)),\n};\n\n/**\n * Block-Level Grammar\n */\n\nconst newline = /^(?:[ \\t]*(?:\\n|$))+/;\nconst blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = / {0,3}(?:[*+-]|\\d{1,9}[.)])/;\nconst lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nconst lheading = edit(lheadingCore)\n  .replace(/bull/g, bullet) // lists can interrupt\n  .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n  .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n  .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n  .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n  .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n  .replace(/\\|table/g, '') // table not in commonmark\n  .getRegex();\nconst lheadingGfm = edit(lheadingCore)\n  .replace(/bull/g, bullet) // lists can interrupt\n  .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n  .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n  .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n  .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n  .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n  .replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/) // table can interrupt\n  .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/)\n  .replace('label', _blockLabel)\n  .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n  .getRegex();\n\nconst list = edit(/^(bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n  .replace(/bull/g, bullet)\n  .getRegex();\n\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n  + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n  + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n  + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n  + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n  + '|tr|track|ul';\nconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nconst html = edit(\n  '^ {0,3}(?:' // optional indentation\n+ '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n+ '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n+ '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n+ '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n+ '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n+ '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (6)\n+ '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) open tag\n+ '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) closing tag\n+ ')', 'i')\n  .replace('comment', _comment)\n  .replace('tag', _tag)\n  .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n  .getRegex();\n\nconst paragraph = edit(_paragraph)\n  .replace('hr', hr)\n  .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n  .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n  .replace('|table', '')\n  .replace('blockquote', ' {0,3}>')\n  .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n  .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]') // only lists starting from 1 can interrupt\n  .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n  .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n  .getRegex();\n\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n  .replace('paragraph', paragraph)\n  .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nconst blockNormal = {\n  blockquote,\n  code: blockCode,\n  def,\n  fences,\n  heading,\n  hr,\n  html,\n  lheading,\n  list,\n  newline,\n  paragraph,\n  table: noopTest,\n  text: blockText,\n};\n\ntype BlockKeys = keyof typeof blockNormal;\n\n/**\n * GFM Block Grammar\n */\n\nconst gfmTable = edit(\n  '^ *([^\\\\n ].*)\\\\n' // Header\n+ ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n+ '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n  .replace('hr', hr)\n  .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n  .replace('blockquote', ' {0,3}>')\n  .replace('code', '(?: {4}| {0,3}\\t)[^\\\\n]')\n  .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n  .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]') // only lists starting from 1 can interrupt\n  .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n  .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n  .getRegex();\n\nconst blockGfm: Record<BlockKeys, RegExp> = {\n  ...blockNormal,\n  lheading: lheadingGfm,\n  table: gfmTable,\n  paragraph: edit(_paragraph)\n    .replace('hr', hr)\n    .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n    .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n    .replace('table', gfmTable) // interrupt paragraphs with table\n    .replace('blockquote', ' {0,3}>')\n    .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n    .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]') // only lists starting from 1 can interrupt\n    .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n    .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n    .getRegex(),\n};\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nconst blockPedantic: Record<BlockKeys, RegExp> = {\n  ...blockNormal,\n  html: edit(\n    '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n    + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n    + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n    .replace('comment', _comment)\n    .replace(/tag/g, '(?!(?:'\n      + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n      + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n      + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n    .getRegex(),\n  def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n  heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n  fences: noopTest, // fences not supported\n  lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n  paragraph: edit(_paragraph)\n    .replace('hr', hr)\n    .replace('heading', ' *#{1,6} *[^\\n]')\n    .replace('lheading', lheading)\n    .replace('|table', '')\n    .replace('blockquote', ' {0,3}>')\n    .replace('|fences', '')\n    .replace('|list', '')\n    .replace('|html', '')\n    .replace('|tag', '')\n    .getRegex(),\n};\n\n/**\n * Inline-Level Grammar\n */\n\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\nconst _punctuation = /[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpace = /[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpace = /[^\\s\\p{P}\\p{S}]/u;\nconst punctuation = edit(/^((?![*_])punctSpace)/, 'u')\n  .replace(/punctSpace/g, _punctuationOrSpace).getRegex();\n\n// GFM allows ~ inside strong and em for strikethrough\nconst _punctuationGfmStrongEm = /(?!~)[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpaceGfmStrongEm = /(?!~)[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpaceGfmStrongEm = /(?:[^\\s\\p{P}\\p{S}]|~)/u;\n\n// sequences em should skip over [title](link), `code`, <html>\nconst blockSkip = edit(/link|precode-code|html/, 'g')\n  .replace('link', /\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/)\n  .replace('precode-', supportsLookbehind ? '(?<!`)()' : '(^^|[^`])')\n  .replace('code', /(?<b>`+)[^`]+\\k<b>(?!`)/)\n  .replace('html', /<(?! )[^<>]*?>/)\n  .getRegex();\n\nconst emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|([^\\s*]))?)|^_+(?:((?!_)punct)|([^\\s_]))?/;\n\nconst emStrongLDelim = edit(emStrongLDelimCore, 'u')\n  .replace(/punct/g, _punctuation)\n  .getRegex();\n\nconst emStrongLDelimGfm = edit(emStrongLDelimCore, 'u')\n  .replace(/punct/g, _punctuationGfmStrongEm)\n  .getRegex();\n\nconst emStrongRDelimAstCore =\n  '^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n+ '|[^*]+(?=[^*])' // Consume to delim\n+ '|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)' // (2) a***#, a*** can only be a Right Delimiter\n+ '|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)' // (3) #***a, ***a can only be Left Delimiter\n+ '|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)' // (4) ***# can only be Left Delimiter\n+ '|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)' // (5) #***# can be either Left or Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?=notPunctSpace)'; // (6) a***a can be either Left or Right Delimiter\n\nconst emStrongRDelimAst = edit(emStrongRDelimAstCore, 'gu')\n  .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n  .replace(/punctSpace/g, _punctuationOrSpace)\n  .replace(/punct/g, _punctuation)\n  .getRegex();\n\nconst emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, 'gu')\n  .replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm)\n  .replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm)\n  .replace(/punct/g, _punctuationGfmStrongEm)\n  .getRegex();\n\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit(\n  '^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n+ '|[^_]+(?=[^_])' // Consume to delim\n+ '|(?!_)punct(_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n+ '|notPunctSpace(_+)(?!_)(?=punctSpace|$)' // (2) a___#, a___ can only be a Right Delimiter\n+ '|(?!_)punctSpace(_+)(?=notPunctSpace)' // (3) #___a, ___a can only be Left Delimiter\n+ '|[\\\\s](_+)(?!_)(?=punct)' // (4) ___# can only be Left Delimiter\n+ '|(?!_)punct(_+)(?!_)(?=punct)', 'gu') // (5) #___# can be either Left or Right Delimiter\n  .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n  .replace(/punctSpace/g, _punctuationOrSpace)\n  .replace(/punct/g, _punctuation)\n  .getRegex();\n\n// Tilde left delimiter for strikethrough (similar to emStrongLDelim for asterisk)\nconst delLDelim = edit(/^~~?(?:((?!~)punct)|[^\\s~])/, 'u')\n  .replace(/punct/g, _punctuation)\n  .getRegex();\n\n// Tilde delimiter patterns for strikethrough (similar to asterisk)\nconst delRDelimCore =\n  '^[^~]+(?=[^~])' // Consume to delim\n+ '|(?!~)punct(~~?)(?=[\\\\s]|$)' // (1) #~~ can only be a Right Delimiter\n+ '|notPunctSpace(~~?)(?!~)(?=punctSpace|$)' // (2) a~~#, a~~ can only be a Right Delimiter\n+ '|(?!~)punctSpace(~~?)(?=notPunctSpace)' // (3) #~~a, ~~a can only be Left Delimiter\n+ '|[\\\\s](~~?)(?!~)(?=punct)' // (4) ~~# can only be Left Delimiter\n+ '|(?!~)punct(~~?)(?!~)(?=punct)' // (5) #~~# can be either Left or Right Delimiter\n+ '|notPunctSpace(~~?)(?=notPunctSpace)'; // (6) a~~a can be either Left or Right Delimiter\n\nconst delRDelim = edit(delRDelimCore, 'gu')\n  .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n  .replace(/punctSpace/g, _punctuationOrSpace)\n  .replace(/punct/g, _punctuation)\n  .getRegex();\n\nconst anyPunctuation = edit(/\\\\(punct)/, 'gu')\n  .replace(/punct/g, _punctuation)\n  .getRegex();\n\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n  .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n  .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n  .getRegex();\n\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit(\n  '^comment'\n    + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n    + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n    + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n    + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n    + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n  .replace('comment', _inlineComment)\n  .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n  .getRegex();\n\nconst _inlineLabel = /(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\\])|[^\\[\\]\\\\`])*?/;\n\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]+(?:\\n[ \\t]*)?|\\n[ \\t]*)(title))?\\s*\\)/)\n  .replace('label', _inlineLabel)\n  .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/)\n  .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n  .getRegex();\n\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n  .replace('label', _inlineLabel)\n  .replace('ref', _blockLabel)\n  .getRegex();\n\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n  .replace('ref', _blockLabel)\n  .getRegex();\n\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n  .replace('reflink', reflink)\n  .replace('nolink', nolink)\n  .getRegex();\n\nconst _caseInsensitiveProtocol = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/;\n\n/**\n * Normal Inline Grammar\n */\n\nconst inlineNormal = {\n  _backpedal: noopTest, // only used for GFM url\n  anyPunctuation,\n  autolink,\n  blockSkip,\n  br,\n  code: inlineCode,\n  del: noopTest,\n  delLDelim: noopTest,\n  delRDelim: noopTest,\n  emStrongLDelim,\n  emStrongRDelimAst,\n  emStrongRDelimUnd,\n  escape,\n  link,\n  nolink,\n  punctuation,\n  reflink,\n  reflinkSearch,\n  tag,\n  text: inlineText,\n  url: noopTest,\n};\n\ntype InlineKeys = keyof typeof inlineNormal;\n\n/**\n * Pedantic Inline Grammar\n */\n\nconst inlinePedantic: Record<InlineKeys, RegExp> = {\n  ...inlineNormal,\n  link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n    .replace('label', _inlineLabel)\n    .getRegex(),\n  reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n    .replace('label', _inlineLabel)\n    .getRegex(),\n};\n\n/**\n * GFM Inline Grammar\n */\n\nconst inlineGfm: Record<InlineKeys, RegExp> = {\n  ...inlineNormal,\n  emStrongRDelimAst: emStrongRDelimAstGfm,\n  emStrongLDelim: emStrongLDelimGfm,\n  delLDelim,\n  delRDelim,\n  url: edit(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/)\n    .replace('protocol', _caseInsensitiveProtocol)\n    .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n    .getRegex(),\n  _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n  del: /^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n  text: edit(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/)\n    .replace('protocol', _caseInsensitiveProtocol)\n    .getRegex(),\n};\n\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\nconst inlineBreaks: Record<InlineKeys, RegExp> = {\n  ...inlineGfm,\n  br: edit(br).replace('{2,}', '*').getRegex(),\n  text: edit(inlineGfm.text)\n    .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n    .replace(/\\{2,\\}/g, '*')\n    .getRegex(),\n};\n\n/**\n * exports\n */\n\nexport const block = {\n  normal: blockNormal,\n  gfm: blockGfm,\n  pedantic: blockPedantic,\n};\n\nexport const inline = {\n  normal: inlineNormal,\n  gfm: inlineGfm,\n  breaks: inlineBreaks,\n  pedantic: inlinePedantic,\n};\n\nexport interface Rules {\n  other: typeof other\n  block: Record<BlockKeys, RegExp>\n  inline: Record<InlineKeys, RegExp>\n}\n","import { _defaults } from './defaults.ts';\nimport {\n  rtrim,\n  splitCells,\n  findClosingBracket,\n  expandTabs,\n  trimTrailingBlankLines,\n} from './helpers.ts';\nimport type { Rules } from './rules.ts';\nimport type { _Lexer } from './Lexer.ts';\nimport type { Links, Tokens, Token } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\nfunction outputLink(cap: string[], link: Pick<Tokens.Link, 'href' | 'title'>, raw: string, lexer: _Lexer, rules: Rules): Tokens.Link | Tokens.Image {\n  const href = link.href;\n  const title = link.title || null;\n  const text = cap[1].replace(rules.other.outputLinkReplace, '$1');\n\n  lexer.state.inLink = true;\n  const token: Tokens.Link | Tokens.Image = {\n    type: cap[0].charAt(0) === '!' ? 'image' : 'link',\n    raw,\n    href,\n    title,\n    text,\n    tokens: lexer.inlineTokens(text),\n  };\n  lexer.state.inLink = false;\n  return token;\n}\n\nfunction indentCodeCompensation(raw: string, text: string, rules: Rules) {\n  const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n\n  if (matchIndentToCode === null) {\n    return text;\n  }\n\n  const indentToCode = matchIndentToCode[1];\n\n  return text\n    .split('\\n')\n    .map(node => {\n      const matchIndentInNode = node.match(rules.other.beginningSpace);\n      if (matchIndentInNode === null) {\n        return node;\n      }\n\n      const [indentInNode] = matchIndentInNode;\n\n      if (indentInNode.length >= indentToCode.length) {\n        return node.slice(indentToCode.length);\n      }\n\n      return node;\n    })\n    .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nexport class _Tokenizer<ParserOutput = string, RendererOutput = string> {\n  options: MarkedOptions<ParserOutput, RendererOutput>;\n  rules!: Rules; // set by the lexer\n  lexer!: _Lexer<ParserOutput, RendererOutput>; // set by the lexer\n\n  constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    this.options = options || _defaults;\n  }\n\n  space(src: string): Tokens.Space | undefined {\n    const cap = this.rules.block.newline.exec(src);\n    if (cap && cap[0].length > 0) {\n      return {\n        type: 'space',\n        raw: cap[0],\n      };\n    }\n  }\n\n  code(src: string): Tokens.Code | undefined {\n    const cap = this.rules.block.code.exec(src);\n    if (cap) {\n      const raw = this.options.pedantic\n        ? cap[0]\n        : trimTrailingBlankLines(cap[0]);\n      const text = raw.replace(this.rules.other.codeRemoveIndent, '');\n      return {\n        type: 'code',\n        raw,\n        codeBlockStyle: 'indented',\n        text,\n      };\n    }\n  }\n\n  fences(src: string): Tokens.Code | undefined {\n    const cap = this.rules.block.fences.exec(src);\n    if (cap) {\n      const raw = cap[0];\n      const text = indentCodeCompensation(raw, cap[3] || '', this.rules);\n\n      return {\n        type: 'code',\n        raw,\n        lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n        text,\n      };\n    }\n  }\n\n  heading(src: string): Tokens.Heading | undefined {\n    const cap = this.rules.block.heading.exec(src);\n    if (cap) {\n      let text = cap[2].trim();\n\n      // remove trailing #s\n      if (this.rules.other.endingHash.test(text)) {\n        const trimmed = rtrim(text, '#');\n        if (this.options.pedantic) {\n          text = trimmed.trim();\n        } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n          // CommonMark requires space before trailing #s\n          text = trimmed.trim();\n        }\n      }\n\n      return {\n        type: 'heading',\n        raw: rtrim(cap[0], '\\n'),\n        depth: cap[1].length,\n        text,\n        tokens: this.lexer.inline(text),\n      };\n    }\n  }\n\n  hr(src: string): Tokens.Hr | undefined {\n    const cap = this.rules.block.hr.exec(src);\n    if (cap) {\n      return {\n        type: 'hr',\n        raw: rtrim(cap[0], '\\n'),\n      };\n    }\n  }\n\n  blockquote(src: string): Tokens.Blockquote | undefined {\n    const cap = this.rules.block.blockquote.exec(src);\n    if (cap) {\n      let lines = rtrim(cap[0], '\\n').split('\\n');\n      let raw = '';\n      let text = '';\n      const tokens: Token[] = [];\n\n      while (lines.length > 0) {\n        let inBlockquote = false;\n        const currentLines = [];\n\n        let i;\n        for (i = 0; i < lines.length; i++) {\n          // get lines up to a continuation\n          if (this.rules.other.blockquoteStart.test(lines[i])) {\n            currentLines.push(lines[i]);\n            inBlockquote = true;\n          } else if (!inBlockquote) {\n            currentLines.push(lines[i]);\n          } else {\n            break;\n          }\n        }\n        lines = lines.slice(i);\n\n        const currentRaw = currentLines.join('\\n');\n        const currentText = currentRaw\n          // precede setext continuation with 4 spaces so it isn't a setext\n          .replace(this.rules.other.blockquoteSetextReplace, '\\n    $1')\n          .replace(this.rules.other.blockquoteSetextReplace2, '');\n        raw = raw ? `${raw}\\n${currentRaw}` : currentRaw;\n        text = text ? `${text}\\n${currentText}` : currentText;\n\n        // parse blockquote lines as top level tokens\n        // merge paragraphs if this is a continuation\n        const top = this.lexer.state.top;\n        this.lexer.state.top = true;\n        this.lexer.blockTokens(currentText, tokens, true);\n        this.lexer.state.top = top;\n\n        // if there is no continuation then we are done\n        if (lines.length === 0) {\n          break;\n        }\n\n        const lastToken = tokens.at(-1);\n\n        if (lastToken?.type === 'code') {\n          // blockquote continuation cannot be preceded by a code block\n          break;\n        } else if (lastToken?.type === 'blockquote') {\n          // include continuation in nested blockquote\n          const oldToken = lastToken as Tokens.Blockquote;\n          const newText = oldToken.raw + '\\n' + lines.join('\\n');\n          const newToken = this.blockquote(newText)!;\n          tokens[tokens.length - 1] = newToken;\n\n          raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n          text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n          break;\n        } else if (lastToken?.type === 'list') {\n          // include continuation in nested list\n          const oldToken = lastToken as Tokens.List;\n          const newText = oldToken.raw + '\\n' + lines.join('\\n');\n          const newToken = this.list(newText)!;\n          tokens[tokens.length - 1] = newToken;\n\n          raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n          text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n          lines = newText.substring(tokens.at(-1)!.raw.length).split('\\n');\n          continue;\n        }\n      }\n\n      return {\n        type: 'blockquote',\n        raw,\n        tokens,\n        text,\n      };\n    }\n  }\n\n  list(src: string): Tokens.List | undefined {\n    let cap = this.rules.block.list.exec(src);\n    if (cap) {\n      let bull = cap[1].trim();\n      const isordered = bull.length > 1;\n\n      const list: Tokens.List = {\n        type: 'list',\n        raw: '',\n        ordered: isordered,\n        start: isordered ? +bull.slice(0, -1) : '',\n        loose: false,\n        items: [],\n      };\n\n      bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n\n      if (this.options.pedantic) {\n        bull = isordered ? bull : '[*+-]';\n      }\n\n      // Get next list item\n      const itemRegex = this.rules.other.listItemRegex(bull);\n      let endsWithBlankLine = false;\n      // Check if current bullet point can start a new List Item\n      while (src) {\n        let endEarly = false;\n        let raw = '';\n        let itemContents = '';\n        if (!(cap = itemRegex.exec(src))) {\n          break;\n        }\n\n        if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n          break;\n        }\n\n        raw = cap[0];\n        src = src.substring(raw.length);\n\n        let line = expandTabs(cap[2].split('\\n', 1)[0], cap[1].length);\n        let nextLine = src.split('\\n', 1)[0];\n        let blankLine = !line.trim();\n\n        let indent = 0;\n        if (this.options.pedantic) {\n          indent = 2;\n          itemContents = line.trimStart();\n        } else if (blankLine) {\n          indent = cap[1].length + 1;\n        } else {\n          indent = line.search(this.rules.other.nonSpaceChar); // Find first non-space char\n          indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n          itemContents = line.slice(indent);\n          indent += cap[1].length;\n        }\n\n        if (blankLine && this.rules.other.blankLine.test(nextLine)) { // Items begin with at most one blank line\n          raw += nextLine + '\\n';\n          src = src.substring(nextLine.length + 1);\n          endEarly = true;\n        }\n\n        if (!endEarly) {\n          const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n          const hrRegex = this.rules.other.hrRegex(indent);\n          const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n          const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n          const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n          const blockquoteBeginRegex = this.rules.other.blockquoteBeginRegex(indent);\n\n          // Check if following lines should be included in List Item\n          while (src) {\n            const rawLine = src.split('\\n', 1)[0];\n            let nextLineWithoutTabs;\n            nextLine = rawLine;\n\n            // Re-align to follow commonmark nesting rules\n            if (this.options.pedantic) {\n              nextLine = nextLine.replace(this.rules.other.listReplaceNesting, '  ');\n              nextLineWithoutTabs = nextLine;\n            } else {\n              nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, '    ');\n            }\n\n            // End list item if found code fences\n            if (fencesBeginRegex.test(nextLine)) {\n              break;\n            }\n\n            // End list item if found start of new heading\n            if (headingBeginRegex.test(nextLine)) {\n              break;\n            }\n\n            // End list item if found start of html block\n            if (htmlBeginRegex.test(nextLine)) {\n              break;\n            }\n\n            // End list item if found start of blockquote\n            if (blockquoteBeginRegex.test(nextLine)) {\n              break;\n            }\n\n            // End list item if found start of new bullet\n            if (nextBulletRegex.test(nextLine)) {\n              break;\n            }\n\n            // Horizontal rule found\n            if (hrRegex.test(nextLine)) {\n              break;\n            }\n\n            if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) { // Dedent if possible\n              itemContents += '\\n' + nextLineWithoutTabs.slice(indent);\n            } else {\n              // not enough indentation\n              if (blankLine) {\n                break;\n              }\n\n              // paragraph continuation unless last line was a different block level element\n              if (line.replace(this.rules.other.tabCharGlobal, '    ').search(this.rules.other.nonSpaceChar) >= 4) { // indented code block\n                break;\n              }\n              if (fencesBeginRegex.test(line)) {\n                break;\n              }\n              if (headingBeginRegex.test(line)) {\n                break;\n              }\n              if (hrRegex.test(line)) {\n                break;\n              }\n\n              itemContents += '\\n' + nextLine;\n            }\n\n            blankLine = !nextLine.trim();\n\n            raw += rawLine + '\\n';\n            src = src.substring(rawLine.length + 1);\n            line = nextLineWithoutTabs.slice(indent);\n          }\n        }\n\n        if (!list.loose) {\n          // If the previous item ended with a blank line, the list is loose\n          if (endsWithBlankLine) {\n            list.loose = true;\n          } else if (this.rules.other.doubleBlankLine.test(raw)) {\n            endsWithBlankLine = true;\n          }\n        }\n\n        list.items.push({\n          type: 'list_item',\n          raw,\n          task: !!this.options.gfm && this.rules.other.listIsTask.test(itemContents),\n          loose: false,\n          text: itemContents,\n          tokens: [],\n        });\n\n        list.raw += raw;\n      }\n\n      // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n      const lastItem = list.items.at(-1);\n      if (lastItem) {\n        lastItem.raw = lastItem.raw.trimEnd();\n        lastItem.text = lastItem.text.trimEnd();\n      } else {\n        // not a list since there were no items\n        return;\n      }\n      list.raw = list.raw.trimEnd();\n\n      // Item child tokens handled here at end because we needed to have the final item to trim it first\n      for (const item of list.items) {\n        this.lexer.state.top = false;\n        item.tokens = this.lexer.blockTokens(item.text, []);\n        const itemToken = item.tokens[0];\n        if (item.task && (itemToken?.type === 'text' || itemToken?.type === 'paragraph')) {\n          // Remove checkbox markdown from item tokens\n          item.text = item.text.replace(this.rules.other.listReplaceTask, '');\n          itemToken.raw = itemToken.raw.replace(this.rules.other.listReplaceTask, '');\n          itemToken.text = itemToken.text.replace(this.rules.other.listReplaceTask, '');\n          for (let i = this.lexer.inlineQueue.length - 1; i >= 0; i--) {\n            if (this.rules.other.listIsTask.test(this.lexer.inlineQueue[i].src)) {\n              this.lexer.inlineQueue[i].src = this.lexer.inlineQueue[i].src.replace(this.rules.other.listReplaceTask, '');\n              break;\n            }\n          }\n\n          const taskRaw = this.rules.other.listTaskCheckbox.exec(item.raw);\n          if (taskRaw) {\n            const checkboxToken: Tokens.Checkbox = {\n              type: 'checkbox',\n              raw: taskRaw[0] + ' ',\n              checked: taskRaw[0] !== '[ ]',\n            };\n            item.checked = checkboxToken.checked;\n            if (list.loose) {\n              if (item.tokens[0] && ['paragraph', 'text'].includes(item.tokens[0].type) && 'tokens' in item.tokens[0] && item.tokens[0].tokens) {\n                item.tokens[0].raw = checkboxToken.raw + item.tokens[0].raw;\n                item.tokens[0].text = checkboxToken.raw + item.tokens[0].text;\n                item.tokens[0].tokens.unshift(checkboxToken);\n              } else {\n                item.tokens.unshift({\n                  type: 'paragraph',\n                  raw: checkboxToken.raw,\n                  text: checkboxToken.raw,\n                  tokens: [checkboxToken],\n                });\n              }\n            } else {\n              item.tokens.unshift(checkboxToken);\n            }\n          }\n        } else if (item.task) {\n          item.task = false;\n        }\n\n        if (!list.loose) {\n          // Check if list should be loose\n          const spacers = item.tokens.filter(t => t.type === 'space');\n          const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => this.rules.other.anyLine.test(t.raw));\n\n          list.loose = hasMultipleLineBreaks;\n        }\n      }\n\n      // Set all items to loose if list is loose\n      if (list.loose) {\n        for (const item of list.items) {\n          item.loose = true;\n          for (const token of item.tokens) {\n            if (token.type === 'text') {\n              token.type = 'paragraph';\n            }\n          }\n        }\n      }\n\n      return list;\n    }\n  }\n\n  html(src: string): Tokens.HTML | undefined {\n    const cap = this.rules.block.html.exec(src);\n    if (cap) {\n      const raw = trimTrailingBlankLines(cap[0]);\n      const token: Tokens.HTML = {\n        type: 'html',\n        block: true,\n        raw,\n        pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n        text: raw,\n      };\n      return token;\n    }\n  }\n\n  def(src: string): Tokens.Def | undefined {\n    const cap = this.rules.block.def.exec(src);\n    if (cap) {\n      const tag = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, ' ');\n      const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n      const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n      return {\n        type: 'def',\n        tag,\n        raw: rtrim(cap[0], '\\n'),\n        href,\n        title,\n      };\n    }\n  }\n\n  table(src: string): Tokens.Table | undefined {\n    const cap = this.rules.block.table.exec(src);\n    if (!cap) {\n      return;\n    }\n\n    if (!this.rules.other.tableDelimiter.test(cap[2])) {\n      // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n      return;\n    }\n\n    const headers = splitCells(cap[1]);\n    const aligns = cap[2].replace(this.rules.other.tableAlignChars, '').split('|');\n    const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, '').split('\\n') : [];\n\n    const item: Tokens.Table = {\n      type: 'table',\n      raw: rtrim(cap[0], '\\n'),\n      header: [],\n      align: [],\n      rows: [],\n    };\n\n    if (headers.length !== aligns.length) {\n      // header and align columns must be equal, rows can be different.\n      return;\n    }\n\n    for (const align of aligns) {\n      if (this.rules.other.tableAlignRight.test(align)) {\n        item.align.push('right');\n      } else if (this.rules.other.tableAlignCenter.test(align)) {\n        item.align.push('center');\n      } else if (this.rules.other.tableAlignLeft.test(align)) {\n        item.align.push('left');\n      } else {\n        item.align.push(null);\n      }\n    }\n\n    for (let i = 0; i < headers.length; i++) {\n      item.header.push({\n        text: headers[i],\n        tokens: this.lexer.inline(headers[i]),\n        header: true,\n        align: item.align[i],\n      });\n    }\n\n    for (const row of rows) {\n      item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n        return {\n          text: cell,\n          tokens: this.lexer.inline(cell),\n          header: false,\n          align: item.align[i],\n        };\n      }));\n    }\n\n    return item;\n  }\n\n  lheading(src: string): Tokens.Heading | undefined {\n    const cap = this.rules.block.lheading.exec(src);\n    if (cap) {\n      const text = cap[1].trim();\n      return {\n        type: 'heading',\n        raw: rtrim(cap[0], '\\n'),\n        depth: cap[2].charAt(0) === '=' ? 1 : 2,\n        text,\n        tokens: this.lexer.inline(text),\n      };\n    }\n  }\n\n  paragraph(src: string): Tokens.Paragraph | undefined {\n    const cap = this.rules.block.paragraph.exec(src);\n    if (cap) {\n      const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n        ? cap[1].slice(0, -1)\n        : cap[1];\n      return {\n        type: 'paragraph',\n        raw: cap[0],\n        text,\n        tokens: this.lexer.inline(text),\n      };\n    }\n  }\n\n  text(src: string): Tokens.Text | undefined {\n    const cap = this.rules.block.text.exec(src);\n    if (cap) {\n      return {\n        type: 'text',\n        raw: cap[0],\n        text: cap[0],\n        tokens: this.lexer.inline(cap[0]),\n      };\n    }\n  }\n\n  escape(src: string): Tokens.Escape | undefined {\n    const cap = this.rules.inline.escape.exec(src);\n    if (cap) {\n      return {\n        type: 'escape',\n        raw: cap[0],\n        text: cap[1],\n      };\n    }\n  }\n\n  tag(src: string): Tokens.Tag | undefined {\n    const cap = this.rules.inline.tag.exec(src);\n    if (cap) {\n      if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n        this.lexer.state.inLink = true;\n      } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n        this.lexer.state.inLink = false;\n      }\n      if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n        this.lexer.state.inRawBlock = true;\n      } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n        this.lexer.state.inRawBlock = false;\n      }\n\n      return {\n        type: 'html',\n        raw: cap[0],\n        inLink: this.lexer.state.inLink,\n        inRawBlock: this.lexer.state.inRawBlock,\n        block: false,\n        text: cap[0],\n      };\n    }\n  }\n\n  link(src: string): Tokens.Link | Tokens.Image | undefined {\n    const cap = this.rules.inline.link.exec(src);\n    if (cap) {\n      const trimmedUrl = cap[2].trim();\n      if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n        // commonmark requires matching angle brackets\n        if (!(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n          return;\n        }\n\n        // ending angle bracket cannot be escaped\n        const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n        if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n          return;\n        }\n      } else {\n        // find closing parenthesis\n        const lastParenIndex = findClosingBracket(cap[2], '()');\n        if (lastParenIndex === -2) {\n          // more open parens than closed\n          return;\n        }\n\n        if (lastParenIndex > -1) {\n          const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n          const linkLen = start + cap[1].length + lastParenIndex;\n          cap[2] = cap[2].substring(0, lastParenIndex);\n          cap[0] = cap[0].substring(0, linkLen).trim();\n          cap[3] = '';\n        }\n      }\n      let href = cap[2];\n      let title = '';\n      if (this.options.pedantic) {\n        // split pedantic href and title\n        const link = this.rules.other.pedanticHrefTitle.exec(href);\n\n        if (link) {\n          href = link[1];\n          title = link[3];\n        }\n      } else {\n        title = cap[3] ? cap[3].slice(1, -1) : '';\n      }\n\n      href = href.trim();\n      if (this.rules.other.startAngleBracket.test(href)) {\n        if (this.options.pedantic && !(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n          // pedantic allows starting angle bracket without ending angle bracket\n          href = href.slice(1);\n        } else {\n          href = href.slice(1, -1);\n        }\n      }\n      return outputLink(cap, {\n        href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n        title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title,\n      }, cap[0], this.lexer, this.rules);\n    }\n  }\n\n  reflink(src: string, links: Links): Tokens.Link | Tokens.Image | Tokens.Text | undefined {\n    let cap;\n    if ((cap = this.rules.inline.reflink.exec(src))\n      || (cap = this.rules.inline.nolink.exec(src))) {\n      const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, ' ');\n      const link = links[linkString.toLowerCase()];\n      if (!link) {\n        const text = cap[0].charAt(0);\n        return {\n          type: 'text',\n          raw: text,\n          text,\n        };\n      }\n      return outputLink(cap, link, cap[0], this.lexer, this.rules);\n    }\n  }\n\n  emStrong(src: string, maskedSrc: string, prevChar = ''): Tokens.Em | Tokens.Strong | undefined {\n    let match = this.rules.inline.emStrongLDelim.exec(src);\n    if (!match) return;\n    if (!match[1] && !match[2] && !match[3] && !match[4]) return;\n\n    // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n    if (match[4] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n\n    const nextChar = match[1] || match[3] || '';\n\n    if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n      // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n      const lLength = [...match[0]].length - 1;\n      let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n      const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n      endReg.lastIndex = 0;\n\n      // Clip maskedSrc to same section of string as src (move to lexer?)\n      maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n      while ((match = endReg.exec(maskedSrc)) !== null) {\n        rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n        if (!rDelim) continue; // skip single * in __abc*abc__\n\n        rLength = [...rDelim].length;\n\n        if (match[3] || match[4]) { // found another Left Delim\n          delimTotal += rLength;\n          continue;\n        } else if (match[5] || match[6]) { // either Left or Right Delim\n          if (lLength % 3 && !((lLength + rLength) % 3)) {\n            midDelimTotal += rLength;\n            continue; // CommonMark Emphasis Rules 9-10\n          }\n        }\n\n        delimTotal -= rLength;\n\n        if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n        // Remove extra characters. *a*** -> *a*\n        rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n        // char length can be >1 for unicode characters;\n        const lastCharLength = [...match[0]][0].length;\n        const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n        // Create `em` if smallest delimiter has odd char count. *a***\n        if (Math.min(lLength, rLength) % 2) {\n          const text = raw.slice(1, -1);\n          return {\n            type: 'em',\n            raw,\n            text,\n            tokens: this.lexer.inlineTokens(text),\n          };\n        }\n\n        // Create 'strong' if smallest delimiter has even char count. **a***\n        const text = raw.slice(2, -2);\n        return {\n          type: 'strong',\n          raw,\n          text,\n          tokens: this.lexer.inlineTokens(text),\n        };\n      }\n    }\n  }\n\n  codespan(src: string): Tokens.Codespan | undefined {\n    const cap = this.rules.inline.code.exec(src);\n    if (cap) {\n      let text = cap[2].replace(this.rules.other.newLineCharGlobal, ' ');\n      const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n      const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n      if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n        text = text.substring(1, text.length - 1);\n      }\n      return {\n        type: 'codespan',\n        raw: cap[0],\n        text,\n      };\n    }\n  }\n\n  br(src: string): Tokens.Br | undefined {\n    const cap = this.rules.inline.br.exec(src);\n    if (cap) {\n      return {\n        type: 'br',\n        raw: cap[0],\n      };\n    }\n  }\n\n  del(src: string, maskedSrc: string, prevChar = ''): Tokens.Del | undefined {\n    let match = this.rules.inline.delLDelim.exec(src);\n    if (!match) return;\n\n    const nextChar = match[1] || '';\n\n    if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n      // unicode Regex counts emoji as 1 char; spread into array for proper count\n      const lLength = [...match[0]].length - 1;\n      let rDelim, rLength, delimTotal = lLength;\n\n      const endReg = this.rules.inline.delRDelim;\n      endReg.lastIndex = 0;\n\n      // Clip maskedSrc to same section of string as src\n      maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n      while ((match = endReg.exec(maskedSrc)) !== null) {\n        rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n        if (!rDelim) continue;\n\n        rLength = [...rDelim].length;\n\n        if (rLength !== lLength) continue;\n\n        if (match[3] || match[4]) { // found another Left Delim\n          delimTotal += rLength;\n          continue;\n        }\n\n        delimTotal -= rLength;\n\n        if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n        // Remove extra characters\n        rLength = Math.min(rLength, rLength + delimTotal);\n        // char length can be >1 for unicode characters\n        const lastCharLength = [...match[0]][0].length;\n        const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n        // Create del token - only single ~ or double ~~ supported\n        const text = raw.slice(lLength, -lLength);\n        return {\n          type: 'del',\n          raw,\n          text,\n          tokens: this.lexer.inlineTokens(text),\n        };\n      }\n    }\n  }\n\n  autolink(src: string): Tokens.Link | undefined {\n    const cap = this.rules.inline.autolink.exec(src);\n    if (cap) {\n      let text, href;\n      if (cap[2] === '@') {\n        text = cap[1];\n        href = 'mailto:' + text;\n      } else {\n        text = cap[1];\n        href = text;\n      }\n\n      return {\n        type: 'link',\n        raw: cap[0],\n        text,\n        href,\n        tokens: [\n          {\n            type: 'text',\n            raw: text,\n            text,\n          },\n        ],\n      };\n    }\n  }\n\n  url(src: string): Tokens.Link | undefined {\n    let cap;\n    if (cap = this.rules.inline.url.exec(src)) {\n      let text, href;\n      if (cap[2] === '@') {\n        text = cap[0];\n        href = 'mailto:' + text;\n      } else {\n        // do extended autolink path validation\n        let prevCapZero;\n        do {\n          prevCapZero = cap[0];\n          cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n        } while (prevCapZero !== cap[0]);\n        text = cap[0];\n        if (cap[1] === 'www.') {\n          href = 'http://' + cap[0];\n        } else {\n          href = cap[0];\n        }\n      }\n      return {\n        type: 'link',\n        raw: cap[0],\n        text,\n        href,\n        tokens: [\n          {\n            type: 'text',\n            raw: text,\n            text,\n          },\n        ],\n      };\n    }\n  }\n\n  inlineText(src: string): Tokens.Text | undefined {\n    const cap = this.rules.inline.text.exec(src);\n    if (cap) {\n      const escaped = this.lexer.state.inRawBlock;\n      return {\n        type: 'text',\n        raw: cap[0],\n        text: cap[0],\n        escaped,\n      };\n    }\n  }\n}\n","import { _Tokenizer } from './Tokenizer.ts';\nimport { _defaults } from './defaults.ts';\nimport { other, block, inline } from './rules.ts';\nimport type { Token, TokensList, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Block Lexer\n */\nexport class _Lexer<ParserOutput = string, RendererOutput = string> {\n  tokens: TokensList;\n  options: MarkedOptions<ParserOutput, RendererOutput>;\n  state: {\n    inLink: boolean;\n    inRawBlock: boolean;\n    top: boolean;\n  };\n\n  public inlineQueue: { src: string, tokens: Token[] }[];\n\n  private tokenizer: _Tokenizer<ParserOutput, RendererOutput>;\n\n  constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    // TokenList cannot be created in one go\n    this.tokens = [] as unknown as TokensList;\n    this.tokens.links = Object.create(null);\n    this.options = options || _defaults;\n    this.options.tokenizer = this.options.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>();\n    this.tokenizer = this.options.tokenizer;\n    this.tokenizer.options = this.options;\n    this.tokenizer.lexer = this;\n    this.inlineQueue = [];\n    this.state = {\n      inLink: false,\n      inRawBlock: false,\n      top: true,\n    };\n\n    const rules = {\n      other,\n      block: block.normal,\n      inline: inline.normal,\n    };\n\n    if (this.options.pedantic) {\n      rules.block = block.pedantic;\n      rules.inline = inline.pedantic;\n    } else if (this.options.gfm) {\n      rules.block = block.gfm;\n      if (this.options.breaks) {\n        rules.inline = inline.breaks;\n      } else {\n        rules.inline = inline.gfm;\n      }\n    }\n    this.tokenizer.rules = rules;\n  }\n\n  /**\n   * Expose Rules\n   */\n  static get rules() {\n    return {\n      block,\n      inline,\n    };\n  }\n\n  /**\n   * Static Lex Method\n   */\n  static lex<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n    return lexer.lex(src);\n  }\n\n  /**\n   * Static Lex Inline Method\n   */\n  static lexInline<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n    return lexer.inlineTokens(src);\n  }\n\n  /**\n   * Preprocessing\n   */\n  lex(src: string) {\n    src = src.replace(other.carriageReturn, '\\n');\n\n    this.blockTokens(src, this.tokens);\n\n    for (let i = 0; i < this.inlineQueue.length; i++) {\n      const next = this.inlineQueue[i];\n      this.inlineTokens(next.src, next.tokens);\n    }\n    this.inlineQueue = [];\n\n    return this.tokens;\n  }\n\n  /**\n   * Lexing\n   */\n  blockTokens(src: string, tokens?: Token[], lastParagraphClipped?: boolean): Token[];\n  blockTokens(src: string, tokens?: TokensList, lastParagraphClipped?: boolean): TokensList;\n  blockTokens(src: string, tokens: Token[] = [], lastParagraphClipped = false) {\n    this.tokenizer.lexer = this;\n    if (this.options.pedantic) {\n      src = src.replace(other.tabCharGlobal, '    ').replace(other.spaceLine, '');\n    }\n\n    let srcLength = Infinity;\n    while (src) {\n      if (src.length < srcLength) {\n        srcLength = src.length;\n      } else {\n        this.infiniteLoopError(src.charCodeAt(0));\n        break;\n      }\n\n      let token: Tokens.Generic | undefined;\n\n      if (this.options.extensions?.block?.some((extTokenizer) => {\n        if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          return true;\n        }\n        return false;\n      })) {\n        continue;\n      }\n\n      // newline\n      if (token = this.tokenizer.space(src)) {\n        src = src.substring(token.raw.length);\n        const lastToken = tokens.at(-1);\n        if (token.raw.length === 1 && lastToken !== undefined) {\n          // if there's a single \\n as a spacer, it's terminating the last line,\n          // so move it there so that we don't get unnecessary paragraph tags\n          lastToken.raw += '\\n';\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      // code\n      if (token = this.tokenizer.code(src)) {\n        src = src.substring(token.raw.length);\n        const lastToken = tokens.at(-1);\n        // An indented code block cannot interrupt a paragraph.\n        if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n          lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n          lastToken.text += '\\n' + token.text;\n          this.inlineQueue.at(-1)!.src = lastToken.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      // fences\n      if (token = this.tokenizer.fences(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // heading\n      if (token = this.tokenizer.heading(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // hr\n      if (token = this.tokenizer.hr(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // blockquote\n      if (token = this.tokenizer.blockquote(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // list\n      if (token = this.tokenizer.list(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // html\n      if (token = this.tokenizer.html(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // def\n      if (token = this.tokenizer.def(src)) {\n        src = src.substring(token.raw.length);\n        const lastToken = tokens.at(-1);\n        if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n          lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n          lastToken.text += '\\n' + token.raw;\n          this.inlineQueue.at(-1)!.src = lastToken.text;\n        } else if (!this.tokens.links[token.tag]) {\n          this.tokens.links[token.tag] = {\n            href: token.href,\n            title: token.title,\n          };\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      // table (gfm)\n      if (token = this.tokenizer.table(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // lheading\n      if (token = this.tokenizer.lheading(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // top-level paragraph\n      // prevent paragraph consuming extensions by clipping 'src' to extension start\n      let cutSrc = src;\n      if (this.options.extensions?.startBlock) {\n        let startIndex = Infinity;\n        const tempSrc = src.slice(1);\n        let tempStart;\n        this.options.extensions.startBlock.forEach((getStartIndex) => {\n          tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n          if (typeof tempStart === 'number' && tempStart >= 0) {\n            startIndex = Math.min(startIndex, tempStart);\n          }\n        });\n        if (startIndex < Infinity && startIndex >= 0) {\n          cutSrc = src.substring(0, startIndex + 1);\n        }\n      }\n      if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n        const lastToken = tokens.at(-1);\n        if (lastParagraphClipped && lastToken?.type === 'paragraph') {\n          lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n          lastToken.text += '\\n' + token.text;\n          this.inlineQueue.pop();\n          this.inlineQueue.at(-1)!.src = lastToken.text;\n        } else {\n          tokens.push(token);\n        }\n        lastParagraphClipped = cutSrc.length !== src.length;\n        src = src.substring(token.raw.length);\n        continue;\n      }\n\n      // text\n      if (token = this.tokenizer.text(src)) {\n        src = src.substring(token.raw.length);\n        const lastToken = tokens.at(-1);\n        if (lastToken?.type === 'text') {\n          lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n          lastToken.text += '\\n' + token.text;\n          this.inlineQueue.pop();\n          this.inlineQueue.at(-1)!.src = lastToken.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      if (src) {\n        this.infiniteLoopError(src.charCodeAt(0));\n        break;\n      }\n    }\n\n    this.state.top = true;\n    return tokens;\n  }\n\n  inline(src: string, tokens: Token[] = []) {\n    this.inlineQueue.push({ src, tokens });\n    return tokens;\n  }\n\n  /**\n   * Lexing/Compiling\n   */\n  inlineTokens(src: string, tokens: Token[] = []): Token[] {\n    this.tokenizer.lexer = this;\n    // String with links masked to avoid interference with em and strong\n    let maskedSrc = src;\n    let match: RegExpExecArray | null = null;\n\n    // Mask out reflinks\n    if (this.tokens.links) {\n      const links = Object.keys(this.tokens.links);\n      if (links.length > 0) {\n        while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) !== null) {\n          if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n            maskedSrc = maskedSrc.slice(0, match.index)\n              + '[' + 'a'.repeat(match[0].length - 2) + ']'\n              + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n          }\n        }\n      }\n    }\n\n    // Mask out escaped characters\n    while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) !== null) {\n      maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n    }\n\n    // Mask out other blocks\n    let offset;\n    while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) !== null) {\n      offset = match[2] ? match[2].length : 0;\n      maskedSrc = maskedSrc.slice(0, match.index + offset) + '[' + 'a'.repeat(match[0].length - offset - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n    }\n\n    // Mask out blocks from extensions\n    maskedSrc = this.options.hooks?.emStrongMask?.call({ lexer: this }, maskedSrc) ?? maskedSrc;\n\n    let keepPrevChar = false;\n    let prevChar = '';\n    let srcLength = Infinity;\n    while (src) {\n      if (src.length < srcLength) {\n        srcLength = src.length;\n      } else {\n        this.infiniteLoopError(src.charCodeAt(0));\n        break;\n      }\n\n      if (!keepPrevChar) {\n        prevChar = '';\n      }\n      keepPrevChar = false;\n\n      let token: Tokens.Generic | undefined;\n\n      // extensions\n      if (this.options.extensions?.inline?.some((extTokenizer) => {\n        if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          return true;\n        }\n        return false;\n      })) {\n        continue;\n      }\n\n      // escape\n      if (token = this.tokenizer.escape(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // tag\n      if (token = this.tokenizer.tag(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // link\n      if (token = this.tokenizer.link(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // reflink, nolink\n      if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n        src = src.substring(token.raw.length);\n        const lastToken = tokens.at(-1);\n        if (token.type === 'text' && lastToken?.type === 'text') {\n          lastToken.raw += token.raw;\n          lastToken.text += token.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      // em & strong\n      if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // code\n      if (token = this.tokenizer.codespan(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // br\n      if (token = this.tokenizer.br(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // del (gfm)\n      if (token = this.tokenizer.del(src, maskedSrc, prevChar)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // autolink\n      if (token = this.tokenizer.autolink(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // url (gfm)\n      if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // text\n      // prevent inlineText consuming extensions by clipping 'src' to extension start\n      let cutSrc = src;\n      if (this.options.extensions?.startInline) {\n        let startIndex = Infinity;\n        const tempSrc = src.slice(1);\n        let tempStart;\n        this.options.extensions.startInline.forEach((getStartIndex) => {\n          tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n          if (typeof tempStart === 'number' && tempStart >= 0) {\n            startIndex = Math.min(startIndex, tempStart);\n          }\n        });\n        if (startIndex < Infinity && startIndex >= 0) {\n          cutSrc = src.substring(0, startIndex + 1);\n        }\n      }\n      if (token = this.tokenizer.inlineText(cutSrc)) {\n        src = src.substring(token.raw.length);\n        if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n          prevChar = token.raw.slice(-1);\n        }\n        keepPrevChar = true;\n        const lastToken = tokens.at(-1);\n        if (lastToken?.type === 'text') {\n          lastToken.raw += token.raw;\n          lastToken.text += token.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      if (src) {\n        this.infiniteLoopError(src.charCodeAt(0));\n        break;\n      }\n    }\n\n    return tokens;\n  }\n\n  private infiniteLoopError(byte: number) {\n    const errMsg = 'Infinite loop on byte: ' + byte;\n    if (this.options.silent) {\n      console.error(errMsg);\n    } else {\n      throw new Error(errMsg);\n    }\n  }\n}\n","import { _defaults } from './defaults.ts';\nimport {\n  cleanUrl,\n  escapeHtmlEntities,\n} from './helpers.ts';\nimport { other } from './rules.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Tokens } from './Tokens.ts';\nimport type { _Parser } from './Parser.ts';\n\n/**\n * Renderer\n */\nexport class _Renderer<ParserOutput = string, RendererOutput = string> {\n  options: MarkedOptions<ParserOutput, RendererOutput>;\n  parser!: _Parser<ParserOutput, RendererOutput>; // set by the parser\n  constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    this.options = options || _defaults;\n  }\n\n  space(token: Tokens.Space): RendererOutput {\n    return '' as RendererOutput;\n  }\n\n  code({ text, lang, escaped }: Tokens.Code): RendererOutput {\n    const langString = (lang || '').match(other.notSpaceStart)?.[0];\n\n    const code = text.replace(other.endingNewline, '') + '\\n';\n\n    if (!langString) {\n      return '<pre><code>'\n        + (escaped ? code : escapeHtmlEntities(code, true))\n        + '</code></pre>\\n' as RendererOutput;\n    }\n\n    return '<pre><code class=\"language-'\n      + escapeHtmlEntities(langString)\n      + '\">'\n      + (escaped ? code : escapeHtmlEntities(code, true))\n      + '</code></pre>\\n' as RendererOutput;\n  }\n\n  blockquote({ tokens }: Tokens.Blockquote): RendererOutput {\n    const body = this.parser.parse(tokens);\n    return `<blockquote>\\n${body}</blockquote>\\n` as RendererOutput;\n  }\n\n  html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n    return text as RendererOutput;\n  }\n\n  def(token: Tokens.Def): RendererOutput {\n    return '' as RendererOutput;\n  }\n\n  heading({ tokens, depth }: Tokens.Heading): RendererOutput {\n    return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\\n` as RendererOutput;\n  }\n\n  hr(token: Tokens.Hr): RendererOutput {\n    return '<hr>\\n' as RendererOutput;\n  }\n\n  list(token: Tokens.List): RendererOutput {\n    const ordered = token.ordered;\n    const start = token.start;\n\n    let body = '';\n    for (let j = 0; j < token.items.length; j++) {\n      const item = token.items[j];\n      body += this.listitem(item);\n    }\n\n    const type = ordered ? 'ol' : 'ul';\n    const startAttr = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n    return '<' + type + startAttr + '>\\n' + body + '</' + type + '>\\n' as RendererOutput;\n  }\n\n  listitem(item: Tokens.ListItem): RendererOutput {\n    return `<li>${this.parser.parse(item.tokens)}</li>\\n` as RendererOutput;\n  }\n\n  checkbox({ checked }: Tokens.Checkbox): RendererOutput {\n    return '<input '\n      + (checked ? 'checked=\"\" ' : '')\n      + 'disabled=\"\" type=\"checkbox\"> ' as RendererOutput;\n  }\n\n  paragraph({ tokens }: Tokens.Paragraph): RendererOutput {\n    return `<p>${this.parser.parseInline(tokens)}</p>\\n` as RendererOutput;\n  }\n\n  table(token: Tokens.Table): RendererOutput {\n    let header = '';\n\n    // header\n    let cell = '';\n    for (let j = 0; j < token.header.length; j++) {\n      cell += this.tablecell(token.header[j]);\n    }\n    header += this.tablerow({ text: cell as ParserOutput });\n\n    let body = '';\n    for (let j = 0; j < token.rows.length; j++) {\n      const row = token.rows[j];\n\n      cell = '';\n      for (let k = 0; k < row.length; k++) {\n        cell += this.tablecell(row[k]);\n      }\n\n      body += this.tablerow({ text: cell as ParserOutput });\n    }\n    if (body) body = `<tbody>${body}</tbody>`;\n\n    return '<table>\\n'\n      + '<thead>\\n'\n      + header\n      + '</thead>\\n'\n      + body\n      + '</table>\\n' as RendererOutput;\n  }\n\n  tablerow({ text }: Tokens.TableRow<ParserOutput>): RendererOutput {\n    return `<tr>\\n${text}</tr>\\n` as RendererOutput;\n  }\n\n  tablecell(token: Tokens.TableCell): RendererOutput {\n    const content = this.parser.parseInline(token.tokens);\n    const type = token.header ? 'th' : 'td';\n    const tag = token.align\n      ? `<${type} align=\"${token.align}\">`\n      : `<${type}>`;\n    return tag + content + `</${type}>\\n` as RendererOutput;\n  }\n\n  /**\n   * span level renderer\n   */\n  strong({ tokens }: Tokens.Strong): RendererOutput {\n    return `<strong>${this.parser.parseInline(tokens)}</strong>` as RendererOutput;\n  }\n\n  em({ tokens }: Tokens.Em): RendererOutput {\n    return `<em>${this.parser.parseInline(tokens)}</em>` as RendererOutput;\n  }\n\n  codespan({ text }: Tokens.Codespan): RendererOutput {\n    return `<code>${escapeHtmlEntities(text, true)}</code>` as RendererOutput;\n  }\n\n  br(token: Tokens.Br): RendererOutput {\n    return '<br>' as RendererOutput;\n  }\n\n  del({ tokens }: Tokens.Del): RendererOutput {\n    return `<del>${this.parser.parseInline(tokens)}</del>` as RendererOutput;\n  }\n\n  link({ href, title, tokens }: Tokens.Link): RendererOutput {\n    const text = this.parser.parseInline(tokens) as string;\n    const cleanHref = cleanUrl(href);\n    if (cleanHref === null) {\n      return text as RendererOutput;\n    }\n    href = cleanHref;\n    let out = '<a href=\"' + href + '\"';\n    if (title) {\n      out += ' title=\"' + (escapeHtmlEntities(title)) + '\"';\n    }\n    out += '>' + text + '</a>';\n    return out as RendererOutput;\n  }\n\n  image({ href, title, text, tokens }: Tokens.Image): RendererOutput {\n    if (tokens) {\n      text = this.parser.parseInline(tokens, this.parser.textRenderer) as string;\n    }\n    const cleanHref = cleanUrl(href);\n    if (cleanHref === null) {\n      return escapeHtmlEntities(text) as RendererOutput;\n    }\n    href = cleanHref;\n\n    let out = `<img src=\"${href}\" alt=\"${escapeHtmlEntities(text)}\"`;\n    if (title) {\n      out += ` title=\"${escapeHtmlEntities(title)}\"`;\n    }\n    out += '>';\n    return out as RendererOutput;\n  }\n\n  text(token: Tokens.Text | Tokens.Escape): RendererOutput {\n    return 'tokens' in token && token.tokens\n      ? this.parser.parseInline(token.tokens) as unknown as RendererOutput\n      : ('escaped' in token && token.escaped ? token.text as RendererOutput : escapeHtmlEntities(token.text) as RendererOutput);\n  }\n}\n","import type { Tokens } from './Tokens.ts';\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nexport class _TextRenderer<RendererOutput = string> {\n  // no need for block level renderers\n  strong({ text }: Tokens.Strong): RendererOutput {\n    return text as RendererOutput;\n  }\n\n  em({ text }: Tokens.Em): RendererOutput {\n    return text as RendererOutput;\n  }\n\n  codespan({ text }: Tokens.Codespan): RendererOutput {\n    return text as RendererOutput;\n  }\n\n  del({ text }: Tokens.Del): RendererOutput {\n    return text as RendererOutput;\n  }\n\n  html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n    return text as RendererOutput;\n  }\n\n  text({ text }: Tokens.Text | Tokens.Escape | Tokens.Tag): RendererOutput {\n    return text as RendererOutput;\n  }\n\n  link({ text }: Tokens.Link): RendererOutput {\n    return '' + text as RendererOutput;\n  }\n\n  image({ text }: Tokens.Image): RendererOutput {\n    return '' + text as RendererOutput;\n  }\n\n  br(): RendererOutput {\n    return '' as RendererOutput;\n  }\n\n  checkbox({ raw }: Tokens.Checkbox): RendererOutput {\n    return raw as RendererOutput;\n  }\n}\n","import { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _defaults } from './defaults.ts';\nimport type { MarkedToken, Token, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Parsing & Compiling\n */\nexport class _Parser<ParserOutput = string, RendererOutput = string> {\n  options: MarkedOptions<ParserOutput, RendererOutput>;\n  renderer: _Renderer<ParserOutput, RendererOutput>;\n  textRenderer: _TextRenderer<RendererOutput>;\n  constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    this.options = options || _defaults;\n    this.options.renderer = this.options.renderer || new _Renderer<ParserOutput, RendererOutput>();\n    this.renderer = this.options.renderer;\n    this.renderer.options = this.options;\n    this.renderer.parser = this;\n    this.textRenderer = new _TextRenderer<RendererOutput>();\n  }\n\n  /**\n   * Static Parse Method\n   */\n  static parse<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    const parser = new _Parser<ParserOutput, RendererOutput>(options);\n    return parser.parse(tokens);\n  }\n\n  /**\n   * Static Parse Inline Method\n   */\n  static parseInline<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    const parser = new _Parser<ParserOutput, RendererOutput>(options);\n    return parser.parseInline(tokens);\n  }\n\n  /**\n   * Parse Loop\n   */\n  parse(tokens: Token[]): ParserOutput {\n    this.renderer.parser = this;\n    let out = '';\n\n    for (let i = 0; i < tokens.length; i++) {\n      const anyToken = tokens[i];\n\n      // Run any renderer extensions\n      if (this.options.extensions?.renderers?.[anyToken.type]) {\n        const genericToken = anyToken as Tokens.Generic;\n        const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n        if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'def', 'paragraph', 'text'].includes(genericToken.type)) {\n          out += ret || '';\n          continue;\n        }\n      }\n\n      const token = anyToken as MarkedToken;\n\n      switch (token.type) {\n        case 'space': {\n          out += this.renderer.space(token);\n          break;\n        }\n        case 'hr': {\n          out += this.renderer.hr(token);\n          break;\n        }\n        case 'heading': {\n          out += this.renderer.heading(token);\n          break;\n        }\n        case 'code': {\n          out += this.renderer.code(token);\n          break;\n        }\n        case 'table': {\n          out += this.renderer.table(token);\n          break;\n        }\n        case 'blockquote': {\n          out += this.renderer.blockquote(token);\n          break;\n        }\n        case 'list': {\n          out += this.renderer.list(token);\n          break;\n        }\n        case 'checkbox': {\n          out += this.renderer.checkbox(token);\n          break;\n        }\n        case 'html': {\n          out += this.renderer.html(token);\n          break;\n        }\n        case 'def': {\n          out += this.renderer.def(token);\n          break;\n        }\n        case 'paragraph': {\n          out += this.renderer.paragraph(token);\n          break;\n        }\n        case 'text': {\n          out += this.renderer.text(token);\n          break;\n        }\n\n        default: {\n          const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n          if (this.options.silent) {\n            console.error(errMsg);\n            return '' as ParserOutput;\n          } else {\n            throw new Error(errMsg);\n          }\n        }\n      }\n    }\n\n    return out as ParserOutput;\n  }\n\n  /**\n   * Parse Inline Tokens\n   */\n  parseInline(tokens: Token[], renderer: _Renderer<ParserOutput, RendererOutput> | _TextRenderer<RendererOutput> = this.renderer): ParserOutput {\n    this.renderer.parser = this;\n    let out = '';\n\n    for (let i = 0; i < tokens.length; i++) {\n      const anyToken = tokens[i];\n\n      // Run any renderer extensions\n      if (this.options.extensions?.renderers?.[anyToken.type]) {\n        const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n        if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(anyToken.type)) {\n          out += ret || '';\n          continue;\n        }\n      }\n\n      const token = anyToken as MarkedToken;\n\n      switch (token.type) {\n        case 'escape': {\n          out += renderer.text(token);\n          break;\n        }\n        case 'html': {\n          out += renderer.html(token);\n          break;\n        }\n        case 'link': {\n          out += renderer.link(token);\n          break;\n        }\n        case 'image': {\n          out += renderer.image(token);\n          break;\n        }\n        case 'checkbox': {\n          out += renderer.checkbox(token);\n          break;\n        }\n        case 'strong': {\n          out += renderer.strong(token);\n          break;\n        }\n        case 'em': {\n          out += renderer.em(token);\n          break;\n        }\n        case 'codespan': {\n          out += renderer.codespan(token);\n          break;\n        }\n        case 'br': {\n          out += renderer.br(token);\n          break;\n        }\n        case 'del': {\n          out += renderer.del(token);\n          break;\n        }\n        case 'text': {\n          out += renderer.text(token);\n          break;\n        }\n        default: {\n          const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n          if (this.options.silent) {\n            console.error(errMsg);\n            return '' as ParserOutput;\n          } else {\n            throw new Error(errMsg);\n          }\n        }\n      }\n    }\n    return out as ParserOutput;\n  }\n}\n","import { _defaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\n\nexport class _Hooks<ParserOutput = string, RendererOutput = string> {\n  options: MarkedOptions<ParserOutput, RendererOutput>;\n  block?: boolean;\n\n  constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    this.options = options || _defaults;\n  }\n\n  static passThroughHooks = new Set([\n    'preprocess',\n    'postprocess',\n    'processAllTokens',\n    'emStrongMask',\n  ]);\n\n  static passThroughHooksRespectAsync = new Set([\n    'preprocess',\n    'postprocess',\n    'processAllTokens',\n  ]);\n\n  /**\n   * Process markdown before marked\n   */\n  preprocess(markdown: string) {\n    return markdown;\n  }\n\n  /**\n   * Process HTML after marked is finished\n   */\n  postprocess(html: ParserOutput) {\n    return html;\n  }\n\n  /**\n   * Process all tokens before walk tokens\n   */\n  processAllTokens(tokens: Token[] | TokensList) {\n    return tokens;\n  }\n\n  /**\n   * Mask contents that should not be interpreted as em/strong delimiters\n   */\n  emStrongMask(src: string) {\n    return src;\n  }\n\n  /**\n   * Provide function to tokenize markdown\n   */\n  provideLexer(block = this.block) {\n    return block ? _Lexer.lex : _Lexer.lexInline;\n  }\n\n  /**\n   * Provide function to parse tokens\n   */\n  provideParser(block = this.block) {\n    return block ? _Parser.parse<ParserOutput, RendererOutput> : _Parser.parseInline<ParserOutput, RendererOutput>;\n  }\n}\n","import { _getDefaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { escapeHtmlEntities } from './helpers.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, Tokens, TokensList } from './Tokens.ts';\n\nexport type MaybePromise = void | Promise<void>;\n\ntype UnknownFunction = (...args: unknown[]) => unknown;\ntype GenericRendererFunction = (...args: unknown[]) => string | false;\n\nexport class Marked<ParserOutput = string, RendererOutput = string> {\n  defaults = _getDefaults<ParserOutput, RendererOutput>();\n  options = this.setOptions;\n\n  parse = this.parseMarkdown(true);\n  parseInline = this.parseMarkdown(false);\n\n  Parser = _Parser<ParserOutput, RendererOutput>;\n  Renderer = _Renderer<ParserOutput, RendererOutput>;\n  TextRenderer = _TextRenderer<RendererOutput>;\n  Lexer = _Lexer;\n  Tokenizer = _Tokenizer<ParserOutput, RendererOutput>;\n  Hooks = _Hooks<ParserOutput, RendererOutput>;\n\n  constructor(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n    this.use(...args);\n  }\n\n  /**\n   * Run callback for every token\n   */\n  walkTokens(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n    let values: MaybePromise[] = [];\n    for (const token of tokens) {\n      values = values.concat(callback.call(this, token));\n      switch (token.type) {\n        case 'table': {\n          const tableToken = token as Tokens.Table;\n          for (const cell of tableToken.header) {\n            values = values.concat(this.walkTokens(cell.tokens, callback));\n          }\n          for (const row of tableToken.rows) {\n            for (const cell of row) {\n              values = values.concat(this.walkTokens(cell.tokens, callback));\n            }\n          }\n          break;\n        }\n        case 'list': {\n          const listToken = token as Tokens.List;\n          values = values.concat(this.walkTokens(listToken.items, callback));\n          break;\n        }\n        default: {\n          const genericToken = token as Tokens.Generic;\n          if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n            this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n              const tokens = genericToken[childTokens].flat(Infinity) as Token[] | TokensList;\n              values = values.concat(this.walkTokens(tokens, callback));\n            });\n          } else if (genericToken.tokens) {\n            values = values.concat(this.walkTokens(genericToken.tokens, callback));\n          }\n        }\n      }\n    }\n    return values;\n  }\n\n  use(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n    const extensions: MarkedOptions<ParserOutput, RendererOutput>['extensions'] = this.defaults.extensions || { renderers: {}, childTokens: {} };\n\n    args.forEach((pack) => {\n      // copy options to new object\n      const opts = { ...pack } as MarkedOptions<ParserOutput, RendererOutput>;\n\n      // set async to true if it was set to true before\n      opts.async = this.defaults.async || opts.async || false;\n\n      // ==-- Parse \"addon\" extensions --== //\n      if (pack.extensions) {\n        pack.extensions.forEach((ext) => {\n          if (!ext.name) {\n            throw new Error('extension name required');\n          }\n          if ('renderer' in ext) { // Renderer extensions\n            const prevRenderer = extensions.renderers[ext.name];\n            if (prevRenderer) {\n              // Replace extension with func to run new extension but fall back if false\n              extensions.renderers[ext.name] = function(...args) {\n                let ret = ext.renderer.apply(this, args);\n                if (ret === false) {\n                  ret = prevRenderer.apply(this, args);\n                }\n                return ret;\n              };\n            } else {\n              extensions.renderers[ext.name] = ext.renderer;\n            }\n          }\n          if ('tokenizer' in ext) { // Tokenizer Extensions\n            if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n              throw new Error(\"extension level must be 'block' or 'inline'\");\n            }\n            const extLevel = extensions[ext.level];\n            if (extLevel) {\n              extLevel.unshift(ext.tokenizer);\n            } else {\n              extensions[ext.level] = [ext.tokenizer];\n            }\n            if (ext.start) { // Function to check for start of token\n              if (ext.level === 'block') {\n                if (extensions.startBlock) {\n                  extensions.startBlock.push(ext.start);\n                } else {\n                  extensions.startBlock = [ext.start];\n                }\n              } else if (ext.level === 'inline') {\n                if (extensions.startInline) {\n                  extensions.startInline.push(ext.start);\n                } else {\n                  extensions.startInline = [ext.start];\n                }\n              }\n            }\n          }\n          if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n            extensions.childTokens[ext.name] = ext.childTokens;\n          }\n        });\n        opts.extensions = extensions;\n      }\n\n      // ==-- Parse \"overwrite\" extensions --== //\n      if (pack.renderer) {\n        const renderer = this.defaults.renderer || new _Renderer<ParserOutput, RendererOutput>(this.defaults);\n        for (const prop in pack.renderer) {\n          if (!(prop in renderer)) {\n            throw new Error(`renderer '${prop}' does not exist`);\n          }\n          if (['options', 'parser'].includes(prop)) {\n            // ignore options property\n            continue;\n          }\n          const rendererProp = prop as Exclude<keyof _Renderer<ParserOutput, RendererOutput>, 'options' | 'parser'>;\n          const rendererFunc = pack.renderer[rendererProp] as GenericRendererFunction;\n          const prevRenderer = renderer[rendererProp] as GenericRendererFunction;\n          // Replace renderer with func to run extension, but fall back if false\n          renderer[rendererProp] = (...args: unknown[]) => {\n            let ret = rendererFunc.apply(renderer, args);\n            if (ret === false) {\n              ret = prevRenderer.apply(renderer, args);\n            }\n            return (ret || '') as RendererOutput;\n          };\n        }\n        opts.renderer = renderer;\n      }\n      if (pack.tokenizer) {\n        const tokenizer = this.defaults.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>(this.defaults);\n        for (const prop in pack.tokenizer) {\n          if (!(prop in tokenizer)) {\n            throw new Error(`tokenizer '${prop}' does not exist`);\n          }\n          if (['options', 'rules', 'lexer'].includes(prop)) {\n            // ignore options, rules, and lexer properties\n            continue;\n          }\n          const tokenizerProp = prop as Exclude<keyof _Tokenizer<ParserOutput, RendererOutput>, 'options' | 'rules' | 'lexer'>;\n          const tokenizerFunc = pack.tokenizer[tokenizerProp] as UnknownFunction;\n          const prevTokenizer = tokenizer[tokenizerProp] as UnknownFunction;\n          // Replace tokenizer with func to run extension, but fall back if false\n          // @ts-expect-error cannot type tokenizer function dynamically\n          tokenizer[tokenizerProp] = (...args: unknown[]) => {\n            let ret = tokenizerFunc.apply(tokenizer, args);\n            if (ret === false) {\n              ret = prevTokenizer.apply(tokenizer, args);\n            }\n            return ret;\n          };\n        }\n        opts.tokenizer = tokenizer;\n      }\n\n      // ==-- Parse Hooks extensions --== //\n      if (pack.hooks) {\n        const hooks = this.defaults.hooks || new _Hooks<ParserOutput, RendererOutput>();\n        for (const prop in pack.hooks) {\n          if (!(prop in hooks)) {\n            throw new Error(`hook '${prop}' does not exist`);\n          }\n          if (['options', 'block'].includes(prop)) {\n            // ignore options and block properties\n            continue;\n          }\n          const hooksProp = prop as Exclude<keyof _Hooks<ParserOutput, RendererOutput>, 'options' | 'block'>;\n          const hooksFunc = pack.hooks[hooksProp] as UnknownFunction;\n          const prevHook = hooks[hooksProp] as UnknownFunction;\n          if (_Hooks.passThroughHooks.has(prop)) {\n            // @ts-expect-error cannot type hook function dynamically\n            hooks[hooksProp] = (arg: unknown) => {\n              if (this.defaults.async && _Hooks.passThroughHooksRespectAsync.has(prop)) {\n                return (async() => {\n                  const ret = await hooksFunc.call(hooks, arg);\n                  return prevHook.call(hooks, ret);\n                })();\n              }\n\n              const ret = hooksFunc.call(hooks, arg);\n              return prevHook.call(hooks, ret);\n            };\n          } else {\n            // @ts-expect-error cannot type hook function dynamically\n            hooks[hooksProp] = (...args: unknown[]) => {\n              if (this.defaults.async) {\n                return (async() => {\n                  let ret = await hooksFunc.apply(hooks, args);\n                  if (ret === false) {\n                    ret = await prevHook.apply(hooks, args);\n                  }\n                  return ret;\n                })();\n              }\n\n              let ret = hooksFunc.apply(hooks, args);\n              if (ret === false) {\n                ret = prevHook.apply(hooks, args);\n              }\n              return ret;\n            };\n          }\n        }\n        opts.hooks = hooks;\n      }\n\n      // ==-- Parse WalkTokens extensions --== //\n      if (pack.walkTokens) {\n        const walkTokens = this.defaults.walkTokens;\n        const packWalktokens = pack.walkTokens;\n        opts.walkTokens = function(token) {\n          let values: MaybePromise[] = [];\n          values.push(packWalktokens.call(this, token));\n          if (walkTokens) {\n            values = values.concat(walkTokens.call(this, token));\n          }\n          return values;\n        };\n      }\n\n      this.defaults = { ...this.defaults, ...opts };\n    });\n\n    return this;\n  }\n\n  setOptions(opt: MarkedOptions<ParserOutput, RendererOutput>) {\n    this.defaults = { ...this.defaults, ...opt };\n    return this;\n  }\n\n  lexer(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    return _Lexer.lex(src, options ?? this.defaults);\n  }\n\n  parser(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    return _Parser.parse<ParserOutput, RendererOutput>(tokens, options ?? this.defaults);\n  }\n\n  private parseMarkdown(blockType: boolean) {\n    type overloadedParse = {\n      (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: true }): Promise<ParserOutput>;\n      (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: false }): ParserOutput;\n      (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): ParserOutput | Promise<ParserOutput>;\n    };\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const parse: overloadedParse = (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): any => {\n      const origOpt = { ...options };\n      const opt = { ...this.defaults, ...origOpt };\n\n      const throwError = this.onError(!!opt.silent, !!opt.async);\n\n      // throw error if an extension set async to true but parse was called with async: false\n      if (this.defaults.async === true && origOpt.async === false) {\n        return throwError(new Error('marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.'));\n      }\n\n      // throw error in case of non string input\n      if (typeof src === 'undefined' || src === null) {\n        return throwError(new Error('marked(): input parameter is undefined or null'));\n      }\n      if (typeof src !== 'string') {\n        return throwError(new Error('marked(): input parameter is of type '\n          + Object.prototype.toString.call(src) + ', string expected'));\n      }\n\n      if (opt.hooks) {\n        opt.hooks.options = opt;\n        opt.hooks.block = blockType;\n      }\n\n      if (opt.async) {\n        return (async() => {\n          const processedSrc = opt.hooks ? await opt.hooks.preprocess(src) : src;\n          const lexer = opt.hooks ? await opt.hooks.provideLexer(blockType) : (blockType ? _Lexer.lex : _Lexer.lexInline);\n          const tokens = await lexer(processedSrc, opt);\n          const processedTokens = opt.hooks ? await opt.hooks.processAllTokens(tokens) : tokens;\n          if (opt.walkTokens) {\n            await Promise.all(this.walkTokens(processedTokens, opt.walkTokens));\n          }\n          const parser = opt.hooks ? await opt.hooks.provideParser(blockType) : (blockType ? _Parser.parse : _Parser.parseInline);\n          const html = await parser(processedTokens, opt);\n          return opt.hooks ? await opt.hooks.postprocess(html) : html;\n        })().catch(throwError);\n      }\n\n      try {\n        if (opt.hooks) {\n          src = opt.hooks.preprocess(src) as string;\n        }\n        const lexer = opt.hooks ? opt.hooks.provideLexer(blockType) : (blockType ? _Lexer.lex : _Lexer.lexInline);\n        let tokens = lexer(src, opt);\n        if (opt.hooks) {\n          tokens = opt.hooks.processAllTokens(tokens);\n        }\n        if (opt.walkTokens) {\n          this.walkTokens(tokens, opt.walkTokens);\n        }\n        const parser = opt.hooks ? opt.hooks.provideParser(blockType) : (blockType ? _Parser.parse : _Parser.parseInline);\n        let html = parser(tokens, opt);\n        if (opt.hooks) {\n          html = opt.hooks.postprocess(html);\n        }\n        return html;\n      } catch(e) {\n        return throwError(e as Error);\n      }\n    };\n\n    return parse;\n  }\n\n  private onError(silent: boolean, async: boolean) {\n    return (e: Error): string | Promise<string> => {\n      e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n      if (silent) {\n        const msg = '<p>An error occurred:</p><pre>'\n          + escapeHtmlEntities(e.message + '', true)\n          + '</pre>';\n        if (async) {\n          return Promise.resolve(msg);\n        }\n        return msg;\n      }\n\n      if (async) {\n        return Promise.reject(e);\n      }\n      throw e;\n    };\n  }\n}\n","import { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { Marked } from './Instance.ts';\nimport {\n  _getDefaults,\n  changeDefaults,\n  _defaults,\n} from './defaults.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\nimport type { MaybePromise } from './Instance.ts';\n\nconst markedInstance = new Marked();\n\n/**\n * Compiles markdown to HTML asynchronously.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options, having async: true\n * @return Promise of string of compiled HTML\n */\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\n\n/**\n * Compiles markdown to HTML.\n *\n * @param src String of markdown source to be compiled\n * @param options Optional hash of options\n * @return String of compiled HTML. Will be a Promise of string if async is set to true by any extensions.\n */\nexport function marked(src: string, options: MarkedOptions & { async: false }): string;\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\nexport function marked(src: string, options?: MarkedOptions | null): string | Promise<string>;\nexport function marked(src: string, opt?: MarkedOptions | null): string | Promise<string> {\n  return markedInstance.parse(src, opt);\n}\n\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n  marked.setOptions = function(options: MarkedOptions) {\n    markedInstance.setOptions(options);\n    marked.defaults = markedInstance.defaults;\n    changeDefaults(marked.defaults);\n    return marked;\n  };\n\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\n\nmarked.defaults = _defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(...args: MarkedExtension[]) {\n  markedInstance.use(...args);\n  marked.defaults = markedInstance.defaults;\n  changeDefaults(marked.defaults);\n  return marked;\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n  return markedInstance.walkTokens(tokens, callback);\n};\n\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\n\nexport const options = marked.options;\nexport const setOptions = marked.setOptions;\nexport const use = marked.use;\nexport const walkTokens = marked.walkTokens;\nexport const parseInline = marked.parseInline;\nexport const parse = marked;\nexport const parser = _Parser.parse;\nexport const lexer = _Lexer.lex;\nexport { _defaults as defaults, _getDefaults as getDefaults } from './defaults.ts';\nexport { _Lexer as Lexer } from './Lexer.ts';\nexport { _Parser as Parser } from './Parser.ts';\nexport { _Tokenizer as Tokenizer } from './Tokenizer.ts';\nexport { _Renderer as Renderer } from './Renderer.ts';\nexport { _TextRenderer as TextRenderer } from './TextRenderer.ts';\nexport { _Hooks as Hooks } from './Hooks.ts';\nexport { Marked } from './Instance.ts';\nexport type * from './MarkedOptions.ts';\nexport type * from './Tokens.ts';\n","'use strict';\n\n// This module is generated by `script/`.\n/* eslint-disable no-control-regex, no-misleading-character-class, no-useless-escape */\nconst regex = /[\\0-\\x1F!-,\\.\\/:-@\\[-\\^`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u0590\\u05BE\\u05C0\\u05C3\\u05C6\\u05C8-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u060F\\u061B-\\u061F\\u066A-\\u066D\\u06D4\\u06DD\\u06DE\\u06E9\\u06FD\\u06FE\\u0700-\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07F6-\\u07F9\\u07FB\\u07FC\\u07FE\\u07FF\\u082E-\\u083F\\u085C-\\u085F\\u086B-\\u089F\\u08B5\\u08C8-\\u08D2\\u08E2\\u0964\\u0965\\u0970\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09F2-\\u09FB\\u09FD\\u09FF\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A76-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF0-\\u0AF8\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B54\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B70\\u0B72-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BF0-\\u0BFF\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5B-\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C7F\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDD\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0CFF\\u0D0D\\u0D11\\u0D45\\u0D49\\u0D4F-\\u0D53\\u0D58-\\u0D5E\\u0D64\\u0D65\\u0D70-\\u0D79\\u0D80\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DE5\\u0DF0\\u0DF1\\u0DF4-\\u0E00\\u0E3B-\\u0E3F\\u0E4F\\u0E5A-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F17\\u0F1A-\\u0F1F\\u0F2A-\\u0F34\\u0F36\\u0F38\\u0F3A-\\u0F3D\\u0F48\\u0F6D-\\u0F70\\u0F85\\u0F98\\u0FBD-\\u0FC5\\u0FC7-\\u0FFF\\u104A-\\u104F\\u109E\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u1360-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16ED\\u16F9-\\u16FF\\u170D\\u1715-\\u171F\\u1735-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17D4-\\u17D6\\u17D8-\\u17DB\\u17DE\\u17DF\\u17EA-\\u180A\\u180E\\u180F\\u181A-\\u181F\\u1879-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F\\u192C-\\u192F\\u193C-\\u1945\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DA-\\u19FF\\u1A1C-\\u1A1F\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1AA6\\u1AA8-\\u1AAF\\u1AC1-\\u1AFF\\u1B4C-\\u1B4F\\u1B5A-\\u1B6A\\u1B74-\\u1B7F\\u1BF4-\\u1BFF\\u1C38-\\u1C3F\\u1C4A-\\u1C4C\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CCF\\u1CD3\\u1CFB-\\u1CFF\\u1DFA\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u203E\\u2041-\\u2053\\u2055-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u20CF\\u20F1-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u215F\\u2189-\\u24B5\\u24EA-\\u2BFF\\u2C2F\\u2C5F\\u2CE5-\\u2CEA\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E00-\\u2E2E\\u2E30-\\u3004\\u3008-\\u3020\\u3030\\u3036\\u3037\\u303D-\\u3040\\u3097\\u3098\\u309B\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\u9FFD-\\u9FFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA62C-\\uA63F\\uA673\\uA67E\\uA6F2-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7C0\\uA7C1\\uA7CB-\\uA7F4\\uA828-\\uA82B\\uA82D-\\uA83F\\uA874-\\uA87F\\uA8C6-\\uA8CF\\uA8DA-\\uA8DF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA954-\\uA95F\\uA97D-\\uA97F\\uA9C1-\\uA9CE\\uA9DA-\\uA9DF\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A-\\uAA5F\\uAA77-\\uAA79\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAF0\\uAAF1\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABEB\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFDFF\\uFE10-\\uFE1F\\uFE30-\\uFE32\\uFE35-\\uFE4C\\uFE50-\\uFE6F\\uFE75\\uFEFD-\\uFF0F\\uFF1A-\\uFF20\\uFF3B-\\uFF3E\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDD3F\\uDD75-\\uDDFC\\uDDFE-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEDF\\uDEE1-\\uDEFF\\uDF20-\\uDF2C\\uDF4B-\\uDF4F\\uDF7B-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0\\uDFD6-\\uDFFF]|\\uD801[\\uDC9E\\uDC9F\\uDCAA-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE04\\uDE07-\\uDE0B\\uDE14\\uDE18\\uDE36\\uDE37\\uDE3B-\\uDE3E\\uDE40-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE7-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD28-\\uDD2F\\uDD3A-\\uDE7F\\uDEAA\\uDEAD-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF51-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC47-\\uDC65\\uDC70-\\uDC7E\\uDCBB-\\uDCCF\\uDCE9-\\uDCEF\\uDCFA-\\uDCFF\\uDD35\\uDD40-\\uDD43\\uDD48-\\uDD4F\\uDD74\\uDD75\\uDD77-\\uDD7F\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE38-\\uDE3D\\uDE3F-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEEB-\\uDEEF\\uDEFA-\\uDEFF\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A\\uDF45\\uDF46\\uDF49\\uDF4A\\uDF4E\\uDF4F\\uDF51-\\uDF56\\uDF58-\\uDF5C\\uDF64\\uDF65\\uDF6D-\\uDF6F\\uDF75-\\uDFFF]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A-\\uDC5D\\uDC62-\\uDC7F\\uDCC6\\uDCC8-\\uDCCF\\uDCDA-\\uDD7F\\uDDB6\\uDDB7\\uDDC1-\\uDDD7\\uDDDE-\\uDDFF\\uDE41-\\uDE43\\uDE45-\\uDE4F\\uDE5A-\\uDE7F\\uDEB9-\\uDEBF\\uDECA-\\uDEFF\\uDF1B\\uDF1C\\uDF2C-\\uDF2F\\uDF3A-\\uDFFF]|\\uD806[\\uDC3B-\\uDC9F\\uDCEA-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD36\\uDD39\\uDD3A\\uDD44-\\uDD4F\\uDD5A-\\uDD9F\\uDDA8\\uDDA9\\uDDD8\\uDDD9\\uDDE2\\uDDE5-\\uDDFF\\uDE3F-\\uDE46\\uDE48-\\uDE4F\\uDE9A-\\uDE9C\\uDE9E-\\uDEBF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC37\\uDC41-\\uDC4F\\uDC5A-\\uDC71\\uDC90\\uDC91\\uDCA8\\uDCB7-\\uDCFF\\uDD07\\uDD0A\\uDD37-\\uDD39\\uDD3B\\uDD3E\\uDD48-\\uDD4F\\uDD5A-\\uDD5F\\uDD66\\uDD69\\uDD8F\\uDD92\\uDD99-\\uDD9F\\uDDAA-\\uDEDF\\uDEF7-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC6F-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80B\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82B\\uD82D\\uD82E\\uD830-\\uD833\\uD837\\uD839\\uD83D\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDB3F\\uDB41-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F\\uDE6A-\\uDECF\\uDEEE\\uDEEF\\uDEF5-\\uDEFF\\uDF37-\\uDF3F\\uDF44-\\uDF4F\\uDF5A-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4E\\uDF88-\\uDF8E\\uDFA0-\\uDFDF\\uDFE2\\uDFE5-\\uDFEF\\uDFF2-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82C[\\uDD1F-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDC9C\\uDC9F-\\uDFFF]|\\uD834[\\uDC00-\\uDD64\\uDD6A-\\uDD6C\\uDD73-\\uDD7A\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDE41\\uDE45-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC\\uDFCD]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85-\\uDE9A\\uDEA0\\uDEB0-\\uDFFF]|\\uD838[\\uDC07\\uDC19\\uDC1A\\uDC22\\uDC25\\uDC2B-\\uDCFF\\uDD2D-\\uDD2F\\uDD3E\\uDD3F\\uDD4A-\\uDD4D\\uDD4F-\\uDEBF\\uDEFA-\\uDFFF]|\\uD83A[\\uDCC5-\\uDCCF\\uDCD7-\\uDCFF\\uDD4C-\\uDD4F\\uDD5A-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD83C[\\uDC00-\\uDD2F\\uDD4A-\\uDD4F\\uDD6A-\\uDD6F\\uDD8A-\\uDFFF]|\\uD83E[\\uDC00-\\uDFEF\\uDFFA-\\uDFFF]|\\uD869[\\uDEDE-\\uDEFF]|\\uD86D[\\uDF35-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|\\uDB40[\\uDC00-\\uDCFF\\uDDF0-\\uDFFF]/g;\n\nconst own = Object.hasOwnProperty;\n\n/**\n * Slugger.\n */\nclass BananaSlug {\n  /**\n   * Create a new slug class.\n   */\n  constructor () {\n    /** @type {Record<string, number>} */\n    // eslint-disable-next-line no-unused-expressions\n    this.occurrences;\n\n    this.reset();\n  }\n\n  /**\n   * Generate a unique slug.\n  *\n  * Tracks previously generated slugs: repeated calls with the same value\n  * will result in different slugs.\n  * Use the `slug` function to get same slugs.\n   *\n   * @param  {string} value\n   *   String of text to slugify\n   * @param  {boolean} [maintainCase=false]\n   *   Keep the current case, otherwise make all lowercase\n   * @return {string}\n   *   A unique slug string\n   */\n  slug (value, maintainCase) {\n    const self = this;\n    let result = slug(value, maintainCase === true);\n    const originalSlug = result;\n\n    while (own.call(self.occurrences, result)) {\n      self.occurrences[originalSlug]++;\n      result = originalSlug + '-' + self.occurrences[originalSlug];\n    }\n\n    self.occurrences[result] = 0;\n\n    return result\n  }\n\n  /**\n   * Reset - Forget all previous slugs\n   *\n   * @return void\n   */\n  reset () {\n    this.occurrences = Object.create(null);\n  }\n}\n\n/**\n * Generate a slug.\n *\n * Does not track previously generated slugs: repeated calls with the same value\n * will result in the exact same slug.\n * Use the `GithubSlugger` class to get unique slugs.\n *\n * @param  {string} value\n *   String of text to slugify\n * @param  {boolean} [maintainCase=false]\n *   Keep the current case, otherwise make all lowercase\n * @return {string}\n *   A unique slug string\n */\nfunction slug (value, maintainCase) {\n  if (typeof value !== 'string') return ''\n  if (!maintainCase) value = value.toLowerCase();\n  return value.replace(regex, '').replace(/ /g, '-')\n}\n\nlet slugger = new BananaSlug();\n\nlet headings = [];\n\n// unescape from marked helpers\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n/* istanbul ignore next */\nfunction unescape(html) {\n  // explicitly match decimal, hex, and named HTML entities\n  return html.replace(unescapeTest, (_, n) => {\n    n = n.toLowerCase();\n    if (n === 'colon') return ':';\n    if (n.charAt(0) === '#') {\n      return n.charAt(1) === 'x'\n        ? String.fromCharCode(parseInt(n.substring(2), 16))\n        : String.fromCharCode(+n.substring(1));\n    }\n    return '';\n  });\n}\n\nfunction gfmHeadingId({ prefix = '', globalSlugs = false } = {}) {\n  return {\n    headerIds: false, // prevent deprecation warning; remove this once headerIds option is removed\n    hooks: {\n      preprocess(src) {\n        if (!globalSlugs) {\n          resetHeadings();\n        }\n        return src;\n      },\n    },\n    useNewRenderer: true,\n    renderer: {\n      heading({ tokens, depth }) {\n        const text = this.parser.parseInline(tokens);\n        const raw = unescape(text)\n          .trim()\n          .replace(/<[!\\/a-z].*?>/gi, '');\n        const level = depth;\n        const id = `${prefix}${slugger.slug(raw.toLowerCase())}`;\n        const heading = { level, text, id, raw };\n        headings.push(heading);\n\n        return `<h${level} id=\"${id}\">${text}</h${level}>\\n`;\n      },\n    },\n  };\n}\n\nfunction getHeadingList() {\n  return headings;\n}\n\nfunction resetHeadings() {\n  headings = [];\n  slugger = new BananaSlug();\n}\n\nexports.getHeadingList = getHeadingList;\nexports.gfmHeadingId = gfmHeadingId;\nexports.resetHeadings = resetHeadings;\nexports.unescape = unescape;\n","const UNDEFINED_CODE_POINTS = new Set([\n    65534, 65535, 131070, 131071, 196606, 196607, 262142, 262143, 327678, 327679, 393214,\n    393215, 458750, 458751, 524286, 524287, 589822, 589823, 655358, 655359, 720894,\n    720895, 786430, 786431, 851966, 851967, 917502, 917503, 983038, 983039, 1048574,\n    1048575, 1114110, 1114111,\n]);\nexport const REPLACEMENT_CHARACTER = '\\uFFFD';\nexport var CODE_POINTS;\n(function (CODE_POINTS) {\n    CODE_POINTS[CODE_POINTS[\"EOF\"] = -1] = \"EOF\";\n    CODE_POINTS[CODE_POINTS[\"NULL\"] = 0] = \"NULL\";\n    CODE_POINTS[CODE_POINTS[\"TABULATION\"] = 9] = \"TABULATION\";\n    CODE_POINTS[CODE_POINTS[\"CARRIAGE_RETURN\"] = 13] = \"CARRIAGE_RETURN\";\n    CODE_POINTS[CODE_POINTS[\"LINE_FEED\"] = 10] = \"LINE_FEED\";\n    CODE_POINTS[CODE_POINTS[\"FORM_FEED\"] = 12] = \"FORM_FEED\";\n    CODE_POINTS[CODE_POINTS[\"SPACE\"] = 32] = \"SPACE\";\n    CODE_POINTS[CODE_POINTS[\"EXCLAMATION_MARK\"] = 33] = \"EXCLAMATION_MARK\";\n    CODE_POINTS[CODE_POINTS[\"QUOTATION_MARK\"] = 34] = \"QUOTATION_MARK\";\n    CODE_POINTS[CODE_POINTS[\"AMPERSAND\"] = 38] = \"AMPERSAND\";\n    CODE_POINTS[CODE_POINTS[\"APOSTROPHE\"] = 39] = \"APOSTROPHE\";\n    CODE_POINTS[CODE_POINTS[\"HYPHEN_MINUS\"] = 45] = \"HYPHEN_MINUS\";\n    CODE_POINTS[CODE_POINTS[\"SOLIDUS\"] = 47] = \"SOLIDUS\";\n    CODE_POINTS[CODE_POINTS[\"DIGIT_0\"] = 48] = \"DIGIT_0\";\n    CODE_POINTS[CODE_POINTS[\"DIGIT_9\"] = 57] = \"DIGIT_9\";\n    CODE_POINTS[CODE_POINTS[\"SEMICOLON\"] = 59] = \"SEMICOLON\";\n    CODE_POINTS[CODE_POINTS[\"LESS_THAN_SIGN\"] = 60] = \"LESS_THAN_SIGN\";\n    CODE_POINTS[CODE_POINTS[\"EQUALS_SIGN\"] = 61] = \"EQUALS_SIGN\";\n    CODE_POINTS[CODE_POINTS[\"GREATER_THAN_SIGN\"] = 62] = \"GREATER_THAN_SIGN\";\n    CODE_POINTS[CODE_POINTS[\"QUESTION_MARK\"] = 63] = \"QUESTION_MARK\";\n    CODE_POINTS[CODE_POINTS[\"LATIN_CAPITAL_A\"] = 65] = \"LATIN_CAPITAL_A\";\n    CODE_POINTS[CODE_POINTS[\"LATIN_CAPITAL_Z\"] = 90] = \"LATIN_CAPITAL_Z\";\n    CODE_POINTS[CODE_POINTS[\"RIGHT_SQUARE_BRACKET\"] = 93] = \"RIGHT_SQUARE_BRACKET\";\n    CODE_POINTS[CODE_POINTS[\"GRAVE_ACCENT\"] = 96] = \"GRAVE_ACCENT\";\n    CODE_POINTS[CODE_POINTS[\"LATIN_SMALL_A\"] = 97] = \"LATIN_SMALL_A\";\n    CODE_POINTS[CODE_POINTS[\"LATIN_SMALL_Z\"] = 122] = \"LATIN_SMALL_Z\";\n})(CODE_POINTS || (CODE_POINTS = {}));\nexport const SEQUENCES = {\n    DASH_DASH: '--',\n    CDATA_START: '[CDATA[',\n    DOCTYPE: 'doctype',\n    SCRIPT: 'script',\n    PUBLIC: 'public',\n    SYSTEM: 'system',\n};\n//Surrogates\nexport function isSurrogate(cp) {\n    return cp >= 55296 && cp <= 57343;\n}\nexport function isSurrogatePair(cp) {\n    return cp >= 56320 && cp <= 57343;\n}\nexport function getSurrogatePairCodePoint(cp1, cp2) {\n    return (cp1 - 55296) * 1024 + 9216 + cp2;\n}\n//NOTE: excluding NULL and ASCII whitespace\nexport function isControlCodePoint(cp) {\n    return ((cp !== 0x20 && cp !== 0x0a && cp !== 0x0d && cp !== 0x09 && cp !== 0x0c && cp >= 0x01 && cp <= 0x1f) ||\n        (cp >= 0x7f && cp <= 0x9f));\n}\nexport function isUndefinedCodePoint(cp) {\n    return (cp >= 64976 && cp <= 65007) || UNDEFINED_CODE_POINTS.has(cp);\n}\n","export var ERR;\n(function (ERR) {\n    ERR[\"controlCharacterInInputStream\"] = \"control-character-in-input-stream\";\n    ERR[\"noncharacterInInputStream\"] = \"noncharacter-in-input-stream\";\n    ERR[\"surrogateInInputStream\"] = \"surrogate-in-input-stream\";\n    ERR[\"nonVoidHtmlElementStartTagWithTrailingSolidus\"] = \"non-void-html-element-start-tag-with-trailing-solidus\";\n    ERR[\"endTagWithAttributes\"] = \"end-tag-with-attributes\";\n    ERR[\"endTagWithTrailingSolidus\"] = \"end-tag-with-trailing-solidus\";\n    ERR[\"unexpectedSolidusInTag\"] = \"unexpected-solidus-in-tag\";\n    ERR[\"unexpectedNullCharacter\"] = \"unexpected-null-character\";\n    ERR[\"unexpectedQuestionMarkInsteadOfTagName\"] = \"unexpected-question-mark-instead-of-tag-name\";\n    ERR[\"invalidFirstCharacterOfTagName\"] = \"invalid-first-character-of-tag-name\";\n    ERR[\"unexpectedEqualsSignBeforeAttributeName\"] = \"unexpected-equals-sign-before-attribute-name\";\n    ERR[\"missingEndTagName\"] = \"missing-end-tag-name\";\n    ERR[\"unexpectedCharacterInAttributeName\"] = \"unexpected-character-in-attribute-name\";\n    ERR[\"unknownNamedCharacterReference\"] = \"unknown-named-character-reference\";\n    ERR[\"missingSemicolonAfterCharacterReference\"] = \"missing-semicolon-after-character-reference\";\n    ERR[\"unexpectedCharacterAfterDoctypeSystemIdentifier\"] = \"unexpected-character-after-doctype-system-identifier\";\n    ERR[\"unexpectedCharacterInUnquotedAttributeValue\"] = \"unexpected-character-in-unquoted-attribute-value\";\n    ERR[\"eofBeforeTagName\"] = \"eof-before-tag-name\";\n    ERR[\"eofInTag\"] = \"eof-in-tag\";\n    ERR[\"missingAttributeValue\"] = \"missing-attribute-value\";\n    ERR[\"missingWhitespaceBetweenAttributes\"] = \"missing-whitespace-between-attributes\";\n    ERR[\"missingWhitespaceAfterDoctypePublicKeyword\"] = \"missing-whitespace-after-doctype-public-keyword\";\n    ERR[\"missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers\"] = \"missing-whitespace-between-doctype-public-and-system-identifiers\";\n    ERR[\"missingWhitespaceAfterDoctypeSystemKeyword\"] = \"missing-whitespace-after-doctype-system-keyword\";\n    ERR[\"missingQuoteBeforeDoctypePublicIdentifier\"] = \"missing-quote-before-doctype-public-identifier\";\n    ERR[\"missingQuoteBeforeDoctypeSystemIdentifier\"] = \"missing-quote-before-doctype-system-identifier\";\n    ERR[\"missingDoctypePublicIdentifier\"] = \"missing-doctype-public-identifier\";\n    ERR[\"missingDoctypeSystemIdentifier\"] = \"missing-doctype-system-identifier\";\n    ERR[\"abruptDoctypePublicIdentifier\"] = \"abrupt-doctype-public-identifier\";\n    ERR[\"abruptDoctypeSystemIdentifier\"] = \"abrupt-doctype-system-identifier\";\n    ERR[\"cdataInHtmlContent\"] = \"cdata-in-html-content\";\n    ERR[\"incorrectlyOpenedComment\"] = \"incorrectly-opened-comment\";\n    ERR[\"eofInScriptHtmlCommentLikeText\"] = \"eof-in-script-html-comment-like-text\";\n    ERR[\"eofInDoctype\"] = \"eof-in-doctype\";\n    ERR[\"nestedComment\"] = \"nested-comment\";\n    ERR[\"abruptClosingOfEmptyComment\"] = \"abrupt-closing-of-empty-comment\";\n    ERR[\"eofInComment\"] = \"eof-in-comment\";\n    ERR[\"incorrectlyClosedComment\"] = \"incorrectly-closed-comment\";\n    ERR[\"eofInCdata\"] = \"eof-in-cdata\";\n    ERR[\"absenceOfDigitsInNumericCharacterReference\"] = \"absence-of-digits-in-numeric-character-reference\";\n    ERR[\"nullCharacterReference\"] = \"null-character-reference\";\n    ERR[\"surrogateCharacterReference\"] = \"surrogate-character-reference\";\n    ERR[\"characterReferenceOutsideUnicodeRange\"] = \"character-reference-outside-unicode-range\";\n    ERR[\"controlCharacterReference\"] = \"control-character-reference\";\n    ERR[\"noncharacterCharacterReference\"] = \"noncharacter-character-reference\";\n    ERR[\"missingWhitespaceBeforeDoctypeName\"] = \"missing-whitespace-before-doctype-name\";\n    ERR[\"missingDoctypeName\"] = \"missing-doctype-name\";\n    ERR[\"invalidCharacterSequenceAfterDoctypeName\"] = \"invalid-character-sequence-after-doctype-name\";\n    ERR[\"duplicateAttribute\"] = \"duplicate-attribute\";\n    ERR[\"nonConformingDoctype\"] = \"non-conforming-doctype\";\n    ERR[\"missingDoctype\"] = \"missing-doctype\";\n    ERR[\"misplacedDoctype\"] = \"misplaced-doctype\";\n    ERR[\"endTagWithoutMatchingOpenElement\"] = \"end-tag-without-matching-open-element\";\n    ERR[\"closingOfElementWithOpenChildElements\"] = \"closing-of-element-with-open-child-elements\";\n    ERR[\"disallowedContentInNoscriptInHead\"] = \"disallowed-content-in-noscript-in-head\";\n    ERR[\"openElementsLeftAfterEof\"] = \"open-elements-left-after-eof\";\n    ERR[\"abandonedHeadElementChild\"] = \"abandoned-head-element-child\";\n    ERR[\"misplacedStartTagForHeadElement\"] = \"misplaced-start-tag-for-head-element\";\n    ERR[\"nestedNoscriptInHead\"] = \"nested-noscript-in-head\";\n    ERR[\"eofInElementThatCanContainOnlyText\"] = \"eof-in-element-that-can-contain-only-text\";\n})(ERR || (ERR = {}));\n","export var TokenType;\n(function (TokenType) {\n    TokenType[TokenType[\"CHARACTER\"] = 0] = \"CHARACTER\";\n    TokenType[TokenType[\"NULL_CHARACTER\"] = 1] = \"NULL_CHARACTER\";\n    TokenType[TokenType[\"WHITESPACE_CHARACTER\"] = 2] = \"WHITESPACE_CHARACTER\";\n    TokenType[TokenType[\"START_TAG\"] = 3] = \"START_TAG\";\n    TokenType[TokenType[\"END_TAG\"] = 4] = \"END_TAG\";\n    TokenType[TokenType[\"COMMENT\"] = 5] = \"COMMENT\";\n    TokenType[TokenType[\"DOCTYPE\"] = 6] = \"DOCTYPE\";\n    TokenType[TokenType[\"EOF\"] = 7] = \"EOF\";\n    TokenType[TokenType[\"HIBERNATION\"] = 8] = \"HIBERNATION\";\n})(TokenType || (TokenType = {}));\nexport function getTokenAttr(token, attrName) {\n    for (let i = token.attrs.length - 1; i >= 0; i--) {\n        if (token.attrs[i].name === attrName) {\n            return token.attrs[i].value;\n        }\n    }\n    return null;\n}\n","import { CODE_POINTS as $, getSurrogatePairCodePoint, isControlCodePoint, isSurrogate, isSurrogatePair, isUndefinedCodePoint, } from '../common/unicode.js';\nimport { ERR } from '../common/error-codes.js';\n//Const\nconst DEFAULT_BUFFER_WATERLINE = 1 << 16;\n//Preprocessor\n//NOTE: HTML input preprocessing\n//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#preprocessing-the-input-stream)\nexport class Preprocessor {\n    constructor(handler) {\n        this.handler = handler;\n        this.html = '';\n        this.pos = -1;\n        // NOTE: Initial `lastGapPos` is -2, to ensure `col` on initialisation is 0\n        this.lastGapPos = -2;\n        this.gapStack = [];\n        this.skipNextNewLine = false;\n        this.lastChunkWritten = false;\n        this.endOfChunkHit = false;\n        this.bufferWaterline = DEFAULT_BUFFER_WATERLINE;\n        this.isEol = false;\n        this.lineStartPos = 0;\n        this.droppedBufferSize = 0;\n        this.line = 1;\n        //NOTE: avoid reporting errors twice on advance/retreat\n        this.lastErrOffset = -1;\n    }\n    /** The column on the current line. If we just saw a gap (eg. a surrogate pair), return the index before. */\n    get col() {\n        return this.pos - this.lineStartPos + Number(this.lastGapPos !== this.pos);\n    }\n    get offset() {\n        return this.droppedBufferSize + this.pos;\n    }\n    getError(code, cpOffset) {\n        const { line, col, offset } = this;\n        const startCol = col + cpOffset;\n        const startOffset = offset + cpOffset;\n        return {\n            code,\n            startLine: line,\n            endLine: line,\n            startCol,\n            endCol: startCol,\n            startOffset,\n            endOffset: startOffset,\n        };\n    }\n    _err(code) {\n        if (this.handler.onParseError && this.lastErrOffset !== this.offset) {\n            this.lastErrOffset = this.offset;\n            this.handler.onParseError(this.getError(code, 0));\n        }\n    }\n    _addGap() {\n        this.gapStack.push(this.lastGapPos);\n        this.lastGapPos = this.pos;\n    }\n    _processSurrogate(cp) {\n        //NOTE: try to peek a surrogate pair\n        if (this.pos !== this.html.length - 1) {\n            const nextCp = this.html.charCodeAt(this.pos + 1);\n            if (isSurrogatePair(nextCp)) {\n                //NOTE: we have a surrogate pair. Peek pair character and recalculate code point.\n                this.pos++;\n                //NOTE: add a gap that should be avoided during retreat\n                this._addGap();\n                return getSurrogatePairCodePoint(cp, nextCp);\n            }\n        }\n        //NOTE: we are at the end of a chunk, therefore we can't infer the surrogate pair yet.\n        else if (!this.lastChunkWritten) {\n            this.endOfChunkHit = true;\n            return $.EOF;\n        }\n        //NOTE: isolated surrogate\n        this._err(ERR.surrogateInInputStream);\n        return cp;\n    }\n    willDropParsedChunk() {\n        return this.pos > this.bufferWaterline;\n    }\n    dropParsedChunk() {\n        if (this.willDropParsedChunk()) {\n            this.html = this.html.substring(this.pos);\n            this.lineStartPos -= this.pos;\n            this.droppedBufferSize += this.pos;\n            this.pos = 0;\n            this.lastGapPos = -2;\n            this.gapStack.length = 0;\n        }\n    }\n    write(chunk, isLastChunk) {\n        if (this.html.length > 0) {\n            this.html += chunk;\n        }\n        else {\n            this.html = chunk;\n        }\n        this.endOfChunkHit = false;\n        this.lastChunkWritten = isLastChunk;\n    }\n    insertHtmlAtCurrentPos(chunk) {\n        this.html = this.html.substring(0, this.pos + 1) + chunk + this.html.substring(this.pos + 1);\n        this.endOfChunkHit = false;\n    }\n    startsWith(pattern, caseSensitive) {\n        // Check if our buffer has enough characters\n        if (this.pos + pattern.length > this.html.length) {\n            this.endOfChunkHit = !this.lastChunkWritten;\n            return false;\n        }\n        if (caseSensitive) {\n            return this.html.startsWith(pattern, this.pos);\n        }\n        for (let i = 0; i < pattern.length; i++) {\n            const cp = this.html.charCodeAt(this.pos + i) | 0x20;\n            if (cp !== pattern.charCodeAt(i)) {\n                return false;\n            }\n        }\n        return true;\n    }\n    peek(offset) {\n        const pos = this.pos + offset;\n        if (pos >= this.html.length) {\n            this.endOfChunkHit = !this.lastChunkWritten;\n            return $.EOF;\n        }\n        const code = this.html.charCodeAt(pos);\n        return code === $.CARRIAGE_RETURN ? $.LINE_FEED : code;\n    }\n    advance() {\n        this.pos++;\n        //NOTE: LF should be in the last column of the line\n        if (this.isEol) {\n            this.isEol = false;\n            this.line++;\n            this.lineStartPos = this.pos;\n        }\n        if (this.pos >= this.html.length) {\n            this.endOfChunkHit = !this.lastChunkWritten;\n            return $.EOF;\n        }\n        let cp = this.html.charCodeAt(this.pos);\n        //NOTE: all U+000D CARRIAGE RETURN (CR) characters must be converted to U+000A LINE FEED (LF) characters\n        if (cp === $.CARRIAGE_RETURN) {\n            this.isEol = true;\n            this.skipNextNewLine = true;\n            return $.LINE_FEED;\n        }\n        //NOTE: any U+000A LINE FEED (LF) characters that immediately follow a U+000D CARRIAGE RETURN (CR) character\n        //must be ignored.\n        if (cp === $.LINE_FEED) {\n            this.isEol = true;\n            if (this.skipNextNewLine) {\n                // `line` will be bumped again in the recursive call.\n                this.line--;\n                this.skipNextNewLine = false;\n                this._addGap();\n                return this.advance();\n            }\n        }\n        this.skipNextNewLine = false;\n        if (isSurrogate(cp)) {\n            cp = this._processSurrogate(cp);\n        }\n        //OPTIMIZATION: first check if code point is in the common allowed\n        //range (ASCII alphanumeric, whitespaces, big chunk of BMP)\n        //before going into detailed performance cost validation.\n        const isCommonValidRange = this.handler.onParseError === null ||\n            (cp > 0x1f && cp < 0x7f) ||\n            cp === $.LINE_FEED ||\n            cp === $.CARRIAGE_RETURN ||\n            (cp > 0x9f && cp < 64976);\n        if (!isCommonValidRange) {\n            this._checkForProblematicCharacters(cp);\n        }\n        return cp;\n    }\n    _checkForProblematicCharacters(cp) {\n        if (isControlCodePoint(cp)) {\n            this._err(ERR.controlCharacterInInputStream);\n        }\n        else if (isUndefinedCodePoint(cp)) {\n            this._err(ERR.noncharacterInInputStream);\n        }\n    }\n    retreat(count) {\n        this.pos -= count;\n        while (this.pos < this.lastGapPos) {\n            this.lastGapPos = this.gapStack.pop();\n            this.pos--;\n        }\n        this.isEol = false;\n    }\n}\n","/** All valid namespaces in HTML. */\nexport var NS;\n(function (NS) {\n    NS[\"HTML\"] = \"http://www.w3.org/1999/xhtml\";\n    NS[\"MATHML\"] = \"http://www.w3.org/1998/Math/MathML\";\n    NS[\"SVG\"] = \"http://www.w3.org/2000/svg\";\n    NS[\"XLINK\"] = \"http://www.w3.org/1999/xlink\";\n    NS[\"XML\"] = \"http://www.w3.org/XML/1998/namespace\";\n    NS[\"XMLNS\"] = \"http://www.w3.org/2000/xmlns/\";\n})(NS || (NS = {}));\nexport var ATTRS;\n(function (ATTRS) {\n    ATTRS[\"TYPE\"] = \"type\";\n    ATTRS[\"ACTION\"] = \"action\";\n    ATTRS[\"ENCODING\"] = \"encoding\";\n    ATTRS[\"PROMPT\"] = \"prompt\";\n    ATTRS[\"NAME\"] = \"name\";\n    ATTRS[\"COLOR\"] = \"color\";\n    ATTRS[\"FACE\"] = \"face\";\n    ATTRS[\"SIZE\"] = \"size\";\n})(ATTRS || (ATTRS = {}));\n/**\n * The mode of the document.\n *\n * @see {@link https://dom.spec.whatwg.org/#concept-document-limited-quirks}\n */\nexport var DOCUMENT_MODE;\n(function (DOCUMENT_MODE) {\n    DOCUMENT_MODE[\"NO_QUIRKS\"] = \"no-quirks\";\n    DOCUMENT_MODE[\"QUIRKS\"] = \"quirks\";\n    DOCUMENT_MODE[\"LIMITED_QUIRKS\"] = \"limited-quirks\";\n})(DOCUMENT_MODE || (DOCUMENT_MODE = {}));\nexport var TAG_NAMES;\n(function (TAG_NAMES) {\n    TAG_NAMES[\"A\"] = \"a\";\n    TAG_NAMES[\"ADDRESS\"] = \"address\";\n    TAG_NAMES[\"ANNOTATION_XML\"] = \"annotation-xml\";\n    TAG_NAMES[\"APPLET\"] = \"applet\";\n    TAG_NAMES[\"AREA\"] = \"area\";\n    TAG_NAMES[\"ARTICLE\"] = \"article\";\n    TAG_NAMES[\"ASIDE\"] = \"aside\";\n    TAG_NAMES[\"B\"] = \"b\";\n    TAG_NAMES[\"BASE\"] = \"base\";\n    TAG_NAMES[\"BASEFONT\"] = \"basefont\";\n    TAG_NAMES[\"BGSOUND\"] = \"bgsound\";\n    TAG_NAMES[\"BIG\"] = \"big\";\n    TAG_NAMES[\"BLOCKQUOTE\"] = \"blockquote\";\n    TAG_NAMES[\"BODY\"] = \"body\";\n    TAG_NAMES[\"BR\"] = \"br\";\n    TAG_NAMES[\"BUTTON\"] = \"button\";\n    TAG_NAMES[\"CAPTION\"] = \"caption\";\n    TAG_NAMES[\"CENTER\"] = \"center\";\n    TAG_NAMES[\"CODE\"] = \"code\";\n    TAG_NAMES[\"COL\"] = \"col\";\n    TAG_NAMES[\"COLGROUP\"] = \"colgroup\";\n    TAG_NAMES[\"DD\"] = \"dd\";\n    TAG_NAMES[\"DESC\"] = \"desc\";\n    TAG_NAMES[\"DETAILS\"] = \"details\";\n    TAG_NAMES[\"DIALOG\"] = \"dialog\";\n    TAG_NAMES[\"DIR\"] = \"dir\";\n    TAG_NAMES[\"DIV\"] = \"div\";\n    TAG_NAMES[\"DL\"] = \"dl\";\n    TAG_NAMES[\"DT\"] = \"dt\";\n    TAG_NAMES[\"EM\"] = \"em\";\n    TAG_NAMES[\"EMBED\"] = \"embed\";\n    TAG_NAMES[\"FIELDSET\"] = \"fieldset\";\n    TAG_NAMES[\"FIGCAPTION\"] = \"figcaption\";\n    TAG_NAMES[\"FIGURE\"] = \"figure\";\n    TAG_NAMES[\"FONT\"] = \"font\";\n    TAG_NAMES[\"FOOTER\"] = \"footer\";\n    TAG_NAMES[\"FOREIGN_OBJECT\"] = \"foreignObject\";\n    TAG_NAMES[\"FORM\"] = \"form\";\n    TAG_NAMES[\"FRAME\"] = \"frame\";\n    TAG_NAMES[\"FRAMESET\"] = \"frameset\";\n    TAG_NAMES[\"H1\"] = \"h1\";\n    TAG_NAMES[\"H2\"] = \"h2\";\n    TAG_NAMES[\"H3\"] = \"h3\";\n    TAG_NAMES[\"H4\"] = \"h4\";\n    TAG_NAMES[\"H5\"] = \"h5\";\n    TAG_NAMES[\"H6\"] = \"h6\";\n    TAG_NAMES[\"HEAD\"] = \"head\";\n    TAG_NAMES[\"HEADER\"] = \"header\";\n    TAG_NAMES[\"HGROUP\"] = \"hgroup\";\n    TAG_NAMES[\"HR\"] = \"hr\";\n    TAG_NAMES[\"HTML\"] = \"html\";\n    TAG_NAMES[\"I\"] = \"i\";\n    TAG_NAMES[\"IMG\"] = \"img\";\n    TAG_NAMES[\"IMAGE\"] = \"image\";\n    TAG_NAMES[\"INPUT\"] = \"input\";\n    TAG_NAMES[\"IFRAME\"] = \"iframe\";\n    TAG_NAMES[\"KEYGEN\"] = \"keygen\";\n    TAG_NAMES[\"LABEL\"] = \"label\";\n    TAG_NAMES[\"LI\"] = \"li\";\n    TAG_NAMES[\"LINK\"] = \"link\";\n    TAG_NAMES[\"LISTING\"] = \"listing\";\n    TAG_NAMES[\"MAIN\"] = \"main\";\n    TAG_NAMES[\"MALIGNMARK\"] = \"malignmark\";\n    TAG_NAMES[\"MARQUEE\"] = \"marquee\";\n    TAG_NAMES[\"MATH\"] = \"math\";\n    TAG_NAMES[\"MENU\"] = \"menu\";\n    TAG_NAMES[\"META\"] = \"meta\";\n    TAG_NAMES[\"MGLYPH\"] = \"mglyph\";\n    TAG_NAMES[\"MI\"] = \"mi\";\n    TAG_NAMES[\"MO\"] = \"mo\";\n    TAG_NAMES[\"MN\"] = \"mn\";\n    TAG_NAMES[\"MS\"] = \"ms\";\n    TAG_NAMES[\"MTEXT\"] = \"mtext\";\n    TAG_NAMES[\"NAV\"] = \"nav\";\n    TAG_NAMES[\"NOBR\"] = \"nobr\";\n    TAG_NAMES[\"NOFRAMES\"] = \"noframes\";\n    TAG_NAMES[\"NOEMBED\"] = \"noembed\";\n    TAG_NAMES[\"NOSCRIPT\"] = \"noscript\";\n    TAG_NAMES[\"OBJECT\"] = \"object\";\n    TAG_NAMES[\"OL\"] = \"ol\";\n    TAG_NAMES[\"OPTGROUP\"] = \"optgroup\";\n    TAG_NAMES[\"OPTION\"] = \"option\";\n    TAG_NAMES[\"P\"] = \"p\";\n    TAG_NAMES[\"PARAM\"] = \"param\";\n    TAG_NAMES[\"PLAINTEXT\"] = \"plaintext\";\n    TAG_NAMES[\"PRE\"] = \"pre\";\n    TAG_NAMES[\"RB\"] = \"rb\";\n    TAG_NAMES[\"RP\"] = \"rp\";\n    TAG_NAMES[\"RT\"] = \"rt\";\n    TAG_NAMES[\"RTC\"] = \"rtc\";\n    TAG_NAMES[\"RUBY\"] = \"ruby\";\n    TAG_NAMES[\"S\"] = \"s\";\n    TAG_NAMES[\"SCRIPT\"] = \"script\";\n    TAG_NAMES[\"SEARCH\"] = \"search\";\n    TAG_NAMES[\"SECTION\"] = \"section\";\n    TAG_NAMES[\"SELECT\"] = \"select\";\n    TAG_NAMES[\"SOURCE\"] = \"source\";\n    TAG_NAMES[\"SMALL\"] = \"small\";\n    TAG_NAMES[\"SPAN\"] = \"span\";\n    TAG_NAMES[\"STRIKE\"] = \"strike\";\n    TAG_NAMES[\"STRONG\"] = \"strong\";\n    TAG_NAMES[\"STYLE\"] = \"style\";\n    TAG_NAMES[\"SUB\"] = \"sub\";\n    TAG_NAMES[\"SUMMARY\"] = \"summary\";\n    TAG_NAMES[\"SUP\"] = \"sup\";\n    TAG_NAMES[\"TABLE\"] = \"table\";\n    TAG_NAMES[\"TBODY\"] = \"tbody\";\n    TAG_NAMES[\"TEMPLATE\"] = \"template\";\n    TAG_NAMES[\"TEXTAREA\"] = \"textarea\";\n    TAG_NAMES[\"TFOOT\"] = \"tfoot\";\n    TAG_NAMES[\"TD\"] = \"td\";\n    TAG_NAMES[\"TH\"] = \"th\";\n    TAG_NAMES[\"THEAD\"] = \"thead\";\n    TAG_NAMES[\"TITLE\"] = \"title\";\n    TAG_NAMES[\"TR\"] = \"tr\";\n    TAG_NAMES[\"TRACK\"] = \"track\";\n    TAG_NAMES[\"TT\"] = \"tt\";\n    TAG_NAMES[\"U\"] = \"u\";\n    TAG_NAMES[\"UL\"] = \"ul\";\n    TAG_NAMES[\"SVG\"] = \"svg\";\n    TAG_NAMES[\"VAR\"] = \"var\";\n    TAG_NAMES[\"WBR\"] = \"wbr\";\n    TAG_NAMES[\"XMP\"] = \"xmp\";\n})(TAG_NAMES || (TAG_NAMES = {}));\n/**\n * Tag IDs are numeric IDs for known tag names.\n *\n * We use tag IDs to improve the performance of tag name comparisons.\n */\nexport var TAG_ID;\n(function (TAG_ID) {\n    TAG_ID[TAG_ID[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n    TAG_ID[TAG_ID[\"A\"] = 1] = \"A\";\n    TAG_ID[TAG_ID[\"ADDRESS\"] = 2] = \"ADDRESS\";\n    TAG_ID[TAG_ID[\"ANNOTATION_XML\"] = 3] = \"ANNOTATION_XML\";\n    TAG_ID[TAG_ID[\"APPLET\"] = 4] = \"APPLET\";\n    TAG_ID[TAG_ID[\"AREA\"] = 5] = \"AREA\";\n    TAG_ID[TAG_ID[\"ARTICLE\"] = 6] = \"ARTICLE\";\n    TAG_ID[TAG_ID[\"ASIDE\"] = 7] = \"ASIDE\";\n    TAG_ID[TAG_ID[\"B\"] = 8] = \"B\";\n    TAG_ID[TAG_ID[\"BASE\"] = 9] = \"BASE\";\n    TAG_ID[TAG_ID[\"BASEFONT\"] = 10] = \"BASEFONT\";\n    TAG_ID[TAG_ID[\"BGSOUND\"] = 11] = \"BGSOUND\";\n    TAG_ID[TAG_ID[\"BIG\"] = 12] = \"BIG\";\n    TAG_ID[TAG_ID[\"BLOCKQUOTE\"] = 13] = \"BLOCKQUOTE\";\n    TAG_ID[TAG_ID[\"BODY\"] = 14] = \"BODY\";\n    TAG_ID[TAG_ID[\"BR\"] = 15] = \"BR\";\n    TAG_ID[TAG_ID[\"BUTTON\"] = 16] = \"BUTTON\";\n    TAG_ID[TAG_ID[\"CAPTION\"] = 17] = \"CAPTION\";\n    TAG_ID[TAG_ID[\"CENTER\"] = 18] = \"CENTER\";\n    TAG_ID[TAG_ID[\"CODE\"] = 19] = \"CODE\";\n    TAG_ID[TAG_ID[\"COL\"] = 20] = \"COL\";\n    TAG_ID[TAG_ID[\"COLGROUP\"] = 21] = \"COLGROUP\";\n    TAG_ID[TAG_ID[\"DD\"] = 22] = \"DD\";\n    TAG_ID[TAG_ID[\"DESC\"] = 23] = \"DESC\";\n    TAG_ID[TAG_ID[\"DETAILS\"] = 24] = \"DETAILS\";\n    TAG_ID[TAG_ID[\"DIALOG\"] = 25] = \"DIALOG\";\n    TAG_ID[TAG_ID[\"DIR\"] = 26] = \"DIR\";\n    TAG_ID[TAG_ID[\"DIV\"] = 27] = \"DIV\";\n    TAG_ID[TAG_ID[\"DL\"] = 28] = \"DL\";\n    TAG_ID[TAG_ID[\"DT\"] = 29] = \"DT\";\n    TAG_ID[TAG_ID[\"EM\"] = 30] = \"EM\";\n    TAG_ID[TAG_ID[\"EMBED\"] = 31] = \"EMBED\";\n    TAG_ID[TAG_ID[\"FIELDSET\"] = 32] = \"FIELDSET\";\n    TAG_ID[TAG_ID[\"FIGCAPTION\"] = 33] = \"FIGCAPTION\";\n    TAG_ID[TAG_ID[\"FIGURE\"] = 34] = \"FIGURE\";\n    TAG_ID[TAG_ID[\"FONT\"] = 35] = \"FONT\";\n    TAG_ID[TAG_ID[\"FOOTER\"] = 36] = \"FOOTER\";\n    TAG_ID[TAG_ID[\"FOREIGN_OBJECT\"] = 37] = \"FOREIGN_OBJECT\";\n    TAG_ID[TAG_ID[\"FORM\"] = 38] = \"FORM\";\n    TAG_ID[TAG_ID[\"FRAME\"] = 39] = \"FRAME\";\n    TAG_ID[TAG_ID[\"FRAMESET\"] = 40] = \"FRAMESET\";\n    TAG_ID[TAG_ID[\"H1\"] = 41] = \"H1\";\n    TAG_ID[TAG_ID[\"H2\"] = 42] = \"H2\";\n    TAG_ID[TAG_ID[\"H3\"] = 43] = \"H3\";\n    TAG_ID[TAG_ID[\"H4\"] = 44] = \"H4\";\n    TAG_ID[TAG_ID[\"H5\"] = 45] = \"H5\";\n    TAG_ID[TAG_ID[\"H6\"] = 46] = \"H6\";\n    TAG_ID[TAG_ID[\"HEAD\"] = 47] = \"HEAD\";\n    TAG_ID[TAG_ID[\"HEADER\"] = 48] = \"HEADER\";\n    TAG_ID[TAG_ID[\"HGROUP\"] = 49] = \"HGROUP\";\n    TAG_ID[TAG_ID[\"HR\"] = 50] = \"HR\";\n    TAG_ID[TAG_ID[\"HTML\"] = 51] = \"HTML\";\n    TAG_ID[TAG_ID[\"I\"] = 52] = \"I\";\n    TAG_ID[TAG_ID[\"IMG\"] = 53] = \"IMG\";\n    TAG_ID[TAG_ID[\"IMAGE\"] = 54] = \"IMAGE\";\n    TAG_ID[TAG_ID[\"INPUT\"] = 55] = \"INPUT\";\n    TAG_ID[TAG_ID[\"IFRAME\"] = 56] = \"IFRAME\";\n    TAG_ID[TAG_ID[\"KEYGEN\"] = 57] = \"KEYGEN\";\n    TAG_ID[TAG_ID[\"LABEL\"] = 58] = \"LABEL\";\n    TAG_ID[TAG_ID[\"LI\"] = 59] = \"LI\";\n    TAG_ID[TAG_ID[\"LINK\"] = 60] = \"LINK\";\n    TAG_ID[TAG_ID[\"LISTING\"] = 61] = \"LISTING\";\n    TAG_ID[TAG_ID[\"MAIN\"] = 62] = \"MAIN\";\n    TAG_ID[TAG_ID[\"MALIGNMARK\"] = 63] = \"MALIGNMARK\";\n    TAG_ID[TAG_ID[\"MARQUEE\"] = 64] = \"MARQUEE\";\n    TAG_ID[TAG_ID[\"MATH\"] = 65] = \"MATH\";\n    TAG_ID[TAG_ID[\"MENU\"] = 66] = \"MENU\";\n    TAG_ID[TAG_ID[\"META\"] = 67] = \"META\";\n    TAG_ID[TAG_ID[\"MGLYPH\"] = 68] = \"MGLYPH\";\n    TAG_ID[TAG_ID[\"MI\"] = 69] = \"MI\";\n    TAG_ID[TAG_ID[\"MO\"] = 70] = \"MO\";\n    TAG_ID[TAG_ID[\"MN\"] = 71] = \"MN\";\n    TAG_ID[TAG_ID[\"MS\"] = 72] = \"MS\";\n    TAG_ID[TAG_ID[\"MTEXT\"] = 73] = \"MTEXT\";\n    TAG_ID[TAG_ID[\"NAV\"] = 74] = \"NAV\";\n    TAG_ID[TAG_ID[\"NOBR\"] = 75] = \"NOBR\";\n    TAG_ID[TAG_ID[\"NOFRAMES\"] = 76] = \"NOFRAMES\";\n    TAG_ID[TAG_ID[\"NOEMBED\"] = 77] = \"NOEMBED\";\n    TAG_ID[TAG_ID[\"NOSCRIPT\"] = 78] = \"NOSCRIPT\";\n    TAG_ID[TAG_ID[\"OBJECT\"] = 79] = \"OBJECT\";\n    TAG_ID[TAG_ID[\"OL\"] = 80] = \"OL\";\n    TAG_ID[TAG_ID[\"OPTGROUP\"] = 81] = \"OPTGROUP\";\n    TAG_ID[TAG_ID[\"OPTION\"] = 82] = \"OPTION\";\n    TAG_ID[TAG_ID[\"P\"] = 83] = \"P\";\n    TAG_ID[TAG_ID[\"PARAM\"] = 84] = \"PARAM\";\n    TAG_ID[TAG_ID[\"PLAINTEXT\"] = 85] = \"PLAINTEXT\";\n    TAG_ID[TAG_ID[\"PRE\"] = 86] = \"PRE\";\n    TAG_ID[TAG_ID[\"RB\"] = 87] = \"RB\";\n    TAG_ID[TAG_ID[\"RP\"] = 88] = \"RP\";\n    TAG_ID[TAG_ID[\"RT\"] = 89] = \"RT\";\n    TAG_ID[TAG_ID[\"RTC\"] = 90] = \"RTC\";\n    TAG_ID[TAG_ID[\"RUBY\"] = 91] = \"RUBY\";\n    TAG_ID[TAG_ID[\"S\"] = 92] = \"S\";\n    TAG_ID[TAG_ID[\"SCRIPT\"] = 93] = \"SCRIPT\";\n    TAG_ID[TAG_ID[\"SEARCH\"] = 94] = \"SEARCH\";\n    TAG_ID[TAG_ID[\"SECTION\"] = 95] = \"SECTION\";\n    TAG_ID[TAG_ID[\"SELECT\"] = 96] = \"SELECT\";\n    TAG_ID[TAG_ID[\"SOURCE\"] = 97] = \"SOURCE\";\n    TAG_ID[TAG_ID[\"SMALL\"] = 98] = \"SMALL\";\n    TAG_ID[TAG_ID[\"SPAN\"] = 99] = \"SPAN\";\n    TAG_ID[TAG_ID[\"STRIKE\"] = 100] = \"STRIKE\";\n    TAG_ID[TAG_ID[\"STRONG\"] = 101] = \"STRONG\";\n    TAG_ID[TAG_ID[\"STYLE\"] = 102] = \"STYLE\";\n    TAG_ID[TAG_ID[\"SUB\"] = 103] = \"SUB\";\n    TAG_ID[TAG_ID[\"SUMMARY\"] = 104] = \"SUMMARY\";\n    TAG_ID[TAG_ID[\"SUP\"] = 105] = \"SUP\";\n    TAG_ID[TAG_ID[\"TABLE\"] = 106] = \"TABLE\";\n    TAG_ID[TAG_ID[\"TBODY\"] = 107] = \"TBODY\";\n    TAG_ID[TAG_ID[\"TEMPLATE\"] = 108] = \"TEMPLATE\";\n    TAG_ID[TAG_ID[\"TEXTAREA\"] = 109] = \"TEXTAREA\";\n    TAG_ID[TAG_ID[\"TFOOT\"] = 110] = \"TFOOT\";\n    TAG_ID[TAG_ID[\"TD\"] = 111] = \"TD\";\n    TAG_ID[TAG_ID[\"TH\"] = 112] = \"TH\";\n    TAG_ID[TAG_ID[\"THEAD\"] = 113] = \"THEAD\";\n    TAG_ID[TAG_ID[\"TITLE\"] = 114] = \"TITLE\";\n    TAG_ID[TAG_ID[\"TR\"] = 115] = \"TR\";\n    TAG_ID[TAG_ID[\"TRACK\"] = 116] = \"TRACK\";\n    TAG_ID[TAG_ID[\"TT\"] = 117] = \"TT\";\n    TAG_ID[TAG_ID[\"U\"] = 118] = \"U\";\n    TAG_ID[TAG_ID[\"UL\"] = 119] = \"UL\";\n    TAG_ID[TAG_ID[\"SVG\"] = 120] = \"SVG\";\n    TAG_ID[TAG_ID[\"VAR\"] = 121] = \"VAR\";\n    TAG_ID[TAG_ID[\"WBR\"] = 122] = \"WBR\";\n    TAG_ID[TAG_ID[\"XMP\"] = 123] = \"XMP\";\n})(TAG_ID || (TAG_ID = {}));\nconst TAG_NAME_TO_ID = new Map([\n    [TAG_NAMES.A, TAG_ID.A],\n    [TAG_NAMES.ADDRESS, TAG_ID.ADDRESS],\n    [TAG_NAMES.ANNOTATION_XML, TAG_ID.ANNOTATION_XML],\n    [TAG_NAMES.APPLET, TAG_ID.APPLET],\n    [TAG_NAMES.AREA, TAG_ID.AREA],\n    [TAG_NAMES.ARTICLE, TAG_ID.ARTICLE],\n    [TAG_NAMES.ASIDE, TAG_ID.ASIDE],\n    [TAG_NAMES.B, TAG_ID.B],\n    [TAG_NAMES.BASE, TAG_ID.BASE],\n    [TAG_NAMES.BASEFONT, TAG_ID.BASEFONT],\n    [TAG_NAMES.BGSOUND, TAG_ID.BGSOUND],\n    [TAG_NAMES.BIG, TAG_ID.BIG],\n    [TAG_NAMES.BLOCKQUOTE, TAG_ID.BLOCKQUOTE],\n    [TAG_NAMES.BODY, TAG_ID.BODY],\n    [TAG_NAMES.BR, TAG_ID.BR],\n    [TAG_NAMES.BUTTON, TAG_ID.BUTTON],\n    [TAG_NAMES.CAPTION, TAG_ID.CAPTION],\n    [TAG_NAMES.CENTER, TAG_ID.CENTER],\n    [TAG_NAMES.CODE, TAG_ID.CODE],\n    [TAG_NAMES.COL, TAG_ID.COL],\n    [TAG_NAMES.COLGROUP, TAG_ID.COLGROUP],\n    [TAG_NAMES.DD, TAG_ID.DD],\n    [TAG_NAMES.DESC, TAG_ID.DESC],\n    [TAG_NAMES.DETAILS, TAG_ID.DETAILS],\n    [TAG_NAMES.DIALOG, TAG_ID.DIALOG],\n    [TAG_NAMES.DIR, TAG_ID.DIR],\n    [TAG_NAMES.DIV, TAG_ID.DIV],\n    [TAG_NAMES.DL, TAG_ID.DL],\n    [TAG_NAMES.DT, TAG_ID.DT],\n    [TAG_NAMES.EM, TAG_ID.EM],\n    [TAG_NAMES.EMBED, TAG_ID.EMBED],\n    [TAG_NAMES.FIELDSET, TAG_ID.FIELDSET],\n    [TAG_NAMES.FIGCAPTION, TAG_ID.FIGCAPTION],\n    [TAG_NAMES.FIGURE, TAG_ID.FIGURE],\n    [TAG_NAMES.FONT, TAG_ID.FONT],\n    [TAG_NAMES.FOOTER, TAG_ID.FOOTER],\n    [TAG_NAMES.FOREIGN_OBJECT, TAG_ID.FOREIGN_OBJECT],\n    [TAG_NAMES.FORM, TAG_ID.FORM],\n    [TAG_NAMES.FRAME, TAG_ID.FRAME],\n    [TAG_NAMES.FRAMESET, TAG_ID.FRAMESET],\n    [TAG_NAMES.H1, TAG_ID.H1],\n    [TAG_NAMES.H2, TAG_ID.H2],\n    [TAG_NAMES.H3, TAG_ID.H3],\n    [TAG_NAMES.H4, TAG_ID.H4],\n    [TAG_NAMES.H5, TAG_ID.H5],\n    [TAG_NAMES.H6, TAG_ID.H6],\n    [TAG_NAMES.HEAD, TAG_ID.HEAD],\n    [TAG_NAMES.HEADER, TAG_ID.HEADER],\n    [TAG_NAMES.HGROUP, TAG_ID.HGROUP],\n    [TAG_NAMES.HR, TAG_ID.HR],\n    [TAG_NAMES.HTML, TAG_ID.HTML],\n    [TAG_NAMES.I, TAG_ID.I],\n    [TAG_NAMES.IMG, TAG_ID.IMG],\n    [TAG_NAMES.IMAGE, TAG_ID.IMAGE],\n    [TAG_NAMES.INPUT, TAG_ID.INPUT],\n    [TAG_NAMES.IFRAME, TAG_ID.IFRAME],\n    [TAG_NAMES.KEYGEN, TAG_ID.KEYGEN],\n    [TAG_NAMES.LABEL, TAG_ID.LABEL],\n    [TAG_NAMES.LI, TAG_ID.LI],\n    [TAG_NAMES.LINK, TAG_ID.LINK],\n    [TAG_NAMES.LISTING, TAG_ID.LISTING],\n    [TAG_NAMES.MAIN, TAG_ID.MAIN],\n    [TAG_NAMES.MALIGNMARK, TAG_ID.MALIGNMARK],\n    [TAG_NAMES.MARQUEE, TAG_ID.MARQUEE],\n    [TAG_NAMES.MATH, TAG_ID.MATH],\n    [TAG_NAMES.MENU, TAG_ID.MENU],\n    [TAG_NAMES.META, TAG_ID.META],\n    [TAG_NAMES.MGLYPH, TAG_ID.MGLYPH],\n    [TAG_NAMES.MI, TAG_ID.MI],\n    [TAG_NAMES.MO, TAG_ID.MO],\n    [TAG_NAMES.MN, TAG_ID.MN],\n    [TAG_NAMES.MS, TAG_ID.MS],\n    [TAG_NAMES.MTEXT, TAG_ID.MTEXT],\n    [TAG_NAMES.NAV, TAG_ID.NAV],\n    [TAG_NAMES.NOBR, TAG_ID.NOBR],\n    [TAG_NAMES.NOFRAMES, TAG_ID.NOFRAMES],\n    [TAG_NAMES.NOEMBED, TAG_ID.NOEMBED],\n    [TAG_NAMES.NOSCRIPT, TAG_ID.NOSCRIPT],\n    [TAG_NAMES.OBJECT, TAG_ID.OBJECT],\n    [TAG_NAMES.OL, TAG_ID.OL],\n    [TAG_NAMES.OPTGROUP, TAG_ID.OPTGROUP],\n    [TAG_NAMES.OPTION, TAG_ID.OPTION],\n    [TAG_NAMES.P, TAG_ID.P],\n    [TAG_NAMES.PARAM, TAG_ID.PARAM],\n    [TAG_NAMES.PLAINTEXT, TAG_ID.PLAINTEXT],\n    [TAG_NAMES.PRE, TAG_ID.PRE],\n    [TAG_NAMES.RB, TAG_ID.RB],\n    [TAG_NAMES.RP, TAG_ID.RP],\n    [TAG_NAMES.RT, TAG_ID.RT],\n    [TAG_NAMES.RTC, TAG_ID.RTC],\n    [TAG_NAMES.RUBY, TAG_ID.RUBY],\n    [TAG_NAMES.S, TAG_ID.S],\n    [TAG_NAMES.SCRIPT, TAG_ID.SCRIPT],\n    [TAG_NAMES.SEARCH, TAG_ID.SEARCH],\n    [TAG_NAMES.SECTION, TAG_ID.SECTION],\n    [TAG_NAMES.SELECT, TAG_ID.SELECT],\n    [TAG_NAMES.SOURCE, TAG_ID.SOURCE],\n    [TAG_NAMES.SMALL, TAG_ID.SMALL],\n    [TAG_NAMES.SPAN, TAG_ID.SPAN],\n    [TAG_NAMES.STRIKE, TAG_ID.STRIKE],\n    [TAG_NAMES.STRONG, TAG_ID.STRONG],\n    [TAG_NAMES.STYLE, TAG_ID.STYLE],\n    [TAG_NAMES.SUB, TAG_ID.SUB],\n    [TAG_NAMES.SUMMARY, TAG_ID.SUMMARY],\n    [TAG_NAMES.SUP, TAG_ID.SUP],\n    [TAG_NAMES.TABLE, TAG_ID.TABLE],\n    [TAG_NAMES.TBODY, TAG_ID.TBODY],\n    [TAG_NAMES.TEMPLATE, TAG_ID.TEMPLATE],\n    [TAG_NAMES.TEXTAREA, TAG_ID.TEXTAREA],\n    [TAG_NAMES.TFOOT, TAG_ID.TFOOT],\n    [TAG_NAMES.TD, TAG_ID.TD],\n    [TAG_NAMES.TH, TAG_ID.TH],\n    [TAG_NAMES.THEAD, TAG_ID.THEAD],\n    [TAG_NAMES.TITLE, TAG_ID.TITLE],\n    [TAG_NAMES.TR, TAG_ID.TR],\n    [TAG_NAMES.TRACK, TAG_ID.TRACK],\n    [TAG_NAMES.TT, TAG_ID.TT],\n    [TAG_NAMES.U, TAG_ID.U],\n    [TAG_NAMES.UL, TAG_ID.UL],\n    [TAG_NAMES.SVG, TAG_ID.SVG],\n    [TAG_NAMES.VAR, TAG_ID.VAR],\n    [TAG_NAMES.WBR, TAG_ID.WBR],\n    [TAG_NAMES.XMP, TAG_ID.XMP],\n]);\nexport function getTagID(tagName) {\n    var _a;\n    return (_a = TAG_NAME_TO_ID.get(tagName)) !== null && _a !== void 0 ? _a : TAG_ID.UNKNOWN;\n}\nconst $ = TAG_ID;\nexport const SPECIAL_ELEMENTS = {\n    [NS.HTML]: new Set([\n        $.ADDRESS,\n        $.APPLET,\n        $.AREA,\n        $.ARTICLE,\n        $.ASIDE,\n        $.BASE,\n        $.BASEFONT,\n        $.BGSOUND,\n        $.BLOCKQUOTE,\n        $.BODY,\n        $.BR,\n        $.BUTTON,\n        $.CAPTION,\n        $.CENTER,\n        $.COL,\n        $.COLGROUP,\n        $.DD,\n        $.DETAILS,\n        $.DIR,\n        $.DIV,\n        $.DL,\n        $.DT,\n        $.EMBED,\n        $.FIELDSET,\n        $.FIGCAPTION,\n        $.FIGURE,\n        $.FOOTER,\n        $.FORM,\n        $.FRAME,\n        $.FRAMESET,\n        $.H1,\n        $.H2,\n        $.H3,\n        $.H4,\n        $.H5,\n        $.H6,\n        $.HEAD,\n        $.HEADER,\n        $.HGROUP,\n        $.HR,\n        $.HTML,\n        $.IFRAME,\n        $.IMG,\n        $.INPUT,\n        $.LI,\n        $.LINK,\n        $.LISTING,\n        $.MAIN,\n        $.MARQUEE,\n        $.MENU,\n        $.META,\n        $.NAV,\n        $.NOEMBED,\n        $.NOFRAMES,\n        $.NOSCRIPT,\n        $.OBJECT,\n        $.OL,\n        $.P,\n        $.PARAM,\n        $.PLAINTEXT,\n        $.PRE,\n        $.SCRIPT,\n        $.SECTION,\n        $.SELECT,\n        $.SOURCE,\n        $.STYLE,\n        $.SUMMARY,\n        $.TABLE,\n        $.TBODY,\n        $.TD,\n        $.TEMPLATE,\n        $.TEXTAREA,\n        $.TFOOT,\n        $.TH,\n        $.THEAD,\n        $.TITLE,\n        $.TR,\n        $.TRACK,\n        $.UL,\n        $.WBR,\n        $.XMP,\n    ]),\n    [NS.MATHML]: new Set([$.MI, $.MO, $.MN, $.MS, $.MTEXT, $.ANNOTATION_XML]),\n    [NS.SVG]: new Set([$.TITLE, $.FOREIGN_OBJECT, $.DESC]),\n    [NS.XLINK]: new Set(),\n    [NS.XML]: new Set(),\n    [NS.XMLNS]: new Set(),\n};\nexport const NUMBERED_HEADERS = new Set([$.H1, $.H2, $.H3, $.H4, $.H5, $.H6]);\nconst UNESCAPED_TEXT = new Set([\n    TAG_NAMES.STYLE,\n    TAG_NAMES.SCRIPT,\n    TAG_NAMES.XMP,\n    TAG_NAMES.IFRAME,\n    TAG_NAMES.NOEMBED,\n    TAG_NAMES.NOFRAMES,\n    TAG_NAMES.PLAINTEXT,\n]);\nexport function hasUnescapedText(tn, scriptingEnabled) {\n    return UNESCAPED_TEXT.has(tn) || (scriptingEnabled && tn === TAG_NAMES.NOSCRIPT);\n}\n","import { Preprocessor } from './preprocessor.js';\nimport { CODE_POINTS as $, SEQUENCES as $$, REPLACEMENT_CHARACTER, isSurrogate, isUndefinedCodePoint, isControlCodePoint, } from '../common/unicode.js';\nimport { TokenType, getTokenAttr, } from '../common/token.js';\nimport { htmlDecodeTree, EntityDecoder, DecodingMode } from 'entities/decode';\nimport { ERR } from '../common/error-codes.js';\nimport { TAG_ID, getTagID } from '../common/html.js';\n//States\nvar State;\n(function (State) {\n    State[State[\"DATA\"] = 0] = \"DATA\";\n    State[State[\"RCDATA\"] = 1] = \"RCDATA\";\n    State[State[\"RAWTEXT\"] = 2] = \"RAWTEXT\";\n    State[State[\"SCRIPT_DATA\"] = 3] = \"SCRIPT_DATA\";\n    State[State[\"PLAINTEXT\"] = 4] = \"PLAINTEXT\";\n    State[State[\"TAG_OPEN\"] = 5] = \"TAG_OPEN\";\n    State[State[\"END_TAG_OPEN\"] = 6] = \"END_TAG_OPEN\";\n    State[State[\"TAG_NAME\"] = 7] = \"TAG_NAME\";\n    State[State[\"RCDATA_LESS_THAN_SIGN\"] = 8] = \"RCDATA_LESS_THAN_SIGN\";\n    State[State[\"RCDATA_END_TAG_OPEN\"] = 9] = \"RCDATA_END_TAG_OPEN\";\n    State[State[\"RCDATA_END_TAG_NAME\"] = 10] = \"RCDATA_END_TAG_NAME\";\n    State[State[\"RAWTEXT_LESS_THAN_SIGN\"] = 11] = \"RAWTEXT_LESS_THAN_SIGN\";\n    State[State[\"RAWTEXT_END_TAG_OPEN\"] = 12] = \"RAWTEXT_END_TAG_OPEN\";\n    State[State[\"RAWTEXT_END_TAG_NAME\"] = 13] = \"RAWTEXT_END_TAG_NAME\";\n    State[State[\"SCRIPT_DATA_LESS_THAN_SIGN\"] = 14] = \"SCRIPT_DATA_LESS_THAN_SIGN\";\n    State[State[\"SCRIPT_DATA_END_TAG_OPEN\"] = 15] = \"SCRIPT_DATA_END_TAG_OPEN\";\n    State[State[\"SCRIPT_DATA_END_TAG_NAME\"] = 16] = \"SCRIPT_DATA_END_TAG_NAME\";\n    State[State[\"SCRIPT_DATA_ESCAPE_START\"] = 17] = \"SCRIPT_DATA_ESCAPE_START\";\n    State[State[\"SCRIPT_DATA_ESCAPE_START_DASH\"] = 18] = \"SCRIPT_DATA_ESCAPE_START_DASH\";\n    State[State[\"SCRIPT_DATA_ESCAPED\"] = 19] = \"SCRIPT_DATA_ESCAPED\";\n    State[State[\"SCRIPT_DATA_ESCAPED_DASH\"] = 20] = \"SCRIPT_DATA_ESCAPED_DASH\";\n    State[State[\"SCRIPT_DATA_ESCAPED_DASH_DASH\"] = 21] = \"SCRIPT_DATA_ESCAPED_DASH_DASH\";\n    State[State[\"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN\"] = 22] = \"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN\";\n    State[State[\"SCRIPT_DATA_ESCAPED_END_TAG_OPEN\"] = 23] = \"SCRIPT_DATA_ESCAPED_END_TAG_OPEN\";\n    State[State[\"SCRIPT_DATA_ESCAPED_END_TAG_NAME\"] = 24] = \"SCRIPT_DATA_ESCAPED_END_TAG_NAME\";\n    State[State[\"SCRIPT_DATA_DOUBLE_ESCAPE_START\"] = 25] = \"SCRIPT_DATA_DOUBLE_ESCAPE_START\";\n    State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED\"] = 26] = \"SCRIPT_DATA_DOUBLE_ESCAPED\";\n    State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_DASH\"] = 27] = \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH\";\n    State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH\"] = 28] = \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH\";\n    State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN\"] = 29] = \"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN\";\n    State[State[\"SCRIPT_DATA_DOUBLE_ESCAPE_END\"] = 30] = \"SCRIPT_DATA_DOUBLE_ESCAPE_END\";\n    State[State[\"BEFORE_ATTRIBUTE_NAME\"] = 31] = \"BEFORE_ATTRIBUTE_NAME\";\n    State[State[\"ATTRIBUTE_NAME\"] = 32] = \"ATTRIBUTE_NAME\";\n    State[State[\"AFTER_ATTRIBUTE_NAME\"] = 33] = \"AFTER_ATTRIBUTE_NAME\";\n    State[State[\"BEFORE_ATTRIBUTE_VALUE\"] = 34] = \"BEFORE_ATTRIBUTE_VALUE\";\n    State[State[\"ATTRIBUTE_VALUE_DOUBLE_QUOTED\"] = 35] = \"ATTRIBUTE_VALUE_DOUBLE_QUOTED\";\n    State[State[\"ATTRIBUTE_VALUE_SINGLE_QUOTED\"] = 36] = \"ATTRIBUTE_VALUE_SINGLE_QUOTED\";\n    State[State[\"ATTRIBUTE_VALUE_UNQUOTED\"] = 37] = \"ATTRIBUTE_VALUE_UNQUOTED\";\n    State[State[\"AFTER_ATTRIBUTE_VALUE_QUOTED\"] = 38] = \"AFTER_ATTRIBUTE_VALUE_QUOTED\";\n    State[State[\"SELF_CLOSING_START_TAG\"] = 39] = \"SELF_CLOSING_START_TAG\";\n    State[State[\"BOGUS_COMMENT\"] = 40] = \"BOGUS_COMMENT\";\n    State[State[\"MARKUP_DECLARATION_OPEN\"] = 41] = \"MARKUP_DECLARATION_OPEN\";\n    State[State[\"COMMENT_START\"] = 42] = \"COMMENT_START\";\n    State[State[\"COMMENT_START_DASH\"] = 43] = \"COMMENT_START_DASH\";\n    State[State[\"COMMENT\"] = 44] = \"COMMENT\";\n    State[State[\"COMMENT_LESS_THAN_SIGN\"] = 45] = \"COMMENT_LESS_THAN_SIGN\";\n    State[State[\"COMMENT_LESS_THAN_SIGN_BANG\"] = 46] = \"COMMENT_LESS_THAN_SIGN_BANG\";\n    State[State[\"COMMENT_LESS_THAN_SIGN_BANG_DASH\"] = 47] = \"COMMENT_LESS_THAN_SIGN_BANG_DASH\";\n    State[State[\"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\"] = 48] = \"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\";\n    State[State[\"COMMENT_END_DASH\"] = 49] = \"COMMENT_END_DASH\";\n    State[State[\"COMMENT_END\"] = 50] = \"COMMENT_END\";\n    State[State[\"COMMENT_END_BANG\"] = 51] = \"COMMENT_END_BANG\";\n    State[State[\"DOCTYPE\"] = 52] = \"DOCTYPE\";\n    State[State[\"BEFORE_DOCTYPE_NAME\"] = 53] = \"BEFORE_DOCTYPE_NAME\";\n    State[State[\"DOCTYPE_NAME\"] = 54] = \"DOCTYPE_NAME\";\n    State[State[\"AFTER_DOCTYPE_NAME\"] = 55] = \"AFTER_DOCTYPE_NAME\";\n    State[State[\"AFTER_DOCTYPE_PUBLIC_KEYWORD\"] = 56] = \"AFTER_DOCTYPE_PUBLIC_KEYWORD\";\n    State[State[\"BEFORE_DOCTYPE_PUBLIC_IDENTIFIER\"] = 57] = \"BEFORE_DOCTYPE_PUBLIC_IDENTIFIER\";\n    State[State[\"DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED\"] = 58] = \"DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED\";\n    State[State[\"DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED\"] = 59] = \"DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED\";\n    State[State[\"AFTER_DOCTYPE_PUBLIC_IDENTIFIER\"] = 60] = \"AFTER_DOCTYPE_PUBLIC_IDENTIFIER\";\n    State[State[\"BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS\"] = 61] = \"BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS\";\n    State[State[\"AFTER_DOCTYPE_SYSTEM_KEYWORD\"] = 62] = \"AFTER_DOCTYPE_SYSTEM_KEYWORD\";\n    State[State[\"BEFORE_DOCTYPE_SYSTEM_IDENTIFIER\"] = 63] = \"BEFORE_DOCTYPE_SYSTEM_IDENTIFIER\";\n    State[State[\"DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED\"] = 64] = \"DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED\";\n    State[State[\"DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED\"] = 65] = \"DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED\";\n    State[State[\"AFTER_DOCTYPE_SYSTEM_IDENTIFIER\"] = 66] = \"AFTER_DOCTYPE_SYSTEM_IDENTIFIER\";\n    State[State[\"BOGUS_DOCTYPE\"] = 67] = \"BOGUS_DOCTYPE\";\n    State[State[\"CDATA_SECTION\"] = 68] = \"CDATA_SECTION\";\n    State[State[\"CDATA_SECTION_BRACKET\"] = 69] = \"CDATA_SECTION_BRACKET\";\n    State[State[\"CDATA_SECTION_END\"] = 70] = \"CDATA_SECTION_END\";\n    State[State[\"CHARACTER_REFERENCE\"] = 71] = \"CHARACTER_REFERENCE\";\n    State[State[\"AMBIGUOUS_AMPERSAND\"] = 72] = \"AMBIGUOUS_AMPERSAND\";\n})(State || (State = {}));\n//Tokenizer initial states for different modes\nexport const TokenizerMode = {\n    DATA: State.DATA,\n    RCDATA: State.RCDATA,\n    RAWTEXT: State.RAWTEXT,\n    SCRIPT_DATA: State.SCRIPT_DATA,\n    PLAINTEXT: State.PLAINTEXT,\n    CDATA_SECTION: State.CDATA_SECTION,\n};\n//Utils\n//OPTIMIZATION: these utility functions should not be moved out of this module. V8 Crankshaft will not inline\n//this functions if they will be situated in another module due to context switch.\n//Always perform inlining check before modifying this functions ('node --trace-inlining').\nfunction isAsciiDigit(cp) {\n    return cp >= $.DIGIT_0 && cp <= $.DIGIT_9;\n}\nfunction isAsciiUpper(cp) {\n    return cp >= $.LATIN_CAPITAL_A && cp <= $.LATIN_CAPITAL_Z;\n}\nfunction isAsciiLower(cp) {\n    return cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_Z;\n}\nfunction isAsciiLetter(cp) {\n    return isAsciiLower(cp) || isAsciiUpper(cp);\n}\nfunction isAsciiAlphaNumeric(cp) {\n    return isAsciiLetter(cp) || isAsciiDigit(cp);\n}\nfunction toAsciiLower(cp) {\n    return cp + 32;\n}\nfunction isWhitespace(cp) {\n    return cp === $.SPACE || cp === $.LINE_FEED || cp === $.TABULATION || cp === $.FORM_FEED;\n}\nfunction isScriptDataDoubleEscapeSequenceEnd(cp) {\n    return isWhitespace(cp) || cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN;\n}\nfunction getErrorForNumericCharacterReference(code) {\n    if (code === $.NULL) {\n        return ERR.nullCharacterReference;\n    }\n    else if (code > 1114111) {\n        return ERR.characterReferenceOutsideUnicodeRange;\n    }\n    else if (isSurrogate(code)) {\n        return ERR.surrogateCharacterReference;\n    }\n    else if (isUndefinedCodePoint(code)) {\n        return ERR.noncharacterCharacterReference;\n    }\n    else if (isControlCodePoint(code) || code === $.CARRIAGE_RETURN) {\n        return ERR.controlCharacterReference;\n    }\n    return null;\n}\n//Tokenizer\nexport class Tokenizer {\n    constructor(options, handler) {\n        this.options = options;\n        this.handler = handler;\n        this.paused = false;\n        /** Ensures that the parsing loop isn't run multiple times at once. */\n        this.inLoop = false;\n        /**\n         * Indicates that the current adjusted node exists, is not an element in the HTML namespace,\n         * and that it is not an integration point for either MathML or HTML.\n         *\n         * @see {@link https://html.spec.whatwg.org/multipage/parsing.html#tree-construction}\n         */\n        this.inForeignNode = false;\n        this.lastStartTagName = '';\n        this.active = false;\n        this.state = State.DATA;\n        this.returnState = State.DATA;\n        this.entityStartPos = 0;\n        this.consumedAfterSnapshot = -1;\n        this.currentCharacterToken = null;\n        this.currentToken = null;\n        this.currentAttr = { name: '', value: '' };\n        this.preprocessor = new Preprocessor(handler);\n        this.currentLocation = this.getCurrentLocation(-1);\n        this.entityDecoder = new EntityDecoder(htmlDecodeTree, (cp, consumed) => {\n            // Note: Set `pos` _before_ flushing, as flushing might drop\n            // the current chunk and invalidate `entityStartPos`.\n            this.preprocessor.pos = this.entityStartPos + consumed - 1;\n            this._flushCodePointConsumedAsCharacterReference(cp);\n        }, handler.onParseError\n            ? {\n                missingSemicolonAfterCharacterReference: () => {\n                    this._err(ERR.missingSemicolonAfterCharacterReference, 1);\n                },\n                absenceOfDigitsInNumericCharacterReference: (consumed) => {\n                    this._err(ERR.absenceOfDigitsInNumericCharacterReference, this.entityStartPos - this.preprocessor.pos + consumed);\n                },\n                validateNumericCharacterReference: (code) => {\n                    const error = getErrorForNumericCharacterReference(code);\n                    if (error)\n                        this._err(error, 1);\n                },\n            }\n            : undefined);\n    }\n    //Errors\n    _err(code, cpOffset = 0) {\n        var _a, _b;\n        (_b = (_a = this.handler).onParseError) === null || _b === void 0 ? void 0 : _b.call(_a, this.preprocessor.getError(code, cpOffset));\n    }\n    // NOTE: `offset` may never run across line boundaries.\n    getCurrentLocation(offset) {\n        if (!this.options.sourceCodeLocationInfo) {\n            return null;\n        }\n        return {\n            startLine: this.preprocessor.line,\n            startCol: this.preprocessor.col - offset,\n            startOffset: this.preprocessor.offset - offset,\n            endLine: -1,\n            endCol: -1,\n            endOffset: -1,\n        };\n    }\n    _runParsingLoop() {\n        if (this.inLoop)\n            return;\n        this.inLoop = true;\n        while (this.active && !this.paused) {\n            this.consumedAfterSnapshot = 0;\n            const cp = this._consume();\n            if (!this._ensureHibernation()) {\n                this._callState(cp);\n            }\n        }\n        this.inLoop = false;\n    }\n    //API\n    pause() {\n        this.paused = true;\n    }\n    resume(writeCallback) {\n        if (!this.paused) {\n            throw new Error('Parser was already resumed');\n        }\n        this.paused = false;\n        // Necessary for synchronous resume.\n        if (this.inLoop)\n            return;\n        this._runParsingLoop();\n        if (!this.paused) {\n            writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();\n        }\n    }\n    write(chunk, isLastChunk, writeCallback) {\n        this.active = true;\n        this.preprocessor.write(chunk, isLastChunk);\n        this._runParsingLoop();\n        if (!this.paused) {\n            writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();\n        }\n    }\n    insertHtmlAtCurrentPos(chunk) {\n        this.active = true;\n        this.preprocessor.insertHtmlAtCurrentPos(chunk);\n        this._runParsingLoop();\n    }\n    //Hibernation\n    _ensureHibernation() {\n        if (this.preprocessor.endOfChunkHit) {\n            this.preprocessor.retreat(this.consumedAfterSnapshot);\n            this.consumedAfterSnapshot = 0;\n            this.active = false;\n            return true;\n        }\n        return false;\n    }\n    //Consumption\n    _consume() {\n        this.consumedAfterSnapshot++;\n        return this.preprocessor.advance();\n    }\n    _advanceBy(count) {\n        this.consumedAfterSnapshot += count;\n        for (let i = 0; i < count; i++) {\n            this.preprocessor.advance();\n        }\n    }\n    _consumeSequenceIfMatch(pattern, caseSensitive) {\n        if (this.preprocessor.startsWith(pattern, caseSensitive)) {\n            // We will already have consumed one character before calling this method.\n            this._advanceBy(pattern.length - 1);\n            return true;\n        }\n        return false;\n    }\n    //Token creation\n    _createStartTagToken() {\n        this.currentToken = {\n            type: TokenType.START_TAG,\n            tagName: '',\n            tagID: TAG_ID.UNKNOWN,\n            selfClosing: false,\n            ackSelfClosing: false,\n            attrs: [],\n            location: this.getCurrentLocation(1),\n        };\n    }\n    _createEndTagToken() {\n        this.currentToken = {\n            type: TokenType.END_TAG,\n            tagName: '',\n            tagID: TAG_ID.UNKNOWN,\n            selfClosing: false,\n            ackSelfClosing: false,\n            attrs: [],\n            location: this.getCurrentLocation(2),\n        };\n    }\n    _createCommentToken(offset) {\n        this.currentToken = {\n            type: TokenType.COMMENT,\n            data: '',\n            location: this.getCurrentLocation(offset),\n        };\n    }\n    _createDoctypeToken(initialName) {\n        this.currentToken = {\n            type: TokenType.DOCTYPE,\n            name: initialName,\n            forceQuirks: false,\n            publicId: null,\n            systemId: null,\n            location: this.currentLocation,\n        };\n    }\n    _createCharacterToken(type, chars) {\n        this.currentCharacterToken = {\n            type,\n            chars,\n            location: this.currentLocation,\n        };\n    }\n    //Tag attributes\n    _createAttr(attrNameFirstCh) {\n        this.currentAttr = {\n            name: attrNameFirstCh,\n            value: '',\n        };\n        this.currentLocation = this.getCurrentLocation(0);\n    }\n    _leaveAttrName() {\n        var _a;\n        var _b;\n        const token = this.currentToken;\n        if (getTokenAttr(token, this.currentAttr.name) === null) {\n            token.attrs.push(this.currentAttr);\n            if (token.location && this.currentLocation) {\n                const attrLocations = ((_a = (_b = token.location).attrs) !== null && _a !== void 0 ? _a : (_b.attrs = Object.create(null)));\n                attrLocations[this.currentAttr.name] = this.currentLocation;\n                // Set end location\n                this._leaveAttrValue();\n            }\n        }\n        else {\n            this._err(ERR.duplicateAttribute);\n        }\n    }\n    _leaveAttrValue() {\n        if (this.currentLocation) {\n            this.currentLocation.endLine = this.preprocessor.line;\n            this.currentLocation.endCol = this.preprocessor.col;\n            this.currentLocation.endOffset = this.preprocessor.offset;\n        }\n    }\n    //Token emission\n    prepareToken(ct) {\n        this._emitCurrentCharacterToken(ct.location);\n        this.currentToken = null;\n        if (ct.location) {\n            ct.location.endLine = this.preprocessor.line;\n            ct.location.endCol = this.preprocessor.col + 1;\n            ct.location.endOffset = this.preprocessor.offset + 1;\n        }\n        this.currentLocation = this.getCurrentLocation(-1);\n    }\n    emitCurrentTagToken() {\n        const ct = this.currentToken;\n        this.prepareToken(ct);\n        ct.tagID = getTagID(ct.tagName);\n        if (ct.type === TokenType.START_TAG) {\n            this.lastStartTagName = ct.tagName;\n            this.handler.onStartTag(ct);\n        }\n        else {\n            if (ct.attrs.length > 0) {\n                this._err(ERR.endTagWithAttributes);\n            }\n            if (ct.selfClosing) {\n                this._err(ERR.endTagWithTrailingSolidus);\n            }\n            this.handler.onEndTag(ct);\n        }\n        this.preprocessor.dropParsedChunk();\n    }\n    emitCurrentComment(ct) {\n        this.prepareToken(ct);\n        this.handler.onComment(ct);\n        this.preprocessor.dropParsedChunk();\n    }\n    emitCurrentDoctype(ct) {\n        this.prepareToken(ct);\n        this.handler.onDoctype(ct);\n        this.preprocessor.dropParsedChunk();\n    }\n    _emitCurrentCharacterToken(nextLocation) {\n        if (this.currentCharacterToken) {\n            //NOTE: if we have a pending character token, make it's end location equal to the\n            //current token's start location.\n            if (nextLocation && this.currentCharacterToken.location) {\n                this.currentCharacterToken.location.endLine = nextLocation.startLine;\n                this.currentCharacterToken.location.endCol = nextLocation.startCol;\n                this.currentCharacterToken.location.endOffset = nextLocation.startOffset;\n            }\n            switch (this.currentCharacterToken.type) {\n                case TokenType.CHARACTER: {\n                    this.handler.onCharacter(this.currentCharacterToken);\n                    break;\n                }\n                case TokenType.NULL_CHARACTER: {\n                    this.handler.onNullCharacter(this.currentCharacterToken);\n                    break;\n                }\n                case TokenType.WHITESPACE_CHARACTER: {\n                    this.handler.onWhitespaceCharacter(this.currentCharacterToken);\n                    break;\n                }\n            }\n            this.currentCharacterToken = null;\n        }\n    }\n    _emitEOFToken() {\n        const location = this.getCurrentLocation(0);\n        if (location) {\n            location.endLine = location.startLine;\n            location.endCol = location.startCol;\n            location.endOffset = location.startOffset;\n        }\n        this._emitCurrentCharacterToken(location);\n        this.handler.onEof({ type: TokenType.EOF, location });\n        this.active = false;\n    }\n    //Characters emission\n    //OPTIMIZATION: The specification uses only one type of character token (one token per character).\n    //This causes a huge memory overhead and a lot of unnecessary parser loops. parse5 uses 3 groups of characters.\n    //If we have a sequence of characters that belong to the same group, the parser can process it\n    //as a single solid character token.\n    //So, there are 3 types of character tokens in parse5:\n    //1)TokenType.NULL_CHARACTER - \\u0000-character sequences (e.g. '\\u0000\\u0000\\u0000')\n    //2)TokenType.WHITESPACE_CHARACTER - any whitespace/new-line character sequences (e.g. '\\n  \\r\\t   \\f')\n    //3)TokenType.CHARACTER - any character sequence which don't belong to groups 1 and 2 (e.g. 'abcdef1234@@#$%^')\n    _appendCharToCurrentCharacterToken(type, ch) {\n        if (this.currentCharacterToken) {\n            if (this.currentCharacterToken.type === type) {\n                this.currentCharacterToken.chars += ch;\n                return;\n            }\n            else {\n                this.currentLocation = this.getCurrentLocation(0);\n                this._emitCurrentCharacterToken(this.currentLocation);\n                this.preprocessor.dropParsedChunk();\n            }\n        }\n        this._createCharacterToken(type, ch);\n    }\n    _emitCodePoint(cp) {\n        const type = isWhitespace(cp)\n            ? TokenType.WHITESPACE_CHARACTER\n            : cp === $.NULL\n                ? TokenType.NULL_CHARACTER\n                : TokenType.CHARACTER;\n        // OPTIMIZATION: Use String.fromCharCode for BMP characters (< 0x10000) which is faster\n        // than String.fromCodePoint. Characters outside BMP are rare in HTML.\n        this._appendCharToCurrentCharacterToken(type, cp < 65536 ? String.fromCharCode(cp) : String.fromCodePoint(cp));\n    }\n    //NOTE: used when we emit characters explicitly.\n    //This is always for non-whitespace and non-null characters, which allows us to avoid additional checks.\n    _emitChars(ch) {\n        this._appendCharToCurrentCharacterToken(TokenType.CHARACTER, ch);\n    }\n    // Character reference helpers\n    _startCharacterReference() {\n        this.returnState = this.state;\n        this.state = State.CHARACTER_REFERENCE;\n        this.entityStartPos = this.preprocessor.pos;\n        this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute() ? DecodingMode.Attribute : DecodingMode.Legacy);\n    }\n    _isCharacterReferenceInAttribute() {\n        return (this.returnState === State.ATTRIBUTE_VALUE_DOUBLE_QUOTED ||\n            this.returnState === State.ATTRIBUTE_VALUE_SINGLE_QUOTED ||\n            this.returnState === State.ATTRIBUTE_VALUE_UNQUOTED);\n    }\n    _flushCodePointConsumedAsCharacterReference(cp) {\n        if (this._isCharacterReferenceInAttribute()) {\n            this.currentAttr.value += String.fromCodePoint(cp);\n        }\n        else {\n            this._emitCodePoint(cp);\n        }\n    }\n    // Calling states this way turns out to be much faster than any other approach.\n    _callState(cp) {\n        switch (this.state) {\n            case State.DATA: {\n                this._stateData(cp);\n                break;\n            }\n            case State.RCDATA: {\n                this._stateRcdata(cp);\n                break;\n            }\n            case State.RAWTEXT: {\n                this._stateRawtext(cp);\n                break;\n            }\n            case State.SCRIPT_DATA: {\n                this._stateScriptData(cp);\n                break;\n            }\n            case State.PLAINTEXT: {\n                this._statePlaintext(cp);\n                break;\n            }\n            case State.TAG_OPEN: {\n                this._stateTagOpen(cp);\n                break;\n            }\n            case State.END_TAG_OPEN: {\n                this._stateEndTagOpen(cp);\n                break;\n            }\n            case State.TAG_NAME: {\n                this._stateTagName(cp);\n                break;\n            }\n            case State.RCDATA_LESS_THAN_SIGN: {\n                this._stateRcdataLessThanSign(cp);\n                break;\n            }\n            case State.RCDATA_END_TAG_OPEN: {\n                this._stateRcdataEndTagOpen(cp);\n                break;\n            }\n            case State.RCDATA_END_TAG_NAME: {\n                this._stateRcdataEndTagName(cp);\n                break;\n            }\n            case State.RAWTEXT_LESS_THAN_SIGN: {\n                this._stateRawtextLessThanSign(cp);\n                break;\n            }\n            case State.RAWTEXT_END_TAG_OPEN: {\n                this._stateRawtextEndTagOpen(cp);\n                break;\n            }\n            case State.RAWTEXT_END_TAG_NAME: {\n                this._stateRawtextEndTagName(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_LESS_THAN_SIGN: {\n                this._stateScriptDataLessThanSign(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_END_TAG_OPEN: {\n                this._stateScriptDataEndTagOpen(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_END_TAG_NAME: {\n                this._stateScriptDataEndTagName(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_ESCAPE_START: {\n                this._stateScriptDataEscapeStart(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_ESCAPE_START_DASH: {\n                this._stateScriptDataEscapeStartDash(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_ESCAPED: {\n                this._stateScriptDataEscaped(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_ESCAPED_DASH: {\n                this._stateScriptDataEscapedDash(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_ESCAPED_DASH_DASH: {\n                this._stateScriptDataEscapedDashDash(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN: {\n                this._stateScriptDataEscapedLessThanSign(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN: {\n                this._stateScriptDataEscapedEndTagOpen(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_ESCAPED_END_TAG_NAME: {\n                this._stateScriptDataEscapedEndTagName(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_DOUBLE_ESCAPE_START: {\n                this._stateScriptDataDoubleEscapeStart(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_DOUBLE_ESCAPED: {\n                this._stateScriptDataDoubleEscaped(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH: {\n                this._stateScriptDataDoubleEscapedDash(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH: {\n                this._stateScriptDataDoubleEscapedDashDash(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN: {\n                this._stateScriptDataDoubleEscapedLessThanSign(cp);\n                break;\n            }\n            case State.SCRIPT_DATA_DOUBLE_ESCAPE_END: {\n                this._stateScriptDataDoubleEscapeEnd(cp);\n                break;\n            }\n            case State.BEFORE_ATTRIBUTE_NAME: {\n                this._stateBeforeAttributeName(cp);\n                break;\n            }\n            case State.ATTRIBUTE_NAME: {\n                this._stateAttributeName(cp);\n                break;\n            }\n            case State.AFTER_ATTRIBUTE_NAME: {\n                this._stateAfterAttributeName(cp);\n                break;\n            }\n            case State.BEFORE_ATTRIBUTE_VALUE: {\n                this._stateBeforeAttributeValue(cp);\n                break;\n            }\n            case State.ATTRIBUTE_VALUE_DOUBLE_QUOTED: {\n                this._stateAttributeValueDoubleQuoted(cp);\n                break;\n            }\n            case State.ATTRIBUTE_VALUE_SINGLE_QUOTED: {\n                this._stateAttributeValueSingleQuoted(cp);\n                break;\n            }\n            case State.ATTRIBUTE_VALUE_UNQUOTED: {\n                this._stateAttributeValueUnquoted(cp);\n                break;\n            }\n            case State.AFTER_ATTRIBUTE_VALUE_QUOTED: {\n                this._stateAfterAttributeValueQuoted(cp);\n                break;\n            }\n            case State.SELF_CLOSING_START_TAG: {\n                this._stateSelfClosingStartTag(cp);\n                break;\n            }\n            case State.BOGUS_COMMENT: {\n                this._stateBogusComment(cp);\n                break;\n            }\n            case State.MARKUP_DECLARATION_OPEN: {\n                this._stateMarkupDeclarationOpen(cp);\n                break;\n            }\n            case State.COMMENT_START: {\n                this._stateCommentStart(cp);\n                break;\n            }\n            case State.COMMENT_START_DASH: {\n                this._stateCommentStartDash(cp);\n                break;\n            }\n            case State.COMMENT: {\n                this._stateComment(cp);\n                break;\n            }\n            case State.COMMENT_LESS_THAN_SIGN: {\n                this._stateCommentLessThanSign(cp);\n                break;\n            }\n            case State.COMMENT_LESS_THAN_SIGN_BANG: {\n                this._stateCommentLessThanSignBang(cp);\n                break;\n            }\n            case State.COMMENT_LESS_THAN_SIGN_BANG_DASH: {\n                this._stateCommentLessThanSignBangDash(cp);\n                break;\n            }\n            case State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH: {\n                this._stateCommentLessThanSignBangDashDash(cp);\n                break;\n            }\n            case State.COMMENT_END_DASH: {\n                this._stateCommentEndDash(cp);\n                break;\n            }\n            case State.COMMENT_END: {\n                this._stateCommentEnd(cp);\n                break;\n            }\n            case State.COMMENT_END_BANG: {\n                this._stateCommentEndBang(cp);\n                break;\n            }\n            case State.DOCTYPE: {\n                this._stateDoctype(cp);\n                break;\n            }\n            case State.BEFORE_DOCTYPE_NAME: {\n                this._stateBeforeDoctypeName(cp);\n                break;\n            }\n            case State.DOCTYPE_NAME: {\n                this._stateDoctypeName(cp);\n                break;\n            }\n            case State.AFTER_DOCTYPE_NAME: {\n                this._stateAfterDoctypeName(cp);\n                break;\n            }\n            case State.AFTER_DOCTYPE_PUBLIC_KEYWORD: {\n                this._stateAfterDoctypePublicKeyword(cp);\n                break;\n            }\n            case State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER: {\n                this._stateBeforeDoctypePublicIdentifier(cp);\n                break;\n            }\n            case State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED: {\n                this._stateDoctypePublicIdentifierDoubleQuoted(cp);\n                break;\n            }\n            case State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED: {\n                this._stateDoctypePublicIdentifierSingleQuoted(cp);\n                break;\n            }\n            case State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER: {\n                this._stateAfterDoctypePublicIdentifier(cp);\n                break;\n            }\n            case State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS: {\n                this._stateBetweenDoctypePublicAndSystemIdentifiers(cp);\n                break;\n            }\n            case State.AFTER_DOCTYPE_SYSTEM_KEYWORD: {\n                this._stateAfterDoctypeSystemKeyword(cp);\n                break;\n            }\n            case State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER: {\n                this._stateBeforeDoctypeSystemIdentifier(cp);\n                break;\n            }\n            case State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED: {\n                this._stateDoctypeSystemIdentifierDoubleQuoted(cp);\n                break;\n            }\n            case State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED: {\n                this._stateDoctypeSystemIdentifierSingleQuoted(cp);\n                break;\n            }\n            case State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER: {\n                this._stateAfterDoctypeSystemIdentifier(cp);\n                break;\n            }\n            case State.BOGUS_DOCTYPE: {\n                this._stateBogusDoctype(cp);\n                break;\n            }\n            case State.CDATA_SECTION: {\n                this._stateCdataSection(cp);\n                break;\n            }\n            case State.CDATA_SECTION_BRACKET: {\n                this._stateCdataSectionBracket(cp);\n                break;\n            }\n            case State.CDATA_SECTION_END: {\n                this._stateCdataSectionEnd(cp);\n                break;\n            }\n            case State.CHARACTER_REFERENCE: {\n                this._stateCharacterReference();\n                break;\n            }\n            case State.AMBIGUOUS_AMPERSAND: {\n                this._stateAmbiguousAmpersand(cp);\n                break;\n            }\n            default: {\n                throw new Error('Unknown state');\n            }\n        }\n    }\n    // State machine\n    // Data state\n    //------------------------------------------------------------------\n    _stateData(cp) {\n        switch (cp) {\n            case $.LESS_THAN_SIGN: {\n                this.state = State.TAG_OPEN;\n                break;\n            }\n            case $.AMPERSAND: {\n                this._startCharacterReference();\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this._emitCodePoint(cp);\n                break;\n            }\n            case $.EOF: {\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    //  RCDATA state\n    //------------------------------------------------------------------\n    _stateRcdata(cp) {\n        switch (cp) {\n            case $.AMPERSAND: {\n                this._startCharacterReference();\n                break;\n            }\n            case $.LESS_THAN_SIGN: {\n                this.state = State.RCDATA_LESS_THAN_SIGN;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this._emitChars(REPLACEMENT_CHARACTER);\n                break;\n            }\n            case $.EOF: {\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // RAWTEXT state\n    //------------------------------------------------------------------\n    _stateRawtext(cp) {\n        switch (cp) {\n            case $.LESS_THAN_SIGN: {\n                this.state = State.RAWTEXT_LESS_THAN_SIGN;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this._emitChars(REPLACEMENT_CHARACTER);\n                break;\n            }\n            case $.EOF: {\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // Script data state\n    //------------------------------------------------------------------\n    _stateScriptData(cp) {\n        switch (cp) {\n            case $.LESS_THAN_SIGN: {\n                this.state = State.SCRIPT_DATA_LESS_THAN_SIGN;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this._emitChars(REPLACEMENT_CHARACTER);\n                break;\n            }\n            case $.EOF: {\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // PLAINTEXT state\n    //------------------------------------------------------------------\n    _statePlaintext(cp) {\n        switch (cp) {\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this._emitChars(REPLACEMENT_CHARACTER);\n                break;\n            }\n            case $.EOF: {\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // Tag open state\n    //------------------------------------------------------------------\n    _stateTagOpen(cp) {\n        if (isAsciiLetter(cp)) {\n            this._createStartTagToken();\n            this.state = State.TAG_NAME;\n            this._stateTagName(cp);\n        }\n        else\n            switch (cp) {\n                case $.EXCLAMATION_MARK: {\n                    this.state = State.MARKUP_DECLARATION_OPEN;\n                    break;\n                }\n                case $.SOLIDUS: {\n                    this.state = State.END_TAG_OPEN;\n                    break;\n                }\n                case $.QUESTION_MARK: {\n                    this._err(ERR.unexpectedQuestionMarkInsteadOfTagName);\n                    this._createCommentToken(1);\n                    this.state = State.BOGUS_COMMENT;\n                    this._stateBogusComment(cp);\n                    break;\n                }\n                case $.EOF: {\n                    this._err(ERR.eofBeforeTagName);\n                    this._emitChars('<');\n                    this._emitEOFToken();\n                    break;\n                }\n                default: {\n                    this._err(ERR.invalidFirstCharacterOfTagName);\n                    this._emitChars('<');\n                    this.state = State.DATA;\n                    this._stateData(cp);\n                }\n            }\n    }\n    // End tag open state\n    //------------------------------------------------------------------\n    _stateEndTagOpen(cp) {\n        if (isAsciiLetter(cp)) {\n            this._createEndTagToken();\n            this.state = State.TAG_NAME;\n            this._stateTagName(cp);\n        }\n        else\n            switch (cp) {\n                case $.GREATER_THAN_SIGN: {\n                    this._err(ERR.missingEndTagName);\n                    this.state = State.DATA;\n                    break;\n                }\n                case $.EOF: {\n                    this._err(ERR.eofBeforeTagName);\n                    this._emitChars('</');\n                    this._emitEOFToken();\n                    break;\n                }\n                default: {\n                    this._err(ERR.invalidFirstCharacterOfTagName);\n                    this._createCommentToken(2);\n                    this.state = State.BOGUS_COMMENT;\n                    this._stateBogusComment(cp);\n                }\n            }\n    }\n    // Tag name state\n    //------------------------------------------------------------------\n    _stateTagName(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                this.state = State.BEFORE_ATTRIBUTE_NAME;\n                break;\n            }\n            case $.SOLIDUS: {\n                this.state = State.SELF_CLOSING_START_TAG;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.DATA;\n                this.emitCurrentTagToken();\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                token.tagName += REPLACEMENT_CHARACTER;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInTag);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.tagName += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n            }\n        }\n    }\n    // RCDATA less-than sign state\n    //------------------------------------------------------------------\n    _stateRcdataLessThanSign(cp) {\n        if (cp === $.SOLIDUS) {\n            this.state = State.RCDATA_END_TAG_OPEN;\n        }\n        else {\n            this._emitChars('<');\n            this.state = State.RCDATA;\n            this._stateRcdata(cp);\n        }\n    }\n    // RCDATA end tag open state\n    //------------------------------------------------------------------\n    _stateRcdataEndTagOpen(cp) {\n        if (isAsciiLetter(cp)) {\n            this.state = State.RCDATA_END_TAG_NAME;\n            this._stateRcdataEndTagName(cp);\n        }\n        else {\n            this._emitChars('</');\n            this.state = State.RCDATA;\n            this._stateRcdata(cp);\n        }\n    }\n    handleSpecialEndTag(_cp) {\n        if (!this.preprocessor.startsWith(this.lastStartTagName, false)) {\n            return !this._ensureHibernation();\n        }\n        this._createEndTagToken();\n        const token = this.currentToken;\n        token.tagName = this.lastStartTagName;\n        const cp = this.preprocessor.peek(this.lastStartTagName.length);\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                this._advanceBy(this.lastStartTagName.length);\n                this.state = State.BEFORE_ATTRIBUTE_NAME;\n                return false;\n            }\n            case $.SOLIDUS: {\n                this._advanceBy(this.lastStartTagName.length);\n                this.state = State.SELF_CLOSING_START_TAG;\n                return false;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._advanceBy(this.lastStartTagName.length);\n                this.emitCurrentTagToken();\n                this.state = State.DATA;\n                return false;\n            }\n            default: {\n                return !this._ensureHibernation();\n            }\n        }\n    }\n    // RCDATA end tag name state\n    //------------------------------------------------------------------\n    _stateRcdataEndTagName(cp) {\n        if (this.handleSpecialEndTag(cp)) {\n            this._emitChars('</');\n            this.state = State.RCDATA;\n            this._stateRcdata(cp);\n        }\n    }\n    // RAWTEXT less-than sign state\n    //------------------------------------------------------------------\n    _stateRawtextLessThanSign(cp) {\n        if (cp === $.SOLIDUS) {\n            this.state = State.RAWTEXT_END_TAG_OPEN;\n        }\n        else {\n            this._emitChars('<');\n            this.state = State.RAWTEXT;\n            this._stateRawtext(cp);\n        }\n    }\n    // RAWTEXT end tag open state\n    //------------------------------------------------------------------\n    _stateRawtextEndTagOpen(cp) {\n        if (isAsciiLetter(cp)) {\n            this.state = State.RAWTEXT_END_TAG_NAME;\n            this._stateRawtextEndTagName(cp);\n        }\n        else {\n            this._emitChars('</');\n            this.state = State.RAWTEXT;\n            this._stateRawtext(cp);\n        }\n    }\n    // RAWTEXT end tag name state\n    //------------------------------------------------------------------\n    _stateRawtextEndTagName(cp) {\n        if (this.handleSpecialEndTag(cp)) {\n            this._emitChars('</');\n            this.state = State.RAWTEXT;\n            this._stateRawtext(cp);\n        }\n    }\n    // Script data less-than sign state\n    //------------------------------------------------------------------\n    _stateScriptDataLessThanSign(cp) {\n        switch (cp) {\n            case $.SOLIDUS: {\n                this.state = State.SCRIPT_DATA_END_TAG_OPEN;\n                break;\n            }\n            case $.EXCLAMATION_MARK: {\n                this.state = State.SCRIPT_DATA_ESCAPE_START;\n                this._emitChars('<!');\n                break;\n            }\n            default: {\n                this._emitChars('<');\n                this.state = State.SCRIPT_DATA;\n                this._stateScriptData(cp);\n            }\n        }\n    }\n    // Script data end tag open state\n    //------------------------------------------------------------------\n    _stateScriptDataEndTagOpen(cp) {\n        if (isAsciiLetter(cp)) {\n            this.state = State.SCRIPT_DATA_END_TAG_NAME;\n            this._stateScriptDataEndTagName(cp);\n        }\n        else {\n            this._emitChars('</');\n            this.state = State.SCRIPT_DATA;\n            this._stateScriptData(cp);\n        }\n    }\n    // Script data end tag name state\n    //------------------------------------------------------------------\n    _stateScriptDataEndTagName(cp) {\n        if (this.handleSpecialEndTag(cp)) {\n            this._emitChars('</');\n            this.state = State.SCRIPT_DATA;\n            this._stateScriptData(cp);\n        }\n    }\n    // Script data escape start state\n    //------------------------------------------------------------------\n    _stateScriptDataEscapeStart(cp) {\n        if (cp === $.HYPHEN_MINUS) {\n            this.state = State.SCRIPT_DATA_ESCAPE_START_DASH;\n            this._emitChars('-');\n        }\n        else {\n            this.state = State.SCRIPT_DATA;\n            this._stateScriptData(cp);\n        }\n    }\n    // Script data escape start dash state\n    //------------------------------------------------------------------\n    _stateScriptDataEscapeStartDash(cp) {\n        if (cp === $.HYPHEN_MINUS) {\n            this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;\n            this._emitChars('-');\n        }\n        else {\n            this.state = State.SCRIPT_DATA;\n            this._stateScriptData(cp);\n        }\n    }\n    // Script data escaped state\n    //------------------------------------------------------------------\n    _stateScriptDataEscaped(cp) {\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                this.state = State.SCRIPT_DATA_ESCAPED_DASH;\n                this._emitChars('-');\n                break;\n            }\n            case $.LESS_THAN_SIGN: {\n                this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this._emitChars(REPLACEMENT_CHARACTER);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInScriptHtmlCommentLikeText);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // Script data escaped dash state\n    //------------------------------------------------------------------\n    _stateScriptDataEscapedDash(cp) {\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;\n                this._emitChars('-');\n                break;\n            }\n            case $.LESS_THAN_SIGN: {\n                this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this.state = State.SCRIPT_DATA_ESCAPED;\n                this._emitChars(REPLACEMENT_CHARACTER);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInScriptHtmlCommentLikeText);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this.state = State.SCRIPT_DATA_ESCAPED;\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // Script data escaped dash dash state\n    //------------------------------------------------------------------\n    _stateScriptDataEscapedDashDash(cp) {\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                this._emitChars('-');\n                break;\n            }\n            case $.LESS_THAN_SIGN: {\n                this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.SCRIPT_DATA;\n                this._emitChars('>');\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this.state = State.SCRIPT_DATA_ESCAPED;\n                this._emitChars(REPLACEMENT_CHARACTER);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInScriptHtmlCommentLikeText);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this.state = State.SCRIPT_DATA_ESCAPED;\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // Script data escaped less-than sign state\n    //------------------------------------------------------------------\n    _stateScriptDataEscapedLessThanSign(cp) {\n        if (cp === $.SOLIDUS) {\n            this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN;\n        }\n        else if (isAsciiLetter(cp)) {\n            this._emitChars('<');\n            this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_START;\n            this._stateScriptDataDoubleEscapeStart(cp);\n        }\n        else {\n            this._emitChars('<');\n            this.state = State.SCRIPT_DATA_ESCAPED;\n            this._stateScriptDataEscaped(cp);\n        }\n    }\n    // Script data escaped end tag open state\n    //------------------------------------------------------------------\n    _stateScriptDataEscapedEndTagOpen(cp) {\n        if (isAsciiLetter(cp)) {\n            this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_NAME;\n            this._stateScriptDataEscapedEndTagName(cp);\n        }\n        else {\n            this._emitChars('</');\n            this.state = State.SCRIPT_DATA_ESCAPED;\n            this._stateScriptDataEscaped(cp);\n        }\n    }\n    // Script data escaped end tag name state\n    //------------------------------------------------------------------\n    _stateScriptDataEscapedEndTagName(cp) {\n        if (this.handleSpecialEndTag(cp)) {\n            this._emitChars('</');\n            this.state = State.SCRIPT_DATA_ESCAPED;\n            this._stateScriptDataEscaped(cp);\n        }\n    }\n    // Script data double escape start state\n    //------------------------------------------------------------------\n    _stateScriptDataDoubleEscapeStart(cp) {\n        if (this.preprocessor.startsWith($$.SCRIPT, false) &&\n            isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek($$.SCRIPT.length))) {\n            this._emitCodePoint(cp);\n            for (let i = 0; i < $$.SCRIPT.length; i++) {\n                this._emitCodePoint(this._consume());\n            }\n            this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n        }\n        else if (!this._ensureHibernation()) {\n            this.state = State.SCRIPT_DATA_ESCAPED;\n            this._stateScriptDataEscaped(cp);\n        }\n    }\n    // Script data double escaped state\n    //------------------------------------------------------------------\n    _stateScriptDataDoubleEscaped(cp) {\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH;\n                this._emitChars('-');\n                break;\n            }\n            case $.LESS_THAN_SIGN: {\n                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n                this._emitChars('<');\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this._emitChars(REPLACEMENT_CHARACTER);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInScriptHtmlCommentLikeText);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // Script data double escaped dash state\n    //------------------------------------------------------------------\n    _stateScriptDataDoubleEscapedDash(cp) {\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH;\n                this._emitChars('-');\n                break;\n            }\n            case $.LESS_THAN_SIGN: {\n                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n                this._emitChars('<');\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n                this._emitChars(REPLACEMENT_CHARACTER);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInScriptHtmlCommentLikeText);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // Script data double escaped dash dash state\n    //------------------------------------------------------------------\n    _stateScriptDataDoubleEscapedDashDash(cp) {\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                this._emitChars('-');\n                break;\n            }\n            case $.LESS_THAN_SIGN: {\n                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n                this._emitChars('<');\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.SCRIPT_DATA;\n                this._emitChars('>');\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n                this._emitChars(REPLACEMENT_CHARACTER);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInScriptHtmlCommentLikeText);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // Script data double escaped less-than sign state\n    //------------------------------------------------------------------\n    _stateScriptDataDoubleEscapedLessThanSign(cp) {\n        if (cp === $.SOLIDUS) {\n            this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_END;\n            this._emitChars('/');\n        }\n        else {\n            this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n            this._stateScriptDataDoubleEscaped(cp);\n        }\n    }\n    // Script data double escape end state\n    //------------------------------------------------------------------\n    _stateScriptDataDoubleEscapeEnd(cp) {\n        if (this.preprocessor.startsWith($$.SCRIPT, false) &&\n            isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek($$.SCRIPT.length))) {\n            this._emitCodePoint(cp);\n            for (let i = 0; i < $$.SCRIPT.length; i++) {\n                this._emitCodePoint(this._consume());\n            }\n            this.state = State.SCRIPT_DATA_ESCAPED;\n        }\n        else if (!this._ensureHibernation()) {\n            this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n            this._stateScriptDataDoubleEscaped(cp);\n        }\n    }\n    // Before attribute name state\n    //------------------------------------------------------------------\n    _stateBeforeAttributeName(cp) {\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                // Ignore whitespace\n                break;\n            }\n            case $.SOLIDUS:\n            case $.GREATER_THAN_SIGN:\n            case $.EOF: {\n                this.state = State.AFTER_ATTRIBUTE_NAME;\n                this._stateAfterAttributeName(cp);\n                break;\n            }\n            case $.EQUALS_SIGN: {\n                this._err(ERR.unexpectedEqualsSignBeforeAttributeName);\n                this._createAttr('=');\n                this.state = State.ATTRIBUTE_NAME;\n                break;\n            }\n            default: {\n                this._createAttr('');\n                this.state = State.ATTRIBUTE_NAME;\n                this._stateAttributeName(cp);\n            }\n        }\n    }\n    // Attribute name state\n    //------------------------------------------------------------------\n    _stateAttributeName(cp) {\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED:\n            case $.SOLIDUS:\n            case $.GREATER_THAN_SIGN:\n            case $.EOF: {\n                this._leaveAttrName();\n                this.state = State.AFTER_ATTRIBUTE_NAME;\n                this._stateAfterAttributeName(cp);\n                break;\n            }\n            case $.EQUALS_SIGN: {\n                this._leaveAttrName();\n                this.state = State.BEFORE_ATTRIBUTE_VALUE;\n                break;\n            }\n            case $.QUOTATION_MARK:\n            case $.APOSTROPHE:\n            case $.LESS_THAN_SIGN: {\n                this._err(ERR.unexpectedCharacterInAttributeName);\n                this.currentAttr.name += String.fromCodePoint(cp);\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this.currentAttr.name += REPLACEMENT_CHARACTER;\n                break;\n            }\n            default: {\n                this.currentAttr.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n            }\n        }\n    }\n    // After attribute name state\n    //------------------------------------------------------------------\n    _stateAfterAttributeName(cp) {\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                // Ignore whitespace\n                break;\n            }\n            case $.SOLIDUS: {\n                this.state = State.SELF_CLOSING_START_TAG;\n                break;\n            }\n            case $.EQUALS_SIGN: {\n                this.state = State.BEFORE_ATTRIBUTE_VALUE;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.DATA;\n                this.emitCurrentTagToken();\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInTag);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._createAttr('');\n                this.state = State.ATTRIBUTE_NAME;\n                this._stateAttributeName(cp);\n            }\n        }\n    }\n    // Before attribute value state\n    //------------------------------------------------------------------\n    _stateBeforeAttributeValue(cp) {\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                // Ignore whitespace\n                break;\n            }\n            case $.QUOTATION_MARK: {\n                this.state = State.ATTRIBUTE_VALUE_DOUBLE_QUOTED;\n                break;\n            }\n            case $.APOSTROPHE: {\n                this.state = State.ATTRIBUTE_VALUE_SINGLE_QUOTED;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.missingAttributeValue);\n                this.state = State.DATA;\n                this.emitCurrentTagToken();\n                break;\n            }\n            default: {\n                this.state = State.ATTRIBUTE_VALUE_UNQUOTED;\n                this._stateAttributeValueUnquoted(cp);\n            }\n        }\n    }\n    // Attribute value (double-quoted) state\n    //------------------------------------------------------------------\n    _stateAttributeValueDoubleQuoted(cp) {\n        switch (cp) {\n            case $.QUOTATION_MARK: {\n                this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;\n                break;\n            }\n            case $.AMPERSAND: {\n                this._startCharacterReference();\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this.currentAttr.value += REPLACEMENT_CHARACTER;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInTag);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this.currentAttr.value += String.fromCodePoint(cp);\n            }\n        }\n    }\n    // Attribute value (single-quoted) state\n    //------------------------------------------------------------------\n    _stateAttributeValueSingleQuoted(cp) {\n        switch (cp) {\n            case $.APOSTROPHE: {\n                this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;\n                break;\n            }\n            case $.AMPERSAND: {\n                this._startCharacterReference();\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this.currentAttr.value += REPLACEMENT_CHARACTER;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInTag);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this.currentAttr.value += String.fromCodePoint(cp);\n            }\n        }\n    }\n    // Attribute value (unquoted) state\n    //------------------------------------------------------------------\n    _stateAttributeValueUnquoted(cp) {\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                this._leaveAttrValue();\n                this.state = State.BEFORE_ATTRIBUTE_NAME;\n                break;\n            }\n            case $.AMPERSAND: {\n                this._startCharacterReference();\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._leaveAttrValue();\n                this.state = State.DATA;\n                this.emitCurrentTagToken();\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                this.currentAttr.value += REPLACEMENT_CHARACTER;\n                break;\n            }\n            case $.QUOTATION_MARK:\n            case $.APOSTROPHE:\n            case $.LESS_THAN_SIGN:\n            case $.EQUALS_SIGN:\n            case $.GRAVE_ACCENT: {\n                this._err(ERR.unexpectedCharacterInUnquotedAttributeValue);\n                this.currentAttr.value += String.fromCodePoint(cp);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInTag);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this.currentAttr.value += String.fromCodePoint(cp);\n            }\n        }\n    }\n    // After attribute value (quoted) state\n    //------------------------------------------------------------------\n    _stateAfterAttributeValueQuoted(cp) {\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                this._leaveAttrValue();\n                this.state = State.BEFORE_ATTRIBUTE_NAME;\n                break;\n            }\n            case $.SOLIDUS: {\n                this._leaveAttrValue();\n                this.state = State.SELF_CLOSING_START_TAG;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._leaveAttrValue();\n                this.state = State.DATA;\n                this.emitCurrentTagToken();\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInTag);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._err(ERR.missingWhitespaceBetweenAttributes);\n                this.state = State.BEFORE_ATTRIBUTE_NAME;\n                this._stateBeforeAttributeName(cp);\n            }\n        }\n    }\n    // Self-closing start tag state\n    //------------------------------------------------------------------\n    _stateSelfClosingStartTag(cp) {\n        switch (cp) {\n            case $.GREATER_THAN_SIGN: {\n                const token = this.currentToken;\n                token.selfClosing = true;\n                this.state = State.DATA;\n                this.emitCurrentTagToken();\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInTag);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._err(ERR.unexpectedSolidusInTag);\n                this.state = State.BEFORE_ATTRIBUTE_NAME;\n                this._stateBeforeAttributeName(cp);\n            }\n        }\n    }\n    // Bogus comment state\n    //------------------------------------------------------------------\n    _stateBogusComment(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.DATA;\n                this.emitCurrentComment(token);\n                break;\n            }\n            case $.EOF: {\n                this.emitCurrentComment(token);\n                this._emitEOFToken();\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                token.data += REPLACEMENT_CHARACTER;\n                break;\n            }\n            default: {\n                token.data += String.fromCodePoint(cp);\n            }\n        }\n    }\n    // Markup declaration open state\n    //------------------------------------------------------------------\n    _stateMarkupDeclarationOpen(cp) {\n        if (this._consumeSequenceIfMatch($$.DASH_DASH, true)) {\n            this._createCommentToken($$.DASH_DASH.length + 1);\n            this.state = State.COMMENT_START;\n        }\n        else if (this._consumeSequenceIfMatch($$.DOCTYPE, false)) {\n            // NOTE: Doctypes tokens are created without fixed offsets. We keep track of the moment a doctype *might* start here.\n            this.currentLocation = this.getCurrentLocation($$.DOCTYPE.length + 1);\n            this.state = State.DOCTYPE;\n        }\n        else if (this._consumeSequenceIfMatch($$.CDATA_START, true)) {\n            if (this.inForeignNode) {\n                this.state = State.CDATA_SECTION;\n            }\n            else {\n                this._err(ERR.cdataInHtmlContent);\n                this._createCommentToken($$.CDATA_START.length + 1);\n                this.currentToken.data = '[CDATA[';\n                this.state = State.BOGUS_COMMENT;\n            }\n        }\n        //NOTE: Sequence lookups can be abrupted by hibernation. In that case, lookup\n        //results are no longer valid and we will need to start over.\n        else if (!this._ensureHibernation()) {\n            this._err(ERR.incorrectlyOpenedComment);\n            this._createCommentToken(2);\n            this.state = State.BOGUS_COMMENT;\n            this._stateBogusComment(cp);\n        }\n    }\n    // Comment start state\n    //------------------------------------------------------------------\n    _stateCommentStart(cp) {\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                this.state = State.COMMENT_START_DASH;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.abruptClosingOfEmptyComment);\n                this.state = State.DATA;\n                const token = this.currentToken;\n                this.emitCurrentComment(token);\n                break;\n            }\n            default: {\n                this.state = State.COMMENT;\n                this._stateComment(cp);\n            }\n        }\n    }\n    // Comment start dash state\n    //------------------------------------------------------------------\n    _stateCommentStartDash(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                this.state = State.COMMENT_END;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.abruptClosingOfEmptyComment);\n                this.state = State.DATA;\n                this.emitCurrentComment(token);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInComment);\n                this.emitCurrentComment(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.data += '-';\n                this.state = State.COMMENT;\n                this._stateComment(cp);\n            }\n        }\n    }\n    // Comment state\n    //------------------------------------------------------------------\n    _stateComment(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                this.state = State.COMMENT_END_DASH;\n                break;\n            }\n            case $.LESS_THAN_SIGN: {\n                token.data += '<';\n                this.state = State.COMMENT_LESS_THAN_SIGN;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                token.data += REPLACEMENT_CHARACTER;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInComment);\n                this.emitCurrentComment(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.data += String.fromCodePoint(cp);\n            }\n        }\n    }\n    // Comment less-than sign state\n    //------------------------------------------------------------------\n    _stateCommentLessThanSign(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.EXCLAMATION_MARK: {\n                token.data += '!';\n                this.state = State.COMMENT_LESS_THAN_SIGN_BANG;\n                break;\n            }\n            case $.LESS_THAN_SIGN: {\n                token.data += '<';\n                break;\n            }\n            default: {\n                this.state = State.COMMENT;\n                this._stateComment(cp);\n            }\n        }\n    }\n    // Comment less-than sign bang state\n    //------------------------------------------------------------------\n    _stateCommentLessThanSignBang(cp) {\n        if (cp === $.HYPHEN_MINUS) {\n            this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH;\n        }\n        else {\n            this.state = State.COMMENT;\n            this._stateComment(cp);\n        }\n    }\n    // Comment less-than sign bang dash state\n    //------------------------------------------------------------------\n    _stateCommentLessThanSignBangDash(cp) {\n        if (cp === $.HYPHEN_MINUS) {\n            this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH;\n        }\n        else {\n            this.state = State.COMMENT_END_DASH;\n            this._stateCommentEndDash(cp);\n        }\n    }\n    // Comment less-than sign bang dash dash state\n    //------------------------------------------------------------------\n    _stateCommentLessThanSignBangDashDash(cp) {\n        if (cp !== $.GREATER_THAN_SIGN && cp !== $.EOF) {\n            this._err(ERR.nestedComment);\n        }\n        this.state = State.COMMENT_END;\n        this._stateCommentEnd(cp);\n    }\n    // Comment end dash state\n    //------------------------------------------------------------------\n    _stateCommentEndDash(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                this.state = State.COMMENT_END;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInComment);\n                this.emitCurrentComment(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.data += '-';\n                this.state = State.COMMENT;\n                this._stateComment(cp);\n            }\n        }\n    }\n    // Comment end state\n    //------------------------------------------------------------------\n    _stateCommentEnd(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.DATA;\n                this.emitCurrentComment(token);\n                break;\n            }\n            case $.EXCLAMATION_MARK: {\n                this.state = State.COMMENT_END_BANG;\n                break;\n            }\n            case $.HYPHEN_MINUS: {\n                token.data += '-';\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInComment);\n                this.emitCurrentComment(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.data += '--';\n                this.state = State.COMMENT;\n                this._stateComment(cp);\n            }\n        }\n    }\n    // Comment end bang state\n    //------------------------------------------------------------------\n    _stateCommentEndBang(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.HYPHEN_MINUS: {\n                token.data += '--!';\n                this.state = State.COMMENT_END_DASH;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.incorrectlyClosedComment);\n                this.state = State.DATA;\n                this.emitCurrentComment(token);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInComment);\n                this.emitCurrentComment(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.data += '--!';\n                this.state = State.COMMENT;\n                this._stateComment(cp);\n            }\n        }\n    }\n    // DOCTYPE state\n    //------------------------------------------------------------------\n    _stateDoctype(cp) {\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                this.state = State.BEFORE_DOCTYPE_NAME;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.BEFORE_DOCTYPE_NAME;\n                this._stateBeforeDoctypeName(cp);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                this._createDoctypeToken(null);\n                const token = this.currentToken;\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._err(ERR.missingWhitespaceBeforeDoctypeName);\n                this.state = State.BEFORE_DOCTYPE_NAME;\n                this._stateBeforeDoctypeName(cp);\n            }\n        }\n    }\n    // Before DOCTYPE name state\n    //------------------------------------------------------------------\n    _stateBeforeDoctypeName(cp) {\n        if (isAsciiUpper(cp)) {\n            this._createDoctypeToken(String.fromCharCode(toAsciiLower(cp)));\n            this.state = State.DOCTYPE_NAME;\n        }\n        else\n            switch (cp) {\n                case $.SPACE:\n                case $.LINE_FEED:\n                case $.TABULATION:\n                case $.FORM_FEED: {\n                    // Ignore whitespace\n                    break;\n                }\n                case $.NULL: {\n                    this._err(ERR.unexpectedNullCharacter);\n                    this._createDoctypeToken(REPLACEMENT_CHARACTER);\n                    this.state = State.DOCTYPE_NAME;\n                    break;\n                }\n                case $.GREATER_THAN_SIGN: {\n                    this._err(ERR.missingDoctypeName);\n                    this._createDoctypeToken(null);\n                    const token = this.currentToken;\n                    token.forceQuirks = true;\n                    this.emitCurrentDoctype(token);\n                    this.state = State.DATA;\n                    break;\n                }\n                case $.EOF: {\n                    this._err(ERR.eofInDoctype);\n                    this._createDoctypeToken(null);\n                    const token = this.currentToken;\n                    token.forceQuirks = true;\n                    this.emitCurrentDoctype(token);\n                    this._emitEOFToken();\n                    break;\n                }\n                default: {\n                    this._createDoctypeToken(String.fromCodePoint(cp));\n                    this.state = State.DOCTYPE_NAME;\n                }\n            }\n    }\n    // DOCTYPE name state\n    //------------------------------------------------------------------\n    _stateDoctypeName(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                this.state = State.AFTER_DOCTYPE_NAME;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.DATA;\n                this.emitCurrentDoctype(token);\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                token.name += REPLACEMENT_CHARACTER;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n            }\n        }\n    }\n    // After DOCTYPE name state\n    //------------------------------------------------------------------\n    _stateAfterDoctypeName(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                // Ignore whitespace\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.DATA;\n                this.emitCurrentDoctype(token);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                if (this._consumeSequenceIfMatch($$.PUBLIC, false)) {\n                    this.state = State.AFTER_DOCTYPE_PUBLIC_KEYWORD;\n                }\n                else if (this._consumeSequenceIfMatch($$.SYSTEM, false)) {\n                    this.state = State.AFTER_DOCTYPE_SYSTEM_KEYWORD;\n                }\n                //NOTE: sequence lookup can be abrupted by hibernation. In that case lookup\n                //results are no longer valid and we will need to start over.\n                else if (!this._ensureHibernation()) {\n                    this._err(ERR.invalidCharacterSequenceAfterDoctypeName);\n                    token.forceQuirks = true;\n                    this.state = State.BOGUS_DOCTYPE;\n                    this._stateBogusDoctype(cp);\n                }\n            }\n        }\n    }\n    // After DOCTYPE public keyword state\n    //------------------------------------------------------------------\n    _stateAfterDoctypePublicKeyword(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                this.state = State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;\n                break;\n            }\n            case $.QUOTATION_MARK: {\n                this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);\n                token.publicId = '';\n                this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;\n                break;\n            }\n            case $.APOSTROPHE: {\n                this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);\n                token.publicId = '';\n                this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.missingDoctypePublicIdentifier);\n                token.forceQuirks = true;\n                this.state = State.DATA;\n                this.emitCurrentDoctype(token);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);\n                token.forceQuirks = true;\n                this.state = State.BOGUS_DOCTYPE;\n                this._stateBogusDoctype(cp);\n            }\n        }\n    }\n    // Before DOCTYPE public identifier state\n    //------------------------------------------------------------------\n    _stateBeforeDoctypePublicIdentifier(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                // Ignore whitespace\n                break;\n            }\n            case $.QUOTATION_MARK: {\n                token.publicId = '';\n                this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;\n                break;\n            }\n            case $.APOSTROPHE: {\n                token.publicId = '';\n                this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.missingDoctypePublicIdentifier);\n                token.forceQuirks = true;\n                this.state = State.DATA;\n                this.emitCurrentDoctype(token);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);\n                token.forceQuirks = true;\n                this.state = State.BOGUS_DOCTYPE;\n                this._stateBogusDoctype(cp);\n            }\n        }\n    }\n    // DOCTYPE public identifier (double-quoted) state\n    //------------------------------------------------------------------\n    _stateDoctypePublicIdentifierDoubleQuoted(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.QUOTATION_MARK: {\n                this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                token.publicId += REPLACEMENT_CHARACTER;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.abruptDoctypePublicIdentifier);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this.state = State.DATA;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.publicId += String.fromCodePoint(cp);\n            }\n        }\n    }\n    // DOCTYPE public identifier (single-quoted) state\n    //------------------------------------------------------------------\n    _stateDoctypePublicIdentifierSingleQuoted(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.APOSTROPHE: {\n                this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                token.publicId += REPLACEMENT_CHARACTER;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.abruptDoctypePublicIdentifier);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this.state = State.DATA;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.publicId += String.fromCodePoint(cp);\n            }\n        }\n    }\n    // After DOCTYPE public identifier state\n    //------------------------------------------------------------------\n    _stateAfterDoctypePublicIdentifier(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                this.state = State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.DATA;\n                this.emitCurrentDoctype(token);\n                break;\n            }\n            case $.QUOTATION_MARK: {\n                this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);\n                token.systemId = '';\n                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n                break;\n            }\n            case $.APOSTROPHE: {\n                this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);\n                token.systemId = '';\n                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n                token.forceQuirks = true;\n                this.state = State.BOGUS_DOCTYPE;\n                this._stateBogusDoctype(cp);\n            }\n        }\n    }\n    // Between DOCTYPE public and system identifiers state\n    //------------------------------------------------------------------\n    _stateBetweenDoctypePublicAndSystemIdentifiers(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                // Ignore whitespace\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this.emitCurrentDoctype(token);\n                this.state = State.DATA;\n                break;\n            }\n            case $.QUOTATION_MARK: {\n                token.systemId = '';\n                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n                break;\n            }\n            case $.APOSTROPHE: {\n                token.systemId = '';\n                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n                token.forceQuirks = true;\n                this.state = State.BOGUS_DOCTYPE;\n                this._stateBogusDoctype(cp);\n            }\n        }\n    }\n    // After DOCTYPE system keyword state\n    //------------------------------------------------------------------\n    _stateAfterDoctypeSystemKeyword(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                this.state = State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;\n                break;\n            }\n            case $.QUOTATION_MARK: {\n                this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);\n                token.systemId = '';\n                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n                break;\n            }\n            case $.APOSTROPHE: {\n                this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);\n                token.systemId = '';\n                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.missingDoctypeSystemIdentifier);\n                token.forceQuirks = true;\n                this.state = State.DATA;\n                this.emitCurrentDoctype(token);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n                token.forceQuirks = true;\n                this.state = State.BOGUS_DOCTYPE;\n                this._stateBogusDoctype(cp);\n            }\n        }\n    }\n    // Before DOCTYPE system identifier state\n    //------------------------------------------------------------------\n    _stateBeforeDoctypeSystemIdentifier(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                // Ignore whitespace\n                break;\n            }\n            case $.QUOTATION_MARK: {\n                token.systemId = '';\n                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n                break;\n            }\n            case $.APOSTROPHE: {\n                token.systemId = '';\n                this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.missingDoctypeSystemIdentifier);\n                token.forceQuirks = true;\n                this.state = State.DATA;\n                this.emitCurrentDoctype(token);\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n                token.forceQuirks = true;\n                this.state = State.BOGUS_DOCTYPE;\n                this._stateBogusDoctype(cp);\n            }\n        }\n    }\n    // DOCTYPE system identifier (double-quoted) state\n    //------------------------------------------------------------------\n    _stateDoctypeSystemIdentifierDoubleQuoted(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.QUOTATION_MARK: {\n                this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                token.systemId += REPLACEMENT_CHARACTER;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.abruptDoctypeSystemIdentifier);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this.state = State.DATA;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.systemId += String.fromCodePoint(cp);\n            }\n        }\n    }\n    // DOCTYPE system identifier (single-quoted) state\n    //------------------------------------------------------------------\n    _stateDoctypeSystemIdentifierSingleQuoted(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.APOSTROPHE: {\n                this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                token.systemId += REPLACEMENT_CHARACTER;\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this._err(ERR.abruptDoctypeSystemIdentifier);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this.state = State.DATA;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                token.systemId += String.fromCodePoint(cp);\n            }\n        }\n    }\n    // After DOCTYPE system identifier state\n    //------------------------------------------------------------------\n    _stateAfterDoctypeSystemIdentifier(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.SPACE:\n            case $.LINE_FEED:\n            case $.TABULATION:\n            case $.FORM_FEED: {\n                // Ignore whitespace\n                break;\n            }\n            case $.GREATER_THAN_SIGN: {\n                this.emitCurrentDoctype(token);\n                this.state = State.DATA;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInDoctype);\n                token.forceQuirks = true;\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._err(ERR.unexpectedCharacterAfterDoctypeSystemIdentifier);\n                this.state = State.BOGUS_DOCTYPE;\n                this._stateBogusDoctype(cp);\n            }\n        }\n    }\n    // Bogus DOCTYPE state\n    //------------------------------------------------------------------\n    _stateBogusDoctype(cp) {\n        const token = this.currentToken;\n        switch (cp) {\n            case $.GREATER_THAN_SIGN: {\n                this.emitCurrentDoctype(token);\n                this.state = State.DATA;\n                break;\n            }\n            case $.NULL: {\n                this._err(ERR.unexpectedNullCharacter);\n                break;\n            }\n            case $.EOF: {\n                this.emitCurrentDoctype(token);\n                this._emitEOFToken();\n                break;\n            }\n            default:\n            // Do nothing\n        }\n    }\n    // CDATA section state\n    //------------------------------------------------------------------\n    _stateCdataSection(cp) {\n        switch (cp) {\n            case $.RIGHT_SQUARE_BRACKET: {\n                this.state = State.CDATA_SECTION_BRACKET;\n                break;\n            }\n            case $.EOF: {\n                this._err(ERR.eofInCdata);\n                this._emitEOFToken();\n                break;\n            }\n            default: {\n                this._emitCodePoint(cp);\n            }\n        }\n    }\n    // CDATA section bracket state\n    //------------------------------------------------------------------\n    _stateCdataSectionBracket(cp) {\n        if (cp === $.RIGHT_SQUARE_BRACKET) {\n            this.state = State.CDATA_SECTION_END;\n        }\n        else {\n            this._emitChars(']');\n            this.state = State.CDATA_SECTION;\n            this._stateCdataSection(cp);\n        }\n    }\n    // CDATA section end state\n    //------------------------------------------------------------------\n    _stateCdataSectionEnd(cp) {\n        switch (cp) {\n            case $.GREATER_THAN_SIGN: {\n                this.state = State.DATA;\n                break;\n            }\n            case $.RIGHT_SQUARE_BRACKET: {\n                this._emitChars(']');\n                break;\n            }\n            default: {\n                this._emitChars(']]');\n                this.state = State.CDATA_SECTION;\n                this._stateCdataSection(cp);\n            }\n        }\n    }\n    // Character reference state\n    //------------------------------------------------------------------\n    _stateCharacterReference() {\n        let length = this.entityDecoder.write(this.preprocessor.html, this.preprocessor.pos);\n        if (length < 0) {\n            if (this.preprocessor.lastChunkWritten) {\n                length = this.entityDecoder.end();\n            }\n            else {\n                // Wait for the rest of the entity.\n                this.active = false;\n                // Mark the entire buffer as read.\n                this.preprocessor.pos = this.preprocessor.html.length - 1;\n                this.consumedAfterSnapshot = 0;\n                this.preprocessor.endOfChunkHit = true;\n                return;\n            }\n        }\n        if (length === 0) {\n            // This was not a valid entity. Go back to the beginning, and\n            // figure out what to do.\n            this.preprocessor.pos = this.entityStartPos;\n            this._flushCodePointConsumedAsCharacterReference($.AMPERSAND);\n            this.state =\n                !this._isCharacterReferenceInAttribute() && isAsciiAlphaNumeric(this.preprocessor.peek(1))\n                    ? State.AMBIGUOUS_AMPERSAND\n                    : this.returnState;\n        }\n        else {\n            // We successfully parsed an entity. Switch to the return state.\n            this.state = this.returnState;\n        }\n    }\n    // Ambiguos ampersand state\n    //------------------------------------------------------------------\n    _stateAmbiguousAmpersand(cp) {\n        if (isAsciiAlphaNumeric(cp)) {\n            this._flushCodePointConsumedAsCharacterReference(cp);\n        }\n        else {\n            if (cp === $.SEMICOLON) {\n                this._err(ERR.unknownNamedCharacterReference);\n            }\n            this.state = this.returnState;\n            this._callState(cp);\n        }\n    }\n}\n","import { TAG_ID as $, NS, NUMBERED_HEADERS } from '../common/html.js';\n//Element utils\nconst IMPLICIT_END_TAG_REQUIRED = new Set([$.DD, $.DT, $.LI, $.OPTGROUP, $.OPTION, $.P, $.RB, $.RP, $.RT, $.RTC]);\nconst IMPLICIT_END_TAG_REQUIRED_THOROUGHLY = new Set([\n    ...IMPLICIT_END_TAG_REQUIRED,\n    $.CAPTION,\n    $.COLGROUP,\n    $.TBODY,\n    $.TD,\n    $.TFOOT,\n    $.TH,\n    $.THEAD,\n    $.TR,\n]);\nconst SCOPING_ELEMENTS_HTML = new Set([\n    $.APPLET,\n    $.CAPTION,\n    $.HTML,\n    $.MARQUEE,\n    $.OBJECT,\n    $.TABLE,\n    $.TD,\n    $.TEMPLATE,\n    $.TH,\n]);\nconst SCOPING_ELEMENTS_HTML_LIST = new Set([...SCOPING_ELEMENTS_HTML, $.OL, $.UL]);\nconst SCOPING_ELEMENTS_HTML_BUTTON = new Set([...SCOPING_ELEMENTS_HTML, $.BUTTON]);\nconst SCOPING_ELEMENTS_MATHML = new Set([$.ANNOTATION_XML, $.MI, $.MN, $.MO, $.MS, $.MTEXT]);\nconst SCOPING_ELEMENTS_SVG = new Set([$.DESC, $.FOREIGN_OBJECT, $.TITLE]);\nconst TABLE_ROW_CONTEXT = new Set([$.TR, $.TEMPLATE, $.HTML]);\nconst TABLE_BODY_CONTEXT = new Set([$.TBODY, $.TFOOT, $.THEAD, $.TEMPLATE, $.HTML]);\nconst TABLE_CONTEXT = new Set([$.TABLE, $.TEMPLATE, $.HTML]);\nconst TABLE_CELLS = new Set([$.TD, $.TH]);\n//Stack of open elements\nexport class OpenElementStack {\n    get currentTmplContentOrNode() {\n        return this._isInTemplate() ? this.treeAdapter.getTemplateContent(this.current) : this.current;\n    }\n    constructor(document, treeAdapter, handler) {\n        this.treeAdapter = treeAdapter;\n        this.handler = handler;\n        this.items = [];\n        this.tagIDs = [];\n        this.stackTop = -1;\n        this.tmplCount = 0;\n        this.currentTagId = $.UNKNOWN;\n        this.current = document;\n    }\n    //Index of element\n    _indexOf(element) {\n        return this.items.lastIndexOf(element, this.stackTop);\n    }\n    //Update current element\n    _isInTemplate() {\n        return this.currentTagId === $.TEMPLATE && this.treeAdapter.getNamespaceURI(this.current) === NS.HTML;\n    }\n    _updateCurrentElement() {\n        this.current = this.items[this.stackTop];\n        this.currentTagId = this.tagIDs[this.stackTop];\n    }\n    //Mutations\n    push(element, tagID) {\n        this.stackTop++;\n        this.items[this.stackTop] = element;\n        this.current = element;\n        this.tagIDs[this.stackTop] = tagID;\n        this.currentTagId = tagID;\n        if (this._isInTemplate()) {\n            this.tmplCount++;\n        }\n        this.handler.onItemPush(element, tagID, true);\n    }\n    pop() {\n        const popped = this.current;\n        if (this.tmplCount > 0 && this._isInTemplate()) {\n            this.tmplCount--;\n        }\n        this.stackTop--;\n        this._updateCurrentElement();\n        this.handler.onItemPop(popped, true);\n    }\n    replace(oldElement, newElement) {\n        const idx = this._indexOf(oldElement);\n        this.items[idx] = newElement;\n        if (idx === this.stackTop) {\n            this.current = newElement;\n        }\n    }\n    insertAfter(referenceElement, newElement, newElementID) {\n        const insertionIdx = this._indexOf(referenceElement) + 1;\n        this.items.splice(insertionIdx, 0, newElement);\n        this.tagIDs.splice(insertionIdx, 0, newElementID);\n        this.stackTop++;\n        if (insertionIdx === this.stackTop) {\n            this._updateCurrentElement();\n        }\n        if (this.current && this.currentTagId !== undefined) {\n            this.handler.onItemPush(this.current, this.currentTagId, insertionIdx === this.stackTop);\n        }\n    }\n    popUntilTagNamePopped(tagName) {\n        let targetIdx = this.stackTop + 1;\n        do {\n            targetIdx = this.tagIDs.lastIndexOf(tagName, targetIdx - 1);\n        } while (targetIdx > 0 && this.treeAdapter.getNamespaceURI(this.items[targetIdx]) !== NS.HTML);\n        this.shortenToLength(Math.max(targetIdx, 0));\n    }\n    shortenToLength(idx) {\n        while (this.stackTop >= idx) {\n            const popped = this.current;\n            if (this.tmplCount > 0 && this._isInTemplate()) {\n                this.tmplCount -= 1;\n            }\n            this.stackTop--;\n            this._updateCurrentElement();\n            this.handler.onItemPop(popped, this.stackTop < idx);\n        }\n    }\n    popUntilElementPopped(element) {\n        const idx = this._indexOf(element);\n        this.shortenToLength(Math.max(idx, 0));\n    }\n    popUntilPopped(tagNames, targetNS) {\n        const idx = this._indexOfTagNames(tagNames, targetNS);\n        this.shortenToLength(Math.max(idx, 0));\n    }\n    popUntilNumberedHeaderPopped() {\n        this.popUntilPopped(NUMBERED_HEADERS, NS.HTML);\n    }\n    popUntilTableCellPopped() {\n        this.popUntilPopped(TABLE_CELLS, NS.HTML);\n    }\n    popAllUpToHtmlElement() {\n        //NOTE: here we assume that the root <html> element is always first in the open element stack, so\n        //we perform this fast stack clean up.\n        this.tmplCount = 0;\n        this.shortenToLength(1);\n    }\n    _indexOfTagNames(tagNames, namespace) {\n        for (let i = this.stackTop; i >= 0; i--) {\n            if (tagNames.has(this.tagIDs[i]) && this.treeAdapter.getNamespaceURI(this.items[i]) === namespace) {\n                return i;\n            }\n        }\n        return -1;\n    }\n    clearBackTo(tagNames, targetNS) {\n        const idx = this._indexOfTagNames(tagNames, targetNS);\n        this.shortenToLength(idx + 1);\n    }\n    clearBackToTableContext() {\n        this.clearBackTo(TABLE_CONTEXT, NS.HTML);\n    }\n    clearBackToTableBodyContext() {\n        this.clearBackTo(TABLE_BODY_CONTEXT, NS.HTML);\n    }\n    clearBackToTableRowContext() {\n        this.clearBackTo(TABLE_ROW_CONTEXT, NS.HTML);\n    }\n    remove(element) {\n        const idx = this._indexOf(element);\n        if (idx >= 0) {\n            if (idx === this.stackTop) {\n                this.pop();\n            }\n            else {\n                this.items.splice(idx, 1);\n                this.tagIDs.splice(idx, 1);\n                this.stackTop--;\n                this._updateCurrentElement();\n                this.handler.onItemPop(element, false);\n            }\n        }\n    }\n    //Search\n    tryPeekProperlyNestedBodyElement() {\n        //Properly nested <body> element (should be second element in stack).\n        return this.stackTop >= 1 && this.tagIDs[1] === $.BODY ? this.items[1] : null;\n    }\n    contains(element) {\n        return this._indexOf(element) > -1;\n    }\n    getCommonAncestor(element) {\n        const elementIdx = this._indexOf(element) - 1;\n        return elementIdx >= 0 ? this.items[elementIdx] : null;\n    }\n    isRootHtmlElementCurrent() {\n        return this.stackTop === 0 && this.tagIDs[0] === $.HTML;\n    }\n    //Element in scope\n    hasInDynamicScope(tagName, htmlScope) {\n        for (let i = this.stackTop; i >= 0; i--) {\n            const tn = this.tagIDs[i];\n            switch (this.treeAdapter.getNamespaceURI(this.items[i])) {\n                case NS.HTML: {\n                    if (tn === tagName)\n                        return true;\n                    if (htmlScope.has(tn))\n                        return false;\n                    break;\n                }\n                case NS.SVG: {\n                    if (SCOPING_ELEMENTS_SVG.has(tn))\n                        return false;\n                    break;\n                }\n                case NS.MATHML: {\n                    if (SCOPING_ELEMENTS_MATHML.has(tn))\n                        return false;\n                    break;\n                }\n            }\n        }\n        return true;\n    }\n    hasInScope(tagName) {\n        return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML);\n    }\n    hasInListItemScope(tagName) {\n        return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML_LIST);\n    }\n    hasInButtonScope(tagName) {\n        return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML_BUTTON);\n    }\n    hasNumberedHeaderInScope() {\n        for (let i = this.stackTop; i >= 0; i--) {\n            const tn = this.tagIDs[i];\n            switch (this.treeAdapter.getNamespaceURI(this.items[i])) {\n                case NS.HTML: {\n                    if (NUMBERED_HEADERS.has(tn))\n                        return true;\n                    if (SCOPING_ELEMENTS_HTML.has(tn))\n                        return false;\n                    break;\n                }\n                case NS.SVG: {\n                    if (SCOPING_ELEMENTS_SVG.has(tn))\n                        return false;\n                    break;\n                }\n                case NS.MATHML: {\n                    if (SCOPING_ELEMENTS_MATHML.has(tn))\n                        return false;\n                    break;\n                }\n            }\n        }\n        return true;\n    }\n    hasInTableScope(tagName) {\n        for (let i = this.stackTop; i >= 0; i--) {\n            if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {\n                continue;\n            }\n            switch (this.tagIDs[i]) {\n                case tagName: {\n                    return true;\n                }\n                case $.TABLE:\n                case $.HTML: {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n    hasTableBodyContextInTableScope() {\n        for (let i = this.stackTop; i >= 0; i--) {\n            if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {\n                continue;\n            }\n            switch (this.tagIDs[i]) {\n                case $.TBODY:\n                case $.THEAD:\n                case $.TFOOT: {\n                    return true;\n                }\n                case $.TABLE:\n                case $.HTML: {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n    hasInSelectScope(tagName) {\n        for (let i = this.stackTop; i >= 0; i--) {\n            if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {\n                continue;\n            }\n            switch (this.tagIDs[i]) {\n                case tagName: {\n                    return true;\n                }\n                case $.OPTION:\n                case $.OPTGROUP: {\n                    break;\n                }\n                default: {\n                    return false;\n                }\n            }\n        }\n        return true;\n    }\n    //Implied end tags\n    generateImpliedEndTags() {\n        while (this.currentTagId !== undefined && IMPLICIT_END_TAG_REQUIRED.has(this.currentTagId)) {\n            this.pop();\n        }\n    }\n    generateImpliedEndTagsThoroughly() {\n        while (this.currentTagId !== undefined && IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {\n            this.pop();\n        }\n    }\n    generateImpliedEndTagsWithExclusion(exclusionId) {\n        while (this.currentTagId !== undefined &&\n            this.currentTagId !== exclusionId &&\n            IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {\n            this.pop();\n        }\n    }\n}\n","//Const\nconst NOAH_ARK_CAPACITY = 3;\nexport var EntryType;\n(function (EntryType) {\n    EntryType[EntryType[\"Marker\"] = 0] = \"Marker\";\n    EntryType[EntryType[\"Element\"] = 1] = \"Element\";\n})(EntryType || (EntryType = {}));\nconst MARKER = { type: EntryType.Marker };\n//List of formatting elements\nexport class FormattingElementList {\n    constructor(treeAdapter) {\n        this.treeAdapter = treeAdapter;\n        this.entries = [];\n        this.bookmark = null;\n    }\n    //Noah Ark's condition\n    //OPTIMIZATION: at first we try to find possible candidates for exclusion using\n    //lightweight heuristics without thorough attributes check.\n    _getNoahArkConditionCandidates(newElement, neAttrs) {\n        const candidates = [];\n        const neAttrsLength = neAttrs.length;\n        const neTagName = this.treeAdapter.getTagName(newElement);\n        const neNamespaceURI = this.treeAdapter.getNamespaceURI(newElement);\n        for (let i = 0; i < this.entries.length; i++) {\n            const entry = this.entries[i];\n            if (entry.type === EntryType.Marker) {\n                break;\n            }\n            const { element } = entry;\n            if (this.treeAdapter.getTagName(element) === neTagName &&\n                this.treeAdapter.getNamespaceURI(element) === neNamespaceURI) {\n                const elementAttrs = this.treeAdapter.getAttrList(element);\n                if (elementAttrs.length === neAttrsLength) {\n                    candidates.push({ idx: i, attrs: elementAttrs });\n                }\n            }\n        }\n        return candidates;\n    }\n    _ensureNoahArkCondition(newElement) {\n        if (this.entries.length < NOAH_ARK_CAPACITY)\n            return;\n        const neAttrs = this.treeAdapter.getAttrList(newElement);\n        const candidates = this._getNoahArkConditionCandidates(newElement, neAttrs);\n        if (candidates.length < NOAH_ARK_CAPACITY)\n            return;\n        //NOTE: build attrs map for the new element, so we can perform fast lookups\n        const neAttrsMap = new Map(neAttrs.map((neAttr) => [neAttr.name, neAttr.value]));\n        let validCandidates = 0;\n        //NOTE: remove bottommost candidates, until Noah's Ark condition will not be met\n        for (let i = 0; i < candidates.length; i++) {\n            const candidate = candidates[i];\n            // We know that `candidate.attrs.length === neAttrs.length`\n            if (candidate.attrs.every((cAttr) => neAttrsMap.get(cAttr.name) === cAttr.value)) {\n                validCandidates += 1;\n                if (validCandidates >= NOAH_ARK_CAPACITY) {\n                    this.entries.splice(candidate.idx, 1);\n                }\n            }\n        }\n    }\n    //Mutations\n    insertMarker() {\n        this.entries.unshift(MARKER);\n    }\n    pushElement(element, token) {\n        this._ensureNoahArkCondition(element);\n        this.entries.unshift({\n            type: EntryType.Element,\n            element,\n            token,\n        });\n    }\n    insertElementAfterBookmark(element, token) {\n        const bookmarkIdx = this.entries.indexOf(this.bookmark);\n        this.entries.splice(bookmarkIdx, 0, {\n            type: EntryType.Element,\n            element,\n            token,\n        });\n    }\n    removeEntry(entry) {\n        const entryIndex = this.entries.indexOf(entry);\n        if (entryIndex !== -1) {\n            this.entries.splice(entryIndex, 1);\n        }\n    }\n    /**\n     * Clears the list of formatting elements up to the last marker.\n     *\n     * @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-list-of-active-formatting-elements-up-to-the-last-marker\n     */\n    clearToLastMarker() {\n        const markerIdx = this.entries.indexOf(MARKER);\n        if (markerIdx === -1) {\n            this.entries.length = 0;\n        }\n        else {\n            this.entries.splice(0, markerIdx + 1);\n        }\n    }\n    //Search\n    getElementEntryInScopeWithTagName(tagName) {\n        const entry = this.entries.find((entry) => entry.type === EntryType.Marker || this.treeAdapter.getTagName(entry.element) === tagName);\n        return entry && entry.type === EntryType.Element ? entry : null;\n    }\n    getElementEntry(element) {\n        return this.entries.find((entry) => entry.type === EntryType.Element && entry.element === element);\n    }\n}\n","import { DOCUMENT_MODE } from '../common/html.js';\nexport const defaultTreeAdapter = {\n    //Node construction\n    createDocument() {\n        return {\n            nodeName: '#document',\n            mode: DOCUMENT_MODE.NO_QUIRKS,\n            childNodes: [],\n        };\n    },\n    createDocumentFragment() {\n        return {\n            nodeName: '#document-fragment',\n            childNodes: [],\n        };\n    },\n    createElement(tagName, namespaceURI, attrs) {\n        return {\n            nodeName: tagName,\n            tagName,\n            attrs,\n            namespaceURI,\n            childNodes: [],\n            parentNode: null,\n        };\n    },\n    createCommentNode(data) {\n        return {\n            nodeName: '#comment',\n            data,\n            parentNode: null,\n        };\n    },\n    createTextNode(value) {\n        return {\n            nodeName: '#text',\n            value,\n            parentNode: null,\n        };\n    },\n    //Tree mutation\n    appendChild(parentNode, newNode) {\n        parentNode.childNodes.push(newNode);\n        newNode.parentNode = parentNode;\n    },\n    insertBefore(parentNode, newNode, referenceNode) {\n        const insertionIdx = parentNode.childNodes.indexOf(referenceNode);\n        parentNode.childNodes.splice(insertionIdx, 0, newNode);\n        newNode.parentNode = parentNode;\n    },\n    setTemplateContent(templateElement, contentElement) {\n        templateElement.content = contentElement;\n    },\n    getTemplateContent(templateElement) {\n        return templateElement.content;\n    },\n    setDocumentType(document, name, publicId, systemId) {\n        const doctypeNode = document.childNodes.find((node) => node.nodeName === '#documentType');\n        if (doctypeNode) {\n            doctypeNode.name = name;\n            doctypeNode.publicId = publicId;\n            doctypeNode.systemId = systemId;\n        }\n        else {\n            const node = {\n                nodeName: '#documentType',\n                name,\n                publicId,\n                systemId,\n                parentNode: null,\n            };\n            defaultTreeAdapter.appendChild(document, node);\n        }\n    },\n    setDocumentMode(document, mode) {\n        document.mode = mode;\n    },\n    getDocumentMode(document) {\n        return document.mode;\n    },\n    detachNode(node) {\n        if (node.parentNode) {\n            const idx = node.parentNode.childNodes.indexOf(node);\n            node.parentNode.childNodes.splice(idx, 1);\n            node.parentNode = null;\n        }\n    },\n    insertText(parentNode, text) {\n        if (parentNode.childNodes.length > 0) {\n            const prevNode = parentNode.childNodes[parentNode.childNodes.length - 1];\n            if (defaultTreeAdapter.isTextNode(prevNode)) {\n                prevNode.value += text;\n                return;\n            }\n        }\n        defaultTreeAdapter.appendChild(parentNode, defaultTreeAdapter.createTextNode(text));\n    },\n    insertTextBefore(parentNode, text, referenceNode) {\n        const prevNode = parentNode.childNodes[parentNode.childNodes.indexOf(referenceNode) - 1];\n        if (prevNode && defaultTreeAdapter.isTextNode(prevNode)) {\n            prevNode.value += text;\n        }\n        else {\n            defaultTreeAdapter.insertBefore(parentNode, defaultTreeAdapter.createTextNode(text), referenceNode);\n        }\n    },\n    adoptAttributes(recipient, attrs) {\n        const recipientAttrsMap = new Set(recipient.attrs.map((attr) => attr.name));\n        for (let j = 0; j < attrs.length; j++) {\n            if (!recipientAttrsMap.has(attrs[j].name)) {\n                recipient.attrs.push(attrs[j]);\n            }\n        }\n    },\n    //Tree traversing\n    getFirstChild(node) {\n        return node.childNodes[0];\n    },\n    getChildNodes(node) {\n        return node.childNodes;\n    },\n    getParentNode(node) {\n        return node.parentNode;\n    },\n    getAttrList(element) {\n        return element.attrs;\n    },\n    //Node data\n    getTagName(element) {\n        return element.tagName;\n    },\n    getNamespaceURI(element) {\n        return element.namespaceURI;\n    },\n    getTextNodeContent(textNode) {\n        return textNode.value;\n    },\n    getCommentNodeContent(commentNode) {\n        return commentNode.data;\n    },\n    getDocumentTypeNodeName(doctypeNode) {\n        return doctypeNode.name;\n    },\n    getDocumentTypeNodePublicId(doctypeNode) {\n        return doctypeNode.publicId;\n    },\n    getDocumentTypeNodeSystemId(doctypeNode) {\n        return doctypeNode.systemId;\n    },\n    //Node types\n    isTextNode(node) {\n        return node.nodeName === '#text';\n    },\n    isCommentNode(node) {\n        return node.nodeName === '#comment';\n    },\n    isDocumentTypeNode(node) {\n        return node.nodeName === '#documentType';\n    },\n    isElementNode(node) {\n        return Object.prototype.hasOwnProperty.call(node, 'tagName');\n    },\n    // Source code location\n    setNodeSourceCodeLocation(node, location) {\n        node.sourceCodeLocation = location;\n    },\n    getNodeSourceCodeLocation(node) {\n        return node.sourceCodeLocation;\n    },\n    updateNodeSourceCodeLocation(node, endLocation) {\n        node.sourceCodeLocation = { ...node.sourceCodeLocation, ...endLocation };\n    },\n};\n","import { DOCUMENT_MODE } from './html.js';\n//Const\nconst VALID_DOCTYPE_NAME = 'html';\nconst VALID_SYSTEM_ID = 'about:legacy-compat';\nconst QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd';\nconst QUIRKS_MODE_PUBLIC_ID_PREFIXES = [\n    '+//silmaril//dtd html pro v0r11 19970101//',\n    '-//as//dtd html 3.0 aswedit + extensions//',\n    '-//advasoft ltd//dtd html 3.0 aswedit + extensions//',\n    '-//ietf//dtd html 2.0 level 1//',\n    '-//ietf//dtd html 2.0 level 2//',\n    '-//ietf//dtd html 2.0 strict level 1//',\n    '-//ietf//dtd html 2.0 strict level 2//',\n    '-//ietf//dtd html 2.0 strict//',\n    '-//ietf//dtd html 2.0//',\n    '-//ietf//dtd html 2.1e//',\n    '-//ietf//dtd html 3.0//',\n    '-//ietf//dtd html 3.2 final//',\n    '-//ietf//dtd html 3.2//',\n    '-//ietf//dtd html 3//',\n    '-//ietf//dtd html level 0//',\n    '-//ietf//dtd html level 1//',\n    '-//ietf//dtd html level 2//',\n    '-//ietf//dtd html level 3//',\n    '-//ietf//dtd html strict level 0//',\n    '-//ietf//dtd html strict level 1//',\n    '-//ietf//dtd html strict level 2//',\n    '-//ietf//dtd html strict level 3//',\n    '-//ietf//dtd html strict//',\n    '-//ietf//dtd html//',\n    '-//metrius//dtd metrius presentational//',\n    '-//microsoft//dtd internet explorer 2.0 html strict//',\n    '-//microsoft//dtd internet explorer 2.0 html//',\n    '-//microsoft//dtd internet explorer 2.0 tables//',\n    '-//microsoft//dtd internet explorer 3.0 html strict//',\n    '-//microsoft//dtd internet explorer 3.0 html//',\n    '-//microsoft//dtd internet explorer 3.0 tables//',\n    '-//netscape comm. corp.//dtd html//',\n    '-//netscape comm. corp.//dtd strict html//',\n    \"-//o'reilly and associates//dtd html 2.0//\",\n    \"-//o'reilly and associates//dtd html extended 1.0//\",\n    \"-//o'reilly and associates//dtd html extended relaxed 1.0//\",\n    '-//sq//dtd html 2.0 hotmetal + extensions//',\n    '-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//',\n    '-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//',\n    '-//spyglass//dtd html 2.0 extended//',\n    '-//sun microsystems corp.//dtd hotjava html//',\n    '-//sun microsystems corp.//dtd hotjava strict html//',\n    '-//w3c//dtd html 3 1995-03-24//',\n    '-//w3c//dtd html 3.2 draft//',\n    '-//w3c//dtd html 3.2 final//',\n    '-//w3c//dtd html 3.2//',\n    '-//w3c//dtd html 3.2s draft//',\n    '-//w3c//dtd html 4.0 frameset//',\n    '-//w3c//dtd html 4.0 transitional//',\n    '-//w3c//dtd html experimental 19960712//',\n    '-//w3c//dtd html experimental 970421//',\n    '-//w3c//dtd w3 html//',\n    '-//w3o//dtd w3 html 3.0//',\n    '-//webtechs//dtd mozilla html 2.0//',\n    '-//webtechs//dtd mozilla html//',\n];\nconst QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = [\n    ...QUIRKS_MODE_PUBLIC_ID_PREFIXES,\n    '-//w3c//dtd html 4.01 frameset//',\n    '-//w3c//dtd html 4.01 transitional//',\n];\nconst QUIRKS_MODE_PUBLIC_IDS = new Set([\n    '-//w3o//dtd w3 html strict 3.0//en//',\n    '-/w3c/dtd html 4.0 transitional/en',\n    'html',\n]);\nconst LIMITED_QUIRKS_PUBLIC_ID_PREFIXES = ['-//w3c//dtd xhtml 1.0 frameset//', '-//w3c//dtd xhtml 1.0 transitional//'];\nconst LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES = [\n    ...LIMITED_QUIRKS_PUBLIC_ID_PREFIXES,\n    '-//w3c//dtd html 4.01 frameset//',\n    '-//w3c//dtd html 4.01 transitional//',\n];\n//Utils\nfunction hasPrefix(publicId, prefixes) {\n    return prefixes.some((prefix) => publicId.startsWith(prefix));\n}\n//API\nexport function isConforming(token) {\n    return (token.name === VALID_DOCTYPE_NAME &&\n        token.publicId === null &&\n        (token.systemId === null || token.systemId === VALID_SYSTEM_ID));\n}\nexport function getDocumentMode(token) {\n    if (token.name !== VALID_DOCTYPE_NAME) {\n        return DOCUMENT_MODE.QUIRKS;\n    }\n    const { systemId } = token;\n    if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) {\n        return DOCUMENT_MODE.QUIRKS;\n    }\n    let { publicId } = token;\n    if (publicId !== null) {\n        publicId = publicId.toLowerCase();\n        if (QUIRKS_MODE_PUBLIC_IDS.has(publicId)) {\n            return DOCUMENT_MODE.QUIRKS;\n        }\n        let prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES;\n        if (hasPrefix(publicId, prefixes)) {\n            return DOCUMENT_MODE.QUIRKS;\n        }\n        prefixes =\n            systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES;\n        if (hasPrefix(publicId, prefixes)) {\n            return DOCUMENT_MODE.LIMITED_QUIRKS;\n        }\n    }\n    return DOCUMENT_MODE.NO_QUIRKS;\n}\n","import { TAG_ID as $, NS, ATTRS, getTagID } from './html.js';\n//MIME types\nconst MIME_TYPES = {\n    TEXT_HTML: 'text/html',\n    APPLICATION_XML: 'application/xhtml+xml',\n};\n//Attributes\nconst DEFINITION_URL_ATTR = 'definitionurl';\nconst ADJUSTED_DEFINITION_URL_ATTR = 'definitionURL';\nconst SVG_ATTRS_ADJUSTMENT_MAP = new Map([\n    'attributeName',\n    'attributeType',\n    'baseFrequency',\n    'baseProfile',\n    'calcMode',\n    'clipPathUnits',\n    'diffuseConstant',\n    'edgeMode',\n    'filterUnits',\n    'glyphRef',\n    'gradientTransform',\n    'gradientUnits',\n    'kernelMatrix',\n    'kernelUnitLength',\n    'keyPoints',\n    'keySplines',\n    'keyTimes',\n    'lengthAdjust',\n    'limitingConeAngle',\n    'markerHeight',\n    'markerUnits',\n    'markerWidth',\n    'maskContentUnits',\n    'maskUnits',\n    'numOctaves',\n    'pathLength',\n    'patternContentUnits',\n    'patternTransform',\n    'patternUnits',\n    'pointsAtX',\n    'pointsAtY',\n    'pointsAtZ',\n    'preserveAlpha',\n    'preserveAspectRatio',\n    'primitiveUnits',\n    'refX',\n    'refY',\n    'repeatCount',\n    'repeatDur',\n    'requiredExtensions',\n    'requiredFeatures',\n    'specularConstant',\n    'specularExponent',\n    'spreadMethod',\n    'startOffset',\n    'stdDeviation',\n    'stitchTiles',\n    'surfaceScale',\n    'systemLanguage',\n    'tableValues',\n    'targetX',\n    'targetY',\n    'textLength',\n    'viewBox',\n    'viewTarget',\n    'xChannelSelector',\n    'yChannelSelector',\n    'zoomAndPan',\n].map((attr) => [attr.toLowerCase(), attr]));\nconst XML_ATTRS_ADJUSTMENT_MAP = new Map([\n    ['xlink:actuate', { prefix: 'xlink', name: 'actuate', namespace: NS.XLINK }],\n    ['xlink:arcrole', { prefix: 'xlink', name: 'arcrole', namespace: NS.XLINK }],\n    ['xlink:href', { prefix: 'xlink', name: 'href', namespace: NS.XLINK }],\n    ['xlink:role', { prefix: 'xlink', name: 'role', namespace: NS.XLINK }],\n    ['xlink:show', { prefix: 'xlink', name: 'show', namespace: NS.XLINK }],\n    ['xlink:title', { prefix: 'xlink', name: 'title', namespace: NS.XLINK }],\n    ['xlink:type', { prefix: 'xlink', name: 'type', namespace: NS.XLINK }],\n    ['xml:lang', { prefix: 'xml', name: 'lang', namespace: NS.XML }],\n    ['xml:space', { prefix: 'xml', name: 'space', namespace: NS.XML }],\n    ['xmlns', { prefix: '', name: 'xmlns', namespace: NS.XMLNS }],\n    ['xmlns:xlink', { prefix: 'xmlns', name: 'xlink', namespace: NS.XMLNS }],\n]);\n//SVG tag names adjustment map\nexport const SVG_TAG_NAMES_ADJUSTMENT_MAP = new Map([\n    'altGlyph',\n    'altGlyphDef',\n    'altGlyphItem',\n    'animateColor',\n    'animateMotion',\n    'animateTransform',\n    'clipPath',\n    'feBlend',\n    'feColorMatrix',\n    'feComponentTransfer',\n    'feComposite',\n    'feConvolveMatrix',\n    'feDiffuseLighting',\n    'feDisplacementMap',\n    'feDistantLight',\n    'feFlood',\n    'feFuncA',\n    'feFuncB',\n    'feFuncG',\n    'feFuncR',\n    'feGaussianBlur',\n    'feImage',\n    'feMerge',\n    'feMergeNode',\n    'feMorphology',\n    'feOffset',\n    'fePointLight',\n    'feSpecularLighting',\n    'feSpotLight',\n    'feTile',\n    'feTurbulence',\n    'foreignObject',\n    'glyphRef',\n    'linearGradient',\n    'radialGradient',\n    'textPath',\n].map((tn) => [tn.toLowerCase(), tn]));\n//Tags that causes exit from foreign content\nconst EXITS_FOREIGN_CONTENT = new Set([\n    $.B,\n    $.BIG,\n    $.BLOCKQUOTE,\n    $.BODY,\n    $.BR,\n    $.CENTER,\n    $.CODE,\n    $.DD,\n    $.DIV,\n    $.DL,\n    $.DT,\n    $.EM,\n    $.EMBED,\n    $.H1,\n    $.H2,\n    $.H3,\n    $.H4,\n    $.H5,\n    $.H6,\n    $.HEAD,\n    $.HR,\n    $.I,\n    $.IMG,\n    $.LI,\n    $.LISTING,\n    $.MENU,\n    $.META,\n    $.NOBR,\n    $.OL,\n    $.P,\n    $.PRE,\n    $.RUBY,\n    $.S,\n    $.SMALL,\n    $.SPAN,\n    $.STRONG,\n    $.STRIKE,\n    $.SUB,\n    $.SUP,\n    $.TABLE,\n    $.TT,\n    $.U,\n    $.UL,\n    $.VAR,\n]);\n//Check exit from foreign content\nexport function causesExit(startTagToken) {\n    const tn = startTagToken.tagID;\n    const isFontWithAttrs = tn === $.FONT &&\n        startTagToken.attrs.some(({ name }) => name === ATTRS.COLOR || name === ATTRS.SIZE || name === ATTRS.FACE);\n    return isFontWithAttrs || EXITS_FOREIGN_CONTENT.has(tn);\n}\n//Token adjustments\nexport function adjustTokenMathMLAttrs(token) {\n    for (let i = 0; i < token.attrs.length; i++) {\n        if (token.attrs[i].name === DEFINITION_URL_ATTR) {\n            token.attrs[i].name = ADJUSTED_DEFINITION_URL_ATTR;\n            break;\n        }\n    }\n}\nexport function adjustTokenSVGAttrs(token) {\n    for (let i = 0; i < token.attrs.length; i++) {\n        const adjustedAttrName = SVG_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);\n        if (adjustedAttrName != null) {\n            token.attrs[i].name = adjustedAttrName;\n        }\n    }\n}\nexport function adjustTokenXMLAttrs(token) {\n    for (let i = 0; i < token.attrs.length; i++) {\n        const adjustedAttrEntry = XML_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);\n        if (adjustedAttrEntry) {\n            token.attrs[i].prefix = adjustedAttrEntry.prefix;\n            token.attrs[i].name = adjustedAttrEntry.name;\n            token.attrs[i].namespace = adjustedAttrEntry.namespace;\n        }\n    }\n}\nexport function adjustTokenSVGTagName(token) {\n    const adjustedTagName = SVG_TAG_NAMES_ADJUSTMENT_MAP.get(token.tagName);\n    if (adjustedTagName != null) {\n        token.tagName = adjustedTagName;\n        token.tagID = getTagID(token.tagName);\n    }\n}\n//Integration points\nfunction isMathMLTextIntegrationPoint(tn, ns) {\n    return ns === NS.MATHML && (tn === $.MI || tn === $.MO || tn === $.MN || tn === $.MS || tn === $.MTEXT);\n}\nfunction isHtmlIntegrationPoint(tn, ns, attrs) {\n    if (ns === NS.MATHML && tn === $.ANNOTATION_XML) {\n        for (let i = 0; i < attrs.length; i++) {\n            if (attrs[i].name === ATTRS.ENCODING) {\n                const value = attrs[i].value.toLowerCase();\n                return value === MIME_TYPES.TEXT_HTML || value === MIME_TYPES.APPLICATION_XML;\n            }\n        }\n    }\n    return ns === NS.SVG && (tn === $.FOREIGN_OBJECT || tn === $.DESC || tn === $.TITLE);\n}\nexport function isIntegrationPoint(tn, ns, attrs, foreignNS) {\n    return (((!foreignNS || foreignNS === NS.HTML) && isHtmlIntegrationPoint(tn, ns, attrs)) ||\n        ((!foreignNS || foreignNS === NS.MATHML) && isMathMLTextIntegrationPoint(tn, ns)));\n}\n","import { Tokenizer, TokenizerMode } from '../tokenizer/index.js';\nimport { OpenElementStack } from './open-element-stack.js';\nimport { FormattingElementList, EntryType } from './formatting-element-list.js';\nimport { defaultTreeAdapter } from '../tree-adapters/default.js';\nimport * as doctype from '../common/doctype.js';\nimport * as foreignContent from '../common/foreign-content.js';\nimport { ERR } from '../common/error-codes.js';\nimport * as unicode from '../common/unicode.js';\nimport { TAG_ID as $, TAG_NAMES as TN, NS, ATTRS, SPECIAL_ELEMENTS, DOCUMENT_MODE, NUMBERED_HEADERS, getTagID, } from '../common/html.js';\nimport { TokenType, getTokenAttr, } from '../common/token.js';\n//Misc constants\nconst HIDDEN_INPUT_TYPE = 'hidden';\n//Adoption agency loops iteration count\nconst AA_OUTER_LOOP_ITER = 8;\nconst AA_INNER_LOOP_ITER = 3;\n//Insertion modes\nvar InsertionMode;\n(function (InsertionMode) {\n    InsertionMode[InsertionMode[\"INITIAL\"] = 0] = \"INITIAL\";\n    InsertionMode[InsertionMode[\"BEFORE_HTML\"] = 1] = \"BEFORE_HTML\";\n    InsertionMode[InsertionMode[\"BEFORE_HEAD\"] = 2] = \"BEFORE_HEAD\";\n    InsertionMode[InsertionMode[\"IN_HEAD\"] = 3] = \"IN_HEAD\";\n    InsertionMode[InsertionMode[\"IN_HEAD_NO_SCRIPT\"] = 4] = \"IN_HEAD_NO_SCRIPT\";\n    InsertionMode[InsertionMode[\"AFTER_HEAD\"] = 5] = \"AFTER_HEAD\";\n    InsertionMode[InsertionMode[\"IN_BODY\"] = 6] = \"IN_BODY\";\n    InsertionMode[InsertionMode[\"TEXT\"] = 7] = \"TEXT\";\n    InsertionMode[InsertionMode[\"IN_TABLE\"] = 8] = \"IN_TABLE\";\n    InsertionMode[InsertionMode[\"IN_TABLE_TEXT\"] = 9] = \"IN_TABLE_TEXT\";\n    InsertionMode[InsertionMode[\"IN_CAPTION\"] = 10] = \"IN_CAPTION\";\n    InsertionMode[InsertionMode[\"IN_COLUMN_GROUP\"] = 11] = \"IN_COLUMN_GROUP\";\n    InsertionMode[InsertionMode[\"IN_TABLE_BODY\"] = 12] = \"IN_TABLE_BODY\";\n    InsertionMode[InsertionMode[\"IN_ROW\"] = 13] = \"IN_ROW\";\n    InsertionMode[InsertionMode[\"IN_CELL\"] = 14] = \"IN_CELL\";\n    InsertionMode[InsertionMode[\"IN_SELECT\"] = 15] = \"IN_SELECT\";\n    InsertionMode[InsertionMode[\"IN_SELECT_IN_TABLE\"] = 16] = \"IN_SELECT_IN_TABLE\";\n    InsertionMode[InsertionMode[\"IN_TEMPLATE\"] = 17] = \"IN_TEMPLATE\";\n    InsertionMode[InsertionMode[\"AFTER_BODY\"] = 18] = \"AFTER_BODY\";\n    InsertionMode[InsertionMode[\"IN_FRAMESET\"] = 19] = \"IN_FRAMESET\";\n    InsertionMode[InsertionMode[\"AFTER_FRAMESET\"] = 20] = \"AFTER_FRAMESET\";\n    InsertionMode[InsertionMode[\"AFTER_AFTER_BODY\"] = 21] = \"AFTER_AFTER_BODY\";\n    InsertionMode[InsertionMode[\"AFTER_AFTER_FRAMESET\"] = 22] = \"AFTER_AFTER_FRAMESET\";\n})(InsertionMode || (InsertionMode = {}));\nconst BASE_LOC = {\n    startLine: -1,\n    startCol: -1,\n    startOffset: -1,\n    endLine: -1,\n    endCol: -1,\n    endOffset: -1,\n};\nconst TABLE_STRUCTURE_TAGS = new Set([$.TABLE, $.TBODY, $.TFOOT, $.THEAD, $.TR]);\nconst defaultParserOptions = {\n    scriptingEnabled: true,\n    sourceCodeLocationInfo: false,\n    treeAdapter: defaultTreeAdapter,\n    onParseError: null,\n};\n//Parser\nexport class Parser {\n    constructor(options, document, \n    /** @internal */\n    fragmentContext = null, \n    /** @internal */\n    scriptHandler = null) {\n        this.fragmentContext = fragmentContext;\n        this.scriptHandler = scriptHandler;\n        this.currentToken = null;\n        this.stopped = false;\n        /** @internal */\n        this.insertionMode = InsertionMode.INITIAL;\n        /** @internal */\n        this.originalInsertionMode = InsertionMode.INITIAL;\n        /** @internal */\n        this.headElement = null;\n        /** @internal */\n        this.formElement = null;\n        /** Indicates that the current node is not an element in the HTML namespace */\n        this.currentNotInHTML = false;\n        /**\n         * The template insertion mode stack is maintained from the left.\n         * Ie. the topmost element will always have index 0.\n         *\n         * @internal\n         */\n        this.tmplInsertionModeStack = [];\n        /** @internal */\n        this.pendingCharacterTokens = [];\n        /** @internal */\n        this.hasNonWhitespacePendingCharacterToken = false;\n        /** @internal */\n        this.framesetOk = true;\n        /** @internal */\n        this.skipNextNewLine = false;\n        /** @internal */\n        this.fosterParentingEnabled = false;\n        this.options = {\n            ...defaultParserOptions,\n            ...options,\n        };\n        this.treeAdapter = this.options.treeAdapter;\n        this.onParseError = this.options.onParseError;\n        // Always enable location info if we report parse errors.\n        if (this.onParseError) {\n            this.options.sourceCodeLocationInfo = true;\n        }\n        this.document = document !== null && document !== void 0 ? document : this.treeAdapter.createDocument();\n        this.tokenizer = new Tokenizer(this.options, this);\n        this.activeFormattingElements = new FormattingElementList(this.treeAdapter);\n        this.fragmentContextID = fragmentContext ? getTagID(this.treeAdapter.getTagName(fragmentContext)) : $.UNKNOWN;\n        this._setContextModes(fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : this.document, this.fragmentContextID);\n        this.openElements = new OpenElementStack(this.document, this.treeAdapter, this);\n    }\n    // API\n    static parse(html, options) {\n        const parser = new this(options);\n        parser.tokenizer.write(html, true);\n        return parser.document;\n    }\n    static getFragmentParser(fragmentContext, options) {\n        const opts = {\n            ...defaultParserOptions,\n            ...options,\n        };\n        //NOTE: use a <template> element as the fragment context if no context element was provided,\n        //so we will parse in a \"forgiving\" manner\n        fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : (fragmentContext = opts.treeAdapter.createElement(TN.TEMPLATE, NS.HTML, []));\n        //NOTE: create a fake element which will be used as the `document` for fragment parsing.\n        //This is important for jsdom, where a new `document` cannot be created. This led to\n        //fragment parsing messing with the main `document`.\n        const documentMock = opts.treeAdapter.createElement('documentmock', NS.HTML, []);\n        const parser = new this(opts, documentMock, fragmentContext);\n        if (parser.fragmentContextID === $.TEMPLATE) {\n            parser.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);\n        }\n        parser._initTokenizerForFragmentParsing();\n        parser._insertFakeRootElement();\n        parser._resetInsertionMode();\n        parser._findFormInFragmentContext();\n        return parser;\n    }\n    getFragment() {\n        const rootElement = this.treeAdapter.getFirstChild(this.document);\n        const fragment = this.treeAdapter.createDocumentFragment();\n        this._adoptNodes(rootElement, fragment);\n        return fragment;\n    }\n    //Errors\n    /** @internal */\n    _err(token, code, beforeToken) {\n        var _a;\n        if (!this.onParseError)\n            return;\n        const loc = (_a = token.location) !== null && _a !== void 0 ? _a : BASE_LOC;\n        const err = {\n            code,\n            startLine: loc.startLine,\n            startCol: loc.startCol,\n            startOffset: loc.startOffset,\n            endLine: beforeToken ? loc.startLine : loc.endLine,\n            endCol: beforeToken ? loc.startCol : loc.endCol,\n            endOffset: beforeToken ? loc.startOffset : loc.endOffset,\n        };\n        this.onParseError(err);\n    }\n    //Stack events\n    /** @internal */\n    onItemPush(node, tid, isTop) {\n        var _a, _b;\n        (_b = (_a = this.treeAdapter).onItemPush) === null || _b === void 0 ? void 0 : _b.call(_a, node);\n        if (isTop && this.openElements.stackTop > 0)\n            this._setContextModes(node, tid);\n    }\n    /** @internal */\n    onItemPop(node, isTop) {\n        var _a, _b;\n        if (this.options.sourceCodeLocationInfo) {\n            this._setEndLocation(node, this.currentToken);\n        }\n        (_b = (_a = this.treeAdapter).onItemPop) === null || _b === void 0 ? void 0 : _b.call(_a, node, this.openElements.current);\n        if (isTop) {\n            let current;\n            let currentTagId;\n            if (this.openElements.stackTop === 0 && this.fragmentContext) {\n                current = this.fragmentContext;\n                currentTagId = this.fragmentContextID;\n            }\n            else {\n                ({ current, currentTagId } = this.openElements);\n            }\n            this._setContextModes(current, currentTagId);\n        }\n    }\n    _setContextModes(current, tid) {\n        const isHTML = current === this.document || (current && this.treeAdapter.getNamespaceURI(current) === NS.HTML);\n        this.currentNotInHTML = !isHTML;\n        this.tokenizer.inForeignNode =\n            !isHTML && current !== undefined && tid !== undefined && !this._isIntegrationPoint(tid, current);\n    }\n    /** @protected */\n    _switchToTextParsing(currentToken, nextTokenizerState) {\n        this._insertElement(currentToken, NS.HTML);\n        this.tokenizer.state = nextTokenizerState;\n        this.originalInsertionMode = this.insertionMode;\n        this.insertionMode = InsertionMode.TEXT;\n    }\n    switchToPlaintextParsing() {\n        this.insertionMode = InsertionMode.TEXT;\n        this.originalInsertionMode = InsertionMode.IN_BODY;\n        this.tokenizer.state = TokenizerMode.PLAINTEXT;\n    }\n    //Fragment parsing\n    /** @protected */\n    _getAdjustedCurrentElement() {\n        return this.openElements.stackTop === 0 && this.fragmentContext\n            ? this.fragmentContext\n            : this.openElements.current;\n    }\n    /** @protected */\n    _findFormInFragmentContext() {\n        let node = this.fragmentContext;\n        while (node) {\n            if (this.treeAdapter.getTagName(node) === TN.FORM) {\n                this.formElement = node;\n                break;\n            }\n            node = this.treeAdapter.getParentNode(node);\n        }\n    }\n    _initTokenizerForFragmentParsing() {\n        if (!this.fragmentContext || this.treeAdapter.getNamespaceURI(this.fragmentContext) !== NS.HTML) {\n            return;\n        }\n        switch (this.fragmentContextID) {\n            case $.TITLE:\n            case $.TEXTAREA: {\n                this.tokenizer.state = TokenizerMode.RCDATA;\n                break;\n            }\n            case $.STYLE:\n            case $.XMP:\n            case $.IFRAME:\n            case $.NOEMBED:\n            case $.NOFRAMES:\n            case $.NOSCRIPT: {\n                this.tokenizer.state = TokenizerMode.RAWTEXT;\n                break;\n            }\n            case $.SCRIPT: {\n                this.tokenizer.state = TokenizerMode.SCRIPT_DATA;\n                break;\n            }\n            case $.PLAINTEXT: {\n                this.tokenizer.state = TokenizerMode.PLAINTEXT;\n                break;\n            }\n            default:\n            // Do nothing\n        }\n    }\n    //Tree mutation\n    /** @protected */\n    _setDocumentType(token) {\n        const name = token.name || '';\n        const publicId = token.publicId || '';\n        const systemId = token.systemId || '';\n        this.treeAdapter.setDocumentType(this.document, name, publicId, systemId);\n        if (token.location) {\n            const documentChildren = this.treeAdapter.getChildNodes(this.document);\n            const docTypeNode = documentChildren.find((node) => this.treeAdapter.isDocumentTypeNode(node));\n            if (docTypeNode) {\n                this.treeAdapter.setNodeSourceCodeLocation(docTypeNode, token.location);\n            }\n        }\n    }\n    /** @protected */\n    _attachElementToTree(element, location) {\n        if (this.options.sourceCodeLocationInfo) {\n            const loc = location && {\n                ...location,\n                startTag: location,\n            };\n            this.treeAdapter.setNodeSourceCodeLocation(element, loc);\n        }\n        if (this._shouldFosterParentOnInsertion()) {\n            this._fosterParentElement(element);\n        }\n        else {\n            const parent = this.openElements.currentTmplContentOrNode;\n            this.treeAdapter.appendChild(parent !== null && parent !== void 0 ? parent : this.document, element);\n        }\n    }\n    /**\n     * For self-closing tags. Add an element to the tree, but skip adding it\n     * to the stack.\n     */\n    /** @protected */\n    _appendElement(token, namespaceURI) {\n        const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);\n        this._attachElementToTree(element, token.location);\n    }\n    /** @protected */\n    _insertElement(token, namespaceURI) {\n        const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);\n        this._attachElementToTree(element, token.location);\n        this.openElements.push(element, token.tagID);\n    }\n    /** @protected */\n    _insertFakeElement(tagName, tagID) {\n        const element = this.treeAdapter.createElement(tagName, NS.HTML, []);\n        this._attachElementToTree(element, null);\n        this.openElements.push(element, tagID);\n    }\n    /** @protected */\n    _insertTemplate(token) {\n        const tmpl = this.treeAdapter.createElement(token.tagName, NS.HTML, token.attrs);\n        const content = this.treeAdapter.createDocumentFragment();\n        this.treeAdapter.setTemplateContent(tmpl, content);\n        this._attachElementToTree(tmpl, token.location);\n        this.openElements.push(tmpl, token.tagID);\n        if (this.options.sourceCodeLocationInfo)\n            this.treeAdapter.setNodeSourceCodeLocation(content, null);\n    }\n    /** @protected */\n    _insertFakeRootElement() {\n        const element = this.treeAdapter.createElement(TN.HTML, NS.HTML, []);\n        if (this.options.sourceCodeLocationInfo)\n            this.treeAdapter.setNodeSourceCodeLocation(element, null);\n        this.treeAdapter.appendChild(this.openElements.current, element);\n        this.openElements.push(element, $.HTML);\n    }\n    /** @protected */\n    _appendCommentNode(token, parent) {\n        const commentNode = this.treeAdapter.createCommentNode(token.data);\n        this.treeAdapter.appendChild(parent, commentNode);\n        if (this.options.sourceCodeLocationInfo) {\n            this.treeAdapter.setNodeSourceCodeLocation(commentNode, token.location);\n        }\n    }\n    /** @protected */\n    _insertCharacters(token) {\n        let parent;\n        let beforeElement;\n        if (this._shouldFosterParentOnInsertion()) {\n            ({ parent, beforeElement } = this._findFosterParentingLocation());\n            if (beforeElement) {\n                this.treeAdapter.insertTextBefore(parent, token.chars, beforeElement);\n            }\n            else {\n                this.treeAdapter.insertText(parent, token.chars);\n            }\n        }\n        else {\n            parent = this.openElements.currentTmplContentOrNode;\n            this.treeAdapter.insertText(parent, token.chars);\n        }\n        if (!token.location)\n            return;\n        const siblings = this.treeAdapter.getChildNodes(parent);\n        const textNodeIdx = beforeElement ? siblings.lastIndexOf(beforeElement) : siblings.length;\n        const textNode = siblings[textNodeIdx - 1];\n        //NOTE: if we have a location assigned by another token, then just update the end position\n        const tnLoc = this.treeAdapter.getNodeSourceCodeLocation(textNode);\n        if (tnLoc) {\n            const { endLine, endCol, endOffset } = token.location;\n            this.treeAdapter.updateNodeSourceCodeLocation(textNode, { endLine, endCol, endOffset });\n        }\n        else if (this.options.sourceCodeLocationInfo) {\n            this.treeAdapter.setNodeSourceCodeLocation(textNode, token.location);\n        }\n    }\n    /** @protected */\n    _adoptNodes(donor, recipient) {\n        for (let child = this.treeAdapter.getFirstChild(donor); child; child = this.treeAdapter.getFirstChild(donor)) {\n            this.treeAdapter.detachNode(child);\n            this.treeAdapter.appendChild(recipient, child);\n        }\n    }\n    /** @protected */\n    _setEndLocation(element, closingToken) {\n        if (this.treeAdapter.getNodeSourceCodeLocation(element) && closingToken.location) {\n            const ctLoc = closingToken.location;\n            const tn = this.treeAdapter.getTagName(element);\n            const endLoc = \n            // NOTE: For cases like <p> <p> </p> - First 'p' closes without a closing\n            // tag and for cases like <td> <p> </td> - 'p' closes without a closing tag.\n            closingToken.type === TokenType.END_TAG && tn === closingToken.tagName\n                ? {\n                    endTag: { ...ctLoc },\n                    endLine: ctLoc.endLine,\n                    endCol: ctLoc.endCol,\n                    endOffset: ctLoc.endOffset,\n                }\n                : {\n                    endLine: ctLoc.startLine,\n                    endCol: ctLoc.startCol,\n                    endOffset: ctLoc.startOffset,\n                };\n            this.treeAdapter.updateNodeSourceCodeLocation(element, endLoc);\n        }\n    }\n    //Token processing\n    shouldProcessStartTagTokenInForeignContent(token) {\n        // Check that neither current === document, or ns === NS.HTML\n        if (!this.currentNotInHTML)\n            return false;\n        let current;\n        let currentTagId;\n        if (this.openElements.stackTop === 0 && this.fragmentContext) {\n            current = this.fragmentContext;\n            currentTagId = this.fragmentContextID;\n        }\n        else {\n            ({ current, currentTagId } = this.openElements);\n        }\n        if (token.tagID === $.SVG &&\n            this.treeAdapter.getTagName(current) === TN.ANNOTATION_XML &&\n            this.treeAdapter.getNamespaceURI(current) === NS.MATHML) {\n            return false;\n        }\n        return (\n        // Check that `current` is not an integration point for HTML or MathML elements.\n        this.tokenizer.inForeignNode ||\n            // If it _is_ an integration point, then we might have to check that it is not an HTML\n            // integration point.\n            ((token.tagID === $.MGLYPH || token.tagID === $.MALIGNMARK) &&\n                currentTagId !== undefined &&\n                !this._isIntegrationPoint(currentTagId, current, NS.HTML)));\n    }\n    /** @protected */\n    _processToken(token) {\n        switch (token.type) {\n            case TokenType.CHARACTER: {\n                this.onCharacter(token);\n                break;\n            }\n            case TokenType.NULL_CHARACTER: {\n                this.onNullCharacter(token);\n                break;\n            }\n            case TokenType.COMMENT: {\n                this.onComment(token);\n                break;\n            }\n            case TokenType.DOCTYPE: {\n                this.onDoctype(token);\n                break;\n            }\n            case TokenType.START_TAG: {\n                this._processStartTag(token);\n                break;\n            }\n            case TokenType.END_TAG: {\n                this.onEndTag(token);\n                break;\n            }\n            case TokenType.EOF: {\n                this.onEof(token);\n                break;\n            }\n            case TokenType.WHITESPACE_CHARACTER: {\n                this.onWhitespaceCharacter(token);\n                break;\n            }\n        }\n    }\n    //Integration points\n    /** @protected */\n    _isIntegrationPoint(tid, element, foreignNS) {\n        const ns = this.treeAdapter.getNamespaceURI(element);\n        const attrs = this.treeAdapter.getAttrList(element);\n        return foreignContent.isIntegrationPoint(tid, ns, attrs, foreignNS);\n    }\n    //Active formatting elements reconstruction\n    /** @protected */\n    _reconstructActiveFormattingElements() {\n        const listLength = this.activeFormattingElements.entries.length;\n        if (listLength) {\n            const endIndex = this.activeFormattingElements.entries.findIndex((entry) => entry.type === EntryType.Marker || this.openElements.contains(entry.element));\n            const unopenIdx = endIndex === -1 ? listLength - 1 : endIndex - 1;\n            for (let i = unopenIdx; i >= 0; i--) {\n                const entry = this.activeFormattingElements.entries[i];\n                this._insertElement(entry.token, this.treeAdapter.getNamespaceURI(entry.element));\n                entry.element = this.openElements.current;\n            }\n        }\n    }\n    //Close elements\n    /** @protected */\n    _closeTableCell() {\n        this.openElements.generateImpliedEndTags();\n        this.openElements.popUntilTableCellPopped();\n        this.activeFormattingElements.clearToLastMarker();\n        this.insertionMode = InsertionMode.IN_ROW;\n    }\n    /** @protected */\n    _closePElement() {\n        this.openElements.generateImpliedEndTagsWithExclusion($.P);\n        this.openElements.popUntilTagNamePopped($.P);\n    }\n    //Insertion modes\n    /** @protected */\n    _resetInsertionMode() {\n        for (let i = this.openElements.stackTop; i >= 0; i--) {\n            //Insertion mode reset map\n            switch (i === 0 && this.fragmentContext ? this.fragmentContextID : this.openElements.tagIDs[i]) {\n                case $.TR: {\n                    this.insertionMode = InsertionMode.IN_ROW;\n                    return;\n                }\n                case $.TBODY:\n                case $.THEAD:\n                case $.TFOOT: {\n                    this.insertionMode = InsertionMode.IN_TABLE_BODY;\n                    return;\n                }\n                case $.CAPTION: {\n                    this.insertionMode = InsertionMode.IN_CAPTION;\n                    return;\n                }\n                case $.COLGROUP: {\n                    this.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n                    return;\n                }\n                case $.TABLE: {\n                    this.insertionMode = InsertionMode.IN_TABLE;\n                    return;\n                }\n                case $.BODY: {\n                    this.insertionMode = InsertionMode.IN_BODY;\n                    return;\n                }\n                case $.FRAMESET: {\n                    this.insertionMode = InsertionMode.IN_FRAMESET;\n                    return;\n                }\n                case $.SELECT: {\n                    this._resetInsertionModeForSelect(i);\n                    return;\n                }\n                case $.TEMPLATE: {\n                    this.insertionMode = this.tmplInsertionModeStack[0];\n                    return;\n                }\n                case $.HTML: {\n                    this.insertionMode = this.headElement ? InsertionMode.AFTER_HEAD : InsertionMode.BEFORE_HEAD;\n                    return;\n                }\n                case $.TD:\n                case $.TH: {\n                    if (i > 0) {\n                        this.insertionMode = InsertionMode.IN_CELL;\n                        return;\n                    }\n                    break;\n                }\n                case $.HEAD: {\n                    if (i > 0) {\n                        this.insertionMode = InsertionMode.IN_HEAD;\n                        return;\n                    }\n                    break;\n                }\n            }\n        }\n        this.insertionMode = InsertionMode.IN_BODY;\n    }\n    /** @protected */\n    _resetInsertionModeForSelect(selectIdx) {\n        if (selectIdx > 0) {\n            for (let i = selectIdx - 1; i > 0; i--) {\n                const tn = this.openElements.tagIDs[i];\n                if (tn === $.TEMPLATE) {\n                    break;\n                }\n                else if (tn === $.TABLE) {\n                    this.insertionMode = InsertionMode.IN_SELECT_IN_TABLE;\n                    return;\n                }\n            }\n        }\n        this.insertionMode = InsertionMode.IN_SELECT;\n    }\n    //Foster parenting\n    /** @protected */\n    _isElementCausesFosterParenting(tn) {\n        return TABLE_STRUCTURE_TAGS.has(tn);\n    }\n    /** @protected */\n    _shouldFosterParentOnInsertion() {\n        return (this.fosterParentingEnabled &&\n            this.openElements.currentTagId !== undefined &&\n            this._isElementCausesFosterParenting(this.openElements.currentTagId));\n    }\n    /** @protected */\n    _findFosterParentingLocation() {\n        for (let i = this.openElements.stackTop; i >= 0; i--) {\n            const openElement = this.openElements.items[i];\n            switch (this.openElements.tagIDs[i]) {\n                case $.TEMPLATE: {\n                    if (this.treeAdapter.getNamespaceURI(openElement) === NS.HTML) {\n                        return { parent: this.treeAdapter.getTemplateContent(openElement), beforeElement: null };\n                    }\n                    break;\n                }\n                case $.TABLE: {\n                    const parent = this.treeAdapter.getParentNode(openElement);\n                    if (parent) {\n                        return { parent, beforeElement: openElement };\n                    }\n                    return { parent: this.openElements.items[i - 1], beforeElement: null };\n                }\n                default:\n                // Do nothing\n            }\n        }\n        return { parent: this.openElements.items[0], beforeElement: null };\n    }\n    /** @protected */\n    _fosterParentElement(element) {\n        const location = this._findFosterParentingLocation();\n        if (location.beforeElement) {\n            this.treeAdapter.insertBefore(location.parent, element, location.beforeElement);\n        }\n        else {\n            this.treeAdapter.appendChild(location.parent, element);\n        }\n    }\n    //Special elements\n    /** @protected */\n    _isSpecialElement(element, id) {\n        const ns = this.treeAdapter.getNamespaceURI(element);\n        return SPECIAL_ELEMENTS[ns].has(id);\n    }\n    /** @internal */\n    onCharacter(token) {\n        this.skipNextNewLine = false;\n        if (this.tokenizer.inForeignNode) {\n            characterInForeignContent(this, token);\n            return;\n        }\n        switch (this.insertionMode) {\n            case InsertionMode.INITIAL: {\n                tokenInInitialMode(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HTML: {\n                tokenBeforeHtml(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HEAD: {\n                tokenBeforeHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_HEAD: {\n                tokenInHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_HEAD_NO_SCRIPT: {\n                tokenInHeadNoScript(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_HEAD: {\n                tokenAfterHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_BODY:\n            case InsertionMode.IN_CAPTION:\n            case InsertionMode.IN_CELL:\n            case InsertionMode.IN_TEMPLATE: {\n                characterInBody(this, token);\n                break;\n            }\n            case InsertionMode.TEXT:\n            case InsertionMode.IN_SELECT:\n            case InsertionMode.IN_SELECT_IN_TABLE: {\n                this._insertCharacters(token);\n                break;\n            }\n            case InsertionMode.IN_TABLE:\n            case InsertionMode.IN_TABLE_BODY:\n            case InsertionMode.IN_ROW: {\n                characterInTable(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE_TEXT: {\n                characterInTableText(this, token);\n                break;\n            }\n            case InsertionMode.IN_COLUMN_GROUP: {\n                tokenInColumnGroup(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_BODY: {\n                tokenAfterBody(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_AFTER_BODY: {\n                tokenAfterAfterBody(this, token);\n                break;\n            }\n            default:\n            // Do nothing\n        }\n    }\n    /** @internal */\n    onNullCharacter(token) {\n        this.skipNextNewLine = false;\n        if (this.tokenizer.inForeignNode) {\n            nullCharacterInForeignContent(this, token);\n            return;\n        }\n        switch (this.insertionMode) {\n            case InsertionMode.INITIAL: {\n                tokenInInitialMode(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HTML: {\n                tokenBeforeHtml(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HEAD: {\n                tokenBeforeHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_HEAD: {\n                tokenInHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_HEAD_NO_SCRIPT: {\n                tokenInHeadNoScript(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_HEAD: {\n                tokenAfterHead(this, token);\n                break;\n            }\n            case InsertionMode.TEXT: {\n                this._insertCharacters(token);\n                break;\n            }\n            case InsertionMode.IN_TABLE:\n            case InsertionMode.IN_TABLE_BODY:\n            case InsertionMode.IN_ROW: {\n                characterInTable(this, token);\n                break;\n            }\n            case InsertionMode.IN_COLUMN_GROUP: {\n                tokenInColumnGroup(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_BODY: {\n                tokenAfterBody(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_AFTER_BODY: {\n                tokenAfterAfterBody(this, token);\n                break;\n            }\n            default:\n            // Do nothing\n        }\n    }\n    /** @internal */\n    onComment(token) {\n        this.skipNextNewLine = false;\n        if (this.currentNotInHTML) {\n            appendComment(this, token);\n            return;\n        }\n        switch (this.insertionMode) {\n            case InsertionMode.INITIAL:\n            case InsertionMode.BEFORE_HTML:\n            case InsertionMode.BEFORE_HEAD:\n            case InsertionMode.IN_HEAD:\n            case InsertionMode.IN_HEAD_NO_SCRIPT:\n            case InsertionMode.AFTER_HEAD:\n            case InsertionMode.IN_BODY:\n            case InsertionMode.IN_TABLE:\n            case InsertionMode.IN_CAPTION:\n            case InsertionMode.IN_COLUMN_GROUP:\n            case InsertionMode.IN_TABLE_BODY:\n            case InsertionMode.IN_ROW:\n            case InsertionMode.IN_CELL:\n            case InsertionMode.IN_SELECT:\n            case InsertionMode.IN_SELECT_IN_TABLE:\n            case InsertionMode.IN_TEMPLATE:\n            case InsertionMode.IN_FRAMESET:\n            case InsertionMode.AFTER_FRAMESET: {\n                appendComment(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE_TEXT: {\n                tokenInTableText(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_BODY: {\n                appendCommentToRootHtmlElement(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_AFTER_BODY:\n            case InsertionMode.AFTER_AFTER_FRAMESET: {\n                appendCommentToDocument(this, token);\n                break;\n            }\n            default:\n            // Do nothing\n        }\n    }\n    /** @internal */\n    onDoctype(token) {\n        this.skipNextNewLine = false;\n        switch (this.insertionMode) {\n            case InsertionMode.INITIAL: {\n                doctypeInInitialMode(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HEAD:\n            case InsertionMode.IN_HEAD:\n            case InsertionMode.IN_HEAD_NO_SCRIPT:\n            case InsertionMode.AFTER_HEAD: {\n                this._err(token, ERR.misplacedDoctype);\n                break;\n            }\n            case InsertionMode.IN_TABLE_TEXT: {\n                tokenInTableText(this, token);\n                break;\n            }\n            default:\n            // Do nothing\n        }\n    }\n    /** @internal */\n    onStartTag(token) {\n        this.skipNextNewLine = false;\n        this.currentToken = token;\n        this._processStartTag(token);\n        if (token.selfClosing && !token.ackSelfClosing) {\n            this._err(token, ERR.nonVoidHtmlElementStartTagWithTrailingSolidus);\n        }\n    }\n    /**\n     * Processes a given start tag.\n     *\n     * `onStartTag` checks if a self-closing tag was recognized. When a token\n     * is moved inbetween multiple insertion modes, this check for self-closing\n     * could lead to false positives. To avoid this, `_processStartTag` is used\n     * for nested calls.\n     *\n     * @param token The token to process.\n     * @protected\n     */\n    _processStartTag(token) {\n        if (this.shouldProcessStartTagTokenInForeignContent(token)) {\n            startTagInForeignContent(this, token);\n        }\n        else {\n            this._startTagOutsideForeignContent(token);\n        }\n    }\n    /** @protected */\n    _startTagOutsideForeignContent(token) {\n        switch (this.insertionMode) {\n            case InsertionMode.INITIAL: {\n                tokenInInitialMode(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HTML: {\n                startTagBeforeHtml(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HEAD: {\n                startTagBeforeHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_HEAD: {\n                startTagInHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_HEAD_NO_SCRIPT: {\n                startTagInHeadNoScript(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_HEAD: {\n                startTagAfterHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_BODY: {\n                startTagInBody(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE: {\n                startTagInTable(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE_TEXT: {\n                tokenInTableText(this, token);\n                break;\n            }\n            case InsertionMode.IN_CAPTION: {\n                startTagInCaption(this, token);\n                break;\n            }\n            case InsertionMode.IN_COLUMN_GROUP: {\n                startTagInColumnGroup(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE_BODY: {\n                startTagInTableBody(this, token);\n                break;\n            }\n            case InsertionMode.IN_ROW: {\n                startTagInRow(this, token);\n                break;\n            }\n            case InsertionMode.IN_CELL: {\n                startTagInCell(this, token);\n                break;\n            }\n            case InsertionMode.IN_SELECT: {\n                startTagInSelect(this, token);\n                break;\n            }\n            case InsertionMode.IN_SELECT_IN_TABLE: {\n                startTagInSelectInTable(this, token);\n                break;\n            }\n            case InsertionMode.IN_TEMPLATE: {\n                startTagInTemplate(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_BODY: {\n                startTagAfterBody(this, token);\n                break;\n            }\n            case InsertionMode.IN_FRAMESET: {\n                startTagInFrameset(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_FRAMESET: {\n                startTagAfterFrameset(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_AFTER_BODY: {\n                startTagAfterAfterBody(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_AFTER_FRAMESET: {\n                startTagAfterAfterFrameset(this, token);\n                break;\n            }\n            default:\n            // Do nothing\n        }\n    }\n    /** @internal */\n    onEndTag(token) {\n        this.skipNextNewLine = false;\n        this.currentToken = token;\n        if (this.currentNotInHTML) {\n            endTagInForeignContent(this, token);\n        }\n        else {\n            this._endTagOutsideForeignContent(token);\n        }\n    }\n    /** @protected */\n    _endTagOutsideForeignContent(token) {\n        switch (this.insertionMode) {\n            case InsertionMode.INITIAL: {\n                tokenInInitialMode(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HTML: {\n                endTagBeforeHtml(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HEAD: {\n                endTagBeforeHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_HEAD: {\n                endTagInHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_HEAD_NO_SCRIPT: {\n                endTagInHeadNoScript(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_HEAD: {\n                endTagAfterHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_BODY: {\n                endTagInBody(this, token);\n                break;\n            }\n            case InsertionMode.TEXT: {\n                endTagInText(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE: {\n                endTagInTable(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE_TEXT: {\n                tokenInTableText(this, token);\n                break;\n            }\n            case InsertionMode.IN_CAPTION: {\n                endTagInCaption(this, token);\n                break;\n            }\n            case InsertionMode.IN_COLUMN_GROUP: {\n                endTagInColumnGroup(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE_BODY: {\n                endTagInTableBody(this, token);\n                break;\n            }\n            case InsertionMode.IN_ROW: {\n                endTagInRow(this, token);\n                break;\n            }\n            case InsertionMode.IN_CELL: {\n                endTagInCell(this, token);\n                break;\n            }\n            case InsertionMode.IN_SELECT: {\n                endTagInSelect(this, token);\n                break;\n            }\n            case InsertionMode.IN_SELECT_IN_TABLE: {\n                endTagInSelectInTable(this, token);\n                break;\n            }\n            case InsertionMode.IN_TEMPLATE: {\n                endTagInTemplate(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_BODY: {\n                endTagAfterBody(this, token);\n                break;\n            }\n            case InsertionMode.IN_FRAMESET: {\n                endTagInFrameset(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_FRAMESET: {\n                endTagAfterFrameset(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_AFTER_BODY: {\n                tokenAfterAfterBody(this, token);\n                break;\n            }\n            default:\n            // Do nothing\n        }\n    }\n    /** @internal */\n    onEof(token) {\n        switch (this.insertionMode) {\n            case InsertionMode.INITIAL: {\n                tokenInInitialMode(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HTML: {\n                tokenBeforeHtml(this, token);\n                break;\n            }\n            case InsertionMode.BEFORE_HEAD: {\n                tokenBeforeHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_HEAD: {\n                tokenInHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_HEAD_NO_SCRIPT: {\n                tokenInHeadNoScript(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_HEAD: {\n                tokenAfterHead(this, token);\n                break;\n            }\n            case InsertionMode.IN_BODY:\n            case InsertionMode.IN_TABLE:\n            case InsertionMode.IN_CAPTION:\n            case InsertionMode.IN_COLUMN_GROUP:\n            case InsertionMode.IN_TABLE_BODY:\n            case InsertionMode.IN_ROW:\n            case InsertionMode.IN_CELL:\n            case InsertionMode.IN_SELECT:\n            case InsertionMode.IN_SELECT_IN_TABLE: {\n                eofInBody(this, token);\n                break;\n            }\n            case InsertionMode.TEXT: {\n                eofInText(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE_TEXT: {\n                tokenInTableText(this, token);\n                break;\n            }\n            case InsertionMode.IN_TEMPLATE: {\n                eofInTemplate(this, token);\n                break;\n            }\n            case InsertionMode.AFTER_BODY:\n            case InsertionMode.IN_FRAMESET:\n            case InsertionMode.AFTER_FRAMESET:\n            case InsertionMode.AFTER_AFTER_BODY:\n            case InsertionMode.AFTER_AFTER_FRAMESET: {\n                stopParsing(this, token);\n                break;\n            }\n            default:\n            // Do nothing\n        }\n    }\n    /** @internal */\n    onWhitespaceCharacter(token) {\n        if (this.skipNextNewLine) {\n            this.skipNextNewLine = false;\n            if (token.chars.charCodeAt(0) === unicode.CODE_POINTS.LINE_FEED) {\n                if (token.chars.length === 1) {\n                    return;\n                }\n                token.chars = token.chars.substr(1);\n            }\n        }\n        if (this.tokenizer.inForeignNode) {\n            this._insertCharacters(token);\n            return;\n        }\n        switch (this.insertionMode) {\n            case InsertionMode.IN_HEAD:\n            case InsertionMode.IN_HEAD_NO_SCRIPT:\n            case InsertionMode.AFTER_HEAD:\n            case InsertionMode.TEXT:\n            case InsertionMode.IN_COLUMN_GROUP:\n            case InsertionMode.IN_SELECT:\n            case InsertionMode.IN_SELECT_IN_TABLE:\n            case InsertionMode.IN_FRAMESET:\n            case InsertionMode.AFTER_FRAMESET: {\n                this._insertCharacters(token);\n                break;\n            }\n            case InsertionMode.IN_BODY:\n            case InsertionMode.IN_CAPTION:\n            case InsertionMode.IN_CELL:\n            case InsertionMode.IN_TEMPLATE:\n            case InsertionMode.AFTER_BODY:\n            case InsertionMode.AFTER_AFTER_BODY:\n            case InsertionMode.AFTER_AFTER_FRAMESET: {\n                whitespaceCharacterInBody(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE:\n            case InsertionMode.IN_TABLE_BODY:\n            case InsertionMode.IN_ROW: {\n                characterInTable(this, token);\n                break;\n            }\n            case InsertionMode.IN_TABLE_TEXT: {\n                whitespaceCharacterInTableText(this, token);\n                break;\n            }\n            default:\n            // Do nothing\n        }\n    }\n}\n//Adoption agency algorithm\n//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#adoptionAgency)\n//------------------------------------------------------------------\n//Steps 5-8 of the algorithm\nfunction aaObtainFormattingElementEntry(p, token) {\n    let formattingElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(token.tagName);\n    if (formattingElementEntry) {\n        if (!p.openElements.contains(formattingElementEntry.element)) {\n            p.activeFormattingElements.removeEntry(formattingElementEntry);\n            formattingElementEntry = null;\n        }\n        else if (!p.openElements.hasInScope(token.tagID)) {\n            formattingElementEntry = null;\n        }\n    }\n    else {\n        genericEndTagInBody(p, token);\n    }\n    return formattingElementEntry;\n}\n//Steps 9 and 10 of the algorithm\nfunction aaObtainFurthestBlock(p, formattingElementEntry) {\n    let furthestBlock = null;\n    let idx = p.openElements.stackTop;\n    for (; idx >= 0; idx--) {\n        const element = p.openElements.items[idx];\n        if (element === formattingElementEntry.element) {\n            break;\n        }\n        if (p._isSpecialElement(element, p.openElements.tagIDs[idx])) {\n            furthestBlock = element;\n        }\n    }\n    if (!furthestBlock) {\n        p.openElements.shortenToLength(Math.max(idx, 0));\n        p.activeFormattingElements.removeEntry(formattingElementEntry);\n    }\n    return furthestBlock;\n}\n//Step 13 of the algorithm\nfunction aaInnerLoop(p, furthestBlock, formattingElement) {\n    let lastElement = furthestBlock;\n    let nextElement = p.openElements.getCommonAncestor(furthestBlock);\n    for (let i = 0, element = nextElement; element !== formattingElement; i++, element = nextElement) {\n        //NOTE: store the next element for the next loop iteration (it may be deleted from the stack by step 9.5)\n        nextElement = p.openElements.getCommonAncestor(element);\n        const elementEntry = p.activeFormattingElements.getElementEntry(element);\n        const counterOverflow = elementEntry && i >= AA_INNER_LOOP_ITER;\n        const shouldRemoveFromOpenElements = !elementEntry || counterOverflow;\n        if (shouldRemoveFromOpenElements) {\n            if (counterOverflow) {\n                p.activeFormattingElements.removeEntry(elementEntry);\n            }\n            p.openElements.remove(element);\n        }\n        else {\n            element = aaRecreateElementFromEntry(p, elementEntry);\n            if (lastElement === furthestBlock) {\n                p.activeFormattingElements.bookmark = elementEntry;\n            }\n            p.treeAdapter.detachNode(lastElement);\n            p.treeAdapter.appendChild(element, lastElement);\n            lastElement = element;\n        }\n    }\n    return lastElement;\n}\n//Step 13.7 of the algorithm\nfunction aaRecreateElementFromEntry(p, elementEntry) {\n    const ns = p.treeAdapter.getNamespaceURI(elementEntry.element);\n    const newElement = p.treeAdapter.createElement(elementEntry.token.tagName, ns, elementEntry.token.attrs);\n    p.openElements.replace(elementEntry.element, newElement);\n    elementEntry.element = newElement;\n    return newElement;\n}\n//Step 14 of the algorithm\nfunction aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement) {\n    const tn = p.treeAdapter.getTagName(commonAncestor);\n    const tid = getTagID(tn);\n    if (p._isElementCausesFosterParenting(tid)) {\n        p._fosterParentElement(lastElement);\n    }\n    else {\n        const ns = p.treeAdapter.getNamespaceURI(commonAncestor);\n        if (tid === $.TEMPLATE && ns === NS.HTML) {\n            commonAncestor = p.treeAdapter.getTemplateContent(commonAncestor);\n        }\n        p.treeAdapter.appendChild(commonAncestor, lastElement);\n    }\n}\n//Steps 15-19 of the algorithm\nfunction aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry) {\n    const ns = p.treeAdapter.getNamespaceURI(formattingElementEntry.element);\n    const { token } = formattingElementEntry;\n    const newElement = p.treeAdapter.createElement(token.tagName, ns, token.attrs);\n    p._adoptNodes(furthestBlock, newElement);\n    p.treeAdapter.appendChild(furthestBlock, newElement);\n    p.activeFormattingElements.insertElementAfterBookmark(newElement, token);\n    p.activeFormattingElements.removeEntry(formattingElementEntry);\n    p.openElements.remove(formattingElementEntry.element);\n    p.openElements.insertAfter(furthestBlock, newElement, token.tagID);\n}\n//Algorithm entry point\nfunction callAdoptionAgency(p, token) {\n    for (let i = 0; i < AA_OUTER_LOOP_ITER; i++) {\n        const formattingElementEntry = aaObtainFormattingElementEntry(p, token);\n        if (!formattingElementEntry) {\n            break;\n        }\n        const furthestBlock = aaObtainFurthestBlock(p, formattingElementEntry);\n        if (!furthestBlock) {\n            break;\n        }\n        p.activeFormattingElements.bookmark = formattingElementEntry;\n        const lastElement = aaInnerLoop(p, furthestBlock, formattingElementEntry.element);\n        const commonAncestor = p.openElements.getCommonAncestor(formattingElementEntry.element);\n        p.treeAdapter.detachNode(lastElement);\n        if (commonAncestor)\n            aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement);\n        aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry);\n    }\n}\n//Generic token handlers\n//------------------------------------------------------------------\nfunction appendComment(p, token) {\n    p._appendCommentNode(token, p.openElements.currentTmplContentOrNode);\n}\nfunction appendCommentToRootHtmlElement(p, token) {\n    p._appendCommentNode(token, p.openElements.items[0]);\n}\nfunction appendCommentToDocument(p, token) {\n    p._appendCommentNode(token, p.document);\n}\nfunction stopParsing(p, token) {\n    p.stopped = true;\n    // NOTE: Set end locations for elements that remain on the open element stack.\n    if (token.location) {\n        // NOTE: If we are not in a fragment, `html` and `body` will stay on the stack.\n        // This is a problem, as we might overwrite their end position here.\n        const target = p.fragmentContext ? 0 : 2;\n        for (let i = p.openElements.stackTop; i >= target; i--) {\n            p._setEndLocation(p.openElements.items[i], token);\n        }\n        // Handle `html` and `body`\n        if (!p.fragmentContext && p.openElements.stackTop >= 0) {\n            const htmlElement = p.openElements.items[0];\n            const htmlLocation = p.treeAdapter.getNodeSourceCodeLocation(htmlElement);\n            if (htmlLocation && !htmlLocation.endTag) {\n                p._setEndLocation(htmlElement, token);\n                if (p.openElements.stackTop >= 1) {\n                    const bodyElement = p.openElements.items[1];\n                    const bodyLocation = p.treeAdapter.getNodeSourceCodeLocation(bodyElement);\n                    if (bodyLocation && !bodyLocation.endTag) {\n                        p._setEndLocation(bodyElement, token);\n                    }\n                }\n            }\n        }\n    }\n}\n// The \"initial\" insertion mode\n//------------------------------------------------------------------\nfunction doctypeInInitialMode(p, token) {\n    p._setDocumentType(token);\n    const mode = token.forceQuirks ? DOCUMENT_MODE.QUIRKS : doctype.getDocumentMode(token);\n    if (!doctype.isConforming(token)) {\n        p._err(token, ERR.nonConformingDoctype);\n    }\n    p.treeAdapter.setDocumentMode(p.document, mode);\n    p.insertionMode = InsertionMode.BEFORE_HTML;\n}\nfunction tokenInInitialMode(p, token) {\n    p._err(token, ERR.missingDoctype, true);\n    p.treeAdapter.setDocumentMode(p.document, DOCUMENT_MODE.QUIRKS);\n    p.insertionMode = InsertionMode.BEFORE_HTML;\n    p._processToken(token);\n}\n// The \"before html\" insertion mode\n//------------------------------------------------------------------\nfunction startTagBeforeHtml(p, token) {\n    if (token.tagID === $.HTML) {\n        p._insertElement(token, NS.HTML);\n        p.insertionMode = InsertionMode.BEFORE_HEAD;\n    }\n    else {\n        tokenBeforeHtml(p, token);\n    }\n}\nfunction endTagBeforeHtml(p, token) {\n    const tn = token.tagID;\n    if (tn === $.HTML || tn === $.HEAD || tn === $.BODY || tn === $.BR) {\n        tokenBeforeHtml(p, token);\n    }\n}\nfunction tokenBeforeHtml(p, token) {\n    p._insertFakeRootElement();\n    p.insertionMode = InsertionMode.BEFORE_HEAD;\n    p._processToken(token);\n}\n// The \"before head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagBeforeHead(p, token) {\n    switch (token.tagID) {\n        case $.HTML: {\n            startTagInBody(p, token);\n            break;\n        }\n        case $.HEAD: {\n            p._insertElement(token, NS.HTML);\n            p.headElement = p.openElements.current;\n            p.insertionMode = InsertionMode.IN_HEAD;\n            break;\n        }\n        default: {\n            tokenBeforeHead(p, token);\n        }\n    }\n}\nfunction endTagBeforeHead(p, token) {\n    const tn = token.tagID;\n    if (tn === $.HEAD || tn === $.BODY || tn === $.HTML || tn === $.BR) {\n        tokenBeforeHead(p, token);\n    }\n    else {\n        p._err(token, ERR.endTagWithoutMatchingOpenElement);\n    }\n}\nfunction tokenBeforeHead(p, token) {\n    p._insertFakeElement(TN.HEAD, $.HEAD);\n    p.headElement = p.openElements.current;\n    p.insertionMode = InsertionMode.IN_HEAD;\n    p._processToken(token);\n}\n// The \"in head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInHead(p, token) {\n    switch (token.tagID) {\n        case $.HTML: {\n            startTagInBody(p, token);\n            break;\n        }\n        case $.BASE:\n        case $.BASEFONT:\n        case $.BGSOUND:\n        case $.LINK:\n        case $.META: {\n            p._appendElement(token, NS.HTML);\n            token.ackSelfClosing = true;\n            break;\n        }\n        case $.TITLE: {\n            p._switchToTextParsing(token, TokenizerMode.RCDATA);\n            break;\n        }\n        case $.NOSCRIPT: {\n            if (p.options.scriptingEnabled) {\n                p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n            }\n            else {\n                p._insertElement(token, NS.HTML);\n                p.insertionMode = InsertionMode.IN_HEAD_NO_SCRIPT;\n            }\n            break;\n        }\n        case $.NOFRAMES:\n        case $.STYLE: {\n            p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n            break;\n        }\n        case $.SCRIPT: {\n            p._switchToTextParsing(token, TokenizerMode.SCRIPT_DATA);\n            break;\n        }\n        case $.TEMPLATE: {\n            p._insertTemplate(token);\n            p.activeFormattingElements.insertMarker();\n            p.framesetOk = false;\n            p.insertionMode = InsertionMode.IN_TEMPLATE;\n            p.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);\n            break;\n        }\n        case $.HEAD: {\n            p._err(token, ERR.misplacedStartTagForHeadElement);\n            break;\n        }\n        default: {\n            tokenInHead(p, token);\n        }\n    }\n}\nfunction endTagInHead(p, token) {\n    switch (token.tagID) {\n        case $.HEAD: {\n            p.openElements.pop();\n            p.insertionMode = InsertionMode.AFTER_HEAD;\n            break;\n        }\n        case $.BODY:\n        case $.BR:\n        case $.HTML: {\n            tokenInHead(p, token);\n            break;\n        }\n        case $.TEMPLATE: {\n            templateEndTagInHead(p, token);\n            break;\n        }\n        default: {\n            p._err(token, ERR.endTagWithoutMatchingOpenElement);\n        }\n    }\n}\nfunction templateEndTagInHead(p, token) {\n    if (p.openElements.tmplCount > 0) {\n        p.openElements.generateImpliedEndTagsThoroughly();\n        if (p.openElements.currentTagId !== $.TEMPLATE) {\n            p._err(token, ERR.closingOfElementWithOpenChildElements);\n        }\n        p.openElements.popUntilTagNamePopped($.TEMPLATE);\n        p.activeFormattingElements.clearToLastMarker();\n        p.tmplInsertionModeStack.shift();\n        p._resetInsertionMode();\n    }\n    else {\n        p._err(token, ERR.endTagWithoutMatchingOpenElement);\n    }\n}\nfunction tokenInHead(p, token) {\n    p.openElements.pop();\n    p.insertionMode = InsertionMode.AFTER_HEAD;\n    p._processToken(token);\n}\n// The \"in head no script\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInHeadNoScript(p, token) {\n    switch (token.tagID) {\n        case $.HTML: {\n            startTagInBody(p, token);\n            break;\n        }\n        case $.BASEFONT:\n        case $.BGSOUND:\n        case $.HEAD:\n        case $.LINK:\n        case $.META:\n        case $.NOFRAMES:\n        case $.STYLE: {\n            startTagInHead(p, token);\n            break;\n        }\n        case $.NOSCRIPT: {\n            p._err(token, ERR.nestedNoscriptInHead);\n            break;\n        }\n        default: {\n            tokenInHeadNoScript(p, token);\n        }\n    }\n}\nfunction endTagInHeadNoScript(p, token) {\n    switch (token.tagID) {\n        case $.NOSCRIPT: {\n            p.openElements.pop();\n            p.insertionMode = InsertionMode.IN_HEAD;\n            break;\n        }\n        case $.BR: {\n            tokenInHeadNoScript(p, token);\n            break;\n        }\n        default: {\n            p._err(token, ERR.endTagWithoutMatchingOpenElement);\n        }\n    }\n}\nfunction tokenInHeadNoScript(p, token) {\n    const errCode = token.type === TokenType.EOF ? ERR.openElementsLeftAfterEof : ERR.disallowedContentInNoscriptInHead;\n    p._err(token, errCode);\n    p.openElements.pop();\n    p.insertionMode = InsertionMode.IN_HEAD;\n    p._processToken(token);\n}\n// The \"after head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterHead(p, token) {\n    switch (token.tagID) {\n        case $.HTML: {\n            startTagInBody(p, token);\n            break;\n        }\n        case $.BODY: {\n            p._insertElement(token, NS.HTML);\n            p.framesetOk = false;\n            p.insertionMode = InsertionMode.IN_BODY;\n            break;\n        }\n        case $.FRAMESET: {\n            p._insertElement(token, NS.HTML);\n            p.insertionMode = InsertionMode.IN_FRAMESET;\n            break;\n        }\n        case $.BASE:\n        case $.BASEFONT:\n        case $.BGSOUND:\n        case $.LINK:\n        case $.META:\n        case $.NOFRAMES:\n        case $.SCRIPT:\n        case $.STYLE:\n        case $.TEMPLATE:\n        case $.TITLE: {\n            p._err(token, ERR.abandonedHeadElementChild);\n            p.openElements.push(p.headElement, $.HEAD);\n            startTagInHead(p, token);\n            p.openElements.remove(p.headElement);\n            break;\n        }\n        case $.HEAD: {\n            p._err(token, ERR.misplacedStartTagForHeadElement);\n            break;\n        }\n        default: {\n            tokenAfterHead(p, token);\n        }\n    }\n}\nfunction endTagAfterHead(p, token) {\n    switch (token.tagID) {\n        case $.BODY:\n        case $.HTML:\n        case $.BR: {\n            tokenAfterHead(p, token);\n            break;\n        }\n        case $.TEMPLATE: {\n            templateEndTagInHead(p, token);\n            break;\n        }\n        default: {\n            p._err(token, ERR.endTagWithoutMatchingOpenElement);\n        }\n    }\n}\nfunction tokenAfterHead(p, token) {\n    p._insertFakeElement(TN.BODY, $.BODY);\n    p.insertionMode = InsertionMode.IN_BODY;\n    modeInBody(p, token);\n}\n// The \"in body\" insertion mode\n//------------------------------------------------------------------\nfunction modeInBody(p, token) {\n    switch (token.type) {\n        case TokenType.CHARACTER: {\n            characterInBody(p, token);\n            break;\n        }\n        case TokenType.WHITESPACE_CHARACTER: {\n            whitespaceCharacterInBody(p, token);\n            break;\n        }\n        case TokenType.COMMENT: {\n            appendComment(p, token);\n            break;\n        }\n        case TokenType.START_TAG: {\n            startTagInBody(p, token);\n            break;\n        }\n        case TokenType.END_TAG: {\n            endTagInBody(p, token);\n            break;\n        }\n        case TokenType.EOF: {\n            eofInBody(p, token);\n            break;\n        }\n        default:\n        // Do nothing\n    }\n}\nfunction whitespaceCharacterInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    p._insertCharacters(token);\n}\nfunction characterInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    p._insertCharacters(token);\n    p.framesetOk = false;\n}\nfunction htmlStartTagInBody(p, token) {\n    if (p.openElements.tmplCount === 0) {\n        p.treeAdapter.adoptAttributes(p.openElements.items[0], token.attrs);\n    }\n}\nfunction bodyStartTagInBody(p, token) {\n    const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n    if (bodyElement && p.openElements.tmplCount === 0) {\n        p.framesetOk = false;\n        p.treeAdapter.adoptAttributes(bodyElement, token.attrs);\n    }\n}\nfunction framesetStartTagInBody(p, token) {\n    const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n    if (p.framesetOk && bodyElement) {\n        p.treeAdapter.detachNode(bodyElement);\n        p.openElements.popAllUpToHtmlElement();\n        p._insertElement(token, NS.HTML);\n        p.insertionMode = InsertionMode.IN_FRAMESET;\n    }\n}\nfunction addressStartTagInBody(p, token) {\n    if (p.openElements.hasInButtonScope($.P)) {\n        p._closePElement();\n    }\n    p._insertElement(token, NS.HTML);\n}\nfunction numberedHeaderStartTagInBody(p, token) {\n    if (p.openElements.hasInButtonScope($.P)) {\n        p._closePElement();\n    }\n    if (p.openElements.currentTagId !== undefined && NUMBERED_HEADERS.has(p.openElements.currentTagId)) {\n        p.openElements.pop();\n    }\n    p._insertElement(token, NS.HTML);\n}\nfunction preStartTagInBody(p, token) {\n    if (p.openElements.hasInButtonScope($.P)) {\n        p._closePElement();\n    }\n    p._insertElement(token, NS.HTML);\n    //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move\n    //on to the next one. (Newlines at the start of pre blocks are ignored as an authoring convenience.)\n    p.skipNextNewLine = true;\n    p.framesetOk = false;\n}\nfunction formStartTagInBody(p, token) {\n    const inTemplate = p.openElements.tmplCount > 0;\n    if (!p.formElement || inTemplate) {\n        if (p.openElements.hasInButtonScope($.P)) {\n            p._closePElement();\n        }\n        p._insertElement(token, NS.HTML);\n        if (!inTemplate) {\n            p.formElement = p.openElements.current;\n        }\n    }\n}\nfunction listItemStartTagInBody(p, token) {\n    p.framesetOk = false;\n    const tn = token.tagID;\n    for (let i = p.openElements.stackTop; i >= 0; i--) {\n        const elementId = p.openElements.tagIDs[i];\n        if ((tn === $.LI && elementId === $.LI) ||\n            ((tn === $.DD || tn === $.DT) && (elementId === $.DD || elementId === $.DT))) {\n            p.openElements.generateImpliedEndTagsWithExclusion(elementId);\n            p.openElements.popUntilTagNamePopped(elementId);\n            break;\n        }\n        if (elementId !== $.ADDRESS &&\n            elementId !== $.DIV &&\n            elementId !== $.P &&\n            p._isSpecialElement(p.openElements.items[i], elementId)) {\n            break;\n        }\n    }\n    if (p.openElements.hasInButtonScope($.P)) {\n        p._closePElement();\n    }\n    p._insertElement(token, NS.HTML);\n}\nfunction plaintextStartTagInBody(p, token) {\n    if (p.openElements.hasInButtonScope($.P)) {\n        p._closePElement();\n    }\n    p._insertElement(token, NS.HTML);\n    p.tokenizer.state = TokenizerMode.PLAINTEXT;\n}\nfunction buttonStartTagInBody(p, token) {\n    if (p.openElements.hasInScope($.BUTTON)) {\n        p.openElements.generateImpliedEndTags();\n        p.openElements.popUntilTagNamePopped($.BUTTON);\n    }\n    p._reconstructActiveFormattingElements();\n    p._insertElement(token, NS.HTML);\n    p.framesetOk = false;\n}\nfunction aStartTagInBody(p, token) {\n    const activeElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(TN.A);\n    if (activeElementEntry) {\n        callAdoptionAgency(p, token);\n        p.openElements.remove(activeElementEntry.element);\n        p.activeFormattingElements.removeEntry(activeElementEntry);\n    }\n    p._reconstructActiveFormattingElements();\n    p._insertElement(token, NS.HTML);\n    p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction bStartTagInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    p._insertElement(token, NS.HTML);\n    p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction nobrStartTagInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    if (p.openElements.hasInScope($.NOBR)) {\n        callAdoptionAgency(p, token);\n        p._reconstructActiveFormattingElements();\n    }\n    p._insertElement(token, NS.HTML);\n    p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction appletStartTagInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    p._insertElement(token, NS.HTML);\n    p.activeFormattingElements.insertMarker();\n    p.framesetOk = false;\n}\nfunction tableStartTagInBody(p, token) {\n    if (p.treeAdapter.getDocumentMode(p.document) !== DOCUMENT_MODE.QUIRKS && p.openElements.hasInButtonScope($.P)) {\n        p._closePElement();\n    }\n    p._insertElement(token, NS.HTML);\n    p.framesetOk = false;\n    p.insertionMode = InsertionMode.IN_TABLE;\n}\nfunction areaStartTagInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    p._appendElement(token, NS.HTML);\n    p.framesetOk = false;\n    token.ackSelfClosing = true;\n}\nfunction isHiddenInput(token) {\n    const inputType = getTokenAttr(token, ATTRS.TYPE);\n    return inputType != null && inputType.toLowerCase() === HIDDEN_INPUT_TYPE;\n}\nfunction inputStartTagInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    p._appendElement(token, NS.HTML);\n    if (!isHiddenInput(token)) {\n        p.framesetOk = false;\n    }\n    token.ackSelfClosing = true;\n}\nfunction paramStartTagInBody(p, token) {\n    p._appendElement(token, NS.HTML);\n    token.ackSelfClosing = true;\n}\nfunction hrStartTagInBody(p, token) {\n    if (p.openElements.hasInButtonScope($.P)) {\n        p._closePElement();\n    }\n    p._appendElement(token, NS.HTML);\n    p.framesetOk = false;\n    token.ackSelfClosing = true;\n}\nfunction imageStartTagInBody(p, token) {\n    token.tagName = TN.IMG;\n    token.tagID = $.IMG;\n    areaStartTagInBody(p, token);\n}\nfunction textareaStartTagInBody(p, token) {\n    p._insertElement(token, NS.HTML);\n    //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move\n    //on to the next one. (Newlines at the start of textarea elements are ignored as an authoring convenience.)\n    p.skipNextNewLine = true;\n    p.tokenizer.state = TokenizerMode.RCDATA;\n    p.originalInsertionMode = p.insertionMode;\n    p.framesetOk = false;\n    p.insertionMode = InsertionMode.TEXT;\n}\nfunction xmpStartTagInBody(p, token) {\n    if (p.openElements.hasInButtonScope($.P)) {\n        p._closePElement();\n    }\n    p._reconstructActiveFormattingElements();\n    p.framesetOk = false;\n    p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\nfunction iframeStartTagInBody(p, token) {\n    p.framesetOk = false;\n    p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\n//NOTE: here we assume that we always act as a user agent with enabled plugins/frames, so we parse\n//<noembed>/<noframes> as rawtext.\nfunction rawTextStartTagInBody(p, token) {\n    p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\nfunction selectStartTagInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    p._insertElement(token, NS.HTML);\n    p.framesetOk = false;\n    p.insertionMode =\n        p.insertionMode === InsertionMode.IN_TABLE ||\n            p.insertionMode === InsertionMode.IN_CAPTION ||\n            p.insertionMode === InsertionMode.IN_TABLE_BODY ||\n            p.insertionMode === InsertionMode.IN_ROW ||\n            p.insertionMode === InsertionMode.IN_CELL\n            ? InsertionMode.IN_SELECT_IN_TABLE\n            : InsertionMode.IN_SELECT;\n}\nfunction optgroupStartTagInBody(p, token) {\n    if (p.openElements.currentTagId === $.OPTION) {\n        p.openElements.pop();\n    }\n    p._reconstructActiveFormattingElements();\n    p._insertElement(token, NS.HTML);\n}\nfunction rbStartTagInBody(p, token) {\n    if (p.openElements.hasInScope($.RUBY)) {\n        p.openElements.generateImpliedEndTags();\n    }\n    p._insertElement(token, NS.HTML);\n}\nfunction rtStartTagInBody(p, token) {\n    if (p.openElements.hasInScope($.RUBY)) {\n        p.openElements.generateImpliedEndTagsWithExclusion($.RTC);\n    }\n    p._insertElement(token, NS.HTML);\n}\nfunction mathStartTagInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    foreignContent.adjustTokenMathMLAttrs(token);\n    foreignContent.adjustTokenXMLAttrs(token);\n    if (token.selfClosing) {\n        p._appendElement(token, NS.MATHML);\n    }\n    else {\n        p._insertElement(token, NS.MATHML);\n    }\n    token.ackSelfClosing = true;\n}\nfunction svgStartTagInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    foreignContent.adjustTokenSVGAttrs(token);\n    foreignContent.adjustTokenXMLAttrs(token);\n    if (token.selfClosing) {\n        p._appendElement(token, NS.SVG);\n    }\n    else {\n        p._insertElement(token, NS.SVG);\n    }\n    token.ackSelfClosing = true;\n}\nfunction genericStartTagInBody(p, token) {\n    p._reconstructActiveFormattingElements();\n    p._insertElement(token, NS.HTML);\n}\nfunction startTagInBody(p, token) {\n    switch (token.tagID) {\n        case $.I:\n        case $.S:\n        case $.B:\n        case $.U:\n        case $.EM:\n        case $.TT:\n        case $.BIG:\n        case $.CODE:\n        case $.FONT:\n        case $.SMALL:\n        case $.STRIKE:\n        case $.STRONG: {\n            bStartTagInBody(p, token);\n            break;\n        }\n        case $.A: {\n            aStartTagInBody(p, token);\n            break;\n        }\n        case $.H1:\n        case $.H2:\n        case $.H3:\n        case $.H4:\n        case $.H5:\n        case $.H6: {\n            numberedHeaderStartTagInBody(p, token);\n            break;\n        }\n        case $.P:\n        case $.DL:\n        case $.OL:\n        case $.UL:\n        case $.DIV:\n        case $.DIR:\n        case $.NAV:\n        case $.MAIN:\n        case $.MENU:\n        case $.ASIDE:\n        case $.CENTER:\n        case $.FIGURE:\n        case $.FOOTER:\n        case $.HEADER:\n        case $.HGROUP:\n        case $.DIALOG:\n        case $.DETAILS:\n        case $.ADDRESS:\n        case $.ARTICLE:\n        case $.SEARCH:\n        case $.SECTION:\n        case $.SUMMARY:\n        case $.FIELDSET:\n        case $.BLOCKQUOTE:\n        case $.FIGCAPTION: {\n            addressStartTagInBody(p, token);\n            break;\n        }\n        case $.LI:\n        case $.DD:\n        case $.DT: {\n            listItemStartTagInBody(p, token);\n            break;\n        }\n        case $.BR:\n        case $.IMG:\n        case $.WBR:\n        case $.AREA:\n        case $.EMBED:\n        case $.KEYGEN: {\n            areaStartTagInBody(p, token);\n            break;\n        }\n        case $.HR: {\n            hrStartTagInBody(p, token);\n            break;\n        }\n        case $.RB:\n        case $.RTC: {\n            rbStartTagInBody(p, token);\n            break;\n        }\n        case $.RT:\n        case $.RP: {\n            rtStartTagInBody(p, token);\n            break;\n        }\n        case $.PRE:\n        case $.LISTING: {\n            preStartTagInBody(p, token);\n            break;\n        }\n        case $.XMP: {\n            xmpStartTagInBody(p, token);\n            break;\n        }\n        case $.SVG: {\n            svgStartTagInBody(p, token);\n            break;\n        }\n        case $.HTML: {\n            htmlStartTagInBody(p, token);\n            break;\n        }\n        case $.BASE:\n        case $.LINK:\n        case $.META:\n        case $.STYLE:\n        case $.TITLE:\n        case $.SCRIPT:\n        case $.BGSOUND:\n        case $.BASEFONT:\n        case $.TEMPLATE: {\n            startTagInHead(p, token);\n            break;\n        }\n        case $.BODY: {\n            bodyStartTagInBody(p, token);\n            break;\n        }\n        case $.FORM: {\n            formStartTagInBody(p, token);\n            break;\n        }\n        case $.NOBR: {\n            nobrStartTagInBody(p, token);\n            break;\n        }\n        case $.MATH: {\n            mathStartTagInBody(p, token);\n            break;\n        }\n        case $.TABLE: {\n            tableStartTagInBody(p, token);\n            break;\n        }\n        case $.INPUT: {\n            inputStartTagInBody(p, token);\n            break;\n        }\n        case $.PARAM:\n        case $.TRACK:\n        case $.SOURCE: {\n            paramStartTagInBody(p, token);\n            break;\n        }\n        case $.IMAGE: {\n            imageStartTagInBody(p, token);\n            break;\n        }\n        case $.BUTTON: {\n            buttonStartTagInBody(p, token);\n            break;\n        }\n        case $.APPLET:\n        case $.OBJECT:\n        case $.MARQUEE: {\n            appletStartTagInBody(p, token);\n            break;\n        }\n        case $.IFRAME: {\n            iframeStartTagInBody(p, token);\n            break;\n        }\n        case $.SELECT: {\n            selectStartTagInBody(p, token);\n            break;\n        }\n        case $.OPTION:\n        case $.OPTGROUP: {\n            optgroupStartTagInBody(p, token);\n            break;\n        }\n        case $.NOEMBED:\n        case $.NOFRAMES: {\n            rawTextStartTagInBody(p, token);\n            break;\n        }\n        case $.FRAMESET: {\n            framesetStartTagInBody(p, token);\n            break;\n        }\n        case $.TEXTAREA: {\n            textareaStartTagInBody(p, token);\n            break;\n        }\n        case $.NOSCRIPT: {\n            if (p.options.scriptingEnabled) {\n                rawTextStartTagInBody(p, token);\n            }\n            else {\n                genericStartTagInBody(p, token);\n            }\n            break;\n        }\n        case $.PLAINTEXT: {\n            plaintextStartTagInBody(p, token);\n            break;\n        }\n        case $.COL:\n        case $.TH:\n        case $.TD:\n        case $.TR:\n        case $.HEAD:\n        case $.FRAME:\n        case $.TBODY:\n        case $.TFOOT:\n        case $.THEAD:\n        case $.CAPTION:\n        case $.COLGROUP: {\n            // Ignore token\n            break;\n        }\n        default: {\n            genericStartTagInBody(p, token);\n        }\n    }\n}\nfunction bodyEndTagInBody(p, token) {\n    if (p.openElements.hasInScope($.BODY)) {\n        p.insertionMode = InsertionMode.AFTER_BODY;\n        //NOTE: <body> is never popped from the stack, so we need to updated\n        //the end location explicitly.\n        if (p.options.sourceCodeLocationInfo) {\n            const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n            if (bodyElement) {\n                p._setEndLocation(bodyElement, token);\n            }\n        }\n    }\n}\nfunction htmlEndTagInBody(p, token) {\n    if (p.openElements.hasInScope($.BODY)) {\n        p.insertionMode = InsertionMode.AFTER_BODY;\n        endTagAfterBody(p, token);\n    }\n}\nfunction addressEndTagInBody(p, token) {\n    const tn = token.tagID;\n    if (p.openElements.hasInScope(tn)) {\n        p.openElements.generateImpliedEndTags();\n        p.openElements.popUntilTagNamePopped(tn);\n    }\n}\nfunction formEndTagInBody(p) {\n    const inTemplate = p.openElements.tmplCount > 0;\n    const { formElement } = p;\n    if (!inTemplate) {\n        p.formElement = null;\n    }\n    if ((formElement || inTemplate) && p.openElements.hasInScope($.FORM)) {\n        p.openElements.generateImpliedEndTags();\n        if (inTemplate) {\n            p.openElements.popUntilTagNamePopped($.FORM);\n        }\n        else if (formElement) {\n            p.openElements.remove(formElement);\n        }\n    }\n}\nfunction pEndTagInBody(p) {\n    if (!p.openElements.hasInButtonScope($.P)) {\n        p._insertFakeElement(TN.P, $.P);\n    }\n    p._closePElement();\n}\nfunction liEndTagInBody(p) {\n    if (p.openElements.hasInListItemScope($.LI)) {\n        p.openElements.generateImpliedEndTagsWithExclusion($.LI);\n        p.openElements.popUntilTagNamePopped($.LI);\n    }\n}\nfunction ddEndTagInBody(p, token) {\n    const tn = token.tagID;\n    if (p.openElements.hasInScope(tn)) {\n        p.openElements.generateImpliedEndTagsWithExclusion(tn);\n        p.openElements.popUntilTagNamePopped(tn);\n    }\n}\nfunction numberedHeaderEndTagInBody(p) {\n    if (p.openElements.hasNumberedHeaderInScope()) {\n        p.openElements.generateImpliedEndTags();\n        p.openElements.popUntilNumberedHeaderPopped();\n    }\n}\nfunction appletEndTagInBody(p, token) {\n    const tn = token.tagID;\n    if (p.openElements.hasInScope(tn)) {\n        p.openElements.generateImpliedEndTags();\n        p.openElements.popUntilTagNamePopped(tn);\n        p.activeFormattingElements.clearToLastMarker();\n    }\n}\nfunction brEndTagInBody(p) {\n    p._reconstructActiveFormattingElements();\n    p._insertFakeElement(TN.BR, $.BR);\n    p.openElements.pop();\n    p.framesetOk = false;\n}\nfunction genericEndTagInBody(p, token) {\n    const tn = token.tagName;\n    const tid = token.tagID;\n    for (let i = p.openElements.stackTop; i > 0; i--) {\n        const element = p.openElements.items[i];\n        const elementId = p.openElements.tagIDs[i];\n        // Compare the tag name here, as the tag might not be a known tag with an ID.\n        if (tid === elementId && (tid !== $.UNKNOWN || p.treeAdapter.getTagName(element) === tn)) {\n            p.openElements.generateImpliedEndTagsWithExclusion(tid);\n            if (p.openElements.stackTop >= i)\n                p.openElements.shortenToLength(i);\n            break;\n        }\n        if (p._isSpecialElement(element, elementId)) {\n            break;\n        }\n    }\n}\nfunction endTagInBody(p, token) {\n    switch (token.tagID) {\n        case $.A:\n        case $.B:\n        case $.I:\n        case $.S:\n        case $.U:\n        case $.EM:\n        case $.TT:\n        case $.BIG:\n        case $.CODE:\n        case $.FONT:\n        case $.NOBR:\n        case $.SMALL:\n        case $.STRIKE:\n        case $.STRONG: {\n            callAdoptionAgency(p, token);\n            break;\n        }\n        case $.P: {\n            pEndTagInBody(p);\n            break;\n        }\n        case $.DL:\n        case $.UL:\n        case $.OL:\n        case $.DIR:\n        case $.DIV:\n        case $.NAV:\n        case $.PRE:\n        case $.MAIN:\n        case $.MENU:\n        case $.ASIDE:\n        case $.BUTTON:\n        case $.CENTER:\n        case $.FIGURE:\n        case $.FOOTER:\n        case $.HEADER:\n        case $.HGROUP:\n        case $.DIALOG:\n        case $.ADDRESS:\n        case $.ARTICLE:\n        case $.DETAILS:\n        case $.SEARCH:\n        case $.SECTION:\n        case $.SUMMARY:\n        case $.LISTING:\n        case $.FIELDSET:\n        case $.BLOCKQUOTE:\n        case $.FIGCAPTION: {\n            addressEndTagInBody(p, token);\n            break;\n        }\n        case $.LI: {\n            liEndTagInBody(p);\n            break;\n        }\n        case $.DD:\n        case $.DT: {\n            ddEndTagInBody(p, token);\n            break;\n        }\n        case $.H1:\n        case $.H2:\n        case $.H3:\n        case $.H4:\n        case $.H5:\n        case $.H6: {\n            numberedHeaderEndTagInBody(p);\n            break;\n        }\n        case $.BR: {\n            brEndTagInBody(p);\n            break;\n        }\n        case $.BODY: {\n            bodyEndTagInBody(p, token);\n            break;\n        }\n        case $.HTML: {\n            htmlEndTagInBody(p, token);\n            break;\n        }\n        case $.FORM: {\n            formEndTagInBody(p);\n            break;\n        }\n        case $.APPLET:\n        case $.OBJECT:\n        case $.MARQUEE: {\n            appletEndTagInBody(p, token);\n            break;\n        }\n        case $.TEMPLATE: {\n            templateEndTagInHead(p, token);\n            break;\n        }\n        default: {\n            genericEndTagInBody(p, token);\n        }\n    }\n}\nfunction eofInBody(p, token) {\n    if (p.tmplInsertionModeStack.length > 0) {\n        eofInTemplate(p, token);\n    }\n    else {\n        stopParsing(p, token);\n    }\n}\n// The \"text\" insertion mode\n//------------------------------------------------------------------\nfunction endTagInText(p, token) {\n    var _a;\n    if (token.tagID === $.SCRIPT) {\n        (_a = p.scriptHandler) === null || _a === void 0 ? void 0 : _a.call(p, p.openElements.current);\n    }\n    p.openElements.pop();\n    p.insertionMode = p.originalInsertionMode;\n}\nfunction eofInText(p, token) {\n    p._err(token, ERR.eofInElementThatCanContainOnlyText);\n    p.openElements.pop();\n    p.insertionMode = p.originalInsertionMode;\n    p.onEof(token);\n}\n// The \"in table\" insertion mode\n//------------------------------------------------------------------\nfunction characterInTable(p, token) {\n    if (p.openElements.currentTagId !== undefined && TABLE_STRUCTURE_TAGS.has(p.openElements.currentTagId)) {\n        p.pendingCharacterTokens.length = 0;\n        p.hasNonWhitespacePendingCharacterToken = false;\n        p.originalInsertionMode = p.insertionMode;\n        p.insertionMode = InsertionMode.IN_TABLE_TEXT;\n        switch (token.type) {\n            case TokenType.CHARACTER: {\n                characterInTableText(p, token);\n                break;\n            }\n            case TokenType.WHITESPACE_CHARACTER: {\n                whitespaceCharacterInTableText(p, token);\n                break;\n            }\n            // Ignore null\n        }\n    }\n    else {\n        tokenInTable(p, token);\n    }\n}\nfunction captionStartTagInTable(p, token) {\n    p.openElements.clearBackToTableContext();\n    p.activeFormattingElements.insertMarker();\n    p._insertElement(token, NS.HTML);\n    p.insertionMode = InsertionMode.IN_CAPTION;\n}\nfunction colgroupStartTagInTable(p, token) {\n    p.openElements.clearBackToTableContext();\n    p._insertElement(token, NS.HTML);\n    p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n}\nfunction colStartTagInTable(p, token) {\n    p.openElements.clearBackToTableContext();\n    p._insertFakeElement(TN.COLGROUP, $.COLGROUP);\n    p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n    startTagInColumnGroup(p, token);\n}\nfunction tbodyStartTagInTable(p, token) {\n    p.openElements.clearBackToTableContext();\n    p._insertElement(token, NS.HTML);\n    p.insertionMode = InsertionMode.IN_TABLE_BODY;\n}\nfunction tdStartTagInTable(p, token) {\n    p.openElements.clearBackToTableContext();\n    p._insertFakeElement(TN.TBODY, $.TBODY);\n    p.insertionMode = InsertionMode.IN_TABLE_BODY;\n    startTagInTableBody(p, token);\n}\nfunction tableStartTagInTable(p, token) {\n    if (p.openElements.hasInTableScope($.TABLE)) {\n        p.openElements.popUntilTagNamePopped($.TABLE);\n        p._resetInsertionMode();\n        p._processStartTag(token);\n    }\n}\nfunction inputStartTagInTable(p, token) {\n    if (isHiddenInput(token)) {\n        p._appendElement(token, NS.HTML);\n    }\n    else {\n        tokenInTable(p, token);\n    }\n    token.ackSelfClosing = true;\n}\nfunction formStartTagInTable(p, token) {\n    if (!p.formElement && p.openElements.tmplCount === 0) {\n        p._insertElement(token, NS.HTML);\n        p.formElement = p.openElements.current;\n        p.openElements.pop();\n    }\n}\nfunction startTagInTable(p, token) {\n    switch (token.tagID) {\n        case $.TD:\n        case $.TH:\n        case $.TR: {\n            tdStartTagInTable(p, token);\n            break;\n        }\n        case $.STYLE:\n        case $.SCRIPT:\n        case $.TEMPLATE: {\n            startTagInHead(p, token);\n            break;\n        }\n        case $.COL: {\n            colStartTagInTable(p, token);\n            break;\n        }\n        case $.FORM: {\n            formStartTagInTable(p, token);\n            break;\n        }\n        case $.TABLE: {\n            tableStartTagInTable(p, token);\n            break;\n        }\n        case $.TBODY:\n        case $.TFOOT:\n        case $.THEAD: {\n            tbodyStartTagInTable(p, token);\n            break;\n        }\n        case $.INPUT: {\n            inputStartTagInTable(p, token);\n            break;\n        }\n        case $.CAPTION: {\n            captionStartTagInTable(p, token);\n            break;\n        }\n        case $.COLGROUP: {\n            colgroupStartTagInTable(p, token);\n            break;\n        }\n        default: {\n            tokenInTable(p, token);\n        }\n    }\n}\nfunction endTagInTable(p, token) {\n    switch (token.tagID) {\n        case $.TABLE: {\n            if (p.openElements.hasInTableScope($.TABLE)) {\n                p.openElements.popUntilTagNamePopped($.TABLE);\n                p._resetInsertionMode();\n            }\n            break;\n        }\n        case $.TEMPLATE: {\n            templateEndTagInHead(p, token);\n            break;\n        }\n        case $.BODY:\n        case $.CAPTION:\n        case $.COL:\n        case $.COLGROUP:\n        case $.HTML:\n        case $.TBODY:\n        case $.TD:\n        case $.TFOOT:\n        case $.TH:\n        case $.THEAD:\n        case $.TR: {\n            // Ignore token\n            break;\n        }\n        default: {\n            tokenInTable(p, token);\n        }\n    }\n}\nfunction tokenInTable(p, token) {\n    const savedFosterParentingState = p.fosterParentingEnabled;\n    p.fosterParentingEnabled = true;\n    // Process token in `In Body` mode\n    modeInBody(p, token);\n    p.fosterParentingEnabled = savedFosterParentingState;\n}\n// The \"in table text\" insertion mode\n//------------------------------------------------------------------\nfunction whitespaceCharacterInTableText(p, token) {\n    p.pendingCharacterTokens.push(token);\n}\nfunction characterInTableText(p, token) {\n    p.pendingCharacterTokens.push(token);\n    p.hasNonWhitespacePendingCharacterToken = true;\n}\nfunction tokenInTableText(p, token) {\n    let i = 0;\n    if (p.hasNonWhitespacePendingCharacterToken) {\n        for (; i < p.pendingCharacterTokens.length; i++) {\n            tokenInTable(p, p.pendingCharacterTokens[i]);\n        }\n    }\n    else {\n        for (; i < p.pendingCharacterTokens.length; i++) {\n            p._insertCharacters(p.pendingCharacterTokens[i]);\n        }\n    }\n    p.insertionMode = p.originalInsertionMode;\n    p._processToken(token);\n}\n// The \"in caption\" insertion mode\n//------------------------------------------------------------------\nconst TABLE_VOID_ELEMENTS = new Set([$.CAPTION, $.COL, $.COLGROUP, $.TBODY, $.TD, $.TFOOT, $.TH, $.THEAD, $.TR]);\nfunction startTagInCaption(p, token) {\n    const tn = token.tagID;\n    if (TABLE_VOID_ELEMENTS.has(tn)) {\n        if (p.openElements.hasInTableScope($.CAPTION)) {\n            p.openElements.generateImpliedEndTags();\n            p.openElements.popUntilTagNamePopped($.CAPTION);\n            p.activeFormattingElements.clearToLastMarker();\n            p.insertionMode = InsertionMode.IN_TABLE;\n            startTagInTable(p, token);\n        }\n    }\n    else {\n        startTagInBody(p, token);\n    }\n}\nfunction endTagInCaption(p, token) {\n    const tn = token.tagID;\n    switch (tn) {\n        case $.CAPTION:\n        case $.TABLE: {\n            if (p.openElements.hasInTableScope($.CAPTION)) {\n                p.openElements.generateImpliedEndTags();\n                p.openElements.popUntilTagNamePopped($.CAPTION);\n                p.activeFormattingElements.clearToLastMarker();\n                p.insertionMode = InsertionMode.IN_TABLE;\n                if (tn === $.TABLE) {\n                    endTagInTable(p, token);\n                }\n            }\n            break;\n        }\n        case $.BODY:\n        case $.COL:\n        case $.COLGROUP:\n        case $.HTML:\n        case $.TBODY:\n        case $.TD:\n        case $.TFOOT:\n        case $.TH:\n        case $.THEAD:\n        case $.TR: {\n            // Ignore token\n            break;\n        }\n        default: {\n            endTagInBody(p, token);\n        }\n    }\n}\n// The \"in column group\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInColumnGroup(p, token) {\n    switch (token.tagID) {\n        case $.HTML: {\n            startTagInBody(p, token);\n            break;\n        }\n        case $.COL: {\n            p._appendElement(token, NS.HTML);\n            token.ackSelfClosing = true;\n            break;\n        }\n        case $.TEMPLATE: {\n            startTagInHead(p, token);\n            break;\n        }\n        default: {\n            tokenInColumnGroup(p, token);\n        }\n    }\n}\nfunction endTagInColumnGroup(p, token) {\n    switch (token.tagID) {\n        case $.COLGROUP: {\n            if (p.openElements.currentTagId === $.COLGROUP) {\n                p.openElements.pop();\n                p.insertionMode = InsertionMode.IN_TABLE;\n            }\n            break;\n        }\n        case $.TEMPLATE: {\n            templateEndTagInHead(p, token);\n            break;\n        }\n        case $.COL: {\n            // Ignore token\n            break;\n        }\n        default: {\n            tokenInColumnGroup(p, token);\n        }\n    }\n}\nfunction tokenInColumnGroup(p, token) {\n    if (p.openElements.currentTagId === $.COLGROUP) {\n        p.openElements.pop();\n        p.insertionMode = InsertionMode.IN_TABLE;\n        p._processToken(token);\n    }\n}\n// The \"in table body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInTableBody(p, token) {\n    switch (token.tagID) {\n        case $.TR: {\n            p.openElements.clearBackToTableBodyContext();\n            p._insertElement(token, NS.HTML);\n            p.insertionMode = InsertionMode.IN_ROW;\n            break;\n        }\n        case $.TH:\n        case $.TD: {\n            p.openElements.clearBackToTableBodyContext();\n            p._insertFakeElement(TN.TR, $.TR);\n            p.insertionMode = InsertionMode.IN_ROW;\n            startTagInRow(p, token);\n            break;\n        }\n        case $.CAPTION:\n        case $.COL:\n        case $.COLGROUP:\n        case $.TBODY:\n        case $.TFOOT:\n        case $.THEAD: {\n            if (p.openElements.hasTableBodyContextInTableScope()) {\n                p.openElements.clearBackToTableBodyContext();\n                p.openElements.pop();\n                p.insertionMode = InsertionMode.IN_TABLE;\n                startTagInTable(p, token);\n            }\n            break;\n        }\n        default: {\n            startTagInTable(p, token);\n        }\n    }\n}\nfunction endTagInTableBody(p, token) {\n    const tn = token.tagID;\n    switch (token.tagID) {\n        case $.TBODY:\n        case $.TFOOT:\n        case $.THEAD: {\n            if (p.openElements.hasInTableScope(tn)) {\n                p.openElements.clearBackToTableBodyContext();\n                p.openElements.pop();\n                p.insertionMode = InsertionMode.IN_TABLE;\n            }\n            break;\n        }\n        case $.TABLE: {\n            if (p.openElements.hasTableBodyContextInTableScope()) {\n                p.openElements.clearBackToTableBodyContext();\n                p.openElements.pop();\n                p.insertionMode = InsertionMode.IN_TABLE;\n                endTagInTable(p, token);\n            }\n            break;\n        }\n        case $.BODY:\n        case $.CAPTION:\n        case $.COL:\n        case $.COLGROUP:\n        case $.HTML:\n        case $.TD:\n        case $.TH:\n        case $.TR: {\n            // Ignore token\n            break;\n        }\n        default: {\n            endTagInTable(p, token);\n        }\n    }\n}\n// The \"in row\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInRow(p, token) {\n    switch (token.tagID) {\n        case $.TH:\n        case $.TD: {\n            p.openElements.clearBackToTableRowContext();\n            p._insertElement(token, NS.HTML);\n            p.insertionMode = InsertionMode.IN_CELL;\n            p.activeFormattingElements.insertMarker();\n            break;\n        }\n        case $.CAPTION:\n        case $.COL:\n        case $.COLGROUP:\n        case $.TBODY:\n        case $.TFOOT:\n        case $.THEAD:\n        case $.TR: {\n            if (p.openElements.hasInTableScope($.TR)) {\n                p.openElements.clearBackToTableRowContext();\n                p.openElements.pop();\n                p.insertionMode = InsertionMode.IN_TABLE_BODY;\n                startTagInTableBody(p, token);\n            }\n            break;\n        }\n        default: {\n            startTagInTable(p, token);\n        }\n    }\n}\nfunction endTagInRow(p, token) {\n    switch (token.tagID) {\n        case $.TR: {\n            if (p.openElements.hasInTableScope($.TR)) {\n                p.openElements.clearBackToTableRowContext();\n                p.openElements.pop();\n                p.insertionMode = InsertionMode.IN_TABLE_BODY;\n            }\n            break;\n        }\n        case $.TABLE: {\n            if (p.openElements.hasInTableScope($.TR)) {\n                p.openElements.clearBackToTableRowContext();\n                p.openElements.pop();\n                p.insertionMode = InsertionMode.IN_TABLE_BODY;\n                endTagInTableBody(p, token);\n            }\n            break;\n        }\n        case $.TBODY:\n        case $.TFOOT:\n        case $.THEAD: {\n            if (p.openElements.hasInTableScope(token.tagID) || p.openElements.hasInTableScope($.TR)) {\n                p.openElements.clearBackToTableRowContext();\n                p.openElements.pop();\n                p.insertionMode = InsertionMode.IN_TABLE_BODY;\n                endTagInTableBody(p, token);\n            }\n            break;\n        }\n        case $.BODY:\n        case $.CAPTION:\n        case $.COL:\n        case $.COLGROUP:\n        case $.HTML:\n        case $.TD:\n        case $.TH: {\n            // Ignore end tag\n            break;\n        }\n        default: {\n            endTagInTable(p, token);\n        }\n    }\n}\n// The \"in cell\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInCell(p, token) {\n    const tn = token.tagID;\n    if (TABLE_VOID_ELEMENTS.has(tn)) {\n        if (p.openElements.hasInTableScope($.TD) || p.openElements.hasInTableScope($.TH)) {\n            p._closeTableCell();\n            startTagInRow(p, token);\n        }\n    }\n    else {\n        startTagInBody(p, token);\n    }\n}\nfunction endTagInCell(p, token) {\n    const tn = token.tagID;\n    switch (tn) {\n        case $.TD:\n        case $.TH: {\n            if (p.openElements.hasInTableScope(tn)) {\n                p.openElements.generateImpliedEndTags();\n                p.openElements.popUntilTagNamePopped(tn);\n                p.activeFormattingElements.clearToLastMarker();\n                p.insertionMode = InsertionMode.IN_ROW;\n            }\n            break;\n        }\n        case $.TABLE:\n        case $.TBODY:\n        case $.TFOOT:\n        case $.THEAD:\n        case $.TR: {\n            if (p.openElements.hasInTableScope(tn)) {\n                p._closeTableCell();\n                endTagInRow(p, token);\n            }\n            break;\n        }\n        case $.BODY:\n        case $.CAPTION:\n        case $.COL:\n        case $.COLGROUP:\n        case $.HTML: {\n            // Ignore token\n            break;\n        }\n        default: {\n            endTagInBody(p, token);\n        }\n    }\n}\n// The \"in select\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInSelect(p, token) {\n    switch (token.tagID) {\n        case $.HTML: {\n            startTagInBody(p, token);\n            break;\n        }\n        case $.OPTION: {\n            if (p.openElements.currentTagId === $.OPTION) {\n                p.openElements.pop();\n            }\n            p._insertElement(token, NS.HTML);\n            break;\n        }\n        case $.OPTGROUP: {\n            if (p.openElements.currentTagId === $.OPTION) {\n                p.openElements.pop();\n            }\n            if (p.openElements.currentTagId === $.OPTGROUP) {\n                p.openElements.pop();\n            }\n            p._insertElement(token, NS.HTML);\n            break;\n        }\n        case $.HR: {\n            if (p.openElements.currentTagId === $.OPTION) {\n                p.openElements.pop();\n            }\n            if (p.openElements.currentTagId === $.OPTGROUP) {\n                p.openElements.pop();\n            }\n            p._appendElement(token, NS.HTML);\n            token.ackSelfClosing = true;\n            break;\n        }\n        case $.INPUT:\n        case $.KEYGEN:\n        case $.TEXTAREA:\n        case $.SELECT: {\n            if (p.openElements.hasInSelectScope($.SELECT)) {\n                p.openElements.popUntilTagNamePopped($.SELECT);\n                p._resetInsertionMode();\n                if (token.tagID !== $.SELECT) {\n                    p._processStartTag(token);\n                }\n            }\n            break;\n        }\n        case $.SCRIPT:\n        case $.TEMPLATE: {\n            startTagInHead(p, token);\n            break;\n        }\n        default:\n        // Do nothing\n    }\n}\nfunction endTagInSelect(p, token) {\n    switch (token.tagID) {\n        case $.OPTGROUP: {\n            if (p.openElements.stackTop > 0 &&\n                p.openElements.currentTagId === $.OPTION &&\n                p.openElements.tagIDs[p.openElements.stackTop - 1] === $.OPTGROUP) {\n                p.openElements.pop();\n            }\n            if (p.openElements.currentTagId === $.OPTGROUP) {\n                p.openElements.pop();\n            }\n            break;\n        }\n        case $.OPTION: {\n            if (p.openElements.currentTagId === $.OPTION) {\n                p.openElements.pop();\n            }\n            break;\n        }\n        case $.SELECT: {\n            if (p.openElements.hasInSelectScope($.SELECT)) {\n                p.openElements.popUntilTagNamePopped($.SELECT);\n                p._resetInsertionMode();\n            }\n            break;\n        }\n        case $.TEMPLATE: {\n            templateEndTagInHead(p, token);\n            break;\n        }\n        default:\n        // Do nothing\n    }\n}\n// The \"in select in table\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInSelectInTable(p, token) {\n    const tn = token.tagID;\n    if (tn === $.CAPTION ||\n        tn === $.TABLE ||\n        tn === $.TBODY ||\n        tn === $.TFOOT ||\n        tn === $.THEAD ||\n        tn === $.TR ||\n        tn === $.TD ||\n        tn === $.TH) {\n        p.openElements.popUntilTagNamePopped($.SELECT);\n        p._resetInsertionMode();\n        p._processStartTag(token);\n    }\n    else {\n        startTagInSelect(p, token);\n    }\n}\nfunction endTagInSelectInTable(p, token) {\n    const tn = token.tagID;\n    if (tn === $.CAPTION ||\n        tn === $.TABLE ||\n        tn === $.TBODY ||\n        tn === $.TFOOT ||\n        tn === $.THEAD ||\n        tn === $.TR ||\n        tn === $.TD ||\n        tn === $.TH) {\n        if (p.openElements.hasInTableScope(tn)) {\n            p.openElements.popUntilTagNamePopped($.SELECT);\n            p._resetInsertionMode();\n            p.onEndTag(token);\n        }\n    }\n    else {\n        endTagInSelect(p, token);\n    }\n}\n// The \"in template\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInTemplate(p, token) {\n    switch (token.tagID) {\n        // First, handle tags that can start without a mode change\n        case $.BASE:\n        case $.BASEFONT:\n        case $.BGSOUND:\n        case $.LINK:\n        case $.META:\n        case $.NOFRAMES:\n        case $.SCRIPT:\n        case $.STYLE:\n        case $.TEMPLATE:\n        case $.TITLE: {\n            startTagInHead(p, token);\n            break;\n        }\n        // Re-process the token in the appropriate mode\n        case $.CAPTION:\n        case $.COLGROUP:\n        case $.TBODY:\n        case $.TFOOT:\n        case $.THEAD: {\n            p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE;\n            p.insertionMode = InsertionMode.IN_TABLE;\n            startTagInTable(p, token);\n            break;\n        }\n        case $.COL: {\n            p.tmplInsertionModeStack[0] = InsertionMode.IN_COLUMN_GROUP;\n            p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n            startTagInColumnGroup(p, token);\n            break;\n        }\n        case $.TR: {\n            p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE_BODY;\n            p.insertionMode = InsertionMode.IN_TABLE_BODY;\n            startTagInTableBody(p, token);\n            break;\n        }\n        case $.TD:\n        case $.TH: {\n            p.tmplInsertionModeStack[0] = InsertionMode.IN_ROW;\n            p.insertionMode = InsertionMode.IN_ROW;\n            startTagInRow(p, token);\n            break;\n        }\n        default: {\n            p.tmplInsertionModeStack[0] = InsertionMode.IN_BODY;\n            p.insertionMode = InsertionMode.IN_BODY;\n            startTagInBody(p, token);\n        }\n    }\n}\nfunction endTagInTemplate(p, token) {\n    if (token.tagID === $.TEMPLATE) {\n        templateEndTagInHead(p, token);\n    }\n}\nfunction eofInTemplate(p, token) {\n    if (p.openElements.tmplCount > 0) {\n        p.openElements.popUntilTagNamePopped($.TEMPLATE);\n        p.activeFormattingElements.clearToLastMarker();\n        p.tmplInsertionModeStack.shift();\n        p._resetInsertionMode();\n        p.onEof(token);\n    }\n    else {\n        stopParsing(p, token);\n    }\n}\n// The \"after body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterBody(p, token) {\n    if (token.tagID === $.HTML) {\n        startTagInBody(p, token);\n    }\n    else {\n        tokenAfterBody(p, token);\n    }\n}\nfunction endTagAfterBody(p, token) {\n    var _a;\n    if (token.tagID === $.HTML) {\n        if (!p.fragmentContext) {\n            p.insertionMode = InsertionMode.AFTER_AFTER_BODY;\n        }\n        //NOTE: <html> is never popped from the stack, so we need to updated\n        //the end location explicitly.\n        if (p.options.sourceCodeLocationInfo && p.openElements.tagIDs[0] === $.HTML) {\n            p._setEndLocation(p.openElements.items[0], token);\n            // Update the body element, if it doesn't have an end tag\n            const bodyElement = p.openElements.items[1];\n            if (bodyElement && !((_a = p.treeAdapter.getNodeSourceCodeLocation(bodyElement)) === null || _a === void 0 ? void 0 : _a.endTag)) {\n                p._setEndLocation(bodyElement, token);\n            }\n        }\n    }\n    else {\n        tokenAfterBody(p, token);\n    }\n}\nfunction tokenAfterBody(p, token) {\n    p.insertionMode = InsertionMode.IN_BODY;\n    modeInBody(p, token);\n}\n// The \"in frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInFrameset(p, token) {\n    switch (token.tagID) {\n        case $.HTML: {\n            startTagInBody(p, token);\n            break;\n        }\n        case $.FRAMESET: {\n            p._insertElement(token, NS.HTML);\n            break;\n        }\n        case $.FRAME: {\n            p._appendElement(token, NS.HTML);\n            token.ackSelfClosing = true;\n            break;\n        }\n        case $.NOFRAMES: {\n            startTagInHead(p, token);\n            break;\n        }\n        default:\n        // Do nothing\n    }\n}\nfunction endTagInFrameset(p, token) {\n    if (token.tagID === $.FRAMESET && !p.openElements.isRootHtmlElementCurrent()) {\n        p.openElements.pop();\n        if (!p.fragmentContext && p.openElements.currentTagId !== $.FRAMESET) {\n            p.insertionMode = InsertionMode.AFTER_FRAMESET;\n        }\n    }\n}\n// The \"after frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterFrameset(p, token) {\n    switch (token.tagID) {\n        case $.HTML: {\n            startTagInBody(p, token);\n            break;\n        }\n        case $.NOFRAMES: {\n            startTagInHead(p, token);\n            break;\n        }\n        default:\n        // Do nothing\n    }\n}\nfunction endTagAfterFrameset(p, token) {\n    if (token.tagID === $.HTML) {\n        p.insertionMode = InsertionMode.AFTER_AFTER_FRAMESET;\n    }\n}\n// The \"after after body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterAfterBody(p, token) {\n    if (token.tagID === $.HTML) {\n        startTagInBody(p, token);\n    }\n    else {\n        tokenAfterAfterBody(p, token);\n    }\n}\nfunction tokenAfterAfterBody(p, token) {\n    p.insertionMode = InsertionMode.IN_BODY;\n    modeInBody(p, token);\n}\n// The \"after after frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterAfterFrameset(p, token) {\n    switch (token.tagID) {\n        case $.HTML: {\n            startTagInBody(p, token);\n            break;\n        }\n        case $.NOFRAMES: {\n            startTagInHead(p, token);\n            break;\n        }\n        default:\n        // Do nothing\n    }\n}\n// The rules for parsing tokens in foreign content\n//------------------------------------------------------------------\nfunction nullCharacterInForeignContent(p, token) {\n    token.chars = unicode.REPLACEMENT_CHARACTER;\n    p._insertCharacters(token);\n}\nfunction characterInForeignContent(p, token) {\n    p._insertCharacters(token);\n    p.framesetOk = false;\n}\nfunction popUntilHtmlOrIntegrationPoint(p) {\n    while (p.treeAdapter.getNamespaceURI(p.openElements.current) !== NS.HTML &&\n        p.openElements.currentTagId !== undefined &&\n        !p._isIntegrationPoint(p.openElements.currentTagId, p.openElements.current)) {\n        p.openElements.pop();\n    }\n}\nfunction startTagInForeignContent(p, token) {\n    if (foreignContent.causesExit(token)) {\n        popUntilHtmlOrIntegrationPoint(p);\n        p._startTagOutsideForeignContent(token);\n    }\n    else {\n        const current = p._getAdjustedCurrentElement();\n        const currentNs = p.treeAdapter.getNamespaceURI(current);\n        if (currentNs === NS.MATHML) {\n            foreignContent.adjustTokenMathMLAttrs(token);\n        }\n        else if (currentNs === NS.SVG) {\n            foreignContent.adjustTokenSVGTagName(token);\n            foreignContent.adjustTokenSVGAttrs(token);\n        }\n        foreignContent.adjustTokenXMLAttrs(token);\n        if (token.selfClosing) {\n            p._appendElement(token, currentNs);\n        }\n        else {\n            p._insertElement(token, currentNs);\n        }\n        token.ackSelfClosing = true;\n    }\n}\nfunction endTagInForeignContent(p, token) {\n    if (token.tagID === $.P || token.tagID === $.BR) {\n        popUntilHtmlOrIntegrationPoint(p);\n        p._endTagOutsideForeignContent(token);\n        return;\n    }\n    for (let i = p.openElements.stackTop; i > 0; i--) {\n        const element = p.openElements.items[i];\n        if (p.treeAdapter.getNamespaceURI(element) === NS.HTML) {\n            p._endTagOutsideForeignContent(token);\n            break;\n        }\n        const tagName = p.treeAdapter.getTagName(element);\n        if (tagName.toLowerCase() === token.tagName) {\n            //NOTE: update the token tag name for `_setEndLocation`.\n            token.tagName = tagName;\n            p.openElements.shortenToLength(i);\n            break;\n        }\n    }\n}\n",null,"import { TAG_NAMES as $, NS, hasUnescapedText } from '../common/html.js';\nimport { escapeText, escapeAttribute } from 'entities/escape';\nimport { defaultTreeAdapter } from '../tree-adapters/default.js';\n// Sets\nconst VOID_ELEMENTS = new Set([\n    $.AREA,\n    $.BASE,\n    $.BASEFONT,\n    $.BGSOUND,\n    $.BR,\n    $.COL,\n    $.EMBED,\n    $.FRAME,\n    $.HR,\n    $.IMG,\n    $.INPUT,\n    $.KEYGEN,\n    $.LINK,\n    $.META,\n    $.PARAM,\n    $.SOURCE,\n    $.TRACK,\n    $.WBR,\n]);\nfunction isVoidElement(node, options) {\n    return (options.treeAdapter.isElementNode(node) &&\n        options.treeAdapter.getNamespaceURI(node) === NS.HTML &&\n        VOID_ELEMENTS.has(options.treeAdapter.getTagName(node)));\n}\nconst defaultOpts = { treeAdapter: defaultTreeAdapter, scriptingEnabled: true };\n/**\n * Serializes an AST node to an HTML string.\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');\n *\n * // Serializes a document.\n * const html = parse5.serialize(document);\n *\n * // Serializes the <html> element content.\n * const str = parse5.serialize(document.childNodes[1]);\n *\n * console.log(str); //> '<head></head><body>Hi there!</body>'\n * ```\n *\n * @param node Node to serialize.\n * @param options Serialization options.\n */\nexport function serialize(node, options) {\n    const opts = { ...defaultOpts, ...options };\n    if (isVoidElement(node, opts)) {\n        return '';\n    }\n    return serializeChildNodes(node, opts);\n}\n/**\n * Serializes an AST element node to an HTML string, including the element node.\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parseFragment('<div>Hello, <b>world</b>!</div>');\n *\n * // Serializes the <div> element.\n * const str = parse5.serializeOuter(document.childNodes[0]);\n *\n * console.log(str); //> '<div>Hello, <b>world</b>!</div>'\n * ```\n *\n * @param node Node to serialize.\n * @param options Serialization options.\n */\nexport function serializeOuter(node, options) {\n    const opts = { ...defaultOpts, ...options };\n    return serializeNode(node, opts);\n}\nfunction serializeChildNodes(parentNode, options) {\n    let html = '';\n    // Get container of the child nodes\n    const container = options.treeAdapter.isElementNode(parentNode) &&\n        options.treeAdapter.getTagName(parentNode) === $.TEMPLATE &&\n        options.treeAdapter.getNamespaceURI(parentNode) === NS.HTML\n        ? options.treeAdapter.getTemplateContent(parentNode)\n        : parentNode;\n    const childNodes = options.treeAdapter.getChildNodes(container);\n    if (childNodes) {\n        for (const currentNode of childNodes) {\n            html += serializeNode(currentNode, options);\n        }\n    }\n    return html;\n}\nfunction serializeNode(node, options) {\n    if (options.treeAdapter.isElementNode(node)) {\n        return serializeElement(node, options);\n    }\n    if (options.treeAdapter.isTextNode(node)) {\n        return serializeTextNode(node, options);\n    }\n    if (options.treeAdapter.isCommentNode(node)) {\n        return serializeCommentNode(node, options);\n    }\n    if (options.treeAdapter.isDocumentTypeNode(node)) {\n        return serializeDocumentTypeNode(node, options);\n    }\n    // Return an empty string for unknown nodes\n    return '';\n}\nfunction serializeElement(node, options) {\n    const tn = options.treeAdapter.getTagName(node);\n    return `<${tn}${serializeAttributes(node, options)}>${isVoidElement(node, options) ? '' : `${serializeChildNodes(node, options)}</${tn}>`}`;\n}\nfunction serializeAttributes(node, { treeAdapter }) {\n    let html = '';\n    for (const attr of treeAdapter.getAttrList(node)) {\n        html += ' ';\n        if (attr.namespace) {\n            switch (attr.namespace) {\n                case NS.XML: {\n                    html += `xml:${attr.name}`;\n                    break;\n                }\n                case NS.XMLNS: {\n                    if (attr.name !== 'xmlns') {\n                        html += 'xmlns:';\n                    }\n                    html += attr.name;\n                    break;\n                }\n                case NS.XLINK: {\n                    html += `xlink:${attr.name}`;\n                    break;\n                }\n                default: {\n                    html += `${attr.prefix}:${attr.name}`;\n                }\n            }\n        }\n        else {\n            html += attr.name;\n        }\n        html += `=\"${escapeAttribute(attr.value)}\"`;\n    }\n    return html;\n}\nfunction serializeTextNode(node, options) {\n    const { treeAdapter } = options;\n    const content = treeAdapter.getTextNodeContent(node);\n    const parent = treeAdapter.getParentNode(node);\n    const parentTn = parent && treeAdapter.isElementNode(parent) && treeAdapter.getTagName(parent);\n    return parentTn &&\n        treeAdapter.getNamespaceURI(parent) === NS.HTML &&\n        hasUnescapedText(parentTn, options.scriptingEnabled)\n        ? content\n        : escapeText(content);\n}\nfunction serializeCommentNode(node, { treeAdapter }) {\n    return `<!--${treeAdapter.getCommentNodeContent(node)}-->`;\n}\nfunction serializeDocumentTypeNode(node, { treeAdapter }) {\n    return `<!DOCTYPE ${treeAdapter.getDocumentTypeNodeName(node)}>`;\n}\n","import { Parser } from './parser/index.js';\nexport { defaultTreeAdapter } from './tree-adapters/default.js';\nexport { /** @internal */ Parser } from './parser/index.js';\nexport { serialize, serializeOuter } from './serializer/index.js';\nexport { ERR as ErrorCodes } from './common/error-codes.js';\n/** @internal */\nexport * as foreignContent from './common/foreign-content.js';\nexport * as html from './common/html.js';\nexport * as Token from './common/token.js';\n/** @internal */\nexport { Tokenizer, TokenizerMode } from './tokenizer/index.js';\n// Shorthands\n/**\n * Parses an HTML string.\n *\n * @param html Input HTML string.\n * @param options Parsing options.\n * @returns Document\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');\n *\n * console.log(document.childNodes[1].tagName); //> 'html'\n *```\n */\nexport function parse(html, options) {\n    return Parser.parse(html, options);\n}\nexport function parseFragment(fragmentContext, html, options) {\n    if (typeof fragmentContext === 'string') {\n        options = html;\n        html = fragmentContext;\n        fragmentContext = null;\n    }\n    const parser = Parser.getFragmentParser(fragmentContext, options);\n    parser.tokenizer.write(html, true);\n    return parser.getFragment();\n}\n","'use strict';\n\nmodule.exports = require('./lib/picomatch');\n","export async function hash(obj) {\n    if (obj == null)\n        return {};\n    const entries = Object.entries(obj);\n    const resolvedEntries = await Promise.all(entries.map(async ([key, value]) => {\n        return [key, await value];\n    }));\n    return Object.fromEntries(resolvedEntries);\n}\n","export async function hashSettled(obj) {\n    if (obj == null)\n        return {};\n    const entries = Object.entries(obj);\n    const settledEntries = await Promise.all(entries.map(async ([key, value]) => {\n        try {\n            const resolved = await value;\n            return [key, { state: 'fulfilled', value: resolved }];\n        }\n        catch (error) {\n            return [key, { state: 'rejected', reason: error }];\n        }\n    }));\n    return Object.fromEntries(settledEntries);\n}\n","\nconst canPromise = require('./can-promise')\n\nconst QRCode = require('./core/qrcode')\nconst CanvasRenderer = require('./renderer/canvas')\nconst SvgRenderer = require('./renderer/svg-tag.js')\n\nfunction renderCanvas (renderFunc, canvas, text, opts, cb) {\n  const args = [].slice.call(arguments, 1)\n  const argsNum = args.length\n  const isLastArgCb = typeof args[argsNum - 1] === 'function'\n\n  if (!isLastArgCb && !canPromise()) {\n    throw new Error('Callback required as last argument')\n  }\n\n  if (isLastArgCb) {\n    if (argsNum < 2) {\n      throw new Error('Too few arguments provided')\n    }\n\n    if (argsNum === 2) {\n      cb = text\n      text = canvas\n      canvas = opts = undefined\n    } else if (argsNum === 3) {\n      if (canvas.getContext && typeof cb === 'undefined') {\n        cb = opts\n        opts = undefined\n      } else {\n        cb = opts\n        opts = text\n        text = canvas\n        canvas = undefined\n      }\n    }\n  } else {\n    if (argsNum < 1) {\n      throw new Error('Too few arguments provided')\n    }\n\n    if (argsNum === 1) {\n      text = canvas\n      canvas = opts = undefined\n    } else if (argsNum === 2 && !canvas.getContext) {\n      opts = text\n      text = canvas\n      canvas = undefined\n    }\n\n    return new Promise(function (resolve, reject) {\n      try {\n        const data = QRCode.create(text, opts)\n        resolve(renderFunc(data, canvas, opts))\n      } catch (e) {\n        reject(e)\n      }\n    })\n  }\n\n  try {\n    const data = QRCode.create(text, opts)\n    cb(null, renderFunc(data, canvas, opts))\n  } catch (e) {\n    cb(e)\n  }\n}\n\nexports.create = QRCode.create\nexports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render)\nexports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL)\n\n// only svg for now.\nexports.toString = renderCanvas.bind(null, function (data, _, opts) {\n  return SvgRenderer.render(data, opts)\n})\n","const Utils = require('./utils')\nconst ECLevel = require('./error-correction-level')\nconst BitBuffer = require('./bit-buffer')\nconst BitMatrix = require('./bit-matrix')\nconst AlignmentPattern = require('./alignment-pattern')\nconst FinderPattern = require('./finder-pattern')\nconst MaskPattern = require('./mask-pattern')\nconst ECCode = require('./error-correction-code')\nconst ReedSolomonEncoder = require('./reed-solomon-encoder')\nconst Version = require('./version')\nconst FormatInfo = require('./format-info')\nconst Mode = require('./mode')\nconst Segments = require('./segments')\n\n/**\n * QRCode for JavaScript\n *\n * modified by Ryan Day for nodejs support\n * Copyright (c) 2011 Ryan Day\n *\n * Licensed under the MIT license:\n *   http://www.opensource.org/licenses/mit-license.php\n *\n//---------------------------------------------------------------------\n// QRCode for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n//   http://www.opensource.org/licenses/mit-license.php\n//\n// The word \"QR Code\" is registered trademark of\n// DENSO WAVE INCORPORATED\n//   http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n*/\n\n/**\n * Add finder patterns bits to matrix\n *\n * @param  {BitMatrix} matrix  Modules matrix\n * @param  {Number}    version QR Code version\n */\nfunction setupFinderPattern (matrix, version) {\n  const size = matrix.size\n  const pos = FinderPattern.getPositions(version)\n\n  for (let i = 0; i < pos.length; i++) {\n    const row = pos[i][0]\n    const col = pos[i][1]\n\n    for (let r = -1; r <= 7; r++) {\n      if (row + r <= -1 || size <= row + r) continue\n\n      for (let c = -1; c <= 7; c++) {\n        if (col + c <= -1 || size <= col + c) continue\n\n        if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||\n          (c >= 0 && c <= 6 && (r === 0 || r === 6)) ||\n          (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {\n          matrix.set(row + r, col + c, true, true)\n        } else {\n          matrix.set(row + r, col + c, false, true)\n        }\n      }\n    }\n  }\n}\n\n/**\n * Add timing pattern bits to matrix\n *\n * Note: this function must be called before {@link setupAlignmentPattern}\n *\n * @param  {BitMatrix} matrix Modules matrix\n */\nfunction setupTimingPattern (matrix) {\n  const size = matrix.size\n\n  for (let r = 8; r < size - 8; r++) {\n    const value = r % 2 === 0\n    matrix.set(r, 6, value, true)\n    matrix.set(6, r, value, true)\n  }\n}\n\n/**\n * Add alignment patterns bits to matrix\n *\n * Note: this function must be called after {@link setupTimingPattern}\n *\n * @param  {BitMatrix} matrix  Modules matrix\n * @param  {Number}    version QR Code version\n */\nfunction setupAlignmentPattern (matrix, version) {\n  const pos = AlignmentPattern.getPositions(version)\n\n  for (let i = 0; i < pos.length; i++) {\n    const row = pos[i][0]\n    const col = pos[i][1]\n\n    for (let r = -2; r <= 2; r++) {\n      for (let c = -2; c <= 2; c++) {\n        if (r === -2 || r === 2 || c === -2 || c === 2 ||\n          (r === 0 && c === 0)) {\n          matrix.set(row + r, col + c, true, true)\n        } else {\n          matrix.set(row + r, col + c, false, true)\n        }\n      }\n    }\n  }\n}\n\n/**\n * Add version info bits to matrix\n *\n * @param  {BitMatrix} matrix  Modules matrix\n * @param  {Number}    version QR Code version\n */\nfunction setupVersionInfo (matrix, version) {\n  const size = matrix.size\n  const bits = Version.getEncodedBits(version)\n  let row, col, mod\n\n  for (let i = 0; i < 18; i++) {\n    row = Math.floor(i / 3)\n    col = i % 3 + size - 8 - 3\n    mod = ((bits >> i) & 1) === 1\n\n    matrix.set(row, col, mod, true)\n    matrix.set(col, row, mod, true)\n  }\n}\n\n/**\n * Add format info bits to matrix\n *\n * @param  {BitMatrix} matrix               Modules matrix\n * @param  {ErrorCorrectionLevel}    errorCorrectionLevel Error correction level\n * @param  {Number}    maskPattern          Mask pattern reference value\n */\nfunction setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {\n  const size = matrix.size\n  const bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)\n  let i, mod\n\n  for (i = 0; i < 15; i++) {\n    mod = ((bits >> i) & 1) === 1\n\n    // vertical\n    if (i < 6) {\n      matrix.set(i, 8, mod, true)\n    } else if (i < 8) {\n      matrix.set(i + 1, 8, mod, true)\n    } else {\n      matrix.set(size - 15 + i, 8, mod, true)\n    }\n\n    // horizontal\n    if (i < 8) {\n      matrix.set(8, size - i - 1, mod, true)\n    } else if (i < 9) {\n      matrix.set(8, 15 - i - 1 + 1, mod, true)\n    } else {\n      matrix.set(8, 15 - i - 1, mod, true)\n    }\n  }\n\n  // fixed module\n  matrix.set(size - 8, 8, 1, true)\n}\n\n/**\n * Add encoded data bits to matrix\n *\n * @param  {BitMatrix}  matrix Modules matrix\n * @param  {Uint8Array} data   Data codewords\n */\nfunction setupData (matrix, data) {\n  const size = matrix.size\n  let inc = -1\n  let row = size - 1\n  let bitIndex = 7\n  let byteIndex = 0\n\n  for (let col = size - 1; col > 0; col -= 2) {\n    if (col === 6) col--\n\n    while (true) {\n      for (let c = 0; c < 2; c++) {\n        if (!matrix.isReserved(row, col - c)) {\n          let dark = false\n\n          if (byteIndex < data.length) {\n            dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)\n          }\n\n          matrix.set(row, col - c, dark)\n          bitIndex--\n\n          if (bitIndex === -1) {\n            byteIndex++\n            bitIndex = 7\n          }\n        }\n      }\n\n      row += inc\n\n      if (row < 0 || size <= row) {\n        row -= inc\n        inc = -inc\n        break\n      }\n    }\n  }\n}\n\n/**\n * Create encoded codewords from data input\n *\n * @param  {Number}   version              QR Code version\n * @param  {ErrorCorrectionLevel}   errorCorrectionLevel Error correction level\n * @param  {ByteData} data                 Data input\n * @return {Uint8Array}                    Buffer containing encoded codewords\n */\nfunction createData (version, errorCorrectionLevel, segments) {\n  // Prepare data buffer\n  const buffer = new BitBuffer()\n\n  segments.forEach(function (data) {\n    // prefix data with mode indicator (4 bits)\n    buffer.put(data.mode.bit, 4)\n\n    // Prefix data with character count indicator.\n    // The character count indicator is a string of bits that represents the\n    // number of characters that are being encoded.\n    // The character count indicator must be placed after the mode indicator\n    // and must be a certain number of bits long, depending on the QR version\n    // and data mode\n    // @see {@link Mode.getCharCountIndicator}.\n    buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version))\n\n    // add binary data sequence to buffer\n    data.write(buffer)\n  })\n\n  // Calculate required number of bits\n  const totalCodewords = Utils.getSymbolTotalCodewords(version)\n  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n  const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n  // Add a terminator.\n  // If the bit string is shorter than the total number of required bits,\n  // a terminator of up to four 0s must be added to the right side of the string.\n  // If the bit string is more than four bits shorter than the required number of bits,\n  // add four 0s to the end.\n  if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {\n    buffer.put(0, 4)\n  }\n\n  // If the bit string is fewer than four bits shorter, add only the number of 0s that\n  // are needed to reach the required number of bits.\n\n  // After adding the terminator, if the number of bits in the string is not a multiple of 8,\n  // pad the string on the right with 0s to make the string's length a multiple of 8.\n  while (buffer.getLengthInBits() % 8 !== 0) {\n    buffer.putBit(0)\n  }\n\n  // Add pad bytes if the string is still shorter than the total number of required bits.\n  // Extend the buffer to fill the data capacity of the symbol corresponding to\n  // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)\n  // and 00010001 (0x11) alternately.\n  const remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8\n  for (let i = 0; i < remainingByte; i++) {\n    buffer.put(i % 2 ? 0x11 : 0xEC, 8)\n  }\n\n  return createCodewords(buffer, version, errorCorrectionLevel)\n}\n\n/**\n * Encode input data with Reed-Solomon and return codewords with\n * relative error correction bits\n *\n * @param  {BitBuffer} bitBuffer            Data to encode\n * @param  {Number}    version              QR Code version\n * @param  {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @return {Uint8Array}                     Buffer containing encoded codewords\n */\nfunction createCodewords (bitBuffer, version, errorCorrectionLevel) {\n  // Total codewords for this QR code version (Data + Error correction)\n  const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n  // Total number of error correction codewords\n  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n  // Total number of data codewords\n  const dataTotalCodewords = totalCodewords - ecTotalCodewords\n\n  // Total number of blocks\n  const ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)\n\n  // Calculate how many blocks each group should contain\n  const blocksInGroup2 = totalCodewords % ecTotalBlocks\n  const blocksInGroup1 = ecTotalBlocks - blocksInGroup2\n\n  const totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)\n\n  const dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)\n  const dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1\n\n  // Number of EC codewords is the same for both groups\n  const ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1\n\n  // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount\n  const rs = new ReedSolomonEncoder(ecCount)\n\n  let offset = 0\n  const dcData = new Array(ecTotalBlocks)\n  const ecData = new Array(ecTotalBlocks)\n  let maxDataSize = 0\n  const buffer = new Uint8Array(bitBuffer.buffer)\n\n  // Divide the buffer into the required number of blocks\n  for (let b = 0; b < ecTotalBlocks; b++) {\n    const dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2\n\n    // extract a block of data from buffer\n    dcData[b] = buffer.slice(offset, offset + dataSize)\n\n    // Calculate EC codewords for this data block\n    ecData[b] = rs.encode(dcData[b])\n\n    offset += dataSize\n    maxDataSize = Math.max(maxDataSize, dataSize)\n  }\n\n  // Create final data\n  // Interleave the data and error correction codewords from each block\n  const data = new Uint8Array(totalCodewords)\n  let index = 0\n  let i, r\n\n  // Add data codewords\n  for (i = 0; i < maxDataSize; i++) {\n    for (r = 0; r < ecTotalBlocks; r++) {\n      if (i < dcData[r].length) {\n        data[index++] = dcData[r][i]\n      }\n    }\n  }\n\n  // Apped EC codewords\n  for (i = 0; i < ecCount; i++) {\n    for (r = 0; r < ecTotalBlocks; r++) {\n      data[index++] = ecData[r][i]\n    }\n  }\n\n  return data\n}\n\n/**\n * Build QR Code symbol\n *\n * @param  {String} data                 Input string\n * @param  {Number} version              QR Code version\n * @param  {ErrorCorretionLevel} errorCorrectionLevel Error level\n * @param  {MaskPattern} maskPattern     Mask pattern\n * @return {Object}                      Object containing symbol data\n */\nfunction createSymbol (data, version, errorCorrectionLevel, maskPattern) {\n  let segments\n\n  if (Array.isArray(data)) {\n    segments = Segments.fromArray(data)\n  } else if (typeof data === 'string') {\n    let estimatedVersion = version\n\n    if (!estimatedVersion) {\n      const rawSegments = Segments.rawSplit(data)\n\n      // Estimate best version that can contain raw splitted segments\n      estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel)\n    }\n\n    // Build optimized segments\n    // If estimated version is undefined, try with the highest version\n    segments = Segments.fromString(data, estimatedVersion || 40)\n  } else {\n    throw new Error('Invalid data')\n  }\n\n  // Get the min version that can contain data\n  const bestVersion = Version.getBestVersionForData(segments, errorCorrectionLevel)\n\n  // If no version is found, data cannot be stored\n  if (!bestVersion) {\n    throw new Error('The amount of data is too big to be stored in a QR Code')\n  }\n\n  // If not specified, use min version as default\n  if (!version) {\n    version = bestVersion\n\n  // Check if the specified version can contain the data\n  } else if (version < bestVersion) {\n    throw new Error('\\n' +\n      'The chosen QR Code version cannot contain this amount of data.\\n' +\n      'Minimum version required to store current data is: ' + bestVersion + '.\\n'\n    )\n  }\n\n  const dataBits = createData(version, errorCorrectionLevel, segments)\n\n  // Allocate matrix buffer\n  const moduleCount = Utils.getSymbolSize(version)\n  const modules = new BitMatrix(moduleCount)\n\n  // Add function modules\n  setupFinderPattern(modules, version)\n  setupTimingPattern(modules)\n  setupAlignmentPattern(modules, version)\n\n  // Add temporary dummy bits for format info just to set them as reserved.\n  // This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}\n  // since the masking operation must be performed only on the encoding region.\n  // These blocks will be replaced with correct values later in code.\n  setupFormatInfo(modules, errorCorrectionLevel, 0)\n\n  if (version >= 7) {\n    setupVersionInfo(modules, version)\n  }\n\n  // Add data codewords\n  setupData(modules, dataBits)\n\n  if (isNaN(maskPattern)) {\n    // Find best mask pattern\n    maskPattern = MaskPattern.getBestMask(modules,\n      setupFormatInfo.bind(null, modules, errorCorrectionLevel))\n  }\n\n  // Apply mask pattern\n  MaskPattern.applyMask(maskPattern, modules)\n\n  // Replace format info bits with correct values\n  setupFormatInfo(modules, errorCorrectionLevel, maskPattern)\n\n  return {\n    modules: modules,\n    version: version,\n    errorCorrectionLevel: errorCorrectionLevel,\n    maskPattern: maskPattern,\n    segments: segments\n  }\n}\n\n/**\n * QR Code\n *\n * @param {String | Array} data                 Input data\n * @param {Object} options                      Optional configurations\n * @param {Number} options.version              QR Code version\n * @param {String} options.errorCorrectionLevel Error correction level\n * @param {Function} options.toSJISFunc         Helper func to convert utf8 to sjis\n */\nexports.create = function create (data, options) {\n  if (typeof data === 'undefined' || data === '') {\n    throw new Error('No input text')\n  }\n\n  let errorCorrectionLevel = ECLevel.M\n  let version\n  let mask\n\n  if (typeof options !== 'undefined') {\n    // Use higher error correction level as default\n    errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M)\n    version = Version.from(options.version)\n    mask = MaskPattern.from(options.maskPattern)\n\n    if (options.toSJISFunc) {\n      Utils.setToSJISFunction(options.toSJISFunc)\n    }\n  }\n\n  return createSymbol(data, version, errorCorrectionLevel, mask)\n}\n","const getSymbolSize = require('./utils').getSymbolSize\nconst FINDER_PATTERN_SIZE = 7\n\n/**\n * Returns an array containing the positions of each finder pattern.\n * Each array's element represent the top-left point of the pattern as (x, y) coordinates\n *\n * @param  {Number} version QR Code version\n * @return {Array}          Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n  const size = getSymbolSize(version)\n\n  return [\n    // top-left\n    [0, 0],\n    // top-right\n    [size - FINDER_PATTERN_SIZE, 0],\n    // bottom-left\n    [0, size - FINDER_PATTERN_SIZE]\n  ]\n}\n","const EXP_TABLE = new Uint8Array(512)\nconst LOG_TABLE = new Uint8Array(256)\n/**\n * Precompute the log and anti-log tables for faster computation later\n *\n * For each possible value in the galois field 2^8, we will pre-compute\n * the logarithm and anti-logarithm (exponential) of this value\n *\n * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}\n */\n;(function initTables () {\n  let x = 1\n  for (let i = 0; i < 255; i++) {\n    EXP_TABLE[i] = x\n    LOG_TABLE[x] = i\n\n    x <<= 1 // multiply by 2\n\n    // The QR code specification says to use byte-wise modulo 100011101 arithmetic.\n    // This means that when a number is 256 or larger, it should be XORed with 0x11D.\n    if (x & 0x100) { // similar to x >= 256, but a lot faster (because 0x100 == 256)\n      x ^= 0x11D\n    }\n  }\n\n  // Optimization: double the size of the anti-log table so that we don't need to mod 255 to\n  // stay inside the bounds (because we will mainly use this table for the multiplication of\n  // two GF numbers, no more).\n  // @see {@link mul}\n  for (let i = 255; i < 512; i++) {\n    EXP_TABLE[i] = EXP_TABLE[i - 255]\n  }\n}())\n\n/**\n * Returns log value of n inside Galois Field\n *\n * @param  {Number} n\n * @return {Number}\n */\nexports.log = function log (n) {\n  if (n < 1) throw new Error('log(' + n + ')')\n  return LOG_TABLE[n]\n}\n\n/**\n * Returns anti-log value of n inside Galois Field\n *\n * @param  {Number} n\n * @return {Number}\n */\nexports.exp = function exp (n) {\n  return EXP_TABLE[n]\n}\n\n/**\n * Multiplies two number inside Galois Field\n *\n * @param  {Number} x\n * @param  {Number} y\n * @return {Number}\n */\nexports.mul = function mul (x, y) {\n  if (x === 0 || y === 0) return 0\n\n  // should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized\n  // @see {@link initTables}\n  return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]]\n}\n","const Utils = require('./utils')\n\nconst G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)\nconst G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)\nconst G15_BCH = Utils.getBCHDigit(G15)\n\n/**\n * Returns format information with relative error correction bits\n *\n * The format information is a 15-bit sequence containing 5 data bits,\n * with 10 error correction bits calculated using the (15, 5) BCH code.\n *\n * @param  {Number} errorCorrectionLevel Error correction level\n * @param  {Number} mask                 Mask pattern\n * @return {Number}                      Encoded format information bits\n */\nexports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {\n  const data = ((errorCorrectionLevel.bit << 3) | mask)\n  let d = data << 10\n\n  while (Utils.getBCHDigit(d) - G15_BCH >= 0) {\n    d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))\n  }\n\n  // xor final data with mask pattern in order to ensure that\n  // no combination of Error Correction Level and data mask pattern\n  // will result in an all-zero data string\n  return ((data << 10) | d) ^ G15_MASK\n}\n","const Utils = require('./utils')\n\nfunction getColorAttrib (color, attrib) {\n  const alpha = color.a / 255\n  const str = attrib + '=\"' + color.hex + '\"'\n\n  return alpha < 1\n    ? str + ' ' + attrib + '-opacity=\"' + alpha.toFixed(2).slice(1) + '\"'\n    : str\n}\n\nfunction svgCmd (cmd, x, y) {\n  let str = cmd + x\n  if (typeof y !== 'undefined') str += ' ' + y\n\n  return str\n}\n\nfunction qrToPath (data, size, margin) {\n  let path = ''\n  let moveBy = 0\n  let newRow = false\n  let lineLength = 0\n\n  for (let i = 0; i < data.length; i++) {\n    const col = Math.floor(i % size)\n    const row = Math.floor(i / size)\n\n    if (!col && !newRow) newRow = true\n\n    if (data[i]) {\n      lineLength++\n\n      if (!(i > 0 && col > 0 && data[i - 1])) {\n        path += newRow\n          ? svgCmd('M', col + margin, 0.5 + row + margin)\n          : svgCmd('m', moveBy, 0)\n\n        moveBy = 0\n        newRow = false\n      }\n\n      if (!(col + 1 < size && data[i + 1])) {\n        path += svgCmd('h', lineLength)\n        lineLength = 0\n      }\n    } else {\n      moveBy++\n    }\n  }\n\n  return path\n}\n\nexports.render = function render (qrData, options, cb) {\n  const opts = Utils.getOptions(options)\n  const size = qrData.modules.size\n  const data = qrData.modules.data\n  const qrcodesize = size + opts.margin * 2\n\n  const bg = !opts.color.light.a\n    ? ''\n    : '<path ' + getColorAttrib(opts.color.light, 'fill') +\n      ' d=\"M0 0h' + qrcodesize + 'v' + qrcodesize + 'H0z\"/>'\n\n  const path =\n    '<path ' + getColorAttrib(opts.color.dark, 'stroke') +\n    ' d=\"' + qrToPath(data, size, opts.margin) + '\"/>'\n\n  const viewBox = 'viewBox=\"' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '\"'\n\n  const width = !opts.width ? '' : 'width=\"' + opts.width + '\" height=\"' + opts.width + '\" '\n\n  const svgTag = '<svg xmlns=\"http://www.w3.org/2000/svg\" ' + width + viewBox + ' shape-rendering=\"crispEdges\">' + bg + path + '</svg>\\n'\n\n  if (typeof cb === 'function') {\n    cb(null, svgTag)\n  }\n\n  return svgTag\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ReCaptchaInstance = exports.getInstance = exports.load = void 0;\nvar ReCaptchaLoader_1 = require(\"./ReCaptchaLoader\");\nObject.defineProperty(exports, \"load\", { enumerable: true, get: function () { return ReCaptchaLoader_1.load; } });\nObject.defineProperty(exports, \"getInstance\", { enumerable: true, get: function () { return ReCaptchaLoader_1.getInstance; } });\nvar ReCaptchaInstance_1 = require(\"./ReCaptchaInstance\");\nObject.defineProperty(exports, \"ReCaptchaInstance\", { enumerable: true, get: function () { return ReCaptchaInstance_1.ReCaptchaInstance; } });\n",null,"'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/*!\n * is-plain-object <https://github.com/jonschlinkert/is-plain-object>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nfunction isObject(o) {\n  return Object.prototype.toString.call(o) === '[object Object]';\n}\n\nfunction isPlainObject(o) {\n  var ctor,prot;\n\n  if (isObject(o) === false) return false;\n\n  // If has modified constructor\n  ctor = o.constructor;\n  if (ctor === undefined) return true;\n\n  // If has modified prototype\n  prot = ctor.prototype;\n  if (isObject(prot) === false) return false;\n\n  // If constructor does not have an Object-specific method\n  if (prot.hasOwnProperty('isPrototypeOf') === false) {\n    return false;\n  }\n\n  // Most likely a plain Object\n  return true;\n}\n\nexports.isPlainObject = isPlainObject;\n","let urlAlphabet =\n  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n\nlet customAlphabet = (alphabet, defaultSize = 21) => {\n  return (size = defaultSize) => {\n    let id = ''\n    let i = size | 0\n    while (i-- > 0) {\n      id += alphabet[(Math.random() * alphabet.length) | 0]\n    }\n    return id\n  }\n}\n\nlet nanoid = (size = 21) => {\n  let id = ''\n  let i = size | 0\n  while (i-- > 0) {\n    id += urlAlphabet[(Math.random() * 64) | 0]\n  }\n  return id\n}\n\nmodule.exports = { nanoid, customAlphabet }\n","'use strict'\n\n// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst truncate = require('./functions/truncate')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n  parse,\n  valid,\n  clean,\n  inc,\n  diff,\n  major,\n  minor,\n  patch,\n  prerelease,\n  compare,\n  rcompare,\n  compareLoose,\n  compareBuild,\n  sort,\n  rsort,\n  gt,\n  lt,\n  eq,\n  neq,\n  gte,\n  lte,\n  cmp,\n  coerce,\n  truncate,\n  Comparator,\n  Range,\n  satisfies,\n  toComparators,\n  maxSatisfying,\n  minSatisfying,\n  minVersion,\n  validRange,\n  outside,\n  gtr,\n  ltr,\n  intersects,\n  simplifyRange,\n  subset,\n  SemVer,\n  re: internalRe.re,\n  src: internalRe.src,\n  tokens: internalRe.t,\n  SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n  RELEASE_TYPES: constants.RELEASE_TYPES,\n  compareIdentifiers: identifiers.compareIdentifiers,\n  rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n","export default 'ffffffff-ffff-ffff-ffff-ffffffffffff';\n","export default '00000000-0000-0000-0000-000000000000';\n","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;\n","import REGEX from './regex.js';\nfunction validate(uuid) {\n    return typeof uuid === 'string' && REGEX.test(uuid);\n}\nexport default validate;\n","import validate from './validate.js';\nfunction parse(uuid) {\n    if (!validate(uuid)) {\n        throw TypeError('Invalid UUID');\n    }\n    let v;\n    return Uint8Array.of((v = parseInt(uuid.slice(0, 8), 16)) >>> 24, (v >>> 16) & 0xff, (v >>> 8) & 0xff, v & 0xff, (v = parseInt(uuid.slice(9, 13), 16)) >>> 8, v & 0xff, (v = parseInt(uuid.slice(14, 18), 16)) >>> 8, v & 0xff, (v = parseInt(uuid.slice(19, 23), 16)) >>> 8, v & 0xff, ((v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000) & 0xff, (v / 0x100000000) & 0xff, (v >>> 24) & 0xff, (v >>> 16) & 0xff, (v >>> 8) & 0xff, v & 0xff);\n}\nexport default parse;\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n    byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n    return (byteToHex[arr[offset + 0]] +\n        byteToHex[arr[offset + 1]] +\n        byteToHex[arr[offset + 2]] +\n        byteToHex[arr[offset + 3]] +\n        '-' +\n        byteToHex[arr[offset + 4]] +\n        byteToHex[arr[offset + 5]] +\n        '-' +\n        byteToHex[arr[offset + 6]] +\n        byteToHex[arr[offset + 7]] +\n        '-' +\n        byteToHex[arr[offset + 8]] +\n        byteToHex[arr[offset + 9]] +\n        '-' +\n        byteToHex[arr[offset + 10]] +\n        byteToHex[arr[offset + 11]] +\n        byteToHex[arr[offset + 12]] +\n        byteToHex[arr[offset + 13]] +\n        byteToHex[arr[offset + 14]] +\n        byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n    const uuid = unsafeStringify(arr, offset);\n    if (!validate(uuid)) {\n        throw TypeError('Stringified UUID is invalid');\n    }\n    return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n    if (!getRandomValues) {\n        if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n            throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n        }\n        getRandomValues = crypto.getRandomValues.bind(crypto);\n    }\n    return getRandomValues(rnds8);\n}\n","import rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nconst _state = {};\nfunction v1(options, buf, offset) {\n    let bytes;\n    const isV6 = options?._v6 ?? false;\n    if (options) {\n        const optionsKeys = Object.keys(options);\n        if (optionsKeys.length === 1 && optionsKeys[0] === '_v6') {\n            options = undefined;\n        }\n    }\n    if (options) {\n        bytes = v1Bytes(options.random ?? options.rng?.() ?? rng(), options.msecs, options.nsecs, options.clockseq, options.node, buf, offset);\n    }\n    else {\n        const now = Date.now();\n        const rnds = rng();\n        updateV1State(_state, now, rnds);\n        bytes = v1Bytes(rnds, _state.msecs, _state.nsecs, isV6 ? undefined : _state.clockseq, isV6 ? undefined : _state.node, buf, offset);\n    }\n    return buf ?? unsafeStringify(bytes);\n}\nexport function updateV1State(state, now, rnds) {\n    state.msecs ??= -Infinity;\n    state.nsecs ??= 0;\n    if (now === state.msecs) {\n        state.nsecs++;\n        if (state.nsecs >= 10000) {\n            state.node = undefined;\n            state.nsecs = 0;\n        }\n    }\n    else if (now > state.msecs) {\n        state.nsecs = 0;\n    }\n    else if (now < state.msecs) {\n        state.node = undefined;\n    }\n    if (!state.node) {\n        state.node = rnds.slice(10, 16);\n        state.node[0] |= 0x01;\n        state.clockseq = ((rnds[8] << 8) | rnds[9]) & 0x3fff;\n    }\n    state.msecs = now;\n    return state;\n}\nfunction v1Bytes(rnds, msecs, nsecs, clockseq, node, buf, offset = 0) {\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    if (!buf) {\n        buf = new Uint8Array(16);\n        offset = 0;\n    }\n    else {\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n    }\n    msecs ??= Date.now();\n    nsecs ??= 0;\n    clockseq ??= ((rnds[8] << 8) | rnds[9]) & 0x3fff;\n    node ??= rnds.slice(10, 16);\n    msecs += 12219292800000;\n    const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n    buf[offset++] = (tl >>> 24) & 0xff;\n    buf[offset++] = (tl >>> 16) & 0xff;\n    buf[offset++] = (tl >>> 8) & 0xff;\n    buf[offset++] = tl & 0xff;\n    const tmh = ((msecs / 0x100000000) * 10000) & 0xfffffff;\n    buf[offset++] = (tmh >>> 8) & 0xff;\n    buf[offset++] = tmh & 0xff;\n    buf[offset++] = ((tmh >>> 24) & 0xf) | 0x10;\n    buf[offset++] = (tmh >>> 16) & 0xff;\n    buf[offset++] = (clockseq >>> 8) | 0x80;\n    buf[offset++] = clockseq & 0xff;\n    for (let n = 0; n < 6; ++n) {\n        buf[offset++] = node[n];\n    }\n    return buf;\n}\nexport default v1;\n","import parse from './parse.js';\nimport { unsafeStringify } from './stringify.js';\nexport default function v1ToV6(uuid) {\n    const v1Bytes = typeof uuid === 'string' ? parse(uuid) : uuid;\n    const v6Bytes = _v1ToV6(v1Bytes);\n    return typeof uuid === 'string' ? unsafeStringify(v6Bytes) : v6Bytes;\n}\nfunction _v1ToV6(v1Bytes) {\n    return Uint8Array.of(((v1Bytes[6] & 0x0f) << 4) | ((v1Bytes[7] >> 4) & 0x0f), ((v1Bytes[7] & 0x0f) << 4) | ((v1Bytes[4] & 0xf0) >> 4), ((v1Bytes[4] & 0x0f) << 4) | ((v1Bytes[5] & 0xf0) >> 4), ((v1Bytes[5] & 0x0f) << 4) | ((v1Bytes[0] & 0xf0) >> 4), ((v1Bytes[0] & 0x0f) << 4) | ((v1Bytes[1] & 0xf0) >> 4), ((v1Bytes[1] & 0x0f) << 4) | ((v1Bytes[2] & 0xf0) >> 4), 0x60 | (v1Bytes[2] & 0x0f), v1Bytes[3], v1Bytes[8], v1Bytes[9], v1Bytes[10], v1Bytes[11], v1Bytes[12], v1Bytes[13], v1Bytes[14], v1Bytes[15]);\n}\n","function md5(bytes) {\n    const words = uint8ToUint32(bytes);\n    const md5Bytes = wordsToMd5(words, bytes.length * 8);\n    return uint32ToUint8(md5Bytes);\n}\nfunction uint32ToUint8(input) {\n    const bytes = new Uint8Array(input.length * 4);\n    for (let i = 0; i < input.length * 4; i++) {\n        bytes[i] = (input[i >> 2] >>> ((i % 4) * 8)) & 0xff;\n    }\n    return bytes;\n}\nfunction getOutputLength(inputLength8) {\n    return (((inputLength8 + 64) >>> 9) << 4) + 14 + 1;\n}\nfunction wordsToMd5(x, len) {\n    const xpad = new Uint32Array(getOutputLength(len)).fill(0);\n    xpad.set(x);\n    xpad[len >> 5] |= 0x80 << len % 32;\n    xpad[xpad.length - 1] = len;\n    x = xpad;\n    let a = 1732584193;\n    let b = -271733879;\n    let c = -1732584194;\n    let d = 271733878;\n    for (let i = 0; i < x.length; i += 16) {\n        const olda = a;\n        const oldb = b;\n        const oldc = c;\n        const oldd = d;\n        a = md5ff(a, b, c, d, x[i], 7, -680876936);\n        d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n        c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n        b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n        a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n        d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n        c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n        b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n        a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n        d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n        c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n        b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n        a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n        d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n        c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n        b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n        a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n        d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n        c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n        b = md5gg(b, c, d, a, x[i], 20, -373897302);\n        a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n        d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n        c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n        b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n        a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n        d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n        c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n        b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n        a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n        d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n        c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n        b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n        a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n        d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n        c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n        b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n        a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n        d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n        c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n        b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n        a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n        d = md5hh(d, a, b, c, x[i], 11, -358537222);\n        c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n        b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n        a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n        d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n        c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n        b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n        a = md5ii(a, b, c, d, x[i], 6, -198630844);\n        d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n        c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n        b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n        a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n        d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n        c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n        b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n        a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n        d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n        c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n        b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n        a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n        d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n        c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n        b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n        a = safeAdd(a, olda);\n        b = safeAdd(b, oldb);\n        c = safeAdd(c, oldc);\n        d = safeAdd(d, oldd);\n    }\n    return Uint32Array.of(a, b, c, d);\n}\nfunction uint8ToUint32(input) {\n    if (input.length === 0) {\n        return new Uint32Array();\n    }\n    const output = new Uint32Array(getOutputLength(input.length * 8)).fill(0);\n    for (let i = 0; i < input.length; i++) {\n        output[i >> 2] |= (input[i] & 0xff) << ((i % 4) * 8);\n    }\n    return output;\n}\nfunction safeAdd(x, y) {\n    const lsw = (x & 0xffff) + (y & 0xffff);\n    const msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n    return (msw << 16) | (lsw & 0xffff);\n}\nfunction bitRotateLeft(num, cnt) {\n    return (num << cnt) | (num >>> (32 - cnt));\n}\nfunction md5cmn(q, a, b, x, s, t) {\n    return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n    return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n    return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n    return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n    return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\nexport default md5;\n","import parse from './parse.js';\nimport { unsafeStringify } from './stringify.js';\nexport function stringToBytes(str) {\n    str = unescape(encodeURIComponent(str));\n    const bytes = new Uint8Array(str.length);\n    for (let i = 0; i < str.length; ++i) {\n        bytes[i] = str.charCodeAt(i);\n    }\n    return bytes;\n}\nexport const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function v35(version, hash, value, namespace, buf, offset) {\n    const valueBytes = typeof value === 'string' ? stringToBytes(value) : value;\n    const namespaceBytes = typeof namespace === 'string' ? parse(namespace) : namespace;\n    if (typeof namespace === 'string') {\n        namespace = parse(namespace);\n    }\n    if (namespace?.length !== 16) {\n        throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n    }\n    let bytes = new Uint8Array(16 + valueBytes.length);\n    bytes.set(namespaceBytes);\n    bytes.set(valueBytes, namespaceBytes.length);\n    bytes = hash(bytes);\n    bytes[6] = (bytes[6] & 0x0f) | version;\n    bytes[8] = (bytes[8] & 0x3f) | 0x80;\n    if (buf) {\n        offset = offset || 0;\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n        for (let i = 0; i < 16; ++i) {\n            buf[offset + i] = bytes[i];\n        }\n        return buf;\n    }\n    return unsafeStringify(bytes);\n}\n","import md5 from './md5.js';\nimport v35, { DNS, URL } from './v35.js';\nexport { DNS, URL } from './v35.js';\nfunction v3(value, namespace, buf, offset) {\n    return v35(0x30, md5, value, namespace, buf, offset);\n}\nv3.DNS = DNS;\nv3.URL = URL;\nexport default v3;\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction _v4(options, buf, offset) {\n    options = options || {};\n    const rnds = options.random ?? options.rng?.() ?? rng();\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    rnds[6] = (rnds[6] & 0x0f) | 0x40;\n    rnds[8] = (rnds[8] & 0x3f) | 0x80;\n    if (buf) {\n        offset = offset || 0;\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n        for (let i = 0; i < 16; ++i) {\n            buf[offset + i] = rnds[i];\n        }\n        return buf;\n    }\n    return unsafeStringify(rnds);\n}\nfunction v4(options, buf, offset) {\n    if (native.randomUUID && !buf && !options) {\n        return native.randomUUID();\n    }\n    return _v4(options, buf, offset);\n}\nexport default v4;\n","function f(s, x, y, z) {\n    switch (s) {\n        case 0:\n            return (x & y) ^ (~x & z);\n        case 1:\n            return x ^ y ^ z;\n        case 2:\n            return (x & y) ^ (x & z) ^ (y & z);\n        case 3:\n            return x ^ y ^ z;\n    }\n}\nfunction ROTL(x, n) {\n    return (x << n) | (x >>> (32 - n));\n}\nfunction sha1(bytes) {\n    const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n    const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n    const newBytes = new Uint8Array(bytes.length + 1);\n    newBytes.set(bytes);\n    newBytes[bytes.length] = 0x80;\n    bytes = newBytes;\n    const l = bytes.length / 4 + 2;\n    const N = Math.ceil(l / 16);\n    const M = new Array(N);\n    for (let i = 0; i < N; ++i) {\n        const arr = new Uint32Array(16);\n        for (let j = 0; j < 16; ++j) {\n            arr[j] =\n                (bytes[i * 64 + j * 4] << 24) |\n                    (bytes[i * 64 + j * 4 + 1] << 16) |\n                    (bytes[i * 64 + j * 4 + 2] << 8) |\n                    bytes[i * 64 + j * 4 + 3];\n        }\n        M[i] = arr;\n    }\n    M[N - 1][14] = ((bytes.length - 1) * 8) / Math.pow(2, 32);\n    M[N - 1][14] = Math.floor(M[N - 1][14]);\n    M[N - 1][15] = ((bytes.length - 1) * 8) & 0xffffffff;\n    for (let i = 0; i < N; ++i) {\n        const W = new Uint32Array(80);\n        for (let t = 0; t < 16; ++t) {\n            W[t] = M[i][t];\n        }\n        for (let t = 16; t < 80; ++t) {\n            W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n        }\n        let a = H[0];\n        let b = H[1];\n        let c = H[2];\n        let d = H[3];\n        let e = H[4];\n        for (let t = 0; t < 80; ++t) {\n            const s = Math.floor(t / 20);\n            const T = (ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t]) >>> 0;\n            e = d;\n            d = c;\n            c = ROTL(b, 30) >>> 0;\n            b = a;\n            a = T;\n        }\n        H[0] = (H[0] + a) >>> 0;\n        H[1] = (H[1] + b) >>> 0;\n        H[2] = (H[2] + c) >>> 0;\n        H[3] = (H[3] + d) >>> 0;\n        H[4] = (H[4] + e) >>> 0;\n    }\n    return Uint8Array.of(H[0] >> 24, H[0] >> 16, H[0] >> 8, H[0], H[1] >> 24, H[1] >> 16, H[1] >> 8, H[1], H[2] >> 24, H[2] >> 16, H[2] >> 8, H[2], H[3] >> 24, H[3] >> 16, H[3] >> 8, H[3], H[4] >> 24, H[4] >> 16, H[4] >> 8, H[4]);\n}\nexport default sha1;\n","import sha1 from './sha1.js';\nimport v35, { DNS, URL } from './v35.js';\nexport { DNS, URL } from './v35.js';\nfunction v5(value, namespace, buf, offset) {\n    return v35(0x50, sha1, value, namespace, buf, offset);\n}\nv5.DNS = DNS;\nv5.URL = URL;\nexport default v5;\n","import { unsafeStringify } from './stringify.js';\nimport v1 from './v1.js';\nimport v1ToV6 from './v1ToV6.js';\nfunction v6(options, buf, offset) {\n    options ??= {};\n    offset ??= 0;\n    let bytes = v1({ ...options, _v6: true }, new Uint8Array(16));\n    bytes = v1ToV6(bytes);\n    if (buf) {\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n        for (let i = 0; i < 16; i++) {\n            buf[offset + i] = bytes[i];\n        }\n        return buf;\n    }\n    return unsafeStringify(bytes);\n}\nexport default v6;\n","import parse from './parse.js';\nimport { unsafeStringify } from './stringify.js';\nexport default function v6ToV1(uuid) {\n    const v6Bytes = typeof uuid === 'string' ? parse(uuid) : uuid;\n    const v1Bytes = _v6ToV1(v6Bytes);\n    return typeof uuid === 'string' ? unsafeStringify(v1Bytes) : v1Bytes;\n}\nfunction _v6ToV1(v6Bytes) {\n    return Uint8Array.of(((v6Bytes[3] & 0x0f) << 4) | ((v6Bytes[4] >> 4) & 0x0f), ((v6Bytes[4] & 0x0f) << 4) | ((v6Bytes[5] & 0xf0) >> 4), ((v6Bytes[5] & 0x0f) << 4) | (v6Bytes[6] & 0x0f), v6Bytes[7], ((v6Bytes[1] & 0x0f) << 4) | ((v6Bytes[2] & 0xf0) >> 4), ((v6Bytes[2] & 0x0f) << 4) | ((v6Bytes[3] & 0xf0) >> 4), 0x10 | ((v6Bytes[0] & 0xf0) >> 4), ((v6Bytes[0] & 0x0f) << 4) | ((v6Bytes[1] & 0xf0) >> 4), v6Bytes[8], v6Bytes[9], v6Bytes[10], v6Bytes[11], v6Bytes[12], v6Bytes[13], v6Bytes[14], v6Bytes[15]);\n}\n","import rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nconst _state = {};\nfunction v7(options, buf, offset) {\n    let bytes;\n    if (options) {\n        bytes = v7Bytes(options.random ?? options.rng?.() ?? rng(), options.msecs, options.seq, buf, offset);\n    }\n    else {\n        const now = Date.now();\n        const rnds = rng();\n        updateV7State(_state, now, rnds);\n        bytes = v7Bytes(rnds, _state.msecs, _state.seq, buf, offset);\n    }\n    return buf ?? unsafeStringify(bytes);\n}\nexport function updateV7State(state, now, rnds) {\n    state.msecs ??= -Infinity;\n    state.seq ??= 0;\n    if (now > state.msecs) {\n        state.seq = (rnds[6] << 23) | (rnds[7] << 16) | (rnds[8] << 8) | rnds[9];\n        state.msecs = now;\n    }\n    else {\n        state.seq = (state.seq + 1) | 0;\n        if (state.seq === 0) {\n            state.msecs++;\n        }\n    }\n    return state;\n}\nfunction v7Bytes(rnds, msecs, seq, buf, offset = 0) {\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    if (!buf) {\n        buf = new Uint8Array(16);\n        offset = 0;\n    }\n    else {\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n    }\n    msecs ??= Date.now();\n    seq ??= ((rnds[6] * 0x7f) << 24) | (rnds[7] << 16) | (rnds[8] << 8) | rnds[9];\n    buf[offset++] = (msecs / 0x10000000000) & 0xff;\n    buf[offset++] = (msecs / 0x100000000) & 0xff;\n    buf[offset++] = (msecs / 0x1000000) & 0xff;\n    buf[offset++] = (msecs / 0x10000) & 0xff;\n    buf[offset++] = (msecs / 0x100) & 0xff;\n    buf[offset++] = msecs & 0xff;\n    buf[offset++] = 0x70 | ((seq >>> 28) & 0x0f);\n    buf[offset++] = (seq >>> 20) & 0xff;\n    buf[offset++] = 0x80 | ((seq >>> 14) & 0x3f);\n    buf[offset++] = (seq >>> 6) & 0xff;\n    buf[offset++] = ((seq << 2) & 0xff) | (rnds[10] & 0x03);\n    buf[offset++] = rnds[11];\n    buf[offset++] = rnds[12];\n    buf[offset++] = rnds[13];\n    buf[offset++] = rnds[14];\n    buf[offset++] = rnds[15];\n    return buf;\n}\nexport default v7;\n","import validate from './validate.js';\nfunction version(uuid) {\n    if (!validate(uuid)) {\n        throw TypeError('Invalid UUID');\n    }\n    return parseInt(uuid.slice(14, 15), 16);\n}\nexport default version;\n","/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\n// todo: understand if we can generate this list reading the corresponding Sass file\n// see: https://sergiocarracedo.es/2020/07/17/sharing-variables-between-scss-and-typescript/\n\nexport const hdsBreakpoints = {\n  sm: { value: 480, px: '480px', rem: '30rem' },\n  md: { value: 768, px: '768px', rem: '48rem' },\n  lg: { value: 1088, px: '1088px', rem: '68rem' },\n  xl: { value: 1440, px: '1440px', rem: '90rem' },\n  xxl: { value: 1920, px: ' 1920px', rem: '120rem' },\n};\n","import BoundedPolicy from './bounded-policy';\nimport { STARTED, QUEUED } from './execution-states';\n\nclass EnqueuedReducer {\n  constructor(remainingSlots) {\n    this.remainingSlots = remainingSlots;\n  }\n\n  step() {\n    if (this.remainingSlots > 0) {\n      this.remainingSlots--;\n      return STARTED;\n    } else {\n      return QUEUED;\n    }\n  }\n}\n\nclass EnqueuedPolicy extends BoundedPolicy {\n  makeReducer() {\n    return new EnqueuedReducer(this.maxConcurrency);\n  }\n}\n\nexport default EnqueuedPolicy;\n","import type BasicDropdown from '../components/basic-dropdown.gts';\nimport type { VerticalPosition, HorizontalPosition } from '../types.ts';\n\n// To avoid breaking the current types export we need this\nexport type { VerticalPosition, HorizontalPosition };\n\nexport interface CalculatePositionOptions {\n  horizontalPosition: HorizontalPosition;\n  verticalPosition: VerticalPosition;\n  matchTriggerWidth: boolean;\n  previousHorizontalPosition?: HorizontalPosition | undefined;\n  previousVerticalPosition?: VerticalPosition | undefined;\n  renderInPlace: boolean;\n  dropdown: BasicDropdown;\n}\n\nexport type CalculatePositionResultStyle = {\n  top?: number | undefined;\n  left?: number | undefined;\n  right?: number | undefined;\n  width?: number | undefined;\n  height?: number | undefined;\n  [key: string]: string | number | undefined;\n};\n\nexport type CalculatePositionResult = {\n  horizontalPosition: HorizontalPosition;\n  verticalPosition: VerticalPosition;\n  style: CalculatePositionResultStyle;\n};\n\nexport type CalculatePosition = (\n  trigger: Element,\n  content: HTMLElement,\n  destination: HTMLElement,\n  options: CalculatePositionOptions,\n) => CalculatePositionResult;\n\nexport const calculateWormholedPosition: CalculatePosition = (\n  trigger,\n  content,\n  destination,\n  {\n    horizontalPosition,\n    verticalPosition,\n    matchTriggerWidth,\n    previousHorizontalPosition,\n    previousVerticalPosition,\n  },\n) => {\n  // Collect information about all the involved DOM elements\n  const scroll = { left: window.pageXOffset, top: window.pageYOffset };\n  let { left: triggerLeft, top: triggerTop } = trigger.getBoundingClientRect();\n  const { width: triggerWidth, height: triggerHeight } =\n    trigger.getBoundingClientRect();\n  const { height: dropdownHeight } = content.getBoundingClientRect();\n  let { width: dropdownWidth } = content.getBoundingClientRect();\n  const viewportWidth = document.body.clientWidth || window.innerWidth;\n  const style: CalculatePositionResultStyle = {};\n\n  // Apply containers' offset\n  let anchorElement = destination.parentNode as HTMLElement;\n\n  if (anchorElement instanceof ShadowRoot) {\n    anchorElement = anchorElement.host as HTMLElement;\n  }\n\n  let anchorPosition = window.getComputedStyle(anchorElement).position;\n  while (\n    anchorPosition !== 'relative' &&\n    anchorPosition !== 'absolute' &&\n    anchorElement.tagName.toUpperCase() !== 'BODY' &&\n    !(anchorElement.parentNode instanceof ShadowRoot)\n  ) {\n    anchorElement = anchorElement.parentNode as HTMLElement;\n    anchorPosition = window.getComputedStyle(anchorElement).position;\n  }\n  if (anchorPosition === 'relative' || anchorPosition === 'absolute') {\n    const rect = anchorElement.getBoundingClientRect();\n    triggerLeft = triggerLeft - rect.left;\n    triggerTop = triggerTop - rect.top;\n    const { offsetParent } = anchorElement;\n    if (offsetParent) {\n      triggerLeft -= offsetParent.scrollLeft;\n      triggerTop -= offsetParent.scrollTop;\n    }\n  }\n\n  // Calculate drop down width\n  dropdownWidth = matchTriggerWidth ? triggerWidth : dropdownWidth;\n  if (matchTriggerWidth) {\n    style.width = dropdownWidth;\n  }\n\n  /**\n   * Fixes bug where the dropdown always stays on the same position on the screen when\n   * the <body> is relatively positioned\n   */\n  const isBodyPositionRelative =\n    window.getComputedStyle(document.body).getPropertyValue('position') ===\n    'relative';\n\n  // Calculate horizontal position\n  let triggerLeftWithScroll = triggerLeft;\n\n  if (!isBodyPositionRelative) {\n    triggerLeftWithScroll += scroll.left;\n  }\n\n  if (horizontalPosition === 'auto' || horizontalPosition === 'auto-left') {\n    // Calculate the number of visible horizontal pixels if we were to place the\n    // dropdown on the left and right\n    const leftVisible =\n      Math.min(viewportWidth, triggerLeft + dropdownWidth) -\n      Math.max(0, triggerLeft);\n    const rightVisible =\n      Math.min(viewportWidth, triggerLeft + triggerWidth) -\n      Math.max(0, triggerLeft + triggerWidth - dropdownWidth);\n\n    if (dropdownWidth > leftVisible && rightVisible > leftVisible) {\n      // If the drop down won't fit left-aligned, and there is more space on the\n      // right than on the left, then force right-aligned\n      horizontalPosition = 'right';\n    } else if (dropdownWidth > rightVisible && leftVisible > rightVisible) {\n      // If the drop down won't fit right-aligned, and there is more space on\n      // the left than on the right, then force left-aligned\n      horizontalPosition = 'left';\n    } else {\n      // Keep same position as previous\n      horizontalPosition = previousHorizontalPosition || 'left';\n    }\n  } else if (horizontalPosition === 'auto-right') {\n    // Calculate the number of visible horizontal pixels if we were to place the\n    // dropdown on the left and right\n    const leftVisible =\n      Math.min(viewportWidth, triggerLeft + dropdownWidth) -\n      Math.max(0, triggerLeft);\n    const rightVisible =\n      Math.min(viewportWidth, triggerLeft + triggerWidth) -\n      Math.max(0, triggerLeft + triggerWidth - dropdownWidth);\n\n    if (dropdownWidth > rightVisible && leftVisible > rightVisible) {\n      // If the drop down won't fit right-aligned, and there is more space on the\n      // left than on the right, then force left-aligned\n      horizontalPosition = 'left';\n    } else if (dropdownWidth > leftVisible && rightVisible > leftVisible) {\n      // If the drop down won't fit left-aligned, and there is more space on\n      // the right than on the left, then force right-aligned\n      horizontalPosition = 'right';\n    } else {\n      // Keep same position as previous\n      horizontalPosition = previousHorizontalPosition || 'right';\n    }\n  }\n  if (horizontalPosition === 'right') {\n    style.right = viewportWidth - (triggerLeftWithScroll + triggerWidth);\n  } else if (horizontalPosition === 'center') {\n    style.left = triggerLeftWithScroll + (triggerWidth - dropdownWidth) / 2;\n  } else {\n    style.left = triggerLeftWithScroll;\n  }\n\n  // Calculate vertical position\n  let triggerTopWithScroll = triggerTop;\n\n  if (!isBodyPositionRelative) {\n    triggerTopWithScroll += scroll.top;\n  }\n\n  if (verticalPosition === 'above') {\n    style.top = triggerTopWithScroll - dropdownHeight;\n  } else if (verticalPosition === 'below') {\n    style.top = triggerTopWithScroll + triggerHeight;\n  } else {\n    const viewportBottom = scroll.top + window.innerHeight;\n    const enoughRoomBelow =\n      triggerTopWithScroll + triggerHeight + dropdownHeight < viewportBottom;\n    const enoughRoomAbove = triggerTop > dropdownHeight;\n\n    if (!enoughRoomBelow && !enoughRoomAbove) {\n      verticalPosition = 'below';\n    } else if (\n      previousVerticalPosition === 'below' &&\n      !enoughRoomBelow &&\n      enoughRoomAbove\n    ) {\n      verticalPosition = 'above';\n    } else if (\n      previousVerticalPosition === 'above' &&\n      !enoughRoomAbove &&\n      enoughRoomBelow\n    ) {\n      verticalPosition = 'below';\n    } else if (!previousVerticalPosition) {\n      verticalPosition = enoughRoomBelow ? 'below' : 'above';\n    } else {\n      verticalPosition = previousVerticalPosition;\n    }\n    style.top =\n      triggerTopWithScroll +\n      (verticalPosition === 'below' ? triggerHeight : -dropdownHeight);\n  }\n\n  return { horizontalPosition, verticalPosition, style };\n};\n\nexport const calculateInPlacePosition: CalculatePosition = (\n  trigger,\n  content,\n  _destination,\n  { horizontalPosition, verticalPosition },\n) => {\n  let dropdownRect;\n  const positionData: CalculatePositionResult = {\n    horizontalPosition: 'left',\n    verticalPosition: 'below',\n    style: {},\n  };\n  if (horizontalPosition === 'auto') {\n    const triggerRect = trigger.getBoundingClientRect();\n    dropdownRect = content.getBoundingClientRect();\n    const viewportRight = window.pageXOffset + window.innerWidth;\n    positionData.horizontalPosition =\n      triggerRect.left + dropdownRect.width > viewportRight ? 'right' : 'left';\n  } else if (horizontalPosition === 'center') {\n    const { width: triggerWidth } = trigger.getBoundingClientRect();\n    const { width: dropdownWidth } = content.getBoundingClientRect();\n    positionData.style = { left: (triggerWidth - dropdownWidth) / 2 };\n  } else if (horizontalPosition === 'auto-right') {\n    const triggerRect = trigger.getBoundingClientRect();\n    const dropdownRect = content.getBoundingClientRect();\n    positionData.horizontalPosition =\n      triggerRect.right > dropdownRect.width ? 'right' : 'left';\n  } else if (horizontalPosition === 'right') {\n    positionData.horizontalPosition = 'right';\n  }\n\n  if (verticalPosition === 'above') {\n    positionData.verticalPosition = verticalPosition;\n    dropdownRect = dropdownRect || content.getBoundingClientRect();\n    positionData.style.top = -dropdownRect.height;\n  } else {\n    positionData.verticalPosition = 'below';\n  }\n  return positionData;\n};\n\nexport function getScrollParent(element: Element) {\n  let style = window.getComputedStyle(element);\n  const excludeStaticParent = style.position === 'absolute';\n  const overflowRegex = /(auto|scroll)/;\n\n  if (style.position === 'fixed') return document.body;\n  for (\n    let parent: Element | null = element;\n    (parent = parent.parentElement);\n  ) {\n    style = window.getComputedStyle(parent);\n    if (excludeStaticParent && style.position === 'static') {\n      continue;\n    }\n    if (\n      overflowRegex.test(style.overflow + style.overflowY + style.overflowX)\n    ) {\n      return parent;\n    }\n  }\n\n  return document.body;\n}\nconst calculatePosition: CalculatePosition = (\n  trigger,\n  content,\n  destination,\n  options,\n) => {\n  if (options.renderInPlace) {\n    return calculateInPlacePosition(trigger, content, destination, options);\n  } else {\n    return calculateWormholedPosition(trigger, content, destination, options);\n  }\n};\n\nexport default calculatePosition;\n","export default function hasMoved(\n  endEvent: TouchEvent,\n  moveEvent?: TouchEvent,\n): boolean {\n  if (!moveEvent) {\n    return false;\n  }\n\n  if (\n    !endEvent.changedTouches?.[0] ||\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n    (moveEvent.changedTouches[0] as any).touchType !== 'stylus'\n  ) {\n    return true;\n  }\n\n  // Distinguish stylus scroll and tap: if touch \"distance\" < 5px, we consider it a tap\n  const horizontalDistance = Math.abs(\n    (moveEvent.changedTouches[0]?.pageX ?? 0) -\n      endEvent.changedTouches[0].pageX,\n  );\n  const verticalDistance = Math.abs(\n    (moveEvent.changedTouches[0]?.pageY ?? 0) -\n      endEvent.changedTouches[0].pageY,\n  );\n  return horizontalDistance >= 5 || verticalDistance >= 5;\n}\n","import { setOwner, getOwner } from '@ember/application';\nimport EmberObject, { get, set } from '@ember/object';\nimport { isDestroying, registerDestructor } from '@ember/destroyable';\nimport { Task as BaseTask } from './external/task/task';\nimport { TaskInstance } from './task-instance';\nimport { TaskInstanceExecutor } from './external/task-instance/executor';\nimport { TASKABLE_MIXIN } from './taskable-mixin';\nimport { TRACKED_INITIAL_TASK_STATE } from './tracked-state';\nimport { CANCEL_KIND_LIFESPAN_END } from './external/task-instance/cancelation';\n\n/**\n  The `Task` object lives on a host Ember object (e.g.\n  a Component, Route, or Controller). You call the\n  {@linkcode Task#perform .perform()} method on this object\n  to create run individual {@linkcode TaskInstance}s,\n  and at any point, you can call the {@linkcode Task#cancelAll .cancelAll()}\n  method on this object to cancel all running or enqueued\n  {@linkcode TaskInstance}s.\n\n  <style>\n    .ignore-this--this-is-here-to-hide-constructor,\n    #Task { display: none }\n  </style>\n\n  @class Task\n*/\nexport class Task extends BaseTask {\n  /**\n   * `true` if any current task instances are running.\n   *\n   * @memberof Task\n   * @member {boolean} isRunning\n   * @instance\n   * @readOnly\n   */\n  /**\n   * `true` if any future task instances are queued.\n   *\n   * @memberof Task\n   * @member {boolean} isQueued\n   * @instance\n   * @readOnly\n   */\n  /**\n   * `true` if the task is not in the running or queued state.\n   *\n   * @memberof Task\n   * @member {boolean} isIdle\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The current state of the task: `\"running\"`, `\"queued\"` or `\"idle\"`.\n   *\n   * @memberof Task\n   * @member {string} state\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recently started task instance.\n   *\n   * @memberof Task\n   * @member {TaskInstance} last\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recent task instance that is currently running.\n   *\n   * @memberof Task\n   * @member {TaskInstance} lastRunning\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recently performed task instance.\n   *\n   * @memberof Task\n   * @member {TaskInstance} lastPerformed\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recent task instance that succeeded.\n   *\n   * @memberof Task\n   * @member {TaskInstance} lastSuccessful\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recently completed task instance.\n   *\n   * @memberof Task\n   * @member {TaskInstance} lastComplete\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recent task instance that errored.\n   *\n   * @memberof Task\n   * @member {TaskInstance} lastErrored\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recently canceled task instance.\n   *\n   * @memberof Task\n   * @member {TaskInstance} lastCanceled\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The most recent task instance that is incomplete.\n   *\n   * @memberof Task\n   * @member {TaskInstance} lastIncomplete\n   * @instance\n   * @readOnly\n   */\n  /**\n   * The number of times this task has been performed.\n   *\n   * @memberof Task\n   * @member {number} performCount\n   * @instance\n   * @readOnly\n   */\n\n  constructor(options) {\n    super(options);\n\n    if (!isDestroying(this.context)) {\n      registerDestructor(this.context, () => {\n        this.cancelAll({\n          reason: 'the object it lives on was destroyed or unrendered',\n          cancelRequestKind: CANCEL_KIND_LIFESPAN_END,\n        });\n      });\n    }\n  }\n\n  /**\n   * Flags the task as linked to the parent task's lifetime. Must be called\n   * within another task's perform function. The task will be cancelled if the\n   * parent task is canceled as well.\n   *\n   * ember-concurrency will indicate when this may be needed.\n   *\n   * @method linked\n   * @memberof Task\n   * @instance\n   *\n   */\n\n  /**\n   * Flags the task as not linked to the parent task's lifetime. Must be called\n   * within another task's perform function. The task will NOT be cancelled if the\n   * parent task is canceled.\n   *\n   * This is useful for avoiding the so-called \"self-cancel loop\" for tasks.\n   * ember-concurrency will indicate when this may be needed.\n   *\n   * @method unlinked\n   * @memberof Task\n   * @instance\n   *\n   */\n\n  /**\n   * Creates a new {@linkcode TaskInstance} and attempts to run it right away.\n   * If running this task instance would increase the task's concurrency\n   * to a number greater than the task's maxConcurrency, this task\n   * instance might be immediately canceled (dropped), or enqueued\n   * to run at later time, after the currently running task(s) have finished.\n   *\n   * @method perform\n   * @memberof Task\n   * @param {*} arg* - args to pass to the task function\n   * @instance\n   *\n   * @fires TaskInstance#TASK_NAME:started\n   * @fires TaskInstance#TASK_NAME:succeeded\n   * @fires TaskInstance#TASK_NAME:errored\n   * @fires TaskInstance#TASK_NAME:canceled\n   *\n   */\n\n  /**\n   * Cancels all running or queued `TaskInstance`s for this Task.\n   * If you're trying to cancel a specific TaskInstance (rather\n   * than all of the instances running under this task) call\n   * `.cancel()` on the specific TaskInstance.\n   *\n   * @method cancelAll\n   * @memberof Task\n   * @param options.reason A descriptive reason the task was\n   *   cancelled. Defaults to `\".cancelAll() was explicitly called\n   *   on the Task\"`.\n   * @param options.resetState If true, will clear the task state\n   *   (`last*` and `performCount` properties will be set to initial\n   *   values). Defaults to false.\n   * @instance\n   * @async\n   *\n   */\n\n  get _isAlive() {\n    return !isDestroying(this.context);\n  }\n\n  _taskInstanceFactory(args, performType, linkedObject) {\n    let options = this._taskInstanceOptions(args, performType, linkedObject);\n    let taskInstance = new TaskInstance(options);\n    return taskInstance;\n  }\n\n  _clone() {\n    return new Task({\n      context: this.context,\n      debug: this.debug,\n      env: this.env,\n      generatorFactory: this.generatorFactory,\n      group: this.group,\n      hasEnabledEvents: this.hasEnabledEvents,\n      name: this.name,\n      onStateCallback: this.onStateCallback,\n      scheduler: this.scheduler,\n    });\n  }\n}\n\nif (TRACKED_INITIAL_TASK_STATE) {\n  Object.defineProperties(Task.prototype, TRACKED_INITIAL_TASK_STATE);\n}\n\nObject.assign(Task.prototype, TASKABLE_MIXIN);\n\nconst currentTaskInstanceSymbol = '__ec__encap_current_ti';\nexport class EncapsulatedTask extends Task {\n  constructor(options) {\n    super(options);\n    this.taskObj = options.taskObj;\n    this._encapsulatedTaskStates = new WeakMap();\n    this._encapsulatedTaskInstanceProxies = new WeakMap();\n  }\n\n  _getEncapsulatedTaskClass() {\n    let encapsulatedTaskImplClass = this._encapsulatedTaskImplClass;\n\n    if (!encapsulatedTaskImplClass) {\n      // eslint-disable-next-line ember/no-classic-classes\n      encapsulatedTaskImplClass = EmberObject.extend(this.taskObj, {\n        unknownProperty(key) {\n          let currentInstance = this[currentTaskInstanceSymbol];\n          return currentInstance ? currentInstance[key] : undefined;\n        },\n      });\n    }\n\n    return encapsulatedTaskImplClass;\n  }\n\n  _taskInstanceFactory(args, performType) {\n    let owner = getOwner(this.context);\n    let taskInstanceProxy;\n    let encapsulatedTaskImpl = this._getEncapsulatedTaskClass().create({\n      context: this.context,\n    });\n    setOwner(encapsulatedTaskImpl, owner);\n\n    let generatorFactory = () =>\n      encapsulatedTaskImpl.perform.apply(taskInstanceProxy, args);\n    let taskInstance = new TaskInstance({\n      task: this,\n      args,\n      executor: new TaskInstanceExecutor({\n        generatorFactory,\n        env: this.env,\n        debug: this.debug,\n      }),\n      performType,\n      hasEnabledEvents: this.hasEnabledEvents,\n    });\n    encapsulatedTaskImpl[currentTaskInstanceSymbol] = taskInstance;\n\n    this._encapsulatedTaskStates.set(taskInstance, encapsulatedTaskImpl);\n\n    taskInstanceProxy = this._wrappedEncapsulatedTaskInstance(taskInstance);\n\n    return taskInstanceProxy;\n  }\n\n  _wrappedEncapsulatedTaskInstance(taskInstance) {\n    if (!taskInstance) {\n      return null;\n    }\n\n    let _encapsulatedTaskInstanceProxies =\n      this._encapsulatedTaskInstanceProxies;\n    let proxy = _encapsulatedTaskInstanceProxies.get(taskInstance);\n\n    if (!proxy) {\n      let encapsulatedTaskImpl = this._encapsulatedTaskStates.get(taskInstance);\n\n      proxy = new Proxy(taskInstance, {\n        get(obj, prop) {\n          return prop in obj\n            ? obj[prop]\n            : get(encapsulatedTaskImpl, prop.toString());\n        },\n        set(obj, prop, value) {\n          if (prop in obj) {\n            obj[prop] = value;\n          } else {\n            set(encapsulatedTaskImpl, prop.toString(), value);\n          }\n          return true;\n        },\n        has(obj, prop) {\n          return prop in obj || prop in encapsulatedTaskImpl;\n        },\n        ownKeys(obj) {\n          return Reflect.ownKeys(obj).concat(\n            Reflect.ownKeys(encapsulatedTaskImpl),\n          );\n        },\n        defineProperty(obj, prop, descriptor) {\n          // Ember < 3.16 uses a WeakMap for value storage, keyed to the proxy.\n          // We need to ensure that when we use setProperties to update it, and\n          // it creates Meta, that it uses the proxy to key, otherwise we'll\n          // have two different values stores in Meta, one which won't render.\n          let proxy = _encapsulatedTaskInstanceProxies.get(taskInstance);\n          if (proxy) {\n            if (descriptor.get) {\n              descriptor.get = descriptor.get.bind(proxy);\n            } else if (proxy && descriptor.set) {\n              descriptor.set = descriptor.set.bind(proxy);\n            }\n          }\n\n          return Reflect.defineProperty(encapsulatedTaskImpl, prop, descriptor);\n        },\n        getOwnPropertyDescriptor(obj, prop) {\n          return prop in obj\n            ? Reflect.getOwnPropertyDescriptor(obj, prop)\n            : Reflect.getOwnPropertyDescriptor(encapsulatedTaskImpl, prop);\n        },\n      });\n\n      _encapsulatedTaskInstanceProxies.set(taskInstance, proxy);\n    }\n\n    return proxy;\n  }\n}\n","export default function crelt() {\n  var elt = arguments[0]\n  if (typeof elt == \"string\") elt = document.createElement(elt)\n  var i = 1, next = arguments[1]\n  if (next && typeof next == \"object\" && next.nodeType == null && !Array.isArray(next)) {\n    for (var name in next) if (Object.prototype.hasOwnProperty.call(next, name)) {\n      var value = next[name]\n      if (typeof value == \"string\") elt.setAttribute(name, value)\n      else if (value != null) elt[name] = value\n    }\n    i++\n  }\n  for (; i < arguments.length; i++) add(elt, arguments[i])\n  return elt\n}\n\nfunction add(elt, child) {\n  if (typeof child == \"string\") {\n    elt.appendChild(document.createTextNode(child))\n  } else if (child == null) {\n  } else if (child.nodeType != null) {\n    elt.appendChild(child)\n  } else if (Array.isArray(child)) {\n    for (var i = 0; i < child.length; i++) add(elt, child[i])\n  } else {\n    throw new RangeError(\"Unsupported child node: \" + child)\n  }\n}\n"],"mappings":"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,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,UAAY,GACrwN6E,GAAU,sdACVC,GAAU9E,GAAqB,CAAC,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,UAAY,GAC7yB+E,GAAU,g2GACVC,GAAUhF,GAAqB,CAAC,IAAQ,IAAQ,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,UAAY,GACnrLiF,GAAU,uFACVC,GAAUlF,GAAqB,CAAC,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,SAAW,GACzKmF,GAAU,s3HACVC,GAAUpF,GAAqB,CAAC,CAAC,IAAK,KAAM,CAAC,IAAQ,KAAS,CAAC,IAAQ,KAAS,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,UAAY,GAC3/MqF,GAAU,kpCACVC,GAAUtF,GAAqB,CAAC,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,SAAW,GAC78DuF,GAAU,6mEACVC,GAAUxF,GAAqB,CAAC,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,CAAC,IAAU,KAAW,IAAU,CAAC,IAAU,KAAW,IAAU,IAAU,IAAU,IAAU,IAAU,CAAC,IA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IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,KACHC,IAAG,KACHC,IAAG,KACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACH,IAAK,IACLC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG,IACHC,IAAG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QAAA,UAAxB0lB,CAAwB,MASxBC,EAAsB,SAAtBA,GAAsB,OAAtBA,EAAsBnoO,KAAA,IAAtBmoO,EAAsB1lB,KAAA,IAAtB0lB,EAAsBzlB,MAAA,IAAtBylB,EAAsBxlB,OAAA,KAAtBwlB,EAAsBpgR,QAAA,KAAtBogR,EAAsB50K,WAAA,KAAtB40K,EAAsBvlB,UAAA,KAAtBulB,EAAsBtlB,WAAA,KAAtBslB,CAAsB,O;ACIlC,SAAS+pD,EAAW70C,GAClB,OAAO,IAAIl/S,OAAO,MAAQk/S,EAAMnnT,KAAK,OAAS,QAChD,C;AAGA,MAoNMi8V,EAAWD,EApNI,CACnB,KACA,WACA,OACA,UACA,OACA,QACA,QACA,KACA,KACA,SACA,QACA,UACA,MACA,OACA,OACA,OACA,SAoMIE,EAAWF,EAhMI,CAEnB,MACA,OACA,QACA,gBACA,qBACA,YACA,QAEA,QACA,MACA,MACA,UACA,OACA,MAEA,eACA,gBACA,cAEA,eACA,QAEA,cACA,mBACA,aACA,cACA,qBACA,gBACA,aACA,cACA,gBACA,gBACA,eACA,iBAEA,SACA,WACA,WACA,aACA,YACA,QACA,UACA,QACA,UACA,aACA,2BACA,gBACA,0BACA,oBACA,kBACA,YACA,OACA,YACA,cACA,aACA,aACA,cACA,QAEA,mCACA,eACA,oBACA,iBACA,cACA,gBACA,cACA,uBAEA,aACA,kBAEA,WACA,WACA,cACA,UACA,WACA,WAEA,YAEA,cACA,oBAEA,WACA,aACA,UACA,YACA,YACA,SACA,YACA,YAEA,gBACA,gBACA,kBACA,mBACA,mBACA,0BACA,aACA,aACA,gBACA,eACA,4BACA,iBACA,kBACA,yBACA,kBACA,yBACA,gBACA,eACA,iBAEA,qBACA,yBAEA,gBACA,uBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBAEA,gBACA,aACA,YACA,YACA,cACA,cACA,yBACA,gBACA,wBACA,eAEA,oBACA,kBACA,mBACA,qBACA,qBACA,aACA,4BACA,cACA,gBACA,4CACA,yDACA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,QACA,SACA,SACA,OACA,SACA,SACA,QACA,MACA,UACA,MACA,QACA,QACA,KACA,WACA,WACA,QACA,KACA,QACA,OACA,KACA,QACA,KACA,IACA,KACA,MACA,QACA,QAGWq9P,EAAMr9P,EAAO,CACxB,MACA,IACA,WACA,cACA,eACA,eACA,gBACA,mBACA,SACA,WACA,OACA,OACA,UACA,eACA,cACA,SACA,OACA,IACA,QACA,WACA,QACA,QACA,YACA,OACA,iBACA,SACA,OACA,WACA,QACA,OACA,OACA,UACA,UACA,WACA,iBACA,OACA,OACA,QACA,SACA,SACA,OACA,WACA,QACA,OACA,QACA,OACA,UAGWs9P,EAAat9P,EAAO,CAC/B,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,iBACA,eACA,UACA,UACA,UACA,UACA,UACA,iBACA,UACA,UACA,cACA,eACA,WACA,eACA,qBACA,cACA,SACA,iBAOWu9P,EAAgBv9P,EAAO,CAClC,UACA,gBACA,SACA,UACA,YACA,mBACA,iBACA,gBACA,gBACA,gBACA,QACA,YACA,OACA,eACA,YACA,UACA,gBACA,SACA,MACA,aACA,UACA,QAGWw9P,EAASx9P,EAAO,CAC3B,OACA,WACA,SACA,UACA,QACA,SACA,KACA,aACA,gBACA,KACA,KACA,QACA,UACA,WACA,QACA,OACA,KACA,SACA,QACA,SACA,OACA,OACA,UACA,SACA,MACA,QACA,MACA,SACA,aACA,gBAKWy9P,EAAmBz9P,EAAO,CACrC,UACA,cACA,aACA,WACA,YACA,UACA,UACA,SACA,SACA,QACA,YACA,aACA,iBACA,cACA,SAGW/yH,EAAO+yH,EAAO,CAAC,UC1Rf50D,EAAO40D,EAAO,CACzB,SACA,SACA,QACA,MACA,iBACA,eACA,uBACA,WACA,aACA,UACA,SACA,UACA,cACA,cACA,UACA,OACA,QACA,QACA,QACA,OACA,UACA,UACA,aACA,WACA,eACA,SACA,cACA,WACA,WACA,UACA,MACA,WACA,0BACA,wBACA,WACA,YACA,UACA,eACA,cACA,OACA,MACA,UACA,SACA,SACA,OACA,OACA,WACA,KACA,QACA,YACA,YACA,QACA,OACA,QACA,OACA,OACA,UACA,OACA,MACA,MACA,YACA,QACA,SACA,MACA,YACA,WACA,QACA,OACA,QACA,UACA,aACA,SACA,OACA,UACA,OACA,UACA,cACA,cACA,UACA,gBACA,sBACA,SACA,UACA,UACA,aACA,WACA,MACA,WACA,MACA,WACA,OACA,OACA,UACA,aACA,QACA,WACA,QACA,OACA,QACA,OACA,OACA,UACA,QACA,MACA,SACA,OACA,QACA,UACA,WACA,QACA,YACA,OACA,SACA,SACA,QACA,QACA,OACA,UAGWxZ,EAAMwZ,EAAO,CACxB,gBACA,aACA,WACA,qBACA,YACA,SACA,gBACA,gBACA,UACA,gBACA,iBACA,QACA,OACA,KACA,QACA,OACA,gBACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,KACA,KACA,IACA,KACA,KACA,kBACA,YACA,UACA,UACA,oBACA,MACA,WACA,YACA,MACA,WACA,OACA,eACA,YACA,SACA,cACA,cACA,gBACA,cACA,YACA,mBACA,eACA,aACA,eACA,cACA,KACA,KACA,KACA,KACA,aACA,WACA,gBACA,oBACA,SACA,OACA,KACA,kBACA,KACA,MACA,YACA,IACA,KACA,KACA,KACA,KACA,UACA,YACA,aACA,WACA,OACA,eACA,iBACA,eACA,mBACA,iBACA,QACA,aACA,aACA,eACA,eACA,cACA,cACA,mBACA,YACA,MACA,OACA,YACA,QACA,SACA,OACA,MACA,OACA,aACA,SACA,WACA,UACA,QACA,SACA,cACA,SACA,WACA,cACA,OACA,aACA,sBACA,mBACA,eACA,iBACA,SACA,gBACA,sBACA,iBACA,IACA,KACA,KACA,SACA,OACA,OACA,cACA,YACA,UACA,SACA,SACA,QACA,OACA,kBACA,QACA,mBACA,mBACA,eACA,cACA,eACA,cACA,aACA,eACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,SACA,eACA,QACA,eACA,iBACA,WACA,cACA,UACA,UACA,YACA,mBACA,cACA,kBACA,mBACA,iBACA,aACA,OACA,KACA,KACA,UACA,SACA,gBACA,UACA,aACA,UACA,aACA,gBACA,gBACA,QACA,eACA,OACA,eACA,mBACA,mBACA,IACA,KACA,KACA,QACA,IACA,KACA,KACA,IACA,eAGW09P,EAAS19P,EAAO,CAC3B,SACA,cACA,QACA,WACA,QACA,cACA,cACA,gBACA,aACA,aACA,QACA,MACA,UACA,eACA,WACA,QACA,QACA,SACA,OACA,KACA,UACA,SACA,gBACA,SACA,SACA,iBACA,YACA,WACA,cACA,UACA,UACA,gBACA,WACA,WACA,OACA,WACA,WACA,aACA,UACA,SACA,SACA,cACA,gBACA,uBACA,YACA,YACA,aACA,WACA,iBACA,iBACA,YACA,UACA,QACA,UAGWygI,EAAMzgI,EAAO,CACxB,aACA,SACA,cACA,YACA,gBC1XW29P,EAAgBxC,EAAK,yBACrByC,GAAWzC,EAAK,yBAChB0C,GAAc1C,EAAK,eACnB2C,GAAY3C,EAAK,gCACjB4C,GAAY5C,EAAK,kBACjB6C,GAAiB7C,EAC5B,oGAEW8C,GAAoB9C,EAAK,yBACzB+C,GAAkB/C,EAC7B,+DAEWgD,GAAehD,EAAK,WACpBiD,GAAiBjD,EAAK,4BAKtBkD,GAAuBlD,EAAK,YAC5BmD,GAAuBnD,EAAK,WAC5BoD,GAAqBpD,EAAK,+BAC1BqD,GAAmBrD,EAAK,QC4D/BsD,GAA6B,CACjC,QACA,SACA,MACA,SACA,UACA,WACA,YACA,YAEIC,GAAwB1+P,EAAOiR,EAAS,CAAC,EAAGwtP,KAQ5CE,GAAsB,WAC1B,MAAMl1Z,EAA8B,CAAC;AAIrC,OAHA6xZ,EAAamD,GAA6BtvZ,IACxC1F,EAAI0F,GAAQgsZ,EAAK,IAAIpkZ,OAAO,KAAO5H,EAAO,wBAAyB,QAE9D6wJ,EAAOv2J,EAChB,CAN4B,GAwFtBm1Z,GAAoB,SACxBC,EACAlwZ,EACA0/N,EACAzuM,GAKA,OAAO28X,EAAqBsC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A,KACA,KACA,KAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,IACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KAEF//D,GAAM,CACJ,IACA,MAEFggE,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,KAEFC,GAAM,CACJ,IACA,KACA,KAEFC,GAAM,CACJ,IACA,KACA,KAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,KACA,KAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,KACA,KAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,KACA,KACA,IACA,KAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,KAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,KACA,KAEFC,GAAM,CACJ,IACA,IACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,KACA,KAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,IACA,MAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,KAEF9iE,GAAM,CACJ,IACA,IACA,KACA,MAEF+iE,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,KAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,KAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,KACA,KACA,IACA,KAEFC,GAAM,CACJ,KAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,KACA,KAEF30E,GAAM,CACJ,IACA,MAEF71a,GAAM,CACJ,IACA,IACA,KACA,MAEFyqf,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,KAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,KACA,KAEFC,GAAM,CACJ,KAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,IACA,KAEFC,GAAM,CACJ,KACA,KACA,IACA,KAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,KACA,IACA,IACA,MAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,KACA,KAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,KAEFl8e,GAAM,CACJ,IACA,IACA,KACA,MAEFm8e,GAAM,CACJ,IACA,IACA,MAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,MAEF3pO,GAAM,CACJ,IACA,KACA,KAEF4pO,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,KAEF/7e,GAAM,CACJ,KACA,KACA,IACA,KAEFg8e,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,KACA,KACA,IACA,KAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,KAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,IACA,MAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,KACA,KAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,KACA,KAEFC,GAAM,CACJ,KAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,IACA,MAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,KAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,KAEFC,GAAM,CACJ,KAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,IACA,MAEFC,GAAM,CACJ,IACA,IACA,MAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,IACA,MAEFC,GAAM,CACJ,IACA,IACA,MAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,MAEF7wD,GAAM,CACJ,IACA,KACA,IACA,MAEF8wD,GAAM,CACJ,KACA,KACA,IACA,KAEFC,GAAM,CACJ,KACA,KACA,IACA,KAEFC,GAAM,CACJ,IACA,KACA,KAEFC,GAAM,CACJ,KACA,KACA,IACA,KAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KACA,KAEFC,GAAM,CACJ,IACA,IACA,MAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,KAEFC,GAAM,CACJ,IACA,KACA,KAEFC,GAAM,CACJ,IACA,KACA,KACA,KAEFC,GAAM,CACJ,IACA,MAEFC,GAAM,CACJ,IACA,IACA,KACA,MAEFC,GAAM,CACJ,IACA,KACA,IACA,MAEFC,GAAM,CACJ,IACA,KAEF,QAAS,CACP,IACA,IACA,KACA,MAEF,SAAU,CACR,IACA,KACA,KACA,KAEF,QAAS,CACP,IACA,IACA,MAEF,SAAU,CACR,IACA,KACA,IACA,MAEF,QAAS,CACP,IACA,KACA,IACA,MAEF,QAAS,CACP,IACA,IACA,KACA,MAEF,QAAS,CACP,IACA,KACA,IACA,MAEF,QAAS,CACP,IACA,IACA,KACA,MAEF,QAAS,CACP,IACA,IACA,KACA,MAEF,QAAS,CACP,IACA,IACA,KACA,MAEF,QAAS,CACP,IACA,IACA,MAEF,QAAS,CACP,IACA,IACA,MAEF,QAAS,CACP,KACA,KACA,IACA,KAEF,QAAS,CACP,KACA,IACA,KAEF,QAAS,CACP,IACA,IACA,MAEF,QAAS,CACP,IACA,IACA,MAEF,QAAS,CACP,KACA,IACA,KAEF,QAAS,CACP,IACA,MAEF,QAAS,CACP,KACA,IACA,KAEF,QAAS,CACP,KACA,KACA,IACA,KAEF,QAAS,CACP,KACA,KACA,IACA,KAEF,QAAS,C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AAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACnE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAO,IAAK,KAAM,IAAK,KAC1D,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACjE,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IACf,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK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N,CACDhwI,KAAM,IACNgwI,MAAO,8CACN,CACDhwI,KAAM,KACNgwI,MAAO,KACN,CACDhwI,KAAM,KACNgwI,MAAO,KACN,CACDhwI,KAAM,KACNgwI,MAAO,KACN,CACDhwI,KAAM,KACNgwI,MAAO,KACN,CACDhwI,KAAM,IACNgwI,MAAO,aACN,CACDhwI,KAAM,IACNgwI,MAAO,SACN,CACDhwI,KAAM,IACNgwI,MAAO,oBACN,CACDhwI,KAAM,IACNgwI,MAAO,oBACN,CACDhwI,KAAM,IACNgwI,MAAO,kBACN,CACDhwI,KAAM,KACNgwI,MAAO,KACN,CACDhwI,KAAM,KACNgwI,MAAO,KACN,CACDhwI,KAAM,IACNgwI,MAAO,qCACN,CACDhwI,KAAM,IACNgwI,MAAO,WACN,CACDhwI,KAAM,KACNgwI,MAAO,KACN,CACDhwI,KAAM,IACNgwI,MAAO,aACN,CACDhwI,KAAM,IACNgwI,MAAO,QACN,CACDhwI,KAAM,IACNgwI,MAAO,kBACN,CACDhwI,KAAM,IACNgwI,MAAO,iBACN,CACDhwI,KAAM,IACNgwI,MAAO,uCACN,CACDhwI,KAAM,KACNgwI,MAAO,KACN,CACDhwI,KAAM,KACNgwI,MAAO,OACN,CACDhwI,KAAM,KACNgwI,MAAO,KACN,CACDhwI,KAAM,KACNgwI,MAAO,KACN,CACDhwI,KAAM,KACNgwI,MAAO,MACN,CACDhwI,KAAM,KACNgwI,MAAO,KACN,CACDhwI,KAAM,IACNgwI,MAAO,aACN,CACDhwI,KAAM,IACNgwI,MAAO,gBACN,CACDhwI,KAAM,IACNgwI,MAAO,oBACN,CACDhwI,KAAM,KACNgwI,MAAO,KACN,CACDhwI,KAAM,KACNgwI,MAAO,MACN,CACDhwI,KAAM,IACNgwI,MAAO,iCACN,CACDhwI,KAAM,IACNgwI,MAAO,QACN,CACDhwI,KAAM,KACNgwI,MAAO,KACN,CACDhwI,KAAM,KACNgwI,MAAO,KACN,CACDhwI,KAAM,KACNgwI,MAAO,KACN,CACDhwI,KAAM,MACNgwI,MAAO,KACN,CACDhwI,KAAM,MACNgwI,MAAO,KACN,CACDhwI,K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BE,6BAA6B1lhB,EAAM2lhB,GAC/B3lhB,EAAKwlhB,mBAAqB,IAAKxlhB,EAAKwlhB,sBAAuBG,EAC/D,GCzKEC,GAAqB,OAGrBC,GAAiC,CACnC,6CACA,6CACA,uDACA,kCACA,kCACA,yCACA,yCACA,iCACA,0BACA,2BACA,0BACA,gCACA,0BACA,wBACA,8BACA,8BACA,8BACA,8BACA,qCACA,qCACA,qCACA,qCACA,6BACA,sBACA,2CACA,wDACA,iDACA,mDACA,wDACA,iDACA,mDACA,sCACA,6CACA,6CACA,sDACA,8DACA,8CACA,iFACA,wEACA,uCACA,gDACA,uDACA,kCACA,+BACA,+BACA,yBACA,gCACA,kCACA,sCACA,2CACA,yCACA,wBACA,4BACA,sCACA,mCAEEC,GAA8C,IAC7CD,GACH,mCACA,wCAEEE,GAAyB,IAAIlriB,IAAI,CACnC,uCACA,qCACA,SAEEmriB,GAAoC,CAAC,mCAAoC,wCACzEC,GAAmD,IAClDD,GACH,mCACA;AAGJ,SAASE,GAAU58M,EAAU68M,GACzB,OAAOA,EAASxskB,KAAMwtB,GAAWmiW,EAAS1rV,WAAWzW,GACzD,CC/EA,MAAMi/iB,GAAa,CACfC,UAAW,YACXC,gBAAiB,yBAGfC,GAAsB,gBACtBC,GAA+B,gBAC/BC,GAA2B,IAAIh3iB,IAAI,CACrC,gBACA,gBACA,gBACA,cACA,WACA,gBACA,kBACA,WACA,cACA,WACA,oBACA,gBACA,eACA,mBACA,YACA,aACA,WACA,eACA,oBACA,eACA,cACA,cACA,mBACA,YACA,aACA,aACA,sBACA,mBACA,eACA,YACA,YACA,YACA,gBACA,sBACA,iBACA,OACA,OACA,cACA,YACA,qBACA,mBACA,mBACA,mBACA,eACA,cACA,eACA,cACA,eACA,iBACA,cACA,UACA,UACA,aACA,UACA,aACA,mBACA,mBACA,cACFr0B,IAAKmmH,GAAS,CAACA,EAAKp9G,cAAeo9G,KAC/Bmld,GAA2B,IAAIj3iB,IAAI,CACrC,CAAC,gBAAiB,CAAEtI,OAAQ,QAASrmB,KAAM,UAAW+gO,UAAW8nV,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","ignoreList":[]}